diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..9ea7b54
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+SOURCES/perl-5.24.4.tar.bz2
diff --git a/.perl.metadata b/.perl.metadata
new file mode 100644
index 0000000..dc47064
--- /dev/null
+++ b/.perl.metadata
@@ -0,0 +1 @@
+0606bb25bfe3e00e3e54fe858bd7247a104c3772 SOURCES/perl-5.24.4.tar.bz2
diff --git a/SOURCES/Compress-Raw-Zlib-2.071-Adapt-to-zlib-1.2.11.patch b/SOURCES/Compress-Raw-Zlib-2.071-Adapt-to-zlib-1.2.11.patch
new file mode 100644
index 0000000..c08dd17
--- /dev/null
+++ b/SOURCES/Compress-Raw-Zlib-2.071-Adapt-to-zlib-1.2.11.patch
@@ -0,0 +1,367 @@
+From 0c7af9e6cb05b436505e7f46ef49dcb6f791f30a Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= <ppisar@redhat.com>
+Date: Fri, 17 Feb 2017 11:00:21 +0100
+Subject: [PATCH] Adapt to zlib-1.2.11
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This is a fix ported from Compress-Raw-Zlib-2.072 that restores
+compatibility with zlib-1.2.11.
+
+CPAN RT#119762
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ Zlib.xs    | 220 +++++++++++++++++++++++++++++++++++++++++++++++--------------
+ t/02zlib.t |  11 +++-
+ 2 files changed, 178 insertions(+), 53 deletions(-)
+
+diff --git a/Zlib.xs b/Zlib.xs
+index d379f78..83d1423 100644
+--- a/Zlib.xs
++++ b/Zlib.xs
+@@ -74,6 +74,10 @@
+ #  define AT_LEAST_ZLIB_1_2_8
+ #endif
+ 
++#if  defined(ZLIB_VERNUM) && ZLIB_VERNUM >= 0x1290
++#  define AT_LEAST_ZLIB_1_2_9
++#endif
++
+ #ifdef USE_PPPORT_H
+ #  define NEED_sv_2pvbyte
+ #  define NEED_sv_2pv_nolen
+@@ -134,12 +138,13 @@ typedef struct di_stream {
+     uLong    dict_adler ;
+     int      last_error ;
+     bool     zip_mode ;
+-#define SETP_BYTE
++/* #define SETP_BYTE */
+ #ifdef SETP_BYTE
++    /* SETP_BYTE only works with zlib up to 1.2.8 */
+     bool     deflateParams_out_valid ;
+     Bytef    deflateParams_out_byte;
+ #else
+-#define deflateParams_BUFFER_SIZE       0x4000
++#define deflateParams_BUFFER_SIZE       0x40000
+     uLong    deflateParams_out_length;
+     Bytef*   deflateParams_out_buffer;
+ #endif
+@@ -636,6 +641,103 @@ char * string ;
+     return sv ;
+ }
+ 
++#if 0
++int
++flushToBuffer(di_stream* s, int flush)
++{
++    dTHX;
++    int ret ;
++    z_stream * strm = &s->stream;
++
++    Bytef* output = s->deflateParams_out_buffer ;
++
++    strm->next_in = NULL;
++    strm->avail_in = 0;
++    
++    uLong total_output = 0;
++    uLong have = 0;
++
++    do 
++    {
++        if (output)
++            output = (unsigned char *)saferealloc(output, total_output + s->bufsize);
++        else
++            output = (unsigned char *)safemalloc(s->bufsize);
++
++        strm->next_out  = output + total_output;
++        strm->avail_out = s->bufsize;
++
++        ret = deflate(strm, flush);    /* no bad return value */
++        //assert(ret != Z_STREAM_ERROR);  /* state not clobbered */
++        if(ret == Z_STREAM_ERROR)
++        {
++            safefree(output);
++            return ret;
++        }
++        have = s->bufsize - strm->avail_out;
++        total_output += have;
++
++        //fprintf(stderr, "FLUSH %s %d, return %d\n", flush_flags[flush], have, ret);
++
++    } while (strm->avail_out == 0);
++
++    s->deflateParams_out_buffer = output;
++    s->deflateParams_out_length = total_output; 
++
++    return Z_OK;
++}
++#endif
++
++#ifndef SETP_BYTE
++int
++flushParams(di_stream* s)
++{
++    dTHX;
++    int ret ;
++    z_stream * strm = &s->stream;
++
++    strm->next_in = NULL;
++    strm->avail_in = 0;
++    
++    Bytef* output = s->deflateParams_out_buffer ;
++    uLong total_output = s->deflateParams_out_length;
++
++    uLong have = 0;
++
++    do 
++    {
++        if (output)
++            output = (unsigned char *)saferealloc(output, total_output + s->bufsize);
++        else
++            output = (unsigned char *)safemalloc(s->bufsize);
++
++        strm->next_out  = output + total_output;
++        strm->avail_out = s->bufsize;
++
++        ret = deflateParams(&(s->stream), s->Level, s->Strategy);
++        /* fprintf(stderr, "deflateParams %d %s %lu\n", ret,
++            GetErrorString(ret),  s->bufsize - strm->avail_out); */
++
++        if (ret == Z_STREAM_ERROR) 
++            break;
++
++        have = s->bufsize - strm->avail_out;
++        total_output += have;
++
++
++    } while (ret == Z_BUF_ERROR) ;
++
++    if(ret == Z_STREAM_ERROR)
++        safefree(output);
++    else 
++    {
++        s->deflateParams_out_buffer = output;
++        s->deflateParams_out_length = total_output; 
++    }
++
++    return ret;
++}
++#endif /* ! SETP_BYTE */
+ 
+ #include "constants.h"
+ 
+@@ -991,20 +1093,24 @@ deflate (s, buf, output)
+     /* Check for saved output from deflateParams */
+     if (s->deflateParams_out_length) {
+         uLong plen = s->deflateParams_out_length ;
+-        /* printf("Copy %d bytes saved data\n", plen);*/
++        /* printf("Copy %lu bytes saved data\n", plen); */
+         if (s->stream.avail_out < plen) {
+-            /*printf("GROW from %d to %d\n", s->stream.avail_out,
+-                        SvLEN(output) + plen - s->stream.avail_out); */
+-            Sv_Grow(output, SvLEN(output) + plen - s->stream.avail_out) ;
++            /* printf("GROW from %d to %lu\n", s->stream.avail_out,
++                        SvLEN(output) + plen - s->stream.avail_out);  */
++             s->stream.next_out = (Bytef*) Sv_Grow(output, SvLEN(output) + plen - s->stream.avail_out) ;
++             s->stream.next_out += cur_length;
+         }
+         
+-        Copy(s->stream.next_out, s->deflateParams_out_buffer, plen, Bytef) ;	
+-        cur_length = cur_length + plen;
++        Copy(s->deflateParams_out_buffer, s->stream.next_out, plen, Bytef) ;	
++        cur_length += plen;
+         SvCUR_set(output, cur_length);
+-	s->stream.next_out += plen ;
+-	s->stream.avail_out = SvLEN(output) - cur_length ;
+-	increment = s->stream.avail_out;
+-	s->deflateParams_out_length = 0;
++        s->stream.next_out += plen ;
++        s->stream.avail_out = SvLEN(output) - cur_length ;
++        increment = s->stream.avail_out;
++
++        s->deflateParams_out_length = 0;
++        Safefree(s->deflateParams_out_buffer);
++        s->deflateParams_out_buffer = NULL;
+     }
+ #endif
+     RETVAL = Z_OK ;
+@@ -1027,6 +1133,12 @@ deflate (s, buf, output)
+         }
+ 
+         RETVAL = deflate(&(s->stream), Z_NO_FLUSH);
++        if (RETVAL != Z_STREAM_ERROR) {
++            int done = increment -  s->stream.avail_out ;
++            /* printf("std DEFLATEr returned %d '%s'  avail in %d, out %d wrote %d\n", RETVAL,
++            GetErrorString(RETVAL), s->stream.avail_in,
++s->stream.avail_out, done); */
++        }
+     
+         if (trace) {
+             printf("DEFLATE returned %d %s, avail in %d, out %d\n", RETVAL,
+@@ -1080,7 +1192,6 @@ flush(s, output, f=Z_FINISH)
+   CODE:
+     bufinc = s->bufsize;
+   
+-    s->stream.avail_in = 0; /* should be zero already anyway */
+   
+     /* retrieve the output buffer */
+     output = deRef_l(output, "flush") ;
+@@ -1108,20 +1219,24 @@ flush(s, output, f=Z_FINISH)
+     /* Check for saved output from deflateParams */
+     if (s->deflateParams_out_length) {
+         uLong plen = s->deflateParams_out_length ;
+-        /* printf("Copy %d bytes saved data\n", plen); */
++        /* printf("Copy %lu bytes saved data\n", plen); */
+         if (s->stream.avail_out < plen) {
+-            /* printf("GROW from %d to %d\n", s->stream.avail_out, 
++            /* printf("GROW from %d to %lu\n", s->stream.avail_out, 
+                         SvLEN(output) + plen - s->stream.avail_out); */
+-            Sv_Grow(output, SvLEN(output) + plen - s->stream.avail_out) ;
++            s->stream.next_out = (Bytef*) Sv_Grow(output, SvLEN(output) + plen - s->stream.avail_out) ;
++            s->stream.next_out += cur_length;
+         }
+         
+-        Copy(s->stream.next_out, s->deflateParams_out_buffer, plen, Bytef) ;	
+-        cur_length = cur_length + plen;
++        Copy(s->deflateParams_out_buffer, s->stream.next_out, plen, Bytef) ;	
++        cur_length += plen;
+         SvCUR_set(output, cur_length);
+-	s->stream.next_out += plen ;
+-	s->stream.avail_out = SvLEN(output) - cur_length ;
+-	increment = s->stream.avail_out;
+-	s->deflateParams_out_length = 0;
++        s->stream.next_out += plen ;
++        s->stream.avail_out = SvLEN(output) - cur_length ;
++        increment = s->stream.avail_out;
++
++        s->deflateParams_out_length = 0;
++        Safefree(s->deflateParams_out_buffer);
++        s->deflateParams_out_buffer = NULL;
+     }
+ #endif
+ 
+@@ -1145,9 +1260,15 @@ flush(s, output, f=Z_FINISH)
+         }
+ 
+         RETVAL = deflate(&(s->stream), f);
++        if (RETVAL != Z_STREAM_ERROR) {
++            int done = availableout -  s->stream.avail_out ;
++            /* printf("flush DEFLATEr returned %d '%s'  avail in %d, out %d wrote %d\n", RETVAL,
++            GetErrorString(RETVAL), s->stream.avail_in,
++s->stream.avail_out, done); */
++        }
+     
+         if (trace) {
+-            printf("flush DEFLATE returned %d %s, avail in %d, out %d\n", RETVAL,
++            printf("flush DEFLATE returned %d '%s', avail in %d, out %d\n", RETVAL,
+             GetErrorString(RETVAL), s->stream.avail_in, s->stream.avail_out); 
+             DispStream(s, "AFTER");
+         }
+@@ -1184,41 +1305,38 @@ _deflateParams(s, flags, level, strategy, bufsize)
+ 	int	level
+ 	int	strategy
+     	uLong	bufsize
++	bool changed = FALSE;
+     CODE:
+-	/* printf("_deflateParams(Flags %d Level %d Strategy %d Bufsize %d)\n", flags, level, strategy, bufsize); 
+-	printf("Before -- Level %d, Strategy %d, Bufsize %d\n", s->Level, s->Strategy, s->bufsize); */
+-	if (flags & 1)
+-	    s->Level = level ;
+-	if (flags & 2)
+-	    s->Strategy = strategy ;
+-        if (flags & 4) {
++        /* printf("_deflateParams(Flags %d Level %d Strategy %d Bufsize %d)\n", flags, level, strategy, bufsize); 
++        printf("Before -- Level %d, Strategy %d, Bufsize %d\n", s->Level, s->Strategy, s->bufsize); */
++        if (flags & 1 && level != s->Level) {
++            s->Level = level ;
++            changed = TRUE;
++        }
++        if (flags & 2 && strategy != s->Strategy) {
++            s->Strategy = strategy ;
++            changed = TRUE;
++        }
++        if (flags & 4)
+             s->bufsize = bufsize; 
+-	}
+-	/* printf("After --  Level %d, Strategy %d, Bufsize %d\n", s->Level, s->Strategy, s->bufsize);*/
++        if (changed) {
+ #ifdef SETP_BYTE
+-        s->stream.avail_in = 0; 
+-        s->stream.next_out = &(s->deflateParams_out_byte) ;
+-        s->stream.avail_out = 1;
+-	RETVAL = deflateParams(&(s->stream), s->Level, s->Strategy);
+-	s->deflateParams_out_valid = 
+-		(RETVAL == Z_OK && s->stream.avail_out == 0) ;
+-	/* printf("RETVAL %d, avail out %d, byte %c\n", RETVAL, s->stream.avail_out, s->deflateParams_out_byte); */
++            s->stream.avail_in = 0; 
++            s->stream.next_out = &(s->deflateParams_out_byte) ;
++            s->stream.avail_out = 1;
++            RETVAL = deflateParams(&(s->stream), s->Level, s->Strategy);
++            s->deflateParams_out_valid = 
++            (RETVAL == Z_OK && s->stream.avail_out == 0) ;
+ #else
+-	/* printf("Level %d Strategy %d, Prev Len %d\n", 
++            /* printf("Level %d Strategy %d, Prev Len %d\n", 
+                 s->Level, s->Strategy, s->deflateParams_out_length); */
+-        s->stream.avail_in = 0; 
+-        if (s->deflateParams_out_buffer == NULL)
+-            s->deflateParams_out_buffer = safemalloc(deflateParams_BUFFER_SIZE);
+-        s->stream.next_out = s->deflateParams_out_buffer ;
+-        s->stream.avail_out = deflateParams_BUFFER_SIZE;
+-
+-	RETVAL = deflateParams(&(s->stream), s->Level, s->Strategy);
+-	s->deflateParams_out_length = deflateParams_BUFFER_SIZE - s->stream.avail_out;
+-	/* printf("RETVAL %d, length out %d, avail %d\n", 
+-                    RETVAL, s->deflateParams_out_length, s->stream.avail_out ); */
++            RETVAL = flushParams(s);
+ #endif
++        }
++        else
++            RETVAL = Z_OK;
+     OUTPUT:
+-	RETVAL
++        RETVAL
+ 
+ 
+ int
+diff --git a/t/02zlib.t b/t/02zlib.t
+index 2c9aad6..5d024a9 100644
+--- a/t/02zlib.t
++++ b/t/02zlib.t
+@@ -27,7 +27,7 @@ BEGIN
+         $count = 232 ;
+     }
+     elsif ($] >= 5.006) {
+-        $count = 317 ;
++        $count = 320 ;
+     }
+     else {
+         $count = 275 ;
+@@ -559,6 +559,13 @@ SKIP:
+     is $x->get_Level(),    Z_BEST_SPEED;
+     is $x->get_Strategy(), Z_HUFFMAN_ONLY;
+      
++    # change both Level & Strategy again without any calls to deflate 
++    $status = $x->deflateParams(-Level => Z_DEFAULT_COMPRESSION, -Strategy => Z_DEFAULT_STRATEGY, -Bufsize => 1234) ;
++    cmp_ok $status, '==', Z_OK ;
++    
++    is $x->get_Level(),    Z_DEFAULT_COMPRESSION;
++    is $x->get_Strategy(), Z_DEFAULT_STRATEGY;
++     
+     $status = $x->deflate($goodbye, $Answer) ;
+     cmp_ok $status, '==', Z_OK ;
+     $input .= $goodbye;
+@@ -568,7 +575,7 @@ SKIP:
+     cmp_ok $status, '==', Z_OK ;
+     
+     is $x->get_Level(),    Z_NO_COMPRESSION;
+-    is $x->get_Strategy(), Z_HUFFMAN_ONLY;
++    is $x->get_Strategy(), Z_DEFAULT_STRATEGY;
+      
+     $status = $x->deflate($goodbye, $Answer) ;
+     cmp_ok $status, '==', Z_OK ;
+-- 
+2.7.4
+
diff --git a/SOURCES/Compress-Raw-Zlib-2.071-Conform-to-C90.patch b/SOURCES/Compress-Raw-Zlib-2.071-Conform-to-C90.patch
new file mode 100644
index 0000000..91d6096
--- /dev/null
+++ b/SOURCES/Compress-Raw-Zlib-2.071-Conform-to-C90.patch
@@ -0,0 +1,82 @@
+From 1f3ac68dac93b7b85f09427d188386aaff0d3f80 Mon Sep 17 00:00:00 2001
+From: Reini Urban <reini.urban@gmail.com>
+Date: Fri, 17 Feb 2017 12:06:27 +0100
+Subject: [PATCH] Conform to C90
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+The code failed to compile when building perl because perl adds -Werror=declaration-after-statement:
+
+gcc -c  -I/usr/include -D_REENTRANT -D_GNU_SOURCE -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fwrapv -fno-strict-aliasing -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -Werror=declaration-after-statement -Wextra -Wc++-compat -Wwrite-strings -g   -DVERSION=\"2.069\" -DXS_VERSION=\"2.069\" -fPIC "-I../.."  -DNO_VIZ -DZ_SOLO   -DGZIP_OS_CODE=3  Zlib.c
+Zlib.xs: In function 'flushParams':
+Zlib.xs:702:5: error: ISO C90 forbids mixed declarations and code [-Werror=declaration-after-statement]
+     Bytef* output = s->deflateParams_out_buffer ;
+     ^~~~~
+
+CPAN RT#120272
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ Zlib.xs | 22 +++++++++++-----------
+ 1 file changed, 11 insertions(+), 11 deletions(-)
+
+diff --git a/Zlib.xs b/Zlib.xs
+index 83d1423..7f4396a 100644
+--- a/Zlib.xs
++++ b/Zlib.xs
+@@ -696,14 +696,14 @@ flushParams(di_stream* s)
+     int ret ;
+     z_stream * strm = &s->stream;
+ 
+-    strm->next_in = NULL;
+-    strm->avail_in = 0;
+-    
+     Bytef* output = s->deflateParams_out_buffer ;
+     uLong total_output = s->deflateParams_out_length;
+ 
+     uLong have = 0;
+ 
++    strm->next_in = NULL;
++    strm->avail_in = 0;
++    
+     do 
+     {
+         if (output)
+@@ -1133,12 +1133,12 @@ deflate (s, buf, output)
+         }
+ 
+         RETVAL = deflate(&(s->stream), Z_NO_FLUSH);
+-        if (RETVAL != Z_STREAM_ERROR) {
++        /* if (RETVAL != Z_STREAM_ERROR) {
+             int done = increment -  s->stream.avail_out ;
+-            /* printf("std DEFLATEr returned %d '%s'  avail in %d, out %d wrote %d\n", RETVAL,
++            printf("std DEFLATEr returned %d '%s'  avail in %d, out %d wrote %d\n", RETVAL,
+             GetErrorString(RETVAL), s->stream.avail_in,
+-s->stream.avail_out, done); */
+-        }
++s->stream.avail_out, done);
++        } */
+     
+         if (trace) {
+             printf("DEFLATE returned %d %s, avail in %d, out %d\n", RETVAL,
+@@ -1260,12 +1260,12 @@ flush(s, output, f=Z_FINISH)
+         }
+ 
+         RETVAL = deflate(&(s->stream), f);
+-        if (RETVAL != Z_STREAM_ERROR) {
++        /* if (RETVAL != Z_STREAM_ERROR) {
+             int done = availableout -  s->stream.avail_out ;
+-            /* printf("flush DEFLATEr returned %d '%s'  avail in %d, out %d wrote %d\n", RETVAL,
++            printf("flush DEFLATEr returned %d '%s'  avail in %d, out %d wrote %d\n", RETVAL,
+             GetErrorString(RETVAL), s->stream.avail_in,
+-s->stream.avail_out, done); */
+-        }
++s->stream.avail_out, done);
++        } */
+     
+         if (trace) {
+             printf("flush DEFLATE returned %d '%s', avail in %d, out %d\n", RETVAL,
+-- 
+2.7.4
+
diff --git a/SOURCES/Pod-Html-license-clarification b/SOURCES/Pod-Html-license-clarification
new file mode 100644
index 0000000..bd567f1
--- /dev/null
+++ b/SOURCES/Pod-Html-license-clarification
@@ -0,0 +1,41 @@
+Date: Sun, 15 Mar 2015 21:22:10 -0600
+Subject: Re: Pod::Html license
+From: Tom Christiansen <tchrist53147@gmail.com>
+To: Petr Šabata <contyk@redhat.com>
+Cc: Tom Christiansen <tchrist@perl.com>, marcgreen@cpan.org,
+ jplesnik@redhat.com
+MIME-Version: 1.0
+Content-Transfer-Encoding: 8bit
+Content-Type: text/plain; charset=utf-8
+
+Yes, it was supposed to be licensed just like the rest of Perl.
+
+Sent from my Sprint phone
+
+Petr Šabata <contyk@redhat.com> wrote:
+
+>Marc, Tom,
+>
+>I'm reviewing licensing of our perl package in Fedora and 
+>noticed Pod::HTML and its pod2html script are licensed under
+>the Artistic license (only).
+>
+>This is an issue for us as this license isn't considered free by
+>FSF [0].  Unless the license of this core component changes, we
+>will have to drop it from the tarball and remove support for it
+>from all the modules we ship that use it, such as Module::Build
+>or Module::Install.
+>
+>What I've seen in the past is authors originally claiming their
+>module was released under Artistic while what they actually meant
+>was the common `the same as perl itself', i.e. `GPL+/Aristic' [1],
+>an FSF free license.  Is it possible this is also the case
+>of Pod::Html?
+>
+>Thanks,
+>Petr
+>
+>(also CC'ing Jitka, the primary package maintainer in Fedora)
+>
+>[0] https://www.gnu.org/licenses/license-list.html#ArtisticLicense
+>[1] https://www.gnu.org/licenses/license-list.html#PerlLicense
diff --git a/SOURCES/gendep.macros b/SOURCES/gendep.macros
new file mode 100644
index 0000000..13ac79e
--- /dev/null
+++ b/SOURCES/gendep.macros
@@ -0,0 +1,1988 @@
+%global gendep_perl \
+Requires: perl(:VERSION) >= 5.0.0 \
+Requires: perl(:VERSION) >= 5.10.1 \
+Requires: perl(:VERSION) >= 5.3.0 \
+Requires: perl(:VERSION) >= 5.5.0 \
+Requires: perl(:VERSION) >= 5.6.0 \
+Requires: perl(:VERSION) >= 5.7.0 \
+Requires: perl(:VERSION) >= 5.7.3 \
+Requires: perl(:VERSION) >= 5.8.0 \
+Requires: perl(:VERSION) >= 5.9.1 \
+Requires: perl(:VERSION) >= 5.9.4 \
+Requires: perl(B) \
+Requires: perl(B::Concise) \
+Requires: perl(B::Op_private) \
+Requires: perl(B::Terse) \
+Requires: perl(Carp) \
+Requires: perl(Class::Struct) \
+Requires: perl(Config) \
+Requires: perl(Cwd) \
+Requires: perl(Exporter) \
+Requires: perl(ExtUtils::Constant::Base) \
+Requires: perl(ExtUtils::Constant::Utils) \
+Requires: perl(ExtUtils::Constant::XS) \
+Requires: perl(Fcntl) \
+Requires: perl(File::Basename) \
+Requires: perl(File::Path) \
+Requires: perl(File::Spec) \
+Requires: perl(File::Spec::Functions) \
+Requires: perl(I18N::LangTags) \
+Requires: perl(IO::File) \
+Requires: perl(IPC::Open3) \
+Requires: perl(Opcode) >= 1.01 \
+Requires: perl(POSIX) \
+Requires: perl(Scalar::Util) >= 1.10 \
+Requires: perl(Symbol) \
+Requires: perl(Text::Tabs) \
+Requires: perl(Text::Wrap) \
+Requires: perl(Tie::Handle) \
+Requires: perl(Tie::Hash) \
+Requires: perl(Tie::StdHandle) \
+Requires: perl(Time::tm) \
+Requires: perl(Unicode::Normalize) \
+Requires: perl(XSLoader) \
+Requires: perl(_charnames) \
+Requires: perl(bytes) \
+Requires: perl(charnames) \
+Requires: perl(constant) \
+Requires: perl(feature) \
+Requires: perl(if) \
+Requires: perl(integer) \
+Requires: perl(overload) \
+Requires: perl(parent) \
+Requires: perl(re) \
+Requires: perl(strict) \
+Requires: perl(subs) \
+Requires: perl(threads) \
+Requires: perl(threads::shared) \
+Requires: perl(unicore::Name) \
+Requires: perl(utf8) \
+Requires: perl(vars) \
+Requires: perl(warnings) \
+Requires: perl(warnings::register) \
+Provides: perl(AnyDBM_File) = 1.01 \
+Provides: perl(AutoLoader) = 5.74 \
+Provides: perl(AutoSplit) = 1.06 \
+Provides: perl(B) = 1.62 \
+Provides: perl(B::Concise) = 0.996 \
+Provides: perl(B::Deparse) = 1.37 \
+Provides: perl(B::OBJECT) \
+Provides: perl(B::Op_private) = 5.024004 \
+Provides: perl(B::Showlex) = 1.05 \
+Provides: perl(B::Terse) = 1.06 \
+Provides: perl(B::Xref) = 1.05 \
+Provides: perl(Benchmark) = 1.22 \
+Provides: perl(Class::Struct) = 0.65 \
+Provides: perl(Class::Struct::Tie_ISA) \
+Provides: perl(Config) = 5.024004 \
+Provides: perl(Config::Extensions) = 0.01 \
+Provides: perl(DB) = 1.08 \
+Provides: perl(DBM_Filter) = 0.06 \
+Provides: perl(DBM_Filter::compress) = 0.03 \
+Provides: perl(DBM_Filter::encode) = 0.03 \
+Provides: perl(DBM_Filter::int32) = 0.03 \
+Provides: perl(DBM_Filter::null) = 0.03 \
+Provides: perl(DBM_Filter::utf8) = 0.03 \
+Provides: perl(DirHandle) = 1.04 \
+Provides: perl(Dumpvalue) = 1.18 \
+Provides: perl(DynaLoader) = 1.38 \
+Provides: perl(EVERY) \
+Provides: perl(EVERY::LAST) \
+Provides: perl(English) = 1.10 \
+Provides: perl(ExtUtils::Constant) = 0.23 \
+Provides: perl(ExtUtils::Constant::Base) = 0.05 \
+Provides: perl(ExtUtils::Constant::ProxySubs) = 0.08 \
+Provides: perl(ExtUtils::Constant::Utils) = 0.03 \
+Provides: perl(ExtUtils::Constant::XS) = 0.03 \
+Provides: perl(Fcntl) = 1.13 \
+Provides: perl(File::Basename) = 2.85 \
+Provides: perl(File::Compare) = 1.1006 \
+Provides: perl(File::Copy) = 2.31 \
+Provides: perl(File::DosGlob) = 1.12 \
+Provides: perl(File::Find) = 1.34 \
+Provides: perl(File::Glob) = 1.26 \
+Provides: perl(File::stat) = 1.07 \
+Provides: perl(FileCache) = 1.09 \
+Provides: perl(FileHandle) = 2.02 \
+Provides: perl(FindBin) = 1.51 \
+Provides: perl(GDBM_File) = 1.15 \
+Provides: perl(Getopt::Std) = 1.11 \
+Provides: perl(Hash::Util) = 0.19 \
+Provides: perl(Hash::Util::FieldHash) = 1.19 \
+Provides: perl(I18N::Collate) = 1.02 \
+Provides: perl(I18N::LangTags) = 0.40 \
+Provides: perl(I18N::LangTags::Detect) = 1.05 \
+Provides: perl(I18N::LangTags::List) = 0.39 \
+Provides: perl(I18N::Langinfo) = 0.13 \
+Provides: perl(IPC::Open2) = 1.04 \
+Provides: perl(IPC::Open3) = 1.20 \
+Provides: perl(NDBM_File) = 1.14 \
+Provides: perl(NEXT) = 0.65 \
+Provides: perl(NEXT::ACTUAL) \
+Provides: perl(NEXT::ACTUAL::DISTINCT) \
+Provides: perl(NEXT::ACTUAL::UNSEEN) \
+Provides: perl(NEXT::DISTINCT) \
+Provides: perl(NEXT::DISTINCT::ACTUAL) \
+Provides: perl(NEXT::UNSEEN) \
+Provides: perl(NEXT::UNSEEN::ACTUAL) \
+Provides: perl(Net::hostent) = 1.01 \
+Provides: perl(Net::netent) = 1.00 \
+Provides: perl(Net::protoent) = 1.00 \
+Provides: perl(Net::servent) = 1.01 \
+Provides: perl(O) = 1.01 \
+Provides: perl(ODBM_File) = 1.14 \
+Provides: perl(Opcode) = 1.34 \
+Provides: perl(POSIX) = 1.65 \
+Provides: perl(POSIX::SigAction) \
+Provides: perl(POSIX::SigRt) \
+Provides: perl(POSIX::SigSet) \
+Provides: perl(PerlIO) = 1.09 \
+Provides: perl(PerlIO::encoding) = 0.24 \
+Provides: perl(PerlIO::mmap) = 0.016 \
+Provides: perl(PerlIO::scalar) = 0.24 \
+Provides: perl(PerlIO::via) = 0.17 \
+Provides: perl(Pod::Functions) = 1.10 \
+Provides: perl(SDBM_File) = 1.14 \
+Provides: perl(Safe) = 2.39 \
+Provides: perl(Search::Dict) = 1.07 \
+Provides: perl(SelectSaver) = 1.02 \
+Provides: perl(Symbol) = 1.07 \
+Provides: perl(Sys::Hostname) = 1.20 \
+Provides: perl(Term::Complete) = 1.403 \
+Provides: perl(Term::ReadLine) = 1.15 \
+Provides: perl(Term::ReadLine::Stub) \
+Provides: perl(Term::ReadLine::TermCap) \
+Provides: perl(Term::ReadLine::Tk) \
+Provides: perl(Text::Abbrev) = 1.02 \
+Provides: perl(Thread) = 3.04 \
+Provides: perl(Thread::Semaphore) = 2.12 \
+Provides: perl(Tie::Array) = 1.06 \
+Provides: perl(Tie::ExtraHash) \
+Provides: perl(Tie::File) = 1.02 \
+Provides: perl(Tie::File::Cache) \
+Provides: perl(Tie::File::Heap) \
+Provides: perl(Tie::Handle) = 4.2 \
+Provides: perl(Tie::Hash) \
+Provides: perl(Tie::Hash) = 1.05 \
+Provides: perl(Tie::Hash::NamedCapture) = 0.09 \
+Provides: perl(Tie::Memoize) = 1.1 \
+Provides: perl(Tie::RefHash) = 1.39 \
+Provides: perl(Tie::RefHash::Nestable) \
+Provides: perl(Tie::Scalar) = 1.04 \
+Provides: perl(Tie::StdArray) \
+Provides: perl(Tie::StdHandle) = 4.4 \
+Provides: perl(Tie::StdHash) \
+Provides: perl(Tie::StdScalar) \
+Provides: perl(Tie::SubstrHash) = 1.00 \
+Provides: perl(Time::gmtime) = 1.03 \
+Provides: perl(Time::localtime) = 1.02 \
+Provides: perl(Time::tm) = 1.00 \
+Provides: perl(UNIVERSAL) = 1.13 \
+Provides: perl(Unicode::UCD) = 0.64 \
+Provides: perl(User::grent) = 1.01 \
+Provides: perl(User::pwent) = 1.00 \
+Provides: perl(_charnames) = 1.43 \
+Provides: perl(arybase) = 0.11 \
+Provides: perl(attributes) = 0.27 \
+Provides: perl(autouse) = 1.11 \
+Provides: perl(base) = 2.23 \
+Provides: perl(blib) = 1.06 \
+Provides: perl(bytes) = 1.05 \
+Provides: perl(bytes_heavy.pl) \
+Provides: perl(charnames) = 1.43 \
+Provides: perl(deprecate) = 0.03 \
+Provides: perl(diagnostics) = 1.34 \
+Provides: perl(dumpvar.pl) \
+Provides: perl(encoding::warnings) = 0.12 \
+Provides: perl(feature) = 1.42 \
+Provides: perl(fields) = 2.23 \
+Provides: perl(filetest) = 1.03 \
+Provides: perl(if) = 0.0606 \
+Provides: perl(less) = 0.03 \
+Provides: perl(lib) = 0.63 \
+Provides: perl(locale) = 1.09 \
+Provides: perl(mro) = 1.18 \
+Provides: perl(ops) = 1.02 \
+Provides: perl(overload) = 1.26 \
+Provides: perl(overload::numbers) \
+Provides: perl(overloading) = 0.02 \
+Provides: perl(perl5db.pl) \
+Provides: perl(sigtrap) = 1.08 \
+Provides: perl(sort) = 2.02 \
+Provides: perl(subs) = 1.02 \
+Provides: perl(vars) = 1.03 \
+Provides: perl(vmsish) = 1.04 \
+Provides: perl(warnings::register) = 1.04 \
+Provides: perl(x86-64) = 4:5.24.4-397.RC1.fc26 \
+%{nil}
+%global gendep_perl_Archive_Tar \
+Requires: perl(:VERSION) >= 5.5.0 \
+Requires: perl(Archive::Tar) \
+Requires: perl(Archive::Tar::Constant) \
+Requires: perl(Archive::Tar::File) \
+Requires: perl(Carp) \
+Requires: perl(Config) \
+Requires: perl(Cwd) \
+Requires: perl(Data::Dumper) \
+Requires: perl(Exporter) \
+Requires: perl(File::Basename) \
+Requires: perl(File::Find) \
+Requires: perl(File::Path) \
+Requires: perl(File::Spec) \
+Requires: perl(File::Spec::Unix) \
+Requires: perl(Getopt::Long) \
+Requires: perl(Getopt::Std) \
+Requires: perl(IO::File) \
+Requires: perl(IO::Handle) \
+Requires: perl(IO::Zlib) \
+Requires: perl(Pod::Usage) \
+Requires: perl(constant) \
+Requires: perl(strict) \
+Requires: perl(vars) \
+Requires: perl(warnings) \
+Provides: perl(Archive::Tar) = 2.04 \
+Provides: perl(Archive::Tar::Constant) = 2.04 \
+Provides: perl(Archive::Tar::File) = 2.04 \
+%{nil}
+%global gendep_perl_Attribute_Handlers \
+Requires: perl(:VERSION) >= 5.6.0 \
+Requires: perl(Carp) \
+Requires: perl(strict) \
+Requires: perl(vars) \
+Requires: perl(warnings) \
+Provides: perl(Attribute::Handlers) = 0.99 \
+%{nil}
+%global gendep_perl_B_Debug \
+Requires: perl(:VERSION) >= 5.6.0 \
+Requires: perl(B) \
+Requires: perl(Config) \
+Requires: perl(strict) \
+Provides: perl(B::Debug) = 1.23 \
+%{nil}
+%global gendep_perl_CPAN \
+Requires: perl(:VERSION) >= 5.6.0 \
+Requires: perl(App::Cpan) \
+Requires: perl(CPAN) >= 1.80 \
+Requires: perl(CPAN::Author) \
+Requires: perl(CPAN::Bundle) \
+Requires: perl(CPAN::CacheMgr) \
+Requires: perl(CPAN::Complete) \
+Requires: perl(CPAN::Debug) \
+Requires: perl(CPAN::DeferredCode) \
+Requires: perl(CPAN::Distribution) \
+Requires: perl(CPAN::Distroprefs) \
+Requires: perl(CPAN::Distrostatus) \
+Requires: perl(CPAN::Exception::RecursiveDependency) \
+Requires: perl(CPAN::Exception::yaml_not_installed) \
+Requires: perl(CPAN::Exception::yaml_process_error) \
+Requires: perl(CPAN::FTP) \
+Requires: perl(CPAN::FTP::netrc) \
+Requires: perl(CPAN::HTTP::Credentials) \
+Requires: perl(CPAN::HandleConfig) \
+Requires: perl(CPAN::Index) >= 1.93 \
+Requires: perl(CPAN::InfoObj) \
+Requires: perl(CPAN::LWP::UserAgent) \
+Requires: perl(CPAN::Mirrors) \
+Requires: perl(CPAN::Module) \
+Requires: perl(CPAN::Prompt) \
+Requires: perl(CPAN::Queue) \
+Requires: perl(CPAN::Shell) \
+Requires: perl(CPAN::Tarzip) \
+Requires: perl(CPAN::URL) \
+Requires: perl(CPAN::Version) \
+Requires: perl(Carp) \
+Requires: perl(Config) \
+Requires: perl(Cwd) \
+Requires: perl(DirHandle) \
+Requires: perl(Exporter) \
+Requires: perl(ExtUtils::MakeMaker) \
+Requires: perl(Fcntl) \
+Requires: perl(File::Basename) \
+Requires: perl(File::Copy) \
+Requires: perl(File::Find) \
+Requires: perl(File::Path) \
+Requires: perl(File::Spec) \
+Requires: perl(File::Spec::Functions) \
+Requires: perl(FileHandle) \
+Requires: perl(Getopt::Std) \
+Requires: perl(HTTP::Tiny) >= 0.005 \
+Requires: perl(Net::Ping) \
+Requires: perl(Safe) \
+Requires: perl(Sys::Hostname) \
+Requires: perl(Text::ParseWords) \
+Requires: perl(Text::Wrap) \
+Requires: perl(autouse) \
+Requires: perl(constant) \
+Requires: perl(if) \
+Requires: perl(overload) \
+Requires: perl(strict) \
+Requires: perl(vars) \
+Requires: perl(warnings) \
+Provides: perl(App::Cpan) = 1.63 \
+Provides: perl(CPAN) = 2.11 \
+Provides: perl(CPAN::Author) = 5.5002 \
+Provides: perl(CPAN::Bundle) = 5.5001 \
+Provides: perl(CPAN::CacheMgr) = 5.5002 \
+Provides: perl(CPAN::Complete) = 5.5001 \
+Provides: perl(CPAN::Debug) = 5.5001 \
+Provides: perl(CPAN::DeferredCode) = 5.50 \
+Provides: perl(CPAN::Distribution) = 2.04 \
+Provides: perl(CPAN::Distroprefs) = 6.0001 \
+Provides: perl(CPAN::Distroprefs::Iterator) \
+Provides: perl(CPAN::Distroprefs::Pref) \
+Provides: perl(CPAN::Distroprefs::Result) \
+Provides: perl(CPAN::Distroprefs::Result::Error) \
+Provides: perl(CPAN::Distroprefs::Result::Fatal) \
+Provides: perl(CPAN::Distroprefs::Result::Success) \
+Provides: perl(CPAN::Distroprefs::Result::Warning) \
+Provides: perl(CPAN::Distrostatus) = 5.5 \
+Provides: perl(CPAN::Eval) \
+Provides: perl(CPAN::Exception::RecursiveDependency) = 5.5 \
+Provides: perl(CPAN::Exception::blocked_urllist) = 1.001 \
+Provides: perl(CPAN::Exception::yaml_not_installed) = 5.5 \
+Provides: perl(CPAN::Exception::yaml_process_error) = 5.5 \
+Provides: perl(CPAN::FTP) = 5.5006 \
+Provides: perl(CPAN::FTP::netrc) = 1.01 \
+Provides: perl(CPAN::FirstTime) = 5.5307 \
+Provides: perl(CPAN::HTTP::Client) = 1.9601 \
+Provides: perl(CPAN::HTTP::Credentials) = 1.9601 \
+Provides: perl(CPAN::HandleConfig) = 5.5006 \
+Provides: perl(CPAN::Index) = 1.9601 \
+Provides: perl(CPAN::InfoObj) = 5.5 \
+Provides: perl(CPAN::Kwalify) = 5.50 \
+Provides: perl(CPAN::LWP::UserAgent) = 1.9601 \
+Provides: perl(CPAN::Mirrored::By) \
+Provides: perl(CPAN::Mirrors) = 1.9601 \
+Provides: perl(CPAN::Module) = 5.5002 \
+Provides: perl(CPAN::Nox) = 5.5001 \
+Provides: perl(CPAN::Plugin) = 0.95 \
+Provides: perl(CPAN::Plugin::Specfile) = 0.01 \
+Provides: perl(CPAN::Prompt) = 5.5 \
+Provides: perl(CPAN::Queue) = 5.5002 \
+Provides: perl(CPAN::Queue::Item) \
+Provides: perl(CPAN::Shell) = 5.5005 \
+Provides: perl(CPAN::Tarzip) = 5.5012 \
+Provides: perl(CPAN::URL) = 5.5 \
+Provides: perl(CPAN::Version) = 5.5003 \
+%{nil}
+%global gendep_perl_CPAN_Meta \
+Requires: perl(:VERSION) >= 5.6.0 \
+Requires: perl(CPAN::Meta::Converter) >= 2.141170 \
+Requires: perl(CPAN::Meta::Feature) \
+Requires: perl(CPAN::Meta::Prereqs) \
+Requires: perl(CPAN::Meta::Requirements) >= 2.121 \
+Requires: perl(CPAN::Meta::Validator) \
+Requires: perl(Carp) \
+Requires: perl(Parse::CPAN::Meta) >= 1.4400 \
+Requires: perl(Parse::CPAN::Meta) >= 1.4414 \
+Requires: perl(Scalar::Util) \
+Requires: perl(strict) \
+Requires: perl(warnings) \
+Provides: perl(CPAN::Meta) = 2.150005 \
+Provides: perl(CPAN::Meta::Converter) = 2.150005 \
+Provides: perl(CPAN::Meta::Feature) = 2.150005 \
+Provides: perl(CPAN::Meta::History) = 2.150005 \
+Provides: perl(CPAN::Meta::Merge) = 2.150005 \
+Provides: perl(CPAN::Meta::Prereqs) = 2.150005 \
+Provides: perl(CPAN::Meta::Spec) = 2.150005 \
+Provides: perl(CPAN::Meta::Validator) = 2.150005 \
+%{nil}
+%global gendep_perl_CPAN_Meta_Requirements \
+Requires: perl(:VERSION) >= 5.6.0 \
+Requires: perl(Carp) \
+Requires: perl(strict) \
+Requires: perl(warnings) \
+Provides: perl(CPAN::Meta::Requirements) = 2.132000 \
+%{nil}
+%global gendep_perl_CPAN_Meta_YAML \
+Requires: perl(:VERSION) >= 5.8.1 \
+Requires: perl(B) \
+Requires: perl(Exporter) \
+Requires: perl(Scalar::Util) \
+Requires: perl(strict) \
+Requires: perl(warnings) \
+Provides: perl(CPAN::Meta::YAML) = 0.018 \
+%{nil}
+%global gendep_perl_Carp \
+Requires: perl(Carp) \
+Requires: perl(Exporter) \
+Requires: perl(strict) \
+Requires: perl(warnings) \
+Provides: perl(Carp) = 1.40 \
+Provides: perl(Carp::Heavy) = 1.40 \
+Provides: perl(Carp::Heavy) = 1.40 \
+%{nil}
+%global gendep_perl_Compress_Raw_Bzip2 \
+Requires: perl(:VERSION) >= 5.6.0 \
+Requires: perl(Carp) \
+Requires: perl(Exporter) \
+Requires: perl(bytes) \
+Requires: perl(constant) \
+Requires: perl(strict) \
+Requires: perl(warnings) \
+Provides: perl(Compress::Raw::Bzip2) = 2.069 \
+%{nil}
+%global gendep_perl_Compress_Raw_Zlib \
+Requires: perl(:VERSION) >= 5.6.0 \
+Requires: perl(Carp) \
+Requires: perl(Exporter) \
+Requires: perl(bytes) \
+Requires: perl(constant) \
+Requires: perl(strict) \
+Requires: perl(warnings) \
+Provides: perl(Compress::Raw::Zlib) = 2.069 \
+%{nil}
+%global gendep_perl_Config_Perl_V \
+Requires: perl(Config) \
+Requires: perl(Exporter) \
+Requires: perl(strict) \
+Requires: perl(vars) \
+Requires: perl(warnings) \
+Provides: perl(Config::Perl::V) = 0.25 \
+%{nil}
+%global gendep_perl_DB_File \
+Requires: perl(:VERSION) >= 5.8.3 \
+Requires: perl(Carp) \
+Requires: perl(Exporter) \
+Requires: perl(File::Spec) \
+Requires: perl(Tie::Hash) \
+Requires: perl(strict) \
+Requires: perl(warnings) \
+Provides: perl(DB_File) = 1.835 \
+Provides: perl(DB_File::BTREEINFO) \
+Provides: perl(DB_File::HASHINFO) \
+Provides: perl(DB_File::RECNOINFO) \
+%{nil}
+%global gendep_perl_Data_Dumper \
+Requires: perl(:VERSION) >= 5.6.0 \
+Requires: perl(Carp) \
+Requires: perl(Exporter) \
+Requires: perl(constant) \
+Requires: perl(overload) \
+Provides: perl(Data::Dumper) = 2.160 \
+%{nil}
+%global gendep_perl_Devel_PPPort \
+Requires: perl(strict) \
+Requires: perl(vars) \
+Provides: perl(Devel::PPPort) = 3.32 \
+%{nil}
+%global gendep_perl_Devel_Peek \
+Requires: perl(Exporter) \
+Requires: perl(XSLoader) \
+Provides: perl(Devel::Peek) = 1.23 \
+%{nil}
+%global gendep_perl_Devel_SelfStubber \
+Requires: perl(File::Spec) \
+Requires: perl(SelfLoader) \
+Provides: perl(Devel::SelfStubber) = 1.05 \
+%{nil}
+%global gendep_perl_Digest \
+Requires: perl(Carp) \
+Requires: perl(Digest) \
+Requires: perl(Exporter) \
+Requires: perl(strict) \
+Requires: perl(vars) \
+Provides: perl(Digest) = 1.17 \
+Provides: perl(Digest::base) = 1.16 \
+Provides: perl(Digest::file) = 1.16 \
+%{nil}
+%global gendep_perl_Digest_MD5 \
+Requires: perl(Exporter) \
+Requires: perl(strict) \
+Requires: perl(vars) \
+Provides: perl(Digest::MD5) = 2.54 \
+%{nil}
+%global gendep_perl_Digest_SHA \
+Requires: perl(:VERSION) >= 5.3.0 \
+Requires: perl(DynaLoader) \
+Requires: perl(Exporter) \
+Requires: perl(Fcntl) \
+Requires: perl(Getopt::Long) \
+Requires: perl(integer) \
+Requires: perl(strict) \
+Requires: perl(vars) \
+Requires: perl(warnings) \
+Provides: perl(Digest::SHA) = 5.95 \
+%{nil}
+%global gendep_perl_Encode \
+Requires: perl(:VERSION) >= 5.8.0 \
+Requires: perl(:VERSION) >= 5.8.1 \
+Requires: perl(Carp) \
+Requires: perl(Encode) \
+Requires: perl(Encode::Alias) \
+Requires: perl(Encode::CJKConstants) \
+Requires: perl(Encode::CN::HZ) \
+Requires: perl(Encode::Config) \
+Requires: perl(Encode::Encoding) \
+Requires: perl(Encode::Guess) \
+Requires: perl(Encode::JP::JIS7) \
+Requires: perl(Encode::KR::2022_KR) \
+Requires: perl(Encode::MIME::Header) \
+Requires: perl(Encode::Unicode) \
+Requires: perl(Exporter) >= 5.57 \
+Requires: perl(File::Basename) \
+Requires: perl(Getopt::Long) \
+Requires: perl(Getopt::Std) \
+Requires: perl(MIME::Base64) \
+Requires: perl(XSLoader) \
+Requires: perl(bytes) \
+Requires: perl(constant) \
+Requires: perl(overload) \
+Requires: perl(parent) \
+Requires: perl(re) \
+Requires: perl(strict) \
+Requires: perl(utf8) \
+Requires: perl(vars) \
+Requires: perl(warnings) \
+Provides: perl(Encode) = 2.80 \
+Provides: perl(Encode::Alias) = 2.20 \
+Provides: perl(Encode::Byte) = 2.4 \
+Provides: perl(Encode::CJKConstants) = 2.2 \
+Provides: perl(Encode::CN) = 2.3 \
+Provides: perl(Encode::CN::HZ) = 2.7 \
+Provides: perl(Encode::Config) = 2.5 \
+Provides: perl(Encode::EBCDIC) = 2.2 \
+Provides: perl(Encode::Encoder) = 2.3 \
+Provides: perl(Encode::Encoding) = 2.7 \
+Provides: perl(Encode::GSM0338) = 2.5 \
+Provides: perl(Encode::Guess) = 2.6 \
+Provides: perl(Encode::Internal) \
+Provides: perl(Encode::JP) = 2.4 \
+Provides: perl(Encode::JP::H2Z) = 2.2 \
+Provides: perl(Encode::JP::JIS7) = 2.5 \
+Provides: perl(Encode::KR) = 2.3 \
+Provides: perl(Encode::KR::2022_KR) = 2.3 \
+Provides: perl(Encode::MIME::Header) = 2.19 \
+Provides: perl(Encode::MIME::Header::ISO_2022_JP) = 1.4 \
+Provides: perl(Encode::MIME::Name) = 1.1 \
+Provides: perl(Encode::Symbol) = 2.2 \
+Provides: perl(Encode::TW) = 2.3 \
+Provides: perl(Encode::UTF_EBCDIC) \
+Provides: perl(Encode::Unicode) = 2.15 \
+Provides: perl(Encode::Unicode::UTF7) = 2.8 \
+Provides: perl(Encode::XS) \
+Provides: perl(Encode::utf8) \
+%{nil}
+%global gendep_perl_Encode_devel \
+Requires: perl(Config) \
+Requires: perl(File::Find) \
+Requires: perl(Getopt::Std) \
+Requires: perl(constant) \
+Requires: perl(strict) \
+Requires: perl(vars) \
+Requires: perl(warnings) \
+%{nil}
+%global gendep_perl_Env \
+Requires: perl(Config) \
+Requires: perl(Tie::Array) \
+Provides: perl(Env) = 1.04 \
+Provides: perl(Env::Array) \
+Provides: perl(Env::Array::VMS) \
+%{nil}
+%global gendep_perl_Errno \
+Requires: perl(Config) \
+Requires: perl(Exporter) \
+Requires: perl(strict) \
+Provides: perl(Errno) = 1.25 \
+%{nil}
+%global gendep_perl_Exporter \
+Requires: perl(:VERSION) >= 5.6.0 \
+Requires: perl(Exporter) \
+Requires: perl(strict) \
+Provides: perl(Exporter) = 5.72 \
+Provides: perl(Exporter::Heavy) \
+%{nil}
+%global gendep_perl_ExtUtils_CBuilder \
+Requires: perl(Config) \
+Requires: perl(Cwd) \
+Requires: perl(ExtUtils::CBuilder::Base) \
+Requires: perl(ExtUtils::CBuilder::Platform::Unix) \
+Requires: perl(File::Basename) \
+Requires: perl(File::Path) \
+Requires: perl(File::Spec) \
+Requires: perl(File::Spec::Functions) \
+Requires: perl(File::Temp) \
+Requires: perl(IO::File) \
+Requires: perl(IPC::Cmd) \
+Requires: perl(Perl::OSType) \
+Requires: perl(Text::ParseWords) \
+Requires: perl(strict) \
+Requires: perl(vars) \
+Requires: perl(warnings) \
+Provides: perl(ExtUtils::CBuilder) = 0.280225 \
+Provides: perl(ExtUtils::CBuilder::Base) = 0.280225 \
+Provides: perl(ExtUtils::CBuilder::Platform::Unix) = 0.280225 \
+Provides: perl(ExtUtils::CBuilder::Platform::VMS) = 0.280225 \
+Provides: perl(ExtUtils::CBuilder::Platform::Windows) = 0.280225 \
+Provides: perl(ExtUtils::CBuilder::Platform::Windows::BCC) = 0.280225 \
+Provides: perl(ExtUtils::CBuilder::Platform::Windows::GCC) = 0.280225 \
+Provides: perl(ExtUtils::CBuilder::Platform::Windows::MSVC) = 0.280225 \
+Provides: perl(ExtUtils::CBuilder::Platform::aix) = 0.280225 \
+Provides: perl(ExtUtils::CBuilder::Platform::android) = 0.280225 \
+Provides: perl(ExtUtils::CBuilder::Platform::cygwin) = 0.280225 \
+Provides: perl(ExtUtils::CBuilder::Platform::darwin) = 0.280225 \
+Provides: perl(ExtUtils::CBuilder::Platform::dec_osf) = 0.280225 \
+Provides: perl(ExtUtils::CBuilder::Platform::linux) = 0.280206 \
+Provides: perl(ExtUtils::CBuilder::Platform::os2) = 0.280225 \
+%{nil}
+%global gendep_perl_ExtUtils_Command \
+Requires: perl(:VERSION) >= 5.5.30 \
+Requires: perl(Exporter) \
+Requires: perl(strict) \
+Requires: perl(vars) \
+Provides: perl(ExtUtils::Command) = 7.10 \
+%{nil}
+%global gendep_perl_ExtUtils_Embed \
+Requires: perl(Config) \
+Requires: perl(Exporter) \
+Requires: perl(File::Spec) \
+Requires: perl(strict) \
+Requires: perl(vars) \
+Provides: perl(ExtUtils::Embed) = 1.33 \
+%{nil}
+%global gendep_perl_ExtUtils_Install \
+Requires: perl(:VERSION) >= 5.5.30 \
+Requires: perl(AutoSplit) \
+Requires: perl(Carp) \
+Requires: perl(Config) \
+Requires: perl(Cwd) \
+Requires: perl(Exporter) \
+Requires: perl(ExtUtils::MakeMaker) \
+Requires: perl(ExtUtils::Packlist) \
+Requires: perl(File::Basename) \
+Requires: perl(File::Compare) \
+Requires: perl(File::Copy) \
+Requires: perl(File::Find) \
+Requires: perl(File::Path) \
+Requires: perl(File::Spec) \
+Requires: perl(strict) \
+Requires: perl(vars) \
+Provides: perl(ExtUtils::Install) = 2.04 \
+Provides: perl(ExtUtils::Install::Warn) \
+Provides: perl(ExtUtils::Installed) = 2.04 \
+Provides: perl(ExtUtils::Packlist) = 2.04 \
+%{nil}
+%global gendep_perl_ExtUtils_MM_Utils \
+Requires: perl(:VERSION) >= 5.6.0 \
+Requires: perl(strict) \
+Requires: perl(vars) \
+Provides: perl(ExtUtils::MM::Utils) = 7.11 \
+%{nil}
+%global gendep_perl_ExtUtils_MakeMaker \
+Requires: perl(:VERSION) >= 5.6.0 \
+Requires: perl(:VERSION) >= 5.6.2 \
+Requires: perl(Carp) \
+Requires: perl(Config) \
+Requires: perl(Cwd) \
+Requires: perl(DirHandle) \
+Requires: perl(Encode) \
+Requires: perl(Encode::Alias) \
+Requires: perl(Exporter) \
+Requires: perl(ExtUtils::Installed) \
+Requires: perl(ExtUtils::Liblist) \
+Requires: perl(ExtUtils::Liblist::Kid) \
+Requires: perl(ExtUtils::MM) \
+Requires: perl(ExtUtils::MM_Any) \
+Requires: perl(ExtUtils::MM_Unix) \
+Requires: perl(ExtUtils::MM_Win32) \
+Requires: perl(ExtUtils::MY) \
+Requires: perl(ExtUtils::MakeMaker) \
+Requires: perl(ExtUtils::MakeMaker::Config) \
+Requires: perl(ExtUtils::MakeMaker::version) \
+Requires: perl(ExtUtils::Packlist) \
+Requires: perl(File::Basename) \
+Requires: perl(File::Path) \
+Requires: perl(File::Spec) \
+Requires: perl(IO::File) \
+Requires: perl(base) \
+Requires: perl(lib) \
+Requires: perl(strict) \
+Requires: perl(vars) \
+Requires: perl(warnings) \
+Provides: perl(ExtUtils::Command::MM) = 7.10 \
+Provides: perl(ExtUtils::Liblist) = 7.10 \
+Provides: perl(ExtUtils::Liblist::Kid) = 7.10 \
+Provides: perl(ExtUtils::MM) = 7.10 \
+Provides: perl(ExtUtils::MM_AIX) = 7.10 \
+Provides: perl(ExtUtils::MM_Any) = 7.10 \
+Provides: perl(ExtUtils::MM_BeOS) = 7.10 \
+Provides: perl(ExtUtils::MM_Cygwin) = 7.10 \
+Provides: perl(ExtUtils::MM_DOS) = 7.10 \
+Provides: perl(ExtUtils::MM_Darwin) = 7.10 \
+Provides: perl(ExtUtils::MM_MacOS) = 7.10 \
+Provides: perl(ExtUtils::MM_NW5) = 7.10 \
+Provides: perl(ExtUtils::MM_OS2) = 7.10 \
+Provides: perl(ExtUtils::MM_QNX) = 7.10 \
+Provides: perl(ExtUtils::MM_UWIN) = 7.10 \
+Provides: perl(ExtUtils::MM_Unix) = 7.10 \
+Provides: perl(ExtUtils::MM_VMS) = 7.10 \
+Provides: perl(ExtUtils::MM_VOS) = 7.10 \
+Provides: perl(ExtUtils::MM_Win32) = 7.10 \
+Provides: perl(ExtUtils::MM_Win95) = 7.10 \
+Provides: perl(ExtUtils::MY) = 7.10 \
+Provides: perl(ExtUtils::MakeMaker) = 7.10 \
+Provides: perl(ExtUtils::MakeMaker::Config) = 7.10 \
+Provides: perl(ExtUtils::MakeMaker::Locale) = 7.10 \
+Provides: perl(ExtUtils::MakeMaker::version) = 7.10 \
+Provides: perl(ExtUtils::Mkbootstrap) = 7.10 \
+Provides: perl(ExtUtils::Mksymlists) = 7.10 \
+Provides: perl(ExtUtils::testlib) = 7.10 \
+Provides: perl(MM) \
+Provides: perl(MY) \
+%{nil}
+%global gendep_perl_ExtUtils_Manifest \
+Requires: perl(Carp) \
+Requires: perl(Config) \
+Requires: perl(Exporter) \
+Requires: perl(File::Basename) \
+Requires: perl(File::Copy) \
+Requires: perl(File::Find) \
+Requires: perl(File::Spec) >= 0.8 \
+Requires: perl(strict) \
+Requires: perl(warnings) \
+Provides: perl(ExtUtils::Manifest) = 1.70 \
+%{nil}
+%global gendep_perl_ExtUtils_Miniperl \
+Requires: perl(Exporter) \
+Requires: perl(ExtUtils::Embed) >= 1.31 \
+Requires: perl(strict) \
+Requires: perl(vars) \
+Provides: perl(ExtUtils::Miniperl) = 1.05 \
+%{nil}
+%global gendep_perl_ExtUtils_ParseXS \
+Requires: perl(:VERSION) >= 5.6.0 \
+Requires: perl(:VERSION) >= 5.6.1 \
+Requires: perl(Config) \
+Requires: perl(Cwd) \
+Requires: perl(Exporter) \
+Requires: perl(ExtUtils::ParseXS) \
+Requires: perl(ExtUtils::ParseXS::Constants) \
+Requires: perl(ExtUtils::ParseXS::CountLines) \
+Requires: perl(ExtUtils::ParseXS::Eval) \
+Requires: perl(ExtUtils::ParseXS::Utilities) \
+Requires: perl(ExtUtils::Typemaps) \
+Requires: perl(ExtUtils::Typemaps::InputMap) \
+Requires: perl(ExtUtils::Typemaps::OutputMap) \
+Requires: perl(ExtUtils::Typemaps::Type) \
+Requires: perl(File::Basename) \
+Requires: perl(File::Spec) \
+Requires: perl(Getopt::Long) \
+Requires: perl(Symbol) \
+Requires: perl(re) \
+Requires: perl(strict) \
+Requires: perl(warnings) \
+Provides: perl(ExtUtils::ParseXS) = 3.31 \
+Provides: perl(ExtUtils::ParseXS::Constants) = 3.31 \
+Provides: perl(ExtUtils::ParseXS::CountLines) = 3.31 \
+Provides: perl(ExtUtils::ParseXS::Eval) = 3.31 \
+Provides: perl(ExtUtils::ParseXS::Utilities) = 3.31 \
+Provides: perl(ExtUtils::Typemaps) = 3.31 \
+Provides: perl(ExtUtils::Typemaps::Cmd) = 3.31 \
+Provides: perl(ExtUtils::Typemaps::InputMap) = 3.31 \
+Provides: perl(ExtUtils::Typemaps::OutputMap) = 3.31 \
+Provides: perl(ExtUtils::Typemaps::Type) = 3.31 \
+%{nil}
+%global gendep_perl_File_Fetch \
+Requires: perl(Carp) \
+Requires: perl(Cwd) \
+Requires: perl(File::Basename) \
+Requires: perl(File::Copy) \
+Requires: perl(File::Path) \
+Requires: perl(File::Spec) \
+Requires: perl(File::Spec::Unix) \
+Requires: perl(File::Temp) \
+Requires: perl(FileHandle) \
+Requires: perl(IPC::Cmd) \
+Requires: perl(Locale::Maketext::Simple) \
+Requires: perl(Module::Load::Conditional) \
+Requires: perl(Params::Check) \
+Requires: perl(constant) \
+Requires: perl(strict) \
+Requires: perl(vars) \
+Provides: perl(File::Fetch) = 0.48 \
+%{nil}
+%global gendep_perl_File_Path \
+Requires: perl(:VERSION) >= 5.5.0 \
+Requires: perl(Cwd) \
+Requires: perl(Exporter) \
+Requires: perl(File::Basename) \
+Requires: perl(File::Spec) \
+Requires: perl(strict) \
+Requires: perl(vars) \
+Provides: perl(File::Path) = 2.12 \
+%{nil}
+%global gendep_perl_File_Temp \
+Requires: perl(:VERSION) >= 5.6.0 \
+Requires: perl(Carp) \
+Requires: perl(Cwd) \
+Requires: perl(Errno) \
+Requires: perl(Exporter) >= 5.57 \
+Requires: perl(Fcntl) >= 1.03 \
+Requires: perl(File::Path) >= 2.06 \
+Requires: perl(File::Spec) >= 0.8 \
+Requires: perl(IO::Handle) \
+Requires: perl(IO::Seekable) \
+Requires: perl(Scalar::Util) \
+Requires: perl(Symbol) \
+Requires: perl(constant) \
+Requires: perl(overload) \
+Requires: perl(parent) >= 0.221 \
+Requires: perl(strict) \
+Requires: perl(vars) \
+Provides: perl(File::Temp) = 0.2304 \
+Provides: perl(File::Temp::Dir) \
+%{nil}
+%global gendep_perl_Filter \
+Requires: perl(:VERSION) >= 5.5.0 \
+Requires: perl(Carp) \
+Requires: perl(DynaLoader) \
+Requires: perl(Exporter) \
+Requires: perl(strict) \
+Requires: perl(vars) \
+Requires: perl(warnings) \
+Provides: perl(Filter::Util::Call) = 1.55 \
+%{nil}
+%global gendep_perl_Filter_Simple \
+Requires: perl(Carp) \
+Requires: perl(Filter::Util::Call) \
+Requires: perl(Text::Balanced) \
+Requires: perl(vars) \
+Provides: perl(Filter::Simple) = 0.92 \
+%{nil}
+%global gendep_perl_Getopt_Long \
+Requires: perl(:VERSION) >= 5.4.0 \
+Requires: perl(Exporter) \
+Requires: perl(constant) \
+Requires: perl(overload) \
+Requires: perl(strict) \
+Requires: perl(vars) \
+Provides: perl(Getopt::Long) = 2.48 \
+Provides: perl(Getopt::Long::CallBack) \
+Provides: perl(Getopt::Long::Parser) \
+%{nil}
+%global gendep_perl_HTTP_Tiny \
+Requires: perl(Carp) \
+Requires: perl(Errno) \
+Requires: perl(IO::Socket) \
+Requires: perl(strict) \
+Requires: perl(warnings) \
+Provides: perl(HTTP::Tiny) = 0.056 \
+%{nil}
+%global gendep_perl_IO \
+Requires: perl(:VERSION) >= 5.6.0 \
+Requires: perl(Carp) \
+Requires: perl(Errno) \
+Requires: perl(Exporter) \
+Requires: perl(Fcntl) \
+Requires: perl(File::Spec) \
+Requires: perl(File::stat) \
+Requires: perl(IO) \
+Requires: perl(IO::File) \
+Requires: perl(IO::Handle) \
+Requires: perl(IO::Seekable) \
+Requires: perl(IO::Socket) \
+Requires: perl(IO::Socket::INET) \
+Requires: perl(IO::Socket::UNIX) \
+Requires: perl(SelectSaver) \
+Requires: perl(Socket) >= 1.3 \
+Requires: perl(Symbol) \
+Requires: perl(Tie::Hash) \
+Requires: perl(XSLoader) \
+Requires: perl(strict) \
+Requires: perl(vars) \
+Requires: perl(warnings) \
+Requires: perl(warnings::register) \
+Provides: perl(IO) = 1.36 \
+Provides: perl(IO::Dir) = 1.10 \
+Provides: perl(IO::File) = 1.16 \
+Provides: perl(IO::Handle) = 1.36 \
+Provides: perl(IO::Pipe) = 1.15 \
+Provides: perl(IO::Pipe::End) \
+Provides: perl(IO::Poll) = 0.10 \
+Provides: perl(IO::Seekable) = 1.10 \
+Provides: perl(IO::Select) = 1.22 \
+Provides: perl(IO::Socket) = 1.38 \
+Provides: perl(IO::Socket::INET) = 1.35 \
+Provides: perl(IO::Socket::UNIX) = 1.26 \
+%{nil}
+%global gendep_perl_IO_Compress \
+Requires: perl(:VERSION) >= 5.6.0 \
+Requires: perl(Carp) \
+Requires: perl(Compress::Raw::Bzip2) >= 2.069 \
+Requires: perl(Compress::Raw::Zlib) >= 2.069 \
+Requires: perl(Config) \
+Requires: perl(Encode) \
+Requires: perl(Exporter) \
+Requires: perl(Fcntl) \
+Requires: perl(File::GlobMapper) \
+Requires: perl(File::Spec) \
+Requires: perl(IO::Compress::Adapter::Bzip2) >= 2.069 \
+Requires: perl(IO::Compress::Adapter::Deflate) >= 2.069 \
+Requires: perl(IO::Compress::Adapter::Identity) >= 2.069 \
+Requires: perl(IO::Compress::Base) >= 2.069 \
+Requires: perl(IO::Compress::Base::Common) >= 2.069 \
+Requires: perl(IO::Compress::Gzip) >= 2.069 \
+Requires: perl(IO::Compress::Gzip::Constants) >= 2.069 \
+Requires: perl(IO::Compress::RawDeflate) >= 2.069 \
+Requires: perl(IO::Compress::Zip::Constants) >= 2.069 \
+Requires: perl(IO::Compress::Zlib::Constants) >= 2.069 \
+Requires: perl(IO::Compress::Zlib::Extra) >= 2.069 \
+Requires: perl(IO::File) \
+Requires: perl(IO::Handle) \
+Requires: perl(IO::Uncompress::Adapter::Bunzip2) >= 2.069 \
+Requires: perl(IO::Uncompress::Adapter::Identity) >= 2.069 \
+Requires: perl(IO::Uncompress::Adapter::Inflate) >= 2.069 \
+Requires: perl(IO::Uncompress::Base) >= 2.069 \
+Requires: perl(IO::Uncompress::Gunzip) >= 2.069 \
+Requires: perl(IO::Uncompress::Inflate) >= 2.069 \
+Requires: perl(IO::Uncompress::RawInflate) >= 2.069 \
+Requires: perl(IO::Uncompress::Unzip) >= 2.069 \
+Requires: perl(List::Util) \
+Requires: perl(POSIX) \
+Requires: perl(Scalar::Util) \
+Requires: perl(Symbol) \
+Requires: perl(bytes) \
+Requires: perl(constant) \
+Requires: perl(strict) \
+Requires: perl(utf8) \
+Requires: perl(warnings) \
+Provides: perl(Compress::Zlib) = 2.069 \
+Provides: perl(File::GlobMapper) = 1.000 \
+Provides: perl(IO::Compress::Adapter::Bzip2) = 2.069 \
+Provides: perl(IO::Compress::Adapter::Deflate) = 2.069 \
+Provides: perl(IO::Compress::Adapter::Identity) = 2.069 \
+Provides: perl(IO::Compress::Base) = 2.069 \
+Provides: perl(IO::Compress::Base::Common) = 2.069 \
+Provides: perl(IO::Compress::Bzip2) = 2.069 \
+Provides: perl(IO::Compress::Deflate) = 2.069 \
+Provides: perl(IO::Compress::Gzip) = 2.069 \
+Provides: perl(IO::Compress::Gzip::Constants) = 2.069 \
+Provides: perl(IO::Compress::RawDeflate) = 2.069 \
+Provides: perl(IO::Compress::Zip) = 2.069 \
+Provides: perl(IO::Compress::Zip::Constants) = 2.069 \
+Provides: perl(IO::Compress::Zlib::Constants) = 2.069 \
+Provides: perl(IO::Compress::Zlib::Extra) = 2.069 \
+Provides: perl(IO::Uncompress::Adapter::Bunzip2) = 2.069 \
+Provides: perl(IO::Uncompress::Adapter::Identity) = 2.069 \
+Provides: perl(IO::Uncompress::Adapter::Inflate) = 2.069 \
+Provides: perl(IO::Uncompress::AnyInflate) = 2.069 \
+Provides: perl(IO::Uncompress::AnyUncompress) = 2.069 \
+Provides: perl(IO::Uncompress::Base) = 2.069 \
+Provides: perl(IO::Uncompress::Bunzip2) \
+Provides: perl(IO::Uncompress::Bunzip2) = 2.069 \
+Provides: perl(IO::Uncompress::Gunzip) = 2.069 \
+Provides: perl(IO::Uncompress::Inflate) = 2.069 \
+Provides: perl(IO::Uncompress::RawInflate) = 2.069 \
+Provides: perl(IO::Uncompress::Unzip) = 2.069 \
+Provides: perl(U64) \
+Provides: perl(Zlib::OldDeflate) \
+Provides: perl(Zlib::OldInflate) \
+%{nil}
+%global gendep_perl_IO_Socket_IP \
+Requires: perl(Carp) \
+Requires: perl(Errno) \
+Requires: perl(IO::Socket) \
+Requires: perl(IO::Socket::IP) \
+Requires: perl(POSIX) \
+Requires: perl(Socket) >= 1.97 \
+Requires: perl(base) \
+Requires: perl(constant) \
+Requires: perl(strict) \
+Requires: perl(warnings) \
+Provides: perl(IO::Socket::IP) = 0.37 \
+%{nil}
+%global gendep_perl_IO_Zlib \
+Requires: perl(:VERSION) >= 5.6.0 \
+Requires: perl(Carp) \
+Requires: perl(Fcntl) \
+Requires: perl(Symbol) \
+Requires: perl(Tie::Handle) \
+Requires: perl(strict) \
+Requires: perl(vars) \
+Provides: perl(IO::Zlib) = 1.10 \
+%{nil}
+%global gendep_perl_IPC_Cmd \
+Requires: perl(Carp) \
+Requires: perl(Exporter) \
+Requires: perl(File::Spec) \
+Requires: perl(Locale::Maketext::Simple) \
+Requires: perl(Module::Load::Conditional) \
+Requires: perl(Params::Check) \
+Requires: perl(Symbol) \
+Requires: perl(Text::ParseWords) \
+Requires: perl(constant) \
+Requires: perl(strict) \
+Requires: perl(vars) \
+Provides: perl(IPC::Cmd) = 0.92 \
+%{nil}
+%global gendep_perl_IPC_SysV \
+Requires: perl(Carp) \
+Requires: perl(Class::Struct) \
+Requires: perl(Config) \
+Requires: perl(Exporter) \
+Requires: perl(IPC::SysV) \
+Requires: perl(strict) \
+Requires: perl(vars) \
+Provides: perl(IPC::Msg) = 2.06 \
+Provides: perl(IPC::Msg::stat) \
+Provides: perl(IPC::Semaphore) = 2.06 \
+Provides: perl(IPC::Semaphore::stat) \
+Provides: perl(IPC::SharedMem) = 2.06 \
+Provides: perl(IPC::SharedMem::stat) \
+Provides: perl(IPC::SysV) = 2.06 \
+%{nil}
+%global gendep_perl_JSON_PP \
+Requires: perl(:VERSION) >= 5.5.0 \
+Requires: perl(B) \
+Requires: perl(Carp) \
+Requires: perl(Exporter) \
+Requires: perl(Getopt::Long) \
+Requires: perl(JSON::PP) \
+Requires: perl(base) \
+Requires: perl(bytes) \
+Requires: perl(constant) \
+Requires: perl(overload) \
+Requires: perl(strict) \
+Provides: perl(JSON::PP) = 2.27300 \
+Provides: perl(JSON::PP::Boolean) \
+Provides: perl(JSON::PP::IncrParser) = 1.01 \
+%{nil}
+%global gendep_perl_Locale_Codes \
+Requires: perl(:VERSION) >= 5.2.0 \
+Requires: perl(:VERSION) >= 5.6.0 \
+Requires: perl(Carp) \
+Requires: perl(Exporter) \
+Requires: perl(Locale::Codes) \
+Requires: perl(Locale::Codes::Constants) \
+Requires: perl(constant) \
+Requires: perl(strict) \
+Requires: perl(utf8) \
+Requires: perl(warnings) \
+Provides: perl(Locale::Codes) = 3.25 \
+Provides: perl(Locale::Codes) = 3.37 \
+Provides: perl(Locale::Codes::Constants) = 3.37 \
+Provides: perl(Locale::Codes::Country) = 3.37 \
+Provides: perl(Locale::Codes::Currency) = 3.37 \
+Provides: perl(Locale::Codes::LangExt) = 3.37 \
+Provides: perl(Locale::Codes::LangFam) = 3.37 \
+Provides: perl(Locale::Codes::LangVar) = 3.37 \
+Provides: perl(Locale::Codes::Language) = 3.37 \
+Provides: perl(Locale::Codes::Script) = 3.37 \
+Provides: perl(Locale::Country) = 3.37 \
+Provides: perl(Locale::Currency) = 3.37 \
+Provides: perl(Locale::Language) = 3.37 \
+Provides: perl(Locale::Script) = 3.37 \
+%{nil}
+%global gendep_perl_Locale_Maketext \
+Requires: perl(Carp) \
+Requires: perl(I18N::LangTags) \
+Requires: perl(I18N::LangTags::Detect) \
+Requires: perl(Locale::Maketext) \
+Requires: perl(integer) \
+Requires: perl(strict) \
+Requires: perl(vars) \
+Provides: perl(Locale::Maketext) = 1.26 \
+Provides: perl(Locale::Maketext::Guts) = 1.20 \
+Provides: perl(Locale::Maketext::GutsLoader) = 1.20 \
+%{nil}
+%global gendep_perl_Locale_Maketext_Simple \
+Requires: perl(:VERSION) >= 5.5.0 \
+Requires: perl(Locale::Maketext) \
+Requires: perl(base) \
+Requires: perl(strict) \
+Provides: perl(Locale::Maketext::Simple) = 0.21 \
+%{nil}
+%global gendep_perl_MIME_Base64 \
+Requires: perl(Exporter) \
+Requires: perl(MIME::Base64) \
+Requires: perl(XSLoader) \
+Requires: perl(strict) \
+Requires: perl(vars) \
+Provides: perl(MIME::Base64) = 3.15 \
+Provides: perl(MIME::QuotedPrint) = 3.13 \
+%{nil}
+%global gendep_perl_Math_BigInt \
+Requires: perl(:VERSION) >= 5.6.1 \
+Requires: perl(Exporter) \
+Requires: perl(constant) \
+Requires: perl(integer) \
+Requires: perl(overload) \
+Requires: perl(strict) \
+Requires: perl(warnings) \
+Provides: perl(Math::BigFloat) = 1.999715 \
+Provides: perl(Math::BigInt) = 1.999715 \
+Provides: perl(Math::BigInt::Calc) = 1.999715 \
+Provides: perl(Math::BigInt::CalcEmu) = 1.999715 \
+%{nil}
+%global gendep_perl_Math_BigInt_FastCalc \
+Requires: perl(:VERSION) >= 5.6.0 \
+Requires: perl(Math::BigInt::Calc) >= 1.999706 \
+Requires: perl(XSLoader) \
+Requires: perl(strict) \
+Requires: perl(warnings) \
+Provides: perl(Math::BigInt::FastCalc) = 0.40 \
+%{nil}
+%global gendep_perl_Math_BigRat \
+Requires: perl(:VERSION) >= 5.6.0 \
+Requires: perl(Carp) \
+Requires: perl(Math::BigFloat) \
+Requires: perl(overload) \
+Requires: perl(strict) \
+Requires: perl(warnings) \
+Provides: perl(Math::BigRat) = 0.260802 \
+%{nil}
+%global gendep_perl_Math_Complex \
+Requires: perl(Config) \
+Requires: perl(Exporter) \
+Requires: perl(Math::Complex) >= 1.59 \
+Requires: perl(Scalar::Util) \
+Requires: perl(overload) \
+Requires: perl(strict) \
+Requires: perl(warnings) \
+Provides: perl(Math::Complex) = 1.59 \
+Provides: perl(Math::Trig) = 1.23 \
+%{nil}
+%global gendep_perl_Memoize \
+Requires: perl(Carp) \
+Requires: perl(Config) \
+Requires: perl(Exporter) \
+Requires: perl(NDBM_File) \
+Requires: perl(SDBM_File) \
+Requires: perl(Storable) \
+Requires: perl(strict) \
+Requires: perl(vars) \
+Provides: perl(Memoize) = 1.03 \
+Provides: perl(Memoize::AnyDBM_File) = 1.03 \
+Provides: perl(Memoize::Expire) = 1.03 \
+Provides: perl(Memoize::ExpireFile) = 1.03 \
+Provides: perl(Memoize::ExpireTest) = 1.03 \
+Provides: perl(Memoize::NDBM_File) = 1.03 \
+Provides: perl(Memoize::SDBM_File) = 1.03 \
+Provides: perl(Memoize::Storable) = 1.03 \
+%{nil}
+%global gendep_perl_Module_CoreList \
+Requires: perl(Module::CoreList) \
+Requires: perl(Module::CoreList::TieHashDelta) \
+Requires: perl(strict) \
+Requires: perl(vars) \
+Requires: perl(version) \
+Requires: perl(warnings) \
+Provides: perl(Module::CoreList) = 5.20180414 \
+Provides: perl(Module::CoreList::TieHashDelta) = 5.20180414 \
+Provides: perl(Module::CoreList::Utils) = 5.20180414 \
+%{nil}
+%global gendep_perl_Module_CoreList_tools \
+Requires: perl(Getopt::Long) \
+Requires: perl(List::Util) \
+Requires: perl(Module::CoreList) \
+Requires: perl(Pod::Usage) \
+Requires: perl(strict) \
+Requires: perl(warnings) \
+%{nil}
+%global gendep_perl_Module_Load \
+Requires: perl(File::Spec) \
+Requires: perl(strict) \
+Requires: perl(warnings) \
+Provides: perl(Module::Load) = 0.32 \
+%{nil}
+%global gendep_perl_Module_Load_Conditional \
+Requires: perl(Carp) \
+Requires: perl(Exporter) \
+Requires: perl(File::Spec) \
+Requires: perl(FileHandle) \
+Requires: perl(Locale::Maketext::Simple) \
+Requires: perl(Module::Load) \
+Requires: perl(Module::Metadata) \
+Requires: perl(Params::Check) \
+Requires: perl(constant) \
+Requires: perl(strict) \
+Requires: perl(vars) \
+Requires: perl(version) \
+Provides: perl(Module::Load::Conditional) = 0.64 \
+%{nil}
+%global gendep_perl_Module_Loaded \
+Requires: perl(Carp) \
+Requires: perl(strict) \
+Requires: perl(vars) \
+Provides: perl(Module::Loaded) = 0.08 \
+%{nil}
+%global gendep_perl_Module_Metadata \
+Requires: perl(Carp) \
+Requires: perl(File::Find) \
+Requires: perl(File::Spec) \
+Requires: perl(strict) \
+Requires: perl(version) >= 0.87 \
+Requires: perl(warnings) \
+Provides: perl(Module::Metadata) = 1.000031 \
+%{nil}
+%global gendep_perl_Net_Ping \
+Requires: perl(:VERSION) >= 5.2.0 \
+Requires: perl(Carp) \
+Requires: perl(Exporter) \
+Requires: perl(Fcntl) \
+Requires: perl(FileHandle) \
+Requires: perl(POSIX) \
+Requires: perl(Socket) \
+Requires: perl(Time::HiRes) \
+Requires: perl(constant) \
+Requires: perl(strict) \
+Requires: perl(vars) \
+Provides: perl(Net::Ping) = 2.43 \
+%{nil}
+%global gendep_perl_Params_Check \
+Requires: perl(Carp) \
+Requires: perl(Exporter) \
+Requires: perl(Locale::Maketext::Simple) \
+Requires: perl(strict) \
+Requires: perl(vars) \
+Provides: perl(Params::Check) = 0.38 \
+%{nil}
+%global gendep_perl_Parse_CPAN_Meta \
+Requires: perl(:VERSION) >= 5.8.1 \
+Requires: perl(Carp) \
+Requires: perl(Exporter) \
+Requires: perl(strict) \
+Provides: perl(Parse::CPAN::Meta) = 1.4417 \
+%{nil}
+%global gendep_perl_PathTools \
+Requires: perl(Exporter) \
+Requires: perl(File::Spec) \
+Requires: perl(File::Spec::Unix) \
+Requires: perl(constant) \
+Requires: perl(strict) \
+Requires: perl(vars) \
+Provides: perl(Cwd) = 3.63 \
+Provides: perl(File::Spec) = 3.63 \
+Provides: perl(File::Spec::AmigaOS) = 3.64 \
+Provides: perl(File::Spec::Cygwin) = 3.63 \
+Provides: perl(File::Spec::Epoc) = 3.63 \
+Provides: perl(File::Spec::Functions) = 3.63 \
+Provides: perl(File::Spec::Mac) = 3.63 \
+Provides: perl(File::Spec::OS2) = 3.63 \
+Provides: perl(File::Spec::Unix) = 3.63 \
+Provides: perl(File::Spec::Win32) = 3.63 \
+%{nil}
+%global gendep_perl_Perl_OSType \
+Requires: perl(Exporter) \
+Requires: perl(strict) \
+Requires: perl(warnings) \
+Provides: perl(Perl::OSType) = 1.009 \
+%{nil}
+%global gendep_perl_PerlIO_via_QuotedPrint \
+Requires: perl(MIME::QuotedPrint) \
+Requires: perl(strict) \
+Provides: perl(PerlIO::via::QuotedPrint) = 0.08 \
+%{nil}
+%global gendep_perl_Pod_Checker \
+Requires: perl(:VERSION) >= 5.5.0 \
+Requires: perl(Carp) \
+Requires: perl(Exporter) \
+Requires: perl(Getopt::Long) \
+Requires: perl(Pod::Checker) \
+Requires: perl(Pod::ParseUtils) \
+Requires: perl(Pod::Parser) \
+Requires: perl(Pod::Usage) \
+Requires: perl(strict) \
+Requires: perl(vars) \
+Provides: perl(Pod::Checker) = 1.60 \
+%{nil}
+%global gendep_perl_Pod_Escapes \
+Requires: perl(:VERSION) >= 5.6.0 \
+Requires: perl(Exporter) \
+Requires: perl(strict) \
+Requires: perl(vars) \
+Requires: perl(warnings) \
+Provides: perl(Pod::Escapes) = 1.07 \
+%{nil}
+%global gendep_perl_Pod_Html \
+Requires: perl(Carp) \
+Requires: perl(Config) \
+Requires: perl(Cwd) \
+Requires: perl(Exporter) \
+Requires: perl(File::Basename) \
+Requires: perl(File::Spec) \
+Requires: perl(File::Spec::Unix) \
+Requires: perl(Getopt::Long) \
+Requires: perl(Pod::Html) \
+Requires: perl(Pod::Simple::Search) \
+Requires: perl(Pod::Simple::XHTML) \
+Requires: perl(locale) \
+Requires: perl(parent) \
+Requires: perl(strict) \
+Requires: perl(vars) \
+Requires: perl(warnings) \
+Provides: perl(Pod::Html) = 1.2201 \
+Provides: perl(Pod::Simple::XHTML::LocalPodLinks) \
+%{nil}
+%global gendep_perl_Pod_Parser \
+Requires: perl(:VERSION) >= 5.5.0 \
+Requires: perl(Carp) \
+Requires: perl(Cwd) \
+Requires: perl(Exporter) \
+Requires: perl(File::Find) \
+Requires: perl(File::Spec) \
+Requires: perl(Getopt::Long) \
+Requires: perl(Pod::InputObjects) \
+Requires: perl(Pod::Parser) >= 1.04 \
+Requires: perl(Pod::Select) \
+Requires: perl(Pod::Usage) \
+Requires: perl(strict) \
+Requires: perl(vars) \
+Provides: perl(Pod::Cache) \
+Provides: perl(Pod::Cache::Item) \
+Provides: perl(Pod::Find) = 1.63 \
+Provides: perl(Pod::Hyperlink) \
+Provides: perl(Pod::InputObjects) = 1.63 \
+Provides: perl(Pod::InputSource) \
+Provides: perl(Pod::InteriorSequence) \
+Provides: perl(Pod::List) \
+Provides: perl(Pod::Paragraph) \
+Provides: perl(Pod::ParseTree) \
+Provides: perl(Pod::ParseUtils) = 1.63 \
+Provides: perl(Pod::Parser) = 1.63 \
+Provides: perl(Pod::PlainText) = 2.07 \
+Provides: perl(Pod::Select) = 1.63 \
+%{nil}
+%global gendep_perl_Pod_Perldoc \
+Requires: perl(:VERSION) >= 5.0.0 \
+Requires: perl(:VERSION) >= 5.6.0 \
+Requires: perl(Carp) \
+Requires: perl(Config) \
+Requires: perl(Encode) \
+Requires: perl(Fcntl) \
+Requires: perl(File::Basename) \
+Requires: perl(File::Spec::Functions) \
+Requires: perl(IO::Select) \
+Requires: perl(Pod::Man) >= 2.18 \
+Requires: perl(Pod::Perldoc) \
+Requires: perl(Pod::Perldoc::BaseTo) \
+Requires: perl(Pod::Perldoc::GetOptsOO) \
+Requires: perl(Pod::Simple::RTF) \
+Requires: perl(Pod::Simple::XMLOutStream) \
+Requires: perl(Pod::Text) \
+Requires: perl(Pod::Text::Color) \
+Requires: perl(Pod::Text::Termcap) \
+Requires: perl(parent) \
+Requires: perl(strict) \
+Requires: perl(vars) \
+Requires: perl(warnings) \
+Provides: perl(Pod::Perldoc) = 3.25 \
+Provides: perl(Pod::Perldoc::BaseTo) = 3.25 \
+Provides: perl(Pod::Perldoc::GetOptsOO) = 3.25 \
+Provides: perl(Pod::Perldoc::ToANSI) = 3.25 \
+Provides: perl(Pod::Perldoc::ToChecker) = 3.25 \
+Provides: perl(Pod::Perldoc::ToMan) = 3.25 \
+Provides: perl(Pod::Perldoc::ToNroff) = 3.25 \
+Provides: perl(Pod::Perldoc::ToPod) = 3.25 \
+Provides: perl(Pod::Perldoc::ToRtf) = 3.25 \
+Provides: perl(Pod::Perldoc::ToTerm) = 3.25 \
+Provides: perl(Pod::Perldoc::ToText) = 3.25 \
+Provides: perl(Pod::Perldoc::ToTk) = 3.25 \
+Provides: perl(Pod::Perldoc::ToXml) = 3.25 \
+%{nil}
+%global gendep_perl_Pod_Simple \
+Requires: perl(:VERSION) >= 5.0.0 \
+Requires: perl(:VERSION) >= 5.5.0 \
+Requires: perl(:VERSION) >= 5.8.0 \
+Requires: perl(Carp) \
+Requires: perl(Config) \
+Requires: perl(Cwd) \
+Requires: perl(Encode) \
+Requires: perl(File::Basename) \
+Requires: perl(File::Spec) \
+Requires: perl(Getopt::Long) \
+Requires: perl(Pod::Escapes) >= 1.04 \
+Requires: perl(Pod::Simple) \
+Requires: perl(Pod::Simple::BlackBox) \
+Requires: perl(Pod::Simple::HTML) \
+Requires: perl(Pod::Simple::LinkSection) \
+Requires: perl(Pod::Simple::Methody) \
+Requires: perl(Pod::Simple::PullParser) \
+Requires: perl(Pod::Simple::PullParserEndToken) \
+Requires: perl(Pod::Simple::PullParserStartToken) \
+Requires: perl(Pod::Simple::PullParserTextToken) \
+Requires: perl(Pod::Simple::PullParserToken) \
+Requires: perl(Pod::Simple::Search) \
+Requires: perl(Symbol) \
+Requires: perl(Text::Wrap) >= 98.112902 \
+Requires: perl(integer) \
+Requires: perl(overload) \
+Requires: perl(strict) \
+Requires: perl(vars) \
+Provides: perl(Pod::Simple) = 3.32 \
+Provides: perl(Pod::Simple::BlackBox) = 3.32 \
+Provides: perl(Pod::Simple::Checker) = 3.32 \
+Provides: perl(Pod::Simple::Debug) = 3.32 \
+Provides: perl(Pod::Simple::DumpAsText) = 3.32 \
+Provides: perl(Pod::Simple::DumpAsXML) = 3.32 \
+Provides: perl(Pod::Simple::HTML) = 3.32 \
+Provides: perl(Pod::Simple::HTMLBatch) = 3.32 \
+Provides: perl(Pod::Simple::HTMLLegacy) = 5.01 \
+Provides: perl(Pod::Simple::LinkSection) = 3.32 \
+Provides: perl(Pod::Simple::Methody) = 3.32 \
+Provides: perl(Pod::Simple::Progress) = 3.32 \
+Provides: perl(Pod::Simple::PullParser) = 3.32 \
+Provides: perl(Pod::Simple::PullParserEndToken) = 3.32 \
+Provides: perl(Pod::Simple::PullParserStartToken) = 3.32 \
+Provides: perl(Pod::Simple::PullParserTextToken) = 3.32 \
+Provides: perl(Pod::Simple::PullParserToken) = 3.32 \
+Provides: perl(Pod::Simple::RTF) = 3.32 \
+Provides: perl(Pod::Simple::Search) = 3.32 \
+Provides: perl(Pod::Simple::SimpleTree) = 3.32 \
+Provides: perl(Pod::Simple::Text) = 3.32 \
+Provides: perl(Pod::Simple::TextContent) = 3.32 \
+Provides: perl(Pod::Simple::TiedOutFH) = 3.32 \
+Provides: perl(Pod::Simple::Transcode) = 3.32 \
+Provides: perl(Pod::Simple::TranscodeDumb) = 3.32 \
+Provides: perl(Pod::Simple::TranscodeSmart) = 3.32 \
+Provides: perl(Pod::Simple::XHTML) = 3.32 \
+Provides: perl(Pod::Simple::XMLOutStream) = 3.32 \
+%{nil}
+%global gendep_perl_Pod_Usage \
+Requires: perl(:VERSION) >= 5.6.0 \
+Requires: perl(Carp) \
+Requires: perl(Config) \
+Requires: perl(Exporter) \
+Requires: perl(File::Spec) \
+Requires: perl(Getopt::Long) \
+Requires: perl(Pod::Usage) \
+Requires: perl(strict) \
+Requires: perl(vars) \
+Provides: perl(Pod::Usage) = 1.68 \
+%{nil}
+%global gendep_perl_Scalar_List_Utils \
+Requires: perl(Exporter) \
+Requires: perl(List::Util) \
+Requires: perl(XSLoader) \
+Requires: perl(strict) \
+Requires: perl(warnings) \
+Provides: perl(List::Util) = 1.42 \
+Provides: perl(List::Util::XS) = 1.42 \
+Provides: perl(Scalar::Util) = 1.42 \
+Provides: perl(Sub::Util) = 1.42 \
+%{nil}
+%global gendep_perl_SelfLoader \
+Requires: perl(:VERSION) >= 5.8.0 \
+Requires: perl(Exporter) \
+Requires: perl(IO::Handle) \
+Requires: perl(strict) \
+Requires: perl(vars) \
+Provides: perl(SelfLoader) = 1.23 \
+%{nil}
+%global gendep_perl_Socket \
+Requires: perl(Carp) \
+Requires: perl(Exporter) \
+Requires: perl(XSLoader) \
+Requires: perl(strict) \
+Requires: perl(warnings::register) \
+Provides: perl(Socket) = 2.020 \
+%{nil}
+%global gendep_perl_Storable \
+Requires: perl(Exporter) \
+Requires: perl(XSLoader) \
+Requires: perl(vars) \
+Provides: perl(Storable) = 2.56 \
+%{nil}
+%global gendep_perl_Sys_Syslog \
+Requires: perl(:VERSION) >= 5.5.0 \
+Requires: perl(Carp) \
+Requires: perl(Exporter) \
+Requires: perl(File::Basename) \
+Requires: perl(POSIX) \
+Requires: perl(Socket) \
+Requires: perl(strict) \
+Requires: perl(vars) \
+Requires: perl(warnings) \
+Requires: perl(warnings::register) \
+Provides: perl(Sys::Syslog) = 0.33 \
+%{nil}
+%global gendep_perl_Term_ANSIColor \
+Requires: perl(:VERSION) >= 5.6.0 \
+Requires: perl(Carp) \
+Requires: perl(Exporter) \
+Requires: perl(strict) \
+Requires: perl(warnings) \
+Provides: perl(Term::ANSIColor) = 4.04 \
+%{nil}
+%global gendep_perl_Term_Cap \
+Requires: perl(strict) \
+Requires: perl(vars) \
+Provides: perl(Term::Cap) = 1.17 \
+%{nil}
+%global gendep_perl_Test \
+Requires: perl(:VERSION) >= 5.4.0 \
+Requires: perl(Carp) \
+Requires: perl(Exporter) \
+Requires: perl(strict) \
+Requires: perl(vars) \
+Provides: perl(Test) = 1.28 \
+%{nil}
+%global gendep_perl_Test_Harness \
+Requires: perl(:VERSION) >= 5.6.0 \
+Requires: perl(App::Prove) \
+Requires: perl(App::Prove::State) \
+Requires: perl(App::Prove::State::Result) \
+Requires: perl(App::Prove::State::Result::Test) \
+Requires: perl(Benchmark) \
+Requires: perl(Carp) \
+Requires: perl(Config) \
+Requires: perl(Exporter) \
+Requires: perl(File::Basename) \
+Requires: perl(File::Find) \
+Requires: perl(File::Path) \
+Requires: perl(File::Spec) \
+Requires: perl(Getopt::Long) \
+Requires: perl(IO::Handle) \
+Requires: perl(IO::Select) \
+Requires: perl(POSIX) \
+Requires: perl(TAP::Base) \
+Requires: perl(TAP::Formatter::Base) \
+Requires: perl(TAP::Formatter::Console::Session) \
+Requires: perl(TAP::Formatter::File::Session) \
+Requires: perl(TAP::Formatter::Session) \
+Requires: perl(TAP::Harness) \
+Requires: perl(TAP::Harness::Env) \
+Requires: perl(TAP::Object) \
+Requires: perl(TAP::Parser::Aggregator) \
+Requires: perl(TAP::Parser::Grammar) \
+Requires: perl(TAP::Parser::Iterator) \
+Requires: perl(TAP::Parser::Iterator::Array) \
+Requires: perl(TAP::Parser::Iterator::Process) \
+Requires: perl(TAP::Parser::Iterator::Stream) \
+Requires: perl(TAP::Parser::IteratorFactory) \
+Requires: perl(TAP::Parser::Result) \
+Requires: perl(TAP::Parser::Result::Bailout) \
+Requires: perl(TAP::Parser::Result::Comment) \
+Requires: perl(TAP::Parser::Result::Plan) \
+Requires: perl(TAP::Parser::Result::Pragma) \
+Requires: perl(TAP::Parser::Result::Test) \
+Requires: perl(TAP::Parser::Result::Unknown) \
+Requires: perl(TAP::Parser::Result::Version) \
+Requires: perl(TAP::Parser::Result::YAML) \
+Requires: perl(TAP::Parser::ResultFactory) \
+Requires: perl(TAP::Parser::Scheduler::Job) \
+Requires: perl(TAP::Parser::Scheduler::Spinner) \
+Requires: perl(TAP::Parser::Source) \
+Requires: perl(TAP::Parser::SourceHandler) \
+Requires: perl(TAP::Parser::SourceHandler::Executable) \
+Requires: perl(TAP::Parser::SourceHandler::File) \
+Requires: perl(TAP::Parser::SourceHandler::Handle) \
+Requires: perl(TAP::Parser::SourceHandler::Perl) \
+Requires: perl(TAP::Parser::SourceHandler::RawTAP) \
+Requires: perl(TAP::Parser::YAMLish::Reader) \
+Requires: perl(TAP::Parser::YAMLish::Writer) \
+Requires: perl(Text::ParseWords) \
+Requires: perl(base) \
+Requires: perl(constant) \
+Requires: perl(strict) \
+Requires: perl(warnings) \
+Provides: perl(App::Prove) = 3.36 \
+Provides: perl(App::Prove::State) = 3.36 \
+Provides: perl(App::Prove::State::Result) = 3.36 \
+Provides: perl(App::Prove::State::Result::Test) = 3.36 \
+Provides: perl(TAP::Base) = 3.36 \
+Provides: perl(TAP::Formatter::Base) = 3.36 \
+Provides: perl(TAP::Formatter::Color) = 3.36 \
+Provides: perl(TAP::Formatter::Console) = 3.36 \
+Provides: perl(TAP::Formatter::Console::ParallelSession) = 3.36 \
+Provides: perl(TAP::Formatter::Console::Session) = 3.36 \
+Provides: perl(TAP::Formatter::File) = 3.36 \
+Provides: perl(TAP::Formatter::File::Session) = 3.36 \
+Provides: perl(TAP::Formatter::Session) = 3.36 \
+Provides: perl(TAP::Harness) = 3.36 \
+Provides: perl(TAP::Harness::Env) = 3.36 \
+Provides: perl(TAP::Object) = 3.36 \
+Provides: perl(TAP::Parser) = 3.36 \
+Provides: perl(TAP::Parser::Aggregator) = 3.36 \
+Provides: perl(TAP::Parser::Grammar) = 3.36 \
+Provides: perl(TAP::Parser::Iterator) = 3.36 \
+Provides: perl(TAP::Parser::Iterator::Array) = 3.36 \
+Provides: perl(TAP::Parser::Iterator::Process) = 3.36 \
+Provides: perl(TAP::Parser::Iterator::Stream) = 3.36 \
+Provides: perl(TAP::Parser::IteratorFactory) = 3.36 \
+Provides: perl(TAP::Parser::Multiplexer) = 3.36 \
+Provides: perl(TAP::Parser::Result) = 3.36 \
+Provides: perl(TAP::Parser::Result::Bailout) = 3.36 \
+Provides: perl(TAP::Parser::Result::Comment) = 3.36 \
+Provides: perl(TAP::Parser::Result::Plan) = 3.36 \
+Provides: perl(TAP::Parser::Result::Pragma) = 3.36 \
+Provides: perl(TAP::Parser::Result::Test) = 3.36 \
+Provides: perl(TAP::Parser::Result::Unknown) = 3.36 \
+Provides: perl(TAP::Parser::Result::Version) = 3.36 \
+Provides: perl(TAP::Parser::Result::YAML) = 3.36 \
+Provides: perl(TAP::Parser::ResultFactory) = 3.36 \
+Provides: perl(TAP::Parser::Scheduler) = 3.36 \
+Provides: perl(TAP::Parser::Scheduler::Job) = 3.36 \
+Provides: perl(TAP::Parser::Scheduler::Spinner) = 3.36 \
+Provides: perl(TAP::Parser::Source) = 3.36 \
+Provides: perl(TAP::Parser::SourceHandler) = 3.36 \
+Provides: perl(TAP::Parser::SourceHandler::Executable) = 3.36 \
+Provides: perl(TAP::Parser::SourceHandler::File) = 3.36 \
+Provides: perl(TAP::Parser::SourceHandler::Handle) = 3.36 \
+Provides: perl(TAP::Parser::SourceHandler::Perl) = 3.36 \
+Provides: perl(TAP::Parser::SourceHandler::RawTAP) = 3.36 \
+Provides: perl(TAP::Parser::YAMLish::Reader) = 3.36 \
+Provides: perl(TAP::Parser::YAMLish::Writer) = 3.36 \
+Provides: perl(Test::Harness) = 3.36 \
+%{nil}
+%global gendep_perl_Test_Simple \
+Requires: perl(:VERSION) >= 5.5.0 \
+Requires: perl(:VERSION) >= 5.6.0 \
+Requires: perl(Carp) \
+Requires: perl(Config) \
+Requires: perl(Exporter) \
+Requires: perl(IO::Handle) \
+Requires: perl(Symbol) \
+Requires: perl(Test::Builder) >= 0.99 \
+Requires: perl(Test::Builder) >= 1.00 \
+Requires: perl(Test::Builder::Module) >= 0.99 \
+Requires: perl(Test::Builder::Tester) \
+Requires: perl(Test::More) \
+Requires: perl(Test::Tester::Capture) \
+Requires: perl(Test::Tester::CaptureRunner) \
+Requires: perl(Test::Tester::Delegate) \
+Requires: perl(strict) \
+Requires: perl(vars) \
+Requires: perl(warnings) \
+Provides: perl(Test::Builder) = 1.001014 \
+Provides: perl(Test::Builder::IO::Scalar) = 2.113 \
+Provides: perl(Test::Builder::Module) = 1.001014 \
+Provides: perl(Test::Builder::Tester) = 1.28 \
+Provides: perl(Test::Builder::Tester::Color) = 1.290001 \
+Provides: perl(Test::Builder::Tester::Tie) \
+Provides: perl(Test::More) = 1.001014 \
+Provides: perl(Test::Simple) = 1.001014 \
+Provides: perl(Test::Tester) = 0.114 \
+Provides: perl(Test::Tester::Capture) \
+Provides: perl(Test::Tester::CaptureRunner) \
+Provides: perl(Test::Tester::Delegate) \
+Provides: perl(Test::use::ok) = 0.16 \
+Provides: perl(ok) = 0.16 \
+%{nil}
+%global gendep_perl_Text_Balanced \
+Requires: perl(:VERSION) >= 5.5.0 \
+Requires: perl(Carp) \
+Requires: perl(Exporter) \
+Requires: perl(SelfLoader) \
+Requires: perl(overload) \
+Requires: perl(strict) \
+Requires: perl(vars) \
+Provides: perl(Text::Balanced) = 2.03 \
+Provides: perl(Text::Balanced::ErrorMsg) \
+Provides: perl(Text::Balanced::Extractor) \
+%{nil}
+%global gendep_perl_Text_ParseWords \
+Requires: perl(:VERSION) >= 5.6.0 \
+Requires: perl(Exporter) \
+Requires: perl(strict) \
+Provides: perl(Text::ParseWords) = 3.30 \
+%{nil}
+%global gendep_perl_Text_Tabs_Wrap \
+Requires: perl(:VERSION) >= 5.10.0 \
+Requires: perl(Exporter) \
+Requires: perl(Text::Tabs) \
+Requires: perl(re) \
+Requires: perl(strict) \
+Requires: perl(vars) \
+Requires: perl(warnings::register) \
+Provides: perl(Text::Tabs) = 2013.0523 \
+Provides: perl(Text::Wrap) = 2013.0523 \
+%{nil}
+%global gendep_perl_Thread_Queue \
+Requires: perl(Scalar::Util) >= 1.10 \
+Requires: perl(strict) \
+Requires: perl(threads::shared) >= 1.21 \
+Requires: perl(warnings) \
+Provides: perl(Thread::Queue) = 3.09 \
+%{nil}
+%global gendep_perl_Time_HiRes \
+Requires: perl(DynaLoader) \
+Requires: perl(Exporter) \
+Requires: perl(strict) \
+Provides: perl(Time::HiRes) = 1.9741 \
+%{nil}
+%global gendep_perl_Time_Local \
+Requires: perl(Carp) \
+Requires: perl(Config) \
+Requires: perl(Exporter) \
+Requires: perl(constant) \
+Requires: perl(strict) \
+Requires: perl(vars) \
+Provides: perl(Time::Local) = 1.2300 \
+%{nil}
+%global gendep_perl_Time_Piece \
+Requires: perl(Carp) \
+Requires: perl(DynaLoader) \
+Requires: perl(Exporter) >= 5.57 \
+Requires: perl(Time::Local) \
+Requires: perl(Time::Seconds) \
+Requires: perl(constant) \
+Requires: perl(integer) \
+Requires: perl(overload) \
+Requires: perl(strict) \
+Provides: perl(Time::Piece) = 1.31 \
+Provides: perl(Time::Seconds) = 1.31 \
+%{nil}
+%global gendep_perl_Unicode_Collate \
+Requires: perl(:VERSION) >= 5.6.0 \
+Requires: perl(Carp) \
+Requires: perl(DynaLoader) \
+Requires: perl(File::Spec) \
+Requires: perl(Unicode::Collate) \
+Requires: perl(base) \
+Requires: perl(constant) \
+Requires: perl(strict) \
+Requires: perl(warnings) \
+Provides: perl(Unicode::Collate) = 1.14 \
+Provides: perl(Unicode::Collate::CJK::Big5) = 1.14 \
+Provides: perl(Unicode::Collate::CJK::GB2312) = 1.14 \
+Provides: perl(Unicode::Collate::CJK::JISX0208) = 1.14 \
+Provides: perl(Unicode::Collate::CJK::Korean) = 1.14 \
+Provides: perl(Unicode::Collate::CJK::Pinyin) = 1.14 \
+Provides: perl(Unicode::Collate::CJK::Stroke) = 1.14 \
+Provides: perl(Unicode::Collate::CJK::Zhuyin) = 1.14 \
+Provides: perl(Unicode::Collate::Locale) = 1.14 \
+%{nil}
+%global gendep_perl_Unicode_Normalize \
+Requires: perl(:VERSION) >= 5.6.0 \
+Requires: perl(Carp) \
+Requires: perl(DynaLoader) \
+Requires: perl(Exporter) \
+Requires: perl(strict) \
+Requires: perl(warnings) \
+Provides: perl(Unicode::Normalize) = 1.25 \
+%{nil}
+%global gendep_perl_autodie \
+Requires: perl(:VERSION) >= 5.8.0 \
+Requires: perl(Carp) \
+Requires: perl(Config) \
+Requires: perl(Exporter) >= 5.57 \
+Requires: perl(Fatal) \
+Requires: perl(Scalar::Util) \
+Requires: perl(Tie::RefHash) \
+Requires: perl(autodie::Scope::Guard) \
+Requires: perl(autodie::Scope::GuardStack) \
+Requires: perl(autodie::Util) \
+Requires: perl(autodie::exception) \
+Requires: perl(constant) \
+Requires: perl(lib) \
+Requires: perl(overload) \
+Requires: perl(parent) \
+Requires: perl(strict) \
+Requires: perl(warnings) \
+Provides: perl(Fatal) = 2.29 \
+Provides: perl(autodie) = 2.29 \
+Provides: perl(autodie::Scope::Guard) = 2.29 \
+Provides: perl(autodie::Scope::GuardStack) = 2.29 \
+Provides: perl(autodie::Util) = 2.29 \
+Provides: perl(autodie::exception) = 2.29 \
+Provides: perl(autodie::exception::system) = 2.29 \
+Provides: perl(autodie::hints) = 2.29 \
+Provides: perl(autodie::skip) = 2.29 \
+%{nil}
+%global gendep_perl_bignum \
+Requires: perl(:VERSION) >= 5.6.0 \
+Requires: perl(Exporter) \
+Requires: perl(Math::BigFloat) \
+Requires: perl(Math::BigInt) \
+Requires: perl(bigint) \
+Requires: perl(constant) \
+Requires: perl(overload) \
+Requires: perl(strict) \
+Requires: perl(warnings) \
+Provides: perl(Math::BigFloat::Trace) = 0.42 \
+Provides: perl(Math::BigInt::Trace) = 0.42 \
+Provides: perl(bigint) = 0.42 \
+Provides: perl(bignum) = 0.42 \
+Provides: perl(bigrat) = 0.42 \
+%{nil}
+%global gendep_perl_constant \
+Requires: perl(:VERSION) >= 5.8.0 \
+Requires: perl(strict) \
+Requires: perl(warnings::register) \
+Provides: perl(constant) = 1.33 \
+%{nil}
+%global gendep_perl_core \
+%{nil}
+%global gendep_perl_debuginfo \
+%{nil}
+%global gendep_perl_devel \
+Requires: perl(Config) \
+Requires: perl(ExtUtils::Constant) \
+Requires: perl(ExtUtils::Installed) \
+Requires: perl(File::Compare) \
+Requires: perl(File::Path) \
+Requires: perl(File::Spec) \
+Requires: perl(Getopt::Long) \
+Requires: perl(Text::Wrap) \
+Requires: perl(strict) \
+Requires: perl(vars) \
+Requires: perl(warnings) \
+%{nil}
+%global gendep_perl_encoding \
+Requires: perl(Encode) \
+Requires: perl(constant) \
+Requires: perl(strict) \
+Requires: perl(warnings) \
+Provides: perl(encoding) = 2.17 \
+%{nil}
+%global gendep_perl_experimental \
+Requires: perl(Carp) \
+Requires: perl(feature) \
+Requires: perl(strict) \
+Requires: perl(version) \
+Requires: perl(warnings) \
+Provides: perl(experimental) = 0.016 \
+%{nil}
+%global gendep_perl_libnet \
+Requires: perl(:VERSION) >= 5.8.1 \
+Requires: perl(Carp) \
+Requires: perl(Errno) \
+Requires: perl(Exporter) \
+Requires: perl(Fcntl) \
+Requires: perl(FileHandle) \
+Requires: perl(IO::Select) \
+Requires: perl(IO::Socket) \
+Requires: perl(Net::Cmd) \
+Requires: perl(Net::Config) \
+Requires: perl(Net::FTP::I) \
+Requires: perl(Net::FTP::dataconn) \
+Requires: perl(Socket) \
+Requires: perl(Symbol) \
+Requires: perl(Time::Local) \
+Requires: perl(constant) \
+Requires: perl(strict) \
+Requires: perl(warnings) \
+Provides: perl(Net::Cmd) = 3.08 \
+Provides: perl(Net::Config) = 3.08 \
+Provides: perl(Net::Domain) = 3.08 \
+Provides: perl(Net::FTP) = 3.08 \
+Provides: perl(Net::FTP::A) = 3.08 \
+Provides: perl(Net::FTP::E) = 3.08 \
+Provides: perl(Net::FTP::I) = 3.08 \
+Provides: perl(Net::FTP::L) = 3.08 \
+Provides: perl(Net::FTP::_SSL_SingleSessionCache) \
+Provides: perl(Net::FTP::dataconn) = 3.08 \
+Provides: perl(Net::NNTP) = 3.08 \
+Provides: perl(Net::NNTP::_SSL) \
+Provides: perl(Net::Netrc) = 3.08 \
+Provides: perl(Net::POP3) = 3.08 \
+Provides: perl(Net::POP3::_SSL) \
+Provides: perl(Net::SMTP) = 3.08 \
+Provides: perl(Net::SMTP::_SSL) \
+Provides: perl(Net::Time) = 3.08 \
+%{nil}
+%global gendep_perl_libnetcfg \
+Requires: perl(ExtUtils::MakeMaker) \
+Requires: perl(File::Spec) \
+Requires: perl(Getopt::Std) \
+Requires: perl(IO::File) \
+Requires: perl(strict) \
+Requires: perl(vars) \
+%{nil}
+%global gendep_perl_libs \
+Requires: perl(integer) \
+Requires: perl(strict) \
+Requires: perl(warnings) \
+Provides: perl(:MODULE_COMPAT_5.24.0) \
+Provides: perl(:MODULE_COMPAT_5.24.1) \
+Provides: perl(:MODULE_COMPAT_5.24.2) \
+Provides: perl(:MODULE_COMPAT_5.24.3) \
+Provides: perl(:MODULE_COMPAT_5.24.4) \
+Provides: perl(:VERSION) = 5.24.4 \
+Provides: perl(:WITH_ITHREADS) \
+Provides: perl(:WITH_LARGEFILES) \
+Provides: perl(:WITH_PERLIO) \
+Provides: perl(:WITH_THREADS) \
+Provides: perl(XSLoader) = 0.22 \
+Provides: perl(integer) = 1.01 \
+Provides: perl(re) = 0.32 \
+Provides: perl(strict) = 1.11 \
+Provides: perl(unicore::Name) \
+Provides: perl(utf8) = 1.19 \
+Provides: perl(utf8_heavy.pl) \
+Provides: perl(warnings) = 1.36 \
+%{nil}
+%global gendep_perl_macros \
+%{nil}
+%global gendep_perl_open \
+Requires: perl(:VERSION) >= 5.8.1 \
+Requires: perl(warnings) \
+Provides: perl(open) = 1.10 \
+%{nil}
+%global gendep_perl_parent \
+Requires: perl(strict) \
+Requires: perl(vars) \
+Provides: perl(parent) = 0.234 \
+%{nil}
+%global gendep_perl_perlfaq \
+Requires: perl(strict) \
+Requires: perl(warnings) \
+Provides: perl(perlfaq) = 5.021010 \
+%{nil}
+%global gendep_perl_podlators \
+Requires: perl(:VERSION) >= 5.6.0 \
+Requires: perl(Carp) \
+Requires: perl(Encode) \
+Requires: perl(Exporter) \
+Requires: perl(Getopt::Long) \
+Requires: perl(POSIX) \
+Requires: perl(Pod::Man) \
+Requires: perl(Pod::Simple) \
+Requires: perl(Pod::Text) \
+Requires: perl(Pod::Usage) \
+Requires: perl(Term::ANSIColor) \
+Requires: perl(Term::Cap) \
+Requires: perl(strict) \
+Requires: perl(subs) \
+Requires: perl(vars) \
+Requires: perl(warnings) \
+Provides: perl(Pod::Man) = 4.07 \
+Provides: perl(Pod::ParseLink) = 4.07 \
+Provides: perl(Pod::Text) = 4.07 \
+Provides: perl(Pod::Text::Color) = 4.07 \
+Provides: perl(Pod::Text::Overstrike) = 4.07 \
+Provides: perl(Pod::Text::Termcap) = 4.07 \
+%{nil}
+%global gendep_perl_tests \
+%{nil}
+%global gendep_perl_threads \
+Requires: perl(:VERSION) >= 5.8.0 \
+Requires: perl(Config) \
+Requires: perl(XSLoader) \
+Requires: perl(overload) \
+Requires: perl(strict) \
+Requires: perl(warnings) \
+Provides: perl(threads) = 2.07 \
+%{nil}
+%global gendep_perl_threads_shared \
+Requires: perl(:VERSION) >= 5.8.0 \
+Requires: perl(Scalar::Util) \
+Requires: perl(strict) \
+Requires: perl(warnings) \
+Provides: perl(threads::shared) = 1.51 \
+%{nil}
+%global gendep_perl_utils \
+Requires: perl(:VERSION) >= 5.9.1 \
+Requires: perl(Carp) \
+Requires: perl(Config) \
+Requires: perl(File::Basename) \
+Requires: perl(File::Path) \
+Requires: perl(File::Spec) \
+Requires: perl(File::Temp) \
+Requires: perl(Getopt::Std) \
+Requires: perl(Text::Tabs) \
+Requires: perl(re) \
+Requires: perl(strict) \
+Requires: perl(vars) \
+Requires: perl(warnings) \
+%{nil}
+%global gendep_perl_version \
+Requires: perl(:VERSION) >= 5.6.2 \
+Requires: perl(strict) \
+Requires: perl(vars) \
+Requires: perl(version::regex) \
+Requires: perl(warnings::register) \
+Provides: perl(version) = 0.9916 \
+Provides: perl(version::regex) = 0.9916 \
+%{nil}
diff --git a/SOURCES/macros.perl b/SOURCES/macros.perl
new file mode 100644
index 0000000..9c1fd0c
--- /dev/null
+++ b/SOURCES/macros.perl
@@ -0,0 +1,151 @@
+# Sensible Perl-specific RPM build macros.
+#
+# Note that these depend on the generic filtering system being in place in
+# rpm core; but won't cause a build to fail if they're not present.
+#
+# Chris Weyl <cweyl@alumni.drew.edu> 2009
+# Marcela Mašláňová <mmaslano@redhat.com> 2011
+
+# This macro unsets several common vars used to control how Makefile.PL (et
+# al) build and install packages.  We also set a couple to help some of the
+# common systems be less interactive.  This was blatantly stolen from
+# cpanminus, and helps building rpms locally when one makes extensive use of
+# local::lib, etc.
+#
+# Usage, in %build, before "%{__perl} Makefile.PL ..."
+#
+#   %{?perl_ext_env_unset}
+
+%perl_ext_env_unset %{expand:
+unset PERL_MM_OPT MODULEBUILDRC PERL5INC
+export PERL_AUTOINSTALL="--defaultdeps"
+export PERL_MM_USE_DEFAULT=1
+}
+
+#############################################################################
+# Filtering macro incantations
+
+# keep track of what "revision" of the filtering we're at.  Each time we
+# change the filter we should increment this.
+
+%perl_default_filter_revision 3
+
+# By default, for perl packages we want to filter all files in _docdir from 
+# req/prov scanning.
+# Filtering out any provides caused by private libs in vendorarch/archlib
+# (vendor/core) is done by rpmbuild since Fedora 20
+# <https://fedorahosted.org/fpc/ticket/353>.
+#
+# Note that this must be invoked in the spec file, preferably as 
+# "%{?perl_default_filter}", before any %description block.
+
+%perl_default_filter %{expand: \
+%global __provides_exclude_from %{?__provides_exclude_from:%__provides_exclude_from|}^%{_docdir}
+%global __requires_exclude_from %{?__requires_exclude_from:%__requires_exclude_from|}^%{_docdir}
+%global __provides_exclude %{?__provides_exclude:%__provides_exclude|}^perl\\\\(VMS|^perl\\\\(Win32|^perl\\\\(DB\\\\)|^perl\\\\(UNIVERSAL\\\\)
+%global __requires_exclude %{?__requires_exclude:%__requires_exclude|}^perl\\\\(VMS|^perl\\\\(Win32
+}
+
+#############################################################################
+# Macros to assist with generating a "-tests" subpackage in a semi-automatic
+# manner.
+#
+# The following macros are still in a highly experimental stage and users
+# should be aware that the interface and behaviour may change. 
+#
+# PLEASE, PLEASE CONDITIONALIZE THESE MACROS IF YOU USE THEM.
+#
+# See http://gist.github.com/284409
+
+# These macros should be invoked as above, right before the first %description
+# section, and conditionalized.  e.g., for the common case where all our tests
+# are located under t/, the correct usage is:
+#
+#   %{?perl_default_subpackage_tests}
+#
+# If custom files/directories need to be specified, this can be done as such:
+#
+#   %{?perl_subpackage_tests:%perl_subpackage_tests t/ one/ three.sql}
+#
+# etc, etc.
+
+%perl_version   %(eval "`%{__perl} -V:version`"; echo $version)
+%perl_testdir   %{_libexecdir}/perl5-tests
+%cpan_dist_name %(eval echo %{name} | %{__sed} -e 's/^perl-//')
+
+# easily mark something as required by -tests and BR to the main package
+%tests_req() %{expand:\
+BuildRequires: %*\
+%%tests_subpackage_requires %*\
+}
+
+# fixup (and create if needed) the shbang lines in tests, so they work and
+# rpmlint doesn't (correctly) have a fit
+%fix_shbang_line() \
+TMPHEAD=`mktemp`\
+TMPBODY=`mktemp`\
+for file in %* ; do \
+    head -1 $file > $TMPHEAD\
+    tail -n +2 $file > $TMPBODY\
+    %{__perl} -pi -e '$f = /^#!/ ? "" : "#!%{__perl}$/"; $_="$f$_"' $TMPHEAD\
+    cat $TMPHEAD $TMPBODY > $file\
+done\
+%{__perl} -MExtUtils::MakeMaker -e "ExtUtils::MM_Unix->fixin(qw{%*})"\
+%{__rm} $TMPHEAD $TMPBODY\
+%{nil}
+
+# additional -tests subpackage requires, if any
+%tests_subpackage_requires() %{expand: \
+%global __tests_spkg_req %{?__tests_spkg_req} %* \
+}
+
+# additional -tests subpackage provides, if any
+%tests_subpackage_provides() %{expand: \
+%global __tests_spkg_prov %{?__tests_spkg_prov} %* \
+}
+
+#
+# Runs after the body of %check completes.
+#
+
+%__perl_check_pre %{expand: \
+%{?__spec_check_pre} \
+pushd %{buildsubdir} \
+%define perl_br_testdir %{buildroot}%{perl_testdir}/%{cpan_dist_name} \
+%{__mkdir_p} %{perl_br_testdir} \
+%{__tar} -cf - %{__perl_test_dirs} | ( cd %{perl_br_testdir} && %{__tar} -xf - ) \
+find . -maxdepth 1 -type f -name '*META*' -exec %{__cp} -vp {} %{perl_br_testdir} ';' \
+find %{perl_br_testdir} -type f -exec %{__chmod} -c -x {} ';' \
+T_FILES=`find %{perl_br_testdir} -type f -name '*.t'` \
+%fix_shbang_line $T_FILES \
+%{__chmod} +x $T_FILES \
+%{_fixperms} %{perl_br_testdir} \
+popd \
+}
+
+#
+# The actual invoked macro
+#
+
+%perl_subpackage_tests() %{expand: \
+%global __perl_package 1\
+%global __perl_test_dirs %* \
+%global __spec_check_pre %{expand:%{__perl_check_pre}} \
+%package tests\
+Summary: Test suite for package %{name}\
+Group: Development/Debug\
+Requires: %{name} = %{?epoch:%{epoch}:}%{version}-%{release}\
+Requires: /usr/bin/prove \
+%{?__tests_spkg_req:Requires: %__tests_spkg_req}\
+%{?__tests_spkg_prov:Provides: %__tests_spkg_prov}\
+AutoReqProv: 0 \
+%description tests\
+This package provides the test suite for package %{name}.\
+%files tests\
+%defattr(-,root,root,-)\
+%{perl_testdir}\
+}
+
+# shortcut sugar
+%perl_default_subpackage_tests %perl_subpackage_tests t/
+
diff --git a/SOURCES/perl-5.10.0-libresolv.patch b/SOURCES/perl-5.10.0-libresolv.patch
new file mode 100644
index 0000000..a844a28
--- /dev/null
+++ b/SOURCES/perl-5.10.0-libresolv.patch
@@ -0,0 +1,12 @@
+diff -up perl-5.10.0/Configure.didi perl-5.10.0/Configure
+--- perl-5.10.0/Configure.didi	2007-12-18 11:47:07.000000000 +0100
++++ perl-5.10.0/Configure	2008-07-21 10:51:16.000000000 +0200
+@@ -1479,7 +1479,7 @@ archname=''
+ usereentrant='undef'
+ : List of libraries we want.
+ : If anyone needs extra -lxxx, put those in a hint file.
+-libswanted="cl pthread socket bind inet nsl ndbm gdbm dbm db malloc dl ld"
++libswanted="cl pthread socket resolv inet nsl ndbm gdbm dbm db malloc dl ld"
+ libswanted="$libswanted sun m crypt sec util c cposix posix ucb bsd BSD"
+ : We probably want to search /usr/shlib before most other libraries.
+ : This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
diff --git a/SOURCES/perl-5.10.0-x86_64-io-test-failure.patch b/SOURCES/perl-5.10.0-x86_64-io-test-failure.patch
new file mode 100644
index 0000000..08adda8
--- /dev/null
+++ b/SOURCES/perl-5.10.0-x86_64-io-test-failure.patch
@@ -0,0 +1,12 @@
+diff -up perl-5.10.0/t/io/fs.t.BAD perl-5.10.0/t/io/fs.t
+--- perl-5.10.0/t/io/fs.t.BAD	2008-01-30 13:36:43.000000000 -0500
++++ perl-5.10.0/t/io/fs.t	2008-01-30 13:41:27.000000000 -0500
+@@ -227,7 +227,7 @@ isnt($atime, 500000000, 'atime');
+ isnt($mtime, 500000000 + $delta, 'mtime');
+ 
+ SKIP: {
+-    skip "no futimes", 6 unless ($Config{d_futimes} || "") eq "define";
++    skip "no futimes", 6;
+     open(my $fh, "<", 'b');
+     $foo = (utime 500000000,500000000 + $delta, $fh);
+     is($foo, 1, "futime");
diff --git a/SOURCES/perl-5.14.1-offtest.patch b/SOURCES/perl-5.14.1-offtest.patch
new file mode 100644
index 0000000..45294c8
--- /dev/null
+++ b/SOURCES/perl-5.14.1-offtest.patch
@@ -0,0 +1,17 @@
+diff -up perl-5.14.1/cpan/File-Temp/t/fork.t.off perl-5.14.1/cpan/File-Temp/t/fork.t
+--- perl-5.14.1/cpan/File-Temp/t/fork.t.off	2011-04-13 13:36:34.000000000 +0200
++++ perl-5.14.1/cpan/File-Temp/t/fork.t	2011-06-20 10:29:31.536282611 +0200
+@@ -12,12 +12,8 @@ BEGIN {
+      $Config::Config{useithreads} and
+      $Config::Config{ccflags} =~ /-DPERL_IMPLICIT_SYS/
+     );
+-  if ( $can_fork ) {
+-    print "1..8\n";
+-  } else {
+-    print "1..0 # Skip No fork available\n";
++    print "1..0 # Skip Koji doesn't work with Perl fork tests\n";
+     exit;
+-  }
+ }
+ 
+ use File::Temp;
diff --git a/SOURCES/perl-5.16.3-Link-XS-modules-to-libperl.so-with-EU-CBuilder-on-Li.patch b/SOURCES/perl-5.16.3-Link-XS-modules-to-libperl.so-with-EU-CBuilder-on-Li.patch
new file mode 100644
index 0000000..d87aca7
--- /dev/null
+++ b/SOURCES/perl-5.16.3-Link-XS-modules-to-libperl.so-with-EU-CBuilder-on-Li.patch
@@ -0,0 +1,65 @@
+From b598ba3f2d4b8347c6621cff022b8e2329b79ea5 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= <ppisar@redhat.com>
+Date: Wed, 3 Jul 2013 11:01:02 +0200
+Subject: [PATCH] Link XS modules to libperl.so with EU::CBuilder on Linux
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+<https://bugzilla.redhat.com/show_bug.cgi?id=960048>
+<http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=327585#50>
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ MANIFEST                                           |  1 +
+ .../lib/ExtUtils/CBuilder/Platform/linux.pm        | 26 ++++++++++++++++++++++
+ 2 files changed, 27 insertions(+)
+ create mode 100644 dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/linux.pm
+
+diff --git a/MANIFEST b/MANIFEST
+index 397252a..d7c519b 100644
+--- a/MANIFEST
++++ b/MANIFEST
+@@ -3093,6 +3093,7 @@ dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/aix.pm	CBuilder methods fo
+ dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/cygwin.pm	CBuilder methods for cygwin
+ dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/darwin.pm	CBuilder methods for darwin
+ dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/dec_osf.pm	CBuilder methods for OSF
++dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/linux.pm	CBuilder methods for Linux
+ dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/os2.pm	CBuilder methods for OS/2
+ dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/Unix.pm	CBuilder methods for Unix
+ dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/VMS.pm	CBuilder methods for VMS
+diff --git a/dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/linux.pm b/dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/linux.pm
+new file mode 100644
+index 0000000..e3251c4
+--- /dev/null
++++ b/dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/linux.pm
+@@ -0,0 +1,26 @@
++package ExtUtils::CBuilder::Platform::linux;
++
++use strict;
++use ExtUtils::CBuilder::Platform::Unix;
++use File::Spec;
++
++use vars qw($VERSION @ISA);
++$VERSION = '0.280206';
++@ISA = qw(ExtUtils::CBuilder::Platform::Unix);
++
++sub link {
++  my ($self, %args) = @_;
++  my $cf = $self->{config};
++
++  # Link XS modules to libperl.so explicitly because multiple
++  # dlopen(, RTLD_LOCAL) hides libperl symbols from XS module.
++  local $cf->{lddlflags} = $cf->{lddlflags};
++  if ($ENV{PERL_CORE}) {
++    $cf->{lddlflags} .= ' -L' . $self->perl_inc();
++  }
++  $cf->{lddlflags} .= ' -lperl';
++
++  return $self->SUPER::link(%args);
++}
++
++1;
+-- 
+1.8.1.4
+
diff --git a/SOURCES/perl-5.16.3-Link-XS-modules-to-libperl.so-with-EU-MM-on-Linux.patch b/SOURCES/perl-5.16.3-Link-XS-modules-to-libperl.so-with-EU-MM-on-Linux.patch
new file mode 100644
index 0000000..26159bc
--- /dev/null
+++ b/SOURCES/perl-5.16.3-Link-XS-modules-to-libperl.so-with-EU-MM-on-Linux.patch
@@ -0,0 +1,52 @@
+From fc1f8ac36c34c35bad84fb7b99a26ab83c9ba075 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= <ppisar@redhat.com>
+Date: Wed, 3 Jul 2013 12:59:09 +0200
+Subject: [PATCH] Link XS modules to libperl.so with EU::MM on Linux
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+<https://bugzilla.redhat.com/show_bug.cgi?id=960048>
+<http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=327585#50>
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm | 8 +++++++-
+ 1 file changed, 7 insertions(+), 1 deletion(-)
+
+diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm
+index a8b172f..a3fbce2 100644
+--- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm
++++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm
+@@ -31,6 +31,7 @@ BEGIN {
+     $Is{IRIX}    = $^O eq 'irix';
+     $Is{NetBSD}  = $^O eq 'netbsd';
+     $Is{Interix} = $^O eq 'interix';
++    $Is{Linux}   = $^O eq 'linux';
+     $Is{SunOS4}  = $^O eq 'sunos';
+     $Is{Solaris} = $^O eq 'solaris';
+     $Is{SunOS}   = $Is{SunOS4} || $Is{Solaris};
+@@ -932,7 +933,7 @@ $(INST_DYNAMIC): $(OBJECT) $(MYEXTLIB) $(BOOTSTRAP) $(INST_ARCHAUTODIR)$(DFSEP).
+ 
+     my $libs = '$(LDLOADLIBS)';
+ 
+-    if (($Is{NetBSD} || $Is{Interix} || $Is{Android}) && $Config{'useshrplib'} eq 'true') {
++    if (($Is{Linux} || $Is{NetBSD} || $Is{Interix} || $Is{Android}) && $Config{'useshrplib'} eq 'true') {
+ 	# Use nothing on static perl platforms, and to the flags needed
+ 	# to link against the shared libperl library on shared perl
+ 	# platforms.  We peek at lddlflags to see if we need -Wl,-R
+@@ -941,6 +942,11 @@ $(INST_DYNAMIC): $(OBJECT) $(MYEXTLIB) $(BOOTSTRAP) $(INST_ARCHAUTODIR)$(DFSEP).
+             # The Android linker will not recognize symbols from
+             # libperl unless the module explicitly depends on it.
+             $libs .= ' "-L$(PERL_INC)" -lperl';
++        } else {
++            if ($ENV{PERL_CORE}) {
++                $libs .= ' "-L$(PERL_INC)"';
++            }
++            $libs .= ' -lperl';
+         }
+     }
+ 
+-- 
+1.8.1.4
+
diff --git a/SOURCES/perl-5.16.3-create_libperl_soname.patch b/SOURCES/perl-5.16.3-create_libperl_soname.patch
new file mode 100644
index 0000000..fabadf4
--- /dev/null
+++ b/SOURCES/perl-5.16.3-create_libperl_soname.patch
@@ -0,0 +1,52 @@
+From fa2f0dd5a7767223df10149d3f16d7ed7013e16f Mon Sep 17 00:00:00 2001
+From: Torsten Veller <tove@gentoo.org>
+Date: Sat, 14 Apr 2012 13:49:18 +0200
+Subject: Set libperl soname
+
+Bug-Gentoo: https://bugs.gentoo.org/286840
+
+Patch-Name: gentoo/create_libperl_soname.diff
+---
+ Makefile.SH | 9 +++++++--
+ 1 file changed, 7 insertions(+), 2 deletions(-)
+
+diff --git a/Makefile.SH b/Makefile.SH
+index d1da0a0..7733a32 100755
+--- a/Makefile.SH
++++ b/Makefile.SH
+@@ -58,7 +58,7 @@ true)
+ 				${api_revision}.${api_version}.${api_subversion} \
+ 			     -current_version \
+ 				${revision}.${patchlevel}.${subversion} \
+-			     -install_name \$(shrpdir)/\$@"
++			     -install_name \$(shrpdir)/libperl.${revision}.${patchlevel}.dylib"
+ 		;;
+ 	cygwin*)
+ 		shrpldflags="$shrpldflags -Wl,--out-implib=libperl.dll.a -Wl,--image-base,0x52000000"
+@@ -66,13 +66,15 @@ true)
+ 		;;
+ 	sunos*)
+ 		linklibperl="-lperl"
++		shrpldflags="$shrpldflags -Wl,-soname -Wl,libperl.so.${revision}.${patchlevel}"
+ 		;;
+ 	netbsd*|freebsd[234]*|openbsd*|dragonfly*|bitrig*)
+ 		linklibperl="-L. -lperl"
++		shrpldflags="$shrpldflags -Wl,-soname -Wl,libperl.so.${revision}.${patchlevel}"
+ 		;;
+ 	interix*)
+ 		linklibperl="-L. -lperl"
+-		shrpldflags="$shrpldflags -Wl,--image-base,0x57000000"
++		shrpldflags="$shrpldflags -Wl,--image-base,0x57000000 -Wl,-soname -Wl,libperl.so.${revision}.${patchlevel}"
+ 		;;
+ 	aix*)
+ 		case "$cc" in
+@@ -110,6 +112,9 @@ true)
+ 	    linklibperl='libperl.x'
+ 	    DPERL_EXTERNAL_GLOB=''
+ 	    ;;
++	linux*)
++		shrpldflags="$shrpldflags -Wl,-soname -Wl,libperl.so.${revision}.${patchlevel}"
++	    ;;
+ 	esac
+ 	case "$ldlibpthname" in
+ 	'') ;;
diff --git a/SOURCES/perl-5.18.1-Document-Math-BigInt-CalcEmu-requires-Math-BigInt.patch b/SOURCES/perl-5.18.1-Document-Math-BigInt-CalcEmu-requires-Math-BigInt.patch
new file mode 100644
index 0000000..bed0adc
--- /dev/null
+++ b/SOURCES/perl-5.18.1-Document-Math-BigInt-CalcEmu-requires-Math-BigInt.patch
@@ -0,0 +1,30 @@
+From 862c89c81d26dae0dcef138e19df8b45615e69c9 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= <ppisar@redhat.com>
+Date: Mon, 2 Dec 2013 10:10:56 +0100
+Subject: [PATCH] Document Math::BigInt::CalcEmu requires Math::BigInt
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+<https://rt.cpan.org/Public/Bug/Display.html?id=85015>
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ dist/Math-BigInt/lib/Math/BigInt/CalcEmu.pm | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/dist/Math-BigInt/lib/Math/BigInt/CalcEmu.pm b/dist/Math-BigInt/lib/Math/BigInt/CalcEmu.pm
+index c82e153..0c0b496 100644
+--- a/cpan/Math-BigInt/lib/Math/BigInt/CalcEmu.pm
++++ b/cpan/Math-BigInt/lib/Math/BigInt/CalcEmu.pm
+@@ -290,6 +290,7 @@ Math::BigInt::CalcEmu - Emulate low-level math with BigInt code
+ 
+ =head1 SYNOPSIS
+ 
++	use Math::BigInt;
+ 	use Math::BigInt::CalcEmu;
+ 
+ =head1 DESCRIPTION
+-- 
+1.8.3.1
+
diff --git a/SOURCES/perl-5.18.2-Destroy-GDBM-NDBM-ODBM-SDBM-_File-objects-only-from-.patch b/SOURCES/perl-5.18.2-Destroy-GDBM-NDBM-ODBM-SDBM-_File-objects-only-from-.patch
new file mode 100644
index 0000000..9b503c6
--- /dev/null
+++ b/SOURCES/perl-5.18.2-Destroy-GDBM-NDBM-ODBM-SDBM-_File-objects-only-from-.patch
@@ -0,0 +1,233 @@
+From f793042f2bac2ace9a5c0030b47b41c4db561a5b Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= <ppisar@redhat.com>
+Date: Fri, 6 Jun 2014 14:31:59 +0200
+Subject: [PATCH] Destroy {GDBM,NDBM,ODBM,SDBM}_File objects only from original
+ thread context
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This patch fixes a crash when destroing a hash tied to a *_File
+database after spawning a thread:
+
+use Fcntl;
+use SDBM_File;
+use threads;
+tie(my %dbtest, 'SDBM_File', "test.db", O_RDWR|O_CREAT, 0666);
+threads->new(sub {})->join;
+
+This crashed or paniced depending on how perl was configured.
+
+Closes RT#61912.
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ ext/GDBM_File/GDBM_File.xs | 16 ++++++++++------
+ ext/NDBM_File/NDBM_File.xs | 16 ++++++++++------
+ ext/ODBM_File/ODBM_File.xs | 18 +++++++++++-------
+ ext/SDBM_File/SDBM_File.xs |  4 +++-
+ t/lib/dbmt_common.pl       | 35 +++++++++++++++++++++++++++++++++++
+ 5 files changed, 69 insertions(+), 20 deletions(-)
+
+diff --git a/ext/GDBM_File/GDBM_File.xs b/ext/GDBM_File/GDBM_File.xs
+index 33e08e2..7160f54 100644
+--- a/ext/GDBM_File/GDBM_File.xs
++++ b/ext/GDBM_File/GDBM_File.xs
+@@ -13,6 +13,7 @@
+ #define store_value 3
+ 
+ typedef struct {
++	tTHX    owner;
+ 	GDBM_FILE 	dbp ;
+ 	SV *    filter[4];
+ 	int     filtering ;
+@@ -89,6 +90,7 @@ gdbm_TIEHASH(dbtype, name, read_write, mode)
+ 	    if ((dbp =  gdbm_open(name, GDBM_BLOCKSIZE, read_write, mode,
+ 	       	     	          (FATALFUNC) croak_string))) {
+ 	        RETVAL = (GDBM_File)safecalloc(1, sizeof(GDBM_File_type)) ;
++		RETVAL->owner = aTHX;
+ 		RETVAL->dbp = dbp ;
+ 	    }
+ 	    
+@@ -109,12 +111,14 @@ gdbm_DESTROY(db)
+ 	PREINIT:
+ 	int i = store_value;
+ 	CODE:
+-	gdbm_close(db);
+-	do {
+-	    if (db->filter[i])
+-		SvREFCNT_dec(db->filter[i]);
+-	} while (i-- > 0);
+-	safefree(db);
++	if (db && db->owner == aTHX) {
++	    gdbm_close(db);
++	    do {
++		if (db->filter[i])
++		    SvREFCNT_dec(db->filter[i]);
++	    } while (i-- > 0);
++	    safefree(db);
++	}
+ 
+ #define gdbm_FETCH(db,key)			gdbm_fetch(db->dbp,key)
+ datum_value
+diff --git a/ext/NDBM_File/NDBM_File.xs b/ext/NDBM_File/NDBM_File.xs
+index 52e60fc..af223e5 100644
+--- a/ext/NDBM_File/NDBM_File.xs
++++ b/ext/NDBM_File/NDBM_File.xs
+@@ -33,6 +33,7 @@ END_EXTERN_C
+ #define store_value 3
+ 
+ typedef struct {
++	tTHX    owner;
+ 	DBM * 	dbp ;
+ 	SV *    filter[4];
+ 	int     filtering ;
+@@ -71,6 +72,7 @@ ndbm_TIEHASH(dbtype, filename, flags, mode)
+ 	    RETVAL = NULL ;
+ 	    if ((dbp =  dbm_open(filename, flags, mode))) {
+ 	        RETVAL = (NDBM_File)safecalloc(1, sizeof(NDBM_File_type));
++		RETVAL->owner = aTHX;
+ 		RETVAL->dbp = dbp ;
+ 	    }
+ 	    
+@@ -84,12 +86,14 @@ ndbm_DESTROY(db)
+ 	PREINIT:
+ 	int i = store_value;
+ 	CODE:
+-	dbm_close(db->dbp);
+-	do {
+-	    if (db->filter[i])
+-		SvREFCNT_dec(db->filter[i]);
+-	} while (i-- > 0);
+-	safefree(db);
++	if (db && db->owner == aTHX) {
++	    dbm_close(db->dbp);
++	    do {
++		if (db->filter[i])
++		    SvREFCNT_dec(db->filter[i]);
++	    } while (i-- > 0);
++	    safefree(db);
++	}
+ 
+ #define ndbm_FETCH(db,key)			dbm_fetch(db->dbp,key)
+ datum_value
+diff --git a/ext/ODBM_File/ODBM_File.xs b/ext/ODBM_File/ODBM_File.xs
+index d1ece7f..f7e00a0 100644
+--- a/ext/ODBM_File/ODBM_File.xs
++++ b/ext/ODBM_File/ODBM_File.xs
+@@ -45,6 +45,7 @@ datum	nextkey(datum key);
+ #define store_value 3
+ 
+ typedef struct {
++	tTHX    owner;
+ 	void * 	dbp ;
+ 	SV *    filter[4];
+ 	int     filtering ;
+@@ -112,6 +113,7 @@ odbm_TIEHASH(dbtype, filename, flags, mode)
+ 	    }
+ 	    dbp = (void*)(dbminit(filename) >= 0 ? &dbmrefcnt : 0);
+ 	    RETVAL = (ODBM_File)safecalloc(1, sizeof(ODBM_File_type));
++	    RETVAL->owner = aTHX;
+ 	    RETVAL->dbp = dbp ;
+ 	}
+ 	OUTPUT:
+@@ -124,13 +126,15 @@ DESTROY(db)
+ 	dMY_CXT;
+ 	int i = store_value;
+ 	CODE:
+-	dbmrefcnt--;
+-	dbmclose();
+-	do {
+-	    if (db->filter[i])
+-		SvREFCNT_dec(db->filter[i]);
+-	} while (i-- > 0);
+-	safefree(db);
++	if (db && db->owner == aTHX) {
++	    dbmrefcnt--;
++	    dbmclose();
++	    do {
++		if (db->filter[i])
++		    SvREFCNT_dec(db->filter[i]);
++	    } while (i-- > 0);
++	    safefree(db);
++	}
+ 
+ datum_value
+ odbm_FETCH(db, key)
+diff --git a/ext/SDBM_File/SDBM_File.xs b/ext/SDBM_File/SDBM_File.xs
+index 291e41b..0bdae9a 100644
+--- a/ext/SDBM_File/SDBM_File.xs
++++ b/ext/SDBM_File/SDBM_File.xs
+@@ -10,6 +10,7 @@
+ #define store_value 3
+ 
+ typedef struct {
++	tTHX    owner;
+ 	DBM * 	dbp ;
+ 	SV *    filter[4];
+ 	int     filtering ;
+@@ -49,6 +50,7 @@ sdbm_TIEHASH(dbtype, filename, flags, mode)
+ 	    }
+ 	    if (dbp) {
+ 	        RETVAL = (SDBM_File)safecalloc(1, sizeof(SDBM_File_type));
++		RETVAL->owner = aTHX;
+ 		RETVAL->dbp = dbp ;
+ 	    }
+ 	    
+@@ -60,7 +62,7 @@ void
+ sdbm_DESTROY(db)
+ 	SDBM_File	db
+ 	CODE:
+-	if (db) {
++	if (db && db->owner == aTHX) {
+ 	    int i = store_value;
+ 	    sdbm_close(db->dbp);
+ 	    do {
+diff --git a/t/lib/dbmt_common.pl b/t/lib/dbmt_common.pl
+index 5d4098c..a0a4d52 100644
+--- a/t/lib/dbmt_common.pl
++++ b/t/lib/dbmt_common.pl
+@@ -511,5 +511,40 @@ unlink <Op_dbmx*>, $Dfile;
+    unlink <Op1_dbmx*>;
+ }
+ 
++{
++   # Check DBM back-ends do not destroy objects from then-spawned threads.
++   # RT#61912.
++   SKIP: {
++      my $threads_count = 2;
++      skip 'Threads are disabled', 3 + 2 * $threads_count
++        unless $Config{usethreads};
++      use_ok('threads');
++
++      my %h;
++      unlink <Op1_dbmx*>;
++
++      my $db = tie %h, $DBM_Class, 'Op1_dbmx', $create, 0640;
++      isa_ok($db, $DBM_Class);
++
++      for (1 .. 2) {
++         ok(threads->create(
++            sub {
++               $SIG{'__WARN__'} = sub { fail(shift) }; # debugging perl panics
++                        # report it by spurious TAP line
++               1;
++            }), "Thread $_ created");
++      }
++      for (threads->list) {
++         is($_->join, 1, "A thread exited successfully");
++      }
++
++      pass("Tied object survived exiting threads");
++
++      undef $db;
++      untie %h;
++      unlink <Op1_dbmx*>;
++   }
++}
++
+ done_testing();
+ 1;
+-- 
+1.9.3
+
diff --git a/SOURCES/perl-5.22.0-Install-libperl.so-to-shrpdir-on-Linux.patch b/SOURCES/perl-5.22.0-Install-libperl.so-to-shrpdir-on-Linux.patch
new file mode 100644
index 0000000..6d43814
--- /dev/null
+++ b/SOURCES/perl-5.22.0-Install-libperl.so-to-shrpdir-on-Linux.patch
@@ -0,0 +1,61 @@
+From 9644657c4 10326749fd321d9c24944ec25afad2f Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= <ppisar@redhat.com>
+Date: Thu, 20 Jun 2013 15:22:53 +0200
+Subject: [PATCH] Install libperl.so to shrpdir on Linux
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ Configure   | 7 ++++---
+ Makefile.SH | 2 +-
+ 2 files changed, 5 insertions(+), 4 deletions(-)
+
+diff --git a/Configure b/Configure
+index 2f30261..825496e 100755
+--- a/Configure
++++ b/Configure
+@@ -8249,7 +8249,9 @@ esac
+ 
+ # Detect old use of shrpdir via undocumented Configure -Dshrpdir
+ case "$shrpdir" in
+-'') ;;
++'') 
++shrpdir=$archlibexp/CORE
++;;
+ *)	$cat >&4 <<EOM
+ WARNING:  Use of the shrpdir variable for the installation location of
+ the shared $libperl is not supported.  It was never documented and
+@@ -8279,7 +8281,6 @@ esac
+ # Add $xxx to ccdlflags.
+ # If we can't figure out a command-line option, use $shrpenv to
+ # set env LD_RUN_PATH.  The main perl makefile uses this.
+-shrpdir=$archlibexp/CORE
+ xxx=''
+ tmp_shrpenv=''
+ if "$useshrplib"; then
+@@ -8294,7 +8295,7 @@ if "$useshrplib"; then
+ 		xxx="-Wl,-R$shrpdir"
+ 		;;
+ 	bsdos|linux|irix*|dec_osf|gnu*|haiku)
+-		xxx="-Wl,-rpath,$shrpdir"
++		# We want standard path
+ 		;;
+ 	hpux*)
+ 		# hpux doesn't like the default, either.
+diff --git a/Makefile.SH b/Makefile.SH
+index 7733a32..a481183 100755
+--- a/Makefile.SH
++++ b/Makefile.SH
+@@ -266,7 +266,7 @@ ranlib = $ranlib
+ # installman commandline.
+ bin = $installbin
+ scriptdir = $scriptdir
+-shrpdir = $archlibexp/CORE
++shrpdir = $shrpdir
+ privlib = $installprivlib
+ man1dir = $man1dir
+ man1ext = $man1ext
+-- 
+1.8.1.4
diff --git a/SOURCES/perl-5.22.0-Revert-const-the-core-magic-vtables.patch b/SOURCES/perl-5.22.0-Revert-const-the-core-magic-vtables.patch
new file mode 100644
index 0000000..a769187
--- /dev/null
+++ b/SOURCES/perl-5.22.0-Revert-const-the-core-magic-vtables.patch
@@ -0,0 +1,44 @@
+From 4ccd57ed119eae3847df1ec241daa509f3b86ef3 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= <ppisar@redhat.com>
+Date: Thu, 18 Jun 2015 13:19:49 +0200
+Subject: [PATCH] Revert "const the core magic vtables"
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This reverts commit c910fead7893fe9700031ee59de6b904260b5d69.
+
+It's necessary for Coro-6.43. This patch will be removed once Coro
+will be fixed or in a reasonable time if Coro become unamaintained.
+
+<http://www.nntp.perl.org/group/perl.perl5.porters/2015/06/msg228530.html>
+<https://bugzilla.redhat.com/show_bug.cgi?id=1231165>
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ perl.h | 9 ++++++++-
+ 1 file changed, 8 insertions(+), 1 deletion(-)
+
+diff --git a/perl.h b/perl.h
+index dcb184b..9bce052 100644
+--- a/perl.h
++++ b/perl.h
+@@ -5583,7 +5583,14 @@ EXTCONST runops_proc_t PL_runops_std
+ EXTCONST runops_proc_t PL_runops_dbg
+   INIT(Perl_runops_debug);
+ 
+-#define EXT_MGVTBL EXTCONST MGVTBL
++/* PERL_GLOBAL_STRUCT_PRIVATE wants to keep global data like the
++ * magic vtables const, but this is incompatible with SWIG which
++ * does want to modify the vtables. */
++#ifdef PERL_GLOBAL_STRUCT_PRIVATE
++#  define EXT_MGVTBL EXTCONST MGVTBL
++#else
++#  define EXT_MGVTBL EXT MGVTBL
++#endif
+ 
+ #define PERL_MAGIC_READONLY_ACCEPTABLE 0x40
+ #define PERL_MAGIC_VALUE_MAGIC 0x80
+-- 
+2.1.0
+
diff --git a/SOURCES/perl-5.22.1-Provide-ExtUtils-MM-methods-as-standalone-ExtUtils-M.patch b/SOURCES/perl-5.22.1-Provide-ExtUtils-MM-methods-as-standalone-ExtUtils-M.patch
new file mode 100644
index 0000000..0cfc4c5
--- /dev/null
+++ b/SOURCES/perl-5.22.1-Provide-ExtUtils-MM-methods-as-standalone-ExtUtils-M.patch
@@ -0,0 +1,110 @@
+From 9575301256f67116eccdbb99b38fc804ba3dcf53 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= <ppisar@redhat.com>
+Date: Mon, 18 Apr 2016 16:24:03 +0200
+Subject: [PATCH] Provide ExtUtils::MM methods as standalone
+ ExtUtils::MM::Utils
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+If you cannot afford depending on ExtUtils::MakeMaker, you can
+depend on ExtUtils::MM::Utils instead.
+
+<https://bugzilla.redhat.com/show_bug.cgi?id=1129443>
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ MANIFEST                                         |  1 +
+ cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM/Utils.pm | 68 ++++++++++++++++++++++++
+ 2 files changed, 69 insertions(+)
+ create mode 100644 cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM/Utils.pm
+
+diff --git a/MANIFEST b/MANIFEST
+index 6af238c..d4f0c56 100644
+--- a/MANIFEST
++++ b/MANIFEST
+@@ -1045,6 +1045,7 @@ cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_OS2.pm			MakeMaker methods for OS/2
+ cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM.pm			MakeMaker adaptor class
+ cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_QNX.pm			MakeMaker methods for QNX
+ cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm			MakeMaker methods for Unix
++cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM/Utils.pm		Independed MM methods
+ cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_UWIN.pm			MakeMaker methods for U/WIN
+ cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_VMS.pm			MakeMaker methods for VMS
+ cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_VOS.pm			MakeMaker methods for VOS
+diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM/Utils.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM/Utils.pm
+new file mode 100644
+index 0000000..6bbc0d8
+--- /dev/null
++++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM/Utils.pm
+@@ -0,0 +1,68 @@
++package ExtUtils::MM::Utils;
++
++require 5.006;
++
++use strict;
++use vars qw($VERSION);
++$VERSION = '7.11_06';
++$VERSION = eval $VERSION;  ## no critic [BuiltinFunctions::ProhibitStringyEval]
++
++=head1 NAME
++
++ExtUtils::MM::Utils - ExtUtils::MM methods without dependency on ExtUtils::MakeMaker
++
++=head1 SYNOPSIS
++
++    require ExtUtils::MM::Utils;
++    MM->maybe_command($file);
++
++=head1 DESCRIPTION
++
++This is a collection of L<ExtUtils::MM> subroutines that are used by many
++other modules but that do not need full-featured L<ExtUtils::MakeMaker>. The
++issue with L<ExtUtils::MakeMaker> is it pulls in Perl header files and that is
++an overkill for small subroutines.
++
++An example is the L<IPC::Cmd> that caused installing GCC just because of
++three-line I<maybe_command()> from L<ExtUtils::MM_Unix>.
++
++The intentions is to use L<ExtUtils::MM::Utils> instead of
++L<ExtUtils::MakeMaker> for these trivial methods. You can still call them via
++L<MM> class name.
++
++=head1 METHODS
++
++=over 4
++
++=item maybe_command
++
++Returns true, if the argument is likely to be a command.
++
++=cut
++
++if (!exists $INC{'ExtUtils/MM.pm'}) {
++    *MM::maybe_command = *ExtUtils::MM::maybe_command = \&maybe_command;
++}
++
++sub maybe_command {
++    my($self,$file) = @_;
++    return $file if -x $file && ! -d $file;
++    return;
++}
++
++1;
++
++=back
++
++=head1 BUGS
++
++These methods are copied from L<ExtUtils::MM_Unix>. Other operating systems
++are not supported yet. The reason is this
++L<a hack for Linux
++distributions|https://bugzilla.redhat.com/show_bug.cgi?id=1129443>.
++
++=head1 SEE ALSO
++
++L<ExtUtils::MakeMaker>, L<ExtUtils::MM>
++
++=cut
+-- 
+2.5.5
+
diff --git a/SOURCES/perl-5.22.1-Replace-EU-MM-dependnecy-with-EU-MM-Utils-in-IPC-Cmd.patch b/SOURCES/perl-5.22.1-Replace-EU-MM-dependnecy-with-EU-MM-Utils-in-IPC-Cmd.patch
new file mode 100644
index 0000000..572d37e
--- /dev/null
+++ b/SOURCES/perl-5.22.1-Replace-EU-MM-dependnecy-with-EU-MM-Utils-in-IPC-Cmd.patch
@@ -0,0 +1,34 @@
+From 216ddd39adb0043930acad70ff242c30a1b0c6cf Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= <ppisar@redhat.com>
+Date: Mon, 18 Apr 2016 16:39:32 +0200
+Subject: [PATCH] Replace EU::MM dependnecy with EU::MM::Utils in IPC::Cmd
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This allows to free from a run-time dependency on fat
+ExtUtils::MakeMaker.
+
+<https://bugzilla.redhat.com/show_bug.cgi?id=1129443>
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ cpan/IPC-Cmd/lib/IPC/Cmd.pm | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/cpan/IPC-Cmd/lib/IPC/Cmd.pm b/cpan/IPC-Cmd/lib/IPC/Cmd.pm
+index 6a82bdf..b6cd7ef 100644
+--- a/cpan/IPC-Cmd/lib/IPC/Cmd.pm
++++ b/cpan/IPC-Cmd/lib/IPC/Cmd.pm
+@@ -230,7 +230,7 @@ sub can_run {
+     }
+ 
+     require File::Spec;
+-    require ExtUtils::MakeMaker;
++    require ExtUtils::MM::Utils;
+ 
+     my @possibles;
+ 
+-- 
+2.5.5
+
diff --git a/SOURCES/perl-5.24.0-assertion-failure-in-.-or-0-x-0.patch b/SOURCES/perl-5.24.0-assertion-failure-in-.-or-0-x-0.patch
new file mode 100644
index 0000000..ee37f0b
--- /dev/null
+++ b/SOURCES/perl-5.24.0-assertion-failure-in-.-or-0-x-0.patch
@@ -0,0 +1,73 @@
+From 702cf95bcb627f2b3b44fad409df7f0fd517af60 Mon Sep 17 00:00:00 2001
+From: David Mitchell <davem@iabyn.com>
+Date: Mon, 5 Dec 2016 14:54:44 +0000
+Subject: [PATCH] assertion failure in ... or ((0) x 0))
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Petr Pisar: Ported to 5.24.0:
+
+commit 5aa240eab7dbaa91f98c2fee1f04b6c0b5a9b9e3
+Author: David Mitchell <davem@iabyn.com>
+Date:   Mon Dec 5 14:54:44 2016 +0000
+
+    assertion failure in ... or ((0) x 0))
+
+    [perl #130247] Perl_rpeep(OP *): Assertion `oldop' failed
+
+    the 'x 0' optimising code in rpeep didn't expect the repeat expression
+    to occur on the op_other side of an op_next chain.
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ op.c          |  4 ++--
+ t/op/repeat.t | 11 ++++++++++-
+ 2 files changed, 12 insertions(+), 3 deletions(-)
+
+diff --git a/op.c b/op.c
+index d7b900e..018d90c 100644
+--- a/op.c
++++ b/op.c
+@@ -13573,10 +13573,10 @@ Perl_rpeep(pTHX_ OP *o)
+                  && kid->op_next->op_type == OP_REPEAT
+                  && kid->op_next->op_private & OPpREPEAT_DOLIST
+                  && (kid->op_next->op_flags & OPf_WANT) == OPf_WANT_LIST
+-                 && SvIOK(kSVOP_sv) && SvIVX(kSVOP_sv) == 0)
++                 && SvIOK(kSVOP_sv) && SvIVX(kSVOP_sv) == 0
++                 && oldop)
+                 {
+                     o = kid->op_next; /* repeat */
+-                    assert(oldop);
+                     oldop->op_next = o;
+                     op_free(cBINOPo->op_first);
+                     op_free(cBINOPo->op_last );
+diff --git a/t/op/repeat.t b/t/op/repeat.t
+index bee7dac..c933475 100644
+--- a/t/op/repeat.t
++++ b/t/op/repeat.t
+@@ -6,7 +6,7 @@ BEGIN {
+ }
+ 
+ require './test.pl';
+-plan(tests => 48);
++plan(tests => 49);
+ 
+ # compile time
+ 
+@@ -183,3 +183,12 @@ fresh_perl_like(
+   {  },
+  '(1) x ~1',
+ );
++
++# [perl #130247] Perl_rpeep(OP *): Assertion `oldop' failed
++# 
++# the 'x 0' optimising code in rpeep didn't expect the repeat expression
++# to occur on the op_other side of an op_next chain.
++# This used to give an assertion failure
++
++eval q{() = (() or ((0) x 0)); 1};
++is($@, "", "RT #130247");
+-- 
+2.7.4
+
diff --git a/SOURCES/perl-5.24.0-clean-up-gv_fetchmethod_pvn_flags-introduce-name_end.patch b/SOURCES/perl-5.24.0-clean-up-gv_fetchmethod_pvn_flags-introduce-name_end.patch
new file mode 100644
index 0000000..aaaa801
--- /dev/null
+++ b/SOURCES/perl-5.24.0-clean-up-gv_fetchmethod_pvn_flags-introduce-name_end.patch
@@ -0,0 +1,94 @@
+From af04cb4d2503c5c75d2229e232b8a0bd5c210084 Mon Sep 17 00:00:00 2001
+From: Yves Orton <demerphq@gmail.com>
+Date: Tue, 13 Sep 2016 23:06:07 +0200
+Subject: [PATCH] clean up gv_fetchmethod_pvn_flags: introduce name_end
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Ported to 5.24.0:
+
+commit 65308f87d02a1900e59f0002fa94c855d4d4c5df
+Author: Yves Orton <demerphq@gmail.com>
+Date:   Tue Sep 13 23:06:07 2016 +0200
+
+    clean up gv_fetchmethod_pvn_flags: introduce name_end
+
+    nend is used for too many things, this replaces various
+    uses of nend with name_end, which is constant.
+
+    this is a first step to fixing [perl #129267], which shouldnt
+    change any behavior
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ gv.c | 14 ++++++++------
+ 1 file changed, 8 insertions(+), 6 deletions(-)
+
+diff --git a/gv.c b/gv.c
+index 28396de..d738bf0 100644
+--- a/gv.c
++++ b/gv.c
+@@ -1014,6 +1014,8 @@ Perl_gv_fetchmethod_pv_flags(pTHX_ HV *stash, const char *name, U32 flags)
+ GV *
+ Perl_gv_fetchmethod_pvn_flags(pTHX_ HV *stash, const char *name, const STRLEN len, U32 flags)
+ {
++    const char * const origname = name;
++    const char * const name_end = name + len;
+     const char *nend;
+     const char *nsplit = NULL;
+     GV* gv;
+@@ -1034,7 +1036,7 @@ Perl_gv_fetchmethod_pvn_flags(pTHX_ HV *stash, const char *name, const STRLEN le
+ 	   the error reporting code.  */
+     }
+ 
+-    for (nend = name; *nend || nend != (origname + len); nend++) {
++    for (nend = name; *nend || nend != name_end; nend++) {
+ 	if (*nend == '\'') {
+ 	    nsplit = nend;
+ 	    name = nend + 1;
+@@ -1065,13 +1067,13 @@ Perl_gv_fetchmethod_pvn_flags(pTHX_ HV *stash, const char *name, const STRLEN le
+ 	ostash = stash;
+     }
+ 
+-    gv = gv_fetchmeth_pvn(stash, name, nend - name, 0, flags);
++    gv = gv_fetchmeth_pvn(stash, name, name_end - name, 0, flags);
+     if (!gv) {
+ 	if (strEQ(name,"import") || strEQ(name,"unimport"))
+ 	    gv = MUTABLE_GV(&PL_sv_yes);
+ 	else if (autoload)
+ 	    gv = gv_autoload_pvn(
+-		ostash, name, nend - name, GV_AUTOLOAD_ISMETHOD|flags
++		ostash, name, name_end - name, GV_AUTOLOAD_ISMETHOD|flags
+ 	    );
+ 	if (!gv && do_croak) {
+ 	    /* Right now this is exclusively for the benefit of S_method_common
+@@ -1087,14 +1089,14 @@ Perl_gv_fetchmethod_pvn_flags(pTHX_ HV *stash, const char *name, const STRLEN le
+ 				       HV_FETCH_ISEXISTS, NULL, 0)
+ 		) {
+ 		    require_pv("IO/File.pm");
+-		    gv = gv_fetchmeth_pvn(stash, name, nend - name, 0, flags);
++		    gv = gv_fetchmeth_pvn(stash, name, name_end - name, 0, flags);
+ 		    if (gv)
+ 			return gv;
+ 		}
+ 		Perl_croak(aTHX_
+ 			   "Can't locate object method \"%"UTF8f
+ 			   "\" via package \"%"HEKf"\"",
+-			            UTF8fARG(is_utf8, nend - name, name),
++			            UTF8fARG(is_utf8, name_end - name, name),
+                                     HEKfARG(HvNAME_HEK(stash)));
+ 	    }
+ 	    else {
+@@ -1111,7 +1113,7 @@ Perl_gv_fetchmethod_pvn_flags(pTHX_ HV *stash, const char *name, const STRLEN le
+ 			   "Can't locate object method \"%"UTF8f
+ 			   "\" via package \"%"SVf"\""
+ 			   " (perhaps you forgot to load \"%"SVf"\"?)",
+-			   UTF8fARG(is_utf8, nend - name, name),
++			   UTF8fARG(is_utf8, name_end - name, name),
+                            SVfARG(packnamesv), SVfARG(packnamesv));
+ 	    }
+ 	}
+-- 
+2.7.4
+
diff --git a/SOURCES/perl-5.24.0-crash-on-explicit-return-from-s-e.patch b/SOURCES/perl-5.24.0-crash-on-explicit-return-from-s-e.patch
new file mode 100644
index 0000000..fb71af0
--- /dev/null
+++ b/SOURCES/perl-5.24.0-crash-on-explicit-return-from-s-e.patch
@@ -0,0 +1,94 @@
+From 2c639acf40b4abc2783352f8e20dbfb68389e633 Mon Sep 17 00:00:00 2001
+From: David Mitchell <davem@iabyn.com>
+Date: Mon, 28 Nov 2016 08:03:49 +0000
+Subject: [PATCH] crash on explicit return from s///e
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Petr Pisar: Ported to 5.24.0:
+
+commit 7332835e5da7b7a793ef814a84e53003be1d0138
+Author: David Mitchell <davem@iabyn.com>
+Date:   Mon Nov 28 08:03:49 2016 +0000
+
+    crash on explicit return from s///e
+
+    RT #130188
+
+    In
+
+        sub f {
+            my $x = 'a';
+            $x =~ s/./return;/e;
+        }
+
+    the 'return' triggers popping any contexts above the subroutine context:
+    in this case, a CXt_SUBST context. In this case, Perl_dounwind() calls
+    cx_popblock() for the bottom-most popped context, to restore any saved
+    vars. However, CXt_SUBST is the one context type which *doesn't* use
+    'struct block' as part of its context struct union, so you can't
+    cx_popblock() a CXt_SUBST context.
+
+    This commit makes it skip the cx_popblock() in this case.
+
+    Bug was introduced by me with v5.23.7-235-gfc6e609.
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ pp_ctl.c     |  6 ++++++
+ t/re/subst.t | 17 ++++++++++++++++-
+ 2 files changed, 22 insertions(+), 1 deletion(-)
+
+diff --git a/pp_ctl.c b/pp_ctl.c
+index 99ff59a..b94c09a 100644
+--- a/pp_ctl.c
++++ b/pp_ctl.c
+@@ -1529,6 +1529,12 @@ Perl_dounwind(pTHX_ I32 cxix)
+ 	switch (CxTYPE(cx)) {
+ 	case CXt_SUBST:
+ 	    CX_POPSUBST(cx);
++            /* CXt_SUBST is not a block context type, so skip the
++             * cx_popblock(cx) below */
++            if (cxstack_ix == cxix + 1) {
++                cxstack_ix--;
++                return;
++            }
+ 	    break;
+ 	case CXt_SUB:
+ 	    cx_popsub(cx);
+diff --git a/t/re/subst.t b/t/re/subst.t
+index 26a78c7..c039cc4 100644
+--- a/t/re/subst.t
++++ b/t/re/subst.t
+@@ -11,7 +11,7 @@ BEGIN {
+     require './loc_tools.pl';
+ }
+ 
+-plan( tests => 271 );
++plan( tests => 272 );
+ 
+ $_ = 'david';
+ $a = s/david/rules/r;
+@@ -1119,3 +1119,15 @@ SKIP: {
+                    {stderr => 1 },
+                    '[perl #129038 ] s/\xff//l no longer crashes');
+ }
++
++# [perl #130188] crash on return from substitution in subroutine
++# make sure returning from s///e doesn't SEGV
++{
++    my $f = sub {
++        my $x = 'a';
++        $x =~ s/./return;/e;
++    };
++    my $x = $f->();
++    pass("RT #130188");
++}
++
++
++
++
+-- 
+2.7.4
+
diff --git a/SOURCES/perl-5.24.0-perl-129130-make-chdir-allocate-the-stack-it-needs.patch b/SOURCES/perl-5.24.0-perl-129130-make-chdir-allocate-the-stack-it-needs.patch
new file mode 100644
index 0000000..c3b723a
--- /dev/null
+++ b/SOURCES/perl-5.24.0-perl-129130-make-chdir-allocate-the-stack-it-needs.patch
@@ -0,0 +1,66 @@
+From d47812b974b515e952dc093e692bf15f0a9afbc4 Mon Sep 17 00:00:00 2001
+From: Tony Cook <tony@develop-help.com>
+Date: Mon, 5 Sep 2016 15:40:11 +1000
+Subject: [PATCH] (perl #129130) make chdir allocate the stack it needs
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Ported to 5.24.0:
+
+commit 92c843fb4b4e1a1e0ac7ec0fe198dc77266838da
+Author: Tony Cook <tony@develop-help.com>
+Date:   Mon Sep 5 15:40:11 2016 +1000
+
+    (perl #129130) make chdir allocate the stack it needs
+
+    chdir with no argument didn't ensure there was stack space available
+    for its result.
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ pp_sys.c     | 1 +
+ t/op/chdir.t | 8 +++++++-
+ 2 files changed, 8 insertions(+), 1 deletion(-)
+
+diff --git a/pp_sys.c b/pp_sys.c
+index 3bf2673..d2cf872 100644
+--- a/pp_sys.c
++++ b/pp_sys.c
+@@ -3639,6 +3639,7 @@ PP(pp_chdir)
+ 	HV * const table = GvHVn(PL_envgv);
+ 	SV **svp;
+ 
++        EXTEND(SP, 1);
+         if (    (svp = hv_fetchs(table, "HOME", FALSE))
+              || (svp = hv_fetchs(table, "LOGDIR", FALSE))
+ #ifdef VMS
+diff --git a/t/op/chdir.t b/t/op/chdir.t
+index a5ea76a..685e556 100644
+--- a/t/op/chdir.t
++++ b/t/op/chdir.t
+@@ -10,7 +10,7 @@ BEGIN {
+     # possibilities into @INC.
+     unshift @INC, qw(t . lib ../lib);
+     require "test.pl";
+-    plan(tests => 47);
++    plan(tests => 48);
+ }
+ 
+ use Config;
+@@ -161,6 +161,12 @@ sub check_env {
+     }
+ }
+ 
++fresh_perl_is(<<'EOP', '', { stderr => 1 }, "check stack handling");
++for $x (map $_+1, 1 .. 100) {
++  map chdir, 1 .. $x;
++}
++EOP
++
+ my %Saved_Env = ();
+ sub clean_env {
+     foreach my $env (@magic_envs) {
+-- 
+2.7.4
+
diff --git a/SOURCES/perl-5.24.0-perl-129164-Crash-with-splice.patch b/SOURCES/perl-5.24.0-perl-129164-Crash-with-splice.patch
new file mode 100644
index 0000000..44dbe0c
--- /dev/null
+++ b/SOURCES/perl-5.24.0-perl-129164-Crash-with-splice.patch
@@ -0,0 +1,79 @@
+From 54550573a613ad20f00521880f345644a1db85cc Mon Sep 17 00:00:00 2001
+From: Father Chrysostomos <sprout@cpan.org>
+Date: Sun, 11 Sep 2016 21:29:56 -0700
+Subject: [PATCH] Crash with splice
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Ported to 5.24.0:
+
+commit 92b69f6501b4d7351e09c8b1ddd386aa7e1c9cd1
+Author: Father Chrysostomos <sprout@cpan.org>
+Date:   Sun Sep 11 21:29:56 2016 -0700
+
+    [perl #129164] Crash with splice
+
+    This fixes #129166 and #129167 as well.
+
+    splice needs to take into account that arrays can hold NULLs and
+    return &PL_sv_undef in those cases where it would have returned a
+    NULL element.
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ pp.c         |  4 ++++
+ t/op/array.t | 17 +++++++++++++++++
+ 2 files changed, 21 insertions(+)
+
+diff --git a/pp.c b/pp.c
+index 4a2cde0..4153482 100644
+--- a/pp.c
++++ b/pp.c
+@@ -5488,6 +5488,8 @@ PP(pp_splice)
+ 		for (i = length - 1, dst = &AvARRAY(ary)[offset]; i > 0; i--)
+ 		    SvREFCNT_dec(*dst++);	/* free them now */
+ 	    }
++	    if (!*MARK)
++		*MARK = &PL_sv_undef;
+ 	}
+ 	AvFILLp(ary) += diff;
+ 
+@@ -5584,6 +5586,8 @@ PP(pp_splice)
+ 		while (length-- > 0)
+ 		    SvREFCNT_dec(tmparyval[length]);
+ 	    }
++	    if (!*MARK)
++		*MARK = &PL_sv_undef;
+ 	}
+ 	else
+ 	    *MARK = &PL_sv_undef;
+diff --git a/t/op/array.t b/t/op/array.t
+index 4f0a772..fb4e8c6 100644
+--- a/t/op/array.t
++++ b/t/op/array.t
+@@ -555,4 +555,21 @@ is $#foo, 3, 'assigning to arylen aliased in foreach(scalar $#arylen)';
+     is "@a", 'a b c', 'assigning to itself';
+ }
+ 
++# [perl #129164], [perl #129166], [perl #129167]
++# splice() with null array entries
++# These used to crash.
++$#a = -1; $#a++;
++() = 0-splice @a; # subtract
++$#a = -1; $#a++;
++() =  -splice @a; # negate
++$#a = -1; $#a++;
++() = 0+splice @a; # add
++# And with array expansion, too
++$#a = -1; $#a++;
++() = 0-splice @a, 0, 1, 1, 1;
++$#a = -1; $#a++;
++() =  -splice @a, 0, 1, 1, 1;
++$#a = -1; $#a++;
++() = 0+splice @a, 0, 1, 1, 1;
++
+ "We're included by lib/Tie/Array/std.t so we need to return something true";
+-- 
+2.7.4
+
diff --git a/SOURCES/perl-5.24.0-perl-129788-IO-Poll-fix-memory-leak.patch b/SOURCES/perl-5.24.0-perl-129788-IO-Poll-fix-memory-leak.patch
new file mode 100644
index 0000000..aa6f20f
--- /dev/null
+++ b/SOURCES/perl-5.24.0-perl-129788-IO-Poll-fix-memory-leak.patch
@@ -0,0 +1,134 @@
+From 478d23ef9e7700e20a75907648dd4c53b1b4f544 Mon Sep 17 00:00:00 2001
+From: Tony Cook <tony@develop-help.com>
+Date: Tue, 25 Oct 2016 16:17:18 +1100
+Subject: [PATCH] (perl #129788) IO::Poll: fix memory leak
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Petr Pisar: Ported to 5.24.0:
+
+commit 6de2dd46140d0d3ab6813e26940d7b74418b0260
+Author: Tony Cook <tony@develop-help.com>
+Date:   Tue Oct 25 16:17:18 2016 +1100
+
+    (perl #129788) IO::Poll: fix memory leak
+
+    Whenever a magical/tied scalar which dies upon read was passed to _poll()
+    temporary buffer for events was not freed.
+
+    Adapted from a patch by Sergey Aleynikov <sergey.aleynikov@gmail.com>
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ MANIFEST            |  1 +
+ META.json           |  1 +
+ META.yml            |  1 +
+ dist/IO/IO.xs       |  3 +--
+ dist/IO/t/io_leak.t | 37 +++++++++++++++++++++++++++++++++++++
+ 5 files changed, 41 insertions(+), 2 deletions(-)
+ create mode 100644 dist/IO/t/io_leak.t
+
+diff --git a/MANIFEST b/MANIFEST
+index 2cdf616..3b5f8fb 100644
+--- a/MANIFEST
++++ b/MANIFEST
+@@ -3228,6 +3228,7 @@ dist/IO/t/io_dir.t		See if directory-related methods from IO work
+ dist/IO/t/io_dup.t		See if dup()-related methods from IO work
+ dist/IO/t/io_file_export.t	Test IO::File exports
+ dist/IO/t/io_file.t		See if binmode()-related methods on IO::File work
++dist/IO/t/io_leak.t		See if IO leaks SVs (only run in core)
+ dist/IO/t/io_linenum.t		See if I/O line numbers are tracked correctly
+ dist/IO/t/io_multihomed.t	See if INET sockets work with multi-homed hosts
+ dist/IO/t/io_pipe.t		See if pipe()-related methods from IO work
+diff --git a/META.json b/META.json
+index 4cb21a9..2809b58 100644
+--- a/META.json
++++ b/META.json
+@@ -84,6 +84,7 @@
+          "dist/IO/t/io_dup.t",
+          "dist/IO/t/io_file.t",
+          "dist/IO/t/io_file_export.t",
++         "dist/IO/t/io_leak.t",
+          "dist/IO/t/io_linenum.t",
+          "dist/IO/t/io_multihomed.t",
+          "dist/IO/t/io_pipe.t",
+diff --git a/META.yml b/META.yml
+index 13a2bb3..7494d2a 100644
+--- a/META.yml
++++ b/META.yml
+@@ -81,6 +81,7 @@ no_index:
+     - dist/IO/t/io_dup.t
+     - dist/IO/t/io_file.t
+     - dist/IO/t/io_file_export.t
++    - dist/IO/t/io_leak.t
+     - dist/IO/t/io_linenum.t
+     - dist/IO/t/io_multihomed.t
+     - dist/IO/t/io_pipe.t
+diff --git a/dist/IO/IO.xs b/dist/IO/IO.xs
+index fe749a6..15ef9b2 100644
+--- a/dist/IO/IO.xs
++++ b/dist/IO/IO.xs
+@@ -318,7 +318,7 @@ PPCODE:
+ {
+ #ifdef HAS_POLL
+     const int nfd = (items - 1) / 2;
+-    SV *tmpsv = NEWSV(999,nfd * sizeof(struct pollfd));
++    SV *tmpsv = sv_2mortal(NEWSV(999,nfd * sizeof(struct pollfd)));
+     /* We should pass _some_ valid pointer even if nfd is zero, but it
+      * doesn't matter what it is, since we're telling it to not check any fds.
+      */
+@@ -337,7 +337,6 @@ PPCODE:
+ 	    sv_setiv(ST(i), fds[j].revents); i++;
+ 	}
+     }
+-    SvREFCNT_dec(tmpsv);
+     XSRETURN_IV(ret);
+ #else
+ 	not_here("IO::Poll::poll");
+diff --git a/dist/IO/t/io_leak.t b/dist/IO/t/io_leak.t
+new file mode 100644
+index 0000000..08cbe2b
+--- /dev/null
++++ b/dist/IO/t/io_leak.t
+@@ -0,0 +1,37 @@
++#!/usr/bin/perl
++
++use warnings;
++use strict;
++
++use Test::More;
++
++eval { require XS::APItest; XS::APItest->import('sv_count'); 1 }
++  or plan skip_all => "No XS::APItest::sv_count() available";
++
++plan tests => 1;
++
++sub leak {
++    my ($n, $delta, $code, $name) = @_;
++    my $sv0 = 0;
++    my $sv1 = 0;
++    for my $i (1..$n) {
++	&$code();
++	$sv1 = sv_count();
++	$sv0 = $sv1 if $i == 1;
++    }
++    cmp_ok($sv1-$sv0, '<=', ($n-1)*$delta, $name);
++}
++
++# [perl #129788] IO::Poll shouldn't leak on errors
++{
++    package io_poll_leak;
++    use IO::Poll;
++
++    sub TIESCALAR { bless {} }
++    sub FETCH { die }
++
++    tie(my $a, __PACKAGE__);
++    sub f {eval { IO::Poll::_poll(0, $a, 1) }}
++
++    ::leak(5, 0, \&f, q{IO::Poll::_poll shouldn't leak});
++}
+-- 
+2.7.4
+
diff --git a/SOURCES/perl-5.24.0-regcomp.c-fix-perl-129950-fix-firstchar-bitmap-under.patch b/SOURCES/perl-5.24.0-regcomp.c-fix-perl-129950-fix-firstchar-bitmap-under.patch
new file mode 100644
index 0000000..82eeea6
--- /dev/null
+++ b/SOURCES/perl-5.24.0-regcomp.c-fix-perl-129950-fix-firstchar-bitmap-under.patch
@@ -0,0 +1,97 @@
+From 1b90dad20879f0e7a3eced5da0e0aacda93708ed Mon Sep 17 00:00:00 2001
+From: Yves Orton <demerphq@gmail.com>
+Date: Thu, 27 Oct 2016 13:52:24 +0200
+Subject: [PATCH] regcomp.c: fix perl #129950 - fix firstchar bitmap under utf8
+ with prefix optimisation
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Ported to 5.24.0:
+
+commit da42332b10691ba7af7550035ffc7f46c87e4e66
+Author: Yves Orton <demerphq@gmail.com>
+Date:   Thu Oct 27 13:52:24 2016 +0200
+
+    regcomp.c: fix perl #129950 - fix firstchar bitmap under utf8 with prefix optimisation
+
+    The trie code contains a number of sub optimisations, one of which
+    extracts common prefixes from alternations, and another which isa
+    bitmap of the possible matching first chars.
+
+    The bitmap needs to contain the possible first octets of the string
+    which the trie can match, and for codepoints which might have a different
+    first octet under utf8 or non-utf8 need to register BOTH codepoints.
+
+    So for instance in the pattern (?:a|a\x{E4}) we should restructure this
+    as a(|\x{E4), and the bitmap for the trie should contain both \x{E4} AND
+    \x{C3} as \x{C3} is the first byte of \x{EF} expressed as utf8.
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ regcomp.c  | 14 ++++++++++++++
+ t/re/pat.t |  9 ++++++++-
+ 2 files changed, 22 insertions(+), 1 deletion(-)
+
+diff --git a/regcomp.c b/regcomp.c
+index 7462885..bcb8db5 100644
+--- a/regcomp.c
++++ b/regcomp.c
+@@ -3272,6 +3272,13 @@ S_make_trie(pTHX_ RExC_state_t *pRExC_state, regnode *startbranch,
+                                     TRIE_BITMAP_SET(trie,*ch);
+                                     if ( folder )
+                                         TRIE_BITMAP_SET(trie, folder[ *ch ]);
++                                    if ( !UTF ) {
++                                        /* store first byte of utf8 representation of
++                                           variant codepoints */
++                                        if (! UVCHR_IS_INVARIANT(*ch)) {
++                                            TRIE_BITMAP_SET(trie, UTF8_TWO_BYTE_HI(*ch));
++                                        }
++                                    }
+                                     DEBUG_OPTIMISE_r(
+                                         Perl_re_printf( aTHX_  "%s", (char*)ch)
+                                     );
+@@ -3280,6 +3287,13 @@ S_make_trie(pTHX_ RExC_state_t *pRExC_state, regnode *startbranch,
+ 			    TRIE_BITMAP_SET(trie,*ch);
+ 			    if ( folder )
+ 				TRIE_BITMAP_SET(trie,folder[ *ch ]);
++                            if ( !UTF ) {
++                                /* store first byte of utf8 representation of
++                                   variant codepoints */
++                                if (! UVCHR_IS_INVARIANT(*ch)) {
++                                    TRIE_BITMAP_SET(trie, UTF8_TWO_BYTE_HI(*ch));
++                                }
++                            }
+                             DEBUG_OPTIMISE_r(Perl_re_printf( aTHX_ "%s", ch));
+ 			}
+                         idx = ofs;
+diff --git a/t/re/pat.t b/t/re/pat.t
+index 295a9f7..4aa77cf 100644
+--- a/t/re/pat.t
++++ b/t/re/pat.t
+@@ -23,7 +23,7 @@ BEGIN {
+     skip_all_without_unicode_tables();
+ }
+ 
+-plan tests => 789;  # Update this when adding/deleting tests.
++plan tests => 791;  # Update this when adding/deleting tests.
+ 
+ run_tests() unless caller;
+ 
+@@ -1758,6 +1758,13 @@ EOP
+                 fresh_perl_is($code, $expect, {}, "$bug - $test_name" );
+             }
+         }
++
++        {
++            my $str = "a\xE4";
++            ok( $str =~ m{^(a|a\x{e4})$}, "fix [perl #129950] - latin1 case" );
++            utf8::upgrade($str);
++            ok( $str =~ m{^(a|a\x{e4})$}, "fix [perl #129950] - utf8 case" );
++        }
+ } # End of sub run_tests
+ 
+ 1;
+-- 
+2.7.4
+
diff --git a/SOURCES/perl-5.24.0-rt-129336-perl-i-u-erroneously-interpreted-as-u.patch b/SOURCES/perl-5.24.0-rt-129336-perl-i-u-erroneously-interpreted-as-u.patch
new file mode 100644
index 0000000..6438669
--- /dev/null
+++ b/SOURCES/perl-5.24.0-rt-129336-perl-i-u-erroneously-interpreted-as-u.patch
@@ -0,0 +1,92 @@
+From 03fcc0c44bc7972f2c92736daae5b63d601b7c49 Mon Sep 17 00:00:00 2001
+From: Dan Collins <dcollinsn@gmail.com>
+Date: Fri, 23 Sep 2016 01:21:20 -0400
+Subject: [PATCH] [rt #129336] #!perl -i u erroneously interpreted as -u
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Ported to 5.24.0:
+
+commit f54cfdacff1f3744ef08fc70f1f3bc6c7d862e83
+Author: Dan Collins <dcollinsn@gmail.com>
+Date:   Fri Sep 23 01:21:20 2016 -0400
+
+    [rt #129336] #!perl -i u erroneously interpreted as -u
+
+    Perl_moreswitches processes a single switch, and returns a pointer
+    to the start of the next switch. It can return either
+    the a pointer to the next flag itself:
+
+        #!perl -n -p
+                   ^ Can point here
+
+    Or, to the space before the next "arg":
+
+        #!perl -n -p
+                 ^ Can point here
+
+    (Where the next call to Perl_moreswitches will consume " -".)
+
+    In the case of -i[extension], the pointer is by default pointing at
+    the space after the end of the argument. The current code tries to
+    do the former, by unconditionally advancing the pointer, and then
+    advancing it again if it is on a '-'. But that is incorrect:
+
+        #!perl -i p
+                  ^ Will point here, but that isn't a flag
+
+    I could fix this by removing the unconditional s++, and having it
+    increment by 2 if *(s+1)=='-', but this work isn't actually
+    necessary - it's better to just leave it pointing at the space after
+    the argument.
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ perl.c     | 5 -----
+ t/op/lex.t | 9 ++++++++-
+ 2 files changed, 8 insertions(+), 6 deletions(-)
+
+diff --git a/perl.c b/perl.c
+index 228a0d8..5cc7d0b 100644
+--- a/perl.c
++++ b/perl.c
+@@ -3306,11 +3306,6 @@ Perl_moreswitches(pTHX_ const char *s)
+ 
+ 	    PL_inplace = savepvn(start, s - start);
+ 	}
+-	if (*s) {
+-	    ++s;
+-	    if (*s == '-')	/* Additional switches on #! line. */
+-		s++;
+-	}
+ 	return s;
+     case 'I':	/* -I handled both here and in parse_body() */
+ 	forbid_setid('I', FALSE);
+diff --git a/t/op/lex.t b/t/op/lex.t
+index c515449..9ada592 100644
+--- a/t/op/lex.t
++++ b/t/op/lex.t
+@@ -7,7 +7,7 @@ use warnings;
+ 
+ BEGIN { chdir 't' if -d 't'; require './test.pl'; }
+ 
+-plan(tests => 26);
++plan(tests => 27);
+ 
+ {
+     no warnings 'deprecated';
+@@ -209,3 +209,10 @@ fresh_perl_is(
+    { stderr => 1 },
+   's;@{<<a; [perl #123995]'
+ );
++
++fresh_perl_like(
++    "#!perl -i u\nprint 'OK'",
++    qr/OK/,
++    {},
++    '[perl #129336] - #!perl -i argument handling'
++);
+-- 
+2.7.4
+
diff --git a/SOURCES/perl-5.24.0-split-was-leaving-PL_sv_undef-in-unused-ary-slots.patch b/SOURCES/perl-5.24.0-split-was-leaving-PL_sv_undef-in-unused-ary-slots.patch
new file mode 100644
index 0000000..7f9de6d
--- /dev/null
+++ b/SOURCES/perl-5.24.0-split-was-leaving-PL_sv_undef-in-unused-ary-slots.patch
@@ -0,0 +1,94 @@
+From 27a8a9e2a55ccc148582006396a9c35bafa5f0b3 Mon Sep 17 00:00:00 2001
+From: David Mitchell <davem@iabyn.com>
+Date: Wed, 30 Nov 2016 08:59:01 +0000
+Subject: [PATCH] split was leaving PL_sv_undef in unused ary slots
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Petr Pisar: Ported to 5.24.0:
+
+commit 71ca73e5fa9639ac33e9f2e74cd0c32288a5040d
+Author: David Mitchell <davem@iabyn.com>
+Date:   Wed Nov 30 08:59:01 2016 +0000
+
+    split was leaving PL_sv_undef in unused ary slots
+
+    This:
+
+        @a = split(/-/,"-");
+        $a[1] = undef;
+        $a[0] = 0;
+
+    was giving
+
+        Modification of a read-only value attempted at foo line 3.
+
+    This is because:
+
+    1) unused slots in AvARRAY between AvFILL and AvMAX should always be
+    null; av_clear(), av_extend() etc do this; while av_store(), if storing
+    to a slot N somewhere between AvFILL and AvMAX, doesn't bother to clear
+    between (AvFILL+1)..(N-1) on the assumption that everyone else plays
+    nicely.
+
+    2) pp_split() when splitting directly to an array, sometimes over-splits
+    and has to null out the excess elements;
+
+    3) Since perl 5.19.4, unused AV slots are now marked with NULL rather than
+    &PL_sv_undef;
+
+    4) pp_split was still using &PL_sv_undef;
+
+    The fault was with (4), and is easily fixed.
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ pp.c         |  2 +-
+ t/op/split.t | 13 ++++++++++++-
+ 2 files changed, 13 insertions(+), 2 deletions(-)
+
+diff --git a/pp.c b/pp.c
+index 4153482..70345ce 100644
+--- a/pp.c
++++ b/pp.c
+@@ -6212,7 +6212,7 @@ PP(pp_split)
+ 	    while (iters > 0 && (!TOPs || !SvANY(TOPs) || SvCUR(TOPs) == 0)) {
+ 		if (TOPs && !make_mortal)
+ 		    sv_2mortal(TOPs);
+-		*SP-- = &PL_sv_undef;
++		*SP-- = NULL;
+ 		iters--;
+ 	    }
+ 	}
+diff --git a/t/op/split.t b/t/op/split.t
+index fb73271..b7846a1 100644
+--- a/t/op/split.t
++++ b/t/op/split.t
+@@ -7,7 +7,7 @@ BEGIN {
+     set_up_inc('../lib');
+ }
+ 
+-plan tests => 131;
++plan tests => 133;
+ 
+ $FS = ':';
+ 
+@@ -523,3 +523,14 @@ is "@a", '1 2 3', 'assignment to split-to-array (pmtarget/package array)';
+ }
+ (@{\@a} = split //, "abc") = 1..10;
+ is "@a", '1 2 3', 'assignment to split-to-array (stacked)';
++
++# splitting directly to an array wasn't filling unused AvARRAY slots with
++# NULL
++
++{
++    my @a;
++    @a = split(/-/,"-");
++    $a[1] = 'b';
++    ok eval { $a[0] = 'a'; 1; }, "array split filling AvARRAY: assign 0";
++    is "@a", "a b", "array split filling AvARRAY: result";
++}
+-- 
+2.7.4
+
diff --git a/SOURCES/perl-5.24.1-Fix-memory-leak-in-B-RHE-HASH-method.patch b/SOURCES/perl-5.24.1-Fix-memory-leak-in-B-RHE-HASH-method.patch
new file mode 100644
index 0000000..3769416
--- /dev/null
+++ b/SOURCES/perl-5.24.1-Fix-memory-leak-in-B-RHE-HASH-method.patch
@@ -0,0 +1,65 @@
+From 3c38abae50c05c6f3c9f7eca561ec08c62fba1ba Mon Sep 17 00:00:00 2001
+From: Sergey Aleynikov <sergey.aleynikov@gmail.com>
+Date: Thu, 5 Jan 2017 01:33:32 +0300
+Subject: [PATCH] Fix memory leak in B::RHE->HASH method.
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Petr Písař: Ported to 5.24.1:
+
+commit 4b6e9aa6aa2256da1ec7ed08f819cbf5d1463741
+Author: Sergey Aleynikov <sergey.aleynikov@gmail.com>
+Date:   Thu Jan 5 01:33:32 2017 +0300
+
+    Fix memory leak in B::RHE->HASH method.
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ ext/B/B.xs    |  2 +-
+ t/op/svleak.t | 12 +++++++++++-
+ 2 files changed, 12 insertions(+), 2 deletions(-)
+
+diff --git a/ext/B/B.xs b/ext/B/B.xs
+index b4b6a40..e859d7d 100644
+--- a/ext/B/B.xs
++++ b/ext/B/B.xs
+@@ -2179,7 +2179,7 @@ SV*
+ HASH(h)
+ 	B::RHE h
+     CODE:
+-	RETVAL = newRV( (SV*)cophh_2hv(h, 0) );
++	RETVAL = newRV_noinc( (SV*)cophh_2hv(h, 0) );
+     OUTPUT:
+ 	RETVAL
+ 
+diff --git a/t/op/svleak.t b/t/op/svleak.t
+index c18f498..b0692ff 100644
+--- a/t/op/svleak.t
++++ b/t/op/svleak.t
+@@ -15,7 +15,7 @@ BEGIN {
+ 
+ use Config;
+ 
+-plan tests => 132;
++plan tests => 133;
+ 
+ # run some code N times. If the number of SVs at the end of loop N is
+ # greater than (N-1)*delta at the end of loop 1, we've got a leak
+@@ -547,3 +547,13 @@ EOF
+     sub f { $a =~ /[^.]+$b/; }
+     ::leak(2, 0, \&f, q{use re 'strict' shouldn't leak warning strings});
+ }
++
++# check that B::RHE->HASH does not leak
++{
++    package BHINT;
++    sub foo {}
++    require B;
++    my $op = B::svref_2object(\&foo)->ROOT->first;
++    sub lk { { my $d = $op->hints_hash->HASH } }
++    ::leak(3, 0, \&lk, q!B::RHE->HASH shoudln't leak!);
++}
+-- 
+2.7.4
+
diff --git a/SOURCES/perl-5.24.1-RT-130624-heap-use-after-free-in-4-arg-substr.patch b/SOURCES/perl-5.24.1-RT-130624-heap-use-after-free-in-4-arg-substr.patch
new file mode 100644
index 0000000..f018778
--- /dev/null
+++ b/SOURCES/perl-5.24.1-RT-130624-heap-use-after-free-in-4-arg-substr.patch
@@ -0,0 +1,70 @@
+From 4e0fb37303b72ed9d38949139c304abdb73e223e Mon Sep 17 00:00:00 2001
+From: Aaron Crane <arc@cpan.org>
+Date: Tue, 24 Jan 2017 23:39:40 +0000
+Subject: [PATCH] RT#130624: heap-use-after-free in 4-arg substr
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Ported to 5.24.1:
+
+commit 41b1e858a075694f88057b9514f5fc78c80b5355
+Author: Aaron Crane <arc@cpan.org>
+Date:   Tue Jan 24 23:39:40 2017 +0000
+
+    RT#130624: heap-use-after-free in 4-arg substr
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ pp.c          |  4 +++-
+ t/op/substr.t | 14 +++++++++++++-
+ 2 files changed, 16 insertions(+), 2 deletions(-)
+
+diff --git a/pp.c b/pp.c
+index 334b353..aa6cff0 100644
+--- a/pp.c
++++ b/pp.c
+@@ -3462,8 +3462,10 @@ PP(pp_substr)
+ 	tmps = SvPV_force_nomg(sv, curlen);
+ 	if (DO_UTF8(repl_sv) && repl_len) {
+ 	    if (!DO_UTF8(sv)) {
++                /* Upgrade the dest, and recalculate tmps in case the buffer
++                 * got reallocated; curlen may also have been changed */
+ 		sv_utf8_upgrade_nomg(sv);
+-		curlen = SvCUR(sv);
++		tmps = SvPV_nomg(sv, curlen);
+ 	    }
+ 	}
+ 	else if (DO_UTF8(sv))
+diff --git a/t/op/substr.t b/t/op/substr.t
+index 01c36a9..f9fee48 100644
+--- a/t/op/substr.t
++++ b/t/op/substr.t
+@@ -22,7 +22,7 @@ $SIG{__WARN__} = sub {
+      }
+ };
+ 
+-plan(389);
++plan(391);
+ 
+ run_tests() unless caller;
+ 
+@@ -872,3 +872,15 @@ is($destroyed, 1, 'Timely scalar destruction with lvalue substr');
+ 
+ # failed with ASAN
+ fresh_perl_is('$0 = "/usr/bin/perl"; substr($0, 0, 0, $0)', '', {}, "(perl #129340) substr() with source in target");
++
++
++# [perl #130624] - heap-use-after-free, observable under asan
++{
++    my $x = "\xE9zzzz";
++    my $y = "\x{100}";
++    my $z = substr $x, 0, 1, $y;
++    is $z, "\xE9",        "RT#130624: heap-use-after-free in 4-arg substr (ret)";
++    is $x, "\x{100}zzzz", "RT#130624: heap-use-after-free in 4-arg substr (targ)";
++}
++
++
+-- 
+2.7.4
+
diff --git a/SOURCES/perl-5.24.1-buffer-overrun-with-format-and-use-bytes.patch b/SOURCES/perl-5.24.1-buffer-overrun-with-format-and-use-bytes.patch
new file mode 100644
index 0000000..8e9d245
--- /dev/null
+++ b/SOURCES/perl-5.24.1-buffer-overrun-with-format-and-use-bytes.patch
@@ -0,0 +1,93 @@
+From fd25d49cae6409a4ce901fd4d899a197541604b3 Mon Sep 17 00:00:00 2001
+From: David Mitchell <davem@iabyn.com>
+Date: Sat, 4 Feb 2017 15:10:49 +0000
+Subject: [PATCH] buffer overrun with format and 'use bytes'
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Ported to 5.24.1:
+
+commit e452bf1c9e9f30813b1f289188a6e8b0894575ba
+Author: David Mitchell <davem@iabyn.com>
+Date:   Sat Feb 4 15:10:49 2017 +0000
+
+    buffer overrun with format and 'use bytes'
+
+    RT #130703
+
+    In the scope of 'use bytes', appending a string to a format where the
+    format is utf8 and the string is non-utf8 but contains lots of chars
+    with ords >= 128, the buffer could be overrun. This is due to all the
+    \x80-type chars going from being stored as 1 bytes to 2 bytes, without
+    growing PL_formtarget accordingly.
+
+    This commit contains a minimal fix; the next commit will more generally
+    tidy up the grow code in pp_formline.
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ pp_ctl.c     |  3 +++
+ t/op/write.t | 18 +++++++++++++++++-
+ 2 files changed, 20 insertions(+), 1 deletion(-)
+
+diff --git a/pp_ctl.c b/pp_ctl.c
+index a1fc2f4..4d5ef2e 100644
+--- a/pp_ctl.c
++++ b/pp_ctl.c
+@@ -505,6 +505,8 @@ PP(pp_formline)
+ 	SvTAINTED_on(PL_formtarget);
+     if (DO_UTF8(PL_formtarget))
+ 	targ_is_utf8 = TRUE;
++    /* this is an initial estimate of how much output buffer space
++     * to allocate. It may be exceeded later */
+     linemax = (SvCUR(formsv) * (IN_BYTES ? 1 : 3) + 1);
+     t = SvGROW(PL_formtarget, len + linemax + 1);
+     /* XXX from now onwards, SvCUR(PL_formtarget) is invalid */
+@@ -766,6 +768,7 @@ PP(pp_formline)
+ 
+ 		if (targ_is_utf8 && !item_is_utf8) {
+ 		    source = tmp = bytes_to_utf8(source, &to_copy);
++                    grow = to_copy;
+ 		} else {
+ 		    if (item_is_utf8 && !targ_is_utf8) {
+ 			U8 *s;
+diff --git a/t/op/write.t b/t/op/write.t
+index ab2733f..ae4ddb5 100644
+--- a/t/op/write.t
++++ b/t/op/write.t
+@@ -98,7 +98,7 @@ for my $tref ( @NumTests ){
+ my $bas_tests = 21;
+ 
+ # number of tests in section 3
+-my $bug_tests = 66 + 3 * 3 * 5 * 2 * 3 + 2 + 66 + 6 + 2 + 3 + 96 + 11 + 3;
++my $bug_tests = 66 + 3 * 3 * 5 * 2 * 3 + 2 + 66 + 6 + 2 + 3 + 96 + 11 + 4;
+ 
+ # number of tests in section 4
+ my $hmb_tests = 37;
+@@ -1562,6 +1562,22 @@ ok  defined *{$::{CmT}}{FORMAT}, "glob assign";
+     formline $format, $orig, 12345;
+     is $^A, ("x" x 100) . " 12345\n", "\@* doesn't overflow";
+ 
++    # ...nor this (RT #130703).
++    # Under 'use bytes', the two bytes (c2, 80) making up each \x80 char
++    # each get expanded to two bytes (so four in total per \x80 char); the
++    # buffer growth wasn't accounting for this doubling in size
++
++    {
++        local $^A = '';
++        my $format = "X\n\x{100}" . ("\x80" x 200);
++        my $expected = $format;
++        utf8::encode($expected);
++        use bytes;
++        formline($format);
++        is $^A, $expected, "RT #130703";
++    }
++
++
+     # make sure it can cope with formats > 64k
+ 
+     $format = 'x' x 65537;
+-- 
+2.7.4
+
diff --git a/SOURCES/perl-5.24.1-don-t-call-Perl_fbm_instr-with-negative-length.patch b/SOURCES/perl-5.24.1-don-t-call-Perl_fbm_instr-with-negative-length.patch
new file mode 100644
index 0000000..08fb660
--- /dev/null
+++ b/SOURCES/perl-5.24.1-don-t-call-Perl_fbm_instr-with-negative-length.patch
@@ -0,0 +1,116 @@
+From b0254cedee2517d2705070839549189cf9f72db4 Mon Sep 17 00:00:00 2001
+From: David Mitchell <davem@iabyn.com>
+Date: Fri, 16 Jun 2017 15:46:19 +0100
+Subject: [PATCH] don't call Perl_fbm_instr() with negative length
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Ported to 5.24.1:
+
+commit bb152a4b442f7718fd37d32cc558be675e8ae1ae
+Author: David Mitchell <davem@iabyn.com>
+Date:   Fri Jun 16 15:46:19 2017 +0100
+
+    don't call Perl_fbm_instr() with negative length
+
+    RT #131575
+
+    re_intuit_start() could calculate a maximum end position less than the
+    current start position. This used to get rejected by fbm_intr(), until
+    v5.23.3-110-g147f21b, which made fbm_intr() faster and removed unnecessary
+    checks.
+
+    This commits fixes re_intuit_start(), and adds an assert to  fbm_intr().
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ regexec.c  | 17 +++++++++++------
+ t/re/pat.t | 13 ++++++++++++-
+ util.c     |  2 ++
+ 3 files changed, 25 insertions(+), 7 deletions(-)
+
+diff --git a/regexec.c b/regexec.c
+index f1a52ab..3080880 100644
+--- a/regexec.c
++++ b/regexec.c
+@@ -127,13 +127,16 @@ static const char* const non_utf8_target_but_utf8_required
+                     (U8*)(off >= 0 ? reginfo->strend : reginfo->strbeg)) \
+ 	    : (U8*)(pos + off))
+ 
+-#define HOPBACKc(pos, off) \
+-	(char*)(reginfo->is_utf8_target \
+-	    ? reghopmaybe3((U8*)pos, (SSize_t)0-off, (U8*)(reginfo->strbeg)) \
+-	    : (pos - off >= reginfo->strbeg)	\
+-		? (U8*)pos - off		\
++/* like HOPMAYBE3 but backwards. lim must be +ve. Returns NULL on overshoot */
++#define HOPBACK3(pos, off, lim) \
++	(reginfo->is_utf8_target                          \
++	    ? reghopmaybe3((U8*)pos, (SSize_t)0-off, (U8*)(lim)) \
++	    : (pos - off >= lim)	                         \
++		? (U8*)pos - off		                 \
+ 		: NULL)
+ 
++#define HOPBACKc(pos, off) ((char*)HOPBACK3(pos, off, reginfo->strbeg))
++
+ #define HOP3(pos,off,lim) (reginfo->is_utf8_target  ? reghop3((U8*)(pos), off, (U8*)(lim)) : (U8*)(pos + off))
+ #define HOP3c(pos,off,lim) ((char*)HOP3(pos,off,lim))
+ 
+@@ -871,7 +874,9 @@ Perl_re_intuit_start(pTHX_
+                 (IV)prog->check_end_shift);
+         });
+         
+-        end_point = HOP3(strend, -end_shift, strbeg);
++        end_point = HOPBACK3(strend, end_shift, rx_origin);
++        if (!end_point)
++            goto fail_finish;
+         start_point = HOPMAYBE3(rx_origin, start_shift, end_point);
+         if (!start_point)
+             goto fail_finish;
+diff --git a/t/re/pat.t b/t/re/pat.t
+index 50529b8..007f11d 100644
+--- a/t/re/pat.t
++++ b/t/re/pat.t
+@@ -23,7 +23,7 @@ BEGIN {
+     skip_all_without_unicode_tables();
+ }
+ 
+-plan tests => 793;  # Update this when adding/deleting tests.
++plan tests => 794;  # Update this when adding/deleting tests.
+ 
+ run_tests() unless caller;
+ 
+@@ -1783,6 +1783,17 @@ EOP
+         # [perl #129281] buffer write overflow, detected by ASAN, valgrind
+         fresh_perl_is('/0(?0)|^*0(?0)|^*(^*())0|/', '', {}, "don't bump whilem_c too much");
+     }
++
++    {
++        # RT #131575 intuit skipping back from the end to find the highest
++        # possible start point, was potentially hopping back beyond pos()
++        # and crashing by calling fbm_instr with a negative length
++
++        my $text = "=t=\x{5000}";
++        pos($text) = 3;
++        ok(scalar($text !~ m{(~*=[a-z]=)}g), "RT #131575");
++    }
++
+ } # End of sub run_tests
+ 
+ 1;
+diff --git a/util.c b/util.c
+index df75db0..bc265f5 100644
+--- a/util.c
++++ b/util.c
+@@ -806,6 +806,8 @@ Perl_fbm_instr(pTHX_ unsigned char *big, unsigned char *bigend, SV *littlestr, U
+ 
+     PERL_ARGS_ASSERT_FBM_INSTR;
+ 
++    assert(bigend >= big);
++
+     if ((STRLEN)(bigend - big) < littlelen) {
+ 	if ( SvTAIL(littlestr)
+ 	     && ((STRLEN)(bigend - big) == littlelen - 1)
+-- 
+2.9.4
+
diff --git a/SOURCES/perl-5.24.1-fix-RT-130561-recursion-and-optimising-away-impossib.patch b/SOURCES/perl-5.24.1-fix-RT-130561-recursion-and-optimising-away-impossib.patch
new file mode 100644
index 0000000..2a2e6b2
--- /dev/null
+++ b/SOURCES/perl-5.24.1-fix-RT-130561-recursion-and-optimising-away-impossib.patch
@@ -0,0 +1,93 @@
+From fbb9dc823a06b4815ee8fd8632fc475b8034e379 Mon Sep 17 00:00:00 2001
+From: Yves Orton <demerphq@gmail.com>
+Date: Fri, 27 Jan 2017 10:18:51 +0100
+Subject: [PATCH] fix RT #130561 - recursion and optimising away impossible
+ quantifiers are not friends
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Ported to 5.24.1:
+
+commit 31fc93954d1f379c7a49889d91436ce99818e1f6
+Author: Yves Orton <demerphq@gmail.com>
+Date:   Fri Jan 27 10:18:51 2017 +0100
+
+    fix RT #130561 - recursion and optimising away impossible quantifiers are not friends
+
+    Instead of optimising away impossible quantifiers like (foo){1,0} treat them
+    as unquantified, and guard them with an OPFAIL. Thus /(foo){1,0}/ is treated
+    the same as /(*FAIL)(foo)/ this is important in patterns like /(foo){1,0}|(?1)/
+    where the (?1) needs to be able to recurse into the (foo) even though the
+    (foo){1,0} can never match. It also resolves various issues (SEGVs) with patterns
+    like /((?1)){1,0}/.
+
+    This patch would have been easier if S_reginsert() documented that it is
+    the callers responsibility to properly set up the NEXT_OFF() of the inserted
+    node (if the node has a NEXT_OFF())
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ regcomp.c            | 14 +++-----------
+ t/re/pat_rt_report.t | 11 ++++++++++-
+ 2 files changed, 13 insertions(+), 12 deletions(-)
+
+diff --git a/regcomp.c b/regcomp.c
+index bcb8db5..9f343d3 100644
+--- a/regcomp.c
++++ b/regcomp.c
+@@ -11497,19 +11497,11 @@ S_regpiece(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth)
+ 	    nextchar(pRExC_state);
+             if (max < min) {    /* If can't match, warn and optimize to fail
+                                    unconditionally */
+-                if (SIZE_ONLY) {
+-
+-                    /* We can't back off the size because we have to reserve
+-                     * enough space for all the things we are about to throw
+-                     * away, but we can shrink it by the amount we are about
+-                     * to re-use here */
+-                    RExC_size += PREVOPER(RExC_size) - regarglen[(U8)OPFAIL];
+-                }
+-                else {
++                if (PASS2) {
+                     ckWARNreg(RExC_parse, "Quantifier {n,m} with n > m can't match");
+-                    RExC_emit = orig_emit;
+                 }
+-                ret = reganode(pRExC_state, OPFAIL, 0);
++                reginsert(pRExC_state, OPFAIL, orig_emit, depth+1);
++                NEXT_OFF(orig_emit)= regarglen[OPFAIL] + NODE_STEP_REGNODE;
+                 return ret;
+             }
+             else if (min == max && *RExC_parse == '?')
+diff --git a/t/re/pat_rt_report.t b/t/re/pat_rt_report.t
+index cb02ad2..2c1dbc4 100644
+--- a/t/re/pat_rt_report.t
++++ b/t/re/pat_rt_report.t
+@@ -20,7 +20,7 @@ use warnings;
+ use 5.010;
+ use Config;
+ 
+-plan tests => 2500;  # Update this when adding/deleting tests.
++plan tests => 2502;  # Update this when adding/deleting tests.
+ 
+ run_tests() unless caller;
+ 
+@@ -1113,6 +1113,15 @@ EOP
+ 	my $s = "\x{1ff}" . "f" x 32;
+ 	ok($s =~ /\x{1ff}[[:alpha:]]+/gca, "POSIXA pointer wrap");
+     }
++    {
++        # rt
++        fresh_perl_is(
++            '"foo"=~/((?1)){8,0}/; print "ok"',
++            "ok", {},  'RT #130561 - allowing impossible quantifier should not cause SEGVs');
++        my $s= "foo";
++        ok($s=~/(foo){1,0}|(?1)/,
++            "RT #130561 - allowing impossible quantifier should not break recursion");
++    }
+ } # End of sub run_tests
+ 
+ 1;
+-- 
+2.7.4
+
diff --git a/SOURCES/perl-5.24.1-fix-pad-scope-issue-in-re_evals.patch b/SOURCES/perl-5.24.1-fix-pad-scope-issue-in-re_evals.patch
new file mode 100644
index 0000000..17c82b4
--- /dev/null
+++ b/SOURCES/perl-5.24.1-fix-pad-scope-issue-in-re_evals.patch
@@ -0,0 +1,198 @@
+From f3704e62341b10824f503aa0c8029670d101a434 Mon Sep 17 00:00:00 2001
+From: David Mitchell <davem@iabyn.com>
+Date: Sat, 11 Feb 2017 11:53:41 +0000
+Subject: [PATCH] fix pad/scope issue in re_evals
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Ported to 5.24.1:
+commit 4b9c7caeaecf4e9df0be3a2e296644f763f775d6
+Author: David Mitchell <davem@iabyn.com>
+Date:   Sat Feb 11 11:53:41 2017 +0000
+
+    fix pad/scope issue in re_evals
+
+    RT #129881 heap-buffer-overflow Perl_pad_sv
+
+    In some circumstances involving a pattern which has embedded code blocks
+    from more than one source, e.g.
+
+        my $r = qr{(?{1;}){2}X};
+        "" =~ /$r|(?{1;})/;
+
+    the wrong PL_comppad could be active while doing a LEAVE_SCOPE() or on
+    exit from the pattern.
+
+    This was mainly due to the big context stack changes in 5.24.0 - in
+    particular, since POP_MULTICALL() now does CX_LEAVE_SCOPE(cx) *before*
+    restoring PL_comppad, the (correct) unwinding of any SAVECOMPPAD's was
+    being followed by C<PL_comppad = cx->blk_sub.prevcomppad>, which wasn't
+    necessarily a sensible value.
+
+    To fix this, record the value of PL_savestack_ix at entry to S_regmatch(),
+    and set the cx->blk_oldsaveix of the MULTICALL to this value when pushed.
+    On exit from S_regmatch, we either POP_MULTICALL which will do a
+    LEAVE_SCOPE(cx->blk_oldsaveix), or in the absense of any EVAL, do the
+    explicit but equivalent LEAVE_SCOPE(orig_savestack_ix).
+
+    Note that this is a change in behaviour to S_regmatch() - formerly it
+    wouldn't necessarily clear the savestack completely back the point of
+    entry - that would get left to do by its caller, S_regtry(), or indirectly
+    by Perl_regexec_flags(). This shouldn't make any practical difference, but
+    is tidier and less likely to introduce bugs later.
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ regexec.c          | 69 +++++++++++++++++++++++++++++++++++++++++++-----------
+ t/re/pat_re_eval.t | 20 +++++++++++++++-
+ 2 files changed, 74 insertions(+), 15 deletions(-)
+
+diff --git a/regexec.c b/regexec.c
+index a7bc0c3..5656cdd 100644
+--- a/regexec.c
++++ b/regexec.c
+@@ -5233,6 +5233,7 @@ S_regmatch(pTHX_ regmatch_info *reginfo, char *startpos, regnode *prog)
+     _char_class_number classnum;
+     bool is_utf8_pat = reginfo->is_utf8_pat;
+     bool match = FALSE;
++    I32 orig_savestack_ix = PL_savestack_ix;
+ 
+ /* Solaris Studio 12.3 messes up fetching PL_charclass['\n'] */
+ #if (defined(__SUNPRO_C) && (__SUNPRO_C == 0x5120) && defined(__x86_64) && defined(USE_64_BIT_ALL))
+@@ -6646,30 +6647,67 @@ S_regmatch(pTHX_ regmatch_info *reginfo, char *startpos, regnode *prog)
+ 		    nop = (OP*)rexi->data->data[n];
+ 		}
+ 
+-		/* normally if we're about to execute code from the same
+-		 * CV that we used previously, we just use the existing
+-		 * CX stack entry. However, its possible that in the
+-		 * meantime we may have backtracked, popped from the save
+-		 * stack, and undone the SAVECOMPPAD(s) associated with
+-		 * PUSH_MULTICALL; in which case PL_comppad no longer
+-		 * points to newcv's pad. */
++                /* Some notes about MULTICALL and the context and save stacks.
++                 *
++                 * In something like
++                 *   /...(?{ my $x)}...(?{ my $z)}...(?{ my $z)}.../
++                 * since codeblocks don't introduce a new scope (so that
++                 * local() etc accumulate), at the end of a successful
++                 * match there will be a SAVEt_CLEARSV on the savestack
++                 * for each of $x, $y, $z. If the three code blocks above
++                 * happen to have come from different CVs (e.g. via
++                 * embedded qr//s), then we must ensure that during any
++                 * savestack unwinding, PL_comppad always points to the
++                 * right pad at each moment. We achieve this by
++                 * interleaving SAVEt_COMPPAD's on the savestack whenever
++                 * there is a change of pad.
++                 * In theory whenever we call a code block, we should
++                 * push a CXt_SUB context, then pop it on return from
++                 * that code block. This causes a bit of an issue in that
++                 * normally popping a context also clears the savestack
++                 * back to cx->blk_oldsaveix, but here we specifically
++                 * don't want to clear the save stack on exit from the
++                 * code block.
++                 * Also for efficiency we don't want to keep pushing and
++                 * popping the single SUB context as we backtrack etc.
++                 * So instead, we push a single context the first time
++                 * we need, it, then hang onto it until the end of this
++                 * function. Whenever we encounter a new code block, we
++                 * update the CV etc if that's changed. During the times
++                 * in this function where we're not executing a code
++                 * block, having the SUB context still there is a bit
++                 * naughty - but we hope that no-one notices.
++                 * When the SUB context is initially pushed, we fake up
++                 * cx->blk_oldsaveix to be as if we'd pushed this context
++                 * on first entry to S_regmatch rather than at some random
++                 * point during the regexe execution. That way if we
++                 * croak, popping the context stack will ensure that
++                 * *everything* SAVEd by this function is undone and then
++                 * the context popped, rather than e.g., popping the
++                 * context (and restoring the original PL_comppad) then
++                 * popping more of the savestack and restoiring a bad
++                 * PL_comppad.
++                 */
++
++                /* If this is the first EVAL, push a MULTICALL. On
++                 * subsequent calls, if we're executing a different CV, or
++                 * if PL_comppad has got messed up from backtracking
++                 * through SAVECOMPPADs, then refresh the context.
++                 */
+ 		if (newcv != last_pushed_cv || PL_comppad != last_pad)
+ 		{
+                     U8 flags = (CXp_SUB_RE |
+                                 ((newcv == caller_cv) ? CXp_SUB_RE_FAKE : 0));
++                    SAVECOMPPAD();
+ 		    if (last_pushed_cv) {
+-                        /* PUSH/POP_MULTICALL save and restore the
+-                         * caller's PL_comppad; if we call multiple subs
+-                         * using the same CX block, we have to save and
+-                         * unwind the varying PL_comppad's ourselves,
+-                         * especially restoring the right PL_comppad on
+-                         * backtrack - so save it on the save stack */
+-                        SAVECOMPPAD();
+ 			CHANGE_MULTICALL_FLAGS(newcv, flags);
+ 		    }
+ 		    else {
+ 			PUSH_MULTICALL_FLAGS(newcv, flags);
+ 		    }
++                    /* see notes above */
++                    CX_CUR()->blk_oldsaveix = orig_savestack_ix;
++
+ 		    last_pushed_cv = newcv;
+ 		}
+ 		else {
+@@ -8456,9 +8494,12 @@ NULL
+ 
+     if (last_pushed_cv) {
+ 	dSP;
++        /* see "Some notes about MULTICALL" above */
+ 	POP_MULTICALL;
+         PERL_UNUSED_VAR(SP);
+     }
++    else
++        LEAVE_SCOPE(orig_savestack_ix);
+ 
+     assert(!result ||  locinput - reginfo->strbeg >= 0);
+     return result ?  locinput - reginfo->strbeg : -1;
+diff --git a/t/re/pat_re_eval.t b/t/re/pat_re_eval.t
+index e59b059..1a0b228 100644
+--- a/t/re/pat_re_eval.t
++++ b/t/re/pat_re_eval.t
+@@ -22,7 +22,7 @@ BEGIN {
+ }
+ 
+ 
+-plan tests => 527;  # Update this when adding/deleting tests.
++plan tests => 530;  # Update this when adding/deleting tests.
+ 
+ run_tests() unless caller;
+ 
+@@ -1232,6 +1232,24 @@ sub run_tests {
+ 	    'padtmp swiping does not affect "$a$b" =~ /(??{})/'
+     }
+ 
++    # RT #129881
++    # on exit from a pattern with multiple code blocks from different
++    # CVs, PL_comppad wasn't being restored correctly
++
++    sub {
++        # give first few pad slots known values
++        my ($x1, $x2, $x3, $x4, $x5) = 101..105;
++        # these vars are in a separate pad
++        my $r = qr/((?{my ($y1, $y2) = 201..202; 1;})A){2}X/;
++        # the first alt fails, causing a switch to this anon
++        # sub's pad
++        "AAA" =~ /$r|(?{my ($z1, $z2) = 301..302; 1;})A/;
++        is $x1, 101, "RT #129881: x1";
++        is $x2, 102, "RT #129881: x2";
++        is $x3, 103, "RT #129881: x3";
++    }->();
++
++
+ } # End of sub run_tests
+ 
+ 1;
+-- 
+2.7.4
+
diff --git a/SOURCES/perl-5.24.1-fix-special-case-recreation-of.patch b/SOURCES/perl-5.24.1-fix-special-case-recreation-of.patch
new file mode 100644
index 0000000..4d28a8d
--- /dev/null
+++ b/SOURCES/perl-5.24.1-fix-special-case-recreation-of.patch
@@ -0,0 +1,79 @@
+From 59ef97c7af81ab6faba749d88b558a55da41c249 Mon Sep 17 00:00:00 2001
+From: Zefram <zefram@fysh.org>
+Date: Sun, 22 Jan 2017 07:26:34 +0000
+Subject: [PATCH] fix special-case recreation of *::
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Ported to 5.24.1:
+
+commit 120921acd4cf27bb932a725a8cf5c957652b22eb
+Author: Zefram <zefram@fysh.org>
+Date:   Sun Jan 22 07:26:34 2017 +0000
+
+    fix special-case recreation of *::
+
+    If *:: is called for then as a special case it is looked up as
+    $::{"main::"}.  If $::{"main::"} has been deleted, then that hash entry
+    is recreated.  But formerly it was only recreated as an undef scalar,
+    which broke things relying on glob lookup returning a glob.  Now in
+    that special case the recreated hash entry is initialised as a glob,
+    and populated with the customary recursive reference to the main stash.
+    Fixes [perl #129869].
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ gv.c         | 11 +++++++++--
+ t/op/stash.t |  9 ++++++++-
+ 2 files changed, 17 insertions(+), 3 deletions(-)
+
+diff --git a/gv.c b/gv.c
+index c89a3e7..3fda9b9 100644
+--- a/gv.c
++++ b/gv.c
+@@ -1642,8 +1642,15 @@ S_parse_gv_stash_name(pTHX_ HV **stash, GV **gv, const char **name,
+                 name_cursor++;
+             *name = name_cursor+1;
+             if (*name == name_end) {
+-                if (!*gv)
+-                    *gv = MUTABLE_GV(*hv_fetchs(PL_defstash, "main::", TRUE));
++                if (!*gv) {
++		    *gv = MUTABLE_GV(*hv_fetchs(PL_defstash, "main::", TRUE));
++		    if (SvTYPE(*gv) != SVt_PVGV) {
++			gv_init_pvn(*gv, PL_defstash, "main::", 6,
++				    GV_ADDMULTI);
++			GvHV(*gv) =
++			    MUTABLE_HV(SvREFCNT_inc_simple(PL_defstash));
++		    }
++		}
+                 return TRUE;
+             }
+         }
+diff --git a/t/op/stash.t b/t/op/stash.t
+index 7ac379b..d6fded4 100644
+--- a/t/op/stash.t
++++ b/t/op/stash.t
+@@ -7,7 +7,7 @@ BEGIN {
+ 
+ BEGIN { require "./test.pl"; }
+ 
+-plan( tests => 54 );
++plan( tests => 55 );
+ 
+ # Used to segfault (bug #15479)
+ fresh_perl_like(
+@@ -355,3 +355,10 @@ is runperl(
+    ),
+    "ok\n",
+    "[perl #128238] non-stashes in stashes";
++
++is runperl(
++    prog => '%:: = (); print *{q|::|}, qq|\n|',
++    stderr => 1,
++   ),
++   "*main::main::\n",
++   "[perl #129869] lookup %:: by name after clearing %::";
+-- 
+2.7.4
+
diff --git a/SOURCES/perl-5.24.1-perl-129125-copy-form-data-if-it-might-be-freed.patch b/SOURCES/perl-5.24.1-perl-129125-copy-form-data-if-it-might-be-freed.patch
new file mode 100644
index 0000000..176efa9
--- /dev/null
+++ b/SOURCES/perl-5.24.1-perl-129125-copy-form-data-if-it-might-be-freed.patch
@@ -0,0 +1,107 @@
+From 0c43d46cd570d2a19edfa54b9c637dea5c0a3514 Mon Sep 17 00:00:00 2001
+From: Tony Cook <tony@develop-help.com>
+Date: Thu, 19 Jan 2017 16:28:03 +1100
+Subject: [PATCH] (perl #129125) copy form data if it might be freed
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Ported to 5.24.1:
+
+commit 86191aed6f092273950ebdd48f886d4ec0c5e85e
+Author: Tony Cook <tony@develop-help.com>
+Date:   Thu Jan 19 16:28:03 2017 +1100
+
+    (perl #129125) copy form data if it might be freed
+
+    If the format SV also appeared as an argument, and the FF_CHOP
+    operator modified that argument, the magic and hence the compiled
+    format would be freed, and the next iteration of the processing
+    the compiled format would read freed memory.
+
+    Unlike my original patch this copies the formsv too, since
+    that is also stored in the magic, and is needed for presenting
+    literal text from the format.
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ pp_ctl.c     | 18 ++++++++++++++++++
+ t/op/write.t | 19 ++++++++++++++++++-
+ 2 files changed, 36 insertions(+), 1 deletion(-)
+
+diff --git a/pp_ctl.c b/pp_ctl.c
+index b94c09a..e859e01 100644
+--- a/pp_ctl.c
++++ b/pp_ctl.c
+@@ -490,6 +490,7 @@ PP(pp_formline)
+     U8 *source;		    /* source of bytes to append */
+     STRLEN to_copy;	    /* how may bytes to append */
+     char trans;		    /* what chars to translate */
++    bool copied_form = false; /* have we duplicated the form? */
+ 
+     mg = doparseform(tmpForm);
+ 
+@@ -687,6 +688,23 @@ PP(pp_formline)
+ 	case FF_CHOP: /* (for ^*) chop the current item */
+ 	    if (sv != &PL_sv_no) {
+ 		const char *s = chophere;
++                if (!copied_form &&
++                    ((sv == tmpForm || SvSMAGICAL(sv))
++                     || (SvGMAGICAL(tmpForm) && !sv_only_taint_gmagic(tmpForm))) ) {
++                    /* sv and tmpForm are either the same SV, or magic might allow modification
++                       of tmpForm when sv is modified, so copy */
++                    SV *newformsv = sv_mortalcopy(formsv);
++                    U32 *new_compiled;
++
++                    f = SvPV_nolen(newformsv) + (f - SvPV_nolen(formsv));
++                    Newx(new_compiled, mg->mg_len / sizeof(U32), U32);
++                    memcpy(new_compiled, mg->mg_ptr, mg->mg_len);
++                    SAVEFREEPV(new_compiled);
++                    fpc = new_compiled + (fpc - (U32*)mg->mg_ptr);
++                    formsv = newformsv;
++
++                    copied_form = true;
++                }
+ 		if (chopspace) {
+ 		    while (isSPACE(*s))
+ 			s++;
+diff --git a/t/op/write.t b/t/op/write.t
+index 590d658..ab2733f 100644
+--- a/t/op/write.t
++++ b/t/op/write.t
+@@ -98,7 +98,7 @@ for my $tref ( @NumTests ){
+ my $bas_tests = 21;
+ 
+ # number of tests in section 3
+-my $bug_tests = 66 + 3 * 3 * 5 * 2 * 3 + 2 + 66 + 4 + 2 + 3 + 96 + 11 + 3;
++my $bug_tests = 66 + 3 * 3 * 5 * 2 * 3 + 2 + 66 + 6 + 2 + 3 + 96 + 11 + 3;
+ 
+ # number of tests in section 4
+ my $hmb_tests = 37;
+@@ -1637,6 +1637,23 @@ printf ">%s<\n", ref $zamm;
+ print "$zamm->[0]\n";
+ EOP
+ 
++# [perl #129125] - detected by -fsanitize=address or valgrind
++# the compiled format would be freed when the format string was modified
++# by the chop operator
++fresh_perl_is(<<'EOP', "^", { stderr => 1 }, '#129125 - chop on format');
++my $x = '^@';
++formline$x=>$x;
++print $^A;
++EOP
++
++fresh_perl_is(<<'EOP', '<^< xx AA><xx ^<><>', { stderr => 1 }, '#129125 - chop on format, later values');
++my $x = '^< xx ^<';
++my $y = 'AA';
++formline $x => $x, $y;
++print "<$^A><$x><$y>";
++EOP
++
++
+ # [perl #73690]
+ 
+ select +(select(RT73690), do {
+-- 
+2.7.4
+
diff --git a/SOURCES/perl-5.24.1-perl-129274-avoid-treating-the-in-as-a-comment-intro.patch b/SOURCES/perl-5.24.1-perl-129274-avoid-treating-the-in-as-a-comment-intro.patch
new file mode 100644
index 0000000..449e67a
--- /dev/null
+++ b/SOURCES/perl-5.24.1-perl-129274-avoid-treating-the-in-as-a-comment-intro.patch
@@ -0,0 +1,70 @@
+From 2f221fc2333bd87615c03354b591b390e8b06715 Mon Sep 17 00:00:00 2001
+From: Tony Cook <tony@develop-help.com>
+Date: Tue, 24 Jan 2017 11:14:28 +1100
+Subject: [PATCH] (perl #129274) avoid treating the # in $# as a comment intro
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Petr Písař: Ported to 5.24.1:
+
+commit 71776ae4fad9a7659deefe0c2376d45b873ffd6a
+Author: Tony Cook <tony@develop-help.com>
+Date:   Tue Jan 24 11:14:28 2017 +1100
+
+    (perl #129274) avoid treating the # in $# as a comment intro
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ t/op/lex.t | 15 ++++++++++++++-
+ toke.c     |  4 +++-
+ 2 files changed, 17 insertions(+), 2 deletions(-)
+
+diff --git a/t/op/lex.t b/t/op/lex.t
+index 9ada592..d679d7c 100644
+--- a/t/op/lex.t
++++ b/t/op/lex.t
+@@ -7,7 +7,7 @@ use warnings;
+ 
+ BEGIN { chdir 't' if -d 't'; require './test.pl'; }
+ 
+-plan(tests => 27);
++plan(tests => 28);
+ 
+ {
+     no warnings 'deprecated';
+@@ -223,3 +223,16 @@ fresh_perl_like(
+     {},
+     '[perl #129336] - #!perl -i argument handling'
+ );
++
++# probably only failed under ASAN
++fresh_perl_is(
++    "stat\tt\$#0",
++    <<'EOM',
++$# is no longer supported at - line 1.
++Number found where operator expected at - line 1, near "$#0"
++	(Missing operator before 0?)
++Can't call method "t" on an undefined value at - line 1.
++EOM
++    {},
++    "[perl #129273] heap use after free or overflow"
++);
+diff --git a/toke.c b/toke.c
+index 576ce72..630fc59 100644
+--- a/toke.c
++++ b/toke.c
+@@ -4090,7 +4090,9 @@ S_intuit_method(pTHX_ char *start, SV *ioname, CV *cv)
+ 	if (cv || PL_last_lop_op == OP_PRINT || PL_last_lop_op == OP_SAY
+             || isUPPER(*PL_tokenbuf))
+ 	    return 0;
+-	s = skipspace(s);
++        /* this could be $# */
++        if (isSPACE(*s))
++            s = skipspace(s);
+ 	PL_bufptr = start;
+ 	PL_expect = XREF;
+ 	return *s == '(' ? FUNCMETH : METHOD;
+-- 
+2.7.4
+
diff --git a/SOURCES/perl-5.24.1-perl-129281-test-for-buffer-overflow-issue.patch b/SOURCES/perl-5.24.1-perl-129281-test-for-buffer-overflow-issue.patch
new file mode 100644
index 0000000..30397b5
--- /dev/null
+++ b/SOURCES/perl-5.24.1-perl-129281-test-for-buffer-overflow-issue.patch
@@ -0,0 +1,49 @@
+From 92f8cd4e7b0ff3d09162139e3c99b1d9310bca81 Mon Sep 17 00:00:00 2001
+From: Tony Cook <tony@develop-help.com>
+Date: Mon, 10 Oct 2016 10:46:46 +1100
+Subject: [PATCH] (perl #129281) test for buffer overflow issue
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Ported to 5.24.1:
+
+commit d2ba660af00f1bf2e7012741615eff7c19f29707
+Author: Tony Cook <tony@develop-help.com>
+Date:   Mon Oct 10 10:46:46 2016 +1100
+
+    (perl #129281) test for buffer overflow issue
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ t/re/pat.t | 7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
+
+diff --git a/t/re/pat.t b/t/re/pat.t
+index 749edd0..7b8e6f7 100644
+--- a/t/re/pat.t
++++ b/t/re/pat.t
+@@ -23,7 +23,7 @@ BEGIN {
+     skip_all_without_unicode_tables();
+ }
+ 
+-plan tests => 792;  # Update this when adding/deleting tests.
++plan tests => 793;  # Update this when adding/deleting tests.
+ 
+ run_tests() unless caller;
+ 
+@@ -1779,6 +1779,11 @@ EOP
+ 	    }msx, { stderr => 1 }, "Offsets in debug output are not negative");
+ 	}
+     }
++    {
++        # [perl #129281] buffer write overflow, detected by ASAN, valgrind
++        local $::TODO = "whilem_c  bumped too much";
++        fresh_perl_is('/0(?0)|^*0(?0)|^*(^*())0|/', '', {}, "don't bump whilem_c too much");
++    }
+ } # End of sub run_tests
+ 
+ 1;
+-- 
+2.7.4
+
diff --git a/SOURCES/perl-5.24.1-perl-129340-copy-the-source-when-inside-the-dest-in-.patch b/SOURCES/perl-5.24.1-perl-129340-copy-the-source-when-inside-the-dest-in-.patch
new file mode 100644
index 0000000..f400675
--- /dev/null
+++ b/SOURCES/perl-5.24.1-perl-129340-copy-the-source-when-inside-the-dest-in-.patch
@@ -0,0 +1,104 @@
+From 4fe0e2d067ac5639d94f35f8c7e8ac4e0e3ab336 Mon Sep 17 00:00:00 2001
+From: Tony Cook <tony@develop-help.com>
+Date: Mon, 20 Feb 2017 11:02:21 +1100
+Subject: [PATCH] (perl #129340) copy the source when inside the dest in
+ sv_insert_flags()
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Ported to 5.24.1:
+
+commit e7a8a8aac45d42d72d1586227ca51771f193f5dc
+Author: Tony Cook <tony@develop-help.com>
+Date:   Mon Feb 20 11:02:21 2017 +1100
+
+    (perl #129340) copy the source when inside the dest in sv_insert_flags()
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ embed.fnc     |  2 +-
+ proto.h       |  2 +-
+ sv.c          | 12 +++++++++++-
+ t/op/substr.t |  5 ++++-
+ 4 files changed, 17 insertions(+), 4 deletions(-)
+
+diff --git a/embed.fnc b/embed.fnc
+index a64ffba..2395efb 100644
+--- a/embed.fnc
++++ b/embed.fnc
+@@ -1437,7 +1437,7 @@ Amdb	|void	|sv_insert	|NN SV *const bigstr|const STRLEN offset \
+ 				|const STRLEN len|NN const char *const little \
+ 				|const STRLEN littlelen
+ Apd	|void	|sv_insert_flags|NN SV *const bigstr|const STRLEN offset|const STRLEN len \
+-				|NN const char *const little|const STRLEN littlelen|const U32 flags
++				|NN const char *little|const STRLEN littlelen|const U32 flags
+ Apd	|int	|sv_isa		|NULLOK SV* sv|NN const char *const name
+ Apd	|int	|sv_isobject	|NULLOK SV* sv
+ Apd	|STRLEN	|sv_len		|NULLOK SV *const sv
+diff --git a/proto.h b/proto.h
+index fb4ee29..2b2004a 100644
+--- a/proto.h
++++ b/proto.h
+@@ -3015,7 +3015,7 @@ PERL_CALLCONV void	Perl_sv_inc_nomg(pTHX_ SV *const sv);
+ /* PERL_CALLCONV void	Perl_sv_insert(pTHX_ SV *const bigstr, const STRLEN offset, const STRLEN len, const char *const little, const STRLEN littlelen); */
+ #define PERL_ARGS_ASSERT_SV_INSERT	\
+ 	assert(bigstr); assert(little)
+-PERL_CALLCONV void	Perl_sv_insert_flags(pTHX_ SV *const bigstr, const STRLEN offset, const STRLEN len, const char *const little, const STRLEN littlelen, const U32 flags);
++PERL_CALLCONV void	Perl_sv_insert_flags(pTHX_ SV *const bigstr, const STRLEN offset, const STRLEN len, const char *little, const STRLEN littlelen, const U32 flags);
+ #define PERL_ARGS_ASSERT_SV_INSERT_FLAGS	\
+ 	assert(bigstr); assert(little)
+ PERL_CALLCONV int	Perl_sv_isa(pTHX_ SV* sv, const char *const name);
+diff --git a/sv.c b/sv.c
+index d1e84f0..697db41 100644
+--- a/sv.c
++++ b/sv.c
+@@ -6223,7 +6223,7 @@ C<SvPV_force_flags> that applies to C<bigstr>.
+ */
+ 
+ void
+-Perl_sv_insert_flags(pTHX_ SV *const bigstr, const STRLEN offset, const STRLEN len, const char *const little, const STRLEN littlelen, const U32 flags)
++Perl_sv_insert_flags(pTHX_ SV *const bigstr, const STRLEN offset, const STRLEN len, const char *little, const STRLEN littlelen, const U32 flags)
+ {
+     char *big;
+     char *mid;
+@@ -6236,6 +6236,16 @@ Perl_sv_insert_flags(pTHX_ SV *const bigstr, const STRLEN offset, const STRLEN l
+ 
+     SvPV_force_flags(bigstr, curlen, flags);
+     (void)SvPOK_only_UTF8(bigstr);
++
++    if (little >= SvPVX(bigstr) &&
++        little < SvPVX(bigstr) + (SvLEN(bigstr) ? SvLEN(bigstr) : SvCUR(bigstr))) {
++        /* little is a pointer to within bigstr, since we can reallocate bigstr,
++           or little...little+littlelen might overlap offset...offset+len we make a copy
++        */
++        little = savepvn(little, littlelen);
++        SAVEFREEPV(little);
++    }
++
+     if (offset + len > curlen) {
+ 	SvGROW(bigstr, offset+len+1);
+ 	Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char);
+diff --git a/t/op/substr.t b/t/op/substr.t
+index eae2403..01c36a9 100644
+--- a/t/op/substr.t
++++ b/t/op/substr.t
+@@ -22,7 +22,7 @@ $SIG{__WARN__} = sub {
+      }
+ };
+ 
+-plan(388);
++plan(389);
+ 
+ run_tests() unless caller;
+ 
+@@ -869,3 +869,6 @@ is($destroyed, 1, 'Timely scalar destruction with lvalue substr');
+ 
+     is($result_3363, "best", "ref-to-substr retains lvalue-ness under recursion [perl #3363]");
+ }
++
++# failed with ASAN
++fresh_perl_is('$0 = "/usr/bin/perl"; substr($0, 0, 0, $0)', '', {}, "(perl #129340) substr() with source in target");
+-- 
+2.7.4
+
diff --git a/SOURCES/perl-5.24.1-perl-129342-ensure-range-start-is-set-after-error-in.patch b/SOURCES/perl-5.24.1-perl-129342-ensure-range-start-is-set-after-error-in.patch
new file mode 100644
index 0000000..6543e4f
--- /dev/null
+++ b/SOURCES/perl-5.24.1-perl-129342-ensure-range-start-is-set-after-error-in.patch
@@ -0,0 +1,73 @@
+From a26907949ed561dccd661fc8600889eddc6664ea Mon Sep 17 00:00:00 2001
+From: Hugo van der Sanden <hv@crypt.org>
+Date: Wed, 5 Oct 2016 14:53:27 +0100
+Subject: [PATCH] [perl #129342] ensure range-start is set after error in tr///
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Ported to 5.24.1:
+
+t 59143e29a717d67a61b869a6c5bb49574f1ef43f
+Author: Tony Cook <tony@develop-help.com>
+Date:   Tue Jan 17 11:52:53 2017 +1100
+
+    (perl #129342) test for buffer overflow
+
+commit 3dd4eaeb8ac39e08179145b86aedda36584a3509
+Author: Hugo van der Sanden <hv@crypt.org>
+Date:   Wed Oct 5 14:53:27 2016 +0100
+
+    [perl #129342] ensure range-start is set after error in tr///
+
+    A parse error due to invalid octal or hex escape in the range of a
+    transliteration must still ensure some kind of start and end values
+    are captured, since we don't stop on the first such error. Failure
+    to do so can cause invalid reads after "Here we have parsed a range".
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ t/lib/croak/toke | 7 +++++++
+ toke.c           | 4 ++--
+ 2 files changed, 9 insertions(+), 2 deletions(-)
+
+diff --git a/t/lib/croak/toke b/t/lib/croak/toke
+index 18dfa24..578a6da 100644
+--- a/t/lib/croak/toke
++++ b/t/lib/croak/toke
+@@ -302,3 +302,10 @@ Execution of - aborted due to compilation errors.
+ BEGIN <>
+ EXPECT
+ Illegal declaration of subroutine BEGIN at - line 1.
++########
++# NAME tr/// handling of mis-formatted \o characters
++# may only fail with ASAN
++tr/\o-0//;
++EXPECT
++Missing braces on \o{} at - line 2, within string
++Execution of - aborted due to compilation errors.
+diff --git a/toke.c b/toke.c
+index 288f372..576ce72 100644
+--- a/toke.c
++++ b/toke.c
+@@ -3338,7 +3338,7 @@ S_scan_const(pTHX_ char *start)
+                                                UTF);
+ 		    if (! valid) {
+ 			yyerror(error);
+-			continue;
++			uv = 0; /* drop through to ensure range ends are set */
+ 		    }
+ 		    goto NUM_ESCAPE_INSERT;
+ 		}
+@@ -3356,7 +3356,7 @@ S_scan_const(pTHX_ char *start)
+                                                UTF);
+ 		    if (! valid) {
+ 			yyerror(error);
+-			continue;
++			uv = 0; /* drop through to ensure range ends are set */
+ 		    }
+ 		}
+ 
+-- 
+2.7.4
+
diff --git a/SOURCES/perl-5.24.1-perl-129377-don-t-read-past-start-of-string-for-unma.patch b/SOURCES/perl-5.24.1-perl-129377-don-t-read-past-start-of-string-for-unma.patch
new file mode 100644
index 0000000..cbf5a73
--- /dev/null
+++ b/SOURCES/perl-5.24.1-perl-129377-don-t-read-past-start-of-string-for-unma.patch
@@ -0,0 +1,107 @@
+From a08fa6fd157fd0d61da7f20f07b939fbc302c2c6 Mon Sep 17 00:00:00 2001
+From: Hugo van der Sanden <hv@crypt.org>
+Date: Wed, 5 Oct 2016 12:56:05 +0100
+Subject: [PATCH] [perl #129377] don't read past start of string for unmatched
+ backref
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Ported to 5.24.1:
+
+commit 2dfc11ec3af312f4fa3eb244077c79dbb5fc2d85
+Author: Hugo van der Sanden <hv@crypt.org>
+Date:   Wed Oct 5 12:56:05 2016 +0100
+
+    [perl #129377] don't read past start of string for unmatched backref
+
+    We can have (start, end) == (0, -1) for an unmatched backref, we must
+    check for that.
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ regexec.c  | 10 ++++++----
+ t/re/pat.t | 16 +++++++++++++++-
+ 2 files changed, 21 insertions(+), 5 deletions(-)
+
+diff --git a/regexec.c b/regexec.c
+index a5d5db4..a7bc0c3 100644
+--- a/regexec.c
++++ b/regexec.c
+@@ -5179,6 +5179,7 @@ S_regmatch(pTHX_ regmatch_info *reginfo, char *startpos, regnode *prog)
+     regnode *next;
+     U32 n = 0;	/* general value; init to avoid compiler warning */
+     SSize_t ln = 0; /* len or last;  init to avoid compiler warning */
++    SSize_t endref = 0; /* offset of end of backref when ln is start */
+     char *locinput = startpos;
+     char *pushinput; /* where to continue after a PUSH */
+     I32 nextchr;   /* is always set to UCHARAT(locinput), or -1 at EOS */
+@@ -6489,10 +6490,11 @@ S_regmatch(pTHX_ regmatch_info *reginfo, char *startpos, regnode *prog)
+ 
+ 	  do_nref_ref_common:
+ 	    ln = rex->offs[n].start;
++	    endref = rex->offs[n].end;
+ 	    reginfo->poscache_iter = reginfo->poscache_maxiter; /* Void cache */
+-	    if (rex->lastparen < n || ln == -1)
++	    if (rex->lastparen < n || ln == -1 || endref == -1)
+ 		sayNO;			/* Do not match unless seen CLOSEn. */
+-	    if (ln == rex->offs[n].end)
++	    if (ln == endref)
+ 		break;
+ 
+ 	    s = reginfo->strbeg + ln;
+@@ -6506,7 +6508,7 @@ S_regmatch(pTHX_ regmatch_info *reginfo, char *startpos, regnode *prog)
+                     * not going off the end given by reginfo->strend, and
+                     * returns in <limit> upon success, how much of the
+                     * current input was matched */
+-		if (! foldEQ_utf8_flags(s, NULL, rex->offs[n].end - ln, utf8_target,
++		if (! foldEQ_utf8_flags(s, NULL, endref - ln, utf8_target,
+ 				    locinput, &limit, 0, utf8_target, utf8_fold_flags))
+ 		{
+ 		    sayNO;
+@@ -6521,7 +6523,7 @@ S_regmatch(pTHX_ regmatch_info *reginfo, char *startpos, regnode *prog)
+ 		(type == REF ||
+ 		 UCHARAT(s) != fold_array[nextchr]))
+ 		sayNO;
+-	    ln = rex->offs[n].end - ln;
++	    ln = endref - ln;
+ 	    if (locinput + ln > reginfo->strend)
+ 		sayNO;
+ 	    if (ln > 1 && (type == REF
+diff --git a/t/re/pat.t b/t/re/pat.t
+index 4aa77cf..749edd0 100644
+--- a/t/re/pat.t
++++ b/t/re/pat.t
+@@ -23,7 +23,7 @@ BEGIN {
+     skip_all_without_unicode_tables();
+ }
+ 
+-plan tests => 791;  # Update this when adding/deleting tests.
++plan tests => 792;  # Update this when adding/deleting tests.
+ 
+ run_tests() unless caller;
+ 
+@@ -1765,6 +1765,20 @@ EOP
+             utf8::upgrade($str);
+             ok( $str =~ m{^(a|a\x{e4})$}, "fix [perl #129950] - utf8 case" );
+         }
++    {
++	# [perl #129377] backref to an unmatched capture should not cause
++	# reading before start of string.
++	SKIP: {
++	    skip "no re-debug under miniperl" if is_miniperl;
++	    my $prog = <<'EOP';
++use re qw(Debug EXECUTE);
++"x" =~ m{ () y | () \1 }x;
++EOP
++	    fresh_perl_like($prog, qr{
++		\A (?! .* ^ \s+ - )
++	    }msx, { stderr => 1 }, "Offsets in debug output are not negative");
++	}
++    }
+ } # End of sub run_tests
+ 
+ 1;
+-- 
+2.7.4
+
diff --git a/SOURCES/perl-5.24.1-perl-130262-split-scalar-context-stack-overflow-fix.patch b/SOURCES/perl-5.24.1-perl-130262-split-scalar-context-stack-overflow-fix.patch
new file mode 100644
index 0000000..e250a0a
--- /dev/null
+++ b/SOURCES/perl-5.24.1-perl-130262-split-scalar-context-stack-overflow-fix.patch
@@ -0,0 +1,62 @@
+From 2bcb4a5888b1c26ee11bc447cc02b42290c707af Mon Sep 17 00:00:00 2001
+From: Tony Cook <tony@develop-help.com>
+Date: Mon, 5 Dec 2016 11:48:14 +1100
+Subject: [PATCH] (perl #130262) split scalar context stack overflow fix
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Ported to 5.14.1:
+
+commit 02c161ef974f8f1efbb5632f741c1164adb6ca75
+Author: Tony Cook <tony@develop-help.com>
+Date:   Mon Dec 5 11:48:14 2016 +1100
+
+    (perl #130262) split scalar context stack overflow fix
+
+    pp_split didn't ensure there was space for its return value
+    in scalar context.
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ pp.c         | 2 +-
+ t/op/split.t | 6 +++++-
+ 2 files changed, 6 insertions(+), 2 deletions(-)
+
+diff --git a/pp.c b/pp.c
+index 70345ce..334b353 100644
+--- a/pp.c
++++ b/pp.c
+@@ -6259,7 +6259,7 @@ PP(pp_split)
+     }
+ 
+     GETTARGET;
+-    PUSHi(iters);
++    XPUSHi(iters);
+     RETURN;
+ }
+ 
+diff --git a/t/op/split.t b/t/op/split.t
+index b7846a1..3e08841 100644
+--- a/t/op/split.t
++++ b/t/op/split.t
+@@ -7,7 +7,7 @@ BEGIN {
+     set_up_inc('../lib');
+ }
+ 
+-plan tests => 133;
++plan tests => 134;
+ 
+ $FS = ':';
+ 
+@@ -534,3 +534,7 @@ is "@a", '1 2 3', 'assignment to split-to-array (stacked)';
+     ok eval { $a[0] = 'a'; 1; }, "array split filling AvARRAY: assign 0";
+     is "@a", "a b", "array split filling AvARRAY: result";
+ }
++
++fresh_perl_is(<<'CODE', '', {}, "scalar split stack overflow");
++map{int"";split//.0>60for"0000000000000000"}split// for"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
++CODE
+-- 
+2.7.4
+
diff --git a/SOURCES/perl-5.24.1-perl-130814-update-pointer-into-PL_linestr-after-loo.patch b/SOURCES/perl-5.24.1-perl-130814-update-pointer-into-PL_linestr-after-loo.patch
new file mode 100644
index 0000000..6a6df7f
--- /dev/null
+++ b/SOURCES/perl-5.24.1-perl-130814-update-pointer-into-PL_linestr-after-loo.patch
@@ -0,0 +1,50 @@
+From 9df34f9c4701104a366e768237ca694411136d2a Mon Sep 17 00:00:00 2001
+From: Hugo van der Sanden <hv@crypt.org>
+Date: Sun, 19 Feb 2017 10:46:09 +0000
+Subject: [PATCH] update pointer into PL_linestr after lookahead
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Ported to: 5.24.1:
+
+commit 90f2cc9a600117a49f8ee3e30cc681f062350c24
+Author: Hugo van der Sanden <hv@crypt.org>
+Date:   Sun Feb 19 10:46:09 2017 +0000
+
+    [perl #130814] update pointer into PL_linestr after lookahead
+
+    Looking ahead for the "Missing $ on loop variable" diagnostic can reallocate
+    PL_linestr, invalidating our pointer. Save the offset so we can update it
+    in that case.
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ toke.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/toke.c b/toke.c
+index 630fc59..029d2ea 100644
+--- a/toke.c
++++ b/toke.c
+@@ -7565,6 +7565,7 @@ Perl_yylex(pTHX)
+ 	    s = skipspace(s);
+ 	    if (PL_expect == XSTATE && isIDFIRST_lazy_if(s,UTF)) {
+ 		char *p = s;
++                SSize_t s_off = s - SvPVX(PL_linestr);
+ 
+ 		if ((PL_bufend - p) >= 3
+                     && strnEQ(p, "my", 2) && isSPACE(*(p + 2)))
+@@ -7582,6 +7583,9 @@ Perl_yylex(pTHX)
+ 		}
+ 		if (*p != '$')
+ 		    Perl_croak(aTHX_ "Missing $ on loop variable");
++
++                /* The buffer may have been reallocated, update s */
++                s = SvPVX(PL_linestr) + s_off;
+ 	    }
+ 	    OPERATOR(FOR);
+ 
+-- 
+2.7.4
+
diff --git a/SOURCES/perl-5.24.1-perl-130815-fix-ck_return-null-pointer-deref-on-malf.patch b/SOURCES/perl-5.24.1-perl-130815-fix-ck_return-null-pointer-deref-on-malf.patch
new file mode 100644
index 0000000..37d7af4
--- /dev/null
+++ b/SOURCES/perl-5.24.1-perl-130815-fix-ck_return-null-pointer-deref-on-malf.patch
@@ -0,0 +1,72 @@
+From be05b2f7a801ae1721641fd240e0d7d6fc018136 Mon Sep 17 00:00:00 2001
+From: Aaron Crane <arc@cpan.org>
+Date: Sun, 19 Feb 2017 12:26:54 +0000
+Subject: [PATCH] fix ck_return null-pointer deref on malformed code
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Ported to 5.24.1:
+
+commit e5c165a0b7551ffb94661aa7f18aabadba257782
+Author: Aaron Crane <arc@cpan.org>
+Date:   Sun Feb 19 12:26:54 2017 +0000
+
+    [perl #130815] fix ck_return null-pointer deref on malformed code
+
+commit 9de2a80ffc0eefb4d60e13766baf4bad129e0a92
+Author: David Mitchell <davem@iabyn.com>
+Date:   Sun Feb 19 12:36:58 2017 +0000
+
+    bump test count in t/comp/parser.t
+
+    (the previous commit forgot to)
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ op.c            | 2 +-
+ t/comp/parser.t | 8 +++++++-
+ 2 files changed, 8 insertions(+), 2 deletions(-)
+
+diff --git a/op.c b/op.c
+index 018d90c..9a61ea7 100644
+--- a/op.c
++++ b/op.c
+@@ -10695,7 +10695,7 @@ Perl_ck_return(pTHX_ OP *o)
+     PERL_ARGS_ASSERT_CK_RETURN;
+ 
+     kid = OpSIBLING(cLISTOPo->op_first);
+-    if (CvLVALUE(PL_compcv)) {
++    if (PL_compcv && CvLVALUE(PL_compcv)) {
+ 	for (; kid; kid = OpSIBLING(kid))
+ 	    op_lvalue(kid, OP_LEAVESUBLV);
+     }
+diff --git a/t/comp/parser.t b/t/comp/parser.t
+index 50f601c..5016509 100644
+--- a/t/comp/parser.t
++++ b/t/comp/parser.t
+@@ -8,7 +8,7 @@ BEGIN {
+     chdir 't' if -d 't';
+ }
+ 
+-print "1..173\n";
++print "1..174\n";
+ 
+ sub failed {
+     my ($got, $expected, $name) = @_;
+@@ -546,6 +546,12 @@ eval "grep+grep";
+ eval 'qq{@{0]}${}},{})';
+ is(1, 1, "RT #124207");
+ 
++# RT #130815: crash in ck_return for malformed code
++{
++    eval 'm(@{if(0){sub d{]]])}return';
++    like $@, qr/^syntax error at \(eval \d+\) line 1, near "\{\]"/,
++        'RT #130815: null pointer deref';
++}
+ 
+ # Add new tests HERE (above this line)
+ 
+-- 
+2.7.4
+
diff --git a/SOURCES/perl-5.24.1-perl-130822-fix-an-AV-leak-in-Perl_reg_named_buff_fe.patch b/SOURCES/perl-5.24.1-perl-130822-fix-an-AV-leak-in-Perl_reg_named_buff_fe.patch
new file mode 100644
index 0000000..0ebda55
--- /dev/null
+++ b/SOURCES/perl-5.24.1-perl-130822-fix-an-AV-leak-in-Perl_reg_named_buff_fe.patch
@@ -0,0 +1,81 @@
+From 0cefeca1fd2405ad1b5544a3919e0000377fde5e Mon Sep 17 00:00:00 2001
+From: Tony Cook <tony@develop-help.com>
+Date: Tue, 21 Feb 2017 16:38:36 +1100
+Subject: [PATCH] (perl #130822) fix an AV leak in Perl_reg_named_buff_fetch
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Ported to 5.24.1:
+
+commit 853eb961c1a3b014b5a9510740abc15ccd4383b6
+Author: Tony Cook <tony@develop-help.com>
+Date:   Tue Feb 21 16:38:36 2017 +1100
+
+    (perl #130822) fix an AV leak in Perl_reg_named_buff_fetch
+
+    Originally noted as a scoping issue by Andy Lester.
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ regcomp.c     |  5 +----
+ t/op/svleak.t | 12 +++++++++++-
+ 2 files changed, 12 insertions(+), 5 deletions(-)
+
+diff --git a/regcomp.c b/regcomp.c
+index 6329f6c..989c528 100644
+--- a/regcomp.c
++++ b/regcomp.c
+@@ -7849,21 +7849,18 @@ SV*
+ Perl_reg_named_buff_fetch(pTHX_ REGEXP * const r, SV * const namesv,
+ 			  const U32 flags)
+ {
+-    AV *retarray = NULL;
+     SV *ret;
+     struct regexp *const rx = ReANY(r);
+ 
+     PERL_ARGS_ASSERT_REG_NAMED_BUFF_FETCH;
+ 
+-    if (flags & RXapif_ALL)
+-        retarray=newAV();
+-
+     if (rx && RXp_PAREN_NAMES(rx)) {
+         HE *he_str = hv_fetch_ent( RXp_PAREN_NAMES(rx), namesv, 0, 0 );
+         if (he_str) {
+             IV i;
+             SV* sv_dat=HeVAL(he_str);
+             I32 *nums=(I32*)SvPVX(sv_dat);
++            AV * const retarray = (flags & RXapif_ALL) ? newAV() : NULL;
+             for ( i=0; i<SvIVX(sv_dat); i++ ) {
+                 if ((I32)(rx->nparens) >= nums[i]
+                     && rx->offs[nums[i]].start != -1
+diff --git a/t/op/svleak.t b/t/op/svleak.t
+index b0692ff..eeea7c1 100644
+--- a/t/op/svleak.t
++++ b/t/op/svleak.t
+@@ -15,7 +15,7 @@ BEGIN {
+ 
+ use Config;
+ 
+-plan tests => 133;
++plan tests => 134;
+ 
+ # run some code N times. If the number of SVs at the end of loop N is
+ # greater than (N-1)*delta at the end of loop 1, we've got a leak
+@@ -557,3 +557,13 @@ EOF
+     sub lk { { my $d = $op->hints_hash->HASH } }
+     ::leak(3, 0, \&lk, q!B::RHE->HASH shoudln't leak!);
+ }
++
++{
++    # Perl_reg_named_buff_fetch() leaks an AV when called with an RE
++    # with no named captures
++    sub named {
++        "x" =~ /x/;
++        re::regname("foo", 1);
++    }
++    ::leak(2, 0, \&named, "Perl_reg_named_buff_fetch() on no-name RE");
++}
+-- 
+2.7.4
+
diff --git a/SOURCES/perl-5.24.1-perl-131085-Crash-with-sub-in-stash.patch b/SOURCES/perl-5.24.1-perl-131085-Crash-with-sub-in-stash.patch
new file mode 100644
index 0000000..552a722
--- /dev/null
+++ b/SOURCES/perl-5.24.1-perl-131085-Crash-with-sub-in-stash.patch
@@ -0,0 +1,61 @@
+From cba9aa759f7ce8a4a80e748eb451f679042cd74b Mon Sep 17 00:00:00 2001
+From: Father Chrysostomos <sprout@cpan.org>
+Date: Fri, 7 Apr 2017 14:08:02 -0700
+Subject: [PATCH] Crash with sub-in-stash
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Ported to 5.24.1:
+
+commit 790acddeaa0d2c73524596048b129561225cf100
+Author: Father Chrysostomos <sprout@cpan.org>
+Date:   Fri Apr 7 14:08:02 2017 -0700
+
+    [perl #131085] Crash with sub-in-stash
+
+    $ perl -e '$::{"A"} = sub {}; \&{"A"}'
+    Segmentation fault (core dumped)
+
+    The code that vivifies a typeglob out of a code ref assumed that the
+    CV had a name hek, which is always the case when perl itself puts the
+    code ref there (via ‘sub A{}’), but is not necessarily the case if
+    someone is insinuating other stuff into the stash.
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ gv.c      | 2 +-
+ t/op/gv.t | 4 ++++
+ 2 files changed, 5 insertions(+), 1 deletion(-)
+
+diff --git a/gv.c b/gv.c
+index 3fda9b9..6690b64 100644
+--- a/gv.c
++++ b/gv.c
+@@ -421,7 +421,7 @@ Perl_gv_init_pvn(pTHX_ GV *gv, HV *stash, const char *name, STRLEN len, U32 flag
+ 	/* Not actually a constant.  Just a regular sub.  */
+ 	CV * const cv = (CV *)has_constant;
+ 	GvCV_set(gv,cv);
+-	if (CvSTASH(cv) == stash && (
++	if (CvNAMED(cv) && CvSTASH(cv) == stash && (
+ 	       CvNAME_HEK(cv) == GvNAME_HEK(gv)
+ 	    || (  HEK_LEN(CvNAME_HEK(cv)) == HEK_LEN(GvNAME_HEK(gv))
+ 	       && HEK_FLAGS(CvNAME_HEK(cv)) != HEK_FLAGS(GvNAME_HEK(gv))
+diff --git a/t/op/gv.t b/t/op/gv.t
+index 03ae46e..cdaaef5 100644
+--- a/t/op/gv.t
++++ b/t/op/gv.t
+@@ -1170,6 +1170,10 @@ SKIP: {
+     is ($? & 127, 0,"[perl #128597] No crash when gp_free calls ckWARN_d");
+ }
+ 
++# [perl #131085] This used to crash; no ok() necessary.
++$::{"A131085"} = sub {}; \&{"A131085"};
++
++
+ __END__
+ Perl
+ Rules
+-- 
+2.9.4
+
diff --git a/SOURCES/perl-5.24.1-perl-131211-fixup-File-Glob-degenerate-matching.patch b/SOURCES/perl-5.24.1-perl-131211-fixup-File-Glob-degenerate-matching.patch
new file mode 100644
index 0000000..2b490ec
--- /dev/null
+++ b/SOURCES/perl-5.24.1-perl-131211-fixup-File-Glob-degenerate-matching.patch
@@ -0,0 +1,266 @@
+From 30cba075ecbb662b392b2c6e896dec287ea49aa8 Mon Sep 17 00:00:00 2001
+From: Yves Orton <demerphq@gmail.com>
+Date: Tue, 25 Apr 2017 15:17:06 +0200
+Subject: [PATCH] fixup File::Glob degenerate matching
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Ported to 5.24.1:
+
+commit 0db967b2e6a4093a6a5f649190159767e5d005e0
+Author: Yves Orton <demerphq@gmail.com>
+Date:   Tue Apr 25 15:17:06 2017 +0200
+
+    [perl #131211] fixup File::Glob degenerate matching
+
+    The old code would go quadratic with recursion and backtracking
+    when doing patterns like "a*a*a*a*a*a*a*x" on a file like
+    "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa".
+
+    This patch changes the code to not recurse, and to not backtrack,
+    as per this article from Russ Cox: https://research.swtch.com/glob
+
+    It also adds a micro-optimisation for M_ONE and M_SET under the new code.
+
+    Thanks to Avar and Russ Cox for helping with this patch, along with
+    Jilles Tjoelker and the rest of the FreeBSD community.
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ MANIFEST                   |  1 +
+ ext/File-Glob/bsd_glob.c   | 64 +++++++++++++++++++++++--------
+ ext/File-Glob/t/rt131211.t | 94 ++++++++++++++++++++++++++++++++++++++++++++++
+ 3 files changed, 144 insertions(+), 15 deletions(-)
+ create mode 100644 ext/File-Glob/t/rt131211.t
+
+diff --git a/MANIFEST b/MANIFEST
+index fe045a7..be2a44f 100644
+--- a/MANIFEST
++++ b/MANIFEST
+@@ -3678,6 +3678,7 @@ ext/File-Glob/t/case.t		See if File::Glob works
+ ext/File-Glob/t/global.t	See if File::Glob works
+ ext/File-Glob/TODO		File::Glob extension todo list
+ ext/File-Glob/t/rt114984.t	See if File::Glob works
++ext/File-Glob/t/rt131211.t	See if File::Glob works
+ ext/File-Glob/t/taint.t		See if File::Glob works
+ ext/File-Glob/t/threads.t	See if File::Glob + threads works
+ ext/GDBM_File/GDBM_File.pm	GDBM extension Perl module
+diff --git a/ext/File-Glob/bsd_glob.c b/ext/File-Glob/bsd_glob.c
+index 821ef20..e96fb73 100644
+--- a/ext/File-Glob/bsd_glob.c
++++ b/ext/File-Glob/bsd_glob.c
+@@ -563,8 +563,12 @@ glob0(const Char *pattern, glob_t *pglob)
+ 			break;
+ 		case BG_STAR:
+ 			pglob->gl_flags |= GLOB_MAGCHAR;
+-			/* collapse adjacent stars to one,
+-			 * to avoid exponential behavior
++                        /* Collapse adjacent stars to one.
++                         * This is required to ensure that a pattern like
++                         * "a**" matches a name like "a", as without this
++                         * check when the first star matched everything it would
++                         * cause the second star to return a match fail.
++                         * As long ** is folded here this does not happen.
+ 			 */
+ 			if (bufnext == patbuf || bufnext[-1] != M_ALL)
+ 				*bufnext++ = M_ALL;
+@@ -909,35 +913,56 @@ globextend(const Char *path, glob_t *pglob, size_t *limitp)
+ 
+ 
+ /*
+- * pattern matching function for filenames.  Each occurrence of the *
+- * pattern causes a recursion level.
++ * pattern matching function for filenames using state machine to avoid
++ * recursion. We maintain a "nextp" and "nextn" to allow us to backtrack
++ * without additional callframes, and to do cleanly prune the backtracking
++ * state when multiple '*' (start) matches are included in the patter.
++ *
++ * Thanks to Russ Cox for the improved state machine logic to avoid quadratic
++ * matching on failure.
++ *
++ * https://research.swtch.com/glob
++ *
++ * An example would be a pattern
++ *  ("a*" x 100) . "y"
++ * against a file name like
++ *  ("a" x 100) . "x"
++ *
+  */
+ static int
+ match(Char *name, Char *pat, Char *patend, int nocase)
+ {
+ 	int ok, negate_range;
+ 	Char c, k;
++	Char *nextp = NULL;
++	Char *nextn = NULL;
+ 
++    loop:
+ 	while (pat < patend) {
+ 		c = *pat++;
+ 		switch (c & M_MASK) {
+ 		case M_ALL:
+ 			if (pat == patend)
+ 				return(1);
+-			do
+-			    if (match(name, pat, patend, nocase))
+-				    return(1);
+-			while (*name++ != BG_EOS)
+-				;
+-			return(0);
++	                if (*name == BG_EOS)
++	                        return 0;
++			nextn = name + 1;
++	                nextp = pat - 1;
++			break;
+ 		case M_ONE:
++                        /* since * matches leftmost-shortest first   *
++                         * if we encounter the EOS then backtracking *
++                         * will not help, so we can exit early here. */
+ 			if (*name++ == BG_EOS)
+-				return(0);
++                                return 0;
+ 			break;
+ 		case M_SET:
+ 			ok = 0;
++                        /* since * matches leftmost-shortest first   *
++                         * if we encounter the EOS then backtracking *
++                         * will not help, so we can exit early here. */
+ 			if ((k = *name++) == BG_EOS)
+-				return(0);
++                                return 0;
+ 			if ((negate_range = ((*pat & M_MASK) == M_NOT)) != BG_EOS)
+ 				++pat;
+ 			while (((c = *pat++) & M_MASK) != M_END)
+@@ -953,16 +978,25 @@ match(Char *name, Char *pat, Char *patend, int nocase)
+ 				} else if (nocase ? (tolower(c) == tolower(k)) : (c == k))
+ 					ok = 1;
+ 			if (ok == negate_range)
+-				return(0);
++				goto fail;
+ 			break;
+ 		default:
+ 			k = *name++;
+ 			if (nocase ? (tolower(k) != tolower(c)) : (k != c))
+-				return(0);
++				goto fail;
+ 			break;
+ 		}
+ 	}
+-	return(*name == BG_EOS);
++	if (*name == BG_EOS)
++		return 1;
++
++    fail:
++	if (nextn) {
++		pat = nextp;
++		name = nextn;
++		goto loop;
++	}
++	return 0;
+ }
+ 
+ /* Free allocated data belonging to a glob_t structure. */
+diff --git a/ext/File-Glob/t/rt131211.t b/ext/File-Glob/t/rt131211.t
+new file mode 100644
+index 0000000..c1bcbe0
+--- /dev/null
++++ b/ext/File-Glob/t/rt131211.t
+@@ -0,0 +1,94 @@
++use strict;
++use warnings;
++use v5.16.0;
++use File::Temp 'tempdir';
++use File::Spec::Functions;
++use Test::More;
++use Time::HiRes qw(time);
++
++plan tests => 13;
++
++my $path = tempdir uc cleanup => 1;
++my @files= (
++    "x".("a" x 50)."b", # 0
++    "abbbbbbbbbbbbc",   # 1
++    "abbbbbbbbbbbbd",   # 2
++    "aaabaaaabaaaabc",  # 3
++    "pq",               # 4
++    "r",                # 5
++    "rttiiiiiii",       # 6
++    "wewewewewewe",     # 7
++    "weeeweeeweee",     # 8
++    "weewweewweew",     # 9
++    "wewewewewewewewewewewewewewewewewq", # 10
++    "wtttttttetttttttwr", # 11
++);
++
++
++foreach (@files) {
++    open(my $f, ">", catfile $path, $_);
++}
++
++my $elapsed_fail= 0;
++my $elapsed_match= 0;
++my @got_files;
++my @no_files;
++my $count = 0;
++
++while (++$count < 10) {
++    $elapsed_match -= time;
++    @got_files= glob catfile $path, "x".("a*" x $count) . "b";
++    $elapsed_match += time;
++
++    $elapsed_fail -= time;
++    @no_files= glob catfile $path, "x".("a*" x $count) . "c";
++    $elapsed_fail += time;
++    last if $elapsed_fail > $elapsed_match * 100;
++}
++
++is $count,10,
++    "tried all the patterns without bailing out";
++
++cmp_ok $elapsed_fail/$elapsed_match,"<",2,
++    "time to fail less than twice the time to match";
++is "@got_files", catfile($path, $files[0]),
++    "only got the expected file for xa*..b";
++is "@no_files", "", "shouldnt have files for xa*..c";
++
++
++@got_files= glob catfile $path, "a*b*b*b*bc";
++is "@got_files", catfile($path, $files[1]),
++    "only got the expected file for a*b*b*b*bc";
++
++@got_files= sort glob catfile $path, "a*b*b*bc";
++is "@got_files", catfile($path, $files[3])." ".catfile($path,$files[1]),
++    "got the expected two files for a*b*b*bc";
++
++@got_files= sort glob catfile $path, "p*";
++is "@got_files", catfile($path, $files[4]),
++    "p* matches pq";
++
++@got_files= sort glob catfile $path, "r*???????";
++is "@got_files", catfile($path, $files[6]),
++    "r*??????? works as expected";
++
++@got_files= sort glob catfile $path, "w*e*w??e";
++is "@got_files", join(" ", sort map { catfile($path, $files[$_]) } (7,8)),
++    "w*e*w??e works as expected";
++
++@got_files= sort glob catfile $path, "w*e*we??";
++is "@got_files", join(" ", sort map { catfile($path, $files[$_]) } (7,8,9,10)),
++    "w*e*we?? works as expected";
++
++@got_files= sort glob catfile $path, "w**e**w";
++is "@got_files", join(" ", sort map { catfile($path, $files[$_]) } (9)),
++    "w**e**w works as expected";
++
++@got_files= sort glob catfile $path, "*wee*";
++is "@got_files", join(" ", sort map { catfile($path, $files[$_]) } (8,9)),
++    "*wee* works as expected";
++
++@got_files= sort glob catfile $path, "we*";
++is "@got_files", join(" ", sort map { catfile($path, $files[$_]) } (7,8,9,10)),
++    "we* works as expected";
++
+-- 
+2.9.4
+
diff --git a/SOURCES/perl-5.24.1-perl-131263-clear-the-UTF8-flag-on-a-glob-if-it-isn-.patch b/SOURCES/perl-5.24.1-perl-131263-clear-the-UTF8-flag-on-a-glob-if-it-isn-.patch
new file mode 100644
index 0000000..9610bc0
--- /dev/null
+++ b/SOURCES/perl-5.24.1-perl-131263-clear-the-UTF8-flag-on-a-glob-if-it-isn-.patch
@@ -0,0 +1,72 @@
+From 064604f904546ae4ddada5a2aa30256faccee39c Mon Sep 17 00:00:00 2001
+From: Tony Cook <tony@develop-help.com>
+Date: Wed, 7 Jun 2017 15:00:26 +1000
+Subject: [PATCH] clear the UTF8 flag on a glob if it isn't UTF8
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Ported to 5.24.1:
+
+commit 1097da16b21fe0a2257dba9937e55c0cca18f7e1
+Author: Tony Cook <tony@develop-help.com>
+Date:   Wed Jun 7 15:00:26 2017 +1000
+
+    [perl #131263] clear the UTF8 flag on a glob if it isn't UTF8
+
+    Previously sv_2pv_flags() would set the UTF8 flag on a glob if it
+    had a UTF8 name, but wouldn't clear tha flag if it didn't.
+
+    This meant a name change, eg. if assigned another glob, from a UTF8
+    name to a non-UTF8 name would leave the flag set.
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ sv.c      |  2 ++
+ t/op/gv.t | 10 +++++++++-
+ 2 files changed, 11 insertions(+), 1 deletion(-)
+
+diff --git a/sv.c b/sv.c
+index 12cbb5f..05584a2 100644
+--- a/sv.c
++++ b/sv.c
+@@ -3162,6 +3162,8 @@ Perl_sv_2pv_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags)
+ 	assert(SvPOK(buffer));
+ 	if (SvUTF8(buffer))
+ 	    SvUTF8_on(sv);
++        else
++            SvUTF8_off(sv);
+ 	if (lp)
+ 	    *lp = SvCUR(buffer);
+ 	return SvPVX(buffer);
+diff --git a/t/op/gv.t b/t/op/gv.t
+index cdaaef5..ea79e51 100644
+--- a/t/op/gv.t
++++ b/t/op/gv.t
+@@ -12,7 +12,7 @@ BEGIN {
+ 
+ use warnings;
+ 
+-plan(tests => 277 );
++plan(tests => 279 );
+ 
+ # type coercion on assignment
+ $foo = 'foo';
+@@ -1173,6 +1173,14 @@ SKIP: {
+ # [perl #131085] This used to crash; no ok() necessary.
+ $::{"A131085"} = sub {}; \&{"A131085"};
+ 
++{
++    # [perl #131263]
++    *sym = "\N{U+0080}";
++    ok(*sym eq "*main::\N{U+0080}", "utf8 flag properly set");
++    *sym = "\xC3\x80";
++    ok(*sym eq "*main::\xC3\x80", "utf8 flag properly cleared");
++}
++
+ 
+ __END__
+ Perl
+-- 
+2.9.4
+
diff --git a/SOURCES/perl-5.24.1-permit-goto-at-top-level-of-multicalled-sub.patch b/SOURCES/perl-5.24.1-permit-goto-at-top-level-of-multicalled-sub.patch
new file mode 100644
index 0000000..b4dde60
--- /dev/null
+++ b/SOURCES/perl-5.24.1-permit-goto-at-top-level-of-multicalled-sub.patch
@@ -0,0 +1,94 @@
+From 0a1ddbeaeeea3c690c2408bd4c3a61c05cb9695f Mon Sep 17 00:00:00 2001
+From: Zefram <zefram@fysh.org>
+Date: Mon, 23 Jan 2017 02:25:50 +0000
+Subject: [PATCH] permit goto at top level of multicalled sub
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Petr Písař: Ported to 5.24.1:
+
+commit 3c157b3cf0631c69ffa5aa2d55b9199bf93b22a9
+Author: Zefram <zefram@fysh.org>
+Date:   Mon Jan 23 02:25:50 2017 +0000
+
+    permit goto at top level of multicalled sub
+
+    A multicalled sub is reckoned to be a pseudo block, out of which it is
+    not permissible to goto.  However, the test for a pseudo block was being
+    applied too early, preventing not just escape from a multicalled sub but
+    also a goto at the top level within the sub.  This is a bug similar, but
+    not identical, to [perl #113938].  Now the test is deferred, permitting
+    goto at the sub's top level but still forbidding goto out of it.
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ pp_ctl.c    | 11 ++++++-----
+ t/op/goto.t | 11 ++++++++++-
+ 2 files changed, 16 insertions(+), 6 deletions(-)
+
+diff --git a/pp_ctl.c b/pp_ctl.c
+index e859e01..a1fc2f4 100644
+--- a/pp_ctl.c
++++ b/pp_ctl.c
+@@ -2921,6 +2921,7 @@ PP(pp_goto)
+ 	OP *gotoprobe = NULL;
+ 	bool leaving_eval = FALSE;
+ 	bool in_block = FALSE;
++	bool pseudo_block = FALSE;
+ 	PERL_CONTEXT *last_eval_cx = NULL;
+ 
+ 	/* find label */
+@@ -2959,11 +2960,9 @@ PP(pp_goto)
+ 		    gotoprobe = PL_main_root;
+ 		break;
+ 	    case CXt_SUB:
+-		if (CvDEPTH(cx->blk_sub.cv) && !CxMULTICALL(cx)) {
+-		    gotoprobe = CvROOT(cx->blk_sub.cv);
+-		    break;
+-		}
+-		/* FALLTHROUGH */
++		gotoprobe = CvROOT(cx->blk_sub.cv);
++		pseudo_block = cBOOL(CxMULTICALL(cx));
++		break;
+ 	    case CXt_FORMAT:
+ 	    case CXt_NULL:
+ 		DIE(aTHX_ "Can't \"goto\" out of a pseudo block");
+@@ -2992,6 +2991,8 @@ PP(pp_goto)
+ 			break;
+ 		}
+ 	    }
++	    if (pseudo_block)
++		DIE(aTHX_ "Can't \"goto\" out of a pseudo block");
+ 	    PL_lastgotoprobe = gotoprobe;
+ 	}
+ 	if (!retop)
+diff --git a/t/op/goto.t b/t/op/goto.t
+index aa2f24f..07bd6fb 100644
+--- a/t/op/goto.t
++++ b/t/op/goto.t
+@@ -10,7 +10,7 @@ BEGIN {
+ 
+ use warnings;
+ use strict;
+-plan tests => 98;
++plan tests => 99;
+ our $TODO;
+ 
+ my $deprecated = 0;
+@@ -774,3 +774,12 @@ sub FETCH     { $_[0][0] }
+ tie my $t, "", sub { "cluck up porridge" };
+ is eval { sub { goto $t }->() }//$@, 'cluck up porridge',
+   'tied arg returning sub ref';
++
++sub revnumcmp ($$) {
++  goto FOO;
++  die;
++  FOO:
++  return $_[1] <=> $_[0];
++}
++is eval { join(":", sort revnumcmp (9,5,1,3,7)) }, "9:7:5:3:1",
++  "can goto at top level of multicalled sub";
+-- 
+2.7.4
+
diff --git a/SOURCES/perl-5.24.1-sprintf-add-memory-wrap-tests.patch b/SOURCES/perl-5.24.1-sprintf-add-memory-wrap-tests.patch
new file mode 100644
index 0000000..e5883fc
--- /dev/null
+++ b/SOURCES/perl-5.24.1-sprintf-add-memory-wrap-tests.patch
@@ -0,0 +1,68 @@
+From 08bc282a248b21c92ff45e49490fb95e24358213 Mon Sep 17 00:00:00 2001
+From: David Mitchell <davem@iabyn.com>
+Date: Tue, 9 May 2017 14:29:11 +0100
+Subject: [PATCH] sprintf(): add memory wrap tests
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Ported to 5.24.1:
+
+commit d729f63cc94318c248eab95844cfbed5298a7ecd
+Author: David Mitchell <davem@iabyn.com>
+Date:   Tue May 9 14:29:11 2017 +0100
+
+    sprintf(): add memory wrap tests
+
+    In various places Perl_sv_vcatpvfn_flags() does croak_memory_wrap()
+    (including a couple added by the previous commit to fix RT #131260),
+    but there don't appear to be any tests for them.
+
+    So this commit adds some tests.
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ t/op/sprintf2.t | 29 ++++++++++++++++++++++++++++-
+ 1 file changed, 28 insertions(+), 1 deletion(-)
+
+diff --git a/t/op/sprintf2.t b/t/op/sprintf2.t
+index 43ed919..ef8a743 100644
+--- a/t/op/sprintf2.t
++++ b/t/op/sprintf2.t
+@@ -749,6 +749,33 @@ SKIP: {
+            "non-canonical form");
+     }
+ }
++
++# check all calls to croak_memory_wrap()
++# RT #131260
++
++{
++    my $s = 8 * $Config{sizesize};
++    my $i = 1;
++    my $max;
++    while ($s--) { $max |= $i; $i <<= 1; }
++    my $max40 = $max - 40; # see the magic fudge factor in sv_vcatpvfn_flags()
++
++    my @tests = (
++                  # format, arg
++                  ["%.${max}a",        1.1 ],
++                  ["%.${max40}a",      1.1 ],
++                  ["%.${max}i",          1 ],
++                  ["%.${max}i",         -1 ],
++    );
++
++    for my $test (@tests) {
++        my ($fmt, $arg) = @$test;
++        eval { my $s = sprintf $fmt, $arg; };
++        like("$@", qr/panic: memory wrap/, qq{memory wrap: "$fmt", "$arg"});
++    }
++}
++
++
+ 
+ # These are IEEE 754 64-bit subnormals (formerly known as denormals).
+ # Keep these as strings so that non-IEEE-754 don't trip over them.
+-- 
+2.9.4
+
diff --git a/SOURCES/perl-5.24.3-Carp-Don-t-choke-on-ISA-constant.patch b/SOURCES/perl-5.24.3-Carp-Don-t-choke-on-ISA-constant.patch
new file mode 100644
index 0000000..17db889
--- /dev/null
+++ b/SOURCES/perl-5.24.3-Carp-Don-t-choke-on-ISA-constant.patch
@@ -0,0 +1,75 @@
+From ab3bb20383d6dbf9baa811d06414ee474bb8f91e Mon Sep 17 00:00:00 2001
+From: Father Chrysostomos <sprout@cpan.org>
+Date: Wed, 1 Nov 2017 13:11:27 -0700
+Subject: [PATCH] =?UTF-8?q?Carp:=20Don=E2=80=99t=20choke=20on=20ISA=20cons?=
+ =?UTF-8?q?tant?=
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This broke some time between 1.29 (perl 5.18) and 1.3301 (perl 5.20):
+
+$ perl5.20.1 -e 'package Foo { use constant ISA => 42; Bar::f() } package Bar { use Carp; sub f { carp "tun syn" } }'
+Not a GLOB reference at /usr/local/lib/perl5/5.20.1/Carp.pm line 560.
+
+and still persisted in bleadperl (Carp 1.43) until this commit.
+
+The code that goes poking through the symbol table needs to take into
+account that not all stash elements are globs.
+
+Petr Písař: Ported to 5.24.3.
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ dist/Carp/lib/Carp.pm |  3 ++-
+ dist/Carp/t/Carp.t    | 13 ++++++++++++-
+ 2 files changed, 14 insertions(+), 2 deletions(-)
+
+diff --git a/dist/Carp/lib/Carp.pm b/dist/Carp/lib/Carp.pm
+index 92f8866..f94b9d4 100644
+--- a/dist/Carp/lib/Carp.pm
++++ b/dist/Carp/lib/Carp.pm
+@@ -594,7 +594,8 @@ sub trusts_directly {
+     for my $var (qw/ CARP_NOT ISA /) {
+         # Don't try using the variable until we know it exists,
+         # to avoid polluting the caller's namespace.
+-        if ( $stash->{$var} && *{$stash->{$var}}{ARRAY} && @{$stash->{$var}} ) {
++        if ( $stash->{$var} && ref \$stash->{$var} eq 'GLOB'
++          && *{$stash->{$var}}{ARRAY} && @{$stash->{$var}} ) {
+            return @{$stash->{$var}}
+         }
+     }
+diff --git a/dist/Carp/t/Carp.t b/dist/Carp/t/Carp.t
+index 9ecdf88..f981005 100644
+--- a/dist/Carp/t/Carp.t
++++ b/dist/Carp/t/Carp.t
+@@ -3,7 +3,7 @@ no warnings "once";
+ use Config;
+ 
+ use IPC::Open3 1.0103 qw(open3);
+-use Test::More tests => 66;
++use Test::More tests => 67;
+ 
+ sub runperl {
+     my(%args) = @_;
+@@ -478,6 +478,17 @@ SKIP:
+     );
+ }
+ 
++{
++    package Mpar;
++    sub f { Carp::croak "tun syn" }
++
++    package Phou;
++    $Phou::{ISA} = \42;
++    eval { Mpar::f };
++}
++like $@, qr/tun syn/, 'Carp can handle non-glob ISA stash elems';
++
++
+ # New tests go here
+ 
+ # line 1 "XA"
+-- 
+2.13.6
+
diff --git a/SOURCES/perl-5.24.3-Fix-deparsing-of-transliterations-with-unprintable-c.patch b/SOURCES/perl-5.24.3-Fix-deparsing-of-transliterations-with-unprintable-c.patch
new file mode 100644
index 0000000..706c37a
--- /dev/null
+++ b/SOURCES/perl-5.24.3-Fix-deparsing-of-transliterations-with-unprintable-c.patch
@@ -0,0 +1,48 @@
+From 2657358b67ba3eadd1be99bd7e732a8d68f1f95d Mon Sep 17 00:00:00 2001
+From: John Lightsey <lightsey@debian.org>
+Date: Tue, 31 Oct 2017 18:12:26 -0500
+Subject: [PATCH] Fix deparsing of transliterations with unprintable
+ characters.
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+RT #132405
+
+Signed-off-by: Nicolas R <atoomic@cpan.org>
+Petr Písař: Port to 5.24.3.
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ lib/B/Deparse.pm | 2 +-
+ lib/B/Deparse.t  | 5 +++++
+ 2 files changed, 6 insertions(+), 1 deletion(-)
+
+diff --git a/lib/B/Deparse.pm b/lib/B/Deparse.pm
+index 9879d67..f5f7d82 100644
+--- a/lib/B/Deparse.pm
++++ b/lib/B/Deparse.pm
+@@ -5047,7 +5047,7 @@ sub pchr { # ASCII
+     } elsif ($n == ord "\r") {
+ 	return '\\r';
+     } elsif ($n >= ord("\cA") and $n <= ord("\cZ")) {
+-	return '\\c' . unctrl{chr $n};
++	return '\\c' . $unctrl{chr $n};
+     } else {
+ #	return '\x' . sprintf("%02x", $n);
+ 	return '\\' . sprintf("%03o", $n);
+diff --git a/lib/B/Deparse.t b/lib/B/Deparse.t
+index 19db404..45b1ff3 100644
+--- a/lib/B/Deparse.t
++++ b/lib/B/Deparse.t
+@@ -2488,3 +2488,8 @@ $_ ^= $_;
+ $_ |.= $_;
+ $_ &.= $_;
+ $_ ^.= $_;
++####
++# tr with unprintable characters
++my $str;
++$str = 'foo';
++$str =~ tr/\cA//;
+-- 
+2.13.6
+
diff --git a/SOURCES/perl-5.24.3-fix-132017-OPFAIL-insert-needs-to-set-flags-to-0.patch b/SOURCES/perl-5.24.3-fix-132017-OPFAIL-insert-needs-to-set-flags-to-0.patch
new file mode 100644
index 0000000..5305ed7
--- /dev/null
+++ b/SOURCES/perl-5.24.3-fix-132017-OPFAIL-insert-needs-to-set-flags-to-0.patch
@@ -0,0 +1,69 @@
+From 86ecc4da0ec0cea8f9b6af4191b87e4c454aa17c Mon Sep 17 00:00:00 2001
+From: Yves Orton <demerphq@gmail.com>
+Date: Sun, 10 Sep 2017 10:59:05 +0200
+Subject: [PATCH] fix #132017 - OPFAIL insert needs to set flags to 0
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+why reginsert doesnt do this stuff I dont know.
+
+Petr Písař: Ported to 5.24.3.
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ regcomp.c  | 6 +++++-
+ t/re/pat.t | 5 ++++-
+ 2 files changed, 9 insertions(+), 2 deletions(-)
+
+diff --git a/regcomp.c b/regcomp.c
+index 6dcc58a..374032c 100644
+--- a/regcomp.c
++++ b/regcomp.c
+@@ -11498,6 +11498,7 @@ S_regpiece(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth)
+             if (max < min) {    /* If can't match, warn and optimize to fail
+                                    unconditionally */
+                 reginsert(pRExC_state, OPFAIL, orig_emit, depth+1);
++                orig_emit->flags = 0;
+                 if (PASS2) {
+                     ckWARNreg(RExC_parse, "Quantifier {n,m} with n > m can't match");
+                     NEXT_OFF(orig_emit)= regarglen[OPFAIL] + NODE_STEP_REGNODE;
+@@ -19046,8 +19047,11 @@ Perl_regprop(pTHX_ const regexp *prog, SV *sv, const regnode *o, const regmatch_
+ 
+     /* add on the verb argument if there is one */
+     if ( ( k == VERB || OP(o) == ACCEPT || OP(o) == OPFAIL ) && o->flags) {
+-        Perl_sv_catpvf(aTHX_ sv, ":%"SVf,
++        if ( ARG(o) )
++            Perl_sv_catpvf(aTHX_ sv, ":%" SVf,
+                        SVfARG((MUTABLE_SV(progi->data->data[ ARG( o ) ]))));
++        else
++            sv_catpvs(sv, ":NULL");
+     }
+ #else
+     PERL_UNUSED_CONTEXT;
+diff --git a/t/re/pat.t b/t/re/pat.t
+index 007f11d..6ff8b0b 100644
+--- a/t/re/pat.t
++++ b/t/re/pat.t
+@@ -23,7 +23,7 @@ BEGIN {
+     skip_all_without_unicode_tables();
+ }
+ 
+-plan tests => 794;  # Update this when adding/deleting tests.
++plan tests => 795;  # Update this when adding/deleting tests.
+ 
+ run_tests() unless caller;
+ 
+@@ -1793,6 +1793,9 @@ EOP
+         pos($text) = 3;
+         ok(scalar($text !~ m{(~*=[a-z]=)}g), "RT #131575");
+     }
++    {
++        fresh_perl_is('"AA" =~ m/AA{1,0}/','',{},"handle OPFAIL insert properly");
++    }
+ 
+ } # End of sub run_tests
+ 
+-- 
+2.13.6
+
diff --git a/SOURCES/perl-5.24.3-fix-parsing-of-braced-subscript-after-parens.patch b/SOURCES/perl-5.24.3-fix-parsing-of-braced-subscript-after-parens.patch
new file mode 100644
index 0000000..cc4d226
--- /dev/null
+++ b/SOURCES/perl-5.24.3-fix-parsing-of-braced-subscript-after-parens.patch
@@ -0,0 +1,4391 @@
+From 1d1ce7c6bc5cc90b78e8231319dab65f969e7682 Mon Sep 17 00:00:00 2001
+From: Zefram <zefram@fysh.org>
+Date: Tue, 16 Jan 2018 08:04:08 +0000
+Subject: [PATCH] fix parsing of braced subscript after parens
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Where an arrow is omitted between subscripts, if a parenthesised
+subscript is followed by a braced one, PL_expect was getting set to
+XBLOCK due to code intended for "foreach (...) {...}".  This broke
+bareword autoquotation, and the parsing of operators following the
+braced subscript.  Alter PL_expect from XBLOCK to XOPERATOR following
+a parenthesised subscript.  Fixes [perl #8045].
+
+Petr Písař: Ported to 5.24.3.
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ perly.act           | 1256 ++++++++++++++++++++++++++++-------------------
+ perly.h             |  297 ++++-------
+ perly.tab           | 1352 +++++++++++++++++++++++----------------------------
+ perly.y             |   20 +-
+ t/op/postfixderef.t |   25 +-
+ 5 files changed, 1502 insertions(+), 1448 deletions(-)
+
+diff --git a/perly.act b/perly.act
+index 0d1d5fc..b1457f8 100644
+--- a/perly.act
++++ b/perly.act
+@@ -1,223 +1,250 @@
+ /* -*- buffer-read-only: t -*-
+    !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!!
+-   This file is built by regen_perly.pl from perly.y.
++   This file is built by ./regen_perly.pl from perly.y.
+    Any changes made here will be lost!
+  */
+ 
+ case 2:
+-#line 115 "perly.y"
++#line 115 "perly.y" /* yacc.c:1646  */
+     {
+ 			  parser->expect = XSTATE;
+ 			}
++
+     break;
+ 
+   case 3:
+-#line 119 "perly.y"
++#line 119 "perly.y" /* yacc.c:1646  */
+     {
+-			  newPROG(block_end((ps[(3) - (4)].val.ival),(ps[(4) - (4)].val.opval)));
++			  newPROG(block_end((ps[-1].val.ival),(ps[0].val.opval)));
+ 			  PL_compiling.cop_seq = 0;
+ 			  (yyval.ival) = 0;
+ 			}
++
+     break;
+ 
+   case 4:
+-#line 125 "perly.y"
++#line 125 "perly.y" /* yacc.c:1646  */
+     {
+ 			  parser->expect = XTERM;
+ 			}
++
+     break;
+ 
+   case 5:
+-#line 129 "perly.y"
++#line 129 "perly.y" /* yacc.c:1646  */
+     {
+-			  PL_eval_root = (ps[(3) - (3)].val.opval);
++			  PL_eval_root = (ps[0].val.opval);
+ 			  (yyval.ival) = 0;
+ 			}
++
+     break;
+ 
+   case 6:
+-#line 134 "perly.y"
++#line 134 "perly.y" /* yacc.c:1646  */
+     {
+ 			  parser->expect = XBLOCK;
+ 			}
++
+     break;
+ 
+   case 7:
+-#line 138 "perly.y"
++#line 138 "perly.y" /* yacc.c:1646  */
+     {
+ 			  PL_pad_reset_pending = TRUE;
+-			  PL_eval_root = (ps[(3) - (3)].val.opval);
++			  PL_eval_root = (ps[0].val.opval);
+ 			  (yyval.ival) = 0;
+ 			  yyunlex();
+ 			  parser->yychar = YYEOF;
+ 			}
++
+     break;
+ 
+   case 8:
+-#line 146 "perly.y"
++#line 146 "perly.y" /* yacc.c:1646  */
+     {
+ 			  parser->expect = XSTATE;
+ 			}
++
+     break;
+ 
+   case 9:
+-#line 150 "perly.y"
++#line 150 "perly.y" /* yacc.c:1646  */
+     {
+ 			  PL_pad_reset_pending = TRUE;
+-			  PL_eval_root = (ps[(3) - (3)].val.opval);
++			  PL_eval_root = (ps[0].val.opval);
+ 			  (yyval.ival) = 0;
+ 			  yyunlex();
+ 			  parser->yychar = YYEOF;
+ 			}
++
+     break;
+ 
+   case 10:
+-#line 158 "perly.y"
++#line 158 "perly.y" /* yacc.c:1646  */
+     {
+ 			  parser->expect = XSTATE;
+ 			}
++
+     break;
+ 
+   case 11:
+-#line 162 "perly.y"
++#line 162 "perly.y" /* yacc.c:1646  */
+     {
+ 			  PL_pad_reset_pending = TRUE;
+-			  PL_eval_root = (ps[(3) - (3)].val.opval);
++			  PL_eval_root = (ps[0].val.opval);
+ 			  (yyval.ival) = 0;
+ 			  yyunlex();
+ 			  parser->yychar = YYEOF;
+ 			}
++
+     break;
+ 
+   case 12:
+-#line 170 "perly.y"
++#line 170 "perly.y" /* yacc.c:1646  */
+     {
+ 			  parser->expect = XSTATE;
+ 			}
++
+     break;
+ 
+   case 13:
+-#line 174 "perly.y"
++#line 174 "perly.y" /* yacc.c:1646  */
+     {
+-			  PL_eval_root = (ps[(3) - (3)].val.opval);
++			  PL_eval_root = (ps[0].val.opval);
+ 			  (yyval.ival) = 0;
+ 			}
++
+     break;
+ 
+   case 14:
+-#line 182 "perly.y"
+-    { if (parser->copline > (line_t)(ps[(1) - (4)].val.ival))
+-			      parser->copline = (line_t)(ps[(1) - (4)].val.ival);
+-			  (yyval.opval) = block_end((ps[(2) - (4)].val.ival), (ps[(3) - (4)].val.opval));
++#line 182 "perly.y" /* yacc.c:1646  */
++    { if (parser->copline > (line_t)(ps[-3].val.ival))
++			      parser->copline = (line_t)(ps[-3].val.ival);
++			  (yyval.opval) = block_end((ps[-2].val.ival), (ps[-1].val.opval));
+ 			}
++
+     break;
+ 
+   case 15:
+-#line 190 "perly.y"
+-    { if (parser->copline > (line_t)(ps[(1) - (7)].val.ival))
+-			      parser->copline = (line_t)(ps[(1) - (7)].val.ival);
+-			  (yyval.opval) = block_end((ps[(2) - (7)].val.ival), (ps[(5) - (7)].val.opval));
++#line 190 "perly.y" /* yacc.c:1646  */
++    { if (parser->copline > (line_t)(ps[-6].val.ival))
++			      parser->copline = (line_t)(ps[-6].val.ival);
++			  (yyval.opval) = block_end((ps[-5].val.ival), (ps[-2].val.opval));
+ 			}
++
+     break;
+ 
+   case 16:
+-#line 197 "perly.y"
++#line 197 "perly.y" /* yacc.c:1646  */
+     { (yyval.ival) = block_start(TRUE);
+ 			  parser->parsed_sub = 0; }
++
+     break;
+ 
+   case 17:
+-#line 202 "perly.y"
+-    { if (parser->copline > (line_t)(ps[(1) - (4)].val.ival))
+-			      parser->copline = (line_t)(ps[(1) - (4)].val.ival);
+-			  (yyval.opval) = block_end((ps[(2) - (4)].val.ival), (ps[(3) - (4)].val.opval));
++#line 202 "perly.y" /* yacc.c:1646  */
++    { if (parser->copline > (line_t)(ps[-3].val.ival))
++			      parser->copline = (line_t)(ps[-3].val.ival);
++			  (yyval.opval) = block_end((ps[-2].val.ival), (ps[-1].val.opval));
+ 			}
++
+     break;
+ 
+   case 18:
+-#line 209 "perly.y"
++#line 209 "perly.y" /* yacc.c:1646  */
+     { (yyval.ival) = block_start(FALSE);
+ 			  parser->parsed_sub = 0; }
++
+     break;
+ 
+   case 19:
+-#line 215 "perly.y"
++#line 215 "perly.y" /* yacc.c:1646  */
+     { (yyval.opval) = (OP*)NULL; }
++
+     break;
+ 
+   case 20:
+-#line 217 "perly.y"
+-    {   (yyval.opval) = op_append_list(OP_LINESEQ, (ps[(1) - (2)].val.opval), (ps[(2) - (2)].val.opval));
++#line 217 "perly.y" /* yacc.c:1646  */
++    {   (yyval.opval) = op_append_list(OP_LINESEQ, (ps[-1].val.opval), (ps[0].val.opval));
+ 			    PL_pad_reset_pending = TRUE;
+-			    if ((ps[(1) - (2)].val.opval) && (ps[(2) - (2)].val.opval))
++			    if ((ps[-1].val.opval) && (ps[0].val.opval))
+ 				PL_hints |= HINT_BLOCK_SCOPE;
+ 			}
++
+     break;
+ 
+   case 21:
+-#line 226 "perly.y"
++#line 226 "perly.y" /* yacc.c:1646  */
+     { (yyval.opval) = (OP*)NULL; }
++
+     break;
+ 
+   case 22:
+-#line 228 "perly.y"
+-    {   (yyval.opval) = op_append_list(OP_LINESEQ, (ps[(1) - (2)].val.opval), (ps[(2) - (2)].val.opval));
++#line 228 "perly.y" /* yacc.c:1646  */
++    {   (yyval.opval) = op_append_list(OP_LINESEQ, (ps[-1].val.opval), (ps[0].val.opval));
+ 			    PL_pad_reset_pending = TRUE;
+-			    if ((ps[(1) - (2)].val.opval) && (ps[(2) - (2)].val.opval))
++			    if ((ps[-1].val.opval) && (ps[0].val.opval))
+ 				PL_hints |= HINT_BLOCK_SCOPE;
+ 			}
++
+     break;
+ 
+   case 23:
+-#line 237 "perly.y"
++#line 237 "perly.y" /* yacc.c:1646  */
+     {
+-			  (yyval.opval) = (ps[(1) - (1)].val.opval) ? newSTATEOP(0, NULL, (ps[(1) - (1)].val.opval)) : NULL;
++			  (yyval.opval) = (ps[0].val.opval) ? newSTATEOP(0, NULL, (ps[0].val.opval)) : NULL;
+ 			}
++
+     break;
+ 
+   case 24:
+-#line 241 "perly.y"
+-    { (yyval.opval) = (ps[(1) - (1)].val.opval); }
++#line 241 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = (ps[0].val.opval); }
++
+     break;
+ 
+   case 25:
+-#line 245 "perly.y"
++#line 245 "perly.y" /* yacc.c:1646  */
+     {
+-			  (yyval.opval) = newSTATEOP(SVf_UTF8 * (ps[(1) - (2)].val.pval)[strlen((ps[(1) - (2)].val.pval))+1], (ps[(1) - (2)].val.pval), (ps[(2) - (2)].val.opval));
++			  (yyval.opval) = newSTATEOP(SVf_UTF8 * (ps[-1].val.pval)[strlen((ps[-1].val.pval))+1], (ps[-1].val.pval), (ps[0].val.opval));
+ 			}
++
+     break;
+ 
+   case 26:
+-#line 249 "perly.y"
++#line 249 "perly.y" /* yacc.c:1646  */
+     {
+-			  (yyval.opval) = newSTATEOP(SVf_UTF8 * (ps[(1) - (2)].val.pval)[strlen((ps[(1) - (2)].val.pval))+1], (ps[(1) - (2)].val.pval), (ps[(2) - (2)].val.opval));
++			  (yyval.opval) = newSTATEOP(SVf_UTF8 * (ps[-1].val.pval)[strlen((ps[-1].val.pval))+1], (ps[-1].val.pval), (ps[0].val.opval));
+ 			}
++
+     break;
+ 
+   case 27:
+-#line 256 "perly.y"
+-    { (yyval.opval) = (ps[(1) - (1)].val.opval); }
++#line 256 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = (ps[0].val.opval); }
++
+     break;
+ 
+   case 28:
+-#line 258 "perly.y"
++#line 258 "perly.y" /* yacc.c:1646  */
+     {
+ 			  CV *fmtcv = PL_compcv;
+-			  newFORM((ps[(2) - (4)].val.ival), (ps[(3) - (4)].val.opval), (ps[(4) - (4)].val.opval));
++			  newFORM((ps[-2].val.ival), (ps[-1].val.opval), (ps[0].val.opval));
+ 			  (yyval.opval) = (OP*)NULL;
+ 			  if (CvOUTSIDE(fmtcv) && !CvEVAL(CvOUTSIDE(fmtcv))) {
+ 			      pad_add_weakref(fmtcv);
+ 			  }
+ 			  parser->parsed_sub = 1;
+ 			}
++
+     break;
+ 
+   case 29:
+-#line 268 "perly.y"
++#line 268 "perly.y" /* yacc.c:1646  */
+     {
+-			  if ((ps[(2) - (3)].val.opval)->op_type == OP_CONST) {
++			  if ((ps[-1].val.opval)->op_type == OP_CONST) {
+ 			    const char *const name =
+-				SvPV_nolen_const(((SVOP*)(ps[(2) - (3)].val.opval))->op_sv);
++				SvPV_nolen_const(((SVOP*)(ps[-1].val.opval))->op_sv);
+ 			    if (strEQ(name, "BEGIN") || strEQ(name, "END")
+ 			      || strEQ(name, "INIT") || strEQ(name, "CHECK")
+ 			      || strEQ(name, "UNITCHECK"))
+@@ -230,33 +257,35 @@ case 2:
+ 			   || CvCLONE(CvOUTSIDE(PL_compcv))
+ 			   || !PadnameIsSTATE(PadlistNAMESARRAY(CvPADLIST(
+ 						CvOUTSIDE(PL_compcv)
+-					     ))[(ps[(2) - (3)].val.opval)->op_targ]))
++					     ))[(ps[-1].val.opval)->op_targ]))
+ 			      CvCLONE_on(PL_compcv);
+ 			  parser->in_my = 0;
+ 			  parser->in_my_stash = NULL;
+ 			}
++
+     break;
+ 
+   case 30:
+-#line 290 "perly.y"
++#line 290 "perly.y" /* yacc.c:1646  */
+     {
+ 			  SvREFCNT_inc_simple_void(PL_compcv);
+-			  (ps[(2) - (7)].val.opval)->op_type == OP_CONST
+-			      ? newATTRSUB((ps[(3) - (7)].val.ival), (ps[(2) - (7)].val.opval), (ps[(5) - (7)].val.opval), (ps[(6) - (7)].val.opval), (ps[(7) - (7)].val.opval))
+-			      : newMYSUB((ps[(3) - (7)].val.ival), (ps[(2) - (7)].val.opval), (ps[(5) - (7)].val.opval), (ps[(6) - (7)].val.opval), (ps[(7) - (7)].val.opval))
++			  (ps[-5].val.opval)->op_type == OP_CONST
++			      ? newATTRSUB((ps[-4].val.ival), (ps[-5].val.opval), (ps[-2].val.opval), (ps[-1].val.opval), (ps[0].val.opval))
++			      : newMYSUB((ps[-4].val.ival), (ps[-5].val.opval), (ps[-2].val.opval), (ps[-1].val.opval), (ps[0].val.opval))
+ 			  ;
+ 			  (yyval.opval) = (OP*)NULL;
+ 			  intro_my();
+ 			  parser->parsed_sub = 1;
+ 			}
++
+     break;
+ 
+   case 31:
+-#line 301 "perly.y"
++#line 301 "perly.y" /* yacc.c:1646  */
+     {
+-			  if ((ps[(2) - (3)].val.opval)->op_type == OP_CONST) {
++			  if ((ps[-1].val.opval)->op_type == OP_CONST) {
+ 			    const char *const name =
+-				SvPV_nolen_const(((SVOP*)(ps[(2) - (3)].val.opval))->op_sv);
++				SvPV_nolen_const(((SVOP*)(ps[-1].val.opval))->op_sv);
+ 			    if (strEQ(name, "BEGIN") || strEQ(name, "END")
+ 			      || strEQ(name, "INIT") || strEQ(name, "CHECK")
+ 			      || strEQ(name, "UNITCHECK"))
+@@ -269,130 +298,144 @@ case 2:
+ 			   || CvCLONE(CvOUTSIDE(PL_compcv))
+ 			   || !PadnameIsSTATE(PadlistNAMESARRAY(CvPADLIST(
+ 						CvOUTSIDE(PL_compcv)
+-					     ))[(ps[(2) - (3)].val.opval)->op_targ]))
++					     ))[(ps[-1].val.opval)->op_targ]))
+ 			      CvCLONE_on(PL_compcv);
+ 			  parser->in_my = 0;
+ 			  parser->in_my_stash = NULL;
+ 			}
++
+     break;
+ 
+   case 32:
+-#line 323 "perly.y"
++#line 323 "perly.y" /* yacc.c:1646  */
+     {
+ 			  OP *body;
+-			  if (parser->copline > (line_t)(ps[(8) - (10)].val.ival))
+-			      parser->copline = (line_t)(ps[(8) - (10)].val.ival);
+-			  body = block_end((ps[(5) - (10)].val.ival),
+-				op_append_list(OP_LINESEQ, (ps[(6) - (10)].val.opval), (ps[(9) - (10)].val.opval)));
++			  if (parser->copline > (line_t)(ps[-2].val.ival))
++			      parser->copline = (line_t)(ps[-2].val.ival);
++			  body = block_end((ps[-5].val.ival),
++				op_append_list(OP_LINESEQ, (ps[-4].val.opval), (ps[-1].val.opval)));
+ 
+ 			  SvREFCNT_inc_simple_void(PL_compcv);
+-			  (ps[(2) - (10)].val.opval)->op_type == OP_CONST
+-			      ? newATTRSUB((ps[(3) - (10)].val.ival), (ps[(2) - (10)].val.opval), NULL, (ps[(7) - (10)].val.opval), body)
+-			      : newMYSUB((ps[(3) - (10)].val.ival), (ps[(2) - (10)].val.opval), NULL, (ps[(7) - (10)].val.opval), body)
++			  (ps[-8].val.opval)->op_type == OP_CONST
++			      ? newATTRSUB((ps[-7].val.ival), (ps[-8].val.opval), NULL, (ps[-3].val.opval), body)
++			      : newMYSUB((ps[-7].val.ival), (ps[-8].val.opval), NULL, (ps[-3].val.opval), body)
+ 			  ;
+ 			  (yyval.opval) = (OP*)NULL;
+ 			  intro_my();
+ 			  parser->parsed_sub = 1;
+ 			}
++
+     break;
+ 
+   case 33:
+-#line 340 "perly.y"
++#line 340 "perly.y" /* yacc.c:1646  */
+     {
+-			  package((ps[(3) - (4)].val.opval));
+-			  if ((ps[(2) - (4)].val.opval))
+-			      package_version((ps[(2) - (4)].val.opval));
++			  package((ps[-1].val.opval));
++			  if ((ps[-2].val.opval))
++			      package_version((ps[-2].val.opval));
+ 			  (yyval.opval) = (OP*)NULL;
+ 			}
++
+     break;
+ 
+   case 34:
+-#line 347 "perly.y"
++#line 347 "perly.y" /* yacc.c:1646  */
+     { CvSPECIAL_on(PL_compcv); /* It's a BEGIN {} */ }
++
+     break;
+ 
+   case 35:
+-#line 349 "perly.y"
++#line 349 "perly.y" /* yacc.c:1646  */
+     {
+ 			  SvREFCNT_inc_simple_void(PL_compcv);
+-			  utilize((ps[(1) - (7)].val.ival), (ps[(2) - (7)].val.ival), (ps[(4) - (7)].val.opval), (ps[(5) - (7)].val.opval), (ps[(6) - (7)].val.opval));
++			  utilize((ps[-6].val.ival), (ps[-5].val.ival), (ps[-3].val.opval), (ps[-2].val.opval), (ps[-1].val.opval));
+ 			  parser->parsed_sub = 1;
+ 			  (yyval.opval) = (OP*)NULL;
+ 			}
++
+     break;
+ 
+   case 36:
+-#line 356 "perly.y"
++#line 356 "perly.y" /* yacc.c:1646  */
+     {
+-			  (yyval.opval) = block_end((ps[(3) - (7)].val.ival),
+-			      newCONDOP(0, (ps[(4) - (7)].val.opval), op_scope((ps[(6) - (7)].val.opval)), (ps[(7) - (7)].val.opval)));
+-			  parser->copline = (line_t)(ps[(1) - (7)].val.ival);
++			  (yyval.opval) = block_end((ps[-4].val.ival),
++			      newCONDOP(0, (ps[-3].val.opval), op_scope((ps[-1].val.opval)), (ps[0].val.opval)));
++			  parser->copline = (line_t)(ps[-6].val.ival);
+ 			}
++
+     break;
+ 
+   case 37:
+-#line 362 "perly.y"
++#line 362 "perly.y" /* yacc.c:1646  */
+     {
+-			  (yyval.opval) = block_end((ps[(3) - (7)].val.ival),
+-                              newCONDOP(0, (ps[(4) - (7)].val.opval), (ps[(7) - (7)].val.opval), op_scope((ps[(6) - (7)].val.opval))));
+-			  parser->copline = (line_t)(ps[(1) - (7)].val.ival);
++			  (yyval.opval) = block_end((ps[-4].val.ival),
++                              newCONDOP(0, (ps[-3].val.opval), (ps[0].val.opval), op_scope((ps[-1].val.opval))));
++			  parser->copline = (line_t)(ps[-6].val.ival);
+ 			}
++
+     break;
+ 
+   case 38:
+-#line 368 "perly.y"
++#line 368 "perly.y" /* yacc.c:1646  */
+     {
+-			  (yyval.opval) = block_end((ps[(3) - (6)].val.ival), newGIVENOP((ps[(4) - (6)].val.opval), op_scope((ps[(6) - (6)].val.opval)), 0));
+-			  parser->copline = (line_t)(ps[(1) - (6)].val.ival);
++			  (yyval.opval) = block_end((ps[-3].val.ival), newGIVENOP((ps[-2].val.opval), op_scope((ps[0].val.opval)), 0));
++			  parser->copline = (line_t)(ps[-5].val.ival);
+ 			}
++
+     break;
+ 
+   case 39:
+-#line 373 "perly.y"
+-    { (yyval.opval) = block_end((ps[(3) - (6)].val.ival), newWHENOP((ps[(4) - (6)].val.opval), op_scope((ps[(6) - (6)].val.opval)))); }
++#line 373 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = block_end((ps[-3].val.ival), newWHENOP((ps[-2].val.opval), op_scope((ps[0].val.opval)))); }
++
+     break;
+ 
+   case 40:
+-#line 375 "perly.y"
+-    { (yyval.opval) = newWHENOP(0, op_scope((ps[(2) - (2)].val.opval))); }
++#line 375 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = newWHENOP(0, op_scope((ps[0].val.opval))); }
++
+     break;
+ 
+   case 41:
+-#line 377 "perly.y"
++#line 377 "perly.y" /* yacc.c:1646  */
+     {
+-			  (yyval.opval) = block_end((ps[(3) - (8)].val.ival),
++			  (yyval.opval) = block_end((ps[-5].val.ival),
+ 				  newWHILEOP(0, 1, (LOOP*)(OP*)NULL,
+-				      (ps[(4) - (8)].val.opval), (ps[(7) - (8)].val.opval), (ps[(8) - (8)].val.opval), (ps[(6) - (8)].val.ival)));
+-			  parser->copline = (line_t)(ps[(1) - (8)].val.ival);
++				      (ps[-4].val.opval), (ps[-1].val.opval), (ps[0].val.opval), (ps[-2].val.ival)));
++			  parser->copline = (line_t)(ps[-7].val.ival);
+ 			}
++
+     break;
+ 
+   case 42:
+-#line 384 "perly.y"
++#line 384 "perly.y" /* yacc.c:1646  */
+     {
+-			  (yyval.opval) = block_end((ps[(3) - (8)].val.ival),
++			  (yyval.opval) = block_end((ps[-5].val.ival),
+ 				  newWHILEOP(0, 1, (LOOP*)(OP*)NULL,
+-				      (ps[(4) - (8)].val.opval), (ps[(7) - (8)].val.opval), (ps[(8) - (8)].val.opval), (ps[(6) - (8)].val.ival)));
+-			  parser->copline = (line_t)(ps[(1) - (8)].val.ival);
++				      (ps[-4].val.opval), (ps[-1].val.opval), (ps[0].val.opval), (ps[-2].val.ival)));
++			  parser->copline = (line_t)(ps[-7].val.ival);
+ 			}
++
+     break;
+ 
+   case 43:
+-#line 391 "perly.y"
++#line 391 "perly.y" /* yacc.c:1646  */
+     { parser->expect = XTERM; }
++
+     break;
+ 
+   case 44:
+-#line 393 "perly.y"
++#line 393 "perly.y" /* yacc.c:1646  */
+     { parser->expect = XTERM; }
++
+     break;
+ 
+   case 45:
+-#line 396 "perly.y"
++#line 396 "perly.y" /* yacc.c:1646  */
+     {
+-			  OP *initop = (ps[(4) - (13)].val.opval);
++			  OP *initop = (ps[-9].val.opval);
+ 			  OP *forop = newWHILEOP(0, 1, (LOOP*)(OP*)NULL,
+-				      scalar((ps[(7) - (13)].val.opval)), (ps[(13) - (13)].val.opval), (ps[(11) - (13)].val.opval), (ps[(10) - (13)].val.ival));
++				      scalar((ps[-6].val.opval)), (ps[0].val.opval), (ps[-2].val.opval), (ps[-3].val.ival));
+ 			  if (initop) {
+ 			      forop = op_prepend_elem(OP_LINESEQ, initop,
+ 				  op_append_elem(OP_LINESEQ,
+@@ -400,123 +443,135 @@ case 2:
+ 				      forop));
+ 			  }
+ 			  PL_hints |= HINT_BLOCK_SCOPE;
+-			  (yyval.opval) = block_end((ps[(3) - (13)].val.ival), forop);
+-			  parser->copline = (line_t)(ps[(1) - (13)].val.ival);
++			  (yyval.opval) = block_end((ps[-10].val.ival), forop);
++			  parser->copline = (line_t)(ps[-12].val.ival);
+ 			}
++
+     break;
+ 
+   case 46:
+-#line 411 "perly.y"
++#line 411 "perly.y" /* yacc.c:1646  */
+     {
+-			  (yyval.opval) = block_end((ps[(3) - (9)].val.ival), newFOROP(0, (ps[(4) - (9)].val.opval), (ps[(6) - (9)].val.opval), (ps[(8) - (9)].val.opval), (ps[(9) - (9)].val.opval)));
+-			  parser->copline = (line_t)(ps[(1) - (9)].val.ival);
++			  (yyval.opval) = block_end((ps[-6].val.ival), newFOROP(0, (ps[-5].val.opval), (ps[-3].val.opval), (ps[-1].val.opval), (ps[0].val.opval)));
++			  parser->copline = (line_t)(ps[-8].val.ival);
+ 			}
++
+     break;
+ 
+   case 47:
+-#line 416 "perly.y"
++#line 416 "perly.y" /* yacc.c:1646  */
+     {
+-			  (yyval.opval) = block_end((ps[(4) - (8)].val.ival), newFOROP(0,
+-				      op_lvalue((ps[(2) - (8)].val.opval), OP_ENTERLOOP), (ps[(5) - (8)].val.opval), (ps[(7) - (8)].val.opval), (ps[(8) - (8)].val.opval)));
+-			  parser->copline = (line_t)(ps[(1) - (8)].val.ival);
++			  (yyval.opval) = block_end((ps[-4].val.ival), newFOROP(0,
++				      op_lvalue((ps[-6].val.opval), OP_ENTERLOOP), (ps[-3].val.opval), (ps[-1].val.opval), (ps[0].val.opval)));
++			  parser->copline = (line_t)(ps[-7].val.ival);
+ 			}
++
+     break;
+ 
+   case 48:
+-#line 422 "perly.y"
+-    { parser->in_my = 0; (yyval.opval) = my((ps[(5) - (5)].val.opval)); }
++#line 422 "perly.y" /* yacc.c:1646  */
++    { parser->in_my = 0; (yyval.opval) = my((ps[0].val.opval)); }
++
+     break;
+ 
+   case 49:
+-#line 424 "perly.y"
++#line 424 "perly.y" /* yacc.c:1646  */
+     {
+ 			  (yyval.opval) = block_end(
+-				(ps[(4) - (11)].val.ival),
++				(ps[-7].val.ival),
+ 				newFOROP(0,
+ 					 op_lvalue(
+ 					    newUNOP(OP_REFGEN, 0,
+-						    (ps[(6) - (11)].val.opval)),
++						    (ps[-5].val.opval)),
+ 					    OP_ENTERLOOP),
+-					 (ps[(8) - (11)].val.opval), (ps[(10) - (11)].val.opval), (ps[(11) - (11)].val.opval))
++					 (ps[-3].val.opval), (ps[-1].val.opval), (ps[0].val.opval))
+ 			  );
+-			  parser->copline = (line_t)(ps[(1) - (11)].val.ival);
++			  parser->copline = (line_t)(ps[-10].val.ival);
+ 			}
++
+     break;
+ 
+   case 50:
+-#line 437 "perly.y"
++#line 437 "perly.y" /* yacc.c:1646  */
+     {
+-			  (yyval.opval) = block_end((ps[(5) - (9)].val.ival), newFOROP(
++			  (yyval.opval) = block_end((ps[-4].val.ival), newFOROP(
+ 				0, op_lvalue(newUNOP(OP_REFGEN, 0,
+-						     (ps[(3) - (9)].val.opval)),
+-					     OP_ENTERLOOP), (ps[(6) - (9)].val.opval), (ps[(8) - (9)].val.opval), (ps[(9) - (9)].val.opval)));
+-			  parser->copline = (line_t)(ps[(1) - (9)].val.ival);
++						     (ps[-6].val.opval)),
++					     OP_ENTERLOOP), (ps[-3].val.opval), (ps[-1].val.opval), (ps[0].val.opval)));
++			  parser->copline = (line_t)(ps[-8].val.ival);
+ 			}
++
+     break;
+ 
+   case 51:
+-#line 445 "perly.y"
++#line 445 "perly.y" /* yacc.c:1646  */
+     {
+-			  (yyval.opval) = block_end((ps[(3) - (7)].val.ival),
+-				  newFOROP(0, (OP*)NULL, (ps[(4) - (7)].val.opval), (ps[(6) - (7)].val.opval), (ps[(7) - (7)].val.opval)));
+-			  parser->copline = (line_t)(ps[(1) - (7)].val.ival);
++			  (yyval.opval) = block_end((ps[-4].val.ival),
++				  newFOROP(0, (OP*)NULL, (ps[-3].val.opval), (ps[-1].val.opval), (ps[0].val.opval)));
++			  parser->copline = (line_t)(ps[-6].val.ival);
+ 			}
++
+     break;
+ 
+   case 52:
+-#line 451 "perly.y"
++#line 451 "perly.y" /* yacc.c:1646  */
+     {
+ 			  /* a block is a loop that happens once */
+ 			  (yyval.opval) = newWHILEOP(0, 1, (LOOP*)(OP*)NULL,
+-				  (OP*)NULL, (ps[(1) - (2)].val.opval), (ps[(2) - (2)].val.opval), 0);
++				  (OP*)NULL, (ps[-1].val.opval), (ps[0].val.opval), 0);
+ 			}
++
+     break;
+ 
+   case 53:
+-#line 457 "perly.y"
++#line 457 "perly.y" /* yacc.c:1646  */
+     {
+-			  package((ps[(3) - (5)].val.opval));
+-			  if ((ps[(2) - (5)].val.opval)) {
+-			      package_version((ps[(2) - (5)].val.opval));
++			  package((ps[-2].val.opval));
++			  if ((ps[-3].val.opval)) {
++			      package_version((ps[-3].val.opval));
+ 			  }
+ 			}
++
+     break;
+ 
+   case 54:
+-#line 464 "perly.y"
++#line 464 "perly.y" /* yacc.c:1646  */
+     {
+ 			  /* a block is a loop that happens once */
+ 			  (yyval.opval) = newWHILEOP(0, 1, (LOOP*)(OP*)NULL,
+-				  (OP*)NULL, block_end((ps[(5) - (8)].val.ival), (ps[(7) - (8)].val.opval)), (OP*)NULL, 0);
+-			  if (parser->copline > (line_t)(ps[(4) - (8)].val.ival))
+-			      parser->copline = (line_t)(ps[(4) - (8)].val.ival);
++				  (OP*)NULL, block_end((ps[-3].val.ival), (ps[-1].val.opval)), (OP*)NULL, 0);
++			  if (parser->copline > (line_t)(ps[-4].val.ival))
++			      parser->copline = (line_t)(ps[-4].val.ival);
+ 			}
++
+     break;
+ 
+   case 55:
+-#line 472 "perly.y"
++#line 472 "perly.y" /* yacc.c:1646  */
+     {
+-			  (yyval.opval) = (ps[(1) - (2)].val.opval);
++			  (yyval.opval) = (ps[-1].val.opval);
+ 			}
++
+     break;
+ 
+   case 56:
+-#line 476 "perly.y"
++#line 476 "perly.y" /* yacc.c:1646  */
+     {
+ 			  (yyval.opval) = (OP*)NULL;
+ 			  parser->copline = NOLINE;
+ 			}
++
+     break;
+ 
+   case 57:
+-#line 484 "perly.y"
++#line 484 "perly.y" /* yacc.c:1646  */
+     { OP *list;
+-			  if ((ps[(2) - (2)].val.opval)) {
+-			      OP *term = (ps[(2) - (2)].val.opval);
+-			      list = op_append_elem(OP_LIST, (ps[(1) - (2)].val.opval), term);
++			  if ((ps[0].val.opval)) {
++			      OP *term = (ps[0].val.opval);
++			      list = op_append_elem(OP_LIST, (ps[-1].val.opval), term);
+ 			  }
+ 			  else {
+-			      list = (ps[(1) - (2)].val.opval);
++			      list = (ps[-1].val.opval);
+ 			  }
+ 			  if (parser->copline == NOLINE)
+ 			       parser->copline = CopLINE(PL_curcop)-1;
+@@ -524,186 +579,219 @@ case 2:
+ 			  (yyval.opval) = newSTATEOP(0, NULL,
+ 					  op_convert_list(OP_FORMLINE, 0, list));
+ 			}
++
+     break;
+ 
+   case 58:
+-#line 501 "perly.y"
++#line 501 "perly.y" /* yacc.c:1646  */
+     { (yyval.opval) = NULL; }
++
+     break;
+ 
+   case 59:
+-#line 503 "perly.y"
+-    { (yyval.opval) = op_unscope((ps[(2) - (3)].val.opval)); }
++#line 503 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = op_unscope((ps[-1].val.opval)); }
++
+     break;
+ 
+   case 60:
+-#line 508 "perly.y"
++#line 508 "perly.y" /* yacc.c:1646  */
+     { (yyval.opval) = (OP*)NULL; }
++
+     break;
+ 
+   case 61:
+-#line 510 "perly.y"
+-    { (yyval.opval) = (ps[(1) - (1)].val.opval); }
++#line 510 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = (ps[0].val.opval); }
++
+     break;
+ 
+   case 62:
+-#line 512 "perly.y"
+-    { (yyval.opval) = newLOGOP(OP_AND, 0, (ps[(3) - (3)].val.opval), (ps[(1) - (3)].val.opval)); }
++#line 512 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = newLOGOP(OP_AND, 0, (ps[0].val.opval), (ps[-2].val.opval)); }
++
+     break;
+ 
+   case 63:
+-#line 514 "perly.y"
+-    { (yyval.opval) = newLOGOP(OP_OR, 0, (ps[(3) - (3)].val.opval), (ps[(1) - (3)].val.opval)); }
++#line 514 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = newLOGOP(OP_OR, 0, (ps[0].val.opval), (ps[-2].val.opval)); }
++
+     break;
+ 
+   case 64:
+-#line 516 "perly.y"
+-    { (yyval.opval) = newLOOPOP(OPf_PARENS, 1, scalar((ps[(3) - (3)].val.opval)), (ps[(1) - (3)].val.opval)); }
++#line 516 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = newLOOPOP(OPf_PARENS, 1, scalar((ps[0].val.opval)), (ps[-2].val.opval)); }
++
+     break;
+ 
+   case 65:
+-#line 518 "perly.y"
+-    { (yyval.opval) = newLOOPOP(OPf_PARENS, 1, (ps[(3) - (3)].val.opval), (ps[(1) - (3)].val.opval)); }
++#line 518 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = newLOOPOP(OPf_PARENS, 1, (ps[0].val.opval), (ps[-2].val.opval)); }
++
+     break;
+ 
+   case 66:
+-#line 520 "perly.y"
+-    { (yyval.opval) = newFOROP(0, (OP*)NULL, (ps[(3) - (3)].val.opval), (ps[(1) - (3)].val.opval), (OP*)NULL);
+-			  parser->copline = (line_t)(ps[(2) - (3)].val.ival); }
++#line 520 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = newFOROP(0, (OP*)NULL, (ps[0].val.opval), (ps[-2].val.opval), (OP*)NULL);
++			  parser->copline = (line_t)(ps[-1].val.ival); }
++
+     break;
+ 
+   case 67:
+-#line 523 "perly.y"
+-    { (yyval.opval) = newWHENOP((ps[(3) - (3)].val.opval), op_scope((ps[(1) - (3)].val.opval))); }
++#line 523 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = newWHENOP((ps[0].val.opval), op_scope((ps[-2].val.opval))); }
++
+     break;
+ 
+   case 68:
+-#line 528 "perly.y"
++#line 528 "perly.y" /* yacc.c:1646  */
+     { (yyval.opval) = (OP*)NULL; }
++
+     break;
+ 
+   case 69:
+-#line 530 "perly.y"
++#line 530 "perly.y" /* yacc.c:1646  */
+     {
+-			  ((ps[(2) - (2)].val.opval))->op_flags |= OPf_PARENS;
+-			  (yyval.opval) = op_scope((ps[(2) - (2)].val.opval));
++			  ((ps[0].val.opval))->op_flags |= OPf_PARENS;
++			  (yyval.opval) = op_scope((ps[0].val.opval));
+ 			}
++
+     break;
+ 
+   case 70:
+-#line 535 "perly.y"
+-    { parser->copline = (line_t)(ps[(1) - (6)].val.ival);
++#line 535 "perly.y" /* yacc.c:1646  */
++    { parser->copline = (line_t)(ps[-5].val.ival);
+ 			    (yyval.opval) = newCONDOP(0,
+-				newSTATEOP(OPf_SPECIAL,NULL,(ps[(3) - (6)].val.opval)),
+-				op_scope((ps[(5) - (6)].val.opval)), (ps[(6) - (6)].val.opval));
++				newSTATEOP(OPf_SPECIAL,NULL,(ps[-3].val.opval)),
++				op_scope((ps[-1].val.opval)), (ps[0].val.opval));
+ 			  PL_hints |= HINT_BLOCK_SCOPE;
+ 			}
++
+     break;
+ 
+   case 71:
+-#line 545 "perly.y"
++#line 545 "perly.y" /* yacc.c:1646  */
+     { (yyval.opval) = (OP*)NULL; }
++
+     break;
+ 
+   case 72:
+-#line 547 "perly.y"
+-    { (yyval.opval) = op_scope((ps[(2) - (2)].val.opval)); }
++#line 547 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = op_scope((ps[0].val.opval)); }
++
+     break;
+ 
+   case 73:
+-#line 552 "perly.y"
++#line 552 "perly.y" /* yacc.c:1646  */
+     { (yyval.ival) = (PL_min_intro_pending &&
+ 			    PL_max_intro_pending >=  PL_min_intro_pending);
+ 			  intro_my(); }
++
+     break;
+ 
+   case 74:
+-#line 558 "perly.y"
++#line 558 "perly.y" /* yacc.c:1646  */
+     { (yyval.opval) = (OP*)NULL; }
++
+     break;
+ 
+   case 76:
+-#line 564 "perly.y"
++#line 564 "perly.y" /* yacc.c:1646  */
+     { YYSTYPE tmplval;
+ 			  (void)scan_num("1", &tmplval);
+ 			  (yyval.opval) = tmplval.opval; }
++
+     break;
+ 
+   case 78:
+-#line 572 "perly.y"
+-    { (yyval.opval) = invert(scalar((ps[(1) - (1)].val.opval))); }
++#line 572 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = invert(scalar((ps[0].val.opval))); }
++
+     break;
+ 
+   case 79:
+-#line 577 "perly.y"
+-    { (yyval.opval) = (ps[(1) - (1)].val.opval); intro_my(); }
++#line 577 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = (ps[0].val.opval); intro_my(); }
++
+     break;
+ 
+   case 80:
+-#line 581 "perly.y"
+-    { (yyval.opval) = (ps[(1) - (1)].val.opval); intro_my(); }
++#line 581 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = (ps[0].val.opval); intro_my(); }
++
+     break;
+ 
+   case 81:
+-#line 584 "perly.y"
+-    { (yyval.opval) = (ps[(1) - (1)].val.opval); }
++#line 584 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = (ps[0].val.opval); }
++
+     break;
+ 
+   case 82:
+-#line 585 "perly.y"
++#line 585 "perly.y" /* yacc.c:1646  */
+     { (yyval.opval) = (OP*)NULL; }
++
+     break;
+ 
+   case 83:
+-#line 589 "perly.y"
++#line 589 "perly.y" /* yacc.c:1646  */
+     { (yyval.ival) = start_subparse(FALSE, 0);
+ 			    SAVEFREESV(PL_compcv); }
++
+     break;
+ 
+   case 84:
+-#line 595 "perly.y"
++#line 595 "perly.y" /* yacc.c:1646  */
+     { (yyval.ival) = start_subparse(FALSE, CVf_ANON);
+ 			    SAVEFREESV(PL_compcv); }
++
+     break;
+ 
+   case 85:
+-#line 600 "perly.y"
++#line 600 "perly.y" /* yacc.c:1646  */
+     { (yyval.ival) = start_subparse(TRUE, 0);
+ 			    SAVEFREESV(PL_compcv); }
++
+     break;
+ 
+   case 88:
+-#line 611 "perly.y"
++#line 611 "perly.y" /* yacc.c:1646  */
+     { (yyval.opval) = (OP*)NULL; }
++
+     break;
+ 
+   case 90:
+-#line 617 "perly.y"
++#line 617 "perly.y" /* yacc.c:1646  */
+     { (yyval.opval) = (OP*)NULL; }
++
+     break;
+ 
+   case 91:
+-#line 619 "perly.y"
+-    { (yyval.opval) = (ps[(2) - (2)].val.opval); }
++#line 619 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = (ps[0].val.opval); }
++
+     break;
+ 
+   case 92:
+-#line 621 "perly.y"
++#line 621 "perly.y" /* yacc.c:1646  */
+     { (yyval.opval) = (OP*)NULL; }
++
+     break;
+ 
+   case 93:
+-#line 626 "perly.y"
+-    { (yyval.opval) = (ps[(2) - (2)].val.opval); }
++#line 626 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = (ps[0].val.opval); }
++
+     break;
+ 
+   case 94:
+-#line 628 "perly.y"
++#line 628 "perly.y" /* yacc.c:1646  */
+     { (yyval.opval) = (OP*)NULL; }
++
+     break;
+ 
+   case 95:
+-#line 633 "perly.y"
++#line 633 "perly.y" /* yacc.c:1646  */
+     {
+ 			  /* We shouldn't get here otherwise */
+ 			  assert(FEATURE_SIGNATURES_IS_ENABLED);
+@@ -713,318 +801,382 @@ case 2:
+ 				"The signatures feature is experimental");
+ 			  (yyval.opval) = parse_subsignature();
+ 			}
++
+     break;
+ 
+   case 96:
+-#line 643 "perly.y"
++#line 643 "perly.y" /* yacc.c:1646  */
+     {
+-			  (yyval.opval) = op_append_list(OP_LINESEQ, (ps[(2) - (3)].val.opval),
++			  (yyval.opval) = op_append_list(OP_LINESEQ, (ps[-1].val.opval),
+ 				newSTATEOP(0, NULL, sawparens(newNULLLIST())));
+ 			  parser->expect = XATTRBLOCK;
+ 			}
++
+     break;
+ 
+   case 98:
+-#line 652 "perly.y"
++#line 652 "perly.y" /* yacc.c:1646  */
+     { (yyval.opval) = (OP*)NULL; }
++
+     break;
+ 
+   case 99:
+-#line 657 "perly.y"
+-    { (yyval.opval) = newLOGOP(OP_AND, 0, (ps[(1) - (3)].val.opval), (ps[(3) - (3)].val.opval)); }
++#line 657 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = newLOGOP(OP_AND, 0, (ps[-2].val.opval), (ps[0].val.opval)); }
++
+     break;
+ 
+   case 100:
+-#line 659 "perly.y"
+-    { (yyval.opval) = newLOGOP((ps[(2) - (3)].val.ival), 0, (ps[(1) - (3)].val.opval), (ps[(3) - (3)].val.opval)); }
++#line 659 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = newLOGOP((ps[-1].val.ival), 0, (ps[-2].val.opval), (ps[0].val.opval)); }
++
+     break;
+ 
+   case 101:
+-#line 661 "perly.y"
+-    { (yyval.opval) = newLOGOP(OP_DOR, 0, (ps[(1) - (3)].val.opval), (ps[(3) - (3)].val.opval)); }
++#line 661 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = newLOGOP(OP_DOR, 0, (ps[-2].val.opval), (ps[0].val.opval)); }
++
+     break;
+ 
+   case 103:
+-#line 667 "perly.y"
+-    { (yyval.opval) = (ps[(1) - (2)].val.opval); }
++#line 667 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = (ps[-1].val.opval); }
++
+     break;
+ 
+   case 104:
+-#line 669 "perly.y"
++#line 669 "perly.y" /* yacc.c:1646  */
+     {
+-			  OP* term = (ps[(3) - (3)].val.opval);
+-			  (yyval.opval) = op_append_elem(OP_LIST, (ps[(1) - (3)].val.opval), term);
++			  OP* term = (ps[0].val.opval);
++			  (yyval.opval) = op_append_elem(OP_LIST, (ps[-2].val.opval), term);
+ 			}
++
+     break;
+ 
+   case 106:
+-#line 678 "perly.y"
+-    { (yyval.opval) = op_convert_list((ps[(1) - (3)].val.ival), OPf_STACKED,
+-				op_prepend_elem(OP_LIST, newGVREF((ps[(1) - (3)].val.ival),(ps[(2) - (3)].val.opval)), (ps[(3) - (3)].val.opval)) );
++#line 678 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = op_convert_list((ps[-2].val.ival), OPf_STACKED,
++				op_prepend_elem(OP_LIST, newGVREF((ps[-2].val.ival),(ps[-1].val.opval)), (ps[0].val.opval)) );
+ 			}
++
+     break;
+ 
+   case 107:
+-#line 682 "perly.y"
+-    { (yyval.opval) = op_convert_list((ps[(1) - (5)].val.ival), OPf_STACKED,
+-				op_prepend_elem(OP_LIST, newGVREF((ps[(1) - (5)].val.ival),(ps[(3) - (5)].val.opval)), (ps[(4) - (5)].val.opval)) );
++#line 682 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = op_convert_list((ps[-4].val.ival), OPf_STACKED,
++				op_prepend_elem(OP_LIST, newGVREF((ps[-4].val.ival),(ps[-2].val.opval)), (ps[-1].val.opval)) );
+ 			}
++
+     break;
+ 
+   case 108:
+-#line 686 "perly.y"
++#line 686 "perly.y" /* yacc.c:1646  */
+     { (yyval.opval) = op_convert_list(OP_ENTERSUB, OPf_STACKED,
+ 				op_append_elem(OP_LIST,
+-				    op_prepend_elem(OP_LIST, scalar((ps[(1) - (6)].val.opval)), (ps[(5) - (6)].val.opval)),
+-				    newMETHOP(OP_METHOD, 0, (ps[(3) - (6)].val.opval))));
++				    op_prepend_elem(OP_LIST, scalar((ps[-5].val.opval)), (ps[-1].val.opval)),
++				    newMETHOP(OP_METHOD, 0, (ps[-3].val.opval))));
+ 			}
++
+     break;
+ 
+   case 109:
+-#line 692 "perly.y"
++#line 692 "perly.y" /* yacc.c:1646  */
+     { (yyval.opval) = op_convert_list(OP_ENTERSUB, OPf_STACKED,
+-				op_append_elem(OP_LIST, scalar((ps[(1) - (3)].val.opval)),
+-				    newMETHOP(OP_METHOD, 0, (ps[(3) - (3)].val.opval))));
++				op_append_elem(OP_LIST, scalar((ps[-2].val.opval)),
++				    newMETHOP(OP_METHOD, 0, (ps[0].val.opval))));
+ 			}
++
+     break;
+ 
+   case 110:
+-#line 697 "perly.y"
++#line 697 "perly.y" /* yacc.c:1646  */
+     { (yyval.opval) = op_convert_list(OP_ENTERSUB, OPf_STACKED,
+ 				op_append_elem(OP_LIST,
+-				    op_prepend_elem(OP_LIST, (ps[(2) - (3)].val.opval), (ps[(3) - (3)].val.opval)),
+-				    newMETHOP(OP_METHOD, 0, (ps[(1) - (3)].val.opval))));
++				    op_prepend_elem(OP_LIST, (ps[-1].val.opval), (ps[0].val.opval)),
++				    newMETHOP(OP_METHOD, 0, (ps[-2].val.opval))));
+ 			}
++
+     break;
+ 
+   case 111:
+-#line 703 "perly.y"
++#line 703 "perly.y" /* yacc.c:1646  */
+     { (yyval.opval) = op_convert_list(OP_ENTERSUB, OPf_STACKED,
+ 				op_append_elem(OP_LIST,
+-				    op_prepend_elem(OP_LIST, (ps[(2) - (5)].val.opval), (ps[(4) - (5)].val.opval)),
+-				    newMETHOP(OP_METHOD, 0, (ps[(1) - (5)].val.opval))));
++				    op_prepend_elem(OP_LIST, (ps[-3].val.opval), (ps[-1].val.opval)),
++				    newMETHOP(OP_METHOD, 0, (ps[-4].val.opval))));
+ 			}
++
+     break;
+ 
+   case 112:
+-#line 709 "perly.y"
+-    { (yyval.opval) = op_convert_list((ps[(1) - (2)].val.ival), 0, (ps[(2) - (2)].val.opval)); }
++#line 709 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = op_convert_list((ps[-1].val.ival), 0, (ps[0].val.opval)); }
++
+     break;
+ 
+   case 113:
+-#line 711 "perly.y"
+-    { (yyval.opval) = op_convert_list((ps[(1) - (4)].val.ival), 0, (ps[(3) - (4)].val.opval)); }
++#line 711 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = op_convert_list((ps[-3].val.ival), 0, (ps[-1].val.opval)); }
++
+     break;
+ 
+   case 114:
+-#line 713 "perly.y"
++#line 713 "perly.y" /* yacc.c:1646  */
+     { SvREFCNT_inc_simple_void(PL_compcv);
+-			  (yyval.opval) = newANONATTRSUB((ps[(2) - (3)].val.ival), 0, (OP*)NULL, (ps[(3) - (3)].val.opval)); }
++			  (yyval.opval) = newANONATTRSUB((ps[-1].val.ival), 0, (OP*)NULL, (ps[0].val.opval)); }
++
+     break;
+ 
+   case 115:
+-#line 716 "perly.y"
++#line 716 "perly.y" /* yacc.c:1646  */
+     { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
+ 				 op_append_elem(OP_LIST,
+-				   op_prepend_elem(OP_LIST, (ps[(4) - (5)].val.opval), (ps[(5) - (5)].val.opval)), (ps[(1) - (5)].val.opval)));
++				   op_prepend_elem(OP_LIST, (ps[-1].val.opval), (ps[0].val.opval)), (ps[-4].val.opval)));
+ 			}
++
+     break;
+ 
+   case 118:
+-#line 731 "perly.y"
+-    { (yyval.opval) = newBINOP(OP_GELEM, 0, (ps[(1) - (5)].val.opval), scalar((ps[(3) - (5)].val.opval))); }
++#line 731 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = newBINOP(OP_GELEM, 0, (ps[-4].val.opval), scalar((ps[-2].val.opval))); }
++
+     break;
+ 
+   case 119:
+-#line 733 "perly.y"
+-    { (yyval.opval) = newBINOP(OP_AELEM, 0, oopsAV((ps[(1) - (4)].val.opval)), scalar((ps[(3) - (4)].val.opval)));
++#line 733 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = newBINOP(OP_AELEM, 0, oopsAV((ps[-3].val.opval)), scalar((ps[-1].val.opval)));
+ 			}
++
+     break;
+ 
+   case 120:
+-#line 736 "perly.y"
++#line 736 "perly.y" /* yacc.c:1646  */
+     { (yyval.opval) = newBINOP(OP_AELEM, 0,
+-					ref(newAVREF((ps[(1) - (5)].val.opval)),OP_RV2AV),
+-					scalar((ps[(4) - (5)].val.opval)));
++					ref(newAVREF((ps[-4].val.opval)),OP_RV2AV),
++					scalar((ps[-1].val.opval)));
+ 			}
++
+     break;
+ 
+   case 121:
+-#line 741 "perly.y"
++#line 741 "perly.y" /* yacc.c:1646  */
+     { (yyval.opval) = newBINOP(OP_AELEM, 0,
+-					ref(newAVREF((ps[(1) - (4)].val.opval)),OP_RV2AV),
+-					scalar((ps[(3) - (4)].val.opval)));
++					ref(newAVREF((ps[-3].val.opval)),OP_RV2AV),
++					scalar((ps[-1].val.opval)));
+ 			}
++
+     break;
+ 
+   case 122:
+-#line 746 "perly.y"
+-    { (yyval.opval) = newBINOP(OP_HELEM, 0, oopsHV((ps[(1) - (5)].val.opval)), jmaybe((ps[(3) - (5)].val.opval)));
++#line 746 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = newBINOP(OP_HELEM, 0, oopsHV((ps[-4].val.opval)), jmaybe((ps[-2].val.opval)));
+ 			}
++
+     break;
+ 
+   case 123:
+-#line 749 "perly.y"
++#line 749 "perly.y" /* yacc.c:1646  */
+     { (yyval.opval) = newBINOP(OP_HELEM, 0,
+-					ref(newHVREF((ps[(1) - (6)].val.opval)),OP_RV2HV),
+-					jmaybe((ps[(4) - (6)].val.opval))); }
++					ref(newHVREF((ps[-5].val.opval)),OP_RV2HV),
++					jmaybe((ps[-2].val.opval))); }
++
+     break;
+ 
+   case 124:
+-#line 753 "perly.y"
++#line 753 "perly.y" /* yacc.c:1646  */
+     { (yyval.opval) = newBINOP(OP_HELEM, 0,
+-					ref(newHVREF((ps[(1) - (5)].val.opval)),OP_RV2HV),
+-					jmaybe((ps[(3) - (5)].val.opval))); }
++					ref(newHVREF((ps[-4].val.opval)),OP_RV2HV),
++					jmaybe((ps[-2].val.opval))); }
++
+     break;
+ 
+   case 125:
+-#line 757 "perly.y"
++#line 757 "perly.y" /* yacc.c:1646  */
+     { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
+-				   newCVREF(0, scalar((ps[(1) - (4)].val.opval)))); }
++				   newCVREF(0, scalar((ps[-3].val.opval))));
++			  if (parser->expect == XBLOCK)
++			      parser->expect = XOPERATOR;
++			}
++
+     break;
+ 
+   case 126:
+-#line 760 "perly.y"
++#line 763 "perly.y" /* yacc.c:1646  */
+     { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
+-				   op_append_elem(OP_LIST, (ps[(4) - (5)].val.opval),
+-				       newCVREF(0, scalar((ps[(1) - (5)].val.opval))))); }
++				   op_append_elem(OP_LIST, (ps[-1].val.opval),
++				       newCVREF(0, scalar((ps[-4].val.opval)))));
++			  if (parser->expect == XBLOCK)
++			      parser->expect = XOPERATOR;
++			}
++
+     break;
+ 
+   case 127:
+-#line 765 "perly.y"
++#line 771 "perly.y" /* yacc.c:1646  */
+     { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
+-				   op_append_elem(OP_LIST, (ps[(3) - (4)].val.opval),
+-					       newCVREF(0, scalar((ps[(1) - (4)].val.opval))))); }
++				   op_append_elem(OP_LIST, (ps[-1].val.opval),
++					       newCVREF(0, scalar((ps[-3].val.opval)))));
++			  if (parser->expect == XBLOCK)
++			      parser->expect = XOPERATOR;
++			}
++
+     break;
+ 
+   case 128:
+-#line 769 "perly.y"
++#line 778 "perly.y" /* yacc.c:1646  */
+     { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
+-				   newCVREF(0, scalar((ps[(1) - (3)].val.opval)))); }
++				   newCVREF(0, scalar((ps[-2].val.opval))));
++			  if (parser->expect == XBLOCK)
++			      parser->expect = XOPERATOR;
++			}
++
+     break;
+ 
+   case 129:
+-#line 772 "perly.y"
+-    { (yyval.opval) = newSLICEOP(0, (ps[(5) - (6)].val.opval), (ps[(2) - (6)].val.opval)); }
++#line 784 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = newSLICEOP(0, (ps[-1].val.opval), (ps[-4].val.opval)); }
++
+     break;
+ 
+   case 130:
+-#line 774 "perly.y"
+-    { (yyval.opval) = newSLICEOP(0, (ps[(3) - (4)].val.opval), (ps[(1) - (4)].val.opval)); }
++#line 786 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = newSLICEOP(0, (ps[-1].val.opval), (ps[-3].val.opval)); }
++
+     break;
+ 
+   case 131:
+-#line 776 "perly.y"
+-    { (yyval.opval) = newSLICEOP(0, (ps[(4) - (5)].val.opval), (OP*)NULL); }
++#line 788 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = newSLICEOP(0, (ps[-1].val.opval), (OP*)NULL); }
++
+     break;
+ 
+   case 132:
+-#line 781 "perly.y"
+-    { (yyval.opval) = newASSIGNOP(OPf_STACKED, (ps[(1) - (3)].val.opval), (ps[(2) - (3)].val.ival), (ps[(3) - (3)].val.opval)); }
++#line 793 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = newASSIGNOP(OPf_STACKED, (ps[-2].val.opval), (ps[-1].val.ival), (ps[0].val.opval)); }
++
+     break;
+ 
+   case 133:
+-#line 783 "perly.y"
+-    { (yyval.opval) = newBINOP((ps[(2) - (3)].val.ival), 0, scalar((ps[(1) - (3)].val.opval)), scalar((ps[(3) - (3)].val.opval))); }
++#line 795 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); }
++
+     break;
+ 
+   case 134:
+-#line 785 "perly.y"
+-    {   if ((ps[(2) - (3)].val.ival) != OP_REPEAT)
+-				scalar((ps[(1) - (3)].val.opval));
+-			    (yyval.opval) = newBINOP((ps[(2) - (3)].val.ival), 0, (ps[(1) - (3)].val.opval), scalar((ps[(3) - (3)].val.opval)));
++#line 797 "perly.y" /* yacc.c:1646  */
++    {   if ((ps[-1].val.ival) != OP_REPEAT)
++				scalar((ps[-2].val.opval));
++			    (yyval.opval) = newBINOP((ps[-1].val.ival), 0, (ps[-2].val.opval), scalar((ps[0].val.opval)));
+ 			}
++
+     break;
+ 
+   case 135:
+-#line 790 "perly.y"
+-    { (yyval.opval) = newBINOP((ps[(2) - (3)].val.ival), 0, scalar((ps[(1) - (3)].val.opval)), scalar((ps[(3) - (3)].val.opval))); }
++#line 802 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); }
++
+     break;
+ 
+   case 136:
+-#line 792 "perly.y"
+-    { (yyval.opval) = newBINOP((ps[(2) - (3)].val.ival), 0, scalar((ps[(1) - (3)].val.opval)), scalar((ps[(3) - (3)].val.opval))); }
++#line 804 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); }
++
+     break;
+ 
+   case 137:
+-#line 794 "perly.y"
+-    { (yyval.opval) = newBINOP((ps[(2) - (3)].val.ival), 0, scalar((ps[(1) - (3)].val.opval)), scalar((ps[(3) - (3)].val.opval))); }
++#line 806 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); }
++
+     break;
+ 
+   case 138:
+-#line 796 "perly.y"
+-    { (yyval.opval) = newBINOP((ps[(2) - (3)].val.ival), 0, scalar((ps[(1) - (3)].val.opval)), scalar((ps[(3) - (3)].val.opval))); }
++#line 808 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); }
++
+     break;
+ 
+   case 139:
+-#line 798 "perly.y"
+-    { (yyval.opval) = newBINOP((ps[(2) - (3)].val.ival), 0, scalar((ps[(1) - (3)].val.opval)), scalar((ps[(3) - (3)].val.opval))); }
++#line 810 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); }
++
+     break;
+ 
+   case 140:
+-#line 800 "perly.y"
+-    { (yyval.opval) = newBINOP((ps[(2) - (3)].val.ival), 0, scalar((ps[(1) - (3)].val.opval)), scalar((ps[(3) - (3)].val.opval))); }
++#line 812 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); }
++
+     break;
+ 
+   case 141:
+-#line 802 "perly.y"
+-    { (yyval.opval) = newRANGE((ps[(2) - (3)].val.ival), scalar((ps[(1) - (3)].val.opval)), scalar((ps[(3) - (3)].val.opval))); }
++#line 814 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = newRANGE((ps[-1].val.ival), scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); }
++
+     break;
+ 
+   case 142:
+-#line 804 "perly.y"
+-    { (yyval.opval) = newLOGOP(OP_AND, 0, (ps[(1) - (3)].val.opval), (ps[(3) - (3)].val.opval)); }
++#line 816 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = newLOGOP(OP_AND, 0, (ps[-2].val.opval), (ps[0].val.opval)); }
++
+     break;
+ 
+   case 143:
+-#line 806 "perly.y"
+-    { (yyval.opval) = newLOGOP(OP_OR, 0, (ps[(1) - (3)].val.opval), (ps[(3) - (3)].val.opval)); }
++#line 818 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = newLOGOP(OP_OR, 0, (ps[-2].val.opval), (ps[0].val.opval)); }
++
+     break;
+ 
+   case 144:
+-#line 808 "perly.y"
+-    { (yyval.opval) = newLOGOP(OP_DOR, 0, (ps[(1) - (3)].val.opval), (ps[(3) - (3)].val.opval)); }
++#line 820 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = newLOGOP(OP_DOR, 0, (ps[-2].val.opval), (ps[0].val.opval)); }
++
+     break;
+ 
+   case 145:
+-#line 810 "perly.y"
+-    { (yyval.opval) = bind_match((ps[(2) - (3)].val.ival), (ps[(1) - (3)].val.opval), (ps[(3) - (3)].val.opval)); }
++#line 822 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = bind_match((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); }
++
+     break;
+ 
+   case 146:
+-#line 815 "perly.y"
+-    { (yyval.opval) = newUNOP(OP_NEGATE, 0, scalar((ps[(2) - (2)].val.opval))); }
++#line 827 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = newUNOP(OP_NEGATE, 0, scalar((ps[0].val.opval))); }
++
+     break;
+ 
+   case 147:
+-#line 817 "perly.y"
+-    { (yyval.opval) = (ps[(2) - (2)].val.opval); }
++#line 829 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = (ps[0].val.opval); }
++
+     break;
+ 
+   case 148:
+-#line 820 "perly.y"
+-    { (yyval.opval) = newUNOP(OP_NOT, 0, scalar((ps[(2) - (2)].val.opval))); }
++#line 832 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = newUNOP(OP_NOT, 0, scalar((ps[0].val.opval))); }
++
+     break;
+ 
+   case 149:
+-#line 822 "perly.y"
+-    { (yyval.opval) = newUNOP((ps[(1) - (2)].val.ival), 0, scalar((ps[(2) - (2)].val.opval))); }
++#line 834 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = newUNOP((ps[-1].val.ival), 0, scalar((ps[0].val.opval))); }
++
+     break;
+ 
+   case 150:
+-#line 824 "perly.y"
++#line 836 "perly.y" /* yacc.c:1646  */
+     { (yyval.opval) = newUNOP(OP_POSTINC, 0,
+-					op_lvalue(scalar((ps[(1) - (2)].val.opval)), OP_POSTINC)); }
++					op_lvalue(scalar((ps[-1].val.opval)), OP_POSTINC)); }
++
+     break;
+ 
+   case 151:
+-#line 827 "perly.y"
++#line 839 "perly.y" /* yacc.c:1646  */
+     { (yyval.opval) = newUNOP(OP_POSTDEC, 0,
+-					op_lvalue(scalar((ps[(1) - (2)].val.opval)), OP_POSTDEC));}
++					op_lvalue(scalar((ps[-1].val.opval)), OP_POSTDEC));}
++
+     break;
+ 
+   case 152:
+-#line 830 "perly.y"
++#line 842 "perly.y" /* yacc.c:1646  */
+     { (yyval.opval) = op_convert_list(OP_JOIN, 0,
+ 				       op_append_elem(
+ 					OP_LIST,
+@@ -1032,510 +1184,598 @@ case 2:
+ 					    newSVOP(OP_CONST,0,
+ 						    newSVpvs("\""))
+ 					)),
+-					(ps[(1) - (2)].val.opval)
++					(ps[-1].val.opval)
+ 				       ));
+ 			}
++
+     break;
+ 
+   case 153:
+-#line 841 "perly.y"
++#line 853 "perly.y" /* yacc.c:1646  */
+     { (yyval.opval) = newUNOP(OP_PREINC, 0,
+-					op_lvalue(scalar((ps[(2) - (2)].val.opval)), OP_PREINC)); }
++					op_lvalue(scalar((ps[0].val.opval)), OP_PREINC)); }
++
+     break;
+ 
+   case 154:
+-#line 844 "perly.y"
++#line 856 "perly.y" /* yacc.c:1646  */
+     { (yyval.opval) = newUNOP(OP_PREDEC, 0,
+-					op_lvalue(scalar((ps[(2) - (2)].val.opval)), OP_PREDEC)); }
++					op_lvalue(scalar((ps[0].val.opval)), OP_PREDEC)); }
++
+     break;
+ 
+   case 155:
+-#line 851 "perly.y"
+-    { (yyval.opval) = newANONLIST((ps[(2) - (3)].val.opval)); }
++#line 863 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = newANONLIST((ps[-1].val.opval)); }
++
+     break;
+ 
+   case 156:
+-#line 853 "perly.y"
++#line 865 "perly.y" /* yacc.c:1646  */
+     { (yyval.opval) = newANONLIST((OP*)NULL);}
++
+     break;
+ 
+   case 157:
+-#line 855 "perly.y"
+-    { (yyval.opval) = newANONHASH((ps[(2) - (4)].val.opval)); }
++#line 867 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = newANONHASH((ps[-2].val.opval)); }
++
+     break;
+ 
+   case 158:
+-#line 857 "perly.y"
++#line 869 "perly.y" /* yacc.c:1646  */
+     { (yyval.opval) = newANONHASH((OP*)NULL); }
++
+     break;
+ 
+   case 159:
+-#line 859 "perly.y"
++#line 871 "perly.y" /* yacc.c:1646  */
+     { SvREFCNT_inc_simple_void(PL_compcv);
+-			  (yyval.opval) = newANONATTRSUB((ps[(2) - (5)].val.ival), (ps[(3) - (5)].val.opval), (ps[(4) - (5)].val.opval), (ps[(5) - (5)].val.opval)); }
++			  (yyval.opval) = newANONATTRSUB((ps[-3].val.ival), (ps[-2].val.opval), (ps[-1].val.opval), (ps[0].val.opval)); }
++
+     break;
+ 
+   case 160:
+-#line 862 "perly.y"
++#line 874 "perly.y" /* yacc.c:1646  */
+     {
+ 			  OP *body;
+-			  if (parser->copline > (line_t)(ps[(6) - (8)].val.ival))
+-			      parser->copline = (line_t)(ps[(6) - (8)].val.ival);
+-			  body = block_end((ps[(3) - (8)].val.ival),
+-				op_append_list(OP_LINESEQ, (ps[(4) - (8)].val.opval), (ps[(7) - (8)].val.opval)));
++			  if (parser->copline > (line_t)(ps[-2].val.ival))
++			      parser->copline = (line_t)(ps[-2].val.ival);
++			  body = block_end((ps[-5].val.ival),
++				op_append_list(OP_LINESEQ, (ps[-4].val.opval), (ps[-1].val.opval)));
+ 			  SvREFCNT_inc_simple_void(PL_compcv);
+-			  (yyval.opval) = newANONATTRSUB((ps[(2) - (8)].val.ival), NULL, (ps[(5) - (8)].val.opval), body);
++			  (yyval.opval) = newANONATTRSUB((ps[-6].val.ival), NULL, (ps[-3].val.opval), body);
+ 			}
++
+     break;
+ 
+   case 161:
+-#line 876 "perly.y"
+-    { (yyval.opval) = dofile((ps[(2) - (2)].val.opval), (ps[(1) - (2)].val.ival));}
++#line 888 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = dofile((ps[0].val.opval), (ps[-1].val.ival));}
++
+     break;
+ 
+   case 162:
+-#line 878 "perly.y"
+-    { (yyval.opval) = newUNOP(OP_NULL, OPf_SPECIAL, op_scope((ps[(2) - (2)].val.opval)));}
++#line 890 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = newUNOP(OP_NULL, OPf_SPECIAL, op_scope((ps[0].val.opval)));}
++
+     break;
+ 
+   case 167:
+-#line 886 "perly.y"
+-    { (yyval.opval) = newCONDOP(0, (ps[(1) - (5)].val.opval), (ps[(3) - (5)].val.opval), (ps[(5) - (5)].val.opval)); }
++#line 898 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = newCONDOP(0, (ps[-4].val.opval), (ps[-2].val.opval), (ps[0].val.opval)); }
++
+     break;
+ 
+   case 168:
+-#line 888 "perly.y"
+-    { (yyval.opval) = newUNOP(OP_REFGEN, 0, (ps[(2) - (2)].val.opval)); }
++#line 900 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = newUNOP(OP_REFGEN, 0, (ps[0].val.opval)); }
++
+     break;
+ 
+   case 169:
+-#line 890 "perly.y"
+-    { (yyval.opval) = (ps[(1) - (1)].val.opval); }
++#line 902 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = (ps[0].val.opval); }
++
+     break;
+ 
+   case 170:
+-#line 892 "perly.y"
+-    { (yyval.opval) = localize((ps[(2) - (2)].val.opval),(ps[(1) - (2)].val.ival)); }
++#line 904 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = localize((ps[0].val.opval),(ps[-1].val.ival)); }
++
+     break;
+ 
+   case 171:
+-#line 894 "perly.y"
+-    { (yyval.opval) = sawparens((ps[(2) - (3)].val.opval)); }
++#line 906 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = sawparens((ps[-1].val.opval)); }
++
+     break;
+ 
+   case 172:
+-#line 896 "perly.y"
+-    { (yyval.opval) = (ps[(1) - (1)].val.opval); }
++#line 908 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = (ps[0].val.opval); }
++
+     break;
+ 
+   case 173:
+-#line 898 "perly.y"
++#line 910 "perly.y" /* yacc.c:1646  */
+     { (yyval.opval) = sawparens(newNULLLIST()); }
++
+     break;
+ 
+   case 174:
+-#line 900 "perly.y"
+-    { (yyval.opval) = (ps[(1) - (1)].val.opval); }
++#line 912 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = (ps[0].val.opval); }
++
+     break;
+ 
+   case 175:
+-#line 902 "perly.y"
+-    { (yyval.opval) = (ps[(1) - (1)].val.opval); }
++#line 914 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = (ps[0].val.opval); }
++
+     break;
+ 
+   case 176:
+-#line 904 "perly.y"
+-    { (yyval.opval) = (ps[(1) - (1)].val.opval); }
++#line 916 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = (ps[0].val.opval); }
++
+     break;
+ 
+   case 177:
+-#line 906 "perly.y"
+-    { (yyval.opval) = (ps[(1) - (1)].val.opval); }
++#line 918 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = (ps[0].val.opval); }
++
+     break;
+ 
+   case 178:
+-#line 908 "perly.y"
+-    { (yyval.opval) = newUNOP(OP_AV2ARYLEN, 0, ref((ps[(1) - (1)].val.opval), OP_AV2ARYLEN));}
++#line 920 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = newUNOP(OP_AV2ARYLEN, 0, ref((ps[0].val.opval), OP_AV2ARYLEN));}
++
+     break;
+ 
+   case 179:
+-#line 910 "perly.y"
+-    { (yyval.opval) = (ps[(1) - (1)].val.opval); }
++#line 922 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = (ps[0].val.opval); }
++
+     break;
+ 
+   case 180:
+-#line 912 "perly.y"
++#line 924 "perly.y" /* yacc.c:1646  */
+     { (yyval.opval) = op_prepend_elem(OP_ASLICE,
+ 				newOP(OP_PUSHMARK, 0),
+ 				    newLISTOP(OP_ASLICE, 0,
+-					list((ps[(3) - (4)].val.opval)),
+-					ref((ps[(1) - (4)].val.opval), OP_ASLICE)));
+-			  if ((yyval.opval) && (ps[(1) - (4)].val.opval))
++					list((ps[-1].val.opval)),
++					ref((ps[-3].val.opval), OP_ASLICE)));
++			  if ((yyval.opval) && (ps[-3].val.opval))
+ 			      (yyval.opval)->op_private |=
+-				  (ps[(1) - (4)].val.opval)->op_private & OPpSLICEWARNING;
++				  (ps[-3].val.opval)->op_private & OPpSLICEWARNING;
+ 			}
++
+     break;
+ 
+   case 181:
+-#line 922 "perly.y"
++#line 934 "perly.y" /* yacc.c:1646  */
+     { (yyval.opval) = op_prepend_elem(OP_KVASLICE,
+ 				newOP(OP_PUSHMARK, 0),
+ 				    newLISTOP(OP_KVASLICE, 0,
+-					list((ps[(3) - (4)].val.opval)),
+-					ref(oopsAV((ps[(1) - (4)].val.opval)), OP_KVASLICE)));
+-			  if ((yyval.opval) && (ps[(1) - (4)].val.opval))
++					list((ps[-1].val.opval)),
++					ref(oopsAV((ps[-3].val.opval)), OP_KVASLICE)));
++			  if ((yyval.opval) && (ps[-3].val.opval))
+ 			      (yyval.opval)->op_private |=
+-				  (ps[(1) - (4)].val.opval)->op_private & OPpSLICEWARNING;
++				  (ps[-3].val.opval)->op_private & OPpSLICEWARNING;
+ 			}
++
+     break;
+ 
+   case 182:
+-#line 932 "perly.y"
++#line 944 "perly.y" /* yacc.c:1646  */
+     { (yyval.opval) = op_prepend_elem(OP_HSLICE,
+ 				newOP(OP_PUSHMARK, 0),
+ 				    newLISTOP(OP_HSLICE, 0,
+-					list((ps[(3) - (5)].val.opval)),
+-					ref(oopsHV((ps[(1) - (5)].val.opval)), OP_HSLICE)));
+-			  if ((yyval.opval) && (ps[(1) - (5)].val.opval))
++					list((ps[-2].val.opval)),
++					ref(oopsHV((ps[-4].val.opval)), OP_HSLICE)));
++			  if ((yyval.opval) && (ps[-4].val.opval))
+ 			      (yyval.opval)->op_private |=
+-				  (ps[(1) - (5)].val.opval)->op_private & OPpSLICEWARNING;
++				  (ps[-4].val.opval)->op_private & OPpSLICEWARNING;
+ 			}
++
+     break;
+ 
+   case 183:
+-#line 942 "perly.y"
++#line 954 "perly.y" /* yacc.c:1646  */
+     { (yyval.opval) = op_prepend_elem(OP_KVHSLICE,
+ 				newOP(OP_PUSHMARK, 0),
+ 				    newLISTOP(OP_KVHSLICE, 0,
+-					list((ps[(3) - (5)].val.opval)),
+-					ref((ps[(1) - (5)].val.opval), OP_KVHSLICE)));
+-			  if ((yyval.opval) && (ps[(1) - (5)].val.opval))
++					list((ps[-2].val.opval)),
++					ref((ps[-4].val.opval), OP_KVHSLICE)));
++			  if ((yyval.opval) && (ps[-4].val.opval))
+ 			      (yyval.opval)->op_private |=
+-				  (ps[(1) - (5)].val.opval)->op_private & OPpSLICEWARNING;
++				  (ps[-4].val.opval)->op_private & OPpSLICEWARNING;
+ 			}
++
+     break;
+ 
+   case 184:
+-#line 952 "perly.y"
+-    { (yyval.opval) = (ps[(1) - (1)].val.opval); }
++#line 964 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = (ps[0].val.opval); }
++
+     break;
+ 
+   case 185:
+-#line 954 "perly.y"
+-    { (yyval.opval) = newUNOP(OP_ENTERSUB, 0, scalar((ps[(1) - (1)].val.opval))); }
++#line 966 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = newUNOP(OP_ENTERSUB, 0, scalar((ps[0].val.opval))); }
++
+     break;
+ 
+   case 186:
+-#line 956 "perly.y"
+-    { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[(1) - (3)].val.opval)));
++#line 968 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[-2].val.opval)));
+ 			}
++
+     break;
+ 
+   case 187:
+-#line 959 "perly.y"
++#line 971 "perly.y" /* yacc.c:1646  */
+     {
+ 			  (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
+-				op_append_elem(OP_LIST, (ps[(3) - (4)].val.opval), scalar((ps[(1) - (4)].val.opval))));
++				op_append_elem(OP_LIST, (ps[-1].val.opval), scalar((ps[-3].val.opval))));
+ 			}
++
+     break;
+ 
+   case 188:
+-#line 964 "perly.y"
++#line 976 "perly.y" /* yacc.c:1646  */
+     { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
+-			    op_append_elem(OP_LIST, (ps[(3) - (3)].val.opval), scalar((ps[(2) - (3)].val.opval))));
++			    op_append_elem(OP_LIST, (ps[0].val.opval), scalar((ps[-1].val.opval))));
+ 			}
++
+     break;
+ 
+   case 189:
+-#line 968 "perly.y"
+-    { (yyval.opval) = newSVREF((ps[(1) - (4)].val.opval)); }
++#line 980 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = newSVREF((ps[-3].val.opval)); }
++
+     break;
+ 
+   case 190:
+-#line 970 "perly.y"
+-    { (yyval.opval) = newAVREF((ps[(1) - (4)].val.opval)); }
++#line 982 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = newAVREF((ps[-3].val.opval)); }
++
+     break;
+ 
+   case 191:
+-#line 972 "perly.y"
+-    { (yyval.opval) = newHVREF((ps[(1) - (4)].val.opval)); }
++#line 984 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = newHVREF((ps[-3].val.opval)); }
++
+     break;
+ 
+   case 192:
+-#line 974 "perly.y"
++#line 986 "perly.y" /* yacc.c:1646  */
+     { (yyval.opval) = newUNOP(OP_ENTERSUB, 0,
+-				       scalar(newCVREF((ps[(3) - (4)].val.ival),(ps[(1) - (4)].val.opval)))); }
++				       scalar(newCVREF((ps[-1].val.ival),(ps[-3].val.opval)))); }
++
+     break;
+ 
+   case 193:
+-#line 977 "perly.y"
+-    { (yyval.opval) = newGVREF(0,(ps[(1) - (4)].val.opval)); }
++#line 989 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = newGVREF(0,(ps[-3].val.opval)); }
++
+     break;
+ 
+   case 194:
+-#line 979 "perly.y"
+-    { (yyval.opval) = newOP((ps[(1) - (1)].val.ival), OPf_SPECIAL);
++#line 991 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = newOP((ps[0].val.ival), OPf_SPECIAL);
+ 			    PL_hints |= HINT_BLOCK_SCOPE; }
++
+     break;
+ 
+   case 195:
+-#line 982 "perly.y"
+-    { (yyval.opval) = newLOOPEX((ps[(1) - (2)].val.ival),(ps[(2) - (2)].val.opval)); }
++#line 994 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = newLOOPEX((ps[-1].val.ival),(ps[0].val.opval)); }
++
+     break;
+ 
+   case 196:
+-#line 984 "perly.y"
+-    { (yyval.opval) = newUNOP(OP_NOT, 0, scalar((ps[(2) - (2)].val.opval))); }
++#line 996 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = newUNOP(OP_NOT, 0, scalar((ps[0].val.opval))); }
++
+     break;
+ 
+   case 197:
+-#line 986 "perly.y"
+-    { (yyval.opval) = newOP((ps[(1) - (1)].val.ival), 0); }
++#line 998 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = newOP((ps[0].val.ival), 0); }
++
+     break;
+ 
+   case 198:
+-#line 988 "perly.y"
+-    { (yyval.opval) = newUNOP((ps[(1) - (2)].val.ival), 0, (ps[(2) - (2)].val.opval)); }
++#line 1000 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = newUNOP((ps[-1].val.ival), 0, (ps[0].val.opval)); }
++
+     break;
+ 
+   case 199:
+-#line 990 "perly.y"
+-    { (yyval.opval) = newUNOP((ps[(1) - (2)].val.ival), 0, (ps[(2) - (2)].val.opval)); }
++#line 1002 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = newUNOP((ps[-1].val.ival), 0, (ps[0].val.opval)); }
++
+     break;
+ 
+   case 200:
+-#line 992 "perly.y"
+-    { (yyval.opval) = newOP(OP_REQUIRE, (ps[(1) - (1)].val.ival) ? OPf_SPECIAL : 0); }
++#line 1004 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = newOP(OP_REQUIRE, (ps[0].val.ival) ? OPf_SPECIAL : 0); }
++
+     break;
+ 
+   case 201:
+-#line 994 "perly.y"
+-    { (yyval.opval) = newUNOP(OP_REQUIRE, (ps[(1) - (2)].val.ival) ? OPf_SPECIAL : 0, (ps[(2) - (2)].val.opval)); }
++#line 1006 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = newUNOP(OP_REQUIRE, (ps[-1].val.ival) ? OPf_SPECIAL : 0, (ps[0].val.opval)); }
++
+     break;
+ 
+   case 202:
+-#line 996 "perly.y"
+-    { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[(1) - (1)].val.opval))); }
++#line 1008 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[0].val.opval))); }
++
+     break;
+ 
+   case 203:
+-#line 998 "perly.y"
++#line 1010 "perly.y" /* yacc.c:1646  */
+     { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
+-			    op_append_elem(OP_LIST, (ps[(2) - (2)].val.opval), scalar((ps[(1) - (2)].val.opval)))); }
++			    op_append_elem(OP_LIST, (ps[0].val.opval), scalar((ps[-1].val.opval)))); }
++
+     break;
+ 
+   case 204:
+-#line 1001 "perly.y"
+-    { (yyval.opval) = newOP((ps[(1) - (1)].val.ival), 0); }
++#line 1013 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = newOP((ps[0].val.ival), 0); }
++
+     break;
+ 
+   case 205:
+-#line 1003 "perly.y"
+-    { (yyval.opval) = newOP((ps[(1) - (3)].val.ival), 0);}
++#line 1015 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = newOP((ps[-2].val.ival), 0);}
++
+     break;
+ 
+   case 206:
+-#line 1005 "perly.y"
+-    { (yyval.opval) = (ps[(1) - (1)].val.opval); }
++#line 1017 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = (ps[0].val.opval); }
++
+     break;
+ 
+   case 207:
+-#line 1007 "perly.y"
+-    { (yyval.opval) = (ps[(1) - (3)].val.opval); }
++#line 1019 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = (ps[-2].val.opval); }
++
+     break;
+ 
+   case 208:
+-#line 1009 "perly.y"
+-    { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[(1) - (1)].val.opval))); }
++#line 1021 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[0].val.opval))); }
++
+     break;
+ 
+   case 209:
+-#line 1011 "perly.y"
+-    { (yyval.opval) = ((ps[(1) - (3)].val.ival) == OP_NOT)
+-                          ? newUNOP((ps[(1) - (3)].val.ival), 0, newSVOP(OP_CONST, 0, newSViv(0)))
+-                          : newOP((ps[(1) - (3)].val.ival), OPf_SPECIAL); }
++#line 1023 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = ((ps[-2].val.ival) == OP_NOT)
++                          ? newUNOP((ps[-2].val.ival), 0, newSVOP(OP_CONST, 0, newSViv(0)))
++                          : newOP((ps[-2].val.ival), OPf_SPECIAL); }
++
+     break;
+ 
+   case 210:
+-#line 1015 "perly.y"
+-    { (yyval.opval) = newUNOP((ps[(1) - (4)].val.ival), 0, (ps[(3) - (4)].val.opval)); }
++#line 1027 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = newUNOP((ps[-3].val.ival), 0, (ps[-1].val.opval)); }
++
+     break;
+ 
+   case 211:
+-#line 1017 "perly.y"
++#line 1029 "perly.y" /* yacc.c:1646  */
+     {
+-			    if (   (ps[(1) - (1)].val.opval)->op_type != OP_TRANS
+-			        && (ps[(1) - (1)].val.opval)->op_type != OP_TRANSR
+-				&& (((PMOP*)(ps[(1) - (1)].val.opval))->op_pmflags & PMf_HAS_CV))
++			    if (   (ps[0].val.opval)->op_type != OP_TRANS
++			        && (ps[0].val.opval)->op_type != OP_TRANSR
++				&& (((PMOP*)(ps[0].val.opval))->op_pmflags & PMf_HAS_CV))
+ 			    {
+ 				(yyval.ival) = start_subparse(FALSE, CVf_ANON);
+ 				SAVEFREESV(PL_compcv);
+ 			    } else
+ 				(yyval.ival) = 0;
+ 			}
++
+     break;
+ 
+   case 212:
+-#line 1028 "perly.y"
+-    { (yyval.opval) = pmruntime((ps[(1) - (6)].val.opval), (ps[(4) - (6)].val.opval), (ps[(5) - (6)].val.opval), 1, (ps[(2) - (6)].val.ival)); }
++#line 1040 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = pmruntime((ps[-5].val.opval), (ps[-2].val.opval), (ps[-1].val.opval), 1, (ps[-4].val.ival)); }
++
+     break;
+ 
+   case 215:
+-#line 1032 "perly.y"
++#line 1044 "perly.y" /* yacc.c:1646  */
+     {
+ 			  (yyval.opval) = newLISTOP(OP_DIE, 0, newOP(OP_PUSHMARK, 0),
+ 				newSVOP(OP_CONST, 0, newSVpvs("Unimplemented")));
+ 			}
++
+     break;
+ 
+   case 217:
+-#line 1041 "perly.y"
+-    { (yyval.opval) = my_attrs((ps[(2) - (3)].val.opval),(ps[(3) - (3)].val.opval)); }
++#line 1053 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = my_attrs((ps[-1].val.opval),(ps[0].val.opval)); }
++
+     break;
+ 
+   case 218:
+-#line 1043 "perly.y"
+-    { (yyval.opval) = localize((ps[(2) - (2)].val.opval),(ps[(1) - (2)].val.ival)); }
++#line 1055 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = localize((ps[0].val.opval),(ps[-1].val.ival)); }
++
+     break;
+ 
+   case 219:
+-#line 1048 "perly.y"
+-    { (yyval.opval) = sawparens((ps[(2) - (3)].val.opval)); }
++#line 1060 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = sawparens((ps[-1].val.opval)); }
++
+     break;
+ 
+   case 220:
+-#line 1050 "perly.y"
++#line 1062 "perly.y" /* yacc.c:1646  */
+     { (yyval.opval) = sawparens(newNULLLIST()); }
++
+     break;
+ 
+   case 221:
+-#line 1053 "perly.y"
+-    { (yyval.opval) = (ps[(1) - (1)].val.opval); }
++#line 1065 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = (ps[0].val.opval); }
++
+     break;
+ 
+   case 222:
+-#line 1055 "perly.y"
+-    { (yyval.opval) = (ps[(1) - (1)].val.opval); }
++#line 1067 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = (ps[0].val.opval); }
++
+     break;
+ 
+   case 223:
+-#line 1057 "perly.y"
+-    { (yyval.opval) = (ps[(1) - (1)].val.opval); }
++#line 1069 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = (ps[0].val.opval); }
++
+     break;
+ 
+   case 224:
+-#line 1062 "perly.y"
++#line 1074 "perly.y" /* yacc.c:1646  */
+     { (yyval.opval) = (OP*)NULL; }
++
+     break;
+ 
+   case 225:
+-#line 1064 "perly.y"
+-    { (yyval.opval) = (ps[(1) - (1)].val.opval); }
++#line 1076 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = (ps[0].val.opval); }
++
+     break;
+ 
+   case 226:
+-#line 1068 "perly.y"
++#line 1080 "perly.y" /* yacc.c:1646  */
+     { (yyval.opval) = (OP*)NULL; }
++
+     break;
+ 
+   case 227:
+-#line 1070 "perly.y"
+-    { (yyval.opval) = (ps[(1) - (1)].val.opval); }
++#line 1082 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = (ps[0].val.opval); }
++
+     break;
+ 
+   case 228:
+-#line 1074 "perly.y"
++#line 1086 "perly.y" /* yacc.c:1646  */
+     { (yyval.opval) = (OP*)NULL; }
++
+     break;
+ 
+   case 229:
+-#line 1076 "perly.y"
+-    { (yyval.opval) = (ps[(2) - (2)].val.opval); }
++#line 1088 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = (ps[0].val.opval); }
++
+     break;
+ 
+   case 230:
+-#line 1082 "perly.y"
+-    { parser->in_my = 0; (yyval.opval) = my((ps[(1) - (1)].val.opval)); }
++#line 1094 "perly.y" /* yacc.c:1646  */
++    { parser->in_my = 0; (yyval.opval) = my((ps[0].val.opval)); }
++
+     break;
+ 
+   case 236:
+-#line 1095 "perly.y"
+-    { (yyval.opval) = newCVREF((ps[(1) - (2)].val.ival),(ps[(2) - (2)].val.opval)); }
++#line 1107 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = newCVREF((ps[-1].val.ival),(ps[0].val.opval)); }
++
+     break;
+ 
+   case 237:
+-#line 1099 "perly.y"
+-    { (yyval.opval) = newSVREF((ps[(2) - (2)].val.opval)); }
++#line 1111 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = newSVREF((ps[0].val.opval)); }
++
+     break;
+ 
+   case 238:
+-#line 1103 "perly.y"
+-    { (yyval.opval) = newAVREF((ps[(2) - (2)].val.opval));
+-			  if ((yyval.opval)) (yyval.opval)->op_private |= (ps[(1) - (2)].val.ival);
++#line 1115 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = newAVREF((ps[0].val.opval));
++			  if ((yyval.opval)) (yyval.opval)->op_private |= (ps[-1].val.ival);
+ 			}
++
+     break;
+ 
+   case 239:
+-#line 1109 "perly.y"
+-    { (yyval.opval) = newHVREF((ps[(2) - (2)].val.opval));
+-			  if ((yyval.opval)) (yyval.opval)->op_private |= (ps[(1) - (2)].val.ival);
++#line 1121 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = newHVREF((ps[0].val.opval));
++			  if ((yyval.opval)) (yyval.opval)->op_private |= (ps[-1].val.ival);
+ 			}
++
+     break;
+ 
+   case 240:
+-#line 1115 "perly.y"
+-    { (yyval.opval) = newAVREF((ps[(2) - (2)].val.opval)); }
++#line 1127 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = newAVREF((ps[0].val.opval)); }
++
+     break;
+ 
+   case 241:
+-#line 1117 "perly.y"
+-    { (yyval.opval) = newAVREF((ps[(1) - (4)].val.opval)); }
++#line 1129 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = newAVREF((ps[-3].val.opval)); }
++
+     break;
+ 
+   case 242:
+-#line 1121 "perly.y"
+-    { (yyval.opval) = newGVREF(0,(ps[(2) - (2)].val.opval)); }
++#line 1133 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = newGVREF(0,(ps[0].val.opval)); }
++
+     break;
+ 
+   case 244:
+-#line 1126 "perly.y"
+-    { (yyval.opval) = newAVREF((ps[(1) - (3)].val.opval)); }
++#line 1138 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = newAVREF((ps[-2].val.opval)); }
++
+     break;
+ 
+   case 246:
+-#line 1131 "perly.y"
+-    { (yyval.opval) = newHVREF((ps[(1) - (3)].val.opval)); }
++#line 1143 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = newHVREF((ps[-2].val.opval)); }
++
+     break;
+ 
+   case 248:
+-#line 1136 "perly.y"
+-    { (yyval.opval) = newGVREF(0,(ps[(1) - (3)].val.opval)); }
++#line 1148 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = newGVREF(0,(ps[-2].val.opval)); }
++
+     break;
+ 
+   case 249:
+-#line 1141 "perly.y"
+-    { (yyval.opval) = scalar((ps[(1) - (1)].val.opval)); }
++#line 1153 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = scalar((ps[0].val.opval)); }
++
+     break;
+ 
+   case 250:
+-#line 1143 "perly.y"
+-    { (yyval.opval) = scalar((ps[(1) - (1)].val.opval)); }
++#line 1155 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = scalar((ps[0].val.opval)); }
++
+     break;
+ 
+   case 251:
+-#line 1145 "perly.y"
+-    { (yyval.opval) = op_scope((ps[(1) - (1)].val.opval)); }
++#line 1157 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = op_scope((ps[0].val.opval)); }
++
+     break;
+ 
+   case 252:
+-#line 1148 "perly.y"
+-    { (yyval.opval) = (ps[(1) - (1)].val.opval); }
++#line 1160 "perly.y" /* yacc.c:1646  */
++    { (yyval.opval) = (ps[0].val.opval); }
++
+     break;
+ 
++
++
+       default: break;
+     
+ 
+ /* Generated from:
+- * 703ebd267cf8ca45f9dee9bc0f4b21511117a0c1dca1c8bc9438ce91950217ae perly.y
++ * 4fd37fdbff6285ba6e9096c2229255ecc6264d2f26835e535cf1c38f387ceae6 perly.y
+  * a4923588f219644801577c514014847e1e5240f49413fa3b89d3306fa4874d07 regen_perly.pl
+  * ex: set ro: */
+diff --git a/perly.h b/perly.h
+index acbdaae..4ecd16e 100644
+--- a/perly.h
++++ b/perly.h
+@@ -1,28 +1,28 @@
+ /* -*- buffer-read-only: t -*-
+    !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!!
+-   This file is built by regen_perly.pl from perly.y.
++   This file is built by ./regen_perly.pl from perly.y.
+    Any changes made here will be lost!
+  */
+ 
+-#define PERL_BISON_VERSION  20007
++#define PERL_BISON_VERSION  30000
+ 
+ #ifdef PERL_CORE
+-/* A Bison parser, made by GNU Bison 2.7.  */
++/* A Bison parser, made by GNU Bison 3.0.4.  */
+ 
+ /* Bison interface for Yacc-like parsers in C
+-   
+-      Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc.
+-   
++
++   Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc.
++
+    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/>.  */
+ 
+@@ -35,11 +35,11 @@
+    special exception, which will cause the skeleton and the resulting
+    Bison output files to be licensed under the GNU General Public
+    License without this special exception.
+-   
++
+    This special exception was added by the Free Software Foundation in
+    version 2.2 of Bison.  */
+ 
+-/* Enabling traces.  */
++/* Debug traces.  */
+ #ifndef YYDEBUG
+ # define YYDEBUG 0
+ #endif
+@@ -47,178 +47,95 @@
+ extern int yydebug;
+ #endif
+ 
+-/* Tokens.  */
++/* Token type.  */
+ #ifndef YYTOKENTYPE
+ # define YYTOKENTYPE
+-   /* Put the tokens into the symbol table, so that GDB and other debuggers
+-      know about them.  */
+-   enum yytokentype {
+-     GRAMPROG = 258,
+-     GRAMEXPR = 259,
+-     GRAMBLOCK = 260,
+-     GRAMBARESTMT = 261,
+-     GRAMFULLSTMT = 262,
+-     GRAMSTMTSEQ = 263,
+-     WORD = 264,
+-     METHOD = 265,
+-     FUNCMETH = 266,
+-     THING = 267,
+-     PMFUNC = 268,
+-     PRIVATEREF = 269,
+-     QWLIST = 270,
+-     FUNC0OP = 271,
+-     FUNC0SUB = 272,
+-     UNIOPSUB = 273,
+-     LSTOPSUB = 274,
+-     PLUGEXPR = 275,
+-     PLUGSTMT = 276,
+-     LABEL = 277,
+-     FORMAT = 278,
+-     SUB = 279,
+-     ANONSUB = 280,
+-     PACKAGE = 281,
+-     USE = 282,
+-     WHILE = 283,
+-     UNTIL = 284,
+-     IF = 285,
+-     UNLESS = 286,
+-     ELSE = 287,
+-     ELSIF = 288,
+-     CONTINUE = 289,
+-     FOR = 290,
+-     GIVEN = 291,
+-     WHEN = 292,
+-     DEFAULT = 293,
+-     LOOPEX = 294,
+-     DOTDOT = 295,
+-     YADAYADA = 296,
+-     FUNC0 = 297,
+-     FUNC1 = 298,
+-     FUNC = 299,
+-     UNIOP = 300,
+-     LSTOP = 301,
+-     RELOP = 302,
+-     EQOP = 303,
+-     MULOP = 304,
+-     ADDOP = 305,
+-     DOLSHARP = 306,
+-     DO = 307,
+-     HASHBRACK = 308,
+-     NOAMP = 309,
+-     LOCAL = 310,
+-     MY = 311,
+-     REQUIRE = 312,
+-     COLONATTR = 313,
+-     FORMLBRACK = 314,
+-     FORMRBRACK = 315,
+-     PREC_LOW = 316,
+-     DOROP = 317,
+-     OROP = 318,
+-     ANDOP = 319,
+-     NOTOP = 320,
+-     ASSIGNOP = 321,
+-     DORDOR = 322,
+-     OROR = 323,
+-     ANDAND = 324,
+-     BITOROP = 325,
+-     BITANDOP = 326,
+-     SHIFTOP = 327,
+-     MATCHOP = 328,
+-     REFGEN = 329,
+-     UMINUS = 330,
+-     POWOP = 331,
+-     POSTJOIN = 332,
+-     POSTDEC = 333,
+-     POSTINC = 334,
+-     PREDEC = 335,
+-     PREINC = 336,
+-     ARROW = 337
+-   };
++  enum yytokentype
++  {
++    GRAMPROG = 258,
++    GRAMEXPR = 259,
++    GRAMBLOCK = 260,
++    GRAMBARESTMT = 261,
++    GRAMFULLSTMT = 262,
++    GRAMSTMTSEQ = 263,
++    WORD = 264,
++    METHOD = 265,
++    FUNCMETH = 266,
++    THING = 267,
++    PMFUNC = 268,
++    PRIVATEREF = 269,
++    QWLIST = 270,
++    FUNC0OP = 271,
++    FUNC0SUB = 272,
++    UNIOPSUB = 273,
++    LSTOPSUB = 274,
++    PLUGEXPR = 275,
++    PLUGSTMT = 276,
++    LABEL = 277,
++    FORMAT = 278,
++    SUB = 279,
++    ANONSUB = 280,
++    PACKAGE = 281,
++    USE = 282,
++    WHILE = 283,
++    UNTIL = 284,
++    IF = 285,
++    UNLESS = 286,
++    ELSE = 287,
++    ELSIF = 288,
++    CONTINUE = 289,
++    FOR = 290,
++    GIVEN = 291,
++    WHEN = 292,
++    DEFAULT = 293,
++    LOOPEX = 294,
++    DOTDOT = 295,
++    YADAYADA = 296,
++    FUNC0 = 297,
++    FUNC1 = 298,
++    FUNC = 299,
++    UNIOP = 300,
++    LSTOP = 301,
++    RELOP = 302,
++    EQOP = 303,
++    MULOP = 304,
++    ADDOP = 305,
++    DOLSHARP = 306,
++    DO = 307,
++    HASHBRACK = 308,
++    NOAMP = 309,
++    LOCAL = 310,
++    MY = 311,
++    REQUIRE = 312,
++    COLONATTR = 313,
++    FORMLBRACK = 314,
++    FORMRBRACK = 315,
++    PREC_LOW = 316,
++    OROP = 317,
++    DOROP = 318,
++    ANDOP = 319,
++    NOTOP = 320,
++    ASSIGNOP = 321,
++    OROR = 322,
++    DORDOR = 323,
++    ANDAND = 324,
++    BITOROP = 325,
++    BITANDOP = 326,
++    SHIFTOP = 327,
++    MATCHOP = 328,
++    UMINUS = 329,
++    REFGEN = 330,
++    POWOP = 331,
++    PREINC = 332,
++    PREDEC = 333,
++    POSTINC = 334,
++    POSTDEC = 335,
++    POSTJOIN = 336,
++    ARROW = 337
++  };
+ #endif
+ 
+-/* Tokens.  */
+-#define GRAMPROG 258
+-#define GRAMEXPR 259
+-#define GRAMBLOCK 260
+-#define GRAMBARESTMT 261
+-#define GRAMFULLSTMT 262
+-#define GRAMSTMTSEQ 263
+-#define WORD 264
+-#define METHOD 265
+-#define FUNCMETH 266
+-#define THING 267
+-#define PMFUNC 268
+-#define PRIVATEREF 269
+-#define QWLIST 270
+-#define FUNC0OP 271
+-#define FUNC0SUB 272
+-#define UNIOPSUB 273
+-#define LSTOPSUB 274
+-#define PLUGEXPR 275
+-#define PLUGSTMT 276
+-#define LABEL 277
+-#define FORMAT 278
+-#define SUB 279
+-#define ANONSUB 280
+-#define PACKAGE 281
+-#define USE 282
+-#define WHILE 283
+-#define UNTIL 284
+-#define IF 285
+-#define UNLESS 286
+-#define ELSE 287
+-#define ELSIF 288
+-#define CONTINUE 289
+-#define FOR 290
+-#define GIVEN 291
+-#define WHEN 292
+-#define DEFAULT 293
+-#define LOOPEX 294
+-#define DOTDOT 295
+-#define YADAYADA 296
+-#define FUNC0 297
+-#define FUNC1 298
+-#define FUNC 299
+-#define UNIOP 300
+-#define LSTOP 301
+-#define RELOP 302
+-#define EQOP 303
+-#define MULOP 304
+-#define ADDOP 305
+-#define DOLSHARP 306
+-#define DO 307
+-#define HASHBRACK 308
+-#define NOAMP 309
+-#define LOCAL 310
+-#define MY 311
+-#define REQUIRE 312
+-#define COLONATTR 313
+-#define FORMLBRACK 314
+-#define FORMRBRACK 315
+-#define PREC_LOW 316
+-#define DOROP 317
+-#define OROP 318
+-#define ANDOP 319
+-#define NOTOP 320
+-#define ASSIGNOP 321
+-#define DORDOR 322
+-#define OROR 323
+-#define ANDAND 324
+-#define BITOROP 325
+-#define BITANDOP 326
+-#define SHIFTOP 327
+-#define MATCHOP 328
+-#define REFGEN 329
+-#define UMINUS 330
+-#define POWOP 331
+-#define POSTJOIN 332
+-#define POSTDEC 333
+-#define POSTINC 334
+-#define PREDEC 335
+-#define PREINC 336
+-#define ARROW 337
+-
+-
++/* Value type.  */
+ #ifdef PERL_IN_TOKE_C
+ static bool
+ S_is_opval_token(int type) {
+@@ -243,9 +160,9 @@ S_is_opval_token(int type) {
+ #endif /* PERL_IN_TOKE_C */
+ #endif /* PERL_CORE */
+ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+-typedef union YYSTYPE
++
++union YYSTYPE
+ {
+-/* Line 2058 of yacc.c  */
+ 
+     I32	ival; /* __DEFAULT__ (marker for regen_perly.pl;
+ 				must always be 1st union member) */
+@@ -253,31 +170,19 @@ typedef union YYSTYPE
+     OP *opval;
+     GV *gvval;
+ 
++};
+ 
+-/* Line 2058 of yacc.c  */
+-} YYSTYPE;
++typedef union YYSTYPE YYSTYPE;
+ # define YYSTYPE_IS_TRIVIAL 1
+-# define yystype YYSTYPE /* obsolescent; will be withdrawn */
+ # define YYSTYPE_IS_DECLARED 1
+ #endif
+ 
+ 
+-#ifdef YYPARSE_PARAM
+-#if defined __STDC__ || defined __cplusplus
+-int yyparse (void *YYPARSE_PARAM);
+-#else
+-int yyparse ();
+-#endif
+-#else /* ! YYPARSE_PARAM */
+-#if defined __STDC__ || defined __cplusplus
++
+ int yyparse (void);
+-#else
+-int yyparse ();
+-#endif
+-#endif /* ! YYPARSE_PARAM */
+ 
+ 
+ /* Generated from:
+- * 703ebd267cf8ca45f9dee9bc0f4b21511117a0c1dca1c8bc9438ce91950217ae perly.y
++ * 4fd37fdbff6285ba6e9096c2229255ecc6264d2f26835e535cf1c38f387ceae6 perly.y
+  * a4923588f219644801577c514014847e1e5240f49413fa3b89d3306fa4874d07 regen_perly.pl
+  * ex: set ro: */
+diff --git a/perly.tab b/perly.tab
+index f5a9580..ac88c85 100644
+--- a/perly.tab
++++ b/perly.tab
+@@ -1,12 +1,12 @@
+ /* -*- buffer-read-only: t -*-
+    !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!!
+-   This file is built by regen_perly.pl from perly.y.
++   This file is built by ./regen_perly.pl from perly.y.
+    Any changes made here will be lost!
+  */
+ 
+ #define YYFINAL  14
+ /* YYLAST -- Last index in YYTABLE.  */
+-#define YYLAST   2913
++#define YYLAST   2896
+ 
+ /* YYNTOKENS -- Number of terminals.  */
+ #define YYNTOKENS  105
+@@ -14,17 +14,19 @@
+ #define YYNNTS  77
+ /* YYNRULES -- Number of rules.  */
+ #define YYNRULES  252
+-/* YYNRULES -- Number of states.  */
++/* YYNSTATES -- Number of states.  */
+ #define YYNSTATES  508
+ 
+-/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
++/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
++   by yylex, with out-of-bounds checking.  */
+ #define YYUNDEFTOK  2
+ #define YYMAXUTOK   337
+ 
+-#define YYTRANSLATE(YYX)						\
++#define YYTRANSLATE(YYX)                                                \
+   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
+ 
+-/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
++/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
++   as returned by yylex, without out-of-bounds checking.  */
+ static const yytype_uint8 yytranslate[] =
+ {
+        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+@@ -64,133 +66,7 @@ static const yytype_uint8 yytranslate[] =
+ };
+ 
+ #if YYDEBUG
+-/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
+-   YYRHS.  */
+-static const yytype_uint16 yyprhs[] =
+-{
+-       0,     0,     3,     4,     9,    10,    14,    15,    19,    20,
+-      24,    25,    29,    30,    34,    39,    47,    48,    53,    54,
+-      55,    58,    59,    62,    64,    66,    69,    72,    74,    79,
+-      80,    88,    89,   100,   105,   106,   114,   122,   130,   137,
+-     144,   147,   156,   165,   166,   167,   181,   191,   200,   201,
+-     213,   223,   231,   234,   235,   244,   247,   249,   252,   253,
+-     257,   259,   261,   265,   269,   273,   277,   281,   285,   286,
+-     289,   296,   297,   300,   301,   302,   304,   305,   307,   309,
+-     311,   313,   315,   316,   317,   318,   319,   321,   323,   324,
+-     326,   327,   330,   332,   335,   337,   338,   342,   344,   346,
+-     350,   354,   358,   360,   363,   367,   369,   373,   379,   386,
+-     390,   394,   400,   403,   408,   409,   415,   417,   419,   425,
+-     430,   436,   441,   447,   454,   460,   465,   471,   476,   480,
+-     487,   492,   498,   502,   506,   510,   514,   518,   522,   526,
+-     530,   534,   538,   542,   546,   550,   554,   557,   560,   563,
+-     566,   569,   572,   575,   578,   581,   585,   588,   593,   597,
+-     603,   612,   615,   618,   620,   622,   624,   626,   632,   635,
+-     637,   640,   644,   646,   649,   651,   653,   655,   657,   659,
+-     661,   666,   671,   677,   683,   685,   687,   691,   696,   700,
+-     705,   710,   715,   720,   725,   727,   730,   733,   735,   738,
+-     741,   743,   746,   748,   751,   753,   757,   759,   763,   765,
+-     769,   774,   775,   782,   784,   786,   788,   790,   794,   797,
+-     801,   804,   806,   808,   810,   811,   813,   814,   816,   817,
+-     820,   822,   824,   826,   828,   830,   832,   835,   838,   841,
+-     844,   847,   852,   855,   857,   861,   863,   867,   869,   873,
+-     875,   877,   879
+-};
+-
+-/* YYRHS -- A `-1'-separated list of the rules' RHS.  */
+-static const yytype_int16 yyrhs[] =
+-{
+-     106,     0,    -1,    -1,     3,   107,   115,   118,    -1,    -1,
+-       4,   108,   167,    -1,    -1,     5,   109,   113,    -1,    -1,
+-       6,   110,   122,    -1,    -1,     7,   111,   120,    -1,    -1,
+-       8,   112,   118,    -1,     9,   115,   118,    10,    -1,    18,
+-     115,   101,    71,   119,   101,    19,    -1,    -1,     9,   117,
+-     118,    10,    -1,    -1,    -1,   118,   120,    -1,    -1,   119,
+-     130,    -1,   122,    -1,   121,    -1,    33,   122,    -1,    33,
+-     121,    -1,    32,    -1,    34,   144,   141,   114,    -1,    -1,
+-      35,   145,   142,   123,   146,   147,   151,    -1,    -1,    35,
+-     145,   142,   124,   115,   149,   147,     9,   118,    10,    -1,
+-      37,    20,    20,   101,    -1,    -1,    38,   142,   125,    20,
+-      20,   166,   101,    -1,    41,   100,   115,   139,    99,   116,
+-     133,    -1,    42,   100,   115,   139,    99,   116,   133,    -1,
+-      47,   100,   115,   139,    99,   116,    -1,    48,   100,   115,
+-     139,    99,   116,    -1,    49,   113,    -1,    39,   100,   115,
+-     137,    99,   135,   116,   134,    -1,    40,   100,   115,   138,
+-      99,   135,   116,   134,    -1,    -1,    -1,    46,   100,   115,
+-     140,   101,   126,   137,   101,   127,   135,   140,    99,   116,
+-      -1,    46,    67,   115,   169,   100,   139,    99,   116,   134,
+-      -1,    46,   173,   100,   115,   139,    99,   116,   134,    -1,
+-      -1,    46,    90,    67,   115,   170,   128,   100,   139,    99,
+-     116,   134,    -1,    46,    90,   171,   100,   115,   139,    99,
+-     116,   134,    -1,    46,   100,   115,   139,    99,   116,   134,
+-      -1,   113,   134,    -1,    -1,    37,    20,    20,     9,   115,
+-     129,   118,    10,    -1,   132,   101,    -1,   101,    -1,    23,
+-     131,    -1,    -1,    70,   118,    71,    -1,     1,    -1,   152,
+-      -1,   152,    41,   152,    -1,   152,    42,   152,    -1,   152,
+-      39,   152,    -1,   152,    40,   138,    -1,   152,    46,   152,
+-      -1,   152,    48,   152,    -1,    -1,    43,   116,    -1,    44,
+-     100,   139,    99,   116,   133,    -1,    -1,    45,   113,    -1,
+-      -1,    -1,   132,    -1,    -1,   152,    -1,   152,    -1,   152,
+-      -1,   136,    -1,    20,    -1,    -1,    -1,    -1,    -1,    20,
+-      -1,    25,    -1,    -1,    23,    -1,    -1,    69,    23,    -1,
+-      69,    -1,    69,    23,    -1,    69,    -1,    -1,   100,   150,
+-      99,    -1,   113,    -1,   101,    -1,   152,    75,   152,    -1,
+-     152,    74,   152,    -1,   152,    73,   152,    -1,   153,    -1,
+-     153,    77,    -1,   153,    77,   162,    -1,   162,    -1,    57,
+-     181,   153,    -1,    55,   100,   181,   152,    99,    -1,   162,
+-      98,   156,   100,   167,    99,    -1,   162,    98,   156,    -1,
+-      21,   181,   166,    -1,    22,   181,   100,   167,    99,    -1,
+-      57,   166,    -1,    55,   100,   167,    99,    -1,    -1,    30,
+-     143,   113,   155,   166,    -1,    21,    -1,   173,    -1,   180,
+-       9,   152,   101,    10,    -1,   173,    11,   152,    12,    -1,
+-     162,    98,    11,   152,    12,    -1,   157,    11,   152,    12,
+-      -1,   173,     9,   152,   101,    10,    -1,   162,    98,     9,
+-     152,   101,    10,    -1,   157,     9,   152,   101,    10,    -1,
+-     162,    98,   100,    99,    -1,   162,    98,   100,   152,    99,
+-      -1,   157,   100,   152,    99,    -1,   157,   100,    99,    -1,
+-     100,   152,    99,    11,   152,    12,    -1,    26,    11,   152,
+-      12,    -1,   100,    99,    11,   152,    12,    -1,   162,    78,
+-     162,    -1,   162,    92,   162,    -1,   162,    60,   162,    -1,
+-     162,    61,   162,    -1,   162,    86,   162,    -1,   162,    58,
+-     162,    -1,   162,    59,   162,    -1,   162,    85,   162,    -1,
+-     162,    84,   162,    -1,   162,    51,   162,    -1,   162,    83,
+-     162,    -1,   162,    82,   162,    -1,   162,    81,   162,    -1,
+-     162,    87,   162,    -1,    13,   162,    -1,    14,   162,    -1,
+-      88,   162,    -1,    89,   162,    -1,   162,    95,    -1,   162,
+-      94,    -1,   162,    93,    -1,    97,   162,    -1,    96,   162,
+-      -1,    11,   152,    12,    -1,    11,    12,    -1,    64,   152,
+-     101,    10,    -1,    64,   101,    10,    -1,    36,   143,   146,
+-     147,   113,    -1,    36,   143,   115,   149,   147,     9,   118,
+-      10,    -1,    63,   162,    -1,    63,   113,    -1,   158,    -1,
+-     159,    -1,   160,    -1,   161,    -1,   162,    79,   162,    80,
+-     162,    -1,    90,   162,    -1,   164,    -1,    66,   162,    -1,
+-     100,   152,    99,    -1,    26,    -1,   100,    99,    -1,   173,
+-      -1,   177,    -1,   175,    -1,   174,    -1,   176,    -1,   157,
+-      -1,   178,    11,   152,    12,    -1,   179,    11,   152,    12,
+-      -1,   178,     9,   152,   101,    10,    -1,   179,     9,   152,
+-     101,    10,    -1,    23,    -1,   172,    -1,   172,   100,    99,
+-      -1,   172,   100,   152,    99,    -1,    65,   145,   166,    -1,
+-     162,    98,   102,   103,    -1,   162,    98,    15,   103,    -1,
+-     162,    98,    16,   103,    -1,   162,    98,    17,   103,    -1,
+-     162,    98,   103,   103,    -1,    50,    -1,    50,   162,    -1,
+-      76,   153,    -1,    56,    -1,    56,   113,    -1,    56,   162,
+-      -1,    68,    -1,    68,   162,    -1,    29,    -1,    29,   162,
+-      -1,    53,    -1,    53,   100,    99,    -1,    27,    -1,    27,
+-     100,    99,    -1,    28,    -1,    54,   100,    99,    -1,    54,
+-     100,   152,    99,    -1,    -1,    24,   163,   100,   153,   168,
+-      99,    -1,    20,    -1,   154,    -1,    52,    -1,    31,    -1,
+-      67,   165,   148,    -1,    67,   165,    -1,   100,   152,    99,
+-      -1,   100,    99,    -1,   173,    -1,   175,    -1,   174,    -1,
+-      -1,   153,    -1,    -1,   152,    -1,    -1,   104,   152,    -1,
+-     173,    -1,   173,    -1,   174,    -1,   175,    -1,   170,    -1,
+-     172,    -1,    17,   181,    -1,   102,   181,    -1,    15,   181,
+-      -1,    16,   181,    -1,    62,   181,    -1,   162,    98,    62,
+-     103,    -1,   103,   181,    -1,   174,    -1,   162,    98,    15,
+-      -1,   175,    -1,   162,    98,    16,    -1,   177,    -1,   162,
+-      98,   103,    -1,    20,    -1,   173,    -1,   113,    -1,    25,
+-      -1
+-};
+-
+-/* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
++  /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
+ static const yytype_uint16 yyrline[] =
+ {
+        0,   115,   115,   114,   125,   124,   134,   133,   146,   145,
+@@ -205,20 +81,20 @@ static const yytype_uint16 yyrline[] =
+      617,   618,   620,   625,   627,   633,   632,   651,   652,   656,
+      658,   660,   662,   666,   668,   673,   677,   681,   685,   691,
+      696,   702,   708,   710,   713,   712,   723,   724,   728,   732,
+-     735,   740,   745,   748,   752,   756,   759,   764,   768,   771,
+-     773,   775,   780,   782,   784,   789,   791,   793,   795,   797,
+-     799,   801,   803,   805,   807,   809,   814,   816,   819,   821,
+-     823,   826,   829,   840,   843,   850,   852,   854,   856,   858,
+-     861,   875,   877,   881,   882,   883,   884,   885,   887,   889,
+-     891,   893,   895,   897,   899,   901,   903,   905,   907,   909,
+-     911,   921,   931,   941,   951,   953,   955,   958,   963,   967,
+-     969,   971,   973,   976,   978,   981,   983,   985,   987,   989,
+-     991,   993,   995,   997,  1000,  1002,  1004,  1006,  1008,  1010,
+-    1014,  1017,  1016,  1029,  1030,  1031,  1036,  1040,  1042,  1047,
+-    1049,  1052,  1054,  1056,  1061,  1063,  1068,  1069,  1074,  1075,
+-    1081,  1085,  1086,  1087,  1090,  1091,  1094,  1098,  1102,  1108,
+-    1114,  1116,  1120,  1124,  1125,  1129,  1130,  1134,  1135,  1140,
+-    1142,  1144,  1147
++     735,   740,   745,   748,   752,   756,   762,   770,   777,   783,
++     785,   787,   792,   794,   796,   801,   803,   805,   807,   809,
++     811,   813,   815,   817,   819,   821,   826,   828,   831,   833,
++     835,   838,   841,   852,   855,   862,   864,   866,   868,   870,
++     873,   887,   889,   893,   894,   895,   896,   897,   899,   901,
++     903,   905,   907,   909,   911,   913,   915,   917,   919,   921,
++     923,   933,   943,   953,   963,   965,   967,   970,   975,   979,
++     981,   983,   985,   988,   990,   993,   995,   997,   999,  1001,
++    1003,  1005,  1007,  1009,  1012,  1014,  1016,  1018,  1020,  1022,
++    1026,  1029,  1028,  1041,  1042,  1043,  1048,  1052,  1054,  1059,
++    1061,  1064,  1066,  1068,  1073,  1075,  1080,  1081,  1086,  1087,
++    1093,  1097,  1098,  1099,  1102,  1103,  1106,  1110,  1114,  1120,
++    1126,  1128,  1132,  1136,  1137,  1141,  1142,  1146,  1147,  1152,
++    1154,  1156,  1159
+ };
+ #endif
+ 
+@@ -237,10 +113,10 @@ static const char *const yytname[] =
+   "LOOPEX", "DOTDOT", "YADAYADA", "FUNC0", "FUNC1", "FUNC", "UNIOP",
+   "LSTOP", "RELOP", "EQOP", "MULOP", "ADDOP", "DOLSHARP", "DO",
+   "HASHBRACK", "NOAMP", "LOCAL", "MY", "REQUIRE", "COLONATTR",
+-  "FORMLBRACK", "FORMRBRACK", "PREC_LOW", "DOROP", "OROP", "ANDOP",
+-  "NOTOP", "','", "ASSIGNOP", "'?'", "':'", "DORDOR", "OROR", "ANDAND",
+-  "BITOROP", "BITANDOP", "SHIFTOP", "MATCHOP", "'!'", "'~'", "REFGEN",
+-  "UMINUS", "POWOP", "POSTJOIN", "POSTDEC", "POSTINC", "PREDEC", "PREINC",
++  "FORMLBRACK", "FORMRBRACK", "PREC_LOW", "OROP", "DOROP", "ANDOP",
++  "NOTOP", "','", "ASSIGNOP", "'?'", "':'", "OROR", "DORDOR", "ANDAND",
++  "BITOROP", "BITANDOP", "SHIFTOP", "MATCHOP", "'!'", "'~'", "UMINUS",
++  "REFGEN", "POWOP", "PREINC", "PREDEC", "POSTINC", "POSTDEC", "POSTJOIN",
+   "ARROW", "')'", "'('", "';'", "'$'", "'*'", "'/'", "$accept", "grammar",
+   "$@1", "$@2", "$@3", "$@4", "$@5", "$@6", "block", "formblock",
+   "remember", "mblock", "mremember", "stmtseq", "formstmtseq", "fullstmt",
+@@ -253,13 +129,13 @@ static const char *const yytname[] =
+   "anonymous", "termdo", "term", "@16", "myattrterm", "myterm",
+   "optlistexpr", "optexpr", "optrepl", "my_scalar", "my_var",
+   "refgen_topic", "amper", "scalar", "ary", "hsh", "arylen", "star",
+-  "sliceme", "kvslice", "gelem", "indirob", YY_NULL
++  "sliceme", "kvslice", "gelem", "indirob", YY_NULLPTR
+ };
+ #endif
+ 
+ # ifdef YYPRINT
+-/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
+-   token YYLEX-NUM.  */
++/* YYTOKNUM[NUM] -- (External) token number corresponding to the
++   (internal) symbol number NUM (which must be that of a token).  */
+ static const yytype_uint16 yytoknum[] =
+ {
+        0,   256,   257,   258,   259,   260,   261,   262,   263,   123,
+@@ -276,71 +152,76 @@ static const yytype_uint16 yytoknum[] =
+ };
+ # endif
+ 
+-/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
+-static const yytype_uint8 yyr1[] =
+-{
+-       0,   105,   107,   106,   108,   106,   109,   106,   110,   106,
+-     111,   106,   112,   106,   113,   114,   115,   116,   117,   118,
+-     118,   119,   119,   120,   120,   121,   121,   122,   122,   123,
+-     122,   124,   122,   122,   125,   122,   122,   122,   122,   122,
+-     122,   122,   122,   126,   127,   122,   122,   122,   128,   122,
+-     122,   122,   122,   129,   122,   122,   122,   130,   131,   131,
+-     132,   132,   132,   132,   132,   132,   132,   132,   133,   133,
+-     133,   134,   134,   135,   136,   136,   137,   137,   138,   139,
+-     140,   141,   141,   142,   143,   144,   145,   145,   146,   146,
+-     147,   147,   147,   148,   148,   150,   149,   151,   151,   152,
+-     152,   152,   152,   153,   153,   153,   154,   154,   154,   154,
+-     154,   154,   154,   154,   155,   154,   156,   156,   157,   157,
+-     157,   157,   157,   157,   157,   157,   157,   157,   157,   157,
+-     157,   157,   158,   158,   158,   158,   158,   158,   158,   158,
+-     158,   158,   158,   158,   158,   158,   159,   159,   159,   159,
+-     159,   159,   159,   159,   159,   160,   160,   160,   160,   160,
+-     160,   161,   161,   162,   162,   162,   162,   162,   162,   162,
+-     162,   162,   162,   162,   162,   162,   162,   162,   162,   162,
+-     162,   162,   162,   162,   162,   162,   162,   162,   162,   162,
+-     162,   162,   162,   162,   162,   162,   162,   162,   162,   162,
+-     162,   162,   162,   162,   162,   162,   162,   162,   162,   162,
+-     162,   163,   162,   162,   162,   162,   162,   164,   164,   165,
+-     165,   165,   165,   165,   166,   166,   167,   167,   168,   168,
+-     169,   170,   170,   170,   171,   171,   172,   173,   174,   175,
+-     176,   176,   177,   178,   178,   179,   179,   180,   180,   181,
+-     181,   181,   181
+-};
++#define YYPACT_NINF -400
+ 
+-/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
+-static const yytype_uint8 yyr2[] =
++#define yypact_value_is_default(Yystate) \
++  (!!((Yystate) == (-400)))
++
++#define YYTABLE_NINF -248
++
++#define yytable_value_is_error(Yytable_value) \
++  (!!((Yytable_value) == (-248)))
++
++  /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
++     STATE-NUM.  */
++static const yytype_int16 yypact[] =
+ {
+-       0,     2,     0,     4,     0,     3,     0,     3,     0,     3,
+-       0,     3,     0,     3,     4,     7,     0,     4,     0,     0,
+-       2,     0,     2,     1,     1,     2,     2,     1,     4,     0,
+-       7,     0,    10,     4,     0,     7,     7,     7,     6,     6,
+-       2,     8,     8,     0,     0,    13,     9,     8,     0,    11,
+-       9,     7,     2,     0,     8,     2,     1,     2,     0,     3,
+-       1,     1,     3,     3,     3,     3,     3,     3,     0,     2,
+-       6,     0,     2,     0,     0,     1,     0,     1,     1,     1,
+-       1,     1,     0,     0,     0,     0,     1,     1,     0,     1,
+-       0,     2,     1,     2,     1,     0,     3,     1,     1,     3,
+-       3,     3,     1,     2,     3,     1,     3,     5,     6,     3,
+-       3,     5,     2,     4,     0,     5,     1,     1,     5,     4,
+-       5,     4,     5,     6,     5,     4,     5,     4,     3,     6,
+-       4,     5,     3,     3,     3,     3,     3,     3,     3,     3,
+-       3,     3,     3,     3,     3,     3,     2,     2,     2,     2,
+-       2,     2,     2,     2,     2,     3,     2,     4,     3,     5,
+-       8,     2,     2,     1,     1,     1,     1,     5,     2,     1,
+-       2,     3,     1,     2,     1,     1,     1,     1,     1,     1,
+-       4,     4,     5,     5,     1,     1,     3,     4,     3,     4,
+-       4,     4,     4,     4,     1,     2,     2,     1,     2,     2,
+-       1,     2,     1,     2,     1,     3,     1,     3,     1,     3,
+-       4,     0,     6,     1,     1,     1,     1,     3,     2,     3,
+-       2,     1,     1,     1,     0,     1,     0,     1,     0,     2,
+-       1,     1,     1,     1,     1,     1,     2,     2,     2,     2,
+-       2,     4,     2,     1,     3,     1,     3,     1,     3,     1,
+-       1,     1,     1
++     365,  -400,  -400,  -400,  -400,  -400,  -400,    73,  -400,  2688,
++      78,  1473,  1378,  -400,  -400,  -400,  1944,  2688,  2688,    49,
++      49,    49,  -400,    49,    49,  -400,  -400,    68,    -8,  -400,
++    2688,  -400,  -400,  -400,  2688,  -400,    -3,     8,    11,  1851,
++    1756,    49,  1851,  2037,    22,  2688,     1,  2688,  2688,  2688,
++    2688,  2688,  2688,  2688,  2130,    49,    49,   -19,    14,  -400,
++       9,  -400,  -400,  -400,  -400,  2756,  -400,  -400,    24,    67,
++      72,   106,  -400,   105,   118,   165,   109,  -400,  -400,  -400,
++    -400,  -400,    22,   111,  -400,    39,    50,    62,    65,   -14,
++      69,    77,    78,  -400,    87,  -400,    48,   506,  1378,  -400,
++    -400,  -400,   618,   713,  -400,    70,   398,   398,  -400,  -400,
++    -400,  -400,  -400,  -400,  -400,  2688,    95,    96,  2688,   102,
++     368,    78,    16,  2756,   107,  2223,  1756,  -400,   368,   516,
++      14,  -400,   440,  2688,  -400,  -400,   368,   195,    93,  -400,
++    -400,  2688,   368,  2316,   150,  -400,  -400,  -400,   368,    14,
++     398,   398,   398,   414,   414,   210,   152,  -400,  -400,  2688,
++    2688,  2688,  2688,  2688,  2688,  2409,  2688,  2688,  2688,  2688,
++    2688,  2688,  2688,  2688,  2688,  2688,  2688,  2688,  2688,  2688,
++    2688,  -400,  -400,  -400,   131,  2502,  2688,  2688,  2688,  2688,
++    2688,  2688,  2688,  -400,   200,  -400,   223,  -400,  -400,  -400,
++    -400,  -400,  -400,    55,  -400,   146,  -400,  -400,  -400,    78,
++    -400,  -400,  2688,  2688,  2688,  2688,  2688,  2688,  -400,  -400,
++    -400,  -400,  -400,  2688,  2688,    98,  -400,  -400,  -400,   148,
++     160,  -400,  -400,   163,   151,  2688,    14,  -400,   239,  -400,
++    -400,   292,   232,  -400,  2688,   245,   192,   192,  -400,  2756,
++     209,   125,  -400,   531,  1555,   473,  1927,   349,   203,  2756,
++    2714,  1647,  1647,  1741,  1836,  2020,   410,   398,   398,  2688,
++    2688,   170,   172,   182,  -400,   183,  2595,    32,   184,   168,
++    -400,  -400,   588,   249,   129,   273,   141,   278,   149,   357,
++     808,  -400,   252,   189,    -6,   276,  2688,  2688,  2688,  2688,
++     205,  -400,  -400,   197,  -400,  -400,  -400,  -400,  1567,  -400,
++    2688,  2688,  -400,   -19,  -400,   -19,   -19,   -19,   -19,   -19,
++     217,   -29,  -400,  2688,  -400,   160,   279,    78,  -400,  -400,
++     603,  -400,  -400,  -400,   167,  2688,   298,  -400,  -400,  2688,
++     509,   179,  -400,  -400,  -400,  -400,  -400,   616,  -400,  -400,
++    2688,  -400,   299,  -400,   308,  -400,   319,  -400,   328,  -400,
++    -400,  -400,   316,  -400,  -400,  -400,   322,   244,   -19,   250,
++     257,   -19,   258,   262,  -400,    21,  -400,  -400,  -400,   259,
++     275,   286,  2688,   264,   281,  -400,  2688,   284,  -400,   287,
++     378,  -400,  -400,  -400,  -400,   185,  -400,  2798,   380,  -400,
++    -400,   289,  -400,  -400,  -400,  -400,   291,   160,   148,  -400,
++    2688,  -400,  -400,   399,   399,  2688,  -400,  2688,   399,  -400,
++     318,   399,   399,   -19,  -400,  -400,  -400,  -400,  -400,  -400,
++     344,     6,   160,  -400,   320,   399,   399,  -400,    18,    18,
++     321,   323,   325,    87,  2688,   399,  -400,  -400,   903,  -400,
++    -400,  -400,  -400,   424,   998,  -400,    87,    87,  -400,   399,
++     334,  -400,  -400,   399,  2688,   399,  -400,   336,    87,  -400,
++       3,  -400,  -400,  -400,  -400,  1093,  -400,  2688,    87,   343,
++      87,  -400,  -400,   383,   438,  -400,  1188,  -400,   362,  -400,
++     399,  -400,  -400,  -400,  -400,  -400,  -400,   399,    87,  1661,
++    1283,    18,  -400,   363,  -400,  -400,   399,  -400
+ };
+ 
+-/* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM.
+-   Performed when YYTABLE doesn't specify something else to do.  Zero
+-   means the default is an error.  */
++  /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
++     Performed when YYTABLE does not specify something else to do.  Zero
++     means the default is an error.  */
+ static const yytype_uint8 yydefact[] =
+ {
+        0,     2,     4,     6,     8,    10,    12,     0,    16,   226,
+@@ -358,18 +239,18 @@ static const yytype_uint8 yydefact[] =
+      203,     0,    88,   195,     0,     0,   226,   198,   199,   249,
+      225,   112,   250,     0,   240,   162,   161,     0,     0,    86,
+       87,   224,   170,     0,   218,   221,   223,   222,   201,   196,
+-     148,   149,   168,   154,   153,   173,     0,   237,   242,     0,
++     148,   149,   168,   153,   154,   173,     0,   237,   242,     0,
+        0,     0,   103,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+-       0,   152,   151,   150,     0,     0,     0,     0,     0,     0,
++       0,   150,   151,   152,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,    19,    82,    83,     0,    34,    16,    16,
+       16,    16,    16,     0,    16,     0,    16,    16,    40,     0,
+       52,    55,     0,     0,     0,     0,     0,     0,    26,    25,
+       20,   155,   110,   226,     0,     0,   207,   114,    89,     0,
+       90,   205,   209,     0,     0,     0,   106,   158,     0,   188,
+-     220,     0,    94,   217,     0,   171,   101,   100,    99,   104,
++     220,     0,    94,   217,     0,   171,   100,   101,    99,   104,
+        0,     0,   128,     0,   141,   137,   138,   134,   135,   132,
+-       0,   144,   143,   142,   140,   139,   136,   145,   133,     0,
++       0,   143,   144,   142,   140,   139,   136,   145,   133,     0,
+        0,   244,   246,     0,   116,     0,     0,     0,   248,   109,
+      117,   186,     0,     0,     0,     0,     0,     0,     0,     0,
+        0,    81,     0,    29,     0,     0,    76,     0,     0,     0,
+@@ -396,7 +277,20 @@ static const yytype_uint8 yydefact[] =
+        0,    68,    49,     0,    59,    70,     0,    45
+ };
+ 
+-/* YYDEFGOTO[NTERM-NUM].  */
++  /* YYPGOTO[NTERM-NUM].  */
++static const yytype_int16 yypgoto[] =
++{
++    -400,  -400,  -400,  -400,  -400,  -400,  -400,  -400,     4,  -400,
++     113,   -81,  -400,   -15,  -400,   455,   371,    -9,  -400,  -400,
++    -400,  -400,  -400,  -400,  -400,  -400,  -400,  -307,  -399,   -30,
++    -380,  -400,    30,   178,  -289,   -16,  -400,   290,   451,  -400,
++     405,   130,  -313,  -400,   121,  -400,  -400,    -5,   -35,  -400,
++    -400,  -400,  -400,  -400,  -400,  -400,  -400,   227,  -400,  -400,
++    -400,  -106,  -118,  -400,  -400,   128,  -400,   301,    44,   -40,
++     -39,  -400,  -400,  -400,  -400,  -400,    10
++};
++
++  /* YYDEFGOTO[NTERM-NUM].  */
+ static const yytype_int16 yydefgoto[] =
+ {
+       -1,     7,     8,     9,    10,    11,    12,    13,    94,   361,
+@@ -409,81 +303,9 @@ static const yytype_int16 yydefgoto[] =
+       71,    72,    73,    74,    75,    76,   157
+ };
+ 
+-/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+-   STATE-NUM.  */
+-#define YYPACT_NINF -400
+-static const yytype_int16 yypact[] =
+-{
+-     565,  -400,  -400,  -400,  -400,  -400,  -400,    73,  -400,  2699,
+-      69,  1486,  1389,  -400,  -400,  -400,  1955,  2699,  2699,    49,
+-      49,    49,  -400,    49,    49,  -400,  -400,    76,    -8,  -400,
+-    2699,  -400,  -400,  -400,  2699,  -400,    -3,     8,    11,  1862,
+-    1767,    49,  1862,  2048,    22,  2699,     1,  2699,  2699,  2699,
+-    2699,  2699,  2699,  2699,  2141,    49,    49,   -19,    14,  -400,
+-       9,  -400,  -400,  -400,  -400,  2770,  -400,  -400,    24,    68,
+-      72,   106,  -400,   105,   118,   165,   109,  -400,  -400,  -400,
+-    -400,  -400,    22,   111,  -400,    39,    50,    62,    65,   -14,
+-      77,    95,    69,  -400,    87,  -400,    48,   506,  1389,  -400,
+-    -400,  -400,   612,   710,  -400,    70,   490,   490,  -400,  -400,
+-    -400,  -400,  -400,  -400,  -400,  2699,    96,   101,  2699,   107,
+-     410,    69,    16,  2770,   120,  2234,  1767,  -400,   410,   516,
+-      14,  -400,   440,  2699,  -400,  -400,   410,   159,    93,  -400,
+-    -400,  2699,   410,  2327,   136,  -400,  -400,  -400,   410,    14,
+-     490,   490,   490,   258,   258,   210,   152,  -400,  -400,  2699,
+-    2699,  2699,  2699,  2699,  2699,  2420,  2699,  2699,  2699,  2699,
+-    2699,  2699,  2699,  2699,  2699,  2699,  2699,  2699,  2699,  2699,
+-    2699,  -400,  -400,  -400,   131,  2513,  2699,  2699,  2699,  2699,
+-    2699,  2699,  2699,  -400,   200,  -400,   223,  -400,  -400,  -400,
+-    -400,  -400,  -400,    55,  -400,   146,  -400,  -400,  -400,    69,
+-    -400,  -400,  2699,  2699,  2699,  2699,  2699,  2699,  -400,  -400,
+-    -400,  -400,  -400,  2699,  2699,    98,  -400,  -400,  -400,   148,
+-     160,  -400,  -400,   163,   150,  2699,    14,  -400,   240,  -400,
+-    -400,   293,   232,  -400,  2699,   245,   192,   192,  -400,  2770,
+-     209,   125,  -400,   531,  1567,  2033,   371,   695,   203,  2770,
+-    2725,  1658,  1658,  1752,  1847,  1940,   278,   490,   490,  2699,
+-    2699,   170,   172,   182,  -400,   183,  2606,    32,   184,   168,
+-    -400,  -400,   597,   249,   129,   273,   141,   436,   149,   486,
+-     807,  -400,   252,   189,    -6,   279,  2699,  2699,  2699,  2699,
+-     198,  -400,  -400,   202,  -400,  -400,  -400,  -400,  1579,  -400,
+-    2699,  2699,  -400,   -19,  -400,   -19,   -19,   -19,   -19,   -19,
+-     208,   -29,  -400,  2699,  -400,   160,   285,    69,  -400,  -400,
+-     617,  -400,  -400,  -400,   167,  2699,   299,  -400,  -400,  2699,
+-     582,   179,  -400,  -400,  -400,  -400,  -400,   630,  -400,  -400,
+-    2699,  -400,   306,  -400,   308,  -400,   319,  -400,   332,  -400,
+-    -400,  -400,   320,  -400,  -400,  -400,   329,   259,   -19,   263,
+-     264,   -19,   270,   257,  -400,    21,  -400,  -400,  -400,   280,
+-     282,   286,  2699,   281,   287,  -400,  2699,   288,  -400,   289,
+-     381,  -400,  -400,  -400,  -400,   185,  -400,  2815,   398,  -400,
+-    -400,   292,  -400,  -400,  -400,  -400,   314,   160,   148,  -400,
+-    2699,  -400,  -400,   408,   408,  2699,  -400,  2699,   408,  -400,
+-     321,   408,   408,   -19,  -400,  -400,  -400,  -400,  -400,  -400,
+-     350,     6,   160,  -400,   322,   408,   408,  -400,    18,    18,
+-     325,   328,   334,    87,  2699,   408,  -400,  -400,   904,  -400,
+-    -400,  -400,  -400,   425,  1001,  -400,    87,    87,  -400,   408,
+-     336,  -400,  -400,   408,  2699,   408,  -400,   340,    87,  -400,
+-       3,  -400,  -400,  -400,  -400,  1098,  -400,  2699,    87,   338,
+-      87,  -400,  -400,   372,   426,  -400,  1195,  -400,   345,  -400,
+-     408,  -400,  -400,  -400,  -400,  -400,  -400,   408,    87,  1672,
+-    1292,    18,  -400,   347,  -400,  -400,   408,  -400
+-};
+-
+-/* YYPGOTO[NTERM-NUM].  */
+-static const yytype_int16 yypgoto[] =
+-{
+-    -400,  -400,  -400,  -400,  -400,  -400,  -400,  -400,     4,  -400,
+-     113,   -81,  -400,   -15,  -400,   435,   355,    -9,  -400,  -400,
+-    -400,  -400,  -400,  -400,  -400,  -400,  -400,  -307,  -399,   -30,
+-    -380,  -400,    17,   157,  -289,   -44,  -400,   265,   429,  -400,
+-     385,   112,  -313,  -400,    67,  -400,  -400,    -5,   -35,  -400,
+-    -400,  -400,  -400,  -400,  -400,  -400,  -400,   227,  -400,  -400,
+-    -400,  -106,  -118,  -400,  -400,   108,  -400,   284,    44,   -40,
+-     -39,  -400,  -400,  -400,  -400,  -400,    10
+-};
+-
+-/* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
+-   positive, shift that token.  If negative, reduce the rule which
+-   number is the opposite.  If YYTABLE_NINF, syntax error.  */
+-#define YYTABLE_NINF -248
++  /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
++     positive, shift that token.  If negative, reduce the rule whose
++     number is the opposite.  If YYTABLE_NINF, syntax error.  */
+ static const yytype_int16 yytable[] =
+ {
+      103,   377,    95,   364,    57,   130,   146,   147,   234,   222,
+@@ -493,8 +315,8 @@ static const yytype_int16 yytable[] =
+      462,    77,   139,   127,   110,   110,   135,   140,   162,   156,
+      133,   134,   108,   202,   159,   160,   161,   109,    77,   110,
+      110,   459,   460,   111,   111,   111,   158,   111,   111,   108,
+-      19,    20,    21,    14,   109,   386,   203,   186,    77,   187,
+-     130,  -243,   221,  -243,   132,   111,   204,   118,    55,   219,
++      19,    20,    21,    14,   109,   386,   186,   203,   187,   118,
++     130,  -243,   221,  -243,   132,   111,   204,    77,    55,   219,
+      145,   162,   119,   420,   431,   365,   208,   124,   236,   111,
+      111,   143,   505,    55,   484,   320,   130,   450,   125,   165,
+      322,   126,   499,   225,  -247,  -245,   -16,  -245,   192,   453,
+@@ -502,101 +324,72 @@ static const yytype_int16 yytable[] =
+      110,   196,   209,   205,    55,   348,   235,   337,   241,   198,
+      269,   353,   270,   159,   160,   161,   271,   272,   273,   211,
+      199,    55,   274,   355,   246,   247,   248,    55,   250,   251,
+-     253,   357,   200,   306,   307,   201,   159,   160,   161,   237,
+-     132,   159,   160,   161,   190,   479,   191,   206,   290,   394,
++     253,   357,   200,   306,   307,   201,   159,   160,   161,   206,
++     132,   159,   160,   161,   190,   479,   191,   207,   290,   394,
+      282,   283,   284,   285,   286,   287,   288,   289,   488,   321,
+-     193,   399,   377,   275,   238,   207,   223,   427,   159,   160,
+-     161,   224,   159,   160,   161,   242,   226,   313,   315,   316,
+-     317,   318,   319,   312,   159,   160,   161,   388,    57,   231,
++     193,   399,   377,   275,   238,   223,   224,   427,   159,   160,
++     161,   226,   159,   160,   161,   237,   231,   313,   315,   316,
++     317,   318,   319,   312,   159,   160,   161,   388,    57,   242,
+      291,   244,   159,   160,   161,   159,   160,   161,   280,   326,
+      330,   276,   401,   277,   278,   229,   159,   160,   161,   334,
+-     159,   160,   161,   294,   106,   107,   309,   305,   324,   329,
+-     331,   245,   159,   160,   161,   333,   335,   120,   159,   160,
++     159,   160,   161,   294,   106,   107,   309,   305,   324,   331,
++     329,   245,   159,   160,   161,   333,   335,   120,   159,   160,
+      161,   123,   328,   169,   340,   341,   128,   161,   350,   136,
+      360,   347,   142,   342,   148,   343,   150,   151,   152,   153,
+      154,   110,   159,   160,   161,   344,   345,   349,   130,   -31,
+-     179,   368,   315,   371,   371,   180,   181,   182,   183,   366,
+-      55,   184,   376,   381,   434,   371,   371,   385,   391,   396,
+-     336,   296,   297,   298,   299,   300,   402,   308,   403,   310,
++     179,   368,   315,   371,   371,   180,   366,   376,   181,   182,
++     183,   184,   391,   381,   434,   371,   371,    55,   396,   402,
++     336,   296,   297,   298,   299,   300,   385,   308,   403,   310,
+      311,   111,   159,   160,   161,   212,   213,   214,   215,   404,
+-     395,   392,   216,   439,   217,   306,   307,   443,   169,   170,
+-     446,   447,   405,   228,   374,    57,   159,   160,   161,   410,
+-     352,  -248,  -248,  -248,   456,   457,   184,   415,   411,   159,
+-     160,   161,   412,   413,   468,   179,   159,   160,   161,   414,
+-     180,   181,   182,   183,   354,   130,   184,   371,   476,   418,
+-     421,   423,   478,   419,   480,   -79,   422,   424,   425,   249,
+-     426,   429,   332,   254,   255,   256,   257,   258,   259,   260,
+-     261,   262,   263,   264,   265,   266,   267,   268,   428,   498,
+-     371,   448,   371,   466,   375,   430,   501,   437,   454,   305,
+-     445,   449,   382,   455,   463,   507,   473,   474,   464,   167,
+-    -248,   169,   170,   465,   471,   451,   477,   490,   482,   368,
+-    -174,   481,   493,   475,   497,   495,   506,    99,   489,   186,
+-     491,   187,  -174,   218,   369,   503,   486,   178,   179,   371,
+-     293,   467,   122,   180,   181,   182,   183,   195,   502,   184,
+-     169,   170,   371,   406,   407,   432,   408,   409,   500,  -174,
+-    -174,  -174,  -174,   416,     0,     0,  -174,   304,  -174,   417,
+-       0,  -174,     0,     0,     0,     0,   178,   179,  -174,  -174,
+-    -174,  -174,   180,   181,   182,   183,     0,     0,   184,   159,
+-     160,   161,     0,  -174,  -174,  -174,  -213,  -174,  -174,  -174,
+-    -174,  -174,  -174,  -174,  -174,  -174,  -174,  -174,  -213,     0,
+-       0,     0,  -174,  -174,  -174,  -174,     0,   356,  -174,  -174,
++     395,   392,   216,   439,   217,   306,   307,   443,   405,   228,
++     446,   447,   410,   411,   374,    57,   159,   160,   161,   412,
++     352,   159,   160,   161,   456,   457,   413,   414,   418,   159,
++     160,   161,   415,   421,   468,   159,   160,   161,     1,     2,
++       3,     4,     5,     6,   354,   130,   419,   371,   476,   356,
++     422,   423,   478,   424,   480,   -79,   425,   426,   429,   249,
++     428,   332,   430,   254,   255,   256,   257,   258,   259,   260,
++     261,   262,   263,   264,   265,   266,   267,   268,   437,   498,
++     371,   448,   371,   466,   375,   449,   501,   445,   454,   305,
++     463,   455,   382,   464,   465,   507,   473,   474,   169,   170,
++     159,   160,   161,   471,   477,   451,   179,   481,   482,   368,
++    -174,   180,   490,   475,   181,   182,   183,   184,   489,   186,
++     491,   187,  -174,   493,   178,   179,   486,   495,   358,   371,
++     180,   497,   506,   181,   182,   183,   184,    99,   502,   218,
++     169,   170,   371,   406,   467,   369,   408,   409,   500,  -174,
++    -174,  -174,  -174,   503,   122,   293,  -174,   195,  -174,   417,
++     180,  -174,   407,   181,   182,   183,   184,   179,  -174,  -174,
++    -174,  -174,   180,   416,   304,   181,   182,   183,   184,  -248,
++    -248,  -248,   184,  -174,  -174,  -174,  -213,  -174,  -174,  -174,
++    -174,  -174,  -174,  -174,  -174,  -174,  -174,  -174,  -213,   432,
++       0,  -248,  -174,   169,   170,  -174,  -174,  -174,  -174,  -174,
+        0,  -174,     0,     0,  -174,   212,   213,   214,   215,     0,
+-       0,     0,   216,     0,   217,  -213,  -213,  -213,  -213,   159,
+-     160,   161,  -213,     0,  -213,     0,   397,  -213,     1,     2,
+-       3,     4,     5,     6,  -213,  -213,  -213,  -213,     0,   159,
+-     160,   161,   180,   181,   182,   183,     0,   358,   184,  -213,
++       0,     0,   216,     0,   217,  -213,  -213,  -213,  -213,   178,
++     179,     0,  -213,     0,  -213,   180,   397,  -213,   181,   182,
++     183,   184,     0,     0,  -213,  -213,  -213,  -213,     0,   159,
++     160,   161,   159,   160,   161,     0,     0,     0,     0,  -213,
+     -213,  -213,     0,  -213,  -213,  -213,  -213,  -213,  -213,  -213,
+-    -213,  -213,  -213,  -213,   159,   160,   161,     0,  -213,  -213,
+-    -213,  -213,   -13,    79,  -213,  -213,     0,  -213,     0,     0,
+-    -213,    77,     0,    16,     0,    17,    18,    19,    20,    21,
+-     338,     0,    22,    23,    24,    25,    26,     0,    27,    28,
+-      29,    30,    31,    32,    80,    98,    81,    82,    33,    83,
+-      84,    85,    86,    87,    88,   159,   160,   161,    89,    90,
+-      91,    92,    34,     0,    35,    36,    37,    38,    39,    40,
+-     159,   160,   161,     0,    41,    42,    43,    44,    45,    46,
+-      47,     0,     0,   398,     0,     0,     0,     0,    48,     0,
+-     159,   160,   161,     0,     0,     0,   351,     0,     0,     0,
+-      49,    50,    51,   159,   160,   161,     0,     0,    52,    53,
+-      -3,    79,    54,    93,    55,    56,   393,     0,     0,    77,
+-       0,    16,     0,    17,    18,    19,    20,    21,     0,   400,
+-      22,    23,    24,    25,    26,     0,    27,    28,    29,    30,
+-      31,    32,    80,    98,    81,    82,    33,    83,    84,    85,
+-      86,    87,    88,     0,     0,     0,    89,    90,    91,    92,
+-      34,     0,    35,    36,    37,    38,    39,    40,     0,     0,
+-       0,     0,    41,    42,    43,    44,    45,    46,    47,     0,
+-       0,     0,   179,     0,     0,     0,    48,   180,   181,   182,
+-     183,     0,     0,   184,     0,     0,     0,     0,    49,    50,
+-      51,     0,     0,     0,     0,     0,    52,    53,    79,     0,
+-      54,    93,    55,    56,     0,     0,    77,   359,    16,     0,
+-      17,    18,    19,    20,    21,     0,     0,    22,    23,    24,
+-      25,    26,     0,    27,    28,    29,    30,    31,    32,    80,
+-      98,    81,    82,    33,    83,    84,    85,    86,    87,    88,
+-       0,     0,     0,    89,    90,    91,    92,    34,     0,    35,
+-      36,    37,    38,    39,    40,     0,     0,     0,     0,    41,
+-      42,    43,    44,    45,    46,    47,     0,     0,     0,     0,
+-       0,     0,     0,    48,     0,     0,     0,     0,     0,     0,
+-       0,     0,     0,     0,     0,    49,    50,    51,     0,     0,
+-       0,     0,     0,    52,    53,    79,     0,    54,    93,    55,
+-      56,     0,     0,    77,   469,    16,     0,    17,    18,    19,
+-      20,    21,     0,     0,    22,    23,    24,    25,    26,     0,
+-      27,    28,    29,    30,    31,    32,    80,    98,    81,    82,
+-      33,    83,    84,    85,    86,    87,    88,     0,     0,     0,
+-      89,    90,    91,    92,    34,     0,    35,    36,    37,    38,
+-      39,    40,     0,     0,     0,     0,    41,    42,    43,    44,
+-      45,    46,    47,     0,     0,     0,     0,     0,     0,     0,
+-      48,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+-       0,     0,    49,    50,    51,     0,     0,     0,     0,     0,
+-      52,    53,    79,     0,    54,    93,    55,    56,     0,     0,
+-      77,   472,    16,     0,    17,    18,    19,    20,    21,     0,
+-       0,    22,    23,    24,    25,    26,     0,    27,    28,    29,
+-      30,    31,    32,    80,    98,    81,    82,    33,    83,    84,
+-      85,    86,    87,    88,     0,     0,     0,    89,    90,    91,
+-      92,    34,     0,    35,    36,    37,    38,    39,    40,     0,
+-       0,     0,     0,    41,    42,    43,    44,    45,    46,    47,
+-       0,     0,     0,     0,     0,     0,     0,    48,     0,     0,
+-       0,     0,     0,     0,     0,     0,     0,     0,     0,    49,
+-      50,    51,     0,     0,     0,     0,     0,    52,    53,    79,
+-       0,    54,    93,    55,    56,     0,     0,    77,   487,    16,
++    -213,  -213,  -213,  -213,   159,   160,   161,     0,  -213,     0,
++     398,  -213,  -213,  -213,  -213,  -213,     0,  -213,   -13,    79,
++    -213,     0,     0,     0,     0,     0,     0,    77,     0,    16,
++     338,    17,    18,    19,    20,    21,     0,     0,    22,    23,
++      24,    25,    26,     0,    27,    28,    29,    30,    31,    32,
++      80,    98,    81,    82,    33,    83,    84,    85,    86,    87,
++      88,   159,   160,   161,    89,    90,    91,    92,    34,     0,
++      35,    36,    37,    38,    39,    40,   159,   160,   161,     0,
++      41,    42,    43,    44,    45,    46,    47,   351,     0,   159,
++     160,   161,     0,     0,    48,     0,     0,     0,     0,     0,
++       0,     0,   393,     0,     0,     0,    49,    50,     0,    51,
++       0,    52,    53,    -3,    79,   400,     0,     0,    54,    93,
++      55,    56,    77,     0,    16,     0,    17,    18,    19,    20,
++      21,     0,     0,    22,    23,    24,    25,    26,     0,    27,
++      28,    29,    30,    31,    32,    80,    98,    81,    82,    33,
++      83,    84,    85,    86,    87,    88,     0,     0,     0,    89,
++      90,    91,    92,    34,     0,    35,    36,    37,    38,    39,
++      40,     0,     0,     0,     0,    41,    42,    43,    44,    45,
++      46,    47,     0,     0,     0,     0,     0,     0,     0,    48,
++       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
++       0,    49,    50,     0,    51,     0,    52,    53,     0,    79,
++       0,     0,     0,    54,    93,    55,    56,    77,   359,    16,
+        0,    17,    18,    19,    20,    21,     0,     0,    22,    23,
+       24,    25,    26,     0,    27,    28,    29,    30,    31,    32,
+       80,    98,    81,    82,    33,    83,    84,    85,    86,    87,
+@@ -604,131 +397,131 @@ static const yytype_int16 yytable[] =
+       35,    36,    37,    38,    39,    40,     0,     0,     0,     0,
+       41,    42,    43,    44,    45,    46,    47,     0,     0,     0,
+        0,     0,     0,     0,    48,     0,     0,     0,     0,     0,
+-       0,     0,     0,     0,     0,     0,    49,    50,    51,     0,
+-       0,     0,     0,     0,    52,    53,    79,     0,    54,    93,
+-      55,    56,     0,     0,    77,   496,    16,     0,    17,    18,
+-      19,    20,    21,     0,     0,    22,    23,    24,    25,    26,
+-       0,    27,    28,    29,    30,    31,    32,    80,    98,    81,
+-      82,    33,    83,    84,    85,    86,    87,    88,     0,     0,
+-       0,    89,    90,    91,    92,    34,     0,    35,    36,    37,
+-      38,    39,    40,     0,     0,     0,     0,    41,    42,    43,
+-      44,    45,    46,    47,     0,     0,     0,     0,     0,     0,
+-       0,    48,     0,     0,     0,     0,     0,     0,     0,     0,
+-       0,     0,     0,    49,    50,    51,     0,     0,     0,     0,
+-       0,    52,    53,    79,     0,    54,    93,    55,    56,     0,
+-       0,    77,     0,    16,     0,    17,    18,    19,    20,    21,
+-       0,     0,    22,    23,    24,    25,    26,     0,    27,    28,
+-      29,    30,    31,    32,    80,    98,    81,    82,    33,    83,
+-      84,    85,    86,    87,    88,     0,     0,     0,    89,    90,
+-      91,    92,    34,     0,    35,    36,    37,    38,    39,    40,
+-       0,     0,     0,     0,    41,    42,    43,    44,    45,    46,
+-      47,     0,     0,   504,     0,     0,     0,     0,    48,     0,
++       0,     0,     0,     0,     0,     0,    49,    50,     0,    51,
++       0,    52,    53,     0,    79,     0,     0,     0,    54,    93,
++      55,    56,    77,   469,    16,     0,    17,    18,    19,    20,
++      21,     0,     0,    22,    23,    24,    25,    26,     0,    27,
++      28,    29,    30,    31,    32,    80,    98,    81,    82,    33,
++      83,    84,    85,    86,    87,    88,     0,     0,     0,    89,
++      90,    91,    92,    34,     0,    35,    36,    37,    38,    39,
++      40,     0,     0,     0,     0,    41,    42,    43,    44,    45,
++      46,    47,     0,     0,     0,     0,     0,     0,     0,    48,
+        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+-      49,    50,    51,     0,     0,     0,     0,     0,    52,    53,
+-      79,     0,    54,    93,    55,    56,     0,     0,    77,     0,
+-      16,     0,    17,    18,    19,    20,    21,     0,     0,    22,
+-      23,    24,    25,    26,     0,    27,    28,    29,    30,    31,
+-      32,    80,    98,    81,    82,    33,    83,    84,    85,    86,
+-      87,    88,     0,     0,     0,    89,    90,    91,    92,    34,
+-       0,    35,    36,    37,    38,    39,    40,     0,     0,     0,
+-       0,    41,    42,    43,    44,    45,    46,    47,     0,     0,
+-       0,     0,     0,     0,     0,    48,     0,     0,     0,     0,
+-       0,     0,     0,     0,     0,     0,     0,    49,    50,    51,
+-       0,     0,     0,     0,     0,    52,    53,    79,     0,    54,
+-      93,    55,    56,     0,     0,    77,     0,    16,     0,    17,
+-      18,    19,    20,    21,     0,     0,    22,    23,    24,    25,
+-      26,     0,    27,    28,    29,    30,    31,    32,    80,     0,
+-      81,    82,    33,    83,    84,    85,    86,    87,    88,     0,
+-       0,     0,    89,    90,    91,    92,    34,     0,    35,    36,
+-      37,    38,    39,    40,     0,     0,     0,     0,    41,    42,
+-      43,    44,    45,    46,    47,     0,     0,     0,     0,     0,
+-       0,     0,    48,     0,     0,     0,     0,     0,     0,     0,
+-       0,     0,     0,     0,    49,    50,    51,     0,     0,     0,
+-      79,     0,    52,    53,     0,     0,    54,    93,    55,    56,
+-      16,     0,    17,    18,    19,    20,    21,     0,     0,    22,
+-      23,    24,    25,    26,     0,    27,    28,    29,    30,    31,
+-      32,     0,     0,     0,     0,    33,     0,     0,  -248,     0,
+-       0,     0,     0,     0,     0,   167,   168,   169,   170,    34,
+-       0,    35,    36,    37,    38,    39,    40,     0,     0,     0,
+-       0,    41,    42,    43,    44,    45,    46,    47,   173,   174,
+-     175,   176,   177,   178,   179,    48,     0,     0,     0,   180,
+-     181,   182,   183,     0,     0,   184,     0,    49,    50,    51,
+-       0,     0,     0,    79,     0,    52,    53,     0,     0,    54,
+-     -74,    55,    56,    16,     0,    17,    18,    19,    20,    21,
+-       0,     0,    22,    23,    24,    25,    26,     0,    27,    28,
+-      29,    30,    31,    32,     0,     0,     0,     0,    33,     0,
+-       0,     0,     0,     0,     0,     0,   167,   168,   169,   170,
+-       0,     0,    34,     0,    35,    36,    37,    38,    39,    40,
+-       0,     0,     0,     0,    41,    42,    43,    44,    45,    46,
+-      47,   175,   176,   177,   178,   179,     0,     0,    48,     0,
+-     180,   181,   182,   183,     0,     0,   184,     0,     0,     0,
+-      49,    50,    51,     0,     0,     0,     0,     0,    52,    53,
+-       0,   -74,    54,     0,    55,    56,    77,     0,    16,     0,
+-      17,    18,    19,    20,    21,     0,     0,   129,    23,    24,
+-      25,    26,   109,    27,    28,    29,    30,    31,    32,     0,
+-       0,     0,     0,    33,     0,     0,     0,     0,     0,     0,
+-     167,   168,   169,   170,     0,     0,     0,    34,     0,    35,
+-      36,    37,    38,    39,    40,     0,     0,     0,     0,    41,
+-      42,    43,    44,    45,    46,    47,   176,   177,   178,   179,
+-       0,     0,     0,    48,   180,   181,   182,   183,     0,     0,
+-     184,     0,     0,     0,     0,    49,    50,    51,     0,     0,
+-       0,     0,     0,    52,    53,     0,     0,    54,     0,    55,
+-      56,    77,     0,    16,     0,    17,    18,    19,    20,    21,
+-       0,     0,    22,    23,    24,    25,    26,     0,    27,    28,
+-      29,    30,    31,    32,     0,     0,     0,     0,    33,     0,
+-       0,     0,     0,     0,     0,   167,   168,   169,   170,     0,
+-       0,     0,    34,     0,    35,    36,    37,    38,    39,    40,
+-       0,     0,     0,     0,    41,    42,    43,    44,    45,    46,
+-      47,     0,   177,   178,   179,     0,     0,     0,    48,   180,
+-     181,   182,   183,     0,     0,   184,     0,     0,     0,     0,
+-      49,    50,    51,     0,     0,     0,     0,     0,    52,    53,
+-       0,     0,    54,     0,    55,    56,    16,   104,    17,    18,
+-      19,    20,    21,     0,     0,    22,    23,    24,    25,    26,
+-       0,    27,    28,    29,    30,    31,    32,     0,     0,     0,
+-       0,    33,     0,     0,     0,     0,     0,     0,   167,   168,
+-     169,   170,     0,     0,     0,    34,     0,    35,    36,    37,
+-      38,    39,    40,     0,     0,     0,     0,    41,    42,    43,
+-      44,    45,    46,    47,     0,     0,   178,   179,     0,     0,
+-       0,    48,   180,   181,   182,   183,     0,     0,   184,     0,
+-       0,     0,     0,    49,    50,    51,     0,     0,     0,     0,
+-       0,    52,    53,     0,     0,    54,     0,    55,    56,    16,
++       0,    49,    50,     0,    51,     0,    52,    53,     0,    79,
++       0,     0,     0,    54,    93,    55,    56,    77,   472,    16,
+        0,    17,    18,    19,    20,    21,     0,     0,    22,    23,
+       24,    25,    26,     0,    27,    28,    29,    30,    31,    32,
+-       0,     0,     0,     0,    33,     0,     0,     0,     0,     0,
+-       0,  -248,     0,   169,   170,     0,     0,     0,    34,     0,
++      80,    98,    81,    82,    33,    83,    84,    85,    86,    87,
++      88,     0,     0,     0,    89,    90,    91,    92,    34,     0,
++      35,    36,    37,    38,    39,    40,     0,     0,     0,     0,
++      41,    42,    43,    44,    45,    46,    47,     0,     0,     0,
++       0,     0,     0,     0,    48,     0,     0,     0,     0,     0,
++       0,     0,     0,     0,     0,     0,    49,    50,     0,    51,
++       0,    52,    53,     0,    79,     0,     0,     0,    54,    93,
++      55,    56,    77,   487,    16,     0,    17,    18,    19,    20,
++      21,     0,     0,    22,    23,    24,    25,    26,     0,    27,
++      28,    29,    30,    31,    32,    80,    98,    81,    82,    33,
++      83,    84,    85,    86,    87,    88,     0,     0,     0,    89,
++      90,    91,    92,    34,     0,    35,    36,    37,    38,    39,
++      40,     0,     0,     0,     0,    41,    42,    43,    44,    45,
++      46,    47,     0,     0,     0,     0,     0,     0,     0,    48,
++       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
++       0,    49,    50,     0,    51,     0,    52,    53,     0,    79,
++       0,     0,     0,    54,    93,    55,    56,    77,   496,    16,
++       0,    17,    18,    19,    20,    21,     0,     0,    22,    23,
++      24,    25,    26,     0,    27,    28,    29,    30,    31,    32,
++      80,    98,    81,    82,    33,    83,    84,    85,    86,    87,
++      88,     0,     0,     0,    89,    90,    91,    92,    34,     0,
+       35,    36,    37,    38,    39,    40,     0,     0,     0,     0,
+-      41,    42,    43,    44,    45,    46,    47,     0,     0,   178,
+-     179,     0,     0,     0,    48,   180,   181,   182,   183,     0,
+-       0,   184,     0,     0,     0,     0,    49,    50,    51,     0,
+-       0,     0,     0,     0,    52,    53,     0,     0,    54,   137,
+-      55,    56,    16,     0,    17,    18,    19,    20,    21,     0,
++      41,    42,    43,    44,    45,    46,    47,     0,     0,     0,
++       0,     0,     0,     0,    48,     0,     0,     0,     0,     0,
++       0,     0,     0,     0,     0,     0,    49,    50,     0,    51,
++       0,    52,    53,     0,    79,     0,     0,     0,    54,    93,
++      55,    56,    77,     0,    16,     0,    17,    18,    19,    20,
++      21,     0,     0,    22,    23,    24,    25,    26,     0,    27,
++      28,    29,    30,    31,    32,    80,    98,    81,    82,    33,
++      83,    84,    85,    86,    87,    88,     0,     0,     0,    89,
++      90,    91,    92,    34,     0,    35,    36,    37,    38,    39,
++      40,     0,     0,     0,     0,    41,    42,    43,    44,    45,
++      46,    47,     0,     0,   504,     0,     0,     0,     0,    48,
++       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
++       0,    49,    50,     0,    51,     0,    52,    53,     0,    79,
++       0,     0,     0,    54,    93,    55,    56,    77,     0,    16,
++       0,    17,    18,    19,    20,    21,     0,     0,    22,    23,
++      24,    25,    26,     0,    27,    28,    29,    30,    31,    32,
++      80,    98,    81,    82,    33,    83,    84,    85,    86,    87,
++      88,     0,     0,     0,    89,    90,    91,    92,    34,     0,
++      35,    36,    37,    38,    39,    40,     0,     0,     0,     0,
++      41,    42,    43,    44,    45,    46,    47,     0,     0,     0,
++       0,     0,     0,     0,    48,     0,     0,     0,     0,     0,
++       0,     0,     0,     0,     0,     0,    49,    50,     0,    51,
++       0,    52,    53,     0,    79,     0,     0,     0,    54,    93,
++      55,    56,    77,     0,    16,     0,    17,    18,    19,    20,
++      21,     0,     0,    22,    23,    24,    25,    26,     0,    27,
++      28,    29,    30,    31,    32,    80,     0,    81,    82,    33,
++      83,    84,    85,    86,    87,    88,     0,     0,     0,    89,
++      90,    91,    92,    34,     0,    35,    36,    37,    38,    39,
++      40,     0,     0,     0,     0,    41,    42,    43,    44,    45,
++      46,    47,     0,     0,     0,     0,     0,     0,     0,    48,
++       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
++       0,    49,    50,     0,    51,     0,    52,    53,    79,     0,
++       0,     0,     0,    54,    93,    55,    56,     0,    16,     0,
++      17,    18,    19,    20,    21,     0,     0,    22,    23,    24,
++      25,    26,     0,    27,    28,    29,    30,    31,    32,     0,
++       0,     0,     0,    33,     0,     0,  -248,     0,     0,     0,
++       0,     0,     0,   167,   168,   169,   170,    34,     0,    35,
++      36,    37,    38,    39,    40,     0,     0,     0,     0,    41,
++      42,    43,    44,    45,    46,    47,   173,   174,   175,   176,
++     177,   178,   179,    48,     0,     0,     0,   180,     0,     0,
++     181,   182,   183,   184,     0,    49,    50,     0,    51,     0,
++      52,    53,    79,     0,     0,     0,     0,    54,   -74,    55,
++      56,     0,    16,     0,    17,    18,    19,    20,    21,     0,
+        0,    22,    23,    24,    25,    26,     0,    27,    28,    29,
+       30,    31,    32,     0,     0,     0,     0,    33,     0,     0,
+-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
++       0,     0,     0,     0,     0,   167,   168,   169,   170,     0,
+        0,    34,     0,    35,    36,    37,    38,    39,    40,     0,
+        0,     0,     0,    41,    42,    43,    44,    45,    46,    47,
+-       0,     0,     0,     0,     0,     0,     0,    48,     0,     0,
+-       0,     0,     0,     0,     0,     0,     0,     0,     0,    49,
+-      50,    51,     0,     0,     0,     0,     0,    52,    53,     0,
+-     155,    54,     0,    55,    56,    16,     0,    17,    18,    19,
++     175,   176,   177,   178,   179,     0,     0,    48,     0,   180,
++       0,     0,   181,   182,   183,   184,     0,     0,     0,    49,
++      50,     0,    51,     0,    52,    53,     0,     0,     0,     0,
++     -74,    54,     0,    55,    56,    77,     0,    16,     0,    17,
++      18,    19,    20,    21,     0,     0,   129,    23,    24,    25,
++      26,   109,    27,    28,    29,    30,    31,    32,     0,     0,
++       0,     0,    33,     0,     0,     0,     0,     0,     0,   167,
++     168,   169,   170,     0,     0,     0,    34,     0,    35,    36,
++      37,    38,    39,    40,     0,     0,     0,     0,    41,    42,
++      43,    44,    45,    46,    47,   176,   177,   178,   179,     0,
++       0,     0,    48,   180,     0,     0,   181,   182,   183,   184,
++       0,     0,     0,     0,    49,    50,     0,    51,     0,    52,
++      53,     0,     0,     0,     0,     0,    54,     0,    55,    56,
++      77,     0,    16,     0,    17,    18,    19,    20,    21,     0,
++       0,    22,    23,    24,    25,    26,     0,    27,    28,    29,
++      30,    31,    32,     0,     0,     0,     0,    33,     0,     0,
++       0,     0,     0,     0,   167,   168,   169,   170,     0,     0,
++       0,    34,     0,    35,    36,    37,    38,    39,    40,     0,
++       0,     0,     0,    41,    42,    43,    44,    45,    46,    47,
++       0,   177,   178,   179,     0,     0,     0,    48,   180,     0,
++       0,   181,   182,   183,   184,     0,     0,     0,     0,    49,
++      50,     0,    51,     0,    52,    53,     0,     0,     0,     0,
++       0,    54,     0,    55,    56,    16,   104,    17,    18,    19,
+       20,    21,     0,     0,    22,    23,    24,    25,    26,     0,
+       27,    28,    29,    30,    31,    32,     0,     0,     0,     0,
+-      33,     0,     0,     0,     0,     0,     0,     0,     0,     0,
++      33,     0,     0,     0,     0,   167,  -248,   169,   170,     0,
+        0,     0,     0,     0,    34,     0,    35,    36,    37,    38,
+       39,    40,     0,     0,     0,     0,    41,    42,    43,    44,
+-      45,    46,    47,     0,     0,     0,     0,     0,     0,     0,
+-      48,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+-       0,     0,    49,    50,    51,     0,     0,     0,     0,     0,
+-      52,    53,     0,   232,    54,     0,    55,    56,    16,     0,
++      45,    46,    47,   178,   179,     0,     0,     0,     0,   180,
++      48,     0,   181,   182,   183,   184,     0,     0,     0,     0,
++       0,     0,    49,    50,     0,    51,     0,    52,    53,     0,
++       0,     0,     0,     0,    54,     0,    55,    56,    16,     0,
+       17,    18,    19,    20,    21,     0,     0,    22,    23,    24,
+       25,    26,     0,    27,    28,    29,    30,    31,    32,     0,
+-       0,     0,     0,    33,     0,     0,     0,     0,     0,     0,
+-       0,     0,     0,     0,     0,     0,     0,    34,     0,    35,
++       0,     0,     0,    33,     0,     0,     0,     0,   167,   168,
++     169,   170,     0,     0,     0,     0,     0,    34,     0,    35,
+       36,    37,    38,    39,    40,     0,     0,     0,     0,    41,
+-      42,    43,    44,    45,    46,    47,     0,     0,     0,     0,
+-       0,     0,     0,    48,     0,     0,     0,     0,     0,     0,
+-       0,     0,     0,     0,     0,    49,    50,    51,     0,     0,
+-       0,     0,     0,    52,    53,     0,   240,    54,     0,    55,
++      42,    43,    44,    45,    46,    47,   178,   179,     0,     0,
++       0,     0,   180,    48,     0,   181,   182,   183,   184,     0,
++       0,     0,     0,     0,     0,    49,    50,     0,    51,     0,
++      52,    53,     0,     0,     0,     0,     0,    54,   137,    55,
+       56,    16,     0,    17,    18,    19,    20,    21,     0,     0,
+       22,    23,    24,    25,    26,     0,    27,    28,    29,    30,
+       31,    32,     0,     0,     0,     0,    33,     0,     0,     0,
+@@ -737,7 +530,7 @@ static const yytype_int16 yytable[] =
+        0,     0,    41,    42,    43,    44,    45,    46,    47,     0,
+        0,     0,     0,     0,     0,     0,    48,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,    49,    50,
+-      51,     0,     0,     0,     0,     0,    52,    53,     0,   252,
++       0,    51,     0,    52,    53,     0,     0,     0,     0,   155,
+       54,     0,    55,    56,    16,     0,    17,    18,    19,    20,
+       21,     0,     0,    22,    23,    24,    25,    26,     0,    27,
+       28,    29,    30,    31,    32,     0,     0,     0,     0,    33,
+@@ -746,8 +539,8 @@ static const yytype_int16 yytable[] =
+       40,     0,     0,     0,     0,    41,    42,    43,    44,    45,
+       46,    47,     0,     0,     0,     0,     0,     0,     0,    48,
+        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+-       0,    49,    50,    51,     0,     0,     0,     0,     0,    52,
+-      53,     0,   281,    54,     0,    55,    56,    16,     0,    17,
++       0,    49,    50,     0,    51,     0,    52,    53,     0,     0,
++       0,     0,   232,    54,     0,    55,    56,    16,     0,    17,
+       18,    19,    20,    21,     0,     0,    22,    23,    24,    25,
+       26,     0,    27,    28,    29,    30,    31,    32,     0,     0,
+        0,     0,    33,     0,     0,     0,     0,     0,     0,     0,
+@@ -755,37 +548,58 @@ static const yytype_int16 yytable[] =
+       37,    38,    39,    40,     0,     0,     0,     0,    41,    42,
+       43,    44,    45,    46,    47,     0,     0,     0,     0,     0,
+        0,     0,    48,     0,     0,     0,     0,     0,     0,     0,
+-       0,     0,     0,     0,    49,    50,    51,     0,     0,     0,
+-       0,     0,    52,    53,     0,   346,    54,     0,    55,    56,
++       0,     0,     0,     0,    49,    50,     0,    51,     0,    52,
++      53,     0,     0,     0,     0,   240,    54,     0,    55,    56,
+       16,     0,    17,    18,    19,    20,    21,     0,     0,    22,
+       23,    24,    25,    26,     0,    27,    28,    29,    30,    31,
+       32,     0,     0,     0,     0,    33,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,     0,    34,
+        0,    35,    36,    37,    38,    39,    40,     0,     0,     0,
+        0,    41,    42,    43,    44,    45,    46,    47,     0,     0,
+-       0,     0,     0,     0,     0,    48,   166,     0,     0,     0,
+-       0,     0,     0,   167,   168,   169,   170,    49,    50,    51,
+-       0,     0,     0,     0,     0,    52,    53,     0,     0,    54,
+-       0,    55,    56,   171,   172,   339,   173,   174,   175,   176,
+-     177,   178,   179,     0,     0,     0,     0,   180,   181,   182,
+-     183,   166,     0,   184,     0,     0,     0,     0,   167,   168,
+-     169,   170,     0,     0,     0,     0,     0,     0,     0,     0,
+-       0,     0,     0,     0,     0,     0,     0,     0,   171,   172,
+-       0,   173,   174,   175,   176,   177,   178,   179,     0,     0,
+-       0,     0,   180,   181,   182,   183,   166,     0,   184,     0,
+-       0,     0,     0,   167,   168,   169,   170,     0,     0,     0,
++       0,     0,     0,     0,     0,    48,     0,     0,     0,     0,
++       0,     0,     0,     0,     0,     0,     0,    49,    50,     0,
++      51,     0,    52,    53,     0,     0,     0,     0,   252,    54,
++       0,    55,    56,    16,     0,    17,    18,    19,    20,    21,
++       0,     0,    22,    23,    24,    25,    26,     0,    27,    28,
++      29,    30,    31,    32,     0,     0,     0,     0,    33,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+-       0,     0,     0,     0,   172,     0,   173,   174,   175,   176,
+-     177,   178,   179,     0,     0,     0,     0,   180,   181,   182,
+-     183,     0,     0,   184
++       0,     0,    34,     0,    35,    36,    37,    38,    39,    40,
++       0,     0,     0,     0,    41,    42,    43,    44,    45,    46,
++      47,     0,     0,     0,     0,     0,     0,     0,    48,     0,
++       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
++      49,    50,     0,    51,     0,    52,    53,     0,     0,     0,
++       0,   281,    54,     0,    55,    56,    16,     0,    17,    18,
++      19,    20,    21,     0,     0,    22,    23,    24,    25,    26,
++       0,    27,    28,    29,    30,    31,    32,     0,     0,     0,
++       0,    33,     0,     0,     0,     0,     0,     0,     0,     0,
++       0,     0,     0,     0,     0,    34,     0,    35,    36,    37,
++      38,    39,    40,     0,     0,     0,     0,    41,    42,    43,
++      44,    45,    46,    47,     0,     0,     0,     0,     0,     0,
++       0,    48,     0,     0,     0,     0,     0,     0,     0,     0,
++       0,     0,     0,    49,    50,     0,    51,     0,    52,    53,
++       0,     0,     0,     0,   346,    54,     0,    55,    56,    16,
++       0,    17,    18,    19,    20,    21,     0,     0,    22,    23,
++      24,    25,    26,     0,    27,    28,    29,    30,    31,    32,
++       0,     0,     0,     0,    33,     0,     0,     0,     0,     0,
++       0,     0,     0,     0,     0,     0,     0,     0,    34,     0,
++      35,    36,    37,    38,    39,    40,     0,     0,     0,     0,
++      41,    42,    43,    44,    45,    46,    47,     0,     0,     0,
++       0,     0,     0,     0,    48,   166,     0,     0,     0,     0,
++       0,     0,   167,   168,   169,   170,    49,    50,     0,    51,
++       0,    52,    53,     0,     0,     0,     0,     0,    54,     0,
++      55,    56,   171,   172,   339,   173,   174,   175,   176,   177,
++     178,   179,     0,     0,     0,     0,   180,   166,     0,   181,
++     182,   183,   184,     0,   167,   168,   169,   170,     0,     0,
++       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
++       0,     0,     0,     0,   171,   172,     0,   173,   174,   175,
++     176,   177,   178,   179,     0,     0,     0,     0,   180,   166,
++       0,   181,   182,   183,   184,     0,   167,   168,   169,   170,
++       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
++       0,     0,     0,     0,     0,     0,     0,   172,     0,   173,
++     174,   175,   176,   177,   178,   179,     0,     0,     0,     0,
++     180,     0,     0,   181,   182,   183,   184
+ };
+ 
+-#define yypact_value_is_default(Yystate) \
+-  (!!((Yystate) == (-400)))
+-
+-#define yytable_value_is_error(Yytable_value) \
+-  (!!((Yytable_value) == (-248)))
+-
+ static const yytype_int16 yycheck[] =
+ {
+       15,   308,    11,     9,     9,    40,    46,    46,   126,   115,
+@@ -795,8 +609,8 @@ static const yytype_int16 yycheck[] =
+      439,     9,    20,    39,    40,    41,    42,    25,    77,    54,
+       40,    41,    20,    67,    73,    74,    75,    25,     9,    55,
+       56,    43,    44,    19,    20,    21,    56,    23,    24,    20,
+-      15,    16,    17,     0,    25,   104,    90,     9,     9,    11,
+-     115,     9,    12,    11,    40,    41,   100,    11,   102,    98,
++      15,    16,    17,     0,    25,   104,     9,    91,    11,    11,
++     115,     9,    12,    11,    40,    41,   100,     9,   102,    98,
+       46,    77,   100,   382,   407,   101,    92,   100,   133,    55,
+       56,   100,   501,   102,   101,   223,   141,   101,   100,   100,
+       12,   100,   492,   118,     9,     9,   100,    11,     9,   432,
+@@ -804,101 +618,72 @@ static const yytype_int16 yycheck[] =
+      126,    20,    45,    89,   102,   103,   126,    12,   143,   100,
+        9,    12,    11,    73,    74,    75,    15,    16,    17,   101,
+      100,   102,    21,    12,   159,   160,   161,   102,   163,   164,
+-     165,    12,   100,   203,   203,   100,    73,    74,    75,    10,
++     165,    12,   100,   203,   203,   100,    73,    74,    75,   100,
+      126,    73,    74,    75,     9,   464,    11,   100,   193,    12,
+      185,   186,   187,   188,   189,   190,   191,   192,   477,   224,
+       77,    12,   499,    62,   101,   100,   100,    12,    73,    74,
+-      75,   100,    73,    74,    75,    69,    99,   212,   213,   214,
+-     215,   216,   217,   209,    73,    74,    75,   323,   223,    99,
++      75,    99,    73,    74,    75,    10,    99,   212,   213,   214,
++     215,   216,   217,   209,    73,    74,    75,   323,   223,    69,
+       20,    11,    73,    74,    75,    73,    74,    75,   184,    69,
+      235,   100,   350,   102,   103,   122,    73,    74,    75,   244,
+-      73,    74,    75,    20,    17,    18,   100,   203,   100,    99,
+-      10,    99,    73,    74,    75,    23,    11,    30,    73,    74,
++      73,    74,    75,    20,    17,    18,   100,   203,   100,    10,
++      99,    99,    73,    74,    75,    23,    11,    30,    73,    74,
+       75,    34,    99,    60,   269,   270,    39,    75,   100,    42,
+       18,   276,    45,   103,    47,   103,    49,    50,    51,    52,
+       53,   277,    73,    74,    75,   103,   103,   103,   323,   100,
+-      87,   296,   297,   298,   299,    92,    93,    94,    95,    20,
+-     102,    98,   100,   308,   410,   310,   311,    99,    23,    10,
+-     101,   198,   199,   200,   201,   202,    10,   204,    10,   206,
++      87,   296,   297,   298,   299,    92,    20,   100,    95,    96,
++      97,    98,    23,   308,   410,   310,   311,   102,    10,    10,
++     101,   198,   199,   200,   201,   202,    99,   204,    10,   206,
+      207,   277,    73,    74,    75,    39,    40,    41,    42,    10,
+-     335,   327,    46,   414,    48,   375,   375,   418,    60,    61,
+-     421,   422,    10,    23,   300,   350,    73,    74,    75,    20,
+-     101,    93,    94,    95,   435,   436,    98,   100,    99,    73,
+-      74,    75,    99,    99,   445,    87,    73,    74,    75,    99,
+-      92,    93,    94,    95,   101,   410,    98,   382,   459,    99,
+-      99,   386,   463,   101,   465,    99,    99,    99,    99,   162,
+-       9,    99,    99,   166,   167,   168,   169,   170,   171,   172,
+-     173,   174,   175,   176,   177,   178,   179,   180,    10,   490,
+-     415,   426,   417,   443,   301,   101,   497,     9,   433,   375,
+-      99,    71,   309,   101,    99,   506,   456,   457,   100,    58,
+-      59,    60,    61,    99,     9,   431,   100,    99,   468,   444,
+-       0,   101,    70,   458,    99,    19,    99,    12,   478,     9,
+-     480,    11,    12,    98,   297,   499,   471,    86,    87,   464,
+-     195,   444,    33,    92,    93,    94,    95,    82,   498,    98,
+-      60,    61,   477,   360,   362,   408,   363,   364,   493,    39,
+-      40,    41,    42,   375,    -1,    -1,    46,   203,    48,   376,
+-      -1,    51,    -1,    -1,    -1,    -1,    86,    87,    58,    59,
+-      60,    61,    92,    93,    94,    95,    -1,    -1,    98,    73,
+-      74,    75,    -1,    73,    74,    75,     0,    77,    78,    79,
+-      80,    81,    82,    83,    84,    85,    86,    87,    12,    -1,
+-      -1,    -1,    92,    93,    94,    95,    -1,   101,    98,    99,
++     335,   327,    46,   414,    48,   375,   375,   418,    10,    23,
++     421,   422,    20,    99,   300,   350,    73,    74,    75,    99,
++     101,    73,    74,    75,   435,   436,    99,    99,    99,    73,
++      74,    75,   100,    99,   445,    73,    74,    75,     3,     4,
++       5,     6,     7,     8,   101,   410,   101,   382,   459,   101,
++      99,   386,   463,    99,   465,    99,    99,     9,    99,   162,
++      10,    99,   101,   166,   167,   168,   169,   170,   171,   172,
++     173,   174,   175,   176,   177,   178,   179,   180,     9,   490,
++     415,   426,   417,   443,   301,    71,   497,    99,   433,   375,
++      99,   101,   309,   100,    99,   506,   456,   457,    60,    61,
++      73,    74,    75,     9,   100,   431,    87,   101,   468,   444,
++       0,    92,    99,   458,    95,    96,    97,    98,   478,     9,
++     480,    11,    12,    70,    86,    87,   471,    19,   101,   464,
++      92,    99,    99,    95,    96,    97,    98,    12,   498,    98,
++      60,    61,   477,   360,   444,   297,   363,   364,   493,    39,
++      40,    41,    42,   499,    33,   195,    46,    82,    48,   376,
++      92,    51,   362,    95,    96,    97,    98,    87,    58,    59,
++      60,    61,    92,   375,   203,    95,    96,    97,    98,    95,
++      96,    97,    98,    73,    74,    75,     0,    77,    78,    79,
++      80,    81,    82,    83,    84,    85,    86,    87,    12,   408,
++      -1,    58,    92,    60,    61,    95,    96,    97,    98,    99,
+       -1,   101,    -1,    -1,   104,    39,    40,    41,    42,    -1,
+-      -1,    -1,    46,    -1,    48,    39,    40,    41,    42,    73,
+-      74,    75,    46,    -1,    48,    -1,   339,    51,     3,     4,
+-       5,     6,     7,     8,    58,    59,    60,    61,    -1,    73,
+-      74,    75,    92,    93,    94,    95,    -1,   101,    98,    73,
++      -1,    -1,    46,    -1,    48,    39,    40,    41,    42,    86,
++      87,    -1,    46,    -1,    48,    92,   339,    51,    95,    96,
++      97,    98,    -1,    -1,    58,    59,    60,    61,    -1,    73,
++      74,    75,    73,    74,    75,    -1,    -1,    -1,    -1,    73,
+       74,    75,    -1,    77,    78,    79,    80,    81,    82,    83,
+-      84,    85,    86,    87,    73,    74,    75,    -1,    92,    93,
+-      94,    95,     0,     1,    98,    99,    -1,   101,    -1,    -1,
+-     104,     9,    -1,    11,    -1,    13,    14,    15,    16,    17,
+-      99,    -1,    20,    21,    22,    23,    24,    -1,    26,    27,
+-      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+-      38,    39,    40,    41,    42,    73,    74,    75,    46,    47,
+-      48,    49,    50,    -1,    52,    53,    54,    55,    56,    57,
+-      73,    74,    75,    -1,    62,    63,    64,    65,    66,    67,
+-      68,    -1,    -1,   101,    -1,    -1,    -1,    -1,    76,    -1,
+-      73,    74,    75,    -1,    -1,    -1,    99,    -1,    -1,    -1,
+-      88,    89,    90,    73,    74,    75,    -1,    -1,    96,    97,
+-       0,     1,   100,   101,   102,   103,    99,    -1,    -1,     9,
+-      -1,    11,    -1,    13,    14,    15,    16,    17,    -1,    99,
+-      20,    21,    22,    23,    24,    -1,    26,    27,    28,    29,
+-      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+-      40,    41,    42,    -1,    -1,    -1,    46,    47,    48,    49,
+-      50,    -1,    52,    53,    54,    55,    56,    57,    -1,    -1,
+-      -1,    -1,    62,    63,    64,    65,    66,    67,    68,    -1,
+-      -1,    -1,    87,    -1,    -1,    -1,    76,    92,    93,    94,
+-      95,    -1,    -1,    98,    -1,    -1,    -1,    -1,    88,    89,
+-      90,    -1,    -1,    -1,    -1,    -1,    96,    97,     1,    -1,
+-     100,   101,   102,   103,    -1,    -1,     9,    10,    11,    -1,
+-      13,    14,    15,    16,    17,    -1,    -1,    20,    21,    22,
+-      23,    24,    -1,    26,    27,    28,    29,    30,    31,    32,
+-      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
+-      -1,    -1,    -1,    46,    47,    48,    49,    50,    -1,    52,
+-      53,    54,    55,    56,    57,    -1,    -1,    -1,    -1,    62,
+-      63,    64,    65,    66,    67,    68,    -1,    -1,    -1,    -1,
+-      -1,    -1,    -1,    76,    -1,    -1,    -1,    -1,    -1,    -1,
+-      -1,    -1,    -1,    -1,    -1,    88,    89,    90,    -1,    -1,
+-      -1,    -1,    -1,    96,    97,     1,    -1,   100,   101,   102,
+-     103,    -1,    -1,     9,    10,    11,    -1,    13,    14,    15,
+-      16,    17,    -1,    -1,    20,    21,    22,    23,    24,    -1,
+-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+-      36,    37,    38,    39,    40,    41,    42,    -1,    -1,    -1,
+-      46,    47,    48,    49,    50,    -1,    52,    53,    54,    55,
+-      56,    57,    -1,    -1,    -1,    -1,    62,    63,    64,    65,
+-      66,    67,    68,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+-      76,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+-      -1,    -1,    88,    89,    90,    -1,    -1,    -1,    -1,    -1,
+-      96,    97,     1,    -1,   100,   101,   102,   103,    -1,    -1,
+-       9,    10,    11,    -1,    13,    14,    15,    16,    17,    -1,
+-      -1,    20,    21,    22,    23,    24,    -1,    26,    27,    28,
+-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
+-      39,    40,    41,    42,    -1,    -1,    -1,    46,    47,    48,
+-      49,    50,    -1,    52,    53,    54,    55,    56,    57,    -1,
+-      -1,    -1,    -1,    62,    63,    64,    65,    66,    67,    68,
+-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    76,    -1,    -1,
+-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    88,
+-      89,    90,    -1,    -1,    -1,    -1,    -1,    96,    97,     1,
+-      -1,   100,   101,   102,   103,    -1,    -1,     9,    10,    11,
++      84,    85,    86,    87,    73,    74,    75,    -1,    92,    -1,
++     101,    95,    96,    97,    98,    99,    -1,   101,     0,     1,
++     104,    -1,    -1,    -1,    -1,    -1,    -1,     9,    -1,    11,
++      99,    13,    14,    15,    16,    17,    -1,    -1,    20,    21,
++      22,    23,    24,    -1,    26,    27,    28,    29,    30,    31,
++      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
++      42,    73,    74,    75,    46,    47,    48,    49,    50,    -1,
++      52,    53,    54,    55,    56,    57,    73,    74,    75,    -1,
++      62,    63,    64,    65,    66,    67,    68,    99,    -1,    73,
++      74,    75,    -1,    -1,    76,    -1,    -1,    -1,    -1,    -1,
++      -1,    -1,    99,    -1,    -1,    -1,    88,    89,    -1,    91,
++      -1,    93,    94,     0,     1,    99,    -1,    -1,   100,   101,
++     102,   103,     9,    -1,    11,    -1,    13,    14,    15,    16,
++      17,    -1,    -1,    20,    21,    22,    23,    24,    -1,    26,
++      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
++      37,    38,    39,    40,    41,    42,    -1,    -1,    -1,    46,
++      47,    48,    49,    50,    -1,    52,    53,    54,    55,    56,
++      57,    -1,    -1,    -1,    -1,    62,    63,    64,    65,    66,
++      67,    68,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    76,
++      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
++      -1,    88,    89,    -1,    91,    -1,    93,    94,    -1,     1,
++      -1,    -1,    -1,   100,   101,   102,   103,     9,    10,    11,
+       -1,    13,    14,    15,    16,    17,    -1,    -1,    20,    21,
+       22,    23,    24,    -1,    26,    27,    28,    29,    30,    31,
+       32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
+@@ -906,131 +691,131 @@ static const yytype_int16 yycheck[] =
+       52,    53,    54,    55,    56,    57,    -1,    -1,    -1,    -1,
+       62,    63,    64,    65,    66,    67,    68,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    76,    -1,    -1,    -1,    -1,    -1,
+-      -1,    -1,    -1,    -1,    -1,    -1,    88,    89,    90,    -1,
+-      -1,    -1,    -1,    -1,    96,    97,     1,    -1,   100,   101,
+-     102,   103,    -1,    -1,     9,    10,    11,    -1,    13,    14,
+-      15,    16,    17,    -1,    -1,    20,    21,    22,    23,    24,
+-      -1,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+-      35,    36,    37,    38,    39,    40,    41,    42,    -1,    -1,
+-      -1,    46,    47,    48,    49,    50,    -1,    52,    53,    54,
+-      55,    56,    57,    -1,    -1,    -1,    -1,    62,    63,    64,
+-      65,    66,    67,    68,    -1,    -1,    -1,    -1,    -1,    -1,
+-      -1,    76,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+-      -1,    -1,    -1,    88,    89,    90,    -1,    -1,    -1,    -1,
+-      -1,    96,    97,     1,    -1,   100,   101,   102,   103,    -1,
+-      -1,     9,    -1,    11,    -1,    13,    14,    15,    16,    17,
+-      -1,    -1,    20,    21,    22,    23,    24,    -1,    26,    27,
+-      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+-      38,    39,    40,    41,    42,    -1,    -1,    -1,    46,    47,
+-      48,    49,    50,    -1,    52,    53,    54,    55,    56,    57,
+-      -1,    -1,    -1,    -1,    62,    63,    64,    65,    66,    67,
+-      68,    -1,    -1,    71,    -1,    -1,    -1,    -1,    76,    -1,
++      -1,    -1,    -1,    -1,    -1,    -1,    88,    89,    -1,    91,
++      -1,    93,    94,    -1,     1,    -1,    -1,    -1,   100,   101,
++     102,   103,     9,    10,    11,    -1,    13,    14,    15,    16,
++      17,    -1,    -1,    20,    21,    22,    23,    24,    -1,    26,
++      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
++      37,    38,    39,    40,    41,    42,    -1,    -1,    -1,    46,
++      47,    48,    49,    50,    -1,    52,    53,    54,    55,    56,
++      57,    -1,    -1,    -1,    -1,    62,    63,    64,    65,    66,
++      67,    68,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    76,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+-      88,    89,    90,    -1,    -1,    -1,    -1,    -1,    96,    97,
+-       1,    -1,   100,   101,   102,   103,    -1,    -1,     9,    -1,
+-      11,    -1,    13,    14,    15,    16,    17,    -1,    -1,    20,
+-      21,    22,    23,    24,    -1,    26,    27,    28,    29,    30,
+-      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
+-      41,    42,    -1,    -1,    -1,    46,    47,    48,    49,    50,
+-      -1,    52,    53,    54,    55,    56,    57,    -1,    -1,    -1,
+-      -1,    62,    63,    64,    65,    66,    67,    68,    -1,    -1,
+-      -1,    -1,    -1,    -1,    -1,    76,    -1,    -1,    -1,    -1,
+-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    88,    89,    90,
+-      -1,    -1,    -1,    -1,    -1,    96,    97,     1,    -1,   100,
+-     101,   102,   103,    -1,    -1,     9,    -1,    11,    -1,    13,
+-      14,    15,    16,    17,    -1,    -1,    20,    21,    22,    23,
+-      24,    -1,    26,    27,    28,    29,    30,    31,    32,    -1,
+-      34,    35,    36,    37,    38,    39,    40,    41,    42,    -1,
+-      -1,    -1,    46,    47,    48,    49,    50,    -1,    52,    53,
+-      54,    55,    56,    57,    -1,    -1,    -1,    -1,    62,    63,
+-      64,    65,    66,    67,    68,    -1,    -1,    -1,    -1,    -1,
+-      -1,    -1,    76,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+-      -1,    -1,    -1,    -1,    88,    89,    90,    -1,    -1,    -1,
+-       1,    -1,    96,    97,    -1,    -1,   100,   101,   102,   103,
+-      11,    -1,    13,    14,    15,    16,    17,    -1,    -1,    20,
+-      21,    22,    23,    24,    -1,    26,    27,    28,    29,    30,
+-      31,    -1,    -1,    -1,    -1,    36,    -1,    -1,    51,    -1,
+-      -1,    -1,    -1,    -1,    -1,    58,    59,    60,    61,    50,
+-      -1,    52,    53,    54,    55,    56,    57,    -1,    -1,    -1,
+-      -1,    62,    63,    64,    65,    66,    67,    68,    81,    82,
+-      83,    84,    85,    86,    87,    76,    -1,    -1,    -1,    92,
+-      93,    94,    95,    -1,    -1,    98,    -1,    88,    89,    90,
+-      -1,    -1,    -1,     1,    -1,    96,    97,    -1,    -1,   100,
+-     101,   102,   103,    11,    -1,    13,    14,    15,    16,    17,
+-      -1,    -1,    20,    21,    22,    23,    24,    -1,    26,    27,
+-      28,    29,    30,    31,    -1,    -1,    -1,    -1,    36,    -1,
+-      -1,    -1,    -1,    -1,    -1,    -1,    58,    59,    60,    61,
+-      -1,    -1,    50,    -1,    52,    53,    54,    55,    56,    57,
+-      -1,    -1,    -1,    -1,    62,    63,    64,    65,    66,    67,
+-      68,    83,    84,    85,    86,    87,    -1,    -1,    76,    -1,
+-      92,    93,    94,    95,    -1,    -1,    98,    -1,    -1,    -1,
+-      88,    89,    90,    -1,    -1,    -1,    -1,    -1,    96,    97,
+-      -1,    99,   100,    -1,   102,   103,     9,    -1,    11,    -1,
+-      13,    14,    15,    16,    17,    -1,    -1,    20,    21,    22,
+-      23,    24,    25,    26,    27,    28,    29,    30,    31,    -1,
+-      -1,    -1,    -1,    36,    -1,    -1,    -1,    -1,    -1,    -1,
+-      58,    59,    60,    61,    -1,    -1,    -1,    50,    -1,    52,
+-      53,    54,    55,    56,    57,    -1,    -1,    -1,    -1,    62,
+-      63,    64,    65,    66,    67,    68,    84,    85,    86,    87,
+-      -1,    -1,    -1,    76,    92,    93,    94,    95,    -1,    -1,
+-      98,    -1,    -1,    -1,    -1,    88,    89,    90,    -1,    -1,
+-      -1,    -1,    -1,    96,    97,    -1,    -1,   100,    -1,   102,
+-     103,     9,    -1,    11,    -1,    13,    14,    15,    16,    17,
+-      -1,    -1,    20,    21,    22,    23,    24,    -1,    26,    27,
+-      28,    29,    30,    31,    -1,    -1,    -1,    -1,    36,    -1,
+-      -1,    -1,    -1,    -1,    -1,    58,    59,    60,    61,    -1,
+-      -1,    -1,    50,    -1,    52,    53,    54,    55,    56,    57,
+-      -1,    -1,    -1,    -1,    62,    63,    64,    65,    66,    67,
+-      68,    -1,    85,    86,    87,    -1,    -1,    -1,    76,    92,
+-      93,    94,    95,    -1,    -1,    98,    -1,    -1,    -1,    -1,
+-      88,    89,    90,    -1,    -1,    -1,    -1,    -1,    96,    97,
+-      -1,    -1,   100,    -1,   102,   103,    11,    12,    13,    14,
+-      15,    16,    17,    -1,    -1,    20,    21,    22,    23,    24,
+-      -1,    26,    27,    28,    29,    30,    31,    -1,    -1,    -1,
+-      -1,    36,    -1,    -1,    -1,    -1,    -1,    -1,    58,    59,
+-      60,    61,    -1,    -1,    -1,    50,    -1,    52,    53,    54,
+-      55,    56,    57,    -1,    -1,    -1,    -1,    62,    63,    64,
+-      65,    66,    67,    68,    -1,    -1,    86,    87,    -1,    -1,
+-      -1,    76,    92,    93,    94,    95,    -1,    -1,    98,    -1,
+-      -1,    -1,    -1,    88,    89,    90,    -1,    -1,    -1,    -1,
+-      -1,    96,    97,    -1,    -1,   100,    -1,   102,   103,    11,
++      -1,    88,    89,    -1,    91,    -1,    93,    94,    -1,     1,
++      -1,    -1,    -1,   100,   101,   102,   103,     9,    10,    11,
+       -1,    13,    14,    15,    16,    17,    -1,    -1,    20,    21,
+       22,    23,    24,    -1,    26,    27,    28,    29,    30,    31,
+-      -1,    -1,    -1,    -1,    36,    -1,    -1,    -1,    -1,    -1,
+-      -1,    58,    -1,    60,    61,    -1,    -1,    -1,    50,    -1,
++      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
++      42,    -1,    -1,    -1,    46,    47,    48,    49,    50,    -1,
++      52,    53,    54,    55,    56,    57,    -1,    -1,    -1,    -1,
++      62,    63,    64,    65,    66,    67,    68,    -1,    -1,    -1,
++      -1,    -1,    -1,    -1,    76,    -1,    -1,    -1,    -1,    -1,
++      -1,    -1,    -1,    -1,    -1,    -1,    88,    89,    -1,    91,
++      -1,    93,    94,    -1,     1,    -1,    -1,    -1,   100,   101,
++     102,   103,     9,    10,    11,    -1,    13,    14,    15,    16,
++      17,    -1,    -1,    20,    21,    22,    23,    24,    -1,    26,
++      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
++      37,    38,    39,    40,    41,    42,    -1,    -1,    -1,    46,
++      47,    48,    49,    50,    -1,    52,    53,    54,    55,    56,
++      57,    -1,    -1,    -1,    -1,    62,    63,    64,    65,    66,
++      67,    68,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    76,
++      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
++      -1,    88,    89,    -1,    91,    -1,    93,    94,    -1,     1,
++      -1,    -1,    -1,   100,   101,   102,   103,     9,    10,    11,
++      -1,    13,    14,    15,    16,    17,    -1,    -1,    20,    21,
++      22,    23,    24,    -1,    26,    27,    28,    29,    30,    31,
++      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
++      42,    -1,    -1,    -1,    46,    47,    48,    49,    50,    -1,
++      52,    53,    54,    55,    56,    57,    -1,    -1,    -1,    -1,
++      62,    63,    64,    65,    66,    67,    68,    -1,    -1,    -1,
++      -1,    -1,    -1,    -1,    76,    -1,    -1,    -1,    -1,    -1,
++      -1,    -1,    -1,    -1,    -1,    -1,    88,    89,    -1,    91,
++      -1,    93,    94,    -1,     1,    -1,    -1,    -1,   100,   101,
++     102,   103,     9,    -1,    11,    -1,    13,    14,    15,    16,
++      17,    -1,    -1,    20,    21,    22,    23,    24,    -1,    26,
++      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
++      37,    38,    39,    40,    41,    42,    -1,    -1,    -1,    46,
++      47,    48,    49,    50,    -1,    52,    53,    54,    55,    56,
++      57,    -1,    -1,    -1,    -1,    62,    63,    64,    65,    66,
++      67,    68,    -1,    -1,    71,    -1,    -1,    -1,    -1,    76,
++      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
++      -1,    88,    89,    -1,    91,    -1,    93,    94,    -1,     1,
++      -1,    -1,    -1,   100,   101,   102,   103,     9,    -1,    11,
++      -1,    13,    14,    15,    16,    17,    -1,    -1,    20,    21,
++      22,    23,    24,    -1,    26,    27,    28,    29,    30,    31,
++      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
++      42,    -1,    -1,    -1,    46,    47,    48,    49,    50,    -1,
+       52,    53,    54,    55,    56,    57,    -1,    -1,    -1,    -1,
+-      62,    63,    64,    65,    66,    67,    68,    -1,    -1,    86,
+-      87,    -1,    -1,    -1,    76,    92,    93,    94,    95,    -1,
+-      -1,    98,    -1,    -1,    -1,    -1,    88,    89,    90,    -1,
+-      -1,    -1,    -1,    -1,    96,    97,    -1,    -1,   100,   101,
+-     102,   103,    11,    -1,    13,    14,    15,    16,    17,    -1,
++      62,    63,    64,    65,    66,    67,    68,    -1,    -1,    -1,
++      -1,    -1,    -1,    -1,    76,    -1,    -1,    -1,    -1,    -1,
++      -1,    -1,    -1,    -1,    -1,    -1,    88,    89,    -1,    91,
++      -1,    93,    94,    -1,     1,    -1,    -1,    -1,   100,   101,
++     102,   103,     9,    -1,    11,    -1,    13,    14,    15,    16,
++      17,    -1,    -1,    20,    21,    22,    23,    24,    -1,    26,
++      27,    28,    29,    30,    31,    32,    -1,    34,    35,    36,
++      37,    38,    39,    40,    41,    42,    -1,    -1,    -1,    46,
++      47,    48,    49,    50,    -1,    52,    53,    54,    55,    56,
++      57,    -1,    -1,    -1,    -1,    62,    63,    64,    65,    66,
++      67,    68,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    76,
++      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
++      -1,    88,    89,    -1,    91,    -1,    93,    94,     1,    -1,
++      -1,    -1,    -1,   100,   101,   102,   103,    -1,    11,    -1,
++      13,    14,    15,    16,    17,    -1,    -1,    20,    21,    22,
++      23,    24,    -1,    26,    27,    28,    29,    30,    31,    -1,
++      -1,    -1,    -1,    36,    -1,    -1,    51,    -1,    -1,    -1,
++      -1,    -1,    -1,    58,    59,    60,    61,    50,    -1,    52,
++      53,    54,    55,    56,    57,    -1,    -1,    -1,    -1,    62,
++      63,    64,    65,    66,    67,    68,    81,    82,    83,    84,
++      85,    86,    87,    76,    -1,    -1,    -1,    92,    -1,    -1,
++      95,    96,    97,    98,    -1,    88,    89,    -1,    91,    -1,
++      93,    94,     1,    -1,    -1,    -1,    -1,   100,   101,   102,
++     103,    -1,    11,    -1,    13,    14,    15,    16,    17,    -1,
+       -1,    20,    21,    22,    23,    24,    -1,    26,    27,    28,
+       29,    30,    31,    -1,    -1,    -1,    -1,    36,    -1,    -1,
+-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
++      -1,    -1,    -1,    -1,    -1,    58,    59,    60,    61,    -1,
++      -1,    50,    -1,    52,    53,    54,    55,    56,    57,    -1,
++      -1,    -1,    -1,    62,    63,    64,    65,    66,    67,    68,
++      83,    84,    85,    86,    87,    -1,    -1,    76,    -1,    92,
++      -1,    -1,    95,    96,    97,    98,    -1,    -1,    -1,    88,
++      89,    -1,    91,    -1,    93,    94,    -1,    -1,    -1,    -1,
++      99,   100,    -1,   102,   103,     9,    -1,    11,    -1,    13,
++      14,    15,    16,    17,    -1,    -1,    20,    21,    22,    23,
++      24,    25,    26,    27,    28,    29,    30,    31,    -1,    -1,
++      -1,    -1,    36,    -1,    -1,    -1,    -1,    -1,    -1,    58,
++      59,    60,    61,    -1,    -1,    -1,    50,    -1,    52,    53,
++      54,    55,    56,    57,    -1,    -1,    -1,    -1,    62,    63,
++      64,    65,    66,    67,    68,    84,    85,    86,    87,    -1,
++      -1,    -1,    76,    92,    -1,    -1,    95,    96,    97,    98,
++      -1,    -1,    -1,    -1,    88,    89,    -1,    91,    -1,    93,
++      94,    -1,    -1,    -1,    -1,    -1,   100,    -1,   102,   103,
++       9,    -1,    11,    -1,    13,    14,    15,    16,    17,    -1,
++      -1,    20,    21,    22,    23,    24,    -1,    26,    27,    28,
++      29,    30,    31,    -1,    -1,    -1,    -1,    36,    -1,    -1,
++      -1,    -1,    -1,    -1,    58,    59,    60,    61,    -1,    -1,
+       -1,    50,    -1,    52,    53,    54,    55,    56,    57,    -1,
+       -1,    -1,    -1,    62,    63,    64,    65,    66,    67,    68,
+-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    76,    -1,    -1,
+-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    88,
+-      89,    90,    -1,    -1,    -1,    -1,    -1,    96,    97,    -1,
+-      99,   100,    -1,   102,   103,    11,    -1,    13,    14,    15,
++      -1,    85,    86,    87,    -1,    -1,    -1,    76,    92,    -1,
++      -1,    95,    96,    97,    98,    -1,    -1,    -1,    -1,    88,
++      89,    -1,    91,    -1,    93,    94,    -1,    -1,    -1,    -1,
++      -1,   100,    -1,   102,   103,    11,    12,    13,    14,    15,
+       16,    17,    -1,    -1,    20,    21,    22,    23,    24,    -1,
+       26,    27,    28,    29,    30,    31,    -1,    -1,    -1,    -1,
+-      36,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
++      36,    -1,    -1,    -1,    -1,    58,    59,    60,    61,    -1,
+       -1,    -1,    -1,    -1,    50,    -1,    52,    53,    54,    55,
+       56,    57,    -1,    -1,    -1,    -1,    62,    63,    64,    65,
+-      66,    67,    68,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+-      76,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+-      -1,    -1,    88,    89,    90,    -1,    -1,    -1,    -1,    -1,
+-      96,    97,    -1,    99,   100,    -1,   102,   103,    11,    -1,
++      66,    67,    68,    86,    87,    -1,    -1,    -1,    -1,    92,
++      76,    -1,    95,    96,    97,    98,    -1,    -1,    -1,    -1,
++      -1,    -1,    88,    89,    -1,    91,    -1,    93,    94,    -1,
++      -1,    -1,    -1,    -1,   100,    -1,   102,   103,    11,    -1,
+       13,    14,    15,    16,    17,    -1,    -1,    20,    21,    22,
+       23,    24,    -1,    26,    27,    28,    29,    30,    31,    -1,
+-      -1,    -1,    -1,    36,    -1,    -1,    -1,    -1,    -1,    -1,
+-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    50,    -1,    52,
++      -1,    -1,    -1,    36,    -1,    -1,    -1,    -1,    58,    59,
++      60,    61,    -1,    -1,    -1,    -1,    -1,    50,    -1,    52,
+       53,    54,    55,    56,    57,    -1,    -1,    -1,    -1,    62,
+-      63,    64,    65,    66,    67,    68,    -1,    -1,    -1,    -1,
+-      -1,    -1,    -1,    76,    -1,    -1,    -1,    -1,    -1,    -1,
+-      -1,    -1,    -1,    -1,    -1,    88,    89,    90,    -1,    -1,
+-      -1,    -1,    -1,    96,    97,    -1,    99,   100,    -1,   102,
++      63,    64,    65,    66,    67,    68,    86,    87,    -1,    -1,
++      -1,    -1,    92,    76,    -1,    95,    96,    97,    98,    -1,
++      -1,    -1,    -1,    -1,    -1,    88,    89,    -1,    91,    -1,
++      93,    94,    -1,    -1,    -1,    -1,    -1,   100,   101,   102,
+      103,    11,    -1,    13,    14,    15,    16,    17,    -1,    -1,
+       20,    21,    22,    23,    24,    -1,    26,    27,    28,    29,
+       30,    31,    -1,    -1,    -1,    -1,    36,    -1,    -1,    -1,
+@@ -1039,7 +824,7 @@ static const yytype_int16 yycheck[] =
+       -1,    -1,    62,    63,    64,    65,    66,    67,    68,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    76,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    88,    89,
+-      90,    -1,    -1,    -1,    -1,    -1,    96,    97,    -1,    99,
++      -1,    91,    -1,    93,    94,    -1,    -1,    -1,    -1,    99,
+      100,    -1,   102,   103,    11,    -1,    13,    14,    15,    16,
+       17,    -1,    -1,    20,    21,    22,    23,    24,    -1,    26,
+       27,    28,    29,    30,    31,    -1,    -1,    -1,    -1,    36,
+@@ -1048,8 +833,8 @@ static const yytype_int16 yycheck[] =
+       57,    -1,    -1,    -1,    -1,    62,    63,    64,    65,    66,
+       67,    68,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    76,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+-      -1,    88,    89,    90,    -1,    -1,    -1,    -1,    -1,    96,
+-      97,    -1,    99,   100,    -1,   102,   103,    11,    -1,    13,
++      -1,    88,    89,    -1,    91,    -1,    93,    94,    -1,    -1,
++      -1,    -1,    99,   100,    -1,   102,   103,    11,    -1,    13,
+       14,    15,    16,    17,    -1,    -1,    20,    21,    22,    23,
+       24,    -1,    26,    27,    28,    29,    30,    31,    -1,    -1,
+       -1,    -1,    36,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+@@ -1057,33 +842,60 @@ static const yytype_int16 yycheck[] =
+       54,    55,    56,    57,    -1,    -1,    -1,    -1,    62,    63,
+       64,    65,    66,    67,    68,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    76,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+-      -1,    -1,    -1,    -1,    88,    89,    90,    -1,    -1,    -1,
+-      -1,    -1,    96,    97,    -1,    99,   100,    -1,   102,   103,
++      -1,    -1,    -1,    -1,    88,    89,    -1,    91,    -1,    93,
++      94,    -1,    -1,    -1,    -1,    99,   100,    -1,   102,   103,
+       11,    -1,    13,    14,    15,    16,    17,    -1,    -1,    20,
+       21,    22,    23,    24,    -1,    26,    27,    28,    29,    30,
+       31,    -1,    -1,    -1,    -1,    36,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    50,
+       -1,    52,    53,    54,    55,    56,    57,    -1,    -1,    -1,
+       -1,    62,    63,    64,    65,    66,    67,    68,    -1,    -1,
+-      -1,    -1,    -1,    -1,    -1,    76,    51,    -1,    -1,    -1,
+-      -1,    -1,    -1,    58,    59,    60,    61,    88,    89,    90,
+-      -1,    -1,    -1,    -1,    -1,    96,    97,    -1,    -1,   100,
+-      -1,   102,   103,    78,    79,    80,    81,    82,    83,    84,
+-      85,    86,    87,    -1,    -1,    -1,    -1,    92,    93,    94,
+-      95,    51,    -1,    98,    -1,    -1,    -1,    -1,    58,    59,
+-      60,    61,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    78,    79,
+-      -1,    81,    82,    83,    84,    85,    86,    87,    -1,    -1,
+-      -1,    -1,    92,    93,    94,    95,    51,    -1,    98,    -1,
+-      -1,    -1,    -1,    58,    59,    60,    61,    -1,    -1,    -1,
++      -1,    -1,    -1,    -1,    -1,    76,    -1,    -1,    -1,    -1,
++      -1,    -1,    -1,    -1,    -1,    -1,    -1,    88,    89,    -1,
++      91,    -1,    93,    94,    -1,    -1,    -1,    -1,    99,   100,
++      -1,   102,   103,    11,    -1,    13,    14,    15,    16,    17,
++      -1,    -1,    20,    21,    22,    23,    24,    -1,    26,    27,
++      28,    29,    30,    31,    -1,    -1,    -1,    -1,    36,    -1,
++      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
++      -1,    -1,    50,    -1,    52,    53,    54,    55,    56,    57,
++      -1,    -1,    -1,    -1,    62,    63,    64,    65,    66,    67,
++      68,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    76,    -1,
++      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
++      88,    89,    -1,    91,    -1,    93,    94,    -1,    -1,    -1,
++      -1,    99,   100,    -1,   102,   103,    11,    -1,    13,    14,
++      15,    16,    17,    -1,    -1,    20,    21,    22,    23,    24,
++      -1,    26,    27,    28,    29,    30,    31,    -1,    -1,    -1,
++      -1,    36,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
++      -1,    -1,    -1,    -1,    -1,    50,    -1,    52,    53,    54,
++      55,    56,    57,    -1,    -1,    -1,    -1,    62,    63,    64,
++      65,    66,    67,    68,    -1,    -1,    -1,    -1,    -1,    -1,
++      -1,    76,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
++      -1,    -1,    -1,    88,    89,    -1,    91,    -1,    93,    94,
++      -1,    -1,    -1,    -1,    99,   100,    -1,   102,   103,    11,
++      -1,    13,    14,    15,    16,    17,    -1,    -1,    20,    21,
++      22,    23,    24,    -1,    26,    27,    28,    29,    30,    31,
++      -1,    -1,    -1,    -1,    36,    -1,    -1,    -1,    -1,    -1,
++      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    50,    -1,
++      52,    53,    54,    55,    56,    57,    -1,    -1,    -1,    -1,
++      62,    63,    64,    65,    66,    67,    68,    -1,    -1,    -1,
++      -1,    -1,    -1,    -1,    76,    51,    -1,    -1,    -1,    -1,
++      -1,    -1,    58,    59,    60,    61,    88,    89,    -1,    91,
++      -1,    93,    94,    -1,    -1,    -1,    -1,    -1,   100,    -1,
++     102,   103,    78,    79,    80,    81,    82,    83,    84,    85,
++      86,    87,    -1,    -1,    -1,    -1,    92,    51,    -1,    95,
++      96,    97,    98,    -1,    58,    59,    60,    61,    -1,    -1,
++      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
++      -1,    -1,    -1,    -1,    78,    79,    -1,    81,    82,    83,
++      84,    85,    86,    87,    -1,    -1,    -1,    -1,    92,    51,
++      -1,    95,    96,    97,    98,    -1,    58,    59,    60,    61,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+-      -1,    -1,    -1,    -1,    79,    -1,    81,    82,    83,    84,
+-      85,    86,    87,    -1,    -1,    -1,    -1,    92,    93,    94,
+-      95,    -1,    -1,    98
++      -1,    -1,    -1,    -1,    -1,    -1,    -1,    79,    -1,    81,
++      82,    83,    84,    85,    86,    87,    -1,    -1,    -1,    -1,
++      92,    -1,    -1,    95,    96,    97,    98
+ };
+ 
+-/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+-   symbol of state STATE-NUM.  */
++  /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
++     symbol of state STATE-NUM.  */
+ static const yytype_uint8 yystos[] =
+ {
+        0,     3,     4,     5,     6,     7,     8,   106,   107,   108,
+@@ -1091,7 +903,7 @@ static const yytype_uint8 yystos[] =
+       16,    17,    20,    21,    22,    23,    24,    26,    27,    28,
+       29,    30,    31,    36,    50,    52,    53,    54,    55,    56,
+       57,    62,    63,    64,    65,    66,    67,    68,    76,    88,
+-      89,    90,    96,    97,   100,   102,   103,   152,   153,   154,
++      89,    91,    93,    94,   100,   102,   103,   152,   153,   154,
+      157,   158,   159,   160,   161,   162,   164,   167,   172,   173,
+      174,   175,   176,   177,   178,   179,   180,     9,   113,     1,
+       32,    34,    35,    37,    38,    39,    40,    41,    42,    46,
+@@ -1104,9 +916,9 @@ static const yytype_uint8 yystos[] =
+      162,   162,   162,   162,   162,    99,   152,   181,   181,    73,
+       74,    75,    77,     9,    11,   100,    51,    58,    59,    60,
+       61,    78,    79,    81,    82,    83,    84,    85,    86,    87,
+-      92,    93,    94,    95,    98,   100,     9,    11,     9,    11,
++      92,    95,    96,    97,    98,   100,     9,    11,     9,    11,
+        9,    11,     9,   115,   144,   145,    20,   142,   100,   100,
+-     100,   100,    67,    90,   100,   173,   100,   100,   113,    45,
++     100,   100,    67,    91,   100,   173,   100,   100,   113,    45,
+      134,   101,    39,    40,    41,    42,    46,    48,   121,   122,
+      120,    12,   166,   100,   100,   152,    99,   113,    23,   115,
+      146,    99,    99,   152,   167,   181,   153,    10,   101,   166,
+@@ -1139,6 +951,68 @@ static const yytype_uint8 yystos[] =
+      118,   116,   134,   140,    71,   133,    99,   116
+ };
+ 
++  /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
++static const yytype_uint8 yyr1[] =
++{
++       0,   105,   107,   106,   108,   106,   109,   106,   110,   106,
++     111,   106,   112,   106,   113,   114,   115,   116,   117,   118,
++     118,   119,   119,   120,   120,   121,   121,   122,   122,   123,
++     122,   124,   122,   122,   125,   122,   122,   122,   122,   122,
++     122,   122,   122,   126,   127,   122,   122,   122,   128,   122,
++     122,   122,   122,   129,   122,   122,   122,   130,   131,   131,
++     132,   132,   132,   132,   132,   132,   132,   132,   133,   133,
++     133,   134,   134,   135,   136,   136,   137,   137,   138,   139,
++     140,   141,   141,   142,   143,   144,   145,   145,   146,   146,
++     147,   147,   147,   148,   148,   150,   149,   151,   151,   152,
++     152,   152,   152,   153,   153,   153,   154,   154,   154,   154,
++     154,   154,   154,   154,   155,   154,   156,   156,   157,   157,
++     157,   157,   157,   157,   157,   157,   157,   157,   157,   157,
++     157,   157,   158,   158,   158,   158,   158,   158,   158,   158,
++     158,   158,   158,   158,   158,   158,   159,   159,   159,   159,
++     159,   159,   159,   159,   159,   160,   160,   160,   160,   160,
++     160,   161,   161,   162,   162,   162,   162,   162,   162,   162,
++     162,   162,   162,   162,   162,   162,   162,   162,   162,   162,
++     162,   162,   162,   162,   162,   162,   162,   162,   162,   162,
++     162,   162,   162,   162,   162,   162,   162,   162,   162,   162,
++     162,   162,   162,   162,   162,   162,   162,   162,   162,   162,
++     162,   163,   162,   162,   162,   162,   162,   164,   164,   165,
++     165,   165,   165,   165,   166,   166,   167,   167,   168,   168,
++     169,   170,   170,   170,   171,   171,   172,   173,   174,   175,
++     176,   176,   177,   178,   178,   179,   179,   180,   180,   181,
++     181,   181,   181
++};
++
++  /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
++static const yytype_uint8 yyr2[] =
++{
++       0,     2,     0,     4,     0,     3,     0,     3,     0,     3,
++       0,     3,     0,     3,     4,     7,     0,     4,     0,     0,
++       2,     0,     2,     1,     1,     2,     2,     1,     4,     0,
++       7,     0,    10,     4,     0,     7,     7,     7,     6,     6,
++       2,     8,     8,     0,     0,    13,     9,     8,     0,    11,
++       9,     7,     2,     0,     8,     2,     1,     2,     0,     3,
++       1,     1,     3,     3,     3,     3,     3,     3,     0,     2,
++       6,     0,     2,     0,     0,     1,     0,     1,     1,     1,
++       1,     1,     0,     0,     0,     0,     1,     1,     0,     1,
++       0,     2,     1,     2,     1,     0,     3,     1,     1,     3,
++       3,     3,     1,     2,     3,     1,     3,     5,     6,     3,
++       3,     5,     2,     4,     0,     5,     1,     1,     5,     4,
++       5,     4,     5,     6,     5,     4,     5,     4,     3,     6,
++       4,     5,     3,     3,     3,     3,     3,     3,     3,     3,
++       3,     3,     3,     3,     3,     3,     2,     2,     2,     2,
++       2,     2,     2,     2,     2,     3,     2,     4,     3,     5,
++       8,     2,     2,     1,     1,     1,     1,     5,     2,     1,
++       2,     3,     1,     2,     1,     1,     1,     1,     1,     1,
++       4,     4,     5,     5,     1,     1,     3,     4,     3,     4,
++       4,     4,     4,     4,     1,     2,     2,     1,     2,     2,
++       1,     2,     1,     2,     1,     3,     1,     3,     1,     3,
++       4,     0,     6,     1,     1,     1,     1,     3,     2,     3,
++       2,     1,     1,     1,     0,     1,     0,     1,     0,     2,
++       1,     1,     1,     1,     1,     1,     2,     2,     2,     2,
++       2,     4,     2,     1,     3,     1,     3,     1,     3,     1,
++       1,     1,     1
++};
++
+ typedef enum {
+ 	toketype_ival, toketype_opval, toketype_pval
+ } toketypes;
+@@ -1176,6 +1050,6 @@ static const toketypes yy_type_tab[] =
+ };
+ 
+ /* Generated from:
+- * 703ebd267cf8ca45f9dee9bc0f4b21511117a0c1dca1c8bc9438ce91950217ae perly.y
++ * 4fd37fdbff6285ba6e9096c2229255ecc6264d2f26835e535cf1c38f387ceae6 perly.y
+  * a4923588f219644801577c514014847e1e5240f49413fa3b89d3306fa4874d07 regen_perly.pl
+  * ex: set ro: */
+diff --git a/perly.y b/perly.y
+index 200964d..8717258 100644
+--- a/perly.y
++++ b/perly.y
+@@ -755,19 +755,31 @@ subscripted:    gelem '{' expr ';' '}'        /* *main::{something} */
+ 					jmaybe($3)); }
+ 	|	term ARROW '(' ')'          /* $subref->() */
+ 			{ $$ = newUNOP(OP_ENTERSUB, OPf_STACKED,
+-				   newCVREF(0, scalar($1))); }
++				   newCVREF(0, scalar($1)));
++			  if (parser->expect == XBLOCK)
++			      parser->expect = XOPERATOR;
++			}
+ 	|	term ARROW '(' expr ')'     /* $subref->(@args) */
+ 			{ $$ = newUNOP(OP_ENTERSUB, OPf_STACKED,
+ 				   op_append_elem(OP_LIST, $4,
+-				       newCVREF(0, scalar($1)))); }
++				       newCVREF(0, scalar($1))));
++			  if (parser->expect == XBLOCK)
++			      parser->expect = XOPERATOR;
++			}
+ 
+ 	|	subscripted '(' expr ')'   /* $foo->{bar}->(@args) */
+ 			{ $$ = newUNOP(OP_ENTERSUB, OPf_STACKED,
+ 				   op_append_elem(OP_LIST, $3,
+-					       newCVREF(0, scalar($1)))); }
++					       newCVREF(0, scalar($1))));
++			  if (parser->expect == XBLOCK)
++			      parser->expect = XOPERATOR;
++			}
+ 	|	subscripted '(' ')'        /* $foo->{bar}->() */
+ 			{ $$ = newUNOP(OP_ENTERSUB, OPf_STACKED,
+-				   newCVREF(0, scalar($1))); }
++				   newCVREF(0, scalar($1)));
++			  if (parser->expect == XBLOCK)
++			      parser->expect = XOPERATOR;
++			}
+ 	|	'(' expr ')' '[' expr ']'            /* list slice */
+ 			{ $$ = newSLICEOP(0, $5, $2); }
+ 	|	QWLIST '[' expr ']'            /* list literal slice */
+diff --git a/t/op/postfixderef.t b/t/op/postfixderef.t
+index 77988bf..fa066aa 100644
+--- a/t/op/postfixderef.t
++++ b/t/op/postfixderef.t
+@@ -16,7 +16,7 @@ BEGIN {
+ 
+ use strict qw(refs subs);
+ 
+-plan(115);
++plan(129);
+ 
+ {
+     no strict 'refs';
+@@ -353,3 +353,26 @@ is "$_->@{foo}", "foo->7 8 9", '->@{ does not interpolate without feature';
+     is "@{[foo->@[0,1]]}", "7 8", '->@[ inside "@{...}"';
+     is "@{[foo->@{foo}]}", "oof", '->@{ inside "@{...}"';
+ }
++
++# parsing of {} subscript as subscript rather than block
++{
++    sub ppp { "qqq" }
++    my $h = { ppp => "pp", qqq => "qq", rrr => 7 };
++    is ${$h}{ppp}, "pp";
++    is ${$h}{"rrr"} - 2, 5;
++    my $ar = [$h];
++    is $ar->[0]->{ppp}, "pp";
++    is $ar->[0]->{"rrr"} - 2, 5;
++    is $ar->[0]{ppp}, "pp";
++    is $ar->[0]{"rrr"} - 2, 5;
++    my $hr = {h=>$h};
++    is $hr->{"h"}->{ppp}, "pp";
++    is $hr->{"h"}->{"rrr"} - 2, 5;
++    is $hr->{"h"}{ppp}, "pp";
++    is $hr->{"h"}{"rrr"} - 2, 5;
++    my $cr = sub { $h };
++    is $cr->()->{ppp}, "pp";
++    is $cr->()->{"rrr"} - 2, 5;
++    is $cr->(){ppp}, "pp";
++    is $cr->(){"rrr"} - 2, 5;
++}
+-- 
+2.13.6
+
diff --git a/SOURCES/perl-5.24.3-fix-tainting-of-s-with-overloaded-replacement.patch b/SOURCES/perl-5.24.3-fix-tainting-of-s-with-overloaded-replacement.patch
new file mode 100644
index 0000000..f01f478
--- /dev/null
+++ b/SOURCES/perl-5.24.3-fix-tainting-of-s-with-overloaded-replacement.patch
@@ -0,0 +1,594 @@
+From a56b6643ac9d2bae70dc93d49a08ba1eafa62c30 Mon Sep 17 00:00:00 2001
+From: Zefram <zefram@fysh.org>
+Date: Sun, 19 Nov 2017 09:15:53 +0000
+Subject: [PATCH] fix tainting of s/// with overloaded replacement
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+The substitution code was trying to track the taintedness of the
+replacement string itself, but it didn't account for the replacement
+being an untainted object with overloading that returns a tainted
+stringification.  It looked at the taintedness of the object value, not
+realising that taint could arise during the string concatenation per se.
+Change the taint checks to look at the actual TAINT_get flag after string
+concatenation.  This may falsely ascribe to the replacement taint that
+actually came from somewhere else, but the end result is the same anyway:
+there's no visible behaviour that distinguishes taint specifically from
+the replacement.  Also remove a related taint check that seems to be
+not needed at all.  Fixes [perl #115266].
+
+Petr Písař: Ported to 5.24.3.
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ pp_ctl.c     |   4 +-
+ pp_hot.c     |   4 +-
+ t/op/taint.t | 429 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
+ 3 files changed, 423 insertions(+), 14 deletions(-)
+
+diff --git a/pp_ctl.c b/pp_ctl.c
+index 9150142..97a4607 100644
+--- a/pp_ctl.c
++++ b/pp_ctl.c
+@@ -218,9 +218,9 @@ PP(pp_substcont)
+ 	SvGETMAGIC(TOPs); /* possibly clear taint on $1 etc: #67962 */
+ 
+     	/* See "how taint works" above pp_subst() */
+-	if (SvTAINTED(TOPs))
+-	    cx->sb_rxtainted |= SUBST_TAINT_REPL;
+ 	sv_catsv_nomg(dstr, POPs);
++	if (UNLIKELY(TAINT_get))
++	    cx->sb_rxtainted |= SUBST_TAINT_REPL;
+ 	if (CxONCE(cx) || s < orig ||
+                 !CALLREGEXEC(rx, s, cx->sb_strend, orig,
+ 			     (s == m), cx->sb_targ, NULL,
+diff --git a/pp_hot.c b/pp_hot.c
+index 243f43a..e80d991 100644
+--- a/pp_hot.c
++++ b/pp_hot.c
+@@ -3004,7 +3004,7 @@ PP(pp_subst)
+ 	    doutf8 = DO_UTF8(dstr);
+ 	}
+ 
+-	if (SvTAINTED(dstr))
++	if (UNLIKELY(TAINT_get))
+ 	    rxtainted |= SUBST_TAINT_REPL;
+     }
+     else {
+@@ -3181,8 +3181,6 @@ PP(pp_subst)
+ 		    sv_catsv(dstr, nsv);
+ 		}
+ 		else sv_catsv(dstr, repl);
+-		if (UNLIKELY(SvTAINTED(repl)))
+-		    rxtainted |= SUBST_TAINT_REPL;
+ 	    }
+ 	    if (once)
+ 		break;
+diff --git a/t/op/taint.t b/t/op/taint.t
+index 846ac23..dbcc418 100644
+--- a/t/op/taint.t
++++ b/t/op/taint.t
+@@ -17,7 +17,7 @@ BEGIN {
+ use strict;
+ use Config;
+ 
+-plan tests => 812;
++plan tests => 1024;
+ 
+ $| = 1;
+ 
+@@ -83,6 +83,8 @@ EndOfCleanup
+ # Sources of taint:
+ #   The empty tainted value, for tainting strings
+ my $TAINT = substr($^X, 0, 0);
++#   A tainted non-empty string
++my $TAINTXYZ = "xyz".$TAINT;
+ #   A tainted zero, useful for tainting numbers
+ my $TAINT0;
+ {
+@@ -565,7 +567,7 @@ my $TEST = 'TEST';
+         is($one, 'abcd',   "$desc: \$1 value");
+     }
+ 
+-    $desc = "substitution with replacement tainted";
++    $desc = "substitution with partial replacement tainted";
+ 
+     $s = 'abcd';
+     $res = $s =~ s/(.+)/xyz$TAINT/;
+@@ -577,7 +579,7 @@ my $TEST = 'TEST';
+     is($res, 1,        "$desc: res value");
+     is($one, 'abcd',   "$desc: \$1 value");
+ 
+-    $desc = "substitution /g with replacement tainted";
++    $desc = "substitution /g with partial replacement tainted";
+ 
+     $s = 'abcd';
+     $res = $s =~ s/(.)/x$TAINT/g;
+@@ -589,7 +591,7 @@ my $TEST = 'TEST';
+     is($res, 4,        "$desc: res value");
+     is($one, 'd',      "$desc: \$1 value");
+ 
+-    $desc = "substitution /ge with replacement tainted";
++    $desc = "substitution /ge with partial replacement tainted";
+ 
+     $s = 'abc';
+     {
+@@ -618,7 +620,7 @@ my $TEST = 'TEST';
+     is($res, 3,        "$desc: res value");
+     is($one, 'c',      "$desc: \$1 value");
+ 
+-    $desc = "substitution /r with replacement tainted";
++    $desc = "substitution /r with partial replacement tainted";
+ 
+     $s = 'abcd';
+     $res = $s =~ s/(.+)/xyz$TAINT/r;
+@@ -630,6 +632,71 @@ my $TEST = 'TEST';
+     is($res, 'xyz',    "$desc: res value");
+     is($one, 'abcd',   "$desc: \$1 value");
+ 
++    $desc = "substitution with whole replacement tainted";
++
++    $s = 'abcd';
++    $res = $s =~ s/(.+)/$TAINTXYZ/;
++    $one = $1;
++    is_tainted($s,     "$desc: s tainted");
++    isnt_tainted($res, "$desc: res not tainted");
++    isnt_tainted($one, "$desc: \$1 not tainted");
++    is($s,  'xyz',     "$desc: s value");
++    is($res, 1,        "$desc: res value");
++    is($one, 'abcd',   "$desc: \$1 value");
++
++    $desc = "substitution /g with whole replacement tainted";
++
++    $s = 'abcd';
++    $res = $s =~ s/(.)/$TAINTXYZ/g;
++    $one = $1;
++    is_tainted($s,     "$desc: s tainted");
++    isnt_tainted($res, "$desc: res not tainted");
++    isnt_tainted($one, "$desc: \$1 not tainted");
++    is($s,  'xyz' x 4, "$desc: s value");
++    is($res, 4,        "$desc: res value");
++    is($one, 'd',      "$desc: \$1 value");
++
++    $desc = "substitution /ge with whole replacement tainted";
++
++    $s = 'abc';
++    {
++	my $i = 0;
++	my $j;
++	$res = $s =~ s{(.)}{
++		    $j = $i; # make sure code not tainted
++		    $one = $1;
++		    isnt_tainted($j, "$desc: code not tainted within /e");
++		    $i++;
++		    if ($i == 1) {
++			isnt_tainted($s,   "$desc: s not tainted loop 1");
++		    }
++		    else {
++			is_tainted($s,     "$desc: s tainted loop $i");
++		    }
++		    isnt_tainted($one, "$desc: \$1 not tainted within /e");
++		    $TAINTXYZ;
++		}ge;
++	$one = $1;
++    }
++    is_tainted($s,     "$desc: s tainted");
++    isnt_tainted($res, "$desc: res tainted");
++    isnt_tainted($one, "$desc: \$1 not tainted");
++    is($s,  'xyz' x 3, "$desc: s value");
++    is($res, 3,        "$desc: res value");
++    is($one, 'c',      "$desc: \$1 value");
++
++    $desc = "substitution /r with whole replacement tainted";
++
++    $s = 'abcd';
++    $res = $s =~ s/(.+)/$TAINTXYZ/r;
++    $one = $1;
++    isnt_tainted($s,   "$desc: s not tainted");
++    is_tainted($res,   "$desc: res tainted");
++    isnt_tainted($one, "$desc: \$1 not tainted");
++    is($s,   'abcd',   "$desc: s value");
++    is($res, 'xyz',    "$desc: res value");
++    is($one, 'abcd',   "$desc: \$1 value");
++
+     {
+ 	# now do them all again with "use re 'taint"
+ 
+@@ -955,7 +1022,7 @@ my $TEST = 'TEST';
+         is($one, 'abcd',   "$desc: \$1 value");
+     }
+ 
+-	$desc = "use re 'taint': substitution with replacement tainted";
++	$desc = "use re 'taint': substitution with partial replacement tainted";
+ 
+ 	$s = 'abcd';
+ 	$res = $s =~ s/(.+)/xyz$TAINT/;
+@@ -967,7 +1034,7 @@ my $TEST = 'TEST';
+ 	is($res, 1,        "$desc: res value");
+ 	is($one, 'abcd',   "$desc: \$1 value");
+ 
+-	$desc = "use re 'taint': substitution /g with replacement tainted";
++	$desc = "use re 'taint': substitution /g with partial replacement tainted";
+ 
+ 	$s = 'abcd';
+ 	$res = $s =~ s/(.)/x$TAINT/g;
+@@ -979,7 +1046,7 @@ my $TEST = 'TEST';
+ 	is($res, 4,        "$desc: res value");
+ 	is($one, 'd',      "$desc: \$1 value");
+ 
+-	$desc = "use re 'taint': substitution /ge with replacement tainted";
++	$desc = "use re 'taint': substitution /ge with partial replacement tainted";
+ 
+ 	$s = 'abc';
+ 	{
+@@ -1008,7 +1075,7 @@ my $TEST = 'TEST';
+ 	is($res, 3,        "$desc: res value");
+ 	is($one, 'c',      "$desc: \$1 value");
+ 
+-	$desc = "use re 'taint': substitution /r with replacement tainted";
++	$desc = "use re 'taint': substitution /r with partial replacement tainted";
+ 
+ 	$s = 'abcd';
+ 	$res = $s =~ s/(.+)/xyz$TAINT/r;
+@@ -1020,6 +1087,71 @@ my $TEST = 'TEST';
+ 	is($res, 'xyz',    "$desc: res value");
+ 	is($one, 'abcd',   "$desc: \$1 value");
+ 
++	$desc = "use re 'taint': substitution with whole replacement tainted";
++
++	$s = 'abcd';
++	$res = $s =~ s/(.+)/$TAINTXYZ/;
++	$one = $1;
++	is_tainted($s,     "$desc: s tainted");
++	isnt_tainted($res, "$desc: res not tainted");
++	isnt_tainted($one, "$desc: \$1 not tainted");
++	is($s,  'xyz',     "$desc: s value");
++	is($res, 1,        "$desc: res value");
++	is($one, 'abcd',   "$desc: \$1 value");
++
++	$desc = "use re 'taint': substitution /g with whole replacement tainted";
++
++	$s = 'abcd';
++	$res = $s =~ s/(.)/$TAINTXYZ/g;
++	$one = $1;
++	is_tainted($s,     "$desc: s tainted");
++	isnt_tainted($res, "$desc: res not tainted");
++	isnt_tainted($one, "$desc: \$1 not tainted");
++	is($s,  'xyz' x 4, "$desc: s value");
++	is($res, 4,        "$desc: res value");
++	is($one, 'd',      "$desc: \$1 value");
++
++	$desc = "use re 'taint': substitution /ge with whole replacement tainted";
++
++	$s = 'abc';
++	{
++	    my $i = 0;
++	    my $j;
++	    $res = $s =~ s{(.)}{
++			$j = $i; # make sure code not tainted
++			$one = $1;
++			isnt_tainted($j, "$desc: code not tainted within /e");
++			$i++;
++			if ($i == 1) {
++			    isnt_tainted($s,   "$desc: s not tainted loop 1");
++			}
++			else {
++			    is_tainted($s,     "$desc: s tainted loop $i");
++			}
++			    isnt_tainted($one, "$desc: \$1 not tainted");
++			$TAINTXYZ;
++		    }ge;
++	    $one = $1;
++	}
++	is_tainted($s,     "$desc: s tainted");
++	isnt_tainted($res, "$desc: res tainted");
++	isnt_tainted($one, "$desc: \$1 not tainted");
++	is($s,  'xyz' x 3, "$desc: s value");
++	is($res, 3,        "$desc: res value");
++	is($one, 'c',      "$desc: \$1 value");
++
++	$desc = "use re 'taint': substitution /r with whole replacement tainted";
++
++	$s = 'abcd';
++	$res = $s =~ s/(.+)/$TAINTXYZ/r;
++	$one = $1;
++	isnt_tainted($s,   "$desc: s not tainted");
++	is_tainted($res,   "$desc: res tainted");
++	isnt_tainted($one, "$desc: \$1 not tainted");
++	is($s,   'abcd',   "$desc: s value");
++	is($res, 'xyz',    "$desc: res value");
++	is($one, 'abcd',   "$desc: \$1 value");
++
+         # [perl #121854] match taintedness became sticky
+         # when one match has a taintess result, subseqent matches
+         # using the same pattern shouldn't necessarily be tainted
+@@ -2408,6 +2540,285 @@ is eval { eval $::x.1 }, 1, 'reset does not taint undef';
+ }
+ 
+ 
++# taint passing through overloading
++package OvTaint {
++    sub new { bless({ t => $_[1] }, $_[0]) }
++    use overload '""' => sub { $_[0]->{t} ? "hi".$TAINT : "hello" };
++}
++my $ovclean = OvTaint->new(0);
++my $ovtaint = OvTaint->new(1);
++isnt_tainted("$ovclean", "overload preserves cleanliness");
++is_tainted("$ovtaint", "overload preserves taint");
++
++# substitutions with overloaded replacement
++{
++    my ($desc, $s, $res, $one);
++
++    $desc = "substitution with partial replacement overloaded and clean";
++    $s = 'abcd';
++    $res = $s =~ s/(.+)/xyz$ovclean/;
++    $one = $1;
++    isnt_tainted($s,   "$desc: s not tainted");
++    isnt_tainted($res, "$desc: res not tainted");
++    isnt_tainted($one, "$desc: \$1 not tainted");
++    is($s, 'xyzhello', "$desc: s value");
++    is($res, 1,        "$desc: res value");
++    is($one, 'abcd',   "$desc: \$1 value");
++
++    $desc = "substitution with partial replacement overloaded and tainted";
++    $s = 'abcd';
++    $res = $s =~ s/(.+)/xyz$ovtaint/;
++    $one = $1;
++    is_tainted($s,     "$desc: s tainted");
++    isnt_tainted($res, "$desc: res not tainted");
++    isnt_tainted($one, "$desc: \$1 not tainted");
++    is($s, 'xyzhi',    "$desc: s value");
++    is($res, 1,        "$desc: res value");
++    is($one, 'abcd',   "$desc: \$1 value");
++
++    $desc = "substitution with whole replacement overloaded and clean";
++    $s = 'abcd';
++    $res = $s =~ s/(.+)/$ovclean/;
++    $one = $1;
++    isnt_tainted($s,   "$desc: s not tainted");
++    isnt_tainted($res, "$desc: res not tainted");
++    isnt_tainted($one, "$desc: \$1 not tainted");
++    is($s, 'hello',    "$desc: s value");
++    is($res, 1,        "$desc: res value");
++    is($one, 'abcd',   "$desc: \$1 value");
++
++    $desc = "substitution with whole replacement overloaded and tainted";
++    $s = 'abcd';
++    $res = $s =~ s/(.+)/$ovtaint/;
++    $one = $1;
++    is_tainted($s,     "$desc: s tainted");
++    isnt_tainted($res, "$desc: res not tainted");
++    isnt_tainted($one, "$desc: \$1 not tainted");
++    is($s, 'hi',       "$desc: s value");
++    is($res, 1,        "$desc: res value");
++    is($one, 'abcd',   "$desc: \$1 value");
++
++    $desc = "substitution /e with partial replacement overloaded and clean";
++    $s = 'abcd';
++    $res = $s =~ s/(.+)/"xyz".$ovclean/e;
++    $one = $1;
++    isnt_tainted($s,   "$desc: s not tainted");
++    isnt_tainted($res, "$desc: res not tainted");
++    isnt_tainted($one, "$desc: \$1 not tainted");
++    is($s, 'xyzhello', "$desc: s value");
++    is($res, 1,        "$desc: res value");
++    is($one, 'abcd',   "$desc: \$1 value");
++
++    $desc = "substitution /e with partial replacement overloaded and tainted";
++    $s = 'abcd';
++    $res = $s =~ s/(.+)/"xyz".$ovtaint/e;
++    $one = $1;
++    is_tainted($s,     "$desc: s tainted");
++    isnt_tainted($res, "$desc: res not tainted");
++    isnt_tainted($one, "$desc: \$1 not tainted");
++    is($s, 'xyzhi',    "$desc: s value");
++    is($res, 1,        "$desc: res value");
++    is($one, 'abcd',   "$desc: \$1 value");
++
++    $desc = "substitution /e with whole replacement overloaded and clean";
++    $s = 'abcd';
++    $res = $s =~ s/(.+)/$ovclean/e;
++    $one = $1;
++    isnt_tainted($s,   "$desc: s not tainted");
++    isnt_tainted($res, "$desc: res not tainted");
++    isnt_tainted($one, "$desc: \$1 not tainted");
++    is($s, 'hello',    "$desc: s value");
++    is($res, 1,        "$desc: res value");
++    is($one, 'abcd',   "$desc: \$1 value");
++
++    $desc = "substitution /e with whole replacement overloaded and tainted";
++    $s = 'abcd';
++    $res = $s =~ s/(.+)/$ovtaint/e;
++    $one = $1;
++    is_tainted($s,     "$desc: s tainted");
++    isnt_tainted($res, "$desc: res not tainted");
++    isnt_tainted($one, "$desc: \$1 not tainted");
++    is($s, 'hi',       "$desc: s value");
++    is($res, 1,        "$desc: res value");
++    is($one, 'abcd',   "$desc: \$1 value");
++
++    $desc = "substitution /e with extra code and partial replacement overloaded and clean";
++    $s = 'abcd';
++    $res = $s =~ s/(.+)/(my $z++), "xyz".$ovclean/e;
++    $one = $1;
++    isnt_tainted($s,   "$desc: s not tainted");
++    isnt_tainted($res, "$desc: res not tainted");
++    isnt_tainted($one, "$desc: \$1 not tainted");
++    is($s, 'xyzhello', "$desc: s value");
++    is($res, 1,        "$desc: res value");
++    is($one, 'abcd',   "$desc: \$1 value");
++
++    $desc = "substitution /e with extra code and partial replacement overloaded and tainted";
++    $s = 'abcd';
++    $res = $s =~ s/(.+)/(my $z++), "xyz".$ovtaint/e;
++    $one = $1;
++    is_tainted($s,     "$desc: s tainted");
++    isnt_tainted($res, "$desc: res not tainted");
++    isnt_tainted($one, "$desc: \$1 not tainted");
++    is($s, 'xyzhi',    "$desc: s value");
++    is($res, 1,        "$desc: res value");
++    is($one, 'abcd',   "$desc: \$1 value");
++
++    $desc = "substitution /e with extra code and whole replacement overloaded and clean";
++    $s = 'abcd';
++    $res = $s =~ s/(.+)/(my $z++), $ovclean/e;
++    $one = $1;
++    isnt_tainted($s,   "$desc: s not tainted");
++    isnt_tainted($res, "$desc: res not tainted");
++    isnt_tainted($one, "$desc: \$1 not tainted");
++    is($s, 'hello',    "$desc: s value");
++    is($res, 1,        "$desc: res value");
++    is($one, 'abcd',   "$desc: \$1 value");
++
++    $desc = "substitution /e with extra code and whole replacement overloaded and tainted";
++    $s = 'abcd';
++    $res = $s =~ s/(.+)/(my $z++), $ovtaint/e;
++    $one = $1;
++    is_tainted($s,     "$desc: s tainted");
++    isnt_tainted($res, "$desc: res not tainted");
++    isnt_tainted($one, "$desc: \$1 not tainted");
++    is($s, 'hi',       "$desc: s value");
++    is($res, 1,        "$desc: res value");
++    is($one, 'abcd',   "$desc: \$1 value");
++
++    $desc = "substitution /r with partial replacement overloaded and clean";
++    $s = 'abcd';
++    $res = $s =~ s/(.+)/xyz$ovclean/r;
++    $one = $1;
++    isnt_tainted($s,   "$desc: s not tainted");
++    isnt_tainted($res, "$desc: res not tainted");
++    isnt_tainted($one, "$desc: \$1 not tainted");
++    is($s, 'abcd',     "$desc: s value");
++    is($res, 'xyzhello', "$desc: res value");
++    is($one, 'abcd',   "$desc: \$1 value");
++
++    $desc = "substitution /r with partial replacement overloaded and tainted";
++    $s = 'abcd';
++    $res = $s =~ s/(.+)/xyz$ovtaint/r;
++    $one = $1;
++    isnt_tainted($s,   "$desc: s not tainted");
++    is_tainted($res,   "$desc: res tainted");
++    isnt_tainted($one, "$desc: \$1 not tainted");
++    is($s, 'abcd',     "$desc: s value");
++    is($res, 'xyzhi',  "$desc: res value");
++    is($one, 'abcd',   "$desc: \$1 value");
++
++    $desc = "substitution /r with whole replacement overloaded and clean";
++    $s = 'abcd';
++    $res = $s =~ s/(.+)/$ovclean/r;
++    $one = $1;
++    isnt_tainted($s,   "$desc: s not tainted");
++    isnt_tainted($res, "$desc: res not tainted");
++    isnt_tainted($one, "$desc: \$1 not tainted");
++    is($s, 'abcd',     "$desc: s value");
++    is($res, 'hello',  "$desc: res value");
++    is($one, 'abcd',   "$desc: \$1 value");
++
++    $desc = "substitution /r with whole replacement overloaded and tainted";
++    $s = 'abcd';
++    $res = $s =~ s/(.+)/$ovtaint/r;
++    $one = $1;
++    isnt_tainted($s,   "$desc: s not tainted");
++    is_tainted($res,   "$desc: res tainted");
++    isnt_tainted($one, "$desc: \$1 not tainted");
++    is($s, 'abcd',     "$desc: s value");
++    is($res, 'hi',     "$desc: res value");
++    is($one, 'abcd',   "$desc: \$1 value");
++
++    $desc = "substitution /g with partial replacement overloaded and clean";
++    $s = 'abcd';
++    $res = $s =~ s/(.)/x$ovclean/g;
++    $one = $1;
++    isnt_tainted($s,   "$desc: s not tainted");
++    isnt_tainted($res, "$desc: res not tainted");
++    isnt_tainted($one, "$desc: \$1 not tainted");
++    is($s, 'xhello' x 4, "$desc: s value");
++    is($res, 4,        "$desc: res value");
++    is($one, 'd',      "$desc: \$1 value");
++
++    $desc = "substitution /g with partial replacement overloaded and tainted";
++    $s = 'abcd';
++    $res = $s =~ s/(.)/x$ovtaint/g;
++    $one = $1;
++    is_tainted($s,     "$desc: s tainted");
++    isnt_tainted($res, "$desc: res not tainted");
++    isnt_tainted($one, "$desc: \$1 not tainted");
++    is($s, 'xhi' x 4,  "$desc: s value");
++    is($res, 4,        "$desc: res value");
++    is($one, 'd',      "$desc: \$1 value");
++
++    $desc = "substitution /g with whole replacement overloaded and clean";
++    $s = 'abcd';
++    $res = $s =~ s/(.)/$ovclean/g;
++    $one = $1;
++    isnt_tainted($s,   "$desc: s not tainted");
++    isnt_tainted($res, "$desc: res not tainted");
++    isnt_tainted($one, "$desc: \$1 not tainted");
++    is($s, 'hello' x 4, "$desc: s value");
++    is($res, 4,        "$desc: res value");
++    is($one, 'd',      "$desc: \$1 value");
++
++    $desc = "substitution /g with whole replacement overloaded and tainted";
++    $s = 'abcd';
++    $res = $s =~ s/(.)/$ovtaint/g;
++    $one = $1;
++    is_tainted($s,     "$desc: s tainted");
++    isnt_tainted($res, "$desc: res not tainted");
++    isnt_tainted($one, "$desc: \$1 not tainted");
++    is($s, 'hi' x 4,   "$desc: s value");
++    is($res, 4,        "$desc: res value");
++    is($one, 'd',      "$desc: \$1 value");
++
++    $desc = "substitution /ge with partial replacement overloaded and clean";
++    $s = 'abcd';
++    $res = $s =~ s/(.)/"x".$ovclean/ge;
++    $one = $1;
++    isnt_tainted($s,   "$desc: s not tainted");
++    isnt_tainted($res, "$desc: res not tainted");
++    isnt_tainted($one, "$desc: \$1 not tainted");
++    is($s, 'xhello' x 4, "$desc: s value");
++    is($res, 4,        "$desc: res value");
++    is($one, 'd',      "$desc: \$1 value");
++
++    $desc = "substitution /ge with partial replacement overloaded and tainted";
++    $s = 'abcd';
++    $res = $s =~ s/(.)/"x".$ovtaint/ge;
++    $one = $1;
++    is_tainted($s,     "$desc: s tainted");
++    isnt_tainted($res, "$desc: res not tainted");
++    isnt_tainted($one, "$desc: \$1 not tainted");
++    is($s, 'xhi' x 4,  "$desc: s value");
++    is($res, 4,        "$desc: res value");
++    is($one, 'd',      "$desc: \$1 value");
++
++    $desc = "substitution /ge with whole replacement overloaded and clean";
++    $s = 'abcd';
++    $res = $s =~ s/(.)/$ovclean/ge;
++    $one = $1;
++    isnt_tainted($s,   "$desc: s not tainted");
++    isnt_tainted($res, "$desc: res not tainted");
++    isnt_tainted($one, "$desc: \$1 not tainted");
++    is($s, 'hello' x 4, "$desc: s value");
++    is($res, 4,        "$desc: res value");
++    is($one, 'd',      "$desc: \$1 value");
++
++    $desc = "substitution /ge with whole replacement overloaded and tainted";
++    $s = 'abcd';
++    $res = $s =~ s/(.)/$ovtaint/ge;
++    $one = $1;
++    is_tainted($s,     "$desc: s tainted");
++    isnt_tainted($res, "$desc: res not tainted");
++    isnt_tainted($one, "$desc: \$1 not tainted");
++    is($s, 'hi' x 4,   "$desc: s value");
++    is($res, 4,        "$desc: res value");
++    is($one, 'd',      "$desc: \$1 value");
++}
++
+ # This may bomb out with the alarm signal so keep it last
+ SKIP: {
+     skip "No alarm()"  unless $Config{d_alarm};
+-- 
+2.13.6
+
diff --git a/SOURCES/perl-5.24.3-perl-131597-ensure-the-GV-slot-is-filled-for-our-foo.patch b/SOURCES/perl-5.24.3-perl-131597-ensure-the-GV-slot-is-filled-for-our-foo.patch
new file mode 100644
index 0000000..6fc0fff
--- /dev/null
+++ b/SOURCES/perl-5.24.3-perl-131597-ensure-the-GV-slot-is-filled-for-our-foo.patch
@@ -0,0 +1,64 @@
+From b890486ff0c482cbdec59a0f9beb28275aeee19b Mon Sep 17 00:00:00 2001
+From: Tony Cook <tony@develop-help.com>
+Date: Mon, 19 Jun 2017 14:59:53 +1000
+Subject: [PATCH] (perl #131597) ensure the GV slot is filled for our [%$@]foo:
+ attr
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Petr Písař: Ported to 5.24.3.
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ op.c         |  6 +++---
+ t/op/attrs.t | 18 ++++++++++++++++++
+ 2 files changed, 21 insertions(+), 3 deletions(-)
+
+diff --git a/op.c b/op.c
+index 2960dd5..8a5fc3f 100644
+--- a/op.c
++++ b/op.c
+@@ -3671,9 +3671,9 @@ S_my_kid(pTHX_ OP *o, OP *attrs, OP **imopsp)
+ 	    PL_parser->in_my = FALSE;
+ 	    PL_parser->in_my_stash = NULL;
+ 	    apply_attrs(GvSTASH(gv),
+-			(type == OP_RV2SV ? GvSV(gv) :
+-			 type == OP_RV2AV ? MUTABLE_SV(GvAV(gv)) :
+-			 type == OP_RV2HV ? MUTABLE_SV(GvHV(gv)) : MUTABLE_SV(gv)),
++			(type == OP_RV2SV ? GvSVn(gv) :
++			 type == OP_RV2AV ? MUTABLE_SV(GvAVn(gv)) :
++			 type == OP_RV2HV ? MUTABLE_SV(GvHVn(gv)) : MUTABLE_SV(gv)),
+ 			attrs);
+ 	}
+ 	o->op_private |= OPpOUR_INTRO;
+diff --git a/t/op/attrs.t b/t/op/attrs.t
+index 219db03..b038c87 100644
+--- a/t/op/attrs.t
++++ b/t/op/attrs.t
+@@ -447,4 +447,22 @@ package P126257 {
+     ::is $@, "", "RT 126257 sub";
+ }
+ 
++fresh_perl_is('sub dummy {} our $dummy : Dummy', <<EOS, {},
++Invalid SCALAR attribute: Dummy at - line 1.
++BEGIN failed--compilation aborted at - line 1.
++EOS
++              "attribute on our scalar with sub of same name");
++
++fresh_perl_is('sub dummy {} our @dummy : Dummy', <<EOS, {},
++Invalid ARRAY attribute: Dummy at - line 1.
++BEGIN failed--compilation aborted at - line 1.
++EOS
++              "attribute on our array with sub of same name");
++
++fresh_perl_is('sub dummy {} our %dummy : Dummy', <<EOS, {},
++Invalid HASH attribute: Dummy at - line 1.
++BEGIN failed--compilation aborted at - line 1.
++EOS
++              "attribute on our hash with sub of same name");
++
+ done_testing();
+-- 
+2.13.6
+
diff --git a/SOURCES/perl-5.24.3-perl-131895-fail-stat-on-names-with-0-embedded.patch b/SOURCES/perl-5.24.3-perl-131895-fail-stat-on-names-with-0-embedded.patch
new file mode 100644
index 0000000..fbe1197
--- /dev/null
+++ b/SOURCES/perl-5.24.3-perl-131895-fail-stat-on-names-with-0-embedded.patch
@@ -0,0 +1,223 @@
+From 9a4826e0881f8c5498a0fd5f24ed2a0fefb771b7 Mon Sep 17 00:00:00 2001
+From: Tony Cook <tony@develop-help.com>
+Date: Thu, 2 Nov 2017 20:18:56 +0000
+Subject: [PATCH] (perl #131895) fail stat on names with \0 embedded
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Also lstat() and the file test ops.
+
+Petr Písař: Port to 5.24.3.
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ doio.c                | 21 ++++++++++++++++-----
+ pp_sys.c              | 29 +++++++++++++++++++++++------
+ t/lib/warnings/pp_sys | 14 ++++++++++++++
+ t/op/filetest.t       | 10 +++++++++-
+ t/op/stat.t           | 12 +++++++++++-
+ 5 files changed, 73 insertions(+), 13 deletions(-)
+
+diff --git a/doio.c b/doio.c
+index 6704862..2792c66 100644
+--- a/doio.c
++++ b/doio.c
+@@ -1458,7 +1458,7 @@ Perl_my_stat_flags(pTHX_ const U32 flags)
+ 	return PL_laststatval;
+     else {
+ 	SV* const sv = TOPs;
+-	const char *s;
++	const char *s, *d;
+ 	STRLEN len;
+ 	if ((gv = MAYBE_DEREF_GV_flags(sv,flags))) {
+ 	    goto do_fstat;
+@@ -1472,9 +1472,14 @@ Perl_my_stat_flags(pTHX_ const U32 flags)
+ 	s = SvPV_flags_const(sv, len, flags);
+ 	PL_statgv = NULL;
+ 	sv_setpvn(PL_statname, s, len);
+-	s = SvPVX_const(PL_statname);		/* s now NUL-terminated */
++	d = SvPVX_const(PL_statname);		/* s now NUL-terminated */
+ 	PL_laststype = OP_STAT;
+-	PL_laststatval = PerlLIO_stat(s, &PL_statcache);
++        if (!IS_SAFE_PATHNAME(s, len, OP_NAME(PL_op))) {
++            PL_laststatval = -1;
++        }
++        else {
++            PL_laststatval = PerlLIO_stat(d, &PL_statcache);
++        }
+ 	if (PL_laststatval < 0 && ckWARN(WARN_NEWLINE) && should_warn_nl(s)) {
+             GCC_DIAG_IGNORE(-Wformat-nonliteral); /* PL_warn_nl is constant */
+ 	    Perl_warner(aTHX_ packWARN(WARN_NEWLINE), PL_warn_nl, "stat");
+@@ -1491,6 +1496,7 @@ Perl_my_lstat_flags(pTHX_ const U32 flags)
+     static const char* const no_prev_lstat = "The stat preceding -l _ wasn't an lstat";
+     dSP;
+     const char *file;
++    STRLEN len;
+     SV* const sv = TOPs;
+     bool isio = FALSE;
+     if (PL_op->op_flags & OPf_REF) {
+@@ -1534,9 +1540,14 @@ Perl_my_lstat_flags(pTHX_ const U32 flags)
+                               HEKfARG(GvENAME_HEK((const GV *)
+                                           (SvROK(sv) ? SvRV(sv) : sv))));
+     }
+-    file = SvPV_flags_const_nolen(sv, flags);
++    file = SvPV_flags_const(sv, len, flags);
+     sv_setpv(PL_statname,file);
+-    PL_laststatval = PerlLIO_lstat(file,&PL_statcache);
++    if (!IS_SAFE_PATHNAME(file, len, OP_NAME(PL_op))) {
++        PL_laststatval = -1;
++    }
++    else {
++        PL_laststatval = PerlLIO_lstat(file,&PL_statcache);
++    }
+     if (PL_laststatval < 0 && ckWARN(WARN_NEWLINE) && should_warn_nl(file)) {
+         GCC_DIAG_IGNORE(-Wformat-nonliteral); /* PL_warn_nl is constant */
+         Perl_warner(aTHX_ packWARN(WARN_NEWLINE), PL_warn_nl, "lstat");
+diff --git a/pp_sys.c b/pp_sys.c
+index bd55043..1a72e60 100644
+--- a/pp_sys.c
++++ b/pp_sys.c
+@@ -2927,19 +2927,24 @@ PP(pp_stat)
+     }
+     else {
+         const char *file;
++        const char *temp;
++        STRLEN len;
+ 	if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVIO) { 
+             io = MUTABLE_IO(SvRV(sv));
+             if (PL_op->op_type == OP_LSTAT)
+                 goto do_fstat_warning_check;
+             goto do_fstat_have_io; 
+         }
+-        
+ 	SvTAINTED_off(PL_statname); /* previous tainting irrelevant */
+-	sv_setpv(PL_statname, SvPV_nomg_const_nolen(sv));
++        temp = SvPV_nomg_const(sv, len);
++	sv_setpv(PL_statname, temp);
+ 	PL_statgv = NULL;
+ 	PL_laststype = PL_op->op_type;
+         file = SvPV_nolen_const(PL_statname);
+-	if (PL_op->op_type == OP_LSTAT)
++        if (!IS_SAFE_PATHNAME(temp, len, OP_NAME(PL_op))) {
++            PL_laststatval = -1;
++        }
++	else if (PL_op->op_type == OP_LSTAT)
+ 	    PL_laststatval = PerlLIO_lstat(file, &PL_statcache);
+ 	else
+ 	    PL_laststatval = PerlLIO_stat(file, &PL_statcache);
+@@ -3175,8 +3180,12 @@ PP(pp_ftrread)
+ 
+     if (use_access) {
+ #if defined(HAS_ACCESS) || defined (PERL_EFF_ACCESS)
+-	const char *name = SvPV_nolen(*PL_stack_sp);
+-	if (effective) {
++        STRLEN len;
++	const char *name = SvPV(*PL_stack_sp, len);
++        if (!IS_SAFE_PATHNAME(name, len, OP_NAME(PL_op))) {
++            result = -1;
++        }
++	else if (effective) {
+ #  ifdef PERL_EFF_ACCESS
+ 	    result = PERL_EFF_ACCESS(name, access_mode);
+ #  else
+@@ -3501,10 +3510,18 @@ PP(pp_fttext)
+     }
+     else {
+         const char *file;
++        const char *temp;
++        STRLEN temp_len;
+         int fd; 
+ 
+         assert(sv);
+-	sv_setpv(PL_statname, SvPV_nomg_const_nolen(sv));
++        temp = SvPV_nomg_const(sv, temp_len);
++	sv_setpv(PL_statname, temp);
++        if (!IS_SAFE_PATHNAME(temp, temp_len, OP_NAME(PL_op))) {
++            PL_laststatval = -1;
++            PL_laststype = OP_STAT;
++            FT_RETURNUNDEF;
++        }
+       really_filename:
+         file = SvPVX_const(PL_statname);
+ 	PL_statgv = NULL;
+diff --git a/t/lib/warnings/pp_sys b/t/lib/warnings/pp_sys
+index 6338964..ded5d7d 100644
+--- a/t/lib/warnings/pp_sys
++++ b/t/lib/warnings/pp_sys
+@@ -962,3 +962,17 @@ close $fh;
+ unlink $file;
+ EXPECT
+ syswrite() is deprecated on :utf8 handles at - line 6.
++########
++# NAME stat on name with \0
++use warnings;
++my @x = stat("./\0-");
++my @y = lstat("./\0-");
++-T ".\0-";
++-x ".\0-";
++-l ".\0-";
++EXPECT
++Invalid \0 character in pathname for stat: ./\0- at - line 2.
++Invalid \0 character in pathname for lstat: ./\0- at - line 3.
++Invalid \0 character in pathname for fttext: .\0- at - line 4.
++Invalid \0 character in pathname for fteexec: .\0- at - line 5.
++Invalid \0 character in pathname for ftlink: .\0- at - line 6.
+diff --git a/t/op/filetest.t b/t/op/filetest.t
+index 8883381..bd1d08c 100644
+--- a/t/op/filetest.t
++++ b/t/op/filetest.t
+@@ -9,7 +9,7 @@ BEGIN {
+     set_up_inc(qw '../lib ../cpan/Perl-OSType/lib');
+ }
+ 
+-plan(tests => 53 + 27*14);
++plan(tests => 57 + 27*14);
+ 
+ if ($^O =~ /MSWin32|cygwin|msys/ && !is_miniperl) {
+   require Win32; # for IsAdminUser()
+@@ -393,3 +393,11 @@ SKIP: {
+     is $failed_stat2, $failed_stat1,
+ 	'failed -r($gv_with_io_but_no_fp) with and w/out fatal warnings';
+ } 
++
++{
++    # [perl #131895] stat() doesn't fail on filenames containing \0 / NUL
++    ok(!-T "TEST\0-", '-T on name with \0');
++    ok(!-B "TEST\0-", '-B on name with \0');
++    ok(!-f "TEST\0-", '-f on name with \0');
++    ok(!-r "TEST\0-", '-r on name with \0');
++}
+diff --git a/t/op/stat.t b/t/op/stat.t
+index 637a902..71193ad 100644
+--- a/t/op/stat.t
++++ b/t/op/stat.t
+@@ -25,7 +25,7 @@ if ($^O eq 'MSWin32') {
+     ${^WIN32_SLOPPY_STAT} = 0;
+ }
+ 
+-plan tests => 118;
++plan tests => 120;
+ 
+ my $Perl = which_perl();
+ 
+@@ -651,6 +651,16 @@ SKIP:
+       'stat on an array of valid paths should return ENOENT';
+ }
+ 
++# [perl #131895] stat() doesn't fail on filenames containing \0 / NUL
++ok !stat("TEST\0-"), 'stat on filename with \0';
++SKIP: {
++    my $link = "TEST.symlink.$$";
++    my $can_symlink = eval { symlink "TEST", $link };
++    skip "cannot symlink", 1 unless $can_symlink;
++    ok !lstat("$link\0-"), 'lstat on filename with \0';
++    unlink $link;
++}
++
+ END {
+     chmod 0666, $tmpfile;
+     unlink_all $tmpfile;
+-- 
+2.13.6
+
diff --git a/SOURCES/perl-5.24.3-perl-132245-don-t-try-to-process-a-char-range-with-n.patch b/SOURCES/perl-5.24.3-perl-132245-don-t-try-to-process-a-char-range-with-n.patch
new file mode 100644
index 0000000..b2af6f4
--- /dev/null
+++ b/SOURCES/perl-5.24.3-perl-132245-don-t-try-to-process-a-char-range-with-n.patch
@@ -0,0 +1,52 @@
+From 86a48d83a7caf38c553000a250ed1359c235f55e Mon Sep 17 00:00:00 2001
+From: Tony Cook <tony@develop-help.com>
+Date: Thu, 19 Oct 2017 10:46:04 +1100
+Subject: [PATCH] (perl #132245) don't try to process a char range with no
+ preceding char
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+A range like \N{}-0 eventually results in compilation failing, but
+before that, get_and_check_backslash_N_name() attempts to treat
+the memory before the empty output of \N{} as a character.
+
+Petr Písař: Ported to 5.24.3.
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ t/lib/warnings/toke | 5 +++++
+ toke.c              | 4 ++--
+ 2 files changed, 7 insertions(+), 2 deletions(-)
+
+diff --git a/t/lib/warnings/toke b/t/lib/warnings/toke
+index 493c8a2..4a521e0 100644
+--- a/t/lib/warnings/toke
++++ b/t/lib/warnings/toke
+@@ -1509,3 +1509,8 @@ my $v = 𝛃 - 5;
+ EXPECT
+ OPTION regex
+ (Wide character.*\n)?Warning: Use of "𝛃" without parentheses is ambiguous
++########
++# NAME tr/// range with empty \N{} at the start
++tr//\N{}-0/;
++EXPECT
++Unknown charname '' is deprecated at - line 1.
+diff --git a/toke.c b/toke.c
+index f2310cc..3d93fac 100644
+--- a/toke.c
++++ b/toke.c
+@@ -2906,8 +2906,8 @@ S_scan_const(pTHX_ char *start)
+                  * at least one character, then see if this next one is a '-',
+                  * indicating the previous one was the start of a range.  But
+                  * don't bother if we're too close to the end for the minus to
+-                 * mean that. */
+-                if (*s != '-' || s >= send - 1 || s == start) {
++                 * mean that, or if we haven't output any characters yet. */
++                if (*s != '-' || s >= send - 1 || s == start || d == SvPVX(sv)) {
+ 
+                     /* A regular character.  Process like any other, but first
+                      * clear any flags */
+-- 
+2.13.6
+
diff --git a/SOURCES/perl-5.24.3-perl-132442-Fix-stack-with-do-my-sub-l-1.patch b/SOURCES/perl-5.24.3-perl-132442-Fix-stack-with-do-my-sub-l-1.patch
new file mode 100644
index 0000000..b3eda86
--- /dev/null
+++ b/SOURCES/perl-5.24.3-perl-132442-Fix-stack-with-do-my-sub-l-1.patch
@@ -0,0 +1,107 @@
+From 264472b6e83dd1a9d0e0e58d75f7162471a5b29b Mon Sep 17 00:00:00 2001
+From: Father Chrysostomos <sprout@cpan.org>
+Date: Tue, 14 Nov 2017 18:55:55 -0800
+Subject: [PATCH] Fix stack with do {my sub l; 1}
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+A block in perl usually compiles to a leave op with an enter inside
+it, followed by the statements:
+
+   leave
+     enter
+     nextstate
+     ... expr ...
+     nextstate
+     ... expr ...
+
+If a block contains only one statement, and that statement is suffic-
+iently innocuous, then the enter/leave pair to create the scope at run
+time get skipped, and instead we have a simple scope op which is not
+even executed:
+
+   scope
+     ex-nextstate
+     ... expr ...
+
+The nextstate in this case also gets nulled.
+
+In the case of do { my sub l; 1 } we were getting a variation of the
+latter, that looked like this:
+
+   scope
+     introcv
+     clonecv
+     nextstate
+     ... expr ...
+
+The problem here is that nextstate resets the stack, even though a new
+scope has not been pushed, so we end up with all existing stack items
+from the *outer* scope getting clobbered.
+
+One can have fun with this and erase everything pushed on to the stack
+so far in a given statement:
+
+$ ./perl -le 'print join "-", 1..10, do {my sub l; ","}, 11..20'
+11,12,13,14,15,16,17,18,19,20
+
+Here I replaced the first argument to join() from within the do{}
+block, after having cleared the stack.
+
+Why was the op tree was getting muddled up like this?  The ‘my sub’
+declaration does not immediately add any ops to the op tree; those ops
+get added when the current scope finishing compiling, since those ops
+must be inserted at the beginning of the block.
+
+I have not fully looked into the order that things happen, and why the
+nextstate op does not get nulled; but it did not matter, because of
+the simple fix: Treat lexical sub declarations as ‘not innocuous’ by
+setting the HINT_BLOCK_SCOPE flag when a lexical sub is declared.
+Thus, we end up with an enter/leave pair, which creates a
+proper scope.
+
+Petr Písař: Ported to 5.24.3.
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ op.c          | 2 ++
+ t/op/lexsub.t | 5 ++++-
+ 2 files changed, 6 insertions(+), 1 deletion(-)
+
+diff --git a/op.c b/op.c
+index 8a5fc3f..695bfa4 100644
+--- a/op.c
++++ b/op.c
+@@ -7936,6 +7936,8 @@ Perl_newMYSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
+ 
+     PERL_ARGS_ASSERT_NEWMYSUB;
+ 
++    PL_hints |= HINT_BLOCK_SCOPE;
++
+     /* Find the pad slot for storing the new sub.
+        We cannot use PL_comppad, as it is the pad owned by the new sub.  We
+        need to look in CvOUTSIDE and find the pad belonging to the enclos-
+diff --git a/t/op/lexsub.t b/t/op/lexsub.t
+index adccf4c..cf90a76 100644
+--- a/t/op/lexsub.t
++++ b/t/op/lexsub.t
+@@ -7,7 +7,7 @@ BEGIN {
+     *bar::is = *is;
+     *bar::like = *like;
+ }
+-plan 151;
++plan 152;
+ 
+ # -------------------- Errors with feature disabled -------------------- #
+ 
+@@ -967,3 +967,6 @@ like runperl(
+ {
+   my sub h; sub{my $x; sub{h}}
+ }
++
++is join("-", qw(aa bb), do { my sub lleexx; 123 }, qw(cc dd)),
++  "aa-bb-123-cc-dd", 'do { my sub...} in a list [perl #132442]';
+-- 
+2.13.6
+
diff --git a/SOURCES/perl-5.24.3-set-when-statting-a-closed-filehandle.patch b/SOURCES/perl-5.24.3-set-when-statting-a-closed-filehandle.patch
new file mode 100644
index 0000000..a62c5ef
--- /dev/null
+++ b/SOURCES/perl-5.24.3-set-when-statting-a-closed-filehandle.patch
@@ -0,0 +1,211 @@
+From 0a41ca5a68626a0f44e0d552e460e86567e47140 Mon Sep 17 00:00:00 2001
+From: Zefram <zefram@fysh.org>
+Date: Wed, 15 Nov 2017 08:11:37 +0000
+Subject: [PATCH] set $! when statting a closed filehandle
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+When a stat fails because it's on a closed or otherwise invalid
+filehandle, $! was often not being set, depending on the operation
+and the nature of the invalidity.  Consistently set it to EBADF.
+Fixes [perl #108288].
+
+Petr Písař: Ported to 5.24.3.
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ MANIFEST           |  1 +
+ doio.c             | 10 +++++++++-
+ pp_sys.c           | 22 ++++++++++++---------
+ t/op/stat_errors.t | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 4 files changed, 80 insertions(+), 10 deletions(-)
+ create mode 100644 t/op/stat_errors.t
+
+diff --git a/MANIFEST b/MANIFEST
+index fcf7eae..3077142 100644
+--- a/MANIFEST
++++ b/MANIFEST
+@@ -5394,6 +5394,7 @@ t/op/sselect.t			See if 4 argument select works
+ t/op/stash.t			See if %:: stashes work
+ t/op/state.t			See if state variables work
+ t/op/stat.t			See if stat works
++t/op/stat_errors.t		See if stat and file tests handle threshold errors
+ t/op/study.t			See if study works
+ t/op/studytied.t		See if study works with tied scalars
+ t/op/sub_lval.t			See if lvalue subroutines work
+diff --git a/doio.c b/doio.c
+index 2792c66..f2934c5 100644
+--- a/doio.c
++++ b/doio.c
+@@ -1429,8 +1429,11 @@ Perl_my_stat_flags(pTHX_ const U32 flags)
+     if (PL_op->op_flags & OPf_REF) {
+ 	gv = cGVOP_gv;
+       do_fstat:
+-        if (gv == PL_defgv)
++        if (gv == PL_defgv) {
++	    if (PL_laststatval < 0)
++		SETERRNO(EBADF,RMS_IFI);
+             return PL_laststatval;
++	}
+ 	io = GvIO(gv);
+         do_fstat_have_io:
+         PL_laststype = OP_STAT;
+@@ -1441,6 +1444,7 @@ Perl_my_stat_flags(pTHX_ const U32 flags)
+                 int fd = PerlIO_fileno(IoIFP(io));
+                 if (fd < 0) {
+                     /* E.g. PerlIO::scalar has no real fd. */
++		    SETERRNO(EBADF,RMS_IFI);
+                     return (PL_laststatval = -1);
+                 } else {
+                     return (PL_laststatval = PerlLIO_fstat(fd, &PL_statcache));
+@@ -1451,6 +1455,7 @@ Perl_my_stat_flags(pTHX_ const U32 flags)
+         }
+ 	PL_laststatval = -1;
+ 	report_evil_fh(gv);
++	SETERRNO(EBADF,RMS_IFI);
+ 	return -1;
+     }
+     else if ((PL_op->op_private & (OPpFT_STACKED|OPpFT_AFTER_t))
+@@ -1503,6 +1508,8 @@ Perl_my_lstat_flags(pTHX_ const U32 flags)
+ 	if (cGVOP_gv == PL_defgv) {
+ 	    if (PL_laststype != OP_LSTAT)
+ 		Perl_croak(aTHX_ "%s", no_prev_lstat);
++	    if (PL_laststatval < 0)
++		SETERRNO(EBADF,RMS_IFI);
+ 	    return PL_laststatval;
+ 	}
+ 	PL_laststatval = -1;
+@@ -1512,6 +1519,7 @@ Perl_my_lstat_flags(pTHX_ const U32 flags)
+ 		 	     "Use of -l on filehandle %"HEKf,
+ 			      HEKfARG(GvENAME_HEK(cGVOP_gv)));
+ 	}
++	SETERRNO(EBADF,RMS_IFI);
+ 	return -1;
+     }
+     if ((PL_op->op_private & (OPpFT_STACKED|OPpFT_AFTER_t))
+diff --git a/pp_sys.c b/pp_sys.c
+index 5e0993d..2fcc219 100644
+--- a/pp_sys.c
++++ b/pp_sys.c
+@@ -2889,10 +2889,11 @@ PP(pp_stat)
+ 		Perl_croak(aTHX_ "The stat preceding lstat() wasn't an lstat");
+ 	}
+ 
+-	if (gv != PL_defgv) {
+-	    bool havefp;
++	if (gv == PL_defgv) {
++	    if (PL_laststatval < 0)
++		SETERRNO(EBADF,RMS_IFI);
++	} else {
+           do_fstat_have_io:
+-	    havefp = FALSE;
+ 	    PL_laststype = OP_STAT;
+ 	    PL_statgv = gv ? gv : (GV *)io;
+ 	    sv_setpvs(PL_statname, "");
+@@ -2903,22 +2904,25 @@ PP(pp_stat)
+                     if (IoIFP(io)) {
+                         int fd = PerlIO_fileno(IoIFP(io));
+                         if (fd < 0) {
++			    report_evil_fh(gv);
+                             PL_laststatval = -1;
+                             SETERRNO(EBADF,RMS_IFI);
+                         } else {
+                             PL_laststatval = PerlLIO_fstat(fd, &PL_statcache);
+-                            havefp = TRUE;
+                         }
+                     } else if (IoDIRP(io)) {
+                         PL_laststatval =
+                             PerlLIO_fstat(my_dirfd(IoDIRP(io)), &PL_statcache);
+-                        havefp = TRUE;
+                     } else {
++			report_evil_fh(gv);
+                         PL_laststatval = -1;
++			SETERRNO(EBADF,RMS_IFI);
+                     }
+-            }
+-	    else PL_laststatval = -1;
+-	    if (PL_laststatval < 0 && !havefp) report_evil_fh(gv);
++            } else {
++		report_evil_fh(gv);
++		PL_laststatval = -1;
++		SETERRNO(EBADF,RMS_IFI);
++	    }
+         }
+ 
+ 	if (PL_laststatval < 0) {
+@@ -3415,7 +3419,7 @@ PP(pp_fttty)
+     else if (name && isDIGIT(*name) && grok_atoUV(name, &uv, NULL) && uv <= PERL_INT_MAX)
+         fd = (int)uv;
+     else
+-	FT_RETURNUNDEF;
++	fd = -1;
+     if (fd < 0) {
+         SETERRNO(EBADF,RMS_IFI);
+ 	FT_RETURNUNDEF;
+diff --git a/t/op/stat_errors.t b/t/op/stat_errors.t
+new file mode 100644
+index 0000000..e043c61
+--- /dev/null
++++ b/t/op/stat_errors.t
+@@ -0,0 +1,57 @@
++#!./perl
++
++BEGIN {
++    chdir 't' if -d 't';
++    require './test.pl';
++    set_up_inc('../lib');
++}
++
++plan(tests => 2*11*29);
++
++use Errno qw(EBADF ENOENT);
++
++open(SCALARFILE, "<", \"wibble") or die $!;
++open(CLOSEDFILE, "<", "./test.pl") or die $!;
++close(CLOSEDFILE) or die $!;
++opendir(CLOSEDDIR, "../lib") or die $!;
++closedir(CLOSEDDIR) or die $!;
++
++foreach my $op (
++    qw(stat lstat),
++    (map { "-$_" } qw(r w x o R W X O e z s f d l p S b c t u g k T B M A C)),
++) {
++    foreach my $arg (
++	(map { ($_, "\\*$_") }
++	    qw(NEVEROPENED SCALARFILE CLOSEDFILE CLOSEDDIR _)),
++	"\"tmpnotexist\"",
++    ) {
++	my $argdesc = $arg;
++	if ($arg eq "_") {
++	    my @z = lstat "tmpnotexist";
++	    $argdesc .= " with prior stat fail";
++	}
++	SKIP: {
++	    if ($op eq "-l" && $arg =~ /\A\\/) {
++		# The op weirdly stringifies the globref and uses it as
++		# a filename, rather than treating it as a file handle.
++		# That might be a bug, but while that behaviour exists it
++		# needs to be exempted from these tests.
++		skip "-l on globref", 2;
++	    }
++	    if ($op eq "-t" && $arg eq "\"tmpnotexist\"") {
++		# The op doesn't operate on filenames.
++		skip "-t on filename", 2;
++	    }
++	    $! = 0;
++	    my $res = eval "$op $arg";
++	    my $err = $!;
++	    is $res, $op =~ /\A-/ ? undef : !!0, "result of $op $arg";
++	    is 0+$err,
++		$arg eq "\"tmpnotexist\"" ||
++		    ($op =~ /\A-[TB]\z/ && $arg =~ /_\z/) ? ENOENT : EBADF,
++		"error from $op $arg";
++	}
++    }
++}
++
++1;
+-- 
+2.13.6
+
diff --git a/SOURCES/perl-5.24.4-Fix-131649-extended-charclass-can-trigger-assert.patch b/SOURCES/perl-5.24.4-Fix-131649-extended-charclass-can-trigger-assert.patch
new file mode 100644
index 0000000..b6cf161
--- /dev/null
+++ b/SOURCES/perl-5.24.4-Fix-131649-extended-charclass-can-trigger-assert.patch
@@ -0,0 +1,270 @@
+From 10ce49389ea9ee26a3b02b6494b0a3849d56c6fa Mon Sep 17 00:00:00 2001
+From: Yves Orton <demerphq@gmail.com>
+Date: Mon, 26 Jun 2017 13:19:55 +0200
+Subject: [PATCH] fix #131649 - extended charclass can trigger assert
+
+The extended charclass parser makes some assumptions during the
+first pass which are only true on well structured input, and it
+does not properly catch various errors. later on the code assumes
+that things the first pass will let through are valid, when in
+fact they should trigger errors.
+
+(cherry picked from commit 19a498a461d7c81ae3507c450953d1148efecf4f)
+---
+ pod/perldiag.pod        | 27 ++++++++++++++++++++++++++-
+ pod/perlrecharclass.pod |  4 ++--
+ regcomp.c               | 28 ++++++++++++++++++----------
+ t/lib/warnings/regcomp  |  6 +++---
+ t/re/reg_mesg.t         | 29 ++++++++++++++++-------------
+ t/re/regex_sets.t       |  6 +++---
+ 6 files changed, 68 insertions(+), 32 deletions(-)
+
+diff --git a/pod/perldiag.pod b/pod/perldiag.pod
+index 106fe41121..c29925a2a4 100644
+--- a/pod/perldiag.pod
++++ b/pod/perldiag.pod
+@@ -5904,7 +5904,7 @@ yourself.
+ a perl4 interpreter, especially if the next 2 tokens are "use strict"
+ or "my $var" or "our $var".
+ 
+-=item Syntax error in (?[...]) in regex m/%s/
++=item Syntax error in (?[...]) in regex; marked by <-- HERE in m/%s/
+ 
+ (F) Perl could not figure out what you meant inside this construct; this
+ notifies you that it is giving up trying.
+@@ -6402,6 +6402,31 @@ to find out why that isn't happening.
+ (F) The unexec() routine failed for some reason.  See your local FSF
+ representative, who probably put it there in the first place.
+ 
++=item Unexpected ']' with no following ')' in (?[... in regex; marked by <-- HERE in m/%s/
++
++(F) While parsing an extended character class a ']' character was encountered
++at a point in the definition where the only legal use of ']' is to close the
++character class definition as part of a '])', you may have forgotten the close
++paren, or otherwise confused the parser.
++
++=item Expecting close paren for nested extended charclass in regex; marked by <-- HERE in m/%s/
++
++(F) While parsing a nested extended character class like:
++
++    (?[ ... (?flags:(?[ ... ])) ... ])
++                             ^
++
++we expected to see a close paren ')' (marked by ^) but did not.
++
++=item Expecting close paren for wrapper for nested extended charclass in regex; marked by <-- HERE in m/%s/
++
++(F) While parsing a nested extended character class like:
++
++    (?[ ... (?flags:(?[ ... ])) ... ])
++                              ^
++
++we expected to see a close paren ')' (marked by ^) but did not.
++
+ =item Unexpected binary operator '%c' with no preceding operand in regex;
+ marked by S<<-- HERE> in m/%s/
+ 
+diff --git a/pod/perlrecharclass.pod b/pod/perlrecharclass.pod
+index 79480e4131..8c008507d1 100644
+--- a/pod/perlrecharclass.pod
++++ b/pod/perlrecharclass.pod
+@@ -1128,8 +1128,8 @@ hence both of the following work:
+ Any contained POSIX character classes, including things like C<\w> and C<\D>
+ respect the C<E<sol>a> (and C<E<sol>aa>) modifiers.
+ 
+-C<< (?[ ]) >> is a regex-compile-time construct.  Any attempt to use
+-something which isn't knowable at the time the containing regular
++Note that C<< (?[ ]) >> is a regex-compile-time construct.  Any attempt
++to use something which isn't knowable at the time the containing regular
+ expression is compiled is a fatal error.  In practice, this means
+ just three limitations:
+ 
+diff --git a/regcomp.c b/regcomp.c
+index 4ee48ede42..ddac290d2b 100644
+--- a/regcomp.c
++++ b/regcomp.c
+@@ -14840,8 +14840,9 @@ S_handle_regex_sets(pTHX_ RExC_state_t *pRExC_state, SV** return_invlist,
+                                     TRUE /* Force /x */ );
+ 
+             switch (*RExC_parse) {
+-                case '?':
+-                    if (RExC_parse[1] == '[') depth++, RExC_parse++;
++                case '(':
++                    if (RExC_parse[1] == '?' && RExC_parse[2] == '[')
++                        depth++, RExC_parse+=2;
+                     /* FALLTHROUGH */
+                 default:
+                     break;
+@@ -14898,9 +14899,9 @@ S_handle_regex_sets(pTHX_ RExC_state_t *pRExC_state, SV** return_invlist,
+                 }
+ 
+                 case ']':
+-                    if (depth--) break;
+-                    RExC_parse++;
+-                    if (*RExC_parse == ')') {
++                    if (RExC_parse[1] == ')') {
++                        RExC_parse++;
++                        if (depth--) break;
+                         node = reganode(pRExC_state, ANYOF, 0);
+                         RExC_size += ANYOF_SKIP;
+                         nextchar(pRExC_state);
+@@ -14912,20 +14913,25 @@ S_handle_regex_sets(pTHX_ RExC_state_t *pRExC_state, SV** return_invlist,
+ 
+                         return node;
+                     }
+-                    goto no_close;
++                    /* We output the messages even if warnings are off, because we'll fail
++                     * the very next thing, and these give a likely diagnosis for that */
++                    if (posix_warnings && av_tindex_nomg(posix_warnings) >= 0) {
++                        output_or_return_posix_warnings(pRExC_state, posix_warnings, NULL);
++                    }
++                    RExC_parse++;
++                    vFAIL("Unexpected ']' with no following ')' in (?[...");
+             }
+ 
+             RExC_parse += UTF ? UTF8SKIP(RExC_parse) : 1;
+         }
+ 
+-      no_close:
+         /* We output the messages even if warnings are off, because we'll fail
+          * the very next thing, and these give a likely diagnosis for that */
+         if (posix_warnings && av_tindex_nomg(posix_warnings) >= 0) {
+             output_or_return_posix_warnings(pRExC_state, posix_warnings, NULL);
+         }
+ 
+-        FAIL("Syntax error in (?[...])");
++        vFAIL("Syntax error in (?[...])");
+     }
+ 
+     /* Pass 2 only after this. */
+@@ -15105,12 +15111,14 @@ redo_curchar:
+                      * inversion list, and RExC_parse points to the trailing
+                      * ']'; the next character should be the ')' */
+                     RExC_parse++;
+-                    assert(UCHARAT(RExC_parse) == ')');
++                    if (UCHARAT(RExC_parse) != ')')
++                        vFAIL("Expecting close paren for nested extended charclass");
+ 
+                     /* Then the ')' matching the original '(' handled by this
+                      * case: statement */
+                     RExC_parse++;
+-                    assert(UCHARAT(RExC_parse) == ')');
++                    if (UCHARAT(RExC_parse) != ')')
++                        vFAIL("Expecting close paren for wrapper for nested extended charclass");
+ 
+                     RExC_parse++;
+                     RExC_flags = save_flags;
+diff --git a/t/lib/warnings/regcomp b/t/lib/warnings/regcomp
+index 2b084c59b0..51ad57ccbe 100644
+--- a/t/lib/warnings/regcomp
++++ b/t/lib/warnings/regcomp
+@@ -59,21 +59,21 @@ Unmatched [ in regex; marked by <-- HERE in m/abc[ <-- HERE fi[.00./ at - line
+ qr/(?[[[:word]]])/;
+ EXPECT
+ Assuming NOT a POSIX class since there is no terminating ':' in regex; marked by <-- HERE in m/(?[[[:word <-- HERE ]]])/ at - line 2.
+-syntax error in (?[...]) in regex m/(?[[[:word]]])/ at - line 2.
++Unexpected ']' with no following ')' in (?[... in regex; marked by <-- HERE in m/(?[[[:word]] <-- HERE ])/ at - line 2.
+ ########
+ # NAME qr/(?[ [[:digit: ])/
+ # OPTION fatal
+ qr/(?[[[:digit: ])/;
+ EXPECT
+ Assuming NOT a POSIX class since no blanks are allowed in one in regex; marked by <-- HERE in m/(?[[[:digit: ] <-- HERE )/ at - line 2.
+-syntax error in (?[...]) in regex m/(?[[[:digit: ])/ at - line 2.
++syntax error in (?[...]) in regex; marked by <-- HERE in m/(?[[[:digit: ]) <-- HERE / at - line 2.
+ ########
+ # NAME qr/(?[ [:digit: ])/
+ # OPTION fatal
+ qr/(?[[:digit: ])/
+ EXPECT
+ Assuming NOT a POSIX class since no blanks are allowed in one in regex; marked by <-- HERE in m/(?[[:digit: ] <-- HERE )/ at - line 2.
+-syntax error in (?[...]) in regex m/(?[[:digit: ])/ at - line 2.
++syntax error in (?[...]) in regex; marked by <-- HERE in m/(?[[:digit: ]) <-- HERE / at - line 2.
+ ########
+ # NAME [perl #126141]
+ # OPTION fatal
+diff --git a/t/re/reg_mesg.t b/t/re/reg_mesg.t
+index d26a7caf37..5194d93751 100644
+--- a/t/re/reg_mesg.t
++++ b/t/re/reg_mesg.t
+@@ -215,8 +215,9 @@ my @death =
+  '/\b{gc}/' => "'gc' is an unknown bound type {#} m/\\b{gc{#}}/",
+  '/\B{gc}/' => "'gc' is an unknown bound type {#} m/\\B{gc{#}}/",
+ 
+- '/(?[[[::]]])/' => "Syntax error in (?[...]) in regex m/(?[[[::]]])/",
+- '/(?[[[:w:]]])/' => "Syntax error in (?[...]) in regex m/(?[[[:w:]]])/",
++
++ '/(?[[[::]]])/' => "Unexpected ']' with no following ')' in (?[... {#} m/(?[[[::]]{#}])/",
++ '/(?[[[:w:]]])/' => "Unexpected ']' with no following ')' in (?[... {#} m/(?[[[:w:]]{#}])/",
+  '/(?[[:w:]])/' => "",
+  '/([.].*)[.]/'   => "",    # [perl #127582]
+  '/[.].*[.]/'     => "",    # [perl #127604]
+@@ -239,11 +240,12 @@ my @death =
+  '/(?[ \p{foo} ])/' => 'Can\'t find Unicode property definition "foo" {#} m/(?[ \p{foo}{#} ])/',
+  '/(?[ \p{ foo = bar } ])/' => 'Can\'t find Unicode property definition "foo = bar" {#} m/(?[ \p{ foo = bar }{#} ])/',
+  '/(?[ \8 ])/' => 'Unrecognized escape \8 in character class {#} m/(?[ \8{#} ])/',
+- '/(?[ \t ]/' => 'Syntax error in (?[...]) in regex m/(?[ \t ]/',
+- '/(?[ [ \t ]/' => 'Syntax error in (?[...]) in regex m/(?[ [ \t ]/',
+- '/(?[ \t ] ]/' => 'Syntax error in (?[...]) in regex m/(?[ \t ] ]/',
+- '/(?[ [ ] ]/' => 'Syntax error in (?[...]) in regex m/(?[ [ ] ]/',
+- '/(?[ \t + \e # This was supposed to be a comment ])/' => 'Syntax error in (?[...]) in regex m/(?[ \t + \e # This was supposed to be a comment ])/',
++ '/(?[ \t ]/' => "Unexpected ']' with no following ')' in (?[... {#} m/(?[ \\t ]{#}/",
++ '/(?[ [ \t ]/' => "Syntax error in (?[...]) {#} m/(?[ [ \\t ]{#}/",
++ '/(?[ \t ] ]/' => "Unexpected ']' with no following ')' in (?[... {#} m/(?[ \\t ]{#} ]/",
++ '/(?[ [ ] ]/' => "Syntax error in (?[...]) {#} m/(?[ [ ] ]{#}/",
++ '/(?[ \t + \e # This was supposed to be a comment ])/' =>
++    "Syntax error in (?[...]) {#} m/(?[ \\t + \\e # This was supposed to be a comment ]){#}/",
+  '/(?[ ])/' => 'Incomplete expression within \'(?[ ])\' {#} m/(?[ {#}])/',
+  'm/(?[[a-\d]])/' => 'False [] range "a-\d" {#} m/(?[[a-\d{#}]])/',
+  'm/(?[[\w-x]])/' => 'False [] range "\w-" {#} m/(?[[\w-{#}x]])/',
+@@ -431,10 +433,10 @@ my @death_utf8 = mark_as_utf8(
+ 
+  '/ネ\p{}ネ/' => 'Empty \p{} {#} m/ネ\p{{#}}ネ/',
+ 
+- '/ネ(?[[[:ネ]]])ネ/' => "Syntax error in (?[...]) in regex m/ネ(?[[[:ネ]]])ネ/",
+- '/ネ(?[[[:ネ: ])ネ/' => "Syntax error in (?[...]) in regex m/ネ(?[[[:ネ: ])ネ/",
+- '/ネ(?[[[::]]])ネ/' => "Syntax error in (?[...]) in regex m/ネ(?[[[::]]])ネ/",
+- '/ネ(?[[[:ネ:]]])ネ/' => "Syntax error in (?[...]) in regex m/ネ(?[[[:ネ:]]])ネ/",
++ '/ネ(?[[[:ネ]]])ネ/' => "Unexpected ']' with no following ')' in (?[... {#} m/ネ(?[[[:ネ]]{#}])ネ/",
++ '/ネ(?[[[:ネ: ])ネ/' => "Syntax error in (?[...]) {#} m/ネ(?[[[:ネ: ])ネ{#}/",
++ '/ネ(?[[[::]]])ネ/' => "Unexpected ']' with no following ')' in (?[... {#} m/ネ(?[[[::]]{#}])ネ/",
++ '/ネ(?[[[:ネ:]]])ネ/' => "Unexpected ']' with no following ')' in (?[... {#} m/ネ(?[[[:ネ:]]{#}])ネ/",
+  '/ネ(?[[:ネ:]])ネ/' => "",
+  '/ネ(?[ネ])ネ/' =>  'Unexpected character {#} m/ネ(?[ネ{#}])ネ/',
+  '/ネ(?[ + [ネ] ])/' => 'Unexpected binary operator \'+\' with no preceding operand {#} m/ネ(?[ +{#} [ネ] ])/',
+@@ -447,8 +449,9 @@ my @death_utf8 = mark_as_utf8(
+  '/(?[ \x{ネ} ])ネ/' => 'Non-hex character {#} m/(?[ \x{ネ{#}} ])ネ/',
+  '/(?[ \p{ネ} ])/' => 'Can\'t find Unicode property definition "ネ" {#} m/(?[ \p{ネ}{#} ])/',
+  '/(?[ \p{ ネ = bar } ])/' => 'Can\'t find Unicode property definition "ネ = bar" {#} m/(?[ \p{ ネ = bar }{#} ])/',
+- '/ネ(?[ \t ]/' => 'Syntax error in (?[...]) in regex m/ネ(?[ \t ]/',
+- '/(?[ \t + \e # ネ This was supposed to be a comment ])/' => 'Syntax error in (?[...]) in regex m/(?[ \t + \e # ネ This was supposed to be a comment ])/',
++ '/ネ(?[ \t ]/' => "Unexpected ']' with no following ')' in (?[... {#} m/ネ(?[ \\t ]{#}/",
++ '/(?[ \t + \e # ネ This was supposed to be a comment ])/' =>
++    "Syntax error in (?[...]) {#} m/(?[ \\t + \\e # ネ This was supposed to be a comment ]){#}/",
+  'm/(*ネ)ネ/' => q<Unknown verb pattern 'ネ' {#} m/(*ネ){#}ネ/>,
+  '/\cネ/' => "Character following \"\\c\" must be printable ASCII",
+  '/\b{ネ}/' => "'ネ' is an unknown bound type {#} m/\\b{ネ{#}}/",
+diff --git a/t/re/regex_sets.t b/t/re/regex_sets.t
+index 6a79f9d692..e9644bd4e6 100644
+--- a/t/re/regex_sets.t
++++ b/t/re/regex_sets.t
+@@ -158,13 +158,13 @@ for my $char ("٠", "٥", "٩") {
+ 	eval { $_ = '/(?[(\c]) /'; qr/$_/ };
+ 	like($@, qr/^Syntax error/, '/(?[(\c]) / should not panic');
+ 	eval { $_ = '(?[\c#]' . "\n])"; qr/$_/ };
+-	like($@, qr/^Syntax error/, '/(?[(\c]) / should not panic');
++	like($@, qr/^Unexpected/, '/(?[(\c]) / should not panic');
+ 	eval { $_ = '(?[(\c])'; qr/$_/ };
+ 	like($@, qr/^Syntax error/, '/(?[(\c])/ should be a syntax error');
+ 	eval { $_ = '(?[(\c]) ]\b'; qr/$_/ };
+-	like($@, qr/^Syntax error/, '/(?[(\c]) ]\b/ should be a syntax error');
++	like($@, qr/^Unexpected/, '/(?[(\c]) ]\b/ should be a syntax error');
+ 	eval { $_ = '(?[\c[]](])'; qr/$_/ };
+-	like($@, qr/^Syntax error/, '/(?[\c[]](])/ should be a syntax error');
++	like($@, qr/^Unexpected/, '/(?[\c[]](])/ should be a syntax error');
+ 	like("\c#", qr/(?[\c#])/, '\c# should match itself');
+ 	like("\c[", qr/(?[\c[])/, '\c[ should match itself');
+ 	like("\c\ ", qr/(?[\c\])/, '\c\ should match itself');
+-- 
+2.11.0
+
diff --git a/SOURCES/perl-5.24.4-Fix-heap-buffer-overflow-write-reg_node-overrun.patch b/SOURCES/perl-5.24.4-Fix-heap-buffer-overflow-write-reg_node-overrun.patch
new file mode 100644
index 0000000..d76c039
Binary files /dev/null and b/SOURCES/perl-5.24.4-Fix-heap-buffer-overflow-write-reg_node-overrun.patch differ
diff --git a/SOURCES/perl-5.24.4-Pass-CFLAGS-to-dtrace.patch b/SOURCES/perl-5.24.4-Pass-CFLAGS-to-dtrace.patch
new file mode 100644
index 0000000..069027c
--- /dev/null
+++ b/SOURCES/perl-5.24.4-Pass-CFLAGS-to-dtrace.patch
@@ -0,0 +1,44 @@
+diff -up perl-5.24.4/Makefile.SH.orig perl-5.24.4/Makefile.SH
+--- perl-5.24.4/Makefile.SH.orig	2018-10-02 12:18:23.627226701 +0200
++++ perl-5.24.4/Makefile.SH	2018-10-02 13:35:03.858920366 +0200
+@@ -451,6 +451,8 @@ CCCMD    = sh $(shellflags) cflags "opti
+ 
+ CCCMDSRC = sh $(shellflags) cflags "optimize='$(OPTIMIZE)'" $<
+ 
++DTRACEFLAGS = sh $(shellflags) cflags "optimize='$(OPTIMIZE)'" $@
++
+ CONFIGPM_FROM_CONFIG_SH = lib/Config.pm lib/Config_heavy.pl
+ CONFIGPM = $(CONFIGPM_FROM_CONFIG_SH) lib/Config_git.pl
+ 
+@@ -865,13 +867,13 @@ mydtrace.h: $(DTRACE_H)
+ 	define)
+ 		$spitshell >>$Makefile <<'!NO!SUBS!'
+ $(DTRACE_MINI_O): perldtrace.d $(miniperl_objs_nodt)
+-	$(DTRACE) -G -s perldtrace.d -o $(DTRACE_MINI_O) $(miniperl_objs_nodt)
++	CFLAGS="`$(DTRACEFLAGS)`" $(DTRACE) -G -s perldtrace.d -o $(DTRACE_MINI_O) $(miniperl_objs_nodt)
+ 
+ $(DTRACE_PERLLIB_O): perldtrace.d $(perllib_objs_nodt)
+-	$(DTRACE) -G -s perldtrace.d -o $(DTRACE_PERLLIB_O) $(perllib_objs_nodt)
++	CFLAGS="`$(DTRACEFLAGS)`" $(DTRACE) -G -s perldtrace.d -o $(DTRACE_PERLLIB_O) $(perllib_objs_nodt)
+ 
+ $(DTRACE_MAIN_O): perldtrace.d perlmain$(OBJ_EXT)
+-	$(DTRACE) -G -s perldtrace.d -o $(DTRACE_MAIN_O) perlmain$(OBJ_EXT)
++	CFLAGS="`$(DTRACEFLAGS)`" $(DTRACE) -G -s perldtrace.d -o $(DTRACE_MAIN_O) perlmain$(OBJ_EXT)
+ 
+ !NO!SUBS!
+ 		;;
+diff -up perl-5.24.4/cflags.SH.orig perl-5.24.4/cflags.SH
+--- perl-5.24.4/cflags.SH.orig	2018-10-02 14:37:09.368649895 +0200
++++ perl-5.24.4/cflags.SH	2018-10-02 14:39:10.785695193 +0200
+@@ -518,7 +518,10 @@ for file do
+     esac
+ 
+     # Can we perhaps use $ansi2knr here
+-    echo "$cc -c -DPERL_CORE $ccflags $stdflags $optimize $warn $extra"
++    case "$file" in
++    dtrace_*) echo "$ccflags $stdflags $optimize $warn $extra";;
++    *) echo "$cc -c -DPERL_CORE $ccflags $stdflags $optimize $warn $extra"
++    esac
+ 
+     . $TOP/config.sh
+ 
diff --git a/SOURCES/perl-5.24.4-Perl_my_setenv-handle-integer-wrap.patch b/SOURCES/perl-5.24.4-Perl_my_setenv-handle-integer-wrap.patch
new file mode 100644
index 0000000..78ead17
--- /dev/null
+++ b/SOURCES/perl-5.24.4-Perl_my_setenv-handle-integer-wrap.patch
@@ -0,0 +1,175 @@
+From 34716e2a6ee2af96078d62b065b7785c001194be Mon Sep 17 00:00:00 2001
+From: David Mitchell <davem@iabyn.com>
+Date: Fri, 29 Jun 2018 13:37:03 +0100
+Subject: [PATCH] Perl_my_setenv(); handle integer wrap
+
+RT #133204
+
+Wean this function off int/I32 and onto UV/Size_t.
+Also, replace all malloc-ish calls with a wrapper that does
+overflow checks,
+
+In particular, it was doing (nlen + vlen + 2) which could wrap when
+the combined length of the environment variable name and value
+exceeded around 0x7fffffff.
+
+The wrapper check function is probably overkill, but belt and braces...
+
+NB this function has several variant parts, #ifdef'ed by platform
+type; I have blindly changed the parts that aren't compiled under linux.
+---
+ util.c | 76 ++++++++++++++++++++++++++++++++++++++++------------------
+ 1 file changed, 53 insertions(+), 23 deletions(-)
+
+diff --git a/util.c b/util.c
+index 7282dd9cfe..c5c7becc0f 100644
+--- a/util.c
++++ b/util.c
+@@ -2162,8 +2162,40 @@ Perl_new_warnings_bitfield(pTHX_ STRLEN *buffer, const char *const bits,
+    *(s+(nlen+1+vlen)) = '\0'
+ 
+ #ifdef USE_ENVIRON_ARRAY
+-       /* VMS' my_setenv() is in vms.c */
++
++/* small wrapper for use by Perl_my_setenv that mallocs, or reallocs if
++ * 'current' is non-null, with up to three sizes that are added together.
++ * It handles integer overflow.
++ */
++static char *
++S_env_alloc(void *current, Size_t l1, Size_t l2, Size_t l3, Size_t size)
++{
++    void *p;
++    Size_t sl, l = l1 + l2;
++
++    if (l < l2)
++        goto panic;
++    l += l3;
++    if (l < l3)
++        goto panic;
++    sl = l * size;
++    if (sl < l)
++        goto panic;
++
++    p = current
++            ? safesysrealloc(current, sl)
++            : safesysmalloc(sl);
++    if (p)
++        return (char*)p;
++
++  panic:
++    croak_memory_wrap();
++}
++
++
++/* VMS' my_setenv() is in vms.c */
+ #if !defined(WIN32) && !defined(NETWARE)
++
+ void
+ Perl_my_setenv(pTHX_ const char *nam, const char *val)
+ {
+@@ -2179,28 +2211,27 @@ Perl_my_setenv(pTHX_ const char *nam, const char *val)
+ #ifndef PERL_USE_SAFE_PUTENV
+     if (!PL_use_safe_putenv) {
+         /* most putenv()s leak, so we manipulate environ directly */
+-        I32 i;
+-        const I32 len = strlen(nam);
+-        int nlen, vlen;
++        UV i;
++        Size_t vlen, nlen = strlen(nam);
+ 
+         /* where does it go? */
+         for (i = 0; environ[i]; i++) {
+-            if (strnEQ(environ[i],nam,len) && environ[i][len] == '=')
++            if (strnEQ(environ[i], nam, nlen) && environ[i][nlen] == '=')
+                 break;
+         }
+ 
+         if (environ == PL_origenviron) {   /* need we copy environment? */
+-            I32 j;
+-            I32 max;
++            UV j, max;
+             char **tmpenv;
+ 
+             max = i;
+             while (environ[max])
+                 max++;
+-            tmpenv = (char**)safesysmalloc((max+2) * sizeof(char*));
++            /* XXX shouldn't that be max+1 rather than max+2 ??? - DAPM */
++            tmpenv = (char**)S_env_alloc(NULL, max, 2, 0, sizeof(char*));
+             for (j=0; j<max; j++) {         /* copy environment */
+-                const int len = strlen(environ[j]);
+-                tmpenv[j] = (char*)safesysmalloc((len+1)*sizeof(char));
++                const Size_t len = strlen(environ[j]);
++                tmpenv[j] = S_env_alloc(NULL, len, 1, 0, 1);
+                 Copy(environ[j], tmpenv[j], len+1, char);
+             }
+             tmpenv[max] = NULL;
+@@ -2219,15 +2250,15 @@ Perl_my_setenv(pTHX_ const char *nam, const char *val)
+ #endif
+         }
+         if (!environ[i]) {                 /* does not exist yet */
+-            environ = (char**)safesysrealloc(environ, (i+2) * sizeof(char*));
++            environ = (char**)S_env_alloc(environ, i, 2, 0, sizeof(char*));
+             environ[i+1] = NULL;    /* make sure it's null terminated */
+         }
+         else
+             safesysfree(environ[i]);
+-        nlen = strlen(nam);
++
+         vlen = strlen(val);
+ 
+-        environ[i] = (char*)safesysmalloc((nlen+vlen+2) * sizeof(char));
++        environ[i] = S_env_alloc(NULL, nlen, vlen, 2, 1);
+         /* all that work just for this */
+         my_setenv_format(environ[i], nam, nlen, val, vlen);
+     } else {
+@@ -2252,22 +2283,21 @@ Perl_my_setenv(pTHX_ const char *nam, const char *val)
+             if (environ) /* old glibc can crash with null environ */
+                 (void)unsetenv(nam);
+         } else {
+-	    const int nlen = strlen(nam);
+-	    const int vlen = strlen(val);
+-	    char * const new_env =
+-                (char*)safesysmalloc((nlen + vlen + 2) * sizeof(char));
++	    const Size_t nlen = strlen(nam);
++	    const Size_t vlen = strlen(val);
++	    char * const new_env = S_env_alloc(NULL, nlen, vlen, 2, 1);
+             my_setenv_format(new_env, nam, nlen, val, vlen);
+             (void)putenv(new_env);
+         }
+ #       else /* ! HAS_UNSETENV */
+         char *new_env;
+-	const int nlen = strlen(nam);
+-	int vlen;
++	const Size_t nlen = strlen(nam);
++	Size_t vlen;
+         if (!val) {
+ 	   val = "";
+         }
+         vlen = strlen(val);
+-        new_env = (char*)safesysmalloc((nlen + vlen + 2) * sizeof(char));
++        new_env = S_env_alloc(NULL, nlen, vlen, 2, 1);
+         /* all that work just for this */
+         my_setenv_format(new_env, nam, nlen, val, vlen);
+         (void)putenv(new_env);
+@@ -2290,14 +2320,14 @@ Perl_my_setenv(pTHX_ const char *nam, const char *val)
+ {
+     dVAR;
+     char *envstr;
+-    const int nlen = strlen(nam);
+-    int vlen;
++    const Size_t nlen = strlen(nam);
++    Size_t vlen;
+ 
+     if (!val) {
+        val = "";
+     }
+     vlen = strlen(val);
+-    Newx(envstr, nlen+vlen+2, char);
++    envstr = S_env_alloc(NULL, nlen, vlen, 2, 1);
+     my_setenv_format(envstr, nam, nlen, val, vlen);
+     (void)PerlEnv_putenv(envstr);
+     Safefree(envstr);
+-- 
+2.17.1
+
diff --git a/SOURCES/perl-5.24.4-Remove-ext-GDBM_File-t-fatal.t.patch b/SOURCES/perl-5.24.4-Remove-ext-GDBM_File-t-fatal.t.patch
new file mode 100644
index 0000000..3d91e88
--- /dev/null
+++ b/SOURCES/perl-5.24.4-Remove-ext-GDBM_File-t-fatal.t.patch
@@ -0,0 +1,94 @@
+From 0711044bfd02bbd7d2967ba96c6fdcae5b7132d6 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= <ppisar@redhat.com>
+Date: Mon, 9 Jul 2018 16:18:36 +0200
+Subject: [PATCH] Remove ext/GDBM_File/t/fatal.t
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+gdbm-1.15 defaults to a memory-mapped I/O and does not report any I/O
+errors on store and close operations. Thus ext/GDBM_File/t/fatal.t
+test that expects these fatal error reports fails. Because there is
+no other way to provoke a fatal error in gdbm-1.15 this patch
+removes the test. Future gdbm version promisses reporting a regular
+error on closing a database.
+
+RT#133295
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ MANIFEST                |  1 -
+ ext/GDBM_File/t/fatal.t | 49 -------------------------------------------------
+ 2 files changed, 50 deletions(-)
+ delete mode 100644 ext/GDBM_File/t/fatal.t
+
+diff --git a/MANIFEST b/MANIFEST
+index a1a5320..ed5d05f 100644
+--- a/MANIFEST
++++ b/MANIFEST
+@@ -3719,7 +3719,6 @@ ext/GDBM_File/GDBM_File.pm	GDBM extension Perl module
+ ext/GDBM_File/GDBM_File.xs	GDBM extension external subroutines
+ ext/GDBM_File/hints/sco.pl	Hint for GDBM_File for named architecture
+ ext/GDBM_File/Makefile.PL	GDBM extension makefile writer
+-ext/GDBM_File/t/fatal.t		Test the fatal_func argument to gdbm_open
+ ext/GDBM_File/t/gdbm.t		See if GDBM_File works
+ ext/GDBM_File/typemap		GDBM extension interface types
+ ext/Hash-Util/Changes		Change history of Hash::Util
+diff --git a/ext/GDBM_File/t/fatal.t b/ext/GDBM_File/t/fatal.t
+deleted file mode 100644
+index b7045ba..0000000
+--- a/ext/GDBM_File/t/fatal.t
++++ /dev/null
+@@ -1,49 +0,0 @@
+-#!./perl -w
+-use strict;
+-
+-use Test::More;
+-use Config;
+-
+-BEGIN {
+-    plan(skip_all => "GDBM_File was not built")
+-	unless $Config{extensions} =~ /\bGDBM_File\b/;
+-
+-    # https://rt.perl.org/Public/Bug/Display.html?id=117967
+-    plan(skip_all => "GDBM_File is flaky in $^O")
+-        if $^O =~ /darwin/;
+-
+-    plan(tests => 8);
+-    use_ok('GDBM_File');
+-}
+-
+-unlink <Op_dbmx*>;
+-
+-open my $fh, $^X or die "Can't open $^X: $!";
+-my $fileno = fileno $fh;
+-isnt($fileno, undef, "Can find next available file descriptor");
+-close $fh or die $!;
+-
+-is((open $fh, "<&=$fileno"), undef,
+-   "Check that we cannot open fileno $fileno. \$! is $!");
+-
+-umask(0);
+-my %h;
+-isa_ok(tie(%h, 'GDBM_File', 'Op_dbmx', GDBM_WRCREAT, 0640), 'GDBM_File');
+-
+-isnt((open $fh, "<&=$fileno"), undef, "dup fileno $fileno")
+-    or diag("\$! = $!");
+-isnt(close $fh, undef,
+-     "close fileno $fileno, out from underneath the GDBM_File");
+-is(eval {
+-    $h{Perl} = 'Rules';
+-    untie %h;
+-    1;
+-}, undef, 'Trapped error when attempting to write to knobbled GDBM_File');
+-
+-# Observed "File write error" and "lseek error" from two different systems.
+-# So there might be more variants. Important part was that we trapped the error
+-# via croak.
+-like($@, qr/ at .*\bfatal\.t line \d+\.\n\z/,
+-     'expected error message from GDBM_File');
+-
+-unlink <Op_dbmx*>;
+-- 
+2.14.4
+
diff --git a/SOURCES/perl-5.24.4-perform-system-arg-processing-before-fork.patch b/SOURCES/perl-5.24.4-perform-system-arg-processing-before-fork.patch
new file mode 100644
index 0000000..bc986d0
--- /dev/null
+++ b/SOURCES/perl-5.24.4-perform-system-arg-processing-before-fork.patch
@@ -0,0 +1,90 @@
+From bee36f5b5aad82c566311cf8785aa67ba3696155 Mon Sep 17 00:00:00 2001
+From: Zefram <zefram@fysh.org>
+Date: Sat, 16 Dec 2017 05:33:20 +0000
+Subject: [PATCH] perform system() arg processing before fork
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+A lot of things can happen when stringifying an argument list: side
+effects, warnings, exceptions.  In the case of system(), these effects
+should happen in the context of the parent process.  The stringification
+can also depend on which process it happens in, as in the case of
+$$, and in that case it should also happen in the parent process.
+Therefore reduce the argument scalars to strings first thing in pp_system.
+Fixes [perl #121105].
+
+Petr Písař: Ported to 5.24.4 from
+64def2aeaeb63f92dadc6dfa33486c1d7b311963.
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ pp_sys.c    | 16 ++++++++++------
+ t/op/exec.t | 15 ++++++++++++++-
+ 2 files changed, 24 insertions(+), 7 deletions(-)
+
+diff --git a/pp_sys.c b/pp_sys.c
+index 2fcc219..4ce8540 100644
+--- a/pp_sys.c
++++ b/pp_sys.c
+@@ -4343,14 +4343,18 @@ PP(pp_system)
+     int result;
+ # endif
+ 
++    while (++MARK <= SP) {
++	SV *origsv = *MARK;
++	STRLEN len;
++	char *pv;
++	pv = SvPV(origsv, len);
++	*MARK = newSVpvn_flags(pv, len,
++		    (SvFLAGS(origsv) & SVf_UTF8) | SVs_TEMP);
++    }
++    MARK = ORIGMARK;
++
+     if (TAINTING_get) {
+ 	TAINT_ENV();
+-	while (++MARK <= SP) {
+-	    (void)SvPV_nolen_const(*MARK);      /* stringify for taint check */
+-	    if (TAINT_get)
+-		break;
+-	}
+-	MARK = ORIGMARK;
+ 	TAINT_PROPER("system");
+     }
+     PERL_FLUSHALL_FOR_CHILD;
+diff --git a/t/op/exec.t b/t/op/exec.t
+index 726f548..e43dd6e 100644
+--- a/t/op/exec.t
++++ b/t/op/exec.t
+@@ -36,7 +36,7 @@ $ENV{LANGUAGE} = 'C';		# Ditto in GNU.
+ my $Is_VMS   = $^O eq 'VMS';
+ my $Is_Win32 = $^O eq 'MSWin32';
+ 
+-plan(tests => 33);
++plan(tests => 36);
+ 
+ my $Perl = which_perl();
+ 
+@@ -173,6 +173,19 @@ TODO: {
+         "exec failure doesn't terminate process");
+ }
+ 
++package CountRead {
++    sub TIESCALAR { bless({ n => 0 }, $_[0]) }
++    sub FETCH { ++$_[0]->{n} }
++}
++my $cr;
++tie $cr, "CountRead";
++is system($^X, "-e", "exit(\$ARGV[0] eq '1' ? 0 : 1)", $cr), 0,
++    "system args have magic processed exactly once";
++is tied($cr)->{n}, 1, "system args have magic processed before fork";
++
++is system($^X, "-e", "exit(\$ARGV[0] eq \$ARGV[1] ? 0 : 1)", "$$", $$), 0,
++    "system args have magic processed before fork";
++
+ my $test = curr_test();
+ exec $Perl, '-le', qq{${quote}print 'ok $test - exec PROG, LIST'${quote}};
+ fail("This should never be reached if the exec() worked");
+-- 
+2.14.3
+
diff --git a/SOURCES/perl-5.24.4-perl-129149-avoid-a-heap-buffer-overflow-with-pack-W.patch b/SOURCES/perl-5.24.4-perl-129149-avoid-a-heap-buffer-overflow-with-pack-W.patch
new file mode 100644
index 0000000..76337e8
--- /dev/null
+++ b/SOURCES/perl-5.24.4-perl-129149-avoid-a-heap-buffer-overflow-with-pack-W.patch
@@ -0,0 +1,65 @@
+From cd6b0f4e030d55ff077e9bc8fbcf156ab79dceb1 Mon Sep 17 00:00:00 2001
+From: Tony Cook <tony@develop-help.com>
+Date: Wed, 7 Sep 2016 16:51:39 +1000
+Subject: [PATCH] (perl #129149) avoid a heap buffer overflow with pack "W"...
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Petr Písař: Ported to 5.24.4:
+
+From bf4a926a29374161655548b149d1cb37300bcc05 Mon Sep 17 00:00:00 2001
+From: Tony Cook <tony@develop-help.com>
+Date: Wed, 7 Sep 2016 16:51:39 +1000
+Subject: [PATCH] (perl #129149) avoid a heap buffer overflow with pack "W"...
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ pp_pack.c   |  2 +-
+ t/op/pack.t | 13 ++++++++++++-
+ 2 files changed, 13 insertions(+), 2 deletions(-)
+
+diff --git a/pp_pack.c b/pp_pack.c
+index c0de5ab..29fdb01 100644
+--- a/pp_pack.c
++++ b/pp_pack.c
+@@ -2598,7 +2598,7 @@ S_pack_rec(pTHX_ SV *cat, tempsym_t* symptr, SV **beglist, SV **endlist )
+ 		if (in_bytes) auv = auv % 0x100;
+ 		if (utf8) {
+ 		  W_utf8:
+-		    if (cur > end) {
++		    if (cur >= end) {
+ 			*cur = '\0';
+ 			SvCUR_set(cat, cur - start);
+ 
+diff --git a/t/op/pack.t b/t/op/pack.t
+index a480c3a..cf5ae78 100644
+--- a/t/op/pack.t
++++ b/t/op/pack.t
+@@ -12,7 +12,7 @@ my $no_endianness = $] > 5.009 ? '' :
+ my $no_signedness = $] > 5.009 ? '' :
+   "Signed/unsigned pack modifiers not available on this perl";
+ 
+-plan tests => 14716;
++plan tests => 14717;
+ 
+ use strict;
+ use warnings qw(FATAL all);
+@@ -2066,3 +2066,14 @@ SKIP:
+     fresh_perl_like('pack "c10f1073741824"', qr/Out of memory during pack/, { stderr => 1 },
+ 		    "integer overflow calculating allocation (multiply)");
+ }
++
++{
++    # [perl #129149] the code below would write one past the end of the output
++    # buffer, only detected by ASAN, not by valgrind
++    $Config{ivsize} >= 8
++      or skip "[perl #129149] need 64-bit for this test", 1;
++    fresh_perl_is(<<'EOS', "ok\n", { stderr => 1 }, "pack W overflow");
++print pack("ucW", "0000", 0, 140737488355327) eq "\$,#`P,```\n\0\x{7fffffffffff}"
++ ? "ok\n" : "not ok\n";
++EOS
++}
+-- 
+2.14.3
+
diff --git a/SOURCES/perl-5.24.4-perl-129149-fix-the-test-so-skip-has-a-SKIP-to-work-.patch b/SOURCES/perl-5.24.4-perl-129149-fix-the-test-so-skip-has-a-SKIP-to-work-.patch
new file mode 100644
index 0000000..026d329
--- /dev/null
+++ b/SOURCES/perl-5.24.4-perl-129149-fix-the-test-so-skip-has-a-SKIP-to-work-.patch
@@ -0,0 +1,37 @@
+From 308112b17f3d093c11cc25408a421c86364de828 Mon Sep 17 00:00:00 2001
+From: Tony Cook <tony@develop-help.com>
+Date: Tue, 17 Jan 2017 15:36:31 +1100
+Subject: [PATCH] (perl #129149) fix the test so skip has a SKIP: to work with
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Thanks to bulk88 for pointing this out.
+
+Petr Písař: Ported to 5.24.4 from:
+
+From 30be69c851a7fa7e29d85c9b6e070273df82f3e7 Mon Sep 17 00:00:00 2001
+From: Tony Cook <tony@develop-help.com>
+Date: Tue, 17 Jan 2017 15:36:31 +1100
+Subject: [PATCH] (perl #129149) fix the test so skip has a SKIP: to work with
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ t/op/pack.t | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/t/op/pack.t b/t/op/pack.t
+index cf5ae78..e399f7e 100644
+--- a/t/op/pack.t
++++ b/t/op/pack.t
+@@ -2067,6 +2067,7 @@ SKIP:
+ 		    "integer overflow calculating allocation (multiply)");
+ }
+ 
++SKIP:
+ {
+     # [perl #129149] the code below would write one past the end of the output
+     # buffer, only detected by ASAN, not by valgrind
+-- 
+2.14.3
+
diff --git a/SOURCES/perl-5.24.4-perl-129350-anchored-floating-substrings-must-be-utf.patch b/SOURCES/perl-5.24.4-perl-129350-anchored-floating-substrings-must-be-utf.patch
new file mode 100644
index 0000000..9fa716d
--- /dev/null
+++ b/SOURCES/perl-5.24.4-perl-129350-anchored-floating-substrings-must-be-utf.patch
@@ -0,0 +1,56 @@
+From f34cc5af94622240abbf730ac82c4f91cc4ffb83 Mon Sep 17 00:00:00 2001
+From: Hugo van der Sanden <hv@crypt.org>
+Date: Tue, 4 Oct 2016 14:40:11 +0100
+Subject: [PATCH] anchored/floating substrings must be utf8 if target is
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Ported to 5.24.4:
+
+commit 2814f4b3549f665a6f9203ac9e890ae1e415e0dc
+Author: Hugo van der Sanden <hv@crypt.org>
+Date:   Tue Oct 4 14:40:11 2016 +0100
+
+    [perl #129350] anchored/floating substrings must be utf8 if target is
+
+    If the target is utf8 and either the anchored or floating substrings
+    are not, we need to create utf8 copies to check against. The state
+    of the two substrings may not be the same, but we were only testing
+    whichever we planned to check first.
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ regexec.c     | 3 ++-
+ t/re/re_tests | 1 +
+ 2 files changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/regexec.c b/regexec.c
+index ff8e89c..6904546 100644
+--- a/regexec.c
++++ b/regexec.c
+@@ -703,7 +703,8 @@ Perl_re_intuit_start(pTHX_
+     reginfo->poscache_maxiter = 0;
+ 
+     if (utf8_target) {
+-	if (!prog->check_utf8 && prog->check_substr)
++        if ((!prog->anchored_utf8 && prog->anchored_substr)
++                || (!prog->float_utf8 && prog->float_substr))
+ 	    to_utf8_substr(prog);
+ 	check = prog->check_utf8;
+     } else {
+diff --git a/t/re/re_tests b/t/re/re_tests
+index ab7ddbb..8b0feaa 100644
+--- a/t/re/re_tests
++++ b/t/re/re_tests
+@@ -1969,6 +1969,7 @@ ab(?#Comment){2}c	abbc	y	$&	abbc
+ aa$|a(?R)a|a	aaa	y	$&	aaa		# [perl 128420] recursive matches
+ (?:\1|a)([bcd])\1(?:(?R)|e)\1	abbaccaddedcb	y	$&	abbaccaddedcb		# [perl 128420] recursive match with backreferences
+ (?il)\x{100}|\x{100}|\x{FF}	\xFF	y	$&	\xFF
++\b\z0*\x{100}	.\x{100}	n	-	-	# [perl #129350] crashed in intuit_start
+ 
+ # Keep these lines at the end of the file
+ # vim: softtabstop=0 noexpandtab
+-- 
+2.14.3
+
diff --git a/SOURCES/perl-5.24.4-perl-130307-Correctly-unwind-on-cache-hit.patch b/SOURCES/perl-5.24.4-perl-130307-Correctly-unwind-on-cache-hit.patch
new file mode 100644
index 0000000..58c8e2f
--- /dev/null
+++ b/SOURCES/perl-5.24.4-perl-130307-Correctly-unwind-on-cache-hit.patch
@@ -0,0 +1,53 @@
+From 7ec44a7b6adbc0221150969fc61134322fd5ed85 Mon Sep 17 00:00:00 2001
+From: Hugo van der Sanden <hv@crypt.org>
+Date: Mon, 12 Dec 2016 15:15:06 +0000
+Subject: [PATCH] Correctly unwind on cache hit
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Petr Pisar: Ported to 5.24.4:
+
+commit d3c48e81594c1d64ba9833495e45d8951b42027c
+Author: Hugo van der Sanden <hv@crypt.org>
+Date:   Mon Dec 12 15:15:06 2016 +0000
+
+    [perl #130307] Correctly unwind on cache hit
+
+    We've already incremented curlyx.count in the WHILEM branch before
+    we check for a hit in the super-linear cache, so must reverse that
+    on the sayNO.
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ regexec.c     | 1 +
+ t/re/re_tests | 1 +
+ 2 files changed, 2 insertions(+)
+
+diff --git a/regexec.c b/regexec.c
+index 6904546..25ea3a3 100644
+--- a/regexec.c
++++ b/regexec.c
+@@ -7334,6 +7334,7 @@ NULL
+                         DEBUG_EXECUTE_r( Perl_re_exec_indentf( aTHX_  "whilem: (cache) already tried at this position...\n",
+                             depth)
+ 			);
++                        cur_curlyx->u.curlyx.count--;
+ 			sayNO; /* cache records failure */
+ 		    }
+ 		    ST.cache_offset = offset;
+diff --git a/t/re/re_tests b/t/re/re_tests
+index 8b0feaa..6717b85 100644
+--- a/t/re/re_tests
++++ b/t/re/re_tests
+@@ -1970,6 +1970,7 @@ aa$|a(?R)a|a	aaa	y	$&	aaa		# [perl 128420] recursive matches
+ (?:\1|a)([bcd])\1(?:(?R)|e)\1	abbaccaddedcb	y	$&	abbaccaddedcb		# [perl 128420] recursive match with backreferences
+ (?il)\x{100}|\x{100}|\x{FF}	\xFF	y	$&	\xFF
+ \b\z0*\x{100}	.\x{100}	n	-	-	# [perl #129350] crashed in intuit_start
++(X{2,}[-X]{1,4}){3,}X{2,}	XXX-XXX-XXX--	n	-	-	# [perl #130307]
+ 
+ # Keep these lines at the end of the file
+ # vim: softtabstop=0 noexpandtab
+-- 
+2.14.3
+
diff --git a/SOURCES/perl-5.25.10-fix-VMS-test-fail.patch b/SOURCES/perl-5.25.10-fix-VMS-test-fail.patch
new file mode 100644
index 0000000..38cc190
--- /dev/null
+++ b/SOURCES/perl-5.25.10-fix-VMS-test-fail.patch
@@ -0,0 +1,44 @@
+From bce4a2abeb8652d19e97d3bf07dd2580a3cc2e6c Mon Sep 17 00:00:00 2001
+From: Hugo van der Sanden <hv@crypt.org>
+Date: Sat, 25 Feb 2017 10:42:17 +0000
+Subject: [PATCH] fix VMS test fail
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+d7186add added a runperl() test that breaks command line length limits for
+VMS. Switch to fresh_perl() instead, so the prog is put in a file for us.
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ t/comp/parser_run.t | 12 ++++++------
+ 1 file changed, 6 insertions(+), 6 deletions(-)
+
+diff --git a/t/comp/parser_run.t b/t/comp/parser_run.t
+index 2543f49..e74644d 100644
+--- a/t/comp/parser_run.t
++++ b/t/comp/parser_run.t
+@@ -14,14 +14,14 @@ plan(1);
+ 
+ # [perl #130814] can reallocate lineptr while looking ahead for
+ # "Missing $ on loop variable" diagnostic.
+-my $result = runperl(
+-    prog => " foreach m0\n\$" . ("0" x 0x2000),
+-    stderr => 1,
++my $result = fresh_perl(
++    " foreach m0\n\$" . ("0" x 0x2000),
++    { stderr => 1 },
+ );
+-is($result, <<EXPECT);
+-syntax error at -e line 3, near "foreach m0
++is($result . "\n", <<EXPECT);
++syntax error at - line 3, near "foreach m0
+ "
+-Identifier too long at -e line 3.
++Identifier too long at - line 3.
+ EXPECT
+ 
+ __END__
+-- 
+2.7.4
+
diff --git a/SOURCES/perl-5.25.10-perl-130814-Add-testcase-and-new-testfile-t-comp-par.patch b/SOURCES/perl-5.25.10-perl-130814-Add-testcase-and-new-testfile-t-comp-par.patch
new file mode 100644
index 0000000..570df14
--- /dev/null
+++ b/SOURCES/perl-5.25.10-perl-130814-Add-testcase-and-new-testfile-t-comp-par.patch
@@ -0,0 +1,55 @@
+From d7186addd1b477f6bdcef5e9d24f2125691a9082 Mon Sep 17 00:00:00 2001
+From: Hugo van der Sanden <hv@crypt.org>
+Date: Sun, 19 Feb 2017 11:15:38 +0000
+Subject: [PATCH] [perl #130814] Add testcase, and new testfile
+ t/comp/parser_run.t
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Sometimes it's useful to have test.pl around, but it seems inappropriate
+to pollute the existing t/comp/parser.t with that.
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ t/comp/parser_run.t | 28 ++++++++++++++++++++++++++++
+ 1 file changed, 28 insertions(+)
+ create mode 100644 t/comp/parser_run.t
+
+diff --git a/t/comp/parser_run.t b/t/comp/parser_run.t
+new file mode 100644
+index 0000000..2543f49
+--- /dev/null
++++ b/t/comp/parser_run.t
+@@ -0,0 +1,28 @@
++#!./perl
++
++# Parser tests that want test.pl, eg to use runperl() for tests to show
++# reads through invalid pointers.
++# Note that this should still be runnable under miniperl.
++
++BEGIN {
++    @INC = qw(. ../lib );
++    chdir 't' if -d 't';
++}
++
++require './test.pl';
++plan(1);
++
++# [perl #130814] can reallocate lineptr while looking ahead for
++# "Missing $ on loop variable" diagnostic.
++my $result = runperl(
++    prog => " foreach m0\n\$" . ("0" x 0x2000),
++    stderr => 1,
++);
++is($result, <<EXPECT);
++syntax error at -e line 3, near "foreach m0
++"
++Identifier too long at -e line 3.
++EXPECT
++
++__END__
++# ex: set ts=8 sts=4 sw=4 et:
+-- 
+2.7.4
+
diff --git a/SOURCES/perl-5.25.2-SEGV-in-Subroutine-redefined-warning.patch b/SOURCES/perl-5.25.2-SEGV-in-Subroutine-redefined-warning.patch
new file mode 100644
index 0000000..273cb29
--- /dev/null
+++ b/SOURCES/perl-5.25.2-SEGV-in-Subroutine-redefined-warning.patch
@@ -0,0 +1,76 @@
+From fc0fe26a7d286480c1bb25f57e469ece575bb68d Mon Sep 17 00:00:00 2001
+From: David Mitchell <davem@iabyn.com>
+Date: Thu, 7 Jul 2016 17:03:29 +0100
+Subject: [PATCH] SEGV in "Subroutine redefined" warning
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+RT #128257
+
+The following SEGVed:
+
+    sub P::f{}
+    undef *P::;
+    *P::f =sub{};
+
+due to the code which generates the "Subroutine STASH::NAME redefined"
+warning assuming that the GV always has a stash. Make it so that if it
+hasn't, the message changes to  "Subroutine NAME redefined" rather than
+just crashing.
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ sv.c              | 18 +++++++++++-------
+ t/lib/warnings/sv |  8 ++++++++
+ 2 files changed, 19 insertions(+), 7 deletions(-)
+
+diff --git a/sv.c b/sv.c
+index 1b7a283..0cbe371 100644
+--- a/sv.c
++++ b/sv.c
+@@ -4074,14 +4074,18 @@ Perl_gv_setref(pTHX_ SV *const dstr, SV *const sstr)
+ 			    CvCONST((const CV *)sref)
+ 				 ? cv_const_sv((const CV *)sref)
+ 				 : NULL;
++                        HV * const stash = GvSTASH((const GV *)dstr);
+ 			report_redefined_cv(
+-			   sv_2mortal(Perl_newSVpvf(aTHX_
+-				"%"HEKf"::%"HEKf,
+-				HEKfARG(
+-				 HvNAME_HEK(GvSTASH((const GV *)dstr))
+-				),
+-				HEKfARG(GvENAME_HEK(MUTABLE_GV(dstr)))
+-			   )),
++			   sv_2mortal(
++                             stash
++                               ? Perl_newSVpvf(aTHX_
++				    "%"HEKf"::%"HEKf,
++				    HEKfARG(HvNAME_HEK(stash)),
++				    HEKfARG(GvENAME_HEK(MUTABLE_GV(dstr))))
++                               : Perl_newSVpvf(aTHX_
++				    "%"HEKf,
++				    HEKfARG(GvENAME_HEK(MUTABLE_GV(dstr))))
++			   ),
+ 			   cv,
+ 			   CvCONST((const CV *)sref) ? &new_const_sv : NULL
+ 			);
+diff --git a/t/lib/warnings/sv b/t/lib/warnings/sv
+index 5ddd4fe..c8e0e62 100644
+--- a/t/lib/warnings/sv
++++ b/t/lib/warnings/sv
+@@ -413,3 +413,11 @@ Argument "a_c" isn't numeric in preincrement (++) at - line 5.
+ Argument "(?^:abc)" isn't numeric in preincrement (++) at - line 6.
+ Argument "123x" isn't numeric in preincrement (++) at - line 7.
+ Argument "123e" isn't numeric in preincrement (++) at - line 8.
++########
++# RT #128257 This used to SEGV
++use warnings;
++sub Foo::f {}
++undef *Foo::;
++*Foo::f =sub {};
++EXPECT
++Subroutine f redefined at - line 5.
+-- 
+2.5.5
+
diff --git a/SOURCES/perl-5.25.2-only-treat-stash-entries-with-.-as-sub-stashes.patch b/SOURCES/perl-5.25.2-only-treat-stash-entries-with-.-as-sub-stashes.patch
new file mode 100644
index 0000000..57e96c2
--- /dev/null
+++ b/SOURCES/perl-5.25.2-only-treat-stash-entries-with-.-as-sub-stashes.patch
@@ -0,0 +1,64 @@
+From e7acdfe976f01ee0d1ba31b3b1db61454a72d6c9 Mon Sep 17 00:00:00 2001
+From: David Mitchell <davem@iabyn.com>
+Date: Tue, 21 Jun 2016 17:06:52 +0100
+Subject: [PATCH] only treat stash entries with  .*:: as sub-stashes
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+RT #128238
+
+%: = 0 would cause an assertion failure in Perl_gv_check(), since when
+it searched a stash for substashes, it assumed anything ending in ':' was
+a substash, whereas substashes end in '::'. So check for a double colon
+before recursing.
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ gv.c         | 5 ++++-
+ t/op/stash.t | 9 ++++++++-
+ 2 files changed, 12 insertions(+), 2 deletions(-)
+
+diff --git a/gv.c b/gv.c
+index 4df3bce..2b3bdfa 100644
+--- a/gv.c
++++ b/gv.c
+@@ -2423,7 +2423,10 @@ Perl_gv_check(pTHX_ HV *stash)
+ 	for (entry = HvARRAY(stash)[i]; entry; entry = HeNEXT(entry)) {
+             GV *gv;
+             HV *hv;
+-	    if (HeKEY(entry)[HeKLEN(entry)-1] == ':' &&
++	    STRLEN keylen = HeKLEN(entry);
++            const char * const key = HeKEY(entry);
++
++	    if (keylen >= 2 && key[keylen-2] == ':'  && key[keylen-1] == ':' &&
+ 		(gv = MUTABLE_GV(HeVAL(entry))) && isGV(gv) && (hv = GvHV(gv)))
+ 	    {
+ 		if (hv != PL_defstash && hv != stash
+diff --git a/t/op/stash.t b/t/op/stash.t
+index b8e0f34..ec795a9 100644
+--- a/t/op/stash.t
++++ b/t/op/stash.t
+@@ -7,7 +7,7 @@ BEGIN {
+ 
+ BEGIN { require "./test.pl"; }
+ 
+-plan( tests => 52 );
++plan( tests => 53 );
+ 
+ # Used to segfault (bug #15479)
+ fresh_perl_like(
+@@ -341,3 +341,10 @@ is runperl(
+    ),
+    "ok\n",
+    '[perl #128086] no crash from assigning hash to *:::::: & deleting it';
++
++is runperl(
++    prog => 'BEGIN { %: = 0; $^W=1}; print qq|ok\n|',
++    stderr => 1,
++   ),
++   "ok\n",
++   "[perl #128238] don't treat %: as a stash (needs 2 colons)"
+-- 
+2.5.5
+
diff --git a/SOURCES/perl-5.25.2-perl-128238-Crash-with-non-stash-in-stash.patch b/SOURCES/perl-5.25.2-perl-128238-Crash-with-non-stash-in-stash.patch
new file mode 100644
index 0000000..b6f007e
--- /dev/null
+++ b/SOURCES/perl-5.25.2-perl-128238-Crash-with-non-stash-in-stash.patch
@@ -0,0 +1,66 @@
+From 9e5cda6b852ca831004628051cf32c1576146452 Mon Sep 17 00:00:00 2001
+From: Father Chrysostomos <sprout@cpan.org>
+Date: Thu, 23 Jun 2016 21:57:09 -0700
+Subject: [PATCH] [perl #128238] Crash with non-stash in stash
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This is a follow-up to e7acdfe976f.  Even if the name of the stash
+entry ends with ::, it may not itself contain a real stash (though
+this only happens with code that assigns directly to stash entries,
+which has undefined behaviour according to perlmod), so skip hashes
+that are not stashes.
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ gv.c         |  4 ++--
+ t/op/stash.t | 11 +++++++++--
+ 2 files changed, 11 insertions(+), 4 deletions(-)
+
+diff --git a/gv.c b/gv.c
+index 2b3bdfa..dff611e 100644
+--- a/gv.c
++++ b/gv.c
+@@ -2411,10 +2411,10 @@ Perl_gv_check(pTHX_ HV *stash)
+ 
+     PERL_ARGS_ASSERT_GV_CHECK;
+ 
+-    if (!HvARRAY(stash))
++    if (!SvOOK(stash))
+ 	return;
+ 
+-    assert(SvOOK(stash));
++    assert(HvARRAY(stash));
+ 
+     for (i = 0; i <= (I32) HvMAX(stash); i++) {
+         const HE *entry;
+diff --git a/t/op/stash.t b/t/op/stash.t
+index 1591dbf..fe42700 100644
+--- a/t/op/stash.t
++++ b/t/op/stash.t
+@@ -7,7 +7,7 @@ BEGIN {
+ 
+ BEGIN { require "./test.pl"; }
+ 
+-plan( tests => 53 );
++plan( tests => 54 );
+ 
+ # Used to segfault (bug #15479)
+ fresh_perl_like(
+@@ -342,4 +342,11 @@ is runperl(
+     stderr => 1,
+    ),
+    "ok\n",
+-   "[perl #128238] don't treat %: as a stash (needs 2 colons)"
++   "[perl #128238] don't treat %: as a stash (needs 2 colons)";
++
++is runperl(
++    prog => 'BEGIN { $::{q|foo::|}=*ENV; $^W=1}; print qq|ok\n|',
++    stderr => 1,
++   ),
++   "ok\n",
++   "[perl #128238] non-stashes in stashes";
+-- 
+2.5.5
+
diff --git a/SOURCES/perl-5.25.2-perl-128532-Crash-vivifying-stub-in-deleted-pkg.patch b/SOURCES/perl-5.25.2-perl-128532-Crash-vivifying-stub-in-deleted-pkg.patch
new file mode 100644
index 0000000..fc517b9
--- /dev/null
+++ b/SOURCES/perl-5.25.2-perl-128532-Crash-vivifying-stub-in-deleted-pkg.patch
@@ -0,0 +1,60 @@
+From 63aab7ecaa6e826f845c405894bd8c4b6f601b39 Mon Sep 17 00:00:00 2001
+From: Father Chrysostomos <sprout@cpan.org>
+Date: Sun, 3 Jul 2016 22:23:34 -0700
+Subject: [PATCH] [perl #128532] Crash vivifying stub in deleted pkg
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+v5.17.0-515-g186a5ba, which added newSTUB, did not take into account
+that a GV may have a null GvSTASH pointer, if its stash has been
+freed, so this crashes:
+
+delete $My::{"Foo::"}; \&My::Foo::foo
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ op.c       | 2 +-
+ t/op/ref.t | 6 +++++-
+ 2 files changed, 6 insertions(+), 2 deletions(-)
+
+diff --git a/op.c b/op.c
+index 46e76ac..4735d1b 100644
+--- a/op.c
++++ b/op.c
+@@ -9081,7 +9081,7 @@ Perl_newSTUB(pTHX_ GV *gv, bool fake)
+     assert(!GvCVu(gv));
+     GvCV_set(gv, cv);
+     GvCVGEN(gv) = 0;
+-    if (!fake && HvENAME_HEK(GvSTASH(gv)))
++    if (!fake && GvSTASH(gv) && HvENAME_HEK(GvSTASH(gv)))
+ 	gv_method_changed(gv);
+     if (SvFAKE(gv)) {
+ 	cvgv = gv_fetchsv((SV *)gv, GV_ADDMULTI, SVt_PVCV);
+diff --git a/t/op/ref.t b/t/op/ref.t
+index 19a44bb..84d9217 100644
+--- a/t/op/ref.t
++++ b/t/op/ref.t
+@@ -8,7 +8,7 @@ BEGIN {
+ 
+ use strict qw(refs subs);
+ 
+-plan(235);
++plan(236);
+ 
+ # Test this first before we extend the stack with other operations.
+ # This caused an asan failure due to a bad write past the end of the stack.
+@@ -124,6 +124,10 @@ is (join(':',@{$spring2{"foo"}}), "1:2:3:4");
+     is ($called, 1);
+ }
+ is ref eval {\&{""}}, "CODE", 'reference to &{""} [perl #94476]';
++delete $My::{"Foo::"}; 
++is ref \&My::Foo::foo, "CODE",
++  'creating stub with \&deleted_stash::foo [perl #128532]';
++
+ 
+ # Test references to return values of operators (TARGs/PADTMPs)
+ {
+-- 
+2.5.5
+
diff --git a/SOURCES/perl-5.25.2-t-test.pl-Add-fresh_perl-function.patch b/SOURCES/perl-5.25.2-t-test.pl-Add-fresh_perl-function.patch
new file mode 100644
index 0000000..24d7f60
--- /dev/null
+++ b/SOURCES/perl-5.25.2-t-test.pl-Add-fresh_perl-function.patch
@@ -0,0 +1,74 @@
+From f6203e997f3012b8aab4cd35fe49f58e4d71fb8c Mon Sep 17 00:00:00 2001
+From: Karl Williamson <khw@cpan.org>
+Date: Sun, 10 Jul 2016 22:06:12 -0600
+Subject: [PATCH] t/test.pl: Add fresh_perl() function
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This will be useful for cases where the results don't readily fall into
+fresh_perl_is and fresh_perl_like, such as when a bunch of massaging of
+the results is needed before it is convenient to test them.
+fresh_perl_like() could be used, but in the case of failure there could
+be lines and lines of noise output.
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ t/test.pl | 25 +++++++++++++++++++++----
+ 1 file changed, 21 insertions(+), 4 deletions(-)
+
+diff --git a/t/test.pl b/t/test.pl
+index 41b77f4..20d08e9 100644
+--- a/t/test.pl
++++ b/t/test.pl
+@@ -953,11 +953,16 @@ sub register_tempfile {
+     return $count;
+ }
+ 
+-# This is the temporary file for _fresh_perl
++# This is the temporary file for fresh_perl
+ my $tmpfile = tempfile();
+ 
+-sub _fresh_perl {
+-    my($prog, $action, $expect, $runperl_args, $name) = @_;
++sub fresh_perl {
++    my($prog, $runperl_args) = @_;
++
++    # Run 'runperl' with the complete perl program contained in '$prog', and
++    # arguments in the hash referred to by '$runperl_args'.  The results are
++    # returned, with $? set to the exit code.  Unless overridden, stderr is
++    # redirected to stdout.
+ 
+     # Given the choice of the mis-parsable {}
+     # (we want an anon hash, but a borked lexer might think that it's a block)
+@@ -975,7 +980,8 @@ sub _fresh_perl {
+     close TEST or die "Cannot close $tmpfile: $!";
+ 
+     my $results = runperl(%$runperl_args);
+-    my $status = $?;
++    my $status = $?;    # Not necessary to save this, but it makes it clear to
++                        # future maintainers.
+ 
+     # Clean up the results into something a bit more predictable.
+     $results  =~ s/\n+$//;
+@@ -994,6 +1000,17 @@ sub _fresh_perl {
+         $results =~ s/\n\n/\n/g;
+     }
+ 
++    $? = $status;
++    return $results;
++}
++
++
++sub _fresh_perl {
++    my($prog, $action, $expect, $runperl_args, $name) = @_;
++
++    my $results = fresh_perl($prog, $runperl_args);
++    my $status = $?;
++
+     # Use the first line of the program as a name if none was given
+     unless( $name ) {
+         ($first_line, $name) = $prog =~ /^((.{1,50}).*)/;
+-- 
+2.7.4
+
diff --git a/SOURCES/perl-5.25.2-uninit-warning-from-h-const-coredumped.patch b/SOURCES/perl-5.25.2-uninit-warning-from-h-const-coredumped.patch
new file mode 100644
index 0000000..1433a9f
--- /dev/null
+++ b/SOURCES/perl-5.25.2-uninit-warning-from-h-const-coredumped.patch
@@ -0,0 +1,74 @@
+From 55b6481ff87f84626ba01275708297a42a6537b1 Mon Sep 17 00:00:00 2001
+From: David Mitchell <davem@iabyn.com>
+Date: Tue, 21 Jun 2016 15:23:20 +0100
+Subject: [PATCH] uninit warning from $h{\const} coredumped
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+The code that printed the the name and subscript of a hash element
+in an "uninitialized variable" warning assumed that a constant
+hash subscript would be SvPOK. Something like \1 is a constant,
+but is ROK, not POK. SEGVs ensured.
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ sv.c            |  5 ++++-
+ t/op/hashwarn.t | 19 ++++++++++++++++++-
+ 2 files changed, 22 insertions(+), 2 deletions(-)
+
+diff --git a/sv.c b/sv.c
+index 535ee8d..b0fdd15 100644
+--- a/sv.c
++++ b/sv.c
+@@ -15683,9 +15683,12 @@ Perl_varname(pTHX_ const GV *const gv, const char gvtype, PADOFFSET targ,
+ 
+     if (subscript_type == FUV_SUBSCRIPT_HASH) {
+ 	SV * const sv = newSV(0);
++        STRLEN len;
++        const char * const pv = SvPV_nomg_const((SV*)keyname, len);
++
+ 	*SvPVX(name) = '$';
+ 	Perl_sv_catpvf(aTHX_ name, "{%s}",
+-	    pv_pretty(sv, SvPVX_const(keyname), SvCUR(keyname), 32, NULL, NULL,
++	    pv_pretty(sv, pv, len, 32, NULL, NULL,
+ 		    PERL_PV_PRETTY_DUMP | PERL_PV_ESCAPE_UNI_DETECT ));
+ 	SvREFCNT_dec_NN(sv);
+     }
+diff --git a/t/op/hashwarn.t b/t/op/hashwarn.t
+index a6a1de9..6d72244 100644
+--- a/t/op/hashwarn.t
++++ b/t/op/hashwarn.t
+@@ -6,7 +6,7 @@ BEGIN {
+ }
+ 
+ require './test.pl';
+-plan( tests => 16 );
++plan( tests => 18 );
+ 
+ use strict;
+ use warnings;
+@@ -71,3 +71,20 @@ my $fail_not_hr   = 'Not a HASH reference at ';
+     cmp_ok(scalar(@warnings),'==',0,'pseudo-hash 2 count');
+     cmp_ok(substr($@,0,length($fail_not_hr)),'eq',$fail_not_hr,'pseudo-hash 2 msg');
+ }
++
++# RT #128189
++# this used to coredump
++
++{
++    @warnings = ();
++    my %h;
++
++    no warnings;
++    use warnings qw(uninitialized);
++
++    my $x = "$h{\1}";
++    is(scalar @warnings, 1, "RT #128189 - 1 warning");
++    like("@warnings",
++        qr/Use of uninitialized value \$h\{"SCALAR\(0x[\da-f]+\)"\}/,
++        "RT #128189 correct warning");
++}
+-- 
+2.5.5
+
diff --git a/SOURCES/perl-5.25.4-clean-up-gv_fetchmethod_pvn_flags-move-origname-init.patch b/SOURCES/perl-5.25.4-clean-up-gv_fetchmethod_pvn_flags-move-origname-init.patch
new file mode 100644
index 0000000..957009d
--- /dev/null
+++ b/SOURCES/perl-5.25.4-clean-up-gv_fetchmethod_pvn_flags-move-origname-init.patch
@@ -0,0 +1,32 @@
+From d5ea0ef8623c7d7ba5f42d239787aa71393e2054 Mon Sep 17 00:00:00 2001
+From: Yves Orton <demerphq@gmail.com>
+Date: Tue, 13 Sep 2016 23:06:58 +0200
+Subject: [PATCH 2/5] clean up gv_fetchmethod_pvn_flags: move origname init to
+ function start
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+so it is more obvious that it is a constant copy of the
+original name.
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ gv.c | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/gv.c b/gv.c
+index b0221e0..fe38d44 100644
+--- a/gv.c
++++ b/gv.c
+@@ -1014,7 +1014,6 @@ Perl_gv_fetchmethod_pvn_flags(pTHX_ HV *stash, const char *name, const STRLEN le
+     const char *nsplit = NULL;
+     GV* gv;
+     HV* ostash = stash;
+-    const char * const origname = name;
+     SV *const error_report = MUTABLE_SV(stash);
+     const U32 autoload = flags & GV_AUTOLOAD;
+     const U32 do_croak = flags & GV_CROAK;
+-- 
+2.7.4
+
diff --git a/SOURCES/perl-5.25.4-clean-up-gv_fetchmethod_pvn_flags-rename-nsplit-to-l.patch b/SOURCES/perl-5.25.4-clean-up-gv_fetchmethod_pvn_flags-rename-nsplit-to-l.patch
new file mode 100644
index 0000000..9938704
--- /dev/null
+++ b/SOURCES/perl-5.25.4-clean-up-gv_fetchmethod_pvn_flags-rename-nsplit-to-l.patch
@@ -0,0 +1,92 @@
+From e2cace1e9e89525afbca257742ddb36630b7fbc3 Mon Sep 17 00:00:00 2001
+From: Yves Orton <demerphq@gmail.com>
+Date: Tue, 13 Sep 2016 23:10:48 +0200
+Subject: [PATCH 3/5] clean up gv_fetchmethod_pvn_flags: rename nsplit to
+ last_separator
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+nsplit if set points at the first char of the last separator
+in name, so rename it so it is more comprehensible what it means.
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ gv.c | 24 ++++++++++++------------
+ 1 file changed, 12 insertions(+), 12 deletions(-)
+
+diff --git a/gv.c b/gv.c
+index fe38d44..07709a0 100644
+--- a/gv.c
++++ b/gv.c
+@@ -1011,7 +1011,7 @@ Perl_gv_fetchmethod_pvn_flags(pTHX_ HV *stash, const char *name, const STRLEN le
+     const char * const origname = name;
+     const char * const name_end = name + len;
+     const char *nend;
+-    const char *nsplit = NULL;
++    const char *last_separator = NULL;
+     GV* gv;
+     HV* ostash = stash;
+     SV *const error_report = MUTABLE_SV(stash);
+@@ -1024,38 +1024,38 @@ Perl_gv_fetchmethod_pvn_flags(pTHX_ HV *stash, const char *name, const STRLEN le
+     if (SvTYPE(stash) < SVt_PVHV)
+ 	stash = NULL;
+     else {
+-	/* The only way stash can become NULL later on is if nsplit is set,
++	/* The only way stash can become NULL later on is if last_separator is set,
+ 	   which in turn means that there is no need for a SVt_PVHV case
+ 	   the error reporting code.  */
+     }
+ 
+     for (nend = name; *nend || nend != name_end; nend++) {
+ 	if (*nend == '\'') {
+-	    nsplit = nend;
++	    last_separator = nend;
+ 	    name = nend + 1;
+ 	}
+ 	else if (*nend == ':' && *(nend + 1) == ':') {
+-	    nsplit = nend++;
++	    last_separator = nend++;
+ 	    name = nend + 1;
+ 	}
+     }
+-    if (nsplit) {
+-	if ((nsplit - origname) == 5 && memEQ(origname, "SUPER", 5)) {
++    if (last_separator) {
++	if ((last_separator - origname) == 5 && memEQ(origname, "SUPER", 5)) {
+ 	    /* ->SUPER::method should really be looked up in original stash */
+ 	    stash = CopSTASH(PL_curcop);
+ 	    flags |= GV_SUPER;
+ 	    DEBUG_o( Perl_deb(aTHX_ "Treating %s as %s::%s\n",
+ 			 origname, HvENAME_get(stash), name) );
+ 	}
+-	else if ((nsplit - origname) >= 7 &&
+-		 strnEQ(nsplit - 7, "::SUPER", 7)) {
++	else if ((last_separator - origname) >= 7 &&
++		 strnEQ(last_separator - 7, "::SUPER", 7)) {
+             /* don't autovifify if ->NoSuchStash::SUPER::method */
+-	    stash = gv_stashpvn(origname, nsplit - origname - 7, is_utf8);
++	    stash = gv_stashpvn(origname, last_separator - origname - 7, is_utf8);
+ 	    if (stash) flags |= GV_SUPER;
+ 	}
+ 	else {
+             /* don't autovifify if ->NoSuchStash::method */
+-            stash = gv_stashpvn(origname, nsplit - origname, is_utf8);
++            stash = gv_stashpvn(origname, last_separator - origname, is_utf8);
+ 	}
+ 	ostash = stash;
+     }
+@@ -1098,8 +1098,8 @@ Perl_gv_fetchmethod_pvn_flags(pTHX_ HV *stash, const char *name, const STRLEN le
+ 	    else {
+                 SV* packnamesv;
+ 
+-		if (nsplit) {
+-		    packnamesv = newSVpvn_flags(origname, nsplit - origname,
++		if (last_separator) {
++		    packnamesv = newSVpvn_flags(origname, last_separator - origname,
+                                                     SVs_TEMP | is_utf8);
+ 		} else {
+ 		    packnamesv = error_report;
+-- 
+2.7.4
+
diff --git a/SOURCES/perl-5.25.4-fix-129267-rework-gv_fetchmethod_pvn_flags-separator.patch b/SOURCES/perl-5.25.4-fix-129267-rework-gv_fetchmethod_pvn_flags-separator.patch
new file mode 100644
index 0000000..bd36af5
--- /dev/null
+++ b/SOURCES/perl-5.25.4-fix-129267-rework-gv_fetchmethod_pvn_flags-separator.patch
@@ -0,0 +1,81 @@
+From cfb736762c1becf344ce6beaa701ff2e1abd5f9c Mon Sep 17 00:00:00 2001
+From: Yves Orton <demerphq@gmail.com>
+Date: Tue, 13 Sep 2016 23:14:49 +0200
+Subject: [PATCH 4/5] fix #129267: rework gv_fetchmethod_pvn_flags separator
+ parsing
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+With previous code we could overrun the end of the name when
+the last char in the string was a colon. This reworks the code
+so it is more clear what is going on, and so it more similar
+to other code that also parses out package separaters in gv.c.
+
+This is a rework of the reverted patches:
+243ca72 rename "nend" name_cursor in Perl_gv_fetchmethod_pvn_flags
+b053c93 fix: [perl #129267] Possible string overrun with invalid len in gv.c
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ gv.c | 36 ++++++++++++++++++++++++++----------
+ 1 file changed, 26 insertions(+), 10 deletions(-)
+
+diff --git a/gv.c b/gv.c
+index 07709a0..3237c53 100644
+--- a/gv.c
++++ b/gv.c
+@@ -1010,7 +1010,6 @@ Perl_gv_fetchmethod_pvn_flags(pTHX_ HV *stash, const char *name, const STRLEN le
+ {
+     const char * const origname = name;
+     const char * const name_end = name + len;
+-    const char *nend;
+     const char *last_separator = NULL;
+     GV* gv;
+     HV* ostash = stash;
+@@ -1029,16 +1028,33 @@ Perl_gv_fetchmethod_pvn_flags(pTHX_ HV *stash, const char *name, const STRLEN le
+ 	   the error reporting code.  */
+     }
+ 
+-    for (nend = name; *nend || nend != name_end; nend++) {
+-	if (*nend == '\'') {
+-	    last_separator = nend;
+-	    name = nend + 1;
+-	}
+-	else if (*nend == ':' && *(nend + 1) == ':') {
+-	    last_separator = nend++;
+-	    name = nend + 1;
+-	}
++    {
++        /* check if the method name is fully qualified or
++         * not, and separate the package name from the actual
++         * method name.
++         *
++         * leaves last_separator pointing to the beginning of the
++         * last package separator (either ' or ::) or 0
++         * if none was found.
++         *
++         * leaves name pointing at the beginning of the
++         * method name.
++         */
++        const char *name_cursor = name;
++        const char * const name_em1 = name_end - 1; /* name_end minus 1 */
++        for (name_cursor = name; name_cursor < name_end ; name_cursor++) {
++            if (*name_cursor == '\'') {
++                last_separator = name_cursor;
++                name = name_cursor + 1;
++            }
++            else if (name_cursor < name_em1 && *name_cursor == ':' && name_cursor[1] == ':') {
++                last_separator = name_cursor++;
++                name = name_cursor + 1;
++            }
++        }
+     }
++
++    /* did we find a separator? */
+     if (last_separator) {
+ 	if ((last_separator - origname) == 5 && memEQ(origname, "SUPER", 5)) {
+ 	    /* ->SUPER::method should really be looked up in original stash */
+-- 
+2.7.4
+
diff --git a/SOURCES/perl-5.25.4-perl-129267-Test-for-gv_fetchmethod-buffer-overrun.patch b/SOURCES/perl-5.25.4-perl-129267-Test-for-gv_fetchmethod-buffer-overrun.patch
new file mode 100644
index 0000000..6998f71
--- /dev/null
+++ b/SOURCES/perl-5.25.4-perl-129267-Test-for-gv_fetchmethod-buffer-overrun.patch
@@ -0,0 +1,44 @@
+From 1665b718d8fbd58705dbe6376fa51f8c1a02d887 Mon Sep 17 00:00:00 2001
+From: Father Chrysostomos <sprout@cpan.org>
+Date: Tue, 13 Sep 2016 22:38:59 -0700
+Subject: [PATCH 5/5] [perl #129267] Test for gv_fetchmethod buffer overrun
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ ext/XS-APItest/APItest.xs               | 3 +++
+ ext/XS-APItest/t/gv_fetchmethod_flags.t | 5 +++++
+ 2 files changed, 8 insertions(+)
+
+diff --git a/ext/XS-APItest/APItest.xs b/ext/XS-APItest/APItest.xs
+index 992b6a5..4602cee 100644
+--- a/ext/XS-APItest/APItest.xs
++++ b/ext/XS-APItest/APItest.xs
+@@ -2571,6 +2571,9 @@ gv_fetchmethod_flags_type(stash, methname, type, flags)
+                gv = gv_fetchmethod_pvn_flags(stash, name, len, flags | SvUTF8(methname));
+                break;
+             }
++           case 4:
++               gv = gv_fetchmethod_pvn_flags(stash, SvPV_nolen(methname),
++                                             flags, SvUTF8(methname));
+         }
+ 	XPUSHs( gv ? (SV*)gv : &PL_sv_undef);
+ 
+diff --git a/ext/XS-APItest/t/gv_fetchmethod_flags.t b/ext/XS-APItest/t/gv_fetchmethod_flags.t
+index 15d1c41..2da3b70 100644
+--- a/ext/XS-APItest/t/gv_fetchmethod_flags.t
++++ b/ext/XS-APItest/t/gv_fetchmethod_flags.t
+@@ -49,3 +49,8 @@ is XS::APItest::gv_fetchmethod_flags_type(\%::, "method\0not quite!", 2, 0), "*m
+         }
+     }
+ }
++
++# [perl #129267] Buffer overrun when argument name ends with colon and
++#                there is a colon past the end.  This used to segv.
++XS::APItest::gv_fetchmethod_flags_type(\%::, "method:::::", 4, 7);
++                                             # With type 4, 7 is the length
+-- 
+2.7.4
+
diff --git a/SOURCES/perl-5.25.4-perl-129287-Make-UTF8-append-null.patch b/SOURCES/perl-5.25.4-perl-129287-Make-UTF8-append-null.patch
new file mode 100644
index 0000000..3709505
--- /dev/null
+++ b/SOURCES/perl-5.25.4-perl-129287-Make-UTF8-append-null.patch
@@ -0,0 +1,64 @@
+From b43665fffa48dd179eba1b5616d4ca35b4def876 Mon Sep 17 00:00:00 2001
+From: Father Chrysostomos <sprout@cpan.org>
+Date: Sun, 18 Sep 2016 20:17:08 -0700
+Subject: [PATCH] [perl #129287] Make UTF8 & append null
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+The & and &. operators were not appending a null byte to the string
+in utf8 mode.
+
+(The internal function that they use is the same.  I used &. in the
+test just because its intent is clearer.)
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ doop.c     |  1 +
+ t/op/bop.t | 14 +++++++++++++-
+ 2 files changed, 14 insertions(+), 1 deletion(-)
+
+diff --git a/doop.c b/doop.c
+index ad9172a..234a425 100644
+--- a/doop.c
++++ b/doop.c
+@@ -1093,6 +1093,7 @@ Perl_do_vop(pTHX_ I32 optype, SV *sv, SV *left, SV *right)
+ 	    if (sv == left || sv == right)
+ 		(void)sv_usepvn(sv, dcorig, needlen);
+ 	    SvCUR_set(sv, dc - dcorig);
++	    *SvEND(sv) = 0;
+ 	    break;
+ 	case OP_BIT_XOR:
+ 	    while (lulen && rulen) {
+diff --git a/t/op/bop.t b/t/op/bop.t
+index 2afb8d7..1f96e9b 100644
+--- a/t/op/bop.t
++++ b/t/op/bop.t
+@@ -19,7 +19,7 @@ BEGIN {
+ # If you find tests are failing, please try adding names to tests to track
+ # down where the failure is, and supply your new names as a patch.
+ # (Just-in-time test naming)
+-plan tests => 192 + (10*13*2) + 5 + 29;
++plan tests => 192 + (10*13*2) + 5 + 30;
+ 
+ # numerics
+ ok ((0xdead & 0xbeef) == 0x9ead);
+@@ -664,3 +664,15 @@ is $^A, "123", '~v0 clears vstring magic on retval';
+         is(-1 >> $w + 1, -1, "IV -1 right shift $w + 1 == -1");
+     }
+ }
++
++# [perl #129287] UTF8 & was not providing a trailing null byte.
++# This test is a bit convoluted, as we want to make sure that the string
++# allocated for &’s target contains memory initialised to something other
++# than a null byte.  Uninitialised memory does not make for a reliable
++# test.  So we do &. on a longer non-utf8 string first.
++for (["aaa","aaa"],[substr ("a\x{100}",0,1), "a"]) {
++    use feature "bitwise";
++    no warnings "experimental::bitwise", "pack";
++    $byte = substr unpack("P2", pack "P", $$_[0] &. $$_[1]), -1;
++}
++is $byte, "\0", "utf8 &. appends null byte";
+-- 
+2.7.4
+
diff --git a/SOURCES/perl-5.25.6-perl-130001-h2xs-avoid-infinite-loop-for-enums.patch b/SOURCES/perl-5.25.6-perl-130001-h2xs-avoid-infinite-loop-for-enums.patch
new file mode 100644
index 0000000..9b4f197
--- /dev/null
+++ b/SOURCES/perl-5.25.6-perl-130001-h2xs-avoid-infinite-loop-for-enums.patch
@@ -0,0 +1,32 @@
+From 9ce5bf4c39e28441410672f39b5ee1c4569967f8 Mon Sep 17 00:00:00 2001
+From: Hugo van der Sanden <hv@crypt.org>
+Date: Fri, 28 Oct 2016 13:27:23 +0100
+Subject: [PATCH] [perl #130001] h2xs: avoid infinite loop for enums
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+'typedef enum x { ... } x' causes h2xs to enter a substitution loop while
+trying to write the typemap file.
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ utils/h2xs.PL | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/utils/h2xs.PL b/utils/h2xs.PL
+index 8fda87b..f9063cb 100644
+--- a/utils/h2xs.PL
++++ b/utils/h2xs.PL
+@@ -1034,7 +1034,7 @@ if( ! $opt_X ){  # use XS, unless it was disabled
+       }
+     }
+     { local $" = '|';
+-      $typedef_rex = qr(\b(?<!struct )(?:@good_td)\b) if @good_td;
++      $typedef_rex = qr(\b(?<!struct )(?<!enum )(?:@good_td)\b) if @good_td;
+     }
+     %known_fnames = map @$_[1,3], @$fdecls_parsed; # [1,3] is NAME, FULLTEXT
+     if ($fmask) {
+-- 
+2.7.4
+
diff --git a/SOURCES/perl-5.25.7-Fix-Storable-segfaults.patch b/SOURCES/perl-5.25.7-Fix-Storable-segfaults.patch
new file mode 100644
index 0000000..8934a13
--- /dev/null
+++ b/SOURCES/perl-5.25.7-Fix-Storable-segfaults.patch
@@ -0,0 +1,61 @@
+From fecd3be8dbdb747b9cbf4cbb9299ce40faabc8e6 Mon Sep 17 00:00:00 2001
+From: John Lightsey <lightsey@debian.org>
+Date: Mon, 14 Nov 2016 11:56:15 +0100
+Subject: [PATCH] Fix Storable segfaults.
+
+Fix a null pointed dereference segfault in storable when the
+retrieve_code logic was unable to read the string that contained
+the code.
+
+Also fix several locations where retrieve_other was called with a
+null context pointer. This also resulted in a null pointer
+dereference.
+---
+ dist/Storable/Storable.xs | 10 +++++++---
+ 1 file changed, 7 insertions(+), 3 deletions(-)
+
+diff --git a/dist/Storable/Storable.xs b/dist/Storable/Storable.xs
+index 053951c..caa489c 100644
+--- a/dist/Storable/Storable.xs
++++ b/dist/Storable/Storable.xs
+@@ -5647,6 +5647,10 @@ static SV *retrieve_code(pTHX_ stcxt_t *cxt, const char *cname)
+ 		CROAK(("Unexpected type %d in retrieve_code\n", type));
+ 	}
+ 
++	if (!text) {
++		CROAK(("Unable to retrieve code\n"));
++	}
++
+ 	/*
+ 	 * prepend "sub " to the source
+ 	 */
+@@ -5767,7 +5771,7 @@ static SV *old_retrieve_array(pTHX_ stcxt_t *cxt, const char *cname)
+ 			continue;			/* av_extend() already filled us with undef */
+ 		}
+ 		if (c != SX_ITEM)
+-			(void) retrieve_other(aTHX_ (stcxt_t *) 0, 0);	/* Will croak out */
++			(void) retrieve_other(aTHX_ cxt, 0);	/* Will croak out */
+ 		TRACEME(("(#%d) item", i));
+ 		sv = retrieve(aTHX_ cxt, 0);						/* Retrieve item */
+ 		if (!sv)
+@@ -5844,7 +5848,7 @@ static SV *old_retrieve_hash(pTHX_ stcxt_t *cxt, const char *cname)
+ 			if (!sv)
+ 				return (SV *) 0;
+ 		} else
+-			(void) retrieve_other(aTHX_ (stcxt_t *) 0, 0);	/* Will croak out */
++			(void) retrieve_other(aTHX_ cxt, 0);	/* Will croak out */
+ 
+ 		/*
+ 		 * Get key.
+@@ -5855,7 +5859,7 @@ static SV *old_retrieve_hash(pTHX_ stcxt_t *cxt, const char *cname)
+ 
+ 		GETMARK(c);
+ 		if (c != SX_KEY)
+-			(void) retrieve_other(aTHX_ (stcxt_t *) 0, 0);	/* Will croak out */
++			(void) retrieve_other(aTHX_ cxt, 0);	/* Will croak out */
+ 		RLEN(size);						/* Get key size */
+ 		KBUFCHK((STRLEN)size);					/* Grow hash key read pool if needed */
+ 		if (size)
+-- 
+2.10.2
+
diff --git a/SOURCES/perl-5.25.7-Fix-const-correctness-in-hv_func.h.patch b/SOURCES/perl-5.25.7-Fix-const-correctness-in-hv_func.h.patch
new file mode 100644
index 0000000..5f2a428
--- /dev/null
+++ b/SOURCES/perl-5.25.7-Fix-const-correctness-in-hv_func.h.patch
@@ -0,0 +1,124 @@
+From 463ddf34c08f2c97199b1bb242da1f17494d4d1a Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= <ppisar@redhat.com>
+Date: Thu, 24 Nov 2016 16:34:09 +0100
+Subject: [PATCH] Fix const correctness in hv_func.h
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Building an XS code with -Wcast-qual yielded warnings about discarding
+const qualifiers from pointer targets like:
+
+$ printf '#include "EXTERN.h"\n#include "perl.h"\n' | gcc -Wcast-qual -I/usr/lib64/perl5/CORE -c -x c -
+In file included from /usr/lib64/perl5/CORE/hv.h:629:0,
+                 from /usr/lib64/perl5/CORE/perl.h:3740,
+                 from <stdin>:2:
+/usr/lib64/perl5/CORE/hv_func.h: In function ‘S_perl_hash_siphash_2_4’:
+/usr/lib64/perl5/CORE/hv_func.h:213:17: warning: cast discards ‘const’ qualifier from pointer target type [-Wcast-qual]
+   U64TYPE k0 = ((U64TYPE*)seed)[0];
+                 ^
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ hv_func.h | 22 +++++++++++-----------
+ 1 file changed, 11 insertions(+), 11 deletions(-)
+
+diff --git a/hv_func.h b/hv_func.h
+index 8866db9..57b1ed1 100644
+--- a/hv_func.h
++++ b/hv_func.h
+@@ -118,7 +118,7 @@
+ 
+ #if (BYTEORDER == 0x1234 || BYTEORDER == 0x12345678) && U32SIZE == 4
+   /* CPU endian matches murmurhash algorithm, so read 32-bit word directly */
+-  #define U8TO32_LE(ptr)   (*((U32*)(ptr)))
++  #define U8TO32_LE(ptr)   (*((const U32*)(ptr)))
+ #elif BYTEORDER == 0x4321 || BYTEORDER == 0x87654321
+   /* TODO: Add additional cases below where a compiler provided bswap32 is available */
+   #if defined(__GNUC__) && (__GNUC__>4 || (__GNUC__==4 && __GNUC_MINOR__>=3))
+@@ -210,8 +210,8 @@ S_perl_hash_siphash_2_4(const unsigned char * const seed, const unsigned char *i
+   U64 v3 = UINT64_C(0x7465646279746573);
+ 
+   U64 b;
+-  U64 k0 = ((U64*)seed)[0];
+-  U64 k1 = ((U64*)seed)[1];
++  U64 k0 = ((const U64*)seed)[0];
++  U64 k1 = ((const U64*)seed)[1];
+   U64 m;
+   const int left = inlen & 7;
+   const U8 *end = in + inlen - left;
+@@ -269,7 +269,7 @@ S_perl_hash_siphash_2_4(const unsigned char * const seed, const unsigned char *i
+ 
+ PERL_STATIC_INLINE U32
+ S_perl_hash_superfast(const unsigned char * const seed, const unsigned char *str, STRLEN len) {
+-    U32 hash = *((U32*)seed) + (U32)len;
++    U32 hash = *((const U32*)seed) + (U32)len;
+     U32 tmp;
+     int rem= len & 3;
+     len >>= 2;
+@@ -373,7 +373,7 @@ S_perl_hash_superfast(const unsigned char * const seed, const unsigned char *str
+ /* now we create the hash function */
+ PERL_STATIC_INLINE U32
+ S_perl_hash_murmur3(const unsigned char * const seed, const unsigned char *ptr, STRLEN len) {
+-    U32 h1 = *((U32*)seed);
++    U32 h1 = *((const U32*)seed);
+     U32 k1;
+     U32 carry = 0;
+ 
+@@ -467,7 +467,7 @@ S_perl_hash_murmur3(const unsigned char * const seed, const unsigned char *ptr,
+ PERL_STATIC_INLINE U32
+ S_perl_hash_djb2(const unsigned char * const seed, const unsigned char *str, const STRLEN len) {
+     const unsigned char * const end = (const unsigned char *)str + len;
+-    U32 hash = *((U32*)seed) + (U32)len;
++    U32 hash = *((const U32*)seed) + (U32)len;
+     while (str < end) {
+         hash = ((hash << 5) + hash) + *str++;
+     }
+@@ -477,7 +477,7 @@ S_perl_hash_djb2(const unsigned char * const seed, const unsigned char *str, con
+ PERL_STATIC_INLINE U32
+ S_perl_hash_sdbm(const unsigned char * const seed, const unsigned char *str, const STRLEN len) {
+     const unsigned char * const end = (const unsigned char *)str + len;
+-    U32 hash = *((U32*)seed) + (U32)len;
++    U32 hash = *((const U32*)seed) + (U32)len;
+     while (str < end) {
+         hash = (hash << 6) + (hash << 16) - hash + *str++;
+     }
+@@ -503,7 +503,7 @@ S_perl_hash_sdbm(const unsigned char * const seed, const unsigned char *str, con
+ PERL_STATIC_INLINE U32
+ S_perl_hash_one_at_a_time(const unsigned char * const seed, const unsigned char *str, const STRLEN len) {
+     const unsigned char * const end = (const unsigned char *)str + len;
+-    U32 hash = *((U32*)seed) + (U32)len;
++    U32 hash = *((const U32*)seed) + (U32)len;
+     while (str < end) {
+         hash += *str++;
+         hash += (hash << 10);
+@@ -518,7 +518,7 @@ S_perl_hash_one_at_a_time(const unsigned char * const seed, const unsigned char
+ PERL_STATIC_INLINE U32
+ S_perl_hash_one_at_a_time_hard(const unsigned char * const seed, const unsigned char *str, const STRLEN len) {
+     const unsigned char * const end = (const unsigned char *)str + len;
+-    U32 hash = *((U32*)seed) + (U32)len;
++    U32 hash = *((const U32*)seed) + (U32)len;
+     
+     while (str < end) {
+         hash += (hash << 10);
+@@ -553,7 +553,7 @@ S_perl_hash_one_at_a_time_hard(const unsigned char * const seed, const unsigned
+ PERL_STATIC_INLINE U32
+ S_perl_hash_old_one_at_a_time(const unsigned char * const seed, const unsigned char *str, const STRLEN len) {
+     const unsigned char * const end = (const unsigned char *)str + len;
+-    U32 hash = *((U32*)seed);
++    U32 hash = *((const U32*)seed);
+     while (str < end) {
+         hash += *str++;
+         hash += (hash << 10);
+@@ -581,7 +581,7 @@ S_perl_hash_murmur_hash_64a (const unsigned char * const seed, const unsigned ch
+ {
+         const U64 m = UINT64_C(0xc6a4a7935bd1e995);
+         const int r = 47;
+-        U64 h = *((U64*)seed) ^ len;
++        U64 h = *((const U64*)seed) ^ len;
+         const U64 * data = (const U64 *)str;
+         const U64 * end = data + (len/8);
+         const unsigned char * data2;
+-- 
+2.7.4
+
diff --git a/SOURCES/perl-5.25.9-only-mess-with-NEXT_OFF-when-we-are-in-PASS2.patch b/SOURCES/perl-5.25.9-only-mess-with-NEXT_OFF-when-we-are-in-PASS2.patch
new file mode 100644
index 0000000..1eb9183
--- /dev/null
+++ b/SOURCES/perl-5.25.9-only-mess-with-NEXT_OFF-when-we-are-in-PASS2.patch
@@ -0,0 +1,38 @@
+From bb78386f13c18a1a7dae932b9b36e977056b13c7 Mon Sep 17 00:00:00 2001
+From: Yves Orton <demerphq@gmail.com>
+Date: Fri, 27 Jan 2017 16:57:40 +0100
+Subject: [PATCH] only mess with NEXT_OFF() when we are in PASS2
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+In 31fc93954d1f379c7a49889d91436ce99818e1f6 I added code that would modify
+NEXT_OFF() when we were not in PASS2, when we should not do so. Strangly this
+did not segfault when I tested, but this fix is required.
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ regcomp.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/regcomp.c b/regcomp.c
+index 322d230..d5ce63f 100644
+--- a/regcomp.c
++++ b/regcomp.c
+@@ -11709,11 +11709,11 @@ S_regpiece(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth)
+ 	    nextchar(pRExC_state);
+             if (max < min) {    /* If can't match, warn and optimize to fail
+                                    unconditionally */
++                reginsert(pRExC_state, OPFAIL, orig_emit, depth+1);
+                 if (PASS2) {
+                     ckWARNreg(RExC_parse, "Quantifier {n,m} with n > m can't match");
++                    NEXT_OFF(orig_emit)= regarglen[OPFAIL] + NODE_STEP_REGNODE;
+                 }
+-                reginsert(pRExC_state, OPFAIL, orig_emit, depth+1);
+-                NEXT_OFF(orig_emit)= regarglen[OPFAIL] + NODE_STEP_REGNODE;
+                 return ret;
+             }
+             else if (min == max && *RExC_parse == '?')
+-- 
+2.7.4
+
diff --git a/SOURCES/perl-5.25.9-perl-129061-CURLYX-nodes-can-be-studied-more-than-on.patch b/SOURCES/perl-5.25.9-perl-129061-CURLYX-nodes-can-be-studied-more-than-on.patch
new file mode 100644
index 0000000..d7b9c6b
--- /dev/null
+++ b/SOURCES/perl-5.25.9-perl-129061-CURLYX-nodes-can-be-studied-more-than-on.patch
@@ -0,0 +1,69 @@
+From 42e9b60980bb8e29e76629e14c6aa945194c0647 Mon Sep 17 00:00:00 2001
+From: Hugo van der Sanden <hv@crypt.org>
+Date: Wed, 5 Oct 2016 02:20:26 +0100
+Subject: [PATCH] [perl #129061] CURLYX nodes can be studied more than once
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+study_chunk() for CURLYX is used to set flags on the linked WHILEM
+node to say it is the whilem_c'th of whilem_seen. However it assumes
+each CURLYX can be studied only once, which is not the case - there
+are various cases such as GOSUB which call study_chunk() recursively
+on already-visited parts of the program.
+
+Storing the wrong index can cause the super-linear cache handling in
+regmatch() to read/write the byte after the end of poscache.
+
+Also reported in [perl #129281].
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ regcomp.c  | 12 +++++++++---
+ t/re/pat.t |  1 -
+ 2 files changed, 9 insertions(+), 4 deletions(-)
+
+diff --git a/regcomp.c b/regcomp.c
+index 850a6c1..48c8d8d 100644
+--- a/regcomp.c
++++ b/regcomp.c
+@@ -5218,15 +5218,21 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp,
+ 			    However, this time it's not a subexpression
+ 			    we care about, but the expression itself. */
+ 			 && (maxcount == REG_INFTY)
+-			 && data && ++data->whilem_c < 16) {
++			 && data) {
+ 		    /* This stays as CURLYX, we can put the count/of pair. */
+ 		    /* Find WHILEM (as in regexec.c) */
+ 		    regnode *nxt = oscan + NEXT_OFF(oscan);
+ 
+ 		    if (OP(PREVOPER(nxt)) == NOTHING) /* LONGJMP */
+ 			nxt += ARG(nxt);
+-		    PREVOPER(nxt)->flags = (U8)(data->whilem_c
+-			| (RExC_whilem_seen << 4)); /* On WHILEM */
++                    nxt = PREVOPER(nxt);
++                    if (nxt->flags & 0xf) {
++                        /* we've already set whilem count on this node */
++                    } else if (++data->whilem_c < 16) {
++                        assert(data->whilem_c <= RExC_whilem_seen);
++                        nxt->flags = (U8)(data->whilem_c
++                            | (RExC_whilem_seen << 4)); /* On WHILEM */
++                    }
+ 		}
+ 		if (data && fl & (SF_HAS_PAR|SF_IN_PAR))
+ 		    pars++;
+diff --git a/t/re/pat.t b/t/re/pat.t
+index ecd3af1..16bfc8e 100644
+--- a/t/re/pat.t
++++ b/t/re/pat.t
+@@ -1909,7 +1909,6 @@ EOP
+     }
+     {
+         # [perl #129281] buffer write overflow, detected by ASAN, valgrind
+-        local $::TODO = "whilem_c  bumped too much";
+         fresh_perl_is('/0(?0)|^*0(?0)|^*(^*())0|/', '', {}, "don't bump whilem_c too much");
+     }
+ } # End of sub run_tests
+-- 
+2.7.4
+
diff --git a/SOURCES/perl-5.25.9-silence-warnings-from-tests-about-impossible-quantif.patch b/SOURCES/perl-5.25.9-silence-warnings-from-tests-about-impossible-quantif.patch
new file mode 100644
index 0000000..2cfe7ed
--- /dev/null
+++ b/SOURCES/perl-5.25.9-silence-warnings-from-tests-about-impossible-quantif.patch
@@ -0,0 +1,34 @@
+From 923e23bad0514e1bd29112650fb78aa4ea69e1b7 Mon Sep 17 00:00:00 2001
+From: Yves Orton <demerphq@gmail.com>
+Date: Sat, 28 Jan 2017 15:13:17 +0100
+Subject: [PATCH] silence warnings from tests about impossible quantifiers
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+thanks to Dave M for noticing....
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ t/re/pat_rt_report.t | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/t/re/pat_rt_report.t b/t/re/pat_rt_report.t
+index 21aff58..dd740e7 100644
+--- a/t/re/pat_rt_report.t
++++ b/t/re/pat_rt_report.t
+@@ -1134,9 +1134,10 @@ EOP
+     {
+         # rt
+         fresh_perl_is(
+-            '"foo"=~/((?1)){8,0}/; print "ok"',
++            'no warnings "regexp"; "foo"=~/((?1)){8,0}/; print "ok"',
+             "ok", {},  'RT #130561 - allowing impossible quantifier should not cause SEGVs');
+         my $s= "foo";
++        no warnings 'regexp';
+         ok($s=~/(foo){1,0}|(?1)/,
+             "RT #130561 - allowing impossible quantifier should not break recursion");
+     }
+-- 
+2.7.4
+
diff --git a/SOURCES/perl-5.26.1-fix-do-dir-returning-no.patch b/SOURCES/perl-5.26.1-fix-do-dir-returning-no.patch
new file mode 100644
index 0000000..aa44d7d
--- /dev/null
+++ b/SOURCES/perl-5.26.1-fix-do-dir-returning-no.patch
@@ -0,0 +1,111 @@
+From 3dfcac940930a8aa6779f5debea6ea6357372419 Mon Sep 17 00:00:00 2001
+From: Daniel Dragan <bulk88@hotmail.com>
+Date: Sun, 16 Aug 2015 04:30:23 -0400
+Subject: [PATCH] fix do dir returning no $!
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+do()ing a directory was returning false/empty string in $!, which isn't
+an error, yet documentation says $! should have the error code in it.
+Fix this by returning EISDIR for dirs, and EINVAL for block devices.
+[perl #125774]
+
+Remove "errno = 0" and comment added in b2da7ead68, since now there is no
+scenario where errno is uninitialized, since the dir and block device
+failure branches now set errno, where previously they didn't.
+
+Petr Písař: Ported to 5.26.1.
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ pp_ctl.c  | 25 +++++++++++++++++--------
+ t/op/do.t | 14 +++++++++++++-
+ 2 files changed, 30 insertions(+), 9 deletions(-)
+
+diff --git a/pp_ctl.c b/pp_ctl.c
+index e24d7b6..f136f91 100644
+--- a/pp_ctl.c
++++ b/pp_ctl.c
+@@ -3534,15 +3534,22 @@ S_check_type_and_open(pTHX_ SV *name)
+        errno EACCES, so only do a stat to separate a dir from a real EACCES
+        caused by user perms */
+ #ifndef WIN32
+-    /* we use the value of errno later to see how stat() or open() failed.
+-     * We don't want it set if the stat succeeded but we still failed,
+-     * such as if the name exists, but is a directory */
+-    errno = 0;
+-
+     st_rc = PerlLIO_stat(p, &st);
+ 
+-    if (st_rc < 0 || S_ISDIR(st.st_mode) || S_ISBLK(st.st_mode)) {
++    if (st_rc < 0)
+ 	return NULL;
++    else {
++	int eno;
++	if(S_ISBLK(st.st_mode)) {
++	    eno = EINVAL;
++	    goto not_file;
++	}
++	else if(S_ISDIR(st.st_mode)) {
++	    eno = EISDIR;
++	    not_file:
++	    errno = eno;
++	    return NULL;
++	}
+     }
+ #endif
+ 
+@@ -3554,8 +3561,10 @@ S_check_type_and_open(pTHX_ SV *name)
+ 	int eno;
+ 	st_rc = PerlLIO_stat(p, &st);
+ 	if (st_rc >= 0) {
+-	    if(S_ISDIR(st.st_mode) || S_ISBLK(st.st_mode))
+-		eno = 0;
++	    if(S_ISDIR(st.st_mode))
++		eno = EISDIR;
++	    else if(S_ISBLK(st.st_mode))
++		eno = EINVAL;
+ 	    else
+ 		eno = EACCES;
+ 	    errno = eno;
+diff --git a/t/op/do.t b/t/op/do.t
+index 78d8800..1c54f0b 100644
+--- a/t/op/do.t
++++ b/t/op/do.t
+@@ -7,6 +7,7 @@ BEGIN {
+ }
+ use strict;
+ no warnings 'void';
++use Errno qw(ENOENT EISDIR);
+ 
+ my $called;
+ my $result = do{ ++$called; 'value';};
+@@ -247,7 +248,7 @@ SKIP: {
+     my $saved_errno = $!;
+     ok(!$rv,          "do returns false on io errror");
+     ok(!$saved_error, "\$\@ not set on io error");
+-    ok($saved_errno,  "\$! set on io error");
++    ok($saved_errno == ENOENT, "\$! is ENOENT for nonexistent file");
+ }
+ 
+ # do subname should not be do "subname"
+@@ -305,4 +306,15 @@ SKIP: {
+ }
+ 
+ 
++# do file $!s must be correct
++{
++    local @INC = ('.'); #want EISDIR not ENOENT
++    my $rv = do 'op'; # /t/op dir
++    my $saved_error = $@;
++    my $saved_errno = $!+0;
++    ok(!$rv,                    "do dir returns false");
++    ok(!$saved_error,           "\$\@ is false on do dir");
++    ok($saved_errno == EISDIR,  "\$! is EISDIR on do dir");
++}
++
+ done_testing();
+-- 
+2.13.6
+
diff --git a/SOURCES/perl-5.26.1-guard_old_libcrypt_fix.patch b/SOURCES/perl-5.26.1-guard_old_libcrypt_fix.patch
new file mode 100644
index 0000000..2d34cfe
--- /dev/null
+++ b/SOURCES/perl-5.26.1-guard_old_libcrypt_fix.patch
@@ -0,0 +1,24 @@
+commit 13e70b397dcb0d1bf4a869b670f041c1d7b730d0
+Author: Björn Esser <besser82@fedoraproject.org>
+Date:   Sat Jan 20 20:22:53 2018 +0100
+
+    pp: Guard fix for really old bug in glibc libcrypt
+
+diff --git a/pp.c b/pp.c
+index d50ad7ddbf..6510c7b15c 100644
+--- a/pp.c
++++ b/pp.c
+@@ -3650,8 +3650,12 @@ PP(pp_crypt)
+ #if defined(__GLIBC__) || defined(__EMX__)
+ 	if (PL_reentrant_buffer->_crypt_struct_buffer) {
+ 	    PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0;
+-	    /* work around glibc-2.2.5 bug */
++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \
++    (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4)
++	    /* work around glibc-2.2.5 bug, has been fixed at some
++	     * time in glibc-2.3.X */
+ 	    PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0;
++#endif
+ 	}
+ #endif
+     }
diff --git a/SOURCES/perl-5.26.1-perl-131746-avoid-undefined-behaviour-in-Copy-etc.patch b/SOURCES/perl-5.26.1-perl-131746-avoid-undefined-behaviour-in-Copy-etc.patch
new file mode 100644
index 0000000..d6471a8
--- /dev/null
+++ b/SOURCES/perl-5.26.1-perl-131746-avoid-undefined-behaviour-in-Copy-etc.patch
@@ -0,0 +1,107 @@
+From 7a962424149cc60f3a187d0213a12689dd5e806b Mon Sep 17 00:00:00 2001
+From: Tony Cook <tony@develop-help.com>
+Date: Mon, 14 Aug 2017 11:52:39 +1000
+Subject: [PATCH] (perl #131746) avoid undefined behaviour in Copy() etc
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+These functions depend on C library functions which have undefined
+behaviour when passed NULL pointers, even when passed a zero 'n' value.
+
+Some compilers use this information, ie. assume the pointers are
+non-NULL when optimizing any following code, so we do need to
+prevent such unguarded calls.
+
+My initial thought was to add conditionals to each macro to skip the
+call to the library function when n is zero, but this adds a cost to
+every use of these macros, even when the n value is always true.
+
+So instead I added asserts() which will give us a much more visible
+indicator of such broken code and revealed the pp_caller and Glob.xs
+issues also patched here.
+
+Petr Písař: Ported to 5.26.1 from
+f14cf3632059d421de83cf901c7e849adc1fcd03.
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ ext/File-Glob/Glob.xs |  2 +-
+ handy.h               | 14 +++++++-------
+ pp_ctl.c              |  3 ++-
+ pp_hot.c              |  3 ++-
+ 4 files changed, 12 insertions(+), 10 deletions(-)
+
+diff --git a/ext/File-Glob/Glob.xs b/ext/File-Glob/Glob.xs
+index e0a3681..9779d54 100644
+--- a/ext/File-Glob/Glob.xs
++++ b/ext/File-Glob/Glob.xs
+@@ -121,7 +121,7 @@ iterate(pTHX_ bool(*globber)(pTHX_ AV *entries, const char *pat, STRLEN len, boo
+ 
+     /* chuck it all out, quick or slow */
+     if (gimme == G_ARRAY) {
+-	if (!on_stack) {
++	if (!on_stack && AvFILLp(entries) + 1) {
+ 	    EXTEND(SP, AvFILLp(entries)+1);
+ 	    Copy(AvARRAY(entries), SP+1, AvFILLp(entries)+1, SV *);
+ 	    SP += AvFILLp(entries)+1;
+diff --git a/handy.h b/handy.h
+index 80f9cf4..88b5b55 100644
+--- a/handy.h
++++ b/handy.h
+@@ -2409,17 +2409,17 @@ void Perl_mem_log_del_sv(const SV *sv, const char *filename, const int linenumbe
+ #define Safefree(d)	safefree(MEM_LOG_FREE((Malloc_t)(d)))
+ #endif
+ 
+-#define Move(s,d,n,t)	(MEM_WRAP_CHECK_(n,t) (void)memmove((char*)(d),(const char*)(s), (n) * sizeof(t)))
+-#define Copy(s,d,n,t)	(MEM_WRAP_CHECK_(n,t) (void)memcpy((char*)(d),(const char*)(s), (n) * sizeof(t)))
+-#define Zero(d,n,t)	(MEM_WRAP_CHECK_(n,t) (void)memzero((char*)(d), (n) * sizeof(t)))
++#define Move(s,d,n,t)	(MEM_WRAP_CHECK_(n,t) assert(d), assert(s), (void)memmove((char*)(d),(const char*)(s), (n) * sizeof(t)))
++#define Copy(s,d,n,t)	(MEM_WRAP_CHECK_(n,t) assert(d), assert(s), (void)memcpy((char*)(d),(const char*)(s), (n) * sizeof(t)))
++#define Zero(d,n,t)	(MEM_WRAP_CHECK_(n,t) assert(d), (void)memzero((char*)(d), (n) * sizeof(t)))
+ 
+-#define MoveD(s,d,n,t)	(MEM_WRAP_CHECK_(n,t) memmove((char*)(d),(const char*)(s), (n) * sizeof(t)))
+-#define CopyD(s,d,n,t)	(MEM_WRAP_CHECK_(n,t) memcpy((char*)(d),(const char*)(s), (n) * sizeof(t)))
++#define MoveD(s,d,n,t)	(MEM_WRAP_CHECK_(n,t) assert(d), assert(s), memmove((char*)(d),(const char*)(s), (n) * sizeof(t)))
++#define CopyD(s,d,n,t)	(MEM_WRAP_CHECK_(n,t) assert(d), assert(s), memcpy((char*)(d),(const char*)(s), (n) * sizeof(t)))
+ #ifdef HAS_MEMSET
+-#define ZeroD(d,n,t)	(MEM_WRAP_CHECK_(n,t) memzero((char*)(d), (n) * sizeof(t)))
++#define ZeroD(d,n,t)	(MEM_WRAP_CHECK_(n,t) assert(d), memzero((char*)(d), (n) * sizeof(t)))
+ #else
+ /* Using bzero(), which returns void.  */
+-#define ZeroD(d,n,t)	(MEM_WRAP_CHECK_(n,t) memzero((char*)(d), (n) * sizeof(t)),d)
++#define ZeroD(d,n,t)	(MEM_WRAP_CHECK_(n,t) assert(d), memzero((char*)(d), (n) * sizeof(t)),d)
+ #endif
+ 
+ #define PoisonWith(d,n,t,b)	(MEM_WRAP_CHECK_(n,t) (void)memset((char*)(d), (U8)(b), (n) * sizeof(t)))
+diff --git a/pp_ctl.c b/pp_ctl.c
+index 15c193b..f1c57bc 100644
+--- a/pp_ctl.c
++++ b/pp_ctl.c
+@@ -1971,7 +1971,8 @@ PP(pp_caller)
+ 
+ 	if (AvMAX(PL_dbargs) < AvFILLp(ary) + off)
+ 	    av_extend(PL_dbargs, AvFILLp(ary) + off);
+-	Copy(AvALLOC(ary), AvARRAY(PL_dbargs), AvFILLp(ary) + 1 + off, SV*);
++        if (AvFILLp(ary) + 1 + off)
++            Copy(AvALLOC(ary), AvARRAY(PL_dbargs), AvFILLp(ary) + 1 + off, SV*);
+ 	AvFILLp(PL_dbargs) = AvFILLp(ary) + off;
+     }
+     mPUSHi(CopHINTS_get(cx->blk_oldcop));
+diff --git a/pp_hot.c b/pp_hot.c
+index 5899413..66b79ea 100644
+--- a/pp_hot.c
++++ b/pp_hot.c
+@@ -4138,7 +4138,8 @@ PP(pp_entersub)
+                 AvARRAY(av) = ary;
+             }
+ 
+-	    Copy(MARK+1,AvARRAY(av),items,SV*);
++            if (items)
++                Copy(MARK+1,AvARRAY(av),items,SV*);
+ 	    AvFILLp(av) = items - 1;
+ 	}
+ 	if (UNLIKELY((cx->blk_u16 & OPpENTERSUB_LVAL_MASK) == OPpLVAL_INTRO &&
+-- 
+2.13.6
+
diff --git a/SOURCES/perl-5.27.0-Fix-131190-UTF8-code-improperly-casting-negative-int.patch b/SOURCES/perl-5.27.0-Fix-131190-UTF8-code-improperly-casting-negative-int.patch
new file mode 100644
index 0000000..f248720
--- /dev/null
+++ b/SOURCES/perl-5.27.0-Fix-131190-UTF8-code-improperly-casting-negative-int.patch
@@ -0,0 +1,33 @@
+From 2c2da8e7f0f6325fab643997a536072633fa0cf8 Mon Sep 17 00:00:00 2001
+From: Yves Orton <demerphq@gmail.com>
+Date: Thu, 1 Jun 2017 14:51:44 +0200
+Subject: [PATCH] Fix #131190 - UTF8 code improperly casting negative integer
+ to U8 in comparison
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This reverts commit b4972372a75776de3c9e6bd234a398d103677316,
+effectively restoring commit ca7eb79a236b41b7722c6800527f95cd76843eed,
+and commit 85fde2b7c3f5631fd982f5db735b84dc9224bec0.
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ regexec.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/regexec.c b/regexec.c
+index 82128a7..35b88d7 100644
+--- a/regexec.c
++++ b/regexec.c
+@@ -5593,6 +5593,7 @@ S_regmatch(pTHX_ regmatch_info *reginfo, char *startpos, regnode *prog)
+                 if (scan->flags == EXACTL || scan->flags == EXACTFLU8) {
+                     _CHECK_AND_WARN_PROBLEMATIC_LOCALE;
+                     if (utf8_target
++                        && nextchr >= 0 /* guard against negative EOS value in nextchr */
+                         && UTF8_IS_ABOVE_LATIN1(nextchr)
+                         && scan->flags == EXACTL)
+                     {
+-- 
+2.9.4
+
diff --git a/SOURCES/perl-5.27.0-Resolve-Perl-131522-Spurious-Assuming-NOT-a-POSIX-cl.patch b/SOURCES/perl-5.27.0-Resolve-Perl-131522-Spurious-Assuming-NOT-a-POSIX-cl.patch
new file mode 100644
index 0000000..8f05cc7
--- /dev/null
+++ b/SOURCES/perl-5.27.0-Resolve-Perl-131522-Spurious-Assuming-NOT-a-POSIX-cl.patch
@@ -0,0 +1,135 @@
+From bab0f8e933b383b6bef406d79c2da340bbcded33 Mon Sep 17 00:00:00 2001
+From: Yves Orton <demerphq@gmail.com>
+Date: Sun, 18 Jun 2017 20:45:30 +0200
+Subject: [PATCH 1/2] Resolve Perl #131522: Spurious "Assuming NOT a POSIX
+ class" warning
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ regcomp.c | 30 ++++++++++++++++++------------
+ 1 file changed, 18 insertions(+), 12 deletions(-)
+
+diff --git a/regcomp.c b/regcomp.c
+index 8921eed..0a4ea78 100644
+--- a/regcomp.c
++++ b/regcomp.c
+@@ -13991,6 +13991,13 @@ S_populate_ANYOF_from_invlist(pTHX_ regnode *node, SV** invlist_ptr)
+                                              REPORT_LOCATION_ARGS(p)));     \
+         }                                                                   \
+     } STMT_END
++#define CLEAR_POSIX_WARNINGS()                                              \
++    if (posix_warnings && RExC_warn_text)                                   \
++        av_clear(RExC_warn_text)
++
++#define CLEAR_POSIX_WARNINGS_AND_RETURN(ret)                                \
++    CLEAR_POSIX_WARNINGS();                                                 \
++    return ret
+ 
+ STATIC int
+ S_handle_possible_posix(pTHX_ RExC_state_t *pRExC_state,
+@@ -14063,7 +14070,7 @@ S_handle_possible_posix(pTHX_ RExC_state_t *pRExC_state,
+      *
+      * The syntax for a legal posix class is:
+      *
+-     * qr/(?xa: \[ : \^? [:lower:]{4,6} : \] )/
++     * qr/(?xa: \[ : \^? [[:lower:]]{4,6} : \] )/
+      *
+      * What this routine considers syntactically to be an intended posix class
+      * is this (the comments indicate some restrictions that the pattern
+@@ -14088,7 +14095,7 @@ S_handle_possible_posix(pTHX_ RExC_state_t *pRExC_state,
+      *                                      # for it to be considered to be
+      *                                      # an intended posix class.
+      *          \h*
+-     *          [:punct:]?                  # The closing class character,
++     *          [[:punct:]]?                # The closing class character,
+      *                                      # possibly omitted.  If not a colon
+      *                                      # nor semi colon, the class name
+      *                                      # must be even closer to a valid
+@@ -14131,8 +14138,7 @@ S_handle_possible_posix(pTHX_ RExC_state_t *pRExC_state,
+ 
+     PERL_ARGS_ASSERT_HANDLE_POSSIBLE_POSIX;
+ 
+-    if (posix_warnings && RExC_warn_text)
+-        av_clear(RExC_warn_text);
++    CLEAR_POSIX_WARNINGS();
+ 
+     if (p >= e) {
+         return NOT_MEANT_TO_BE_A_POSIX_CLASS;
+@@ -14224,7 +14230,7 @@ S_handle_possible_posix(pTHX_ RExC_state_t *pRExC_state,
+                     *updated_parse_ptr = (char *) temp_ptr;
+                 }
+ 
+-                return OOB_NAMEDCLASS;
++                CLEAR_POSIX_WARNINGS_AND_RETURN(OOB_NAMEDCLASS);
+             }
+         }
+ 
+@@ -14294,7 +14300,7 @@ S_handle_possible_posix(pTHX_ RExC_state_t *pRExC_state,
+         /* We consider something like [^:^alnum:]] to not have been intended to
+          * be a posix class, but XXX maybe we should */
+         if (complement) {
+-            return NOT_MEANT_TO_BE_A_POSIX_CLASS;
++            CLEAR_POSIX_WARNINGS_AND_RETURN(NOT_MEANT_TO_BE_A_POSIX_CLASS);
+         }
+ 
+         complement = 1;
+@@ -14321,7 +14327,7 @@ S_handle_possible_posix(pTHX_ RExC_state_t *pRExC_state,
+          * this leaves this construct looking like [:] or [:^], which almost
+          * certainly weren't intended to be posix classes */
+         if (has_opening_bracket) {
+-            return NOT_MEANT_TO_BE_A_POSIX_CLASS;
++            CLEAR_POSIX_WARNINGS_AND_RETURN(NOT_MEANT_TO_BE_A_POSIX_CLASS);
+         }
+ 
+         /* But this function can be called when we parse the colon for
+@@ -14338,7 +14344,7 @@ S_handle_possible_posix(pTHX_ RExC_state_t *pRExC_state,
+             /* XXX We are currently very restrictive here, so this code doesn't
+              * consider the possibility that, say, /[alpha.]]/ was intended to
+              * be a posix class. */
+-            return NOT_MEANT_TO_BE_A_POSIX_CLASS;
++            CLEAR_POSIX_WARNINGS_AND_RETURN(NOT_MEANT_TO_BE_A_POSIX_CLASS);
+         }
+ 
+         /* Here we have something like 'foo:]'.  There was no initial colon,
+@@ -14508,7 +14514,7 @@ S_handle_possible_posix(pTHX_ RExC_state_t *pRExC_state,
+             }
+ 
+             /* Otherwise, it can't have meant to have been a class */
+-            return NOT_MEANT_TO_BE_A_POSIX_CLASS;
++            CLEAR_POSIX_WARNINGS_AND_RETURN(NOT_MEANT_TO_BE_A_POSIX_CLASS);
+         }
+ 
+         /* If we ran off the end, and the final character was a punctuation
+@@ -14558,7 +14564,7 @@ S_handle_possible_posix(pTHX_ RExC_state_t *pRExC_state,
+          * class name.  (We can do this on the first pass, as any second pass
+          * will yield an even shorter name) */
+         if (name_len < 3) {
+-            return NOT_MEANT_TO_BE_A_POSIX_CLASS;
++            CLEAR_POSIX_WARNINGS_AND_RETURN(NOT_MEANT_TO_BE_A_POSIX_CLASS);
+         }
+ 
+         /* Find which class it is.  Initially switch on the length of the name.
+@@ -14717,7 +14723,7 @@ S_handle_possible_posix(pTHX_ RExC_state_t *pRExC_state,
+             }
+ 
+             /* Here neither pass found a close-enough class name */
+-            return NOT_MEANT_TO_BE_A_POSIX_CLASS;
++            CLEAR_POSIX_WARNINGS_AND_RETURN(NOT_MEANT_TO_BE_A_POSIX_CLASS);
+         }
+ 
+     probably_meant_to_be:
+@@ -14759,7 +14765,7 @@ S_handle_possible_posix(pTHX_ RExC_state_t *pRExC_state,
+             /* If it is a known class, return the class.  The class number
+              * #defines are structured so each complement is +1 to the normal
+              * one */
+-            return class_number + complement;
++            CLEAR_POSIX_WARNINGS_AND_RETURN(class_number + complement);
+         }
+         else if (! check_only) {
+ 
+-- 
+2.9.4
+
diff --git a/SOURCES/perl-5.27.0-add-test-for-perl-131522-and-fix-test-for-related-pe.patch b/SOURCES/perl-5.27.0-add-test-for-perl-131522-and-fix-test-for-related-pe.patch
new file mode 100644
index 0000000..7a465d9
--- /dev/null
+++ b/SOURCES/perl-5.27.0-add-test-for-perl-131522-and-fix-test-for-related-pe.patch
@@ -0,0 +1,39 @@
+From d730a80128abafff1e47e2506c23a8c1a06cfef4 Mon Sep 17 00:00:00 2001
+From: Yves Orton <demerphq@gmail.com>
+Date: Sun, 18 Jun 2017 23:44:07 +0200
+Subject: [PATCH 2/2] add test for [perl #131522] and fix test for (related)
+ [perl #127581]
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ t/re/reg_mesg.t | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/t/re/reg_mesg.t b/t/re/reg_mesg.t
+index 090eccb..a0b78c4 100644
+--- a/t/re/reg_mesg.t
++++ b/t/re/reg_mesg.t
+@@ -221,7 +221,6 @@ my @death =
+  '/(?[[[::]]])/' => "Syntax error in (?[...]) in regex m/(?[[[::]]])/",
+  '/(?[[[:w:]]])/' => "Syntax error in (?[...]) in regex m/(?[[[:w:]]])/",
+  '/(?[[:w:]])/' => "",
+- '/[][[:alpha:]]' => "",    # [perl #127581]
+  '/([.].*)[.]/'   => "",    # [perl #127582]
+  '/[.].*[.]/'     => "",    # [perl #127604]
+  '/(?[a])/' =>  'Unexpected character {#} m/(?[a{#}])/',
+@@ -587,7 +586,8 @@ my @warning = (
+                                   'Assuming NOT a POSIX class since a semi-colon was found instead of a colon {#} m/[foo;{#}punct;]]\x{100}/',
+                                   'Assuming NOT a POSIX class since a semi-colon was found instead of a colon {#} m/[foo;punct;]{#}]\x{100}/',
+                                 ],
+-
++   '/[][[:alpha:]]/' => "",        # [perl #127581]
++   '/[][[:alpha:]\\@\\\\^_?]/' => "", # [perl #131522]
+ ); # See comments before this for why '\x{100}' is generally needed
+ 
+ # These need the character 'ネ' as a marker for mark_as_utf8()
+-- 
+2.9.4
+
diff --git a/SOURCES/perl-5.27.0-perl-129183-don-t-treat-as-an-escape-in-PATH-for-S.patch b/SOURCES/perl-5.27.0-perl-129183-don-t-treat-as-an-escape-in-PATH-for-S.patch
new file mode 100644
index 0000000..8889451
--- /dev/null
+++ b/SOURCES/perl-5.27.0-perl-129183-don-t-treat-as-an-escape-in-PATH-for-S.patch
@@ -0,0 +1,32 @@
+From e80af1fd276d83858d27742ea887415e3263960b Mon Sep 17 00:00:00 2001
+From: Tony Cook <tony@develop-help.com>
+Date: Wed, 12 Oct 2016 10:42:47 +1100
+Subject: [PATCH] (perl 129183) don't treat \ as an escape in PATH for -S
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ util.c | 5 ++---
+ 1 file changed, 2 insertions(+), 3 deletions(-)
+
+diff --git a/util.c b/util.c
+index 5bb0dfc..6bc2fe5 100644
+--- a/util.c
++++ b/util.c
+@@ -3352,9 +3352,8 @@ Perl_find_script(pTHX_ const char *scriptname, bool dosearch,
+ 	    if (len < sizeof tmpbuf)
+ 		tmpbuf[len] = '\0';
+ #  else
+-	    s = delimcpy(tmpbuf, tmpbuf + sizeof tmpbuf, s, bufend,
+-			':',
+-			&len);
++	    s = delimcpy_no_escape(tmpbuf, tmpbuf + sizeof tmpbuf, s, bufend,
++                                   ':', &len);
+ #  endif
+ 	    if (s < bufend)
+ 		s++;
+-- 
+2.9.4
+
diff --git a/SOURCES/perl-5.27.0-perl-131221-improve-duplication-of-via-handles.patch b/SOURCES/perl-5.27.0-perl-131221-improve-duplication-of-via-handles.patch
new file mode 100644
index 0000000..37da371
--- /dev/null
+++ b/SOURCES/perl-5.27.0-perl-131221-improve-duplication-of-via-handles.patch
@@ -0,0 +1,299 @@
+From 99b847695211f825df6299aa9da91f9494f741e2 Mon Sep 17 00:00:00 2001
+From: Tony Cook <tony@develop-help.com>
+Date: Thu, 1 Jun 2017 15:11:27 +1000
+Subject: [PATCH] [perl #131221] improve duplication of :via handles
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Previously duplication (as with open ... ">&...") would fail
+unless the user supplied a GETARG, which wasn't documented, and
+resulted in an attempt to free and unreferened scalar if supplied.
+
+Cloning on thread creation was simply broken.
+
+We now handle GETARG correctly, and provide a useful default if it
+returns nothing.
+
+Cloning on thread creation now duplicates the appropriate parts of the
+parent thread's handle.
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ MANIFEST                  |  1 +
+ ext/PerlIO-via/t/thread.t | 73 +++++++++++++++++++++++++++++++++++++++++++++++
+ ext/PerlIO-via/t/via.t    | 56 +++++++++++++++++++++++++++++++++++-
+ ext/PerlIO-via/via.pm     |  2 +-
+ ext/PerlIO-via/via.xs     | 55 +++++++++++++++++++++++++++++++----
+ 5 files changed, 179 insertions(+), 8 deletions(-)
+ create mode 100644 ext/PerlIO-via/t/thread.t
+
+diff --git a/MANIFEST b/MANIFEST
+index 8c4950e..d39f992 100644
+--- a/MANIFEST
++++ b/MANIFEST
+@@ -4056,6 +4056,7 @@ ext/PerlIO-scalar/scalar.xs	PerlIO layer for scalars
+ ext/PerlIO-scalar/t/scalar.t	See if PerlIO::scalar works
+ ext/PerlIO-scalar/t/scalar_ungetc.t	Tests for PerlIO layer for scalars
+ ext/PerlIO-via/hints/aix.pl	Hint for PerlIO::via for named architecture
++ext/PerlIO-via/t/thread.t		See if PerlIO::via works with threads
+ ext/PerlIO-via/t/via.t		See if PerlIO::via works
+ ext/PerlIO-via/via.pm		PerlIO layer for layers in perl
+ ext/PerlIO-via/via.xs		PerlIO layer for layers in perl
+diff --git a/ext/PerlIO-via/t/thread.t b/ext/PerlIO-via/t/thread.t
+new file mode 100644
+index 0000000..e4358f9
+--- /dev/null
++++ b/ext/PerlIO-via/t/thread.t
+@@ -0,0 +1,73 @@
++#!perl
++BEGIN {
++    unless (find PerlIO::Layer 'perlio') {
++	print "1..0 # Skip: not perlio\n";
++	exit 0;
++    }
++    require Config;
++    unless ($Config::Config{'usethreads'}) {
++        print "1..0 # Skip -- need threads for this test\n";
++        exit 0;
++    }
++    if (($Config::Config{'extensions'} !~ m!\bPerlIO/via\b!) ){
++        print "1..0 # Skip -- Perl configured without PerlIO::via module\n";
++        exit 0;
++    }
++}
++
++use strict;
++use warnings;
++use threads;
++
++my $tmp = "via$$";
++
++END {
++    1 while unlink $tmp;
++}
++
++use Test::More tests => 2;
++
++our $push_count = 0;
++
++{
++    open my $fh, ">:via(Test1)", $tmp
++      or die "Cannot open $tmp: $!";
++    $fh->autoflush;
++
++    print $fh "AXAX";
++
++    # previously this would crash
++    threads->create(
++        sub {
++            print $fh "XZXZ";
++        })->join;
++
++    print $fh "BXBX";
++    close $fh;
++
++    open my $in, "<", $tmp;
++    my $line = <$in>;
++    close $in;
++
++    is($line, "AYAYYZYZBYBY", "check thread data delivered");
++
++    is($push_count, 1, "PUSHED not called for dup on thread creation");
++}
++
++package PerlIO::via::Test1;
++
++sub PUSHED {
++    my ($class) = @_;
++    ++$main::push_count;
++    bless {}, $class;
++}
++
++sub WRITE {
++    my ($self, $data, $fh) = @_;
++    $data =~ tr/X/Y/;
++    $fh->autoflush;
++    print $fh $data;
++    return length $data;
++}
++
++
+diff --git a/ext/PerlIO-via/t/via.t b/ext/PerlIO-via/t/via.t
+index 6787e11..80577df 100644
+--- a/ext/PerlIO-via/t/via.t
++++ b/ext/PerlIO-via/t/via.t
+@@ -17,7 +17,7 @@ use warnings;
+ 
+ my $tmp = "via$$";
+ 
+-use Test::More tests => 18;
++use Test::More tests => 26;
+ 
+ my $fh;
+ my $a = join("", map { chr } 0..255) x 10;
+@@ -84,6 +84,60 @@ is( $obj, 'Foo', 'search for package Foo' );
+ open $fh, '<:via(Bar)', "bar";
+ is( $obj, 'PerlIO::via::Bar', 'search for package PerlIO::via::Bar' );
+ 
++{
++    # [perl #131221]
++    ok(open(my $fh1, ">", $tmp), "open $tmp");
++    ok(binmode($fh1, ":via(XXX)"), "binmode :via(XXX) onto it");
++    ok(open(my $fh2, ">&", $fh1), "dup it");
++    close $fh1;
++    close $fh2;
++
++    # make sure the old workaround still works
++    ok(open($fh1, ">", $tmp), "open $tmp");
++    ok(binmode($fh1, ":via(YYY)"), "binmode :via(YYY) onto it");
++    ok(open($fh2, ">&", $fh1), "dup it");
++    print $fh2 "XZXZ";
++    close $fh1;
++    close $fh2;
++
++    ok(open($fh1, "<", $tmp), "open $tmp for check");
++    { local $/; $b = <$fh1> }
++    close $fh1;
++    is($b, "XZXZ", "check result is from non-filtering class");
++
++    package PerlIO::via::XXX;
++
++    sub PUSHED {
++        my $class = shift;
++        bless {}, $class;
++    }
++
++    sub WRITE {
++        my ($self, $buffer, $handle) = @_;
++
++        print $handle $buffer;
++        return length($buffer);
++    }
++    package PerlIO::via::YYY;
++
++    sub PUSHED {
++        my $class = shift;
++        bless {}, $class;
++    }
++
++    sub WRITE {
++        my ($self, $buffer, $handle) = @_;
++
++        $buffer =~ tr/X/Y/;
++        print $handle $buffer;
++        return length($buffer);
++    }
++
++    sub GETARG {
++        "XXX";
++    }
++}
++
+ END {
+     1 while unlink $tmp;
+ }
+diff --git a/ext/PerlIO-via/via.pm b/ext/PerlIO-via/via.pm
+index e477dcc..30083fe 100644
+--- a/ext/PerlIO-via/via.pm
++++ b/ext/PerlIO-via/via.pm
+@@ -1,5 +1,5 @@
+ package PerlIO::via;
+-our $VERSION = '0.16';
++our $VERSION = '0.17';
+ require XSLoader;
+ XSLoader::load();
+ 1;
+diff --git a/ext/PerlIO-via/via.xs b/ext/PerlIO-via/via.xs
+index 8a7f1fc..61953c8 100644
+--- a/ext/PerlIO-via/via.xs
++++ b/ext/PerlIO-via/via.xs
+@@ -38,6 +38,8 @@ typedef struct
+  CV *UTF8;
+ } PerlIOVia;
+ 
++static const MGVTBL PerlIOVia_tag = { 0, 0, 0, 0, 0, 0, 0, 0 };
++
+ #define MYMethod(x) #x,&s->x
+ 
+ static CV *
+@@ -131,8 +133,14 @@ PerlIOVia_pushed(pTHX_ PerlIO * f, const char *mode, SV * arg,
+ 		 PerlIO_funcs * tab)
+ {
+     IV code = PerlIOBase_pushed(aTHX_ f, mode, Nullsv, tab);
++
++    if (SvTYPE(arg) >= SVt_PVMG
++		&& mg_findext(arg, PERL_MAGIC_ext, &PerlIOVia_tag)) {
++	return code;
++    }
++
+     if (code == 0) {
+-	PerlIOVia *s = PerlIOSelf(f, PerlIOVia);
++        PerlIOVia *s = PerlIOSelf(f, PerlIOVia);
+ 	if (!arg) {
+ 	    if (ckWARN(WARN_LAYER))
+ 		Perl_warner(aTHX_ packWARN(WARN_LAYER),
+@@ -583,20 +591,55 @@ static SV *
+ PerlIOVia_getarg(pTHX_ PerlIO * f, CLONE_PARAMS * param, int flags)
+ {
+     PerlIOVia *s = PerlIOSelf(f, PerlIOVia);
+-    PERL_UNUSED_ARG(param);
++    SV *arg;
+     PERL_UNUSED_ARG(flags);
+-    return PerlIOVia_method(aTHX_ f, MYMethod(GETARG), G_SCALAR, Nullsv);
++
++    /* During cloning, return an undef token object so that _pushed() knows
++     * that it should not call methods and wait for _dup() to actually dup the
++     * object. */
++    if (param) {
++	SV *sv = newSV(0);
++	sv_magicext(sv, NULL, PERL_MAGIC_ext, &PerlIOVia_tag, 0, 0);
++	return sv;
++    }
++
++    arg = PerlIOVia_method(aTHX_ f, MYMethod(GETARG), G_SCALAR, Nullsv);
++    if (arg) {
++        /* arg is a temp, and PerlIOBase_dup() will explicitly free it */
++        SvREFCNT_inc(arg);
++    }
++    else {
++        arg = newSVpvn(HvNAME(s->stash), HvNAMELEN(s->stash));
++    }
++
++    return arg;
+ }
+ 
+ static PerlIO *
+ PerlIOVia_dup(pTHX_ PerlIO * f, PerlIO * o, CLONE_PARAMS * param,
+ 	      int flags)
+ {
+-    if ((f = PerlIOBase_dup(aTHX_ f, o, param, flags))) {
+-	/* Most of the fields will lazily set themselves up as needed
+-	   stash and obj have been set up by the implied push
++    if ((f = PerlIOBase_dup(aTHX_ f, o, param, flags)) && param) {
++	/* For a non-interpreter dup stash and obj have been set up
++	   by the implied push.
++
++           But if this is a clone for a new interpreter we need to
++           translate the objects to their dups.
+ 	 */
++
++        PerlIOVia *fs = PerlIOSelf(f, PerlIOVia);
++        PerlIOVia *os = PerlIOSelf(o, PerlIOVia);
++
++        fs->obj = sv_dup_inc(os->obj, param);
++        fs->stash = (HV*)sv_dup((SV*)os->stash, param);
++        fs->var = sv_dup_inc(os->var, param);
++        fs->cnt = os->cnt;
++
++        /* fh, io, cached CVs left as NULL, PerlIOVia_method()
++           will reinitialize them if needed */
+     }
++    /* for a non-threaded dup fs->obj and stash should be set by _pushed() */
++
+     return f;
+ }
+ 
+-- 
+2.9.4
+
diff --git a/SOURCES/perl-5.27.0-perl-131221-sv_dup-sv_dup_inc-are-only-available-und.patch b/SOURCES/perl-5.27.0-perl-131221-sv_dup-sv_dup_inc-are-only-available-und.patch
new file mode 100644
index 0000000..f0e89da
--- /dev/null
+++ b/SOURCES/perl-5.27.0-perl-131221-sv_dup-sv_dup_inc-are-only-available-und.patch
@@ -0,0 +1,71 @@
+From 7b3443d31f11c15859593e5b710c301795a6de01 Mon Sep 17 00:00:00 2001
+From: Tony Cook <tony@develop-help.com>
+Date: Thu, 8 Jun 2017 11:06:39 +1000
+Subject: [PATCH] [perl #131221] sv_dup/sv_dup_inc are only available under
+ threads
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ ext/PerlIO-via/via.xs | 42 +++++++++++++++++++++++-------------------
+ 1 file changed, 23 insertions(+), 19 deletions(-)
+
+diff --git a/ext/PerlIO-via/via.xs b/ext/PerlIO-via/via.xs
+index 61953c8..d91c685 100644
+--- a/ext/PerlIO-via/via.xs
++++ b/ext/PerlIO-via/via.xs
+@@ -619,26 +619,30 @@ static PerlIO *
+ PerlIOVia_dup(pTHX_ PerlIO * f, PerlIO * o, CLONE_PARAMS * param,
+ 	      int flags)
+ {
+-    if ((f = PerlIOBase_dup(aTHX_ f, o, param, flags)) && param) {
+-	/* For a non-interpreter dup stash and obj have been set up
+-	   by the implied push.
+-
+-           But if this is a clone for a new interpreter we need to
+-           translate the objects to their dups.
+-	 */
+-
+-        PerlIOVia *fs = PerlIOSelf(f, PerlIOVia);
+-        PerlIOVia *os = PerlIOSelf(o, PerlIOVia);
+-
+-        fs->obj = sv_dup_inc(os->obj, param);
+-        fs->stash = (HV*)sv_dup((SV*)os->stash, param);
+-        fs->var = sv_dup_inc(os->var, param);
+-        fs->cnt = os->cnt;
+-
+-        /* fh, io, cached CVs left as NULL, PerlIOVia_method()
+-           will reinitialize them if needed */
++    if ((f = PerlIOBase_dup(aTHX_ f, o, param, flags))) {
++#ifdef USE_ITHREADS
++        if (param) {
++            /* For a non-interpreter dup stash and obj have been set up
++               by the implied push.
++
++               But if this is a clone for a new interpreter we need to
++               translate the objects to their dups.
++            */
++
++            PerlIOVia *fs = PerlIOSelf(f, PerlIOVia);
++            PerlIOVia *os = PerlIOSelf(o, PerlIOVia);
++
++            fs->obj = sv_dup_inc(os->obj, param);
++            fs->stash = (HV*)sv_dup((SV*)os->stash, param);
++            fs->var = sv_dup_inc(os->var, param);
++            fs->cnt = os->cnt;
++
++            /* fh, io, cached CVs left as NULL, PerlIOVia_method()
++               will reinitialize them if needed */
++        }
++#endif
++        /* for a non-threaded dup fs->obj and stash should be set by _pushed() */
+     }
+-    /* for a non-threaded dup fs->obj and stash should be set by _pushed() */
+ 
+     return f;
+ }
+-- 
+2.9.4
+
diff --git a/SOURCES/perl-5.27.0-perl-131526-don-t-go-beyond-the-end-of-the-NUL-in-my.patch b/SOURCES/perl-5.27.0-perl-131526-don-t-go-beyond-the-end-of-the-NUL-in-my.patch
new file mode 100644
index 0000000..05b2c80
--- /dev/null
+++ b/SOURCES/perl-5.27.0-perl-131526-don-t-go-beyond-the-end-of-the-NUL-in-my.patch
@@ -0,0 +1,37 @@
+From 9604fbf0722bd97ca6031a263c50ad52b6633db7 Mon Sep 17 00:00:00 2001
+From: Tony Cook <tony@develop-help.com>
+Date: Wed, 14 Jun 2017 09:42:31 +1000
+Subject: [PATCH] (perl #131526) don't go beyond the end of the NUL in my_atof2
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Perl_my_atof2() calls GROK_NUMERIC_RADIX() to detect and skip past
+a decimal point and then can increment the parse pointer (s) before
+checking what it points at, so skipping the terminating NUL if the
+decimal point is immediately before the NUL.
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ numeric.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/numeric.c b/numeric.c
+index 6ea6968..5771907 100644
+--- a/numeric.c
++++ b/numeric.c
+@@ -1485,9 +1485,9 @@ Perl_my_atof2(pTHX_ const char* orig, NV* value)
+ 	else if (!seen_dp && GROK_NUMERIC_RADIX(&s, send)) {
+ 	    seen_dp = 1;
+ 	    if (sig_digits > MAX_SIG_DIGITS) {
+-		do {
++		while (isDIGIT(*s)) {
+ 		    ++s;
+-		} while (isDIGIT(*s));
++		}
+ 		break;
+ 	    }
+ 	}
+-- 
+2.9.4
+
diff --git a/SOURCES/perl-5.27.3-avoid-the-address-of-.-will-always-evaluate-as-.-war.patch b/SOURCES/perl-5.27.3-avoid-the-address-of-.-will-always-evaluate-as-.-war.patch
new file mode 100644
index 0000000..7f2a9f4
--- /dev/null
+++ b/SOURCES/perl-5.27.3-avoid-the-address-of-.-will-always-evaluate-as-.-war.patch
@@ -0,0 +1,60 @@
+From 45908e4d120d33a558a8b052036c56cd0c90b898 Mon Sep 17 00:00:00 2001
+From: Yves Orton <demerphq@gmail.com>
+Date: Wed, 13 Sep 2017 13:30:25 +0200
+Subject: [PATCH] avoid  'the address of ... will always evaluate as ...' warns
+ in mem macros
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+In f14cf363205 we added asserts to our memory macros (Copy(), Zero() etc)
+to ensure that the target is non-null. These asserts throw warnings like
+
+    perl.c: In function ‘Perl_eval_sv’:
+    perl.c:2976:264: warning: the address of ‘myop’ will always evaluate
+    as ‘true’ [-Waddress]
+         Zero(&myop, 1, UNOP);
+
+which is annoying. This patch changes how these asserts are coded so
+we avoid the warning. Thanks to Zefram for the fix.
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ handy.h | 17 ++++++++++-------
+ 1 file changed, 10 insertions(+), 7 deletions(-)
+
+diff --git a/handy.h b/handy.h
+index 31afaae65e..85e8f70721 100644
+--- a/handy.h
++++ b/handy.h
+@@ -2409,17 +2409,20 @@ void Perl_mem_log_del_sv(const SV *sv, const char *filename, const int linenumbe
+ #define Safefree(d)	safefree(MEM_LOG_FREE((Malloc_t)(d)))
+ #endif
+ 
+-#define Move(s,d,n,t)	(MEM_WRAP_CHECK_(n,t) assert(d), assert(s), (void)memmove((char*)(d),(const char*)(s), (n) * sizeof(t)))
+-#define Copy(s,d,n,t)	(MEM_WRAP_CHECK_(n,t) assert(d), assert(s), (void)memcpy((char*)(d),(const char*)(s), (n) * sizeof(t)))
+-#define Zero(d,n,t)	(MEM_WRAP_CHECK_(n,t) assert(d), (void)memzero((char*)(d), (n) * sizeof(t)))
++#define perl_assert_ptr(p) assert( ((void*)(p)) != 0 )
+ 
+-#define MoveD(s,d,n,t)	(MEM_WRAP_CHECK_(n,t) assert(d), assert(s), memmove((char*)(d),(const char*)(s), (n) * sizeof(t)))
+-#define CopyD(s,d,n,t)	(MEM_WRAP_CHECK_(n,t) assert(d), assert(s), memcpy((char*)(d),(const char*)(s), (n) * sizeof(t)))
++
++#define Move(s,d,n,t)	(MEM_WRAP_CHECK_(n,t) perl_assert_ptr(d), perl_assert_ptr(s), (void)memmove((char*)(d),(const char*)(s), (n) * sizeof(t)))
++#define Copy(s,d,n,t)	(MEM_WRAP_CHECK_(n,t) perl_assert_ptr(d), perl_assert_ptr(s), (void)memcpy((char*)(d),(const char*)(s), (n) * sizeof(t)))
++#define Zero(d,n,t)	(MEM_WRAP_CHECK_(n,t) perl_assert_ptr(d), (void)memzero((char*)(d), (n) * sizeof(t)))
++
++#define MoveD(s,d,n,t)	(MEM_WRAP_CHECK_(n,t) perl_assert_ptr(d), perl_assert_ptr(s), memmove((char*)(d),(const char*)(s), (n) * sizeof(t)))
++#define CopyD(s,d,n,t)	(MEM_WRAP_CHECK_(n,t) perl_assert_ptr(d), perl_assert_ptr(s), memcpy((char*)(d),(const char*)(s), (n) * sizeof(t)))
+ #ifdef HAS_MEMSET
+-#define ZeroD(d,n,t)	(MEM_WRAP_CHECK_(n,t) assert(d), memzero((char*)(d), (n) * sizeof(t)))
++#define ZeroD(d,n,t)	(MEM_WRAP_CHECK_(n,t) perl_assert_ptr(d), memzero((char*)(d), (n) * sizeof(t)))
+ #else
+ /* Using bzero(), which returns void.  */
+-#define ZeroD(d,n,t)	(MEM_WRAP_CHECK_(n,t) assert(d), memzero((char*)(d), (n) * sizeof(t)),d)
++#define ZeroD(d,n,t)	(MEM_WRAP_CHECK_(n,t) perl_assert_ptr(d), memzero((char*)(d), (n) * sizeof(t)),d)
+ #endif
+ 
+ #define PoisonWith(d,n,t,b)	(MEM_WRAP_CHECK_(n,t) (void)memset((char*)(d), (U8)(b), (n) * sizeof(t)))
+-- 
+2.13.6
+
diff --git a/SOURCES/perl-5.27.5-Avoid-a-segfault-when-untying-an-object.patch b/SOURCES/perl-5.27.5-Avoid-a-segfault-when-untying-an-object.patch
new file mode 100644
index 0000000..ba8cdfa
--- /dev/null
+++ b/SOURCES/perl-5.27.5-Avoid-a-segfault-when-untying-an-object.patch
@@ -0,0 +1,32 @@
+From e7e69c85c7e8e0cb75b831e606ad4f26f18b11ff Mon Sep 17 00:00:00 2001
+From: Nicolas R <atoomic@cpan.org>
+Date: Mon, 31 Oct 2016 11:53:17 -0600
+Subject: [PATCH] Avoid a segfault when untying an object
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Check if the tied object has a stash set
+before calling UNTIE method.
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ pp_sys.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/pp_sys.c b/pp_sys.c
+index 672e7de08e..6d4dd86b7f 100644
+--- a/pp_sys.c
++++ b/pp_sys.c
+@@ -1017,7 +1017,7 @@ PP(pp_untie)
+ 
+     if ((mg = SvTIED_mg(sv, how))) {
+ 	SV * const obj = SvRV(SvTIED_obj(sv, mg));
+-        if (obj) {
++        if (obj && SvSTASH(obj)) {
+ 	    GV * const gv = gv_fetchmethod_autoload(SvSTASH(obj), "UNTIE", FALSE);
+ 	    CV *cv;
+ 	    if (gv && isGV(gv) && (cv = GvCV(gv))) {
+-- 
+2.13.6
+
diff --git a/SOURCES/perl-5.27.7-Reenable-numeric-first-argument-of-system-on-VMS.patch b/SOURCES/perl-5.27.7-Reenable-numeric-first-argument-of-system-on-VMS.patch
new file mode 100644
index 0000000..74cb681
--- /dev/null
+++ b/SOURCES/perl-5.27.7-Reenable-numeric-first-argument-of-system-on-VMS.patch
@@ -0,0 +1,34 @@
+From 8e7c2faafb74d3b07e8a5818608dfe065e361604 Mon Sep 17 00:00:00 2001
+From: "Craig A. Berry" <craigberry@mac.com>
+Date: Mon, 1 Jan 2018 10:10:33 -0600
+Subject: [PATCH] Reenable numeric first argument of system() on VMS.
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This was broken in 64def2aeaeb63f92dadc6dfa334, and fixed for Win32
+only in 8fe3452cc6ac7af8c08.  But VMS also uses a numeric first
+argument to system() as a flag indicating spawn without waiting for
+completion.
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ pp_sys.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/pp_sys.c b/pp_sys.c
+index 0c9147bc4e..5154b9baa8 100644
+--- a/pp_sys.c
++++ b/pp_sys.c
+@@ -4375,7 +4375,7 @@ PP(pp_system)
+ 	STRLEN len;
+ 	char *pv;
+ 	SvGETMAGIC(origsv);
+-#ifdef WIN32
++#if defined(WIN32) || defined(__VMS)
+ 	/*
+ 	 * Because of a nasty platform-specific variation on the meaning
+ 	 * of arguments to this op, we must preserve numeric arguments
+-- 
+2.13.6
+
diff --git a/SOURCES/perl-5.27.7-preserve-numericness-of-system-args-on-Win32.patch b/SOURCES/perl-5.27.7-preserve-numericness-of-system-args-on-Win32.patch
new file mode 100644
index 0000000..ab61f96
--- /dev/null
+++ b/SOURCES/perl-5.27.7-preserve-numericness-of-system-args-on-Win32.patch
@@ -0,0 +1,73 @@
+From 8fe3452cc6ac7af8c08c2044cd3757018a9c8887 Mon Sep 17 00:00:00 2001
+From: Zefram <zefram@fysh.org>
+Date: Fri, 22 Dec 2017 05:32:41 +0000
+Subject: [PATCH] preserve numericness of system() args on Win32
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+On Windows there's a nasty variation in the meaning of arguments
+to Perl's system(), in which a numeric first argument isn't used as
+part of the command to run, but instead selects between two different
+operations to perform with the command (whether to wait for the command
+to complete or not).  Therefore the reduction of argument scalars to
+their operative values in the parent process, which was added in commit
+64def2aeaeb63f92dadc6dfa33486c1d7b311963, needs to preserve numericness
+of arguments on Windows.  Fixes [perl #132633].
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ pp_sys.c | 35 +++++++++++++++++++++++++++++++----
+ 1 file changed, 31 insertions(+), 4 deletions(-)
+
+diff --git a/pp_sys.c b/pp_sys.c
+index beb60da4c6..0649794104 100644
+--- a/pp_sys.c
++++ b/pp_sys.c
+@@ -4393,12 +4393,39 @@ PP(pp_system)
+ # endif
+ 
+     while (++MARK <= SP) {
+-	SV *origsv = *MARK;
++	SV *origsv = *MARK, *copysv;
+ 	STRLEN len;
+ 	char *pv;
+-	pv = SvPV(origsv, len);
+-	*MARK = newSVpvn_flags(pv, len,
+-		    (SvFLAGS(origsv) & SVf_UTF8) | SVs_TEMP);
++	SvGETMAGIC(origsv);
++#ifdef WIN32
++	/*
++	 * Because of a nasty platform-specific variation on the meaning
++	 * of arguments to this op, we must preserve numeric arguments
++	 * as numeric, not just retain the string value.
++	 */
++	if (SvNIOK(origsv) || SvNIOKp(origsv)) {
++	    copysv = newSV_type(SVt_PVNV);
++	    sv_2mortal(copysv);
++	    if (SvPOK(origsv) || SvPOKp(origsv)) {
++		pv = SvPV_nomg(origsv, len);
++		sv_setpvn(copysv, pv, len);
++		SvPOK_off(copysv);
++	    }
++	    if (SvIOK(origsv) || SvIOKp(origsv))
++		SvIV_set(copysv, SvIVX(origsv));
++	    if (SvNOK(origsv) || SvNOKp(origsv))
++		SvNV_set(copysv, SvNVX(origsv));
++	    SvFLAGS(copysv) |= SvFLAGS(origsv) &
++		(SVf_IOK|SVf_NOK|SVf_POK|SVp_IOK|SVp_NOK|SVp_POK|
++		    SVf_UTF8|SVf_IVisUV);
++	} else
++#endif
++	{
++	    pv = SvPV_nomg(origsv, len);
++	    copysv = newSVpvn_flags(pv, len,
++			(SvFLAGS(origsv) & SVf_UTF8) | SVs_TEMP);
++	}
++	*MARK = copysv;
+     }
+     MARK = ORIGMARK;
+ 
+-- 
+2.13.6
+
diff --git a/SOURCES/perl-5.27.8-hints-linux-Add-lphtread-to-lddlflags.patch b/SOURCES/perl-5.27.8-hints-linux-Add-lphtread-to-lddlflags.patch
new file mode 100644
index 0000000..f68569f
--- /dev/null
+++ b/SOURCES/perl-5.27.8-hints-linux-Add-lphtread-to-lddlflags.patch
@@ -0,0 +1,61 @@
+From f6bc8fb3d26892ba1a84ba2df76beedd51998dd2 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= <ppisar@redhat.com>
+Date: Mon, 29 Jan 2018 16:34:17 +0100
+Subject: [PATCH] hints/linux: Add -lphtread to lddlflags
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Passing -z defs to linker flags causes perl to fail to build if threads are
+enabled:
+
+gcc  -shared -Wl,-z,relro -Wl,-z,defs -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -L/usr/local/lib -fstack-protector-strong Bzip2.o  -o ../../lib/auto/Compress/Raw/Bzip2/Bzip2.so  \
+   -L/usr/lib64 -lbz2 "-L../.." -lperl   \
+
+Bzip2.o: In function `deRef':
+/builddir/build/BUILD/perl-5.26.1/cpan/Compress-Raw-Bzip2/Bzip2.xs:256: undefined reference to `pthread_getspecific'
+
+The reason is Bzip2.xs calls dTHX macro included from thread.h via perl.h that
+expands to pthread_getspecific() function call that is defined in pthread
+library. But the pthread library is not explicitly linked to Bzip.so (see the
+gcc command). This is exactly what -z defs linker flag enforces.
+
+Underlinking ELFs can be dangerous because in case of versioned
+symbols it can cause run-time binding to an improper version symbol or
+even to an symbold from different library.
+
+This patch fixes hints for Linux by adding -lpthreads to lddlflags. It
+also adds -shared there because Configure.sh adds it only hints return
+lddlflags empty.
+
+<https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org/message/3RHZEHLRUHJFF2XGHI5RB6YPDNLDR4HG/>
+
+Signed-off-by: Petr Písař <ppisar@redhat.com>
+---
+ hints/linux.sh | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/hints/linux.sh b/hints/linux.sh
+index 3f38ea07f1..9ec3bc02ef 100644
+--- a/hints/linux.sh
++++ b/hints/linux.sh
+@@ -353,12 +353,16 @@ if [ -f /etc/synoinfo.conf -a -d /usr/syno ]; then
+     echo "$libswanted" >&4
+ fi
+ 
++# Flags needed to produce shared libraries.
++lddlflags='-shared'
++
+ # This script UU/usethreads.cbu will get 'called-back' by Configure
+ # after it has prompted the user for whether to use threads.
+ cat > UU/usethreads.cbu <<'EOCBU'
+ case "$usethreads" in
+ $define|true|[yY]*)
+         ccflags="-D_REENTRANT -D_GNU_SOURCE $ccflags"
++        lddlflags="-lpthread $lddlflags"
+         if echo $libswanted | grep -v pthread >/dev/null
+         then
+             set `echo X "$libswanted "| sed -e 's/ c / pthread c /'`
+-- 
+2.13.6
+
diff --git a/SOURCES/perl-5.28.1-regcomp.c-Convert-some-strchr-to-memchr.patch b/SOURCES/perl-5.28.1-regcomp.c-Convert-some-strchr-to-memchr.patch
new file mode 100644
index 0000000..bfdadde
--- /dev/null
+++ b/SOURCES/perl-5.28.1-regcomp.c-Convert-some-strchr-to-memchr.patch
@@ -0,0 +1,53 @@
+From cc56be313c7d4e7c266c01dabc762a153d5b2c28 Mon Sep 17 00:00:00 2001
+From: Karl Williamson <khw@cpan.org>
+Date: Sat, 25 Mar 2017 15:00:22 -0600
+Subject: [PATCH] regcomp.c: Convert some strchr to memchr
+
+This allows things to work properly in the face of embedded NULs.
+See the branch merge message for more information.
+
+(cherry picked from commit 43b2f4ef399e2fd7240b4eeb0658686ad95f8e62)
+---
+ regcomp.c | 11 +++++++----
+ 1 file changed, 7 insertions(+), 4 deletions(-)
+
+diff --git a/regcomp.c b/regcomp.c
+index d0d08352c0..2bee9d4460 100644
+--- a/regcomp.c
++++ b/regcomp.c
+@@ -11793,7 +11793,8 @@ S_grok_bslash_N(pTHX_ RExC_state_t *pRExC_state,
+ 
+     RExC_parse++;	/* Skip past the '{' */
+ 
+-    if (! (endbrace = strchr(RExC_parse, '}'))  /* no trailing brace */
++    endbrace = (char *) memchr(RExC_parse, '}', RExC_end - RExC_parse);
++    if (! endbrace                             /* no trailing brace */
+ 	|| ! (endbrace == RExC_parse		/* nothing between the {} */
+               || (endbrace - RExC_parse >= 2	/* U+ (bad hex is checked... */
+                   && strnEQ(RExC_parse, "U+", 2)))) /* ... below for a better
+@@ -12493,9 +12494,11 @@ S_regatom(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth)
+             else {
+                 STRLEN length;
+                 char name = *RExC_parse;
+-                char * endbrace;
++                char * endbrace = NULL;
+                 RExC_parse += 2;
+-                endbrace = strchr(RExC_parse, '}');
++                if (RExC_parse < RExC_end) {
++                    endbrace = (char *) memchr(RExC_parse, '}', RExC_end - RExC_parse);
++                }
+ 
+                 if (! endbrace) {
+                     vFAIL2("Missing right brace on \\%c{}", name);
+@@ -15963,7 +15966,7 @@ S_regclass(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth,
+ 		    vFAIL2("Empty \\%c", (U8)value);
+ 		if (*RExC_parse == '{') {
+ 		    const U8 c = (U8)value;
+-		    e = strchr(RExC_parse, '}');
++		    e = (char *) memchr(RExC_parse, '}', RExC_end - RExC_parse);
+                     if (!e) {
+                         RExC_parse++;
+                         vFAIL2("Missing right brace on \\%c{}", c);
+-- 
+2.11.0
+
diff --git a/SOURCES/perl-5.8.0-libdir64.patch b/SOURCES/perl-5.8.0-libdir64.patch
new file mode 100644
index 0000000..0ab67a0
--- /dev/null
+++ b/SOURCES/perl-5.8.0-libdir64.patch
@@ -0,0 +1,46 @@
+--- perl-5.8.0/Configure.orig	2002-09-09 11:31:19.000000000 -0400
++++ perl-5.8.0/Configure	2002-09-09 11:40:37.000000000 -0400
+@@ -6458,8 +6458,8 @@
+ : Reproduce behavior of 5.005 and earlier, maybe drop that in 5.7.
+ case "$installstyle" in
+ '')	case "$prefix" in
+-		*perl*) dflt='lib';;
+-		*) dflt='lib/perl5' ;;
++		*perl*) dflt='lib64';;
++		*) dflt='lib64/perl5' ;;
+ 	esac
+ 	;;
+ *)	dflt="$installstyle" ;;
+@@ -6475,8 +6475,8 @@
+ : /opt/perl/lib/perl5... would be redundant.
+ : The default "style" setting is made in installstyle.U
+ case "$installstyle" in
+-*lib/perl5*) set dflt privlib lib/$package/$version ;;
+-*)	 set dflt privlib lib/$version ;;
++*lib64/perl5*) set dflt privlib lib64/$package/$version ;;
++*)	 set dflt privlib lib64/$version ;;
+ esac
+ eval $prefixit
+ $cat <<EOM
+@@ -6934,8 +6934,8 @@
+ prog=`echo $package | $sed 's/-*[0-9.]*$//'`
+ case "$sitelib" in
+ '') case "$installstyle" in
+-	*lib/perl5*) dflt=$siteprefix/lib/$package/site_$prog/$version ;;
+-	*)	 dflt=$siteprefix/lib/site_$prog/$version ;;
++	*lib64/perl5*) dflt=$siteprefix/lib64/$package/site_$prog/$version ;;
++	*)	 dflt=$siteprefix/lib64/site_$prog/$version ;;
+ 	esac
+ 	;;
+ *)	dflt="$sitelib"
+@@ -7061,8 +7061,8 @@
+ 	'')
+ 		prog=`echo $package | $sed 's/-*[0-9.]*$//'`
+ 		case "$installstyle" in
+-		*lib/perl5*) dflt=$vendorprefix/lib/$package/vendor_$prog/$version ;;
+-		*)	     dflt=$vendorprefix/lib/vendor_$prog/$version ;;
++		*lib64/perl5*) dflt=$vendorprefix/lib64/$package/vendor_$prog/$version ;;
++		*)	     dflt=$vendorprefix/lib64/vendor_$prog/$version ;;
+ 		esac
+ 		;;
+ 	*)	dflt="$vendorlib"
diff --git a/SOURCES/perl-USE_MM_LD_RUN_PATH.patch b/SOURCES/perl-USE_MM_LD_RUN_PATH.patch
new file mode 100644
index 0000000..21a1f72
--- /dev/null
+++ b/SOURCES/perl-USE_MM_LD_RUN_PATH.patch
@@ -0,0 +1,109 @@
+diff -up perl-5.14.0/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Liblist.pm.usem perl-5.14.0/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Liblist.pm
+--- perl-5.14.0/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Liblist.pm.usem	2011-05-08 05:10:08.000000000 +0200
++++ perl-5.14.0/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Liblist.pm	2011-05-17 11:14:22.169115984 +0200
+@@ -88,6 +88,11 @@ libraries.  LD_RUN_PATH is a colon separ
+ in LDLOADLIBS. It is passed as an environment variable to the process
+ that links the shared library.
+ 
++Fedora extension: This generation of LD_RUN_PATH is disabled by default.
++To use the generated LD_RUN_PATH for all links, set the USE_MM_LD_RUN_PATH
++MakeMaker object attribute / argument, (or set the $USE_MM_LD_RUN_PATH
++environment variable).
++
+ =head2 BSLOADLIBS
+ 
+ List of those libraries that are needed but can be linked in
+diff -up perl-5.14.0/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker.pm.usem perl-5.14.0/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker.pm
+--- perl-5.14.0/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker.pm.usem	2011-05-08 05:10:08.000000000 +0200
++++ perl-5.14.0/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker.pm	2011-05-17 13:39:26.912586030 +0200
+@@ -278,7 +278,7 @@ sub full_setup {
+     PERM_DIR PERM_RW PERM_RWX MAGICXS
+     PL_FILES PM PM_FILTER PMLIBDIRS PMLIBPARENTDIRS POLLUTE
+     PREREQ_FATAL PREREQ_PM PREREQ_PRINT PRINT_PREREQ
+-    SIGN SKIP TEST_REQUIRES TYPEMAPS UNINST VERSION VERSION_FROM XS XSOPT XSPROTOARG
++    SIGN SKIP TEST_REQUIRES TYPEMAPS UNINST USE_MM_LD_RUN_PATH VERSION VERSION_FROM XS XSOPT XSPROTOARG
+     XS_VERSION clean depend dist dynamic_lib linkext macro realclean
+     tool_autosplit
+ 
+@@ -422,7 +422,27 @@ sub new {
+     # PRINT_PREREQ is RedHatism.
+     if ("@ARGV" =~ /\bPRINT_PREREQ\b/) {
+         $self->_PRINT_PREREQ;
+-   }
++    }
++
++    # USE_MM_LD_RUN_PATH - another RedHatism to disable automatic RPATH generation
++    if ( ( ! $self->{USE_MM_LD_RUN_PATH} )
++       &&( ("@ARGV" =~ /\bUSE_MM_LD_RUN_PATH(=([01]))?\b/)
++        ||( exists( $ENV{USE_MM_LD_RUN_PATH} )
++           &&( $ENV{USE_MM_LD_RUN_PATH} =~ /([01])?$/ )
++           )
++        )
++       )
++    {
++       my $v = $1;
++       if( $v )
++       {
++           $v = ($v=~/=([01])$/)[0];
++       }else
++       {
++           $v = 1;
++       };
++       $self->{USE_MM_LD_RUN_PATH}=$v;
++    };
+ 
+     print "MakeMaker (v$VERSION)\n" if $Verbose;
+     if (-f "MANIFEST" && ! -f "Makefile" && ! $UNDER_CORE){
+@@ -2352,6 +2372,40 @@ precedence.  A typemap in the current di
+ precedence, even if it isn't listed in TYPEMAPS.  The default system
+ typemap has lowest precedence.
+ 
++=item USE_MM_LD_RUN_PATH
++
++boolean
++The Fedora perl MakeMaker distribution differs from the standard
++upstream release in that it disables use of the MakeMaker generated
++LD_RUN_PATH by default, UNLESS this attribute is specified , or the
++USE_MM_LD_RUN_PATH environment variable is set during the MakeMaker run.
++
++The upstream MakeMaker will set the ld(1) environment variable LD_RUN_PATH
++to the concatenation of every -L ld(1) option directory in which a -l ld(1)
++option library is found, which is used as the ld(1) -rpath option if none
++is specified. This means that, if your application builds shared libraries
++and your MakeMaker application links to them, that the absolute paths of the
++libraries in the build tree will be inserted into the RPATH header of all
++MakeMaker generated binaries, and that such binaries will be unable to link
++to these libraries if they do not still reside in the build tree directories
++(unlikely) or in the system library directories (/lib or /usr/lib), regardless
++of any LD_LIBRARY_PATH setting. So if you specified -L../mylib -lmylib , and
++ your 'libmylib.so' gets installed into /some_directory_other_than_usr_lib,
++ your MakeMaker application will be unable to link to it, even if LD_LIBRARY_PATH
++is set to include /some_directory_other_than_usr_lib, because RPATH overrides
++LD_LIBRARY_PATH.
++
++So for Fedora MakeMaker builds LD_RUN_PATH is NOT generated by default for
++every link. You can still use explicit -rpath ld options or the LD_RUN_PATH
++environment variable during the build to generate an RPATH for the binaries.
++
++You can set the USE_MM_LD_RUN_PATH attribute to 1 on the MakeMaker command
++line or in the WriteMakefile arguments to enable generation of LD_RUN_PATH
++for every link command.
++
++USE_MM_LD_RUN_PATH will default to 1 (LD_RUN_PATH will be used) IF the
++$USE_MM_LD_RUN_PATH environment variable is set during a MakeMaker run.
++
+ =item VENDORPREFIX
+ 
+ Like PERLPREFIX, but only for the vendor install locations.
+diff -up perl-5.14.0/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm.usem perl-5.14.0/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm
+--- perl-5.14.0/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm.usem	2011-05-08 05:10:08.000000000 +0200
++++ perl-5.14.0/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm	2011-05-17 11:14:22.172115972 +0200
+@@ -944,7 +944,7 @@ $(INST_DYNAMIC): $(OBJECT) $(MYEXTLIB) $
+     }
+ 
+     my $ld_run_path_shell = "";
+-    if ($self->{LD_RUN_PATH} ne "") {
++    if (($self->{LD_RUN_PATH} ne "") && ($self->{USE_MM_LD_RUN_PATH})) {
+ 	$ld_run_path_shell = 'LD_RUN_PATH="$(LD_RUN_PATH)" ';
+     }
+ 
diff --git a/SOURCES/perl-example.stp b/SOURCES/perl-example.stp
new file mode 100644
index 0000000..040f8e3
--- /dev/null
+++ b/SOURCES/perl-example.stp
@@ -0,0 +1,21 @@
+/*
+    Example of the perl systemtap tapset shows a nested view of perl subroutine
+    calls and returns across the whole system.
+
+    To run:
+        stap perl-example.stp (for all perl processes)
+    For specific perl process:
+        stap perl-example.stp -c COMMAND
+*/
+
+probe perl.sub.call
+{
+    printf("%s => sub: %s, filename: %s, line: %d, package: %s\n",
+        thread_indent(1), sub, filename, lineno, package)
+}
+
+probe perl.sub.return
+{
+    printf("%s <= sub: %s, filename: %s, line: %d, package: %s\n",
+        thread_indent(-1), sub, filename, lineno, package)
+}
diff --git a/SOURCES/perl-perlbug-tag.patch b/SOURCES/perl-perlbug-tag.patch
new file mode 100644
index 0000000..0f96ab3
--- /dev/null
+++ b/SOURCES/perl-perlbug-tag.patch
@@ -0,0 +1,21 @@
+diff -up perl-5.16.0-RC2/utils/perlbug.PL.fedora perl-5.16.0-RC2/utils/perlbug.PL
+--- perl-5.16.0-RC2/utils/perlbug.PL.fedora	2012-05-16 16:15:51.000000000 +0200
++++ perl-5.16.0-RC2/utils/perlbug.PL	2012-05-16 16:18:36.018894464 +0200
+@@ -271,17 +271,6 @@ sub Init {
+     $ok = '';
+     if ($opt{o}) {
+ 	if ($opt{o} eq 'k' or $opt{o} eq 'kay') {
+-	    my $age = time - $patchlevel_date;
+-	    if ($opt{o} eq 'k' and $age > 60 * 24 * 60 * 60 ) {
+-		my $date = localtime $patchlevel_date;
+-		print <<"EOF";
+-"perlbug -ok" and "perlbug -nok" do not report on Perl versions which
+-are more than 60 days old.  This Perl version was constructed on
+-$date.  If you really want to report this, use
+-"perlbug -okay" or "perlbug -nokay".
+-EOF
+-		exit();
+-	    }
+ 	    # force these options
+ 	    unless ($opt{n}) {
+ 		$opt{S} = 1; # don't prompt for send
diff --git a/SOURCES/perl.stp b/SOURCES/perl.stp
new file mode 100644
index 0000000..dbc51a8
--- /dev/null
+++ b/SOURCES/perl.stp
@@ -0,0 +1,71 @@
+/*
+   This probe will fire when the perl script enters a subroutine.
+ */
+
+probe perl.sub.call = process("LIBRARY_PATH").mark("sub__entry")
+{
+
+  sub = user_string($arg1)
+  filename = user_string($arg2)
+  lineno = $arg3
+  package = user_string($arg4)
+
+}
+
+/*
+   This probe will fire when the return from a subroutine has been
+   hit.
+ */
+
+probe perl.sub.return = process("LIBRARY_PATH").mark("sub__return")
+{
+
+  sub = user_string($arg1)
+  filename = user_string($arg2)
+  lineno = $arg3
+  package = user_string($arg4)
+
+}
+
+/*
+   This probe will fire when the Perl interperter changes state.
+ */
+
+probe perl.phase.change = process("LIBRARY_PATH").mark("phase__change")
+{
+  newphase = user_string($arg1)
+  oldphase = user_string($arg2)
+
+}
+
+
+/*
+   Fires when Perl has successfully loaded an individual file.
+ */
+
+probe perl.loaded.file = process("LIBRARY_PATH").mark("loaded__file")
+{
+  filename = user_string($arg1)
+
+}
+
+
+/*
+   Fires when Perl is about to load an individual file.
+ */
+
+probe perl.loading.file = process("LIBRARY_PATH").mark("loading__file")
+{
+  filename = user_string($arg1)
+
+}
+
+
+/*
+   Traces the execution of each opcode in the Perl runloop.
+ */
+
+probe perl.op.entry = process("LIBRARY_PATH").mark("op__entry")
+{
+  opname = user_string($arg1)
+}
diff --git a/SPECS/perl.spec b/SPECS/perl.spec
new file mode 100644
index 0000000..696340a
--- /dev/null
+++ b/SPECS/perl.spec
@@ -0,0 +1,7030 @@
+%global perl_version    5.24.4
+%global perl_epoch      4
+%global perl_arch_stem -thread-multi
+%global perl_archname %{_arch}-%{_os}%{perl_arch_stem}
+
+%global multilib_64_archs aarch64 %{power64} s390x sparc64 x86_64 
+%global parallel_tests 1
+%global tapsetdir   %{_datadir}/systemtap/tapset
+
+%global dual_life 0
+%global rebuild_from_scratch %{defined perl_bootstrap}
+
+# This overrides filters from build root (/usr/lib/rpm/macros.d/macros.perl)
+# intentionally (unversioned perl(DB) is removed and versioned one is kept).
+# Filter provides from *.pl files, bug #924938
+%global __provides_exclude_from .*%{_docdir}|.*%{perl_archlib}/.*\\.pl$|.*%{perl_privlib}/.*\\.pl$
+%global __requires_exclude_from %{_docdir}
+%global __provides_exclude perl\\((VMS|Win32|BSD::|DB\\)$)
+%global __requires_exclude perl\\((VMS|BSD::|Win32|Tk|Mac::|Your::Module::Here)
+# same as we provide in /usr/lib/rpm/macros.d/macros.perl
+%global perl5_testdir   %{_libexecdir}/perl5-tests
+
+# Optional features
+# We can bootstrap without gdbm
+%bcond_without gdbm
+# Support for groff, bug #135101
+%bcond_without perl_enables_groff
+# Run syslog tests
+%bcond_with perl_enables_syslog_test
+# SystemTap support
+%bcond_without perl_enables_systemtap
+# <> operator uses File::Glob nowadays. CSH is not needed.
+%bcond_with perl_enables_tcsh
+# We can skip %%check phase
+%bcond_without test
+
+Name:           perl
+Version:        %{perl_version}
+# release number must be even higher, because dual-lived modules will be broken otherwise
+Release:        404%{?dist}
+Epoch:          %{perl_epoch}
+Summary:        Practical Extraction and Report Language
+# These are all found licenses. They are distributed among various
+# subpackages.
+# dist/Tie-File/lib/Tie/File.pm:        GPLv2+ or Artistic
+# cpan/Getopt-Long/lib/Getopt/Long.pm:  GPLv2+ or Artistic
+# cpan/Compress-Raw-Zlib/Zlib.xs:       (GPL+ or Artistic) and zlib
+# cpan/Digest-MD5/MD5.xs:               (GPL+ or Artistic) and BSD
+# cpan/Time-Piece/Piece.xs:             (GPL+ or Artisitc) and BSD
+# dist/PathTools/Cwd.xs:                (GPL+ or Artisitc) and BSD
+# cpan/perlfaq/lib/perlfaq4.pod:        (GPL+ or Artistic) and Public Domain
+# cpan/Test-Simple/lib/Test/Tutorial.pod:   (GPL+ or Artistic) and
+#                                           Public Domain
+# cpan/MIME-Base64/Base64.xs:           (GPL+ or Artistic) and MIT
+# cpan/Test-Simple/lib/ok.pm:           CC0
+# cpan/Text-Tabs/lib/Text/Wrap.pm:      TTWL
+# cpan/Encode/bin/encguess:             Artistic 2.0
+# cpan/Unicode-Collate/Collate/allkeys.txt:     Unicode
+# lib/unicore:                          UCD
+# ext/SDBM_File/sdbm.{c,h}:             Public domain
+# regexec.c, regcomp.c:                 HSLR
+# cpan/Locale-Maketext-Simple/lib/Locale/Maketext/Simple.pm:    MIT (with
+#                                       exception for Perl)
+# time64.c:                             MIT
+# pod/perlpodstyle.pod:                 MIT
+# pod/perlunicook.pod:                  (GPL+ or Artistic) and Public Domain
+# pod/perlgpl.pod:                      GPL text
+# pod/perlartistic.pod:                 Artistic text
+# ext/File-Glob/bsd_glob.{c,h}:         BSD
+# Other files:                          GPL+ or Artistic
+## Not is a binary package
+# cpan/podlators/t/style/minimum-version.t          MIT
+# cpan/Term-ANSIColor/t/lib/Test/RRA/Config.pm:     MIT
+## Unbundled
+# cpan/Compress-Raw-Bzip2/bzip2-src:    BSD
+# cpan/Compress-Raw-Zlib/zlib-src:      zlib
+## perl sub-package notice
+# perluniprops.pod is generated from lib/unicore sources:   UCD
+License:        (GPL+ or Artistic) and (GPLv2+ or Artistic) and BSD and Public Domain and UCD
+Url:            http://www.perl.org/
+Source0:        http://www.cpan.org/src/5.0/perl-%{perl_version}.tar.bz2
+Source3:        macros.perl
+#Systemtap tapset and example that make use of systemtap-sdt-devel
+# build requirement. Written by lberk; Not yet upstream.
+Source4:        perl.stp
+Source5:        perl-example.stp
+# Tom Christiansen confirms Pod::Html uses the same license as perl
+Source6:        Pod-Html-license-clarification
+
+# Pregenerated dependencies for bootstrap.
+# If your RPM tool fails on including the source file, then you forgot to
+# define _sourcedir macro to point to the directory with the sources.
+Source7:        gendep.macros
+%if %{defined perl_bootstrap}
+%include %{SOURCE7}
+%endif
+
+# Removes date check, Fedora/RHEL specific
+Patch1:         perl-perlbug-tag.patch
+
+# Fedora/RHEL only (64bit only)
+Patch3:         perl-5.8.0-libdir64.patch
+
+# Fedora/RHEL specific (use libresolv instead of libbind), bug #151127
+Patch4:         perl-5.10.0-libresolv.patch
+
+# FIXME: May need the "Fedora" references removed before upstreaming
+# patches ExtUtils-MakeMaker
+Patch5:         perl-USE_MM_LD_RUN_PATH.patch
+
+# Provide maybe_command independently, bug #1129443
+Patch6:         perl-5.22.1-Provide-ExtUtils-MM-methods-as-standalone-ExtUtils-M.patch
+
+# The Fedora builders started randomly failing this futime test
+# only on x86_64, so we just don't run it. Works fine on normal
+# systems.
+Patch7:         perl-5.10.0-x86_64-io-test-failure.patch
+
+# switch off test, which is failing only on koji (fork)
+Patch8:         perl-5.14.1-offtest.patch
+
+# Define SONAME for libperl.so
+Patch15:        perl-5.16.3-create_libperl_soname.patch
+
+# Install libperl.so to -Dshrpdir value
+Patch16:        perl-5.22.0-Install-libperl.so-to-shrpdir-on-Linux.patch
+
+# Document Math::BigInt::CalcEmu requires Math::BigInt, rhbz#959096,
+# CPAN RT#85015
+Patch22:        perl-5.18.1-Document-Math-BigInt-CalcEmu-requires-Math-BigInt.patch 
+
+# Make *DBM_File desctructors thread-safe, bug #1107543, RT#61912
+Patch26:        perl-5.18.2-Destroy-GDBM-NDBM-ODBM-SDBM-_File-objects-only-from-.patch
+
+# Workaround for Coro, bug #1231165, CPAN RT#101063. To remove in the future.
+Patch28:        perl-5.22.0-Revert-const-the-core-magic-vtables.patch
+
+# Replace ExtUtils::MakeMaker dependency with ExtUtils::MM::Utils.
+# This allows not to require perl-devel. Bug #1129443
+Patch30:        perl-5.22.1-Replace-EU-MM-dependnecy-with-EU-MM-Utils-in-IPC-Cmd.patch
+
+# Do not use unitialized memory in $h{\const} warnings, RT#128189,
+# in upstream after 5.25.2
+Patch34:        perl-5.25.2-uninit-warning-from-h-const-coredumped.patch
+
+# Do not treat %: as a stash, RT#128238, in upstream after 5.25.2
+Patch36:        perl-5.25.2-only-treat-stash-entries-with-.-as-sub-stashes.patch
+
+# Do not crash when inserting a non-stash into a stash, RT#128238,
+# in upstream after 5.25.2
+Patch37:        perl-5.25.2-perl-128238-Crash-with-non-stash-in-stash.patch
+
+# Fix a crash when vivifying a stub in a deleted package, RT#128532,
+# in upstream after 5.25.2
+Patch40:        perl-5.25.2-perl-128532-Crash-vivifying-stub-in-deleted-pkg.patch
+
+# Fix a crash in "Subroutine redefined" warning, RT#128257,
+# in upstream after 5.25.2
+Patch41:        perl-5.25.2-SEGV-in-Subroutine-redefined-warning.patch
+
+# Fix crash in splice, RT#129164, RT#129166, RT#129167, in upstream after 5.25.4
+Patch48:        perl-5.24.0-perl-129164-Crash-with-splice.patch
+
+# Fix string overrun in Perl_gv_fetchmethod_pvn_flags, RT#129267,
+# in upstream after 5.25.4
+Patch49:        perl-5.24.0-clean-up-gv_fetchmethod_pvn_flags-introduce-name_end.patch
+Patch50:        perl-5.25.4-clean-up-gv_fetchmethod_pvn_flags-move-origname-init.patch
+Patch51:        perl-5.25.4-clean-up-gv_fetchmethod_pvn_flags-rename-nsplit-to-l.patch
+Patch52:        perl-5.25.4-fix-129267-rework-gv_fetchmethod_pvn_flags-separator.patch
+Patch53:        perl-5.25.4-perl-129267-Test-for-gv_fetchmethod-buffer-overrun.patch
+
+# Fix crash when matching UTF-8 string with non-UTF-8 substrings, RT#129350,
+# in upstream after 5.25.5
+Patch54:        perl-5.24.4-perl-129350-anchored-floating-substrings-must-be-utf.patch
+
+# Fix parsing perl options in shell bang line, RT#129336,
+# in upstream after 5.25.5
+Patch55:        perl-5.24.0-rt-129336-perl-i-u-erroneously-interpreted-as-u.patch
+
+# Fix firstchar bitmap under UTF-8 with prefix optimization, RT#129950,
+# in upstream after 5.25.6
+Patch56:        perl-5.24.0-regcomp.c-fix-perl-129950-fix-firstchar-bitmap-under.patch
+
+# Avoid infinite loop in h2xs tool if enum and type have the same name,
+# RT#130001, in upstream after 5.25.6
+Patch57:        perl-5.25.6-perl-130001-h2xs-avoid-infinite-loop-for-enums.patch
+
+# Fix stack handling when calling chdir without an argument, RT#129130,
+# in upstream after 5.25.6
+Patch58:        perl-5.24.0-perl-129130-make-chdir-allocate-the-stack-it-needs.patch
+
+# Fix crash in Storable when deserializing malformed code reference, RT#68348,
+# RT130098
+Patch59:        perl-5.25.7-Fix-Storable-segfaults.patch
+
+# Fix crash on explicit return from regular expression substitution, RT#130188,
+# in upstream after 5.25.7
+Patch60:        perl-5.24.0-crash-on-explicit-return-from-s-e.patch
+
+# Fix assigning split() return values to an array, in upstream after 5.25.7
+Patch61:        perl-5.24.0-split-was-leaving-PL_sv_undef-in-unused-ary-slots.patch
+
+# Fix const correctness in hv_func.h, bug #1242980, RT#130169,
+# in upstream after 5.25.7
+Patch62:        perl-5.25.7-Fix-const-correctness-in-hv_func.h.patch
+
+# Fix a crash in optimized evaluation of "or ((0) x 0))", RT#130247,
+# in upsream after 5.25.7
+Patch63:        perl-5.24.0-assertion-failure-in-.-or-0-x-0.patch
+
+# Fix a memory leak in IO::Poll, RT#129788, in upstream after 5.25.7
+Patch64:        perl-5.24.0-perl-129788-IO-Poll-fix-memory-leak.patch
+
+# Fix regular expression matching, RT#130307, in upstream after 5.25.7
+Patch65:        perl-5.24.4-perl-130307-Correctly-unwind-on-cache-hit.patch
+
+# Fix a buffer overflow in split in scalar context, RT#130262,
+# in upstream after 5.25.8
+Patch66:        perl-5.24.1-perl-130262-split-scalar-context-stack-overflow-fix.patch
+
+# Fix a heap overflow with pack "W", RT129149, in upstream after 5.25.8
+Patch67:        perl-5.24.4-perl-129149-avoid-a-heap-buffer-overflow-with-pack-W.patch
+Patch68:        perl-5.24.4-perl-129149-fix-the-test-so-skip-has-a-SKIP-to-work-.patch
+
+# Fix a use-after-free when processing scalar variables in forms, RT#129125,
+# in upstream after 5.25.8
+Patch69:        perl-5.24.1-perl-129125-copy-form-data-if-it-might-be-freed.patch
+
+# Fix a heap overflow if invalid octal or hexadecimal number is used in
+# transliteration expression, RT#129342, in upstream after 5.25.8
+Patch70:        perl-5.24.1-perl-129342-ensure-range-start-is-set-after-error-in.patch
+
+# Fix out-of-bound read in case of unmatched regexp backreference, RT#129377,
+# in upstream after 5.25.8
+Patch71:        perl-5.24.1-perl-129377-don-t-read-past-start-of-string-for-unma.patch
+
+# Fix UTF-8 string handling in & operator, RT#129287, in upstream after 5.25.4
+Patch72:        perl-5.25.4-perl-129287-Make-UTF8-append-null.patch
+
+# Fix recreation of *::, RT#129869, in upstream after 5.25.9
+Patch73:        perl-5.24.1-fix-special-case-recreation-of.patch
+
+# Fix a memory leak in B::RHE->HASH method, RT#130504, in upstream after 5.25.9
+Patch74:        perl-5.24.1-Fix-memory-leak-in-B-RHE-HASH-method.patch
+
+# Fix parsing goto statements in multicalled subroutine, RT#113938,
+# in upstream after 5.25.9
+Patch75:        perl-5.24.1-permit-goto-at-top-level-of-multicalled-sub.patch
+
+# Fix a heap overlow in parsing $#, RT#129274, in upstream after 5.25.9
+Patch76:        perl-5.24.1-perl-129274-avoid-treating-the-in-as-a-comment-intro.patch
+
+# 1/2 Adapt to zlib-1.2.11, bug #1420326, CPAN RT#119762,
+# in upstream Compress-Raw-Zlib-2.072
+Patch77:        Compress-Raw-Zlib-2.071-Adapt-to-zlib-1.2.11.patch
+# 2/2 Fix compiler fatal warnings in Compress-Raw-Zlib, CPAN RT#120272
+Patch78:        Compress-Raw-Zlib-2.071-Conform-to-C90.patch
+
+# Fix a crash when compiling a regexp with impossible quantifiers, RT#130561,
+# in upstream after 5.25.9
+Patch79:        perl-5.24.1-fix-RT-130561-recursion-and-optimising-away-impossib.patch
+Patch80:        perl-5.25.9-only-mess-with-NEXT_OFF-when-we-are-in-PASS2.patch
+Patch81:        perl-5.25.9-silence-warnings-from-tests-about-impossible-quantif.patch
+
+# Fix a buffer overrun with format and "use bytes", RT#130703,
+# in upstream after 5.25.9
+Patch82:        perl-5.24.1-buffer-overrun-with-format-and-use-bytes.patch
+
+# Fix a buffer overflow when studying some regexps repeatedly,
+# RT#129281, RT#129061, un upstream after 5.25.9
+Patch83:        perl-5.24.1-perl-129281-test-for-buffer-overflow-issue.patch
+Patch84:        perl-5.25.9-perl-129061-CURLYX-nodes-can-be-studied-more-than-on.patch
+
+# Fix a heap buffer overflow when evaluating regexps with embedded code blocks
+# from more than one source, RT#129881, in upstream after 5.25.9
+Patch85:        perl-5.24.1-fix-pad-scope-issue-in-re_evals.patch
+
+# Fix a null-pointer dereference on malformed code, RT#130815,
+# in upstream after 5.25.9
+Patch87:        perl-5.24.1-perl-130815-fix-ck_return-null-pointer-deref-on-malf.patch
+
+# Fix an use-after-free in substr() that modifies a magic variable, RT#129340,
+# in upstream after 5.25.9
+Patch88:        perl-5.24.1-perl-129340-copy-the-source-when-inside-the-dest-in-.patch
+
+# Fix a memory leak leak in Perl_reg_named_buff_fetch(), RT#130822,
+# in upstream after 5.25.10
+Patch89:        perl-5.24.1-perl-130822-fix-an-AV-leak-in-Perl_reg_named_buff_fe.patch
+
+# Fix an invalid memory read when parsing a loop variable, RT#130814,
+# in upstream after 5.25.10
+Patch90:        perl-5.25.10-perl-130814-Add-testcase-and-new-testfile-t-comp-par.patch
+# in upstream after 5.25.10
+Patch91:        perl-5.24.1-perl-130814-update-pointer-into-PL_linestr-after-loo.patch
+# in upstream after 5.25.2
+Patch92:        perl-5.25.2-t-test.pl-Add-fresh_perl-function.patch
+# in upstream after 5.25.10
+Patch93:        perl-5.25.10-fix-VMS-test-fail.patch
+
+# Fix a heap-use-after-free in four-arguments substr call, RT#130624,
+# in upstream after 5.25.10
+Patch94:        perl-5.24.1-RT-130624-heap-use-after-free-in-4-arg-substr.patch
+
+# Make File::Glob more resistant against degenerative matching, RT#131211,
+# in upstream after 5.27.0
+Patch95:        perl-5.24.1-perl-131211-fixup-File-Glob-degenerate-matching.patch
+
+# Tests for avoid-a-memory-wrap-in-sv_vcatpvfn_flags.patch, RT#131260,
+# in upstream after 5.27.0
+Patch97:        perl-5.24.1-sprintf-add-memory-wrap-tests.patch
+
+# Fix a crash when calling a subroutine from a stash, RT#131085,
+# in upstream after 5.27.0
+Patch98:        perl-5.24.1-perl-131085-Crash-with-sub-in-stash.patch
+
+# Fix an improper cast of a negative integer to an unsigned 8-bit type,
+# RT#131190, in upstream after 5.27.0
+Patch99:        perl-5.27.0-Fix-131190-UTF8-code-improperly-casting-negative-int.patch
+
+# Fix cloning :via handles on thread creation, RT#131221,
+# in upstream after 5.27.0
+Patch100:       perl-5.27.0-perl-131221-improve-duplication-of-via-handles.patch
+Patch101:       perl-5.27.0-perl-131221-sv_dup-sv_dup_inc-are-only-available-und.patch
+
+# Fix glob UTF-8 flag on a glob reassignment, RT#131263,
+# in upstream after 5.27.0
+Patch102:       perl-5.24.1-perl-131263-clear-the-UTF8-flag-on-a-glob-if-it-isn-.patch
+
+# Fix a buffer overflow in my_atof2(), RT#131526, in upstream after 5.27.0
+Patch103:       perl-5.27.0-perl-131526-don-t-go-beyond-the-end-of-the-NUL-in-my.patch
+
+# Fix handling backslashes in PATH environment variable when executing
+# "perl -S", RT#129183, in upstream after 5.27.0
+Patch105:       perl-5.27.0-perl-129183-don-t-treat-as-an-escape-in-PATH-for-S.patch
+
+# Fix a conditional jump on uninitilized memory in re_intuit_start(),
+# RT#131575, in upstream after 5.27.0
+Patch106:       perl-5.24.1-don-t-call-Perl_fbm_instr-with-negative-length.patch
+
+# Fix spurious "Assuming NOT a POSIX class" warning, RT#131522,
+# in upsteam after 5.27.0
+Patch107:       perl-5.27.0-Resolve-Perl-131522-Spurious-Assuming-NOT-a-POSIX-cl.patch
+Patch108:       perl-5.27.0-add-test-for-perl-131522-and-fix-test-for-related-pe.patch
+
+# Fix handling attribute specification on our variables, RT#131597,
+# in upstream adter 5.27.1
+Patch109:       perl-5.24.3-perl-131597-ensure-the-GV-slot-is-filled-for-our-foo.patch
+
+# Fix a crash when a match for inversely repeated group fails, RT#132017,
+# in upstream after 5.27.3
+Patch110:       perl-5.24.3-fix-132017-OPFAIL-insert-needs-to-set-flags-to-0.patch
+
+# Fix an overflow when parsing a character range with no preceding character,
+# RT#132245, in upstream after 5.27.5
+Patch111:       perl-5.24.3-perl-132245-don-t-try-to-process-a-char-range-with-n.patch
+
+# Fix walking symbol table for ISA in Carp, in upstream after 5.27.5
+Patch112:       perl-5.24.3-Carp-Don-t-choke-on-ISA-constant.patch
+
+# Fix handling file names with null bytes in stat and lstat functions,
+# RT#131895, in upstream after 5.27.5
+Patch113:       perl-5.24.3-perl-131895-fail-stat-on-names-with-0-embedded.patch
+
+# Fix a crash when untying an object witout a stash, in upstream after 5.27.5
+Patch114:       perl-5.27.5-Avoid-a-segfault-when-untying-an-object.patch
+
+# Fix deparsing of transliterations with unprintable characters, RT#132405,
+# in upstream after 5.27.5
+Patch115:       perl-5.24.3-Fix-deparsing-of-transliterations-with-unprintable-c.patch
+
+# Fix error reporting on do() on a directory, RT#125774,
+# in upstream after 5.27.5
+Patch116:       perl-5.26.1-fix-do-dir-returning-no.patch
+
+# Fix stack manipulation when a lexical subroutine is defined in a do block in
+# a member of an iteration list, RT#132442, in upstream after 5.27.5
+Patch117:       perl-5.24.3-perl-132442-Fix-stack-with-do-my-sub-l-1.patch
+
+# Fix setting $! when statting a closed filehandle, RT#108288,
+# in upstream after 5.27.5
+Patch118:       perl-5.24.3-set-when-statting-a-closed-filehandle.patch
+
+# Fix tainting of s/// with overloaded replacement, RT#115266,
+# in upstream after 5.27.5
+Patch119:       perl-5.24.3-fix-tainting-of-s-with-overloaded-replacement.patch
+
+# Expand system() arguments before a fork, RT#121105,
+# in upstream after 5.27.6
+Patch120:       perl-5.24.4-perform-system-arg-processing-before-fork.patch
+# in upstream after 5.27.7
+Patch121:       perl-5.27.7-preserve-numericness-of-system-args-on-Win32.patch
+Patch122:       perl-5.27.7-Reenable-numeric-first-argument-of-system-on-VMS.patch
+
+# Avoid undefined behavior when copying memory in Glob and pp_caller,
+# RT#131746, in upstream after 5.27.3
+Patch123:       perl-5.26.1-perl-131746-avoid-undefined-behaviour-in-Copy-etc.patch
+Patch124:       perl-5.27.3-avoid-the-address-of-.-will-always-evaluate-as-.-war.patch
+
+# Conditionalize a fix for an old and long fixed bug
+# in libcrypt / glibc, rhbz#1536752
+Patch125:       perl-5.26.1-guard_old_libcrypt_fix.patch
+
+# Link XS modules to pthread library to fix linking with -z defs,
+# <https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org/message/3RHZEHLRUHJFF2XGHI5RB6YPDNLDR4HG/>
+Patch126:       perl-5.27.8-hints-linux-Add-lphtread-to-lddlflags.patch
+
+# Fix parsing braced subscript after parentheses, RT#8045,
+# in upstream after 5.27.7
+Patch127:       perl-5.24.3-fix-parsing-of-braced-subscript-after-parens.patch
+
+# Adjust tests to gdbm-1.15, RT#133295
+Patch128:       perl-5.24.4-Remove-ext-GDBM_File-t-fatal.t.patch
+
+# Pass the correct CFLAGS to dtrace
+Patch129:       perl-5.24.4-Pass-CFLAGS-to-dtrace.patch
+
+# Fix an integer wrap when allocating memory for an environment variable,
+# RT#133204, in upstream after 5.29.0 - CVE-2018-18311
+Patch130:       perl-5.24.4-Perl_my_setenv-handle-integer-wrap.patch
+
+# Fix heap-buffer-overflow write in S_regatom (regcomp.c) CVE-2018-18314
+Patch131:       perl-5.24.4-Fix-131649-extended-charclass-can-trigger-assert.patch
+
+# Fix heap-buffer-overflow write in S_regatom (regcomp.c) CVE-2018-18312
+Patch132:       perl-5.24.4-Fix-heap-buffer-overflow-write-reg_node-overrun.patch
+
+# Fix heap-buffer-overflow read in S_grok_bslash_N (regcomp.c) - CVE-2018-18313
+Patch133:       perl-5.28.1-regcomp.c-Convert-some-strchr-to-memchr.patch
+
+# Link XS modules to libperl.so with EU::CBuilder on Linux, bug #960048
+Patch200:       perl-5.16.3-Link-XS-modules-to-libperl.so-with-EU-CBuilder-on-Li.patch
+
+# Link XS modules to libperl.so with EU::MM on Linux, bug #960048
+Patch201:       perl-5.16.3-Link-XS-modules-to-libperl.so-with-EU-MM-on-Linux.patch
+
+# Update some of the bundled modules
+# see http://fedoraproject.org/wiki/Perl/perl.spec for instructions
+
+BuildRequires:  bash
+BuildRequires:  bzip2-devel
+BuildRequires:  coreutils
+BuildRequires:  findutils
+BuildRequires:  gcc
+%if %{with gdbm}
+BuildRequires:  gdbm-devel
+%endif
+# glibc-common for iconv
+BuildRequires:  glibc-common
+%if %{with perl_enables_groff}
+# Build-require groff tools for populating %%Config correctly, bug #135101
+BuildRequires:  groff-base
+%endif
+BuildRequires:  libdb-devel
+BuildRequires:  make
+%if !%{defined perl_bootstrap}
+BuildRequires:  perl
+BuildRequires:  perl-generators
+%endif
+BuildRequires:  sed
+%if %{with perl_enables_systemtap}
+BuildRequires:  systemtap-sdt-devel
+%endif
+BuildRequires:  tar
+%if %{with perl_enables_tcsh}
+BuildRequires:  tcsh
+%endif
+BuildRequires:  zlib-devel
+
+# For tests
+%if %{with test}
+BuildRequires:  procps
+%if %{with perl_enables_syslog_test}
+BuildRequires:  rsyslog
+%endif
+%endif
+
+# The long line of Perl provides.
+
+
+# compat macro needed for rebuild
+%global perl_compat perl(:MODULE_COMPAT_5.24.4)
+
+# File provides
+Provides: perl(bytes_heavy.pl)
+Provides: perl(dumpvar.pl)
+Provides: perl(perl5db.pl)
+
+# suidperl isn't created by upstream since 5.12.0
+Obsoletes: perl-suidperl <= 4:5.12.2
+
+Requires: perl-libs%{?_isa} = %{perl_epoch}:%{perl_version}-%{release}
+# Require this till perl sub-package requires any modules
+Requires: %perl_compat
+# Require perl-interpreter to maintain compatibility (previous perl
+# package provided perl-interpreter symbol), bug #1670435
+Requires: perl-interpreter%{?_isa} = %{perl_epoch}:%{perl_version}-%{release}
+%if %{defined perl_bootstrap}
+%gendep_perl
+%endif
+
+# We need this to break the dependency loop, and ensure that perl-libs 
+# gets installed before perl.
+Requires(post): perl-libs
+# Same as perl-libs. We need macros in basic buildroot, where Perl is only
+# because of git.
+Requires(post): perl-macros
+
+
+%description
+Perl is a high-level programming language with roots in C, sed, awk and shell
+scripting.  Perl is good at handling processes and files, and is especially
+good at handling text.  Perl's hallmarks are practicality and efficiency.
+While it is used to do a lot of different things, Perl's most common
+applications are system administration utilities and web programming.
+
+Install this package if you want to program in Perl or enable your system to
+handle Perl scripts with %{_bindir}/perl interpreter.
+
+If your script requires some Perl modules, you can install them with
+"perl(MODULE)" where "MODULE" is a name of required module. E.g. install
+"perl(Test::More)" to make Test::More Perl module available.
+
+If you need all the Perl modules that come with upstream Perl sources, so
+called core modules, install perl-core package.
+
+If you only need perl run-time as a shared library, i.e. Perl interpreter
+embedded into another application, the only essential package is perl-libs.
+
+Perl header files can be found in perl-devel package.
+
+Perl utils like "splain" or "perlbug" can be found in perl-utils package.
+
+
+%package libs
+Summary:        The libraries for the perl run-time
+License:        (GPL+ or Artistic) and HSLR and MIT and UCD
+# Compat provides
+Provides:       %perl_compat
+Provides:       perl(:MODULE_COMPAT_5.24.3)
+Provides:       perl(:MODULE_COMPAT_5.24.2)
+Provides:       perl(:MODULE_COMPAT_5.24.1)
+Provides:       perl(:MODULE_COMPAT_5.24.0)
+# Interpreter version to fulfil required genersted from "require 5.006;"
+Provides:       perl(:VERSION) = %{perl_version}
+# Threading provides
+Provides:       perl(:WITH_ITHREADS)
+Provides:       perl(:WITH_THREADS)
+# Largefile provides
+Provides:       perl(:WITH_LARGEFILES)
+# PerlIO provides
+Provides:       perl(:WITH_PERLIO)
+# Loaded by charnames, unicore/Name.pm does not declare unicore::Name module
+Provides:       perl(unicore::Name)
+# Keep utf8 modules in perl-libs because a sole regular expression like /\pN/
+# causes loading utf8 and unicore/Heave.pl and unicore/lib files.
+Provides:       perl(utf8_heavy.pl)
+# utf8 and utf8_heavy.pl require Carp, re, strict, warnings, XSLoader
+Requires:       perl(Carp)
+Requires:       perl(Exporter)
+# Term::Cap is optional
+Requires:       perl(XSLoader)
+%if %{defined perl_bootstrap}
+%gendep_perl_libs
+%endif
+
+# Remove private redefinitions
+# XSLoader redefines DynaLoader name space for compatibility, but does not
+# load the DynaLoader.pm (though the DynaLoader.xs is compiled into libperl).
+%global __provides_exclude %{?__provides_exclude:%__provides_exclude|}^perl\\((charnames|DynaLoader)\\)$
+
+%description libs
+The is a perl run-time (interpreter as a shared library and include
+directories).
+
+
+%package devel
+Summary:        Header #files for use in perl development
+# l1_char_class_tab.h is generated from lib/unicore sources:    UCD
+License:        (GPL+ or Artistic) and UCD
+# Require $Config{libs} providers, bug #905482
+Requires:       libdb-devel
+%if %{with gdbm}
+Requires:       gdbm-devel
+%endif
+Requires:       glibc-devel
+%if %{with perl_enables_systemtap}
+Requires:       systemtap-sdt-devel
+%endif
+Requires:       perl(ExtUtils::ParseXS)
+Requires:       %perl_compat
+# Match library and header files when downgrading releases
+Requires:       perl-libs%{?_isa} = %{perl_epoch}:%{perl_version}-%{release}
+%if %{defined perl_bootstrap}
+%gendep_perl_devel
+%endif
+
+%description devel
+This package contains header files and development modules.
+Most perl packages will need to install perl-devel to build.
+
+
+%package macros
+Summary:        Macros for rpmbuild
+License:        GPL+ or Artistic
+Requires:       %perl_compat
+%if %{defined perl_bootstrap}
+%gendep_perl_macros
+%endif
+
+%description macros
+Macros for rpmbuild are needed during build of srpm in koji. This
+sub-package must be installed into buildroot, so it will be needed
+by perl. Perl is needed because of git.
+
+
+%package tests
+Summary:        The Perl test suite
+License:        GPL+ or Artistic
+# right?
+AutoReqProv:    0
+Requires:       %perl_compat
+# FIXME - note this will need to change when doing the core/minimal swizzle
+Requires:       perl-core
+%if %{defined perl_bootstrap}
+%gendep_perl_tests
+%endif
+
+%description tests
+This package contains the test suite included with Perl %{perl_version}.
+
+Install this if you want to test your Perl installation (binary and core
+modules).
+
+
+%package utils
+Summary:        Utilities packaged with the Perl distribution
+License:        GPL+ or Artistic
+Epoch:          0
+Version:        %{perl_version}
+BuildArch:      noarch
+# Match library exactly for splain messages
+Requires:       perl-libs = %{perl_epoch}:%{perl_version}-%{release}
+# Keep /usr/sbin/sendmail and Module::CoreList optional for the perlbug tool
+%if %{defined perl_bootstrap}
+%gendep_perl_utils
+%endif
+Conflicts:      perl < 4:5.22.0-351
+
+%description utils
+Several utilities which come with Perl distribution like c2ph, h2ph, perlbug,
+perlthanks, pl2pm, pstruct, and splain. Some utilities are provided by more
+specific packages like perldoc by perl-Pod-Perldoc.
+
+
+%package core
+Summary:        Base perl metapackage
+# This rpm doesn't contain any copyrightable material.
+# Nevertheless, it needs a License tag, so we'll use the generic
+# "perl" license.
+License:        GPL+ or Artistic
+Epoch:          0
+Version:        %{perl_version}
+Requires:       %perl_compat
+Requires:       perl-libs%{?_isa} = %{perl_epoch}:%{perl_version}-%{release}
+Requires:       perl-devel%{?_isa} = %{perl_epoch}:%{perl_version}-%{release}
+Requires:       perl-macros
+Requires:       perl-utils
+%if %{defined perl_bootstrap}
+%gendep_perl_core
+%endif
+
+Requires:       perl-Archive-Tar, perl-Attribute-Handlers, perl-autodie,
+Requires:       perl-B-Debug, perl-bignum
+Requires:       perl-Compress-Raw-Bzip2,
+Requires:       perl-Carp, perl-Compress-Raw-Zlib, perl-Config-Perl-V,
+Requires:       perl-constant,
+Requires:       perl-CPAN, perl-CPAN-Meta, perl-CPAN-Meta-Requirements,
+Requires:       perl-CPAN-Meta-YAML
+Requires:       perl-Data-Dumper, perl-DB_File,
+Requires:       perl-Devel-Peek, perl-Devel-PPPort, perl-Devel-SelfStubber,
+Requires:       perl-Digest, perl-Digest-MD5,
+Requires:       perl-Digest-SHA,
+Requires:       perl-Encode, perl-Encode-devel, perl-encoding
+Requires:       perl-Env, perl-Errno, perl-Exporter, perl-experimental
+Requires:       perl-ExtUtils-CBuilder, perl-ExtUtils-Command,
+Requires:       perl-ExtUtils-Embed,
+Requires:       perl-ExtUtils-Install, perl-ExtUtils-MakeMaker
+Requires:       perl-ExtUtils-Manifest, perl-ExtUtils-Miniperl
+Requires:       perl-ExtUtils-ParseXS, perl-File-Fetch
+Requires:       perl-File-Path, perl-File-Temp, perl-Filter,
+Requires:       perl-Filter-Simple, perl-Getopt-Long
+Requires:       perl-HTTP-Tiny,
+Requires:       perl-IO, perl-IO-Compress, perl-IO-Socket-IP
+Requires:       perl-IO-Zlib, perl-IPC-Cmd, perl-IPC-SysV, perl-JSON-PP
+Requires:       perl-libnet, perl-libnetcfg,
+Requires:       perl-Locale-Codes, perl-Locale-Maketext,
+Requires:       perl-Locale-Maketext-Simple
+Requires:       perl-Math-BigInt, perl-Math-BigInt-FastCalc, perl-Math-BigRat,
+Requires:       perl-Math-Complex, perl-Memoize,
+Requires:       perl-MIME-Base64,
+Requires:       perl-Module-CoreList,
+Requires:       perl-Module-CoreList-tools, perl-Module-Load
+Requires:       perl-Module-Load-Conditional, perl-Module-Loaded,
+Requires:       perl-Module-Metadata, perl-Net-Ping,
+Requires:       perl-open, perl-PathTools
+Requires:       perl-Params-Check
+# TODO: Merge perl-Parse-CPAN-Meta sub-package into perl-CPAN-Meta after
+# upgrading standalone perl-CPAN-Meta to 2.150010, bug #1370681
+Requires:       perl(Parse::CPAN::Meta)
+Requires:       perl-perlfaq,
+Requires:       perl-PerlIO-via-QuotedPrint, perl-Perl-OSType
+Requires:       perl-Pod-Checker, perl-Pod-Escapes, perl-Pod-Html,
+Requires:       perl-Pod-Parser, perl-Pod-Perldoc, perl-Pod-Usage
+Requires:       perl-podlators, perl-Pod-Simple, perl-Scalar-List-Utils
+Requires:       perl-SelfLoader, perl-Socket, perl-Storable, perl-Sys-Syslog,
+Requires:       perl-Term-ANSIColor, perl-Term-Cap,
+Requires:       perl-Test, perl-Test-Harness, perl-Test-Simple
+Requires:       perl-Text-Balanced, perl-Text-ParseWords, perl-Text-Tabs+Wrap,
+Requires:       perl-Thread-Queue
+Requires:       perl-Time-HiRes
+Requires:       perl-Time-Local, perl-Time-Piece
+Requires:       perl-Unicode-Collate, perl-Unicode-Normalize,
+Requires:       perl-version, perl-threads, perl-threads-shared, perl-parent
+
+%description core
+A metapackage which requires all of the perl bits and modules in the upstream
+tarball from perl.org.
+
+%package interpreter
+Summary:        Standalone executable Perl interpreter
+# This package doesn't contain any copyrightable material.
+# Nevertheless, it needs a License tag, so we'll use the generic
+# "perl" license.
+License:        GPL+ or Artistic
+# perl-interpreter denotes a package with the perl executable.
+# Full EVR is for compatibility with systems that swapped perl and perl-core
+# <https://fedoraproject.org/wiki/Changes/perl_Package_to_Install_Core_Modules>,
+# bug #1464903.
+# This dummy package exists to mask same-named non-modular package. Otherwise
+# package manager can see non-modular package that coincidently obsoletes
+# perl package and that confuses the manager, bug #1670435.
+Version:        %{perl_version}
+Epoch:          %{perl_epoch}
+Requires:       perl%{?_isa} = %{perl_epoch}:%{perl_version}-%{release}
+
+%description interpreter
+This is a dummy package to improve a compatibility with future Perls that will use
+this package to deliver %{_bindir}/perl Perl interpreter.
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%package Archive-Tar
+Summary:        A module for Perl manipulation of .tar files
+License:        GPL+ or Artistic
+Epoch:          0
+Version:        2.04
+BuildArch:      noarch
+Requires:       %perl_compat
+Requires:       perl(IO::Zlib) >= 1.01
+# Optional run-time:
+Requires:       perl(IO::Compress::Bzip2) >= 2.015
+# IO::String not used if perl supports useperlio which is true
+# Use Compress::Zlib's version for IO::Uncompress::Bunzip2
+Requires:       perl(IO::Uncompress::Bunzip2) >= 2.015
+%if !%{defined perl_bootstrap}
+Requires:       perl(Text::Diff)
+%endif
+%if %{defined perl_bootstrap}
+%gendep_perl_Archive_Tar
+%endif
+
+%description Archive-Tar
+Archive::Tar provides an object oriented mechanism for handling tar files.  It
+provides class methods for quick and easy files handling while also allowing
+for the creation of tar file objects for custom manipulation.  If you have the
+IO::Zlib module installed, Archive::Tar will also support compressed or
+gzipped tar files.
+%endif
+
+%package Attribute-Handlers
+Summary:        Simpler definition of attribute handlers
+License:        GPL+ or Artistic
+Epoch:          0
+Version:        0.99
+BuildArch:      noarch
+Requires:       %perl_compat
+%if %{defined perl_bootstrap}
+%gendep_perl_Attribute_Handlers
+%endif
+Conflicts:      perl < 4:5.22.0-351
+
+%description Attribute-Handlers
+This Perl module, when inherited by a package, allows that package's class to
+define attribute handler subroutines for specific attributes. Variables and
+subroutines subsequently defined in that package, or in packages derived from
+that package may be given attributes with the same names as the attribute
+handler subroutines, which will then be called in one of the compilation
+phases (i.e. in a "BEGIN", "CHECK", "INIT", or "END" block).
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%package autodie
+Summary:        Replace functions with ones that succeed or die
+License:        GPL+ or Artistic
+Epoch:          0
+Version:        2.29
+Requires:       %perl_compat
+BuildArch:      noarch
+Requires:       perl(B)
+Requires:       perl(Fcntl)
+Requires:       perl(overload)
+Requires:       perl(POSIX)
+%if %{defined perl_bootstrap}
+%gendep_perl_autodie
+%endif
+Conflicts:      perl < 4:5.16.2-259
+
+%description autodie
+The "autodie" and "Fatal" pragma provides a convenient way to replace
+functions that normally return false on failure with equivalents that throw an
+exception on failure.
+
+However "Fatal" has been obsoleted by the new autodie pragma. Please use
+autodie in preference to "Fatal".
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%package B-Debug
+Summary:        Walk Perl syntax tree, print debug information about op-codes
+License:        GPL+ or Artistic
+Epoch:          0
+Version:        1.23
+Requires:       %perl_compat
+BuildArch:      noarch
+%if %{defined perl_bootstrap}
+%gendep_perl_B_Debug
+%endif
+Conflicts:      perl < 4:5.20.1-310
+
+%description B-Debug
+Walk Perl syntax tree and print debug information about op-codes. See
+B::Concise and B::Terse for other details.
+
+%package bignum
+Summary:        Transparent big number support for Perl
+License:        GPL+ or Artistic
+Epoch:          0
+Version:        0.42
+Requires:       %perl_compat
+Requires:       perl(Carp)
+# Math::BigInt::Lite is optional
+Requires:       perl(Math::BigRat)
+Requires:       perl(warnings)
+BuildArch:      noarch
+%if %{defined perl_bootstrap}
+%gendep_perl_bignum
+%endif
+Conflicts:      perl < 4:5.22.0-348
+
+%description bignum
+This package attempts to make it easier to write scripts that use BigInts and
+BigFloats in a transparent way.
+
+%package Carp
+Summary:        Alternative warn and die for modules
+Epoch:          0
+# Real version 1.40
+Version:        1.40
+License:        GPL+ or Artistic
+Requires:       %perl_compat
+Provides:       perl(Carp::Heavy) = %{version}
+%if %{defined perl_bootstrap}
+%gendep_perl_Carp
+%endif
+BuildArch:      noarch
+
+# Do not export unversioned module
+%global __provides_exclude %{?__provides_exclude:%__provides_exclude|}^perl\\(Carp\\)\\s*$
+
+%description Carp
+The Carp routines are useful in your own modules because they act like
+die() or warn(), but with a message which is more likely to be useful to a
+user of your module. In the case of cluck, confess, and longmess that
+context is a summary of every call in the call-stack. For a shorter message
+you can use carp or croak which report the error as being from where your
+module was called. There is no guarantee that that is where the error was,
+but it is a good educated guess.
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%package Compress-Raw-Bzip2
+Summary:        Low-Level Interface to bzip2 compression library
+License:        GPL+ or Artistic
+Epoch:          0
+Version:        2.069
+Requires:       perl(Exporter), perl(File::Temp)
+%if %{defined perl_bootstrap}
+%gendep_perl_Compress_Raw_Bzip2
+%endif
+
+%description Compress-Raw-Bzip2
+This module provides a Perl interface to the bzip2 compression library.
+It is used by IO::Compress::Bzip2.
+
+%package Compress-Raw-Zlib
+Summary:        Low-Level Interface to the zlib compression library
+License:        (GPL+ or Artistic) and zlib
+Epoch:          0
+Version:        2.069
+Requires:       %perl_compat
+%if %{defined perl_bootstrap}
+%gendep_perl_Compress_Raw_Zlib
+%endif
+
+%description Compress-Raw-Zlib
+This module provides a Perl interface to the zlib compression library.
+It is used by IO::Compress::Zlib.
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%package Config-Perl-V
+Summary:        Structured data retrieval of perl -V output
+License:        GPL+ or Artistic
+Epoch:          0
+Version:        0.25
+Requires:       %perl_compat
+%if %{defined perl_bootstrap}
+%gendep_perl_Config_Perl_V
+%endif
+BuildArch:      noarch
+Conflicts:      perl < 4:5.22.0-347
+
+%description Config-Perl-V
+The command "perl -V" will return you an excerpt from the %%Config::Config
+hash combined with the output of "perl -V" that is not stored inside the hash,
+but only available to the perl binary itself. This package provides Perl
+module that will return you the output of "perl -V" in a structure.
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%package constant
+Summary:        Perl pragma to declare constants
+License:        GPL+ or Artistic
+Epoch:          0
+Version:        1.33
+Requires:       %perl_compat
+Requires:       perl(Carp)
+%if %{defined perl_bootstrap}
+%gendep_perl_constant
+%endif
+BuildArch:      noarch
+Conflicts:      perl < 4:5.16.3-264
+
+%description constant
+This pragma allows you to declare constants at compile-time:
+
+use constant PI => 4 * atan2(1, 1);
+
+When you declare a constant such as "PI" using the method shown above,
+each machine your script runs upon can have as many digits of accuracy
+as it can use. Also, your program will be easier to read, more likely
+to be maintained (and maintained correctly), and far less likely to
+send a space probe to the wrong planet because nobody noticed the one
+equation in which you wrote 3.14195.
+
+When a constant is used in an expression, Perl replaces it with its
+value at compile time, and may then optimize the expression further.
+In particular, any code in an "if (CONSTANT)" block will be optimized
+away if the constant is false.
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%package CPAN
+Summary:        Query, download and build perl modules from CPAN sites
+License:        GPL+ or Artistic
+Epoch:          0
+Version:        2.11
+Requires:       make
+# Prefer Archive::Tar and Compress::Zlib over tar and gzip
+Requires:       perl(Archive::Tar) >= 1.50
+Requires:       perl(base)
+Requires:       perl(Data::Dumper)
+%if !%{defined perl_bootstrap}
+Requires:       perl(Devel::Size)
+%endif
+Requires:       perl(ExtUtils::Manifest)
+%if !%{defined perl_bootstrap}
+Requires:       perl(File::HomeDir) >= 0.65
+%endif
+Requires:       perl(File::Temp) >= 0.16
+Requires:       perl(lib)
+Requires:       perl(Net::Config)
+Requires:       perl(Net::FTP)
+Requires:       perl(POSIX)
+Requires:       perl(Term::ReadLine)
+%if !%{defined perl_bootstrap}
+Requires:       perl(URI)
+Requires:       perl(URI::Escape)
+%endif
+Requires:       perl(User::pwent)
+# Optional but higly recommended:
+%if !%{defined perl_bootstrap}
+Requires:       perl(Archive::Zip)
+Requires:       perl(Compress::Bzip2)
+Requires:       perl(CPAN::Meta) >= 2.110350
+%endif
+Requires:       perl(Compress::Zlib)
+Requires:       perl(Digest::MD5)
+# CPAN encourages Digest::SHA strongly because of integrity checks
+Requires:       perl(Digest::SHA)
+Requires:       perl(Dumpvalue)
+Requires:       perl(ExtUtils::CBuilder)
+%if ! %{defined perl_bootstrap}
+# Avoid circular deps local::lib -> Module::Install -> CPAN when bootstraping
+# local::lib recommended by CPAN::FirstTime default choice, bug #1122498
+Requires:       perl(local::lib)
+%endif
+Requires:       perl(Module::Build)
+%if ! %{defined perl_bootstrap}
+Requires:       perl(Text::Glob)
+%endif
+Requires:       %perl_compat
+Provides:       cpan = %{version}
+%if %{defined perl_bootstrap}
+%gendep_perl_CPAN
+%endif
+BuildArch:      noarch
+
+%description CPAN
+The CPAN module automates or at least simplifies the make and install of
+perl modules and extensions. It includes some primitive searching
+capabilities and knows how to use LWP, HTTP::Tiny, Net::FTP and certain
+external download clients to fetch distributions from the net.
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%package CPAN-Meta
+Summary:        Distribution metadata for a CPAN dist
+Epoch:          0
+Version:        2.150005
+License:        GPL+ or Artistic
+Requires:       %perl_compat
+%if %{defined perl_bootstrap}
+%gendep_perl_CPAN_Meta
+%endif
+BuildArch:      noarch
+
+%description CPAN-Meta
+Software distributions released to the CPAN include a META.json or, for
+older distributions, META.yml, which describes the distribution, its
+contents, and the requirements for building and installing the
+distribution. The data structure stored in the META.json file is described
+in CPAN::Meta::Spec.
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%package CPAN-Meta-Requirements
+Summary:        Set of version requirements for a CPAN dist
+Epoch:          0
+# Real version 2.132000
+Version:        2.132
+License:        GPL+ or Artistic
+Requires:       %perl_compat
+BuildArch:      noarch
+# CPAN-Meta-Requirements used to have six decimal places
+%global __provides_exclude %{?__provides_exclude:%__provides_exclude|}^perl\\(CPAN::Meta::Requirements\\)
+Provides:       perl(CPAN::Meta::Requirements) = %{version}000
+%if %{defined perl_bootstrap}
+%gendep_perl_CPAN_Meta_Requirements
+%endif
+
+%description CPAN-Meta-Requirements
+A CPAN::Meta::Requirements object models a set of version constraints like
+those specified in the META.yml or META.json files in CPAN distributions.
+It can be built up by adding more and more constraints, and it will reduce
+them to the simplest representation.
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%package CPAN-Meta-YAML
+Version:        0.018
+Epoch:          0
+Summary:        Read and write a subset of YAML for CPAN Meta files
+License:        GPL+ or Artistic
+BuildArch:      noarch
+Requires:       %perl_compat
+%if %{defined perl_bootstrap}
+%gendep_perl_CPAN_Meta_YAML
+%endif
+
+%description CPAN-Meta-YAML
+This module implements a subset of the YAML specification for use in reading
+and writing CPAN metadata files like META.yml and MYMETA.yml. It should not be
+used for any other general YAML parsing or generation task.
+%endif
+
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%package Data-Dumper
+Summary:        Stringify perl data structures, suitable for printing and eval
+License:        GPL+ or Artistic
+Epoch:          0
+Version:        2.160
+Requires:       %perl_compat
+Requires:       perl(Scalar::Util)
+Requires:       perl(XSLoader)
+%if %{defined perl_bootstrap}
+%gendep_perl_Data_Dumper
+%endif
+
+%description Data-Dumper
+Given a list of scalars or reference variables, writes out their contents
+in perl syntax. The references can also be objects. The content of each
+variable is output in a single Perl statement. Handles self-referential
+structures correctly.
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%package DB_File
+Summary:        Perl5 access to Berkeley DB version 1.x
+License:        GPL+ or Artistic
+Epoch:          0
+Version:        1.835
+Requires:       %perl_compat
+Requires:       perl(Fcntl)
+Requires:       perl(XSLoader)
+%if %{defined perl_bootstrap}
+%gendep_perl_DB_File
+%endif
+Conflicts:      perl < 4:5.16.3-264
+
+%description DB_File
+DB_File is a module which allows Perl programs to make use of the facilities
+provided by Berkeley DB version 1.x (if you have a newer version of DB, you
+will be limited to functionality provided by interface of version 1.x). The
+interface defined here mirrors the Berkeley DB interface closely.
+%endif
+
+%package Devel-Peek
+Summary:        A data debugging tool for the XS programmer
+License:        GPL+ or Artistic
+Epoch:          0
+Version:        1.23
+Requires:       %perl_compat
+%if %{defined perl_bootstrap}
+%gendep_perl_Devel_Peek
+%endif
+Conflicts:      perl < 4:5.22.0-351
+
+%description Devel-Peek
+Devel::Peek contains functions which allows raw Perl datatypes to be
+manipulated from a Perl script. This is used by those who do XS programming to
+check that the data they are sending from C to Perl looks as they think it
+should look.
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%package Devel-PPPort
+Summary:        Perl Pollution Portability header generator
+License:        GPL+ or Artistic
+Epoch:          0
+Version:        3.32
+Requires:       %perl_compat
+%if %{defined perl_bootstrap}
+%gendep_perl_Devel_PPPort
+%endif
+Conflicts:      perl < 4:5.20.1-310
+
+%description Devel-PPPort
+Perl's API has changed over time, gaining new features, new functions,
+increasing its flexibility, and reducing the impact on the C name space
+environment (reduced pollution). The header file written by this module,
+typically ppport.h, attempts to bring some of the newer Perl API features
+to older versions of Perl, so that you can worry less about keeping track
+of old releases, but users can still reap the benefit.
+%endif
+
+%package Devel-SelfStubber
+Summary:        Generate stubs for a SelfLoading module
+License:        GPL+ or Artistic
+Epoch:          0
+Version:        1.05
+BuildArch:      noarch
+Requires:       %perl_compat
+%if %{defined perl_bootstrap}
+%gendep_perl_Devel_SelfStubber
+%endif
+Conflicts:      perl < 4:5.22.0-351
+
+%description Devel-SelfStubber
+Devel::SelfStubber prints the stubs you need to put in the module before the
+__DATA__ token (or you can get it to print the entire module with stubs
+correctly placed). The stubs ensure that if a method is called, it will get
+loaded. They are needed specifically for inherited autoloaded methods.
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%package Digest
+Summary:        Modules that calculate message digests
+License:        GPL+ or Artistic
+# Epoch bump for clean upgrade over old standalone package
+Epoch:          0
+Version:        1.17
+BuildArch:      noarch
+Requires:       %perl_compat
+Requires:       perl(MIME::Base64)
+%if %{defined perl_bootstrap}
+%gendep_perl_Digest
+%endif
+
+%description Digest
+The Digest:: modules calculate digests, also called "fingerprints" or
+"hashes", of some data, called a message. The digest is (usually)
+some small/fixed size string. The actual size of the digest depend of
+the algorithm used. The message is simply a sequence of arbitrary
+bytes or bits.
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%package Digest-MD5
+Summary:        Perl interface to the MD5 Algorithm
+License:        (GPL+ or Artistic) and BSD
+# Epoch bump for clean upgrade over old standalone package
+Epoch:          0
+Version:        2.54
+Requires:       %perl_compat
+Requires:       perl(XSLoader)
+# Recommended
+Requires:       perl(Digest::base) >= 1.00
+%if %{defined perl_bootstrap}
+%gendep_perl_Digest_MD5
+%endif
+
+%description Digest-MD5
+The Digest::MD5 module allows you to use the RSA Data Security Inc. MD5
+Message Digest algorithm from within Perl programs. The algorithm takes as
+input a message of arbitrary length and produces as output a 128-bit
+"fingerprint" or "message digest" of the input.
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%package Digest-SHA
+Summary:        Perl extension for SHA-1/224/256/384/512
+License:        GPL+ or Artistic
+# Epoch bump for clean upgrade over old standalone package
+Epoch:          1
+Version:        5.95
+Requires:       %perl_compat
+Requires:       perl(Carp)
+# Recommended
+Requires:       perl(Digest::base)
+%if %{defined perl_bootstrap}
+%gendep_perl_Digest_SHA
+%endif
+
+%description Digest-SHA
+Digest::SHA is a complete implementation of the NIST Secure Hash
+Standard.  It gives Perl programmers a convenient way to calculate
+SHA-1, SHA-224, SHA-256, SHA-384, and SHA-512 message digests.  The
+module can handle all types of input, including partial-byte data.
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%package Encode
+Summary:        Character encodings in Perl
+License:        (GPL+ or Artistic) and Artistic 2.0 and UCD
+Epoch:          4
+Version:        2.80
+Requires:       %perl_compat
+%if %{defined perl_bootstrap}
+%gendep_perl_Encode
+%endif
+Conflicts:      perl < 4:5.16.2-256
+
+%description Encode
+The Encode module provides the interface between Perl strings and the rest
+of the system. Perl strings are sequences of characters.
+
+%package encoding
+Summary:        Write your Perl script in non-ASCII or non-UTF-8
+License:        GPL+ or Artistic
+Epoch:          4
+Version:        2.17
+# Keeping this sub-package arch-specific because it installs files into
+# arch-specific directories.
+Requires:       %perl_compat
+Requires:       perl(Carp)
+# Config not needed on perl ≥ 5.008
+# Consider Filter::Util::Call as mandatory, bug #1165183, CPAN RT#100427
+Requires:       perl(Filter::Util::Call)
+# I18N::Langinfo is optional
+# PerlIO::encoding is optional
+Requires:       perl(utf8)
+%if %{defined perl_bootstrap}
+%gendep_perl_encoding
+%endif
+Conflicts:      perl-Encode < 2:2.60-314
+
+%description encoding
+With the encoding pragma, you can write your Perl script in any encoding you
+like (so long as the Encode module supports it) and still enjoy Unicode
+support.
+
+However, this encoding module is deprecated under perl 5.18. It uses
+a mechanism provided by perl that is deprecated under 5.18 and higher, and may
+be removed in a future version.
+
+The easiest and the best alternative is to write your script in UTF-8.
+
+%package Encode-devel
+Summary:        Character encodings in Perl
+License:        (GPL+ or Artistic) and UCD
+Epoch:          4
+Version:        2.80
+Requires:       %perl_compat
+Requires:       %{name}-Encode = %{epoch}:%{version}-%{release}
+Recommends:     perl-devel
+%if %{defined perl_bootstrap}
+%gendep_perl_Encode_devel
+%endif
+BuildArch:      noarch
+
+%description Encode-devel
+enc2xs builds a Perl extension for use by Encode from either Unicode Character
+Mapping files (.ucm) or Tcl Encoding Files (.enc). You can use enc2xs to add
+your own encoding to perl. No knowledge of XS is necessary.
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%package Env
+Summary:        Perl module that imports environment variables as scalars or arrays
+License:        GPL+ or Artistic
+Epoch:          0
+Version:        1.04
+Requires:       %perl_compat
+%if %{defined perl_bootstrap}
+%gendep_perl_Env
+%endif
+BuildArch:      noarch
+Conflicts:      perl < 4:5.16.2-265
+
+%description Env
+Perl maintains environment variables in a special hash named %%ENV. For when
+this access method is inconvenient, the Perl module Env allows environment
+variables to be treated as scalar or array variables.
+%endif
+
+%package Errno
+Summary:        System errno constants
+License:        GPL+ or Artistic
+Epoch:          0
+Version:        1.25
+Requires:       %perl_compat
+# Errno.pm bakes in kernel version at build time and compares it against
+# $Config{osvers} at run time. Match exact interpreter build. Bug #1393421.
+Requires:       perl-libs%{?_isa} = %{perl_epoch}:%{perl_version}-%{release}
+Requires:       perl(Carp)
+%if %{defined perl_bootstrap}
+%gendep_perl_Errno
+%endif
+Conflicts:      perl < 4:5.22.0-351
+
+%description Errno
+"Errno" defines and conditionally exports all the error constants defined in
+your system "errno.h" include file. It has a single export tag, ":POSIX",
+which will export all POSIX defined error numbers.
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%package experimental
+Summary:        Experimental features made easy
+License:        GPL+ or Artistic
+Epoch:          0
+Version:        0.016
+Requires:       %perl_compat
+%if %{defined perl_bootstrap}
+%gendep_perl_experimental
+%endif
+BuildArch:      noarch
+Conflicts:      perl < 4:5.20.0-303
+
+%description experimental
+This pragma provides an easy and convenient way to enable or disable
+experimental features.
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%package Exporter
+Summary:        Implements default import method for modules
+License:        GPL+ or Artistic
+Epoch:          0
+Version:        5.72
+Requires:       %perl_compat
+Requires:       perl(Carp) >= 1.05
+%if %{defined perl_bootstrap}
+%gendep_perl_Exporter
+%endif
+BuildArch:      noarch
+Conflicts:      perl < 4:5.16.2-265
+
+%description Exporter
+The Exporter module implements an import method which allows a module to
+export functions and variables to its users' name spaces. Many modules use
+Exporter rather than implementing their own import method because Exporter
+provides a highly flexible interface, with an implementation optimized for
+the common case.
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%package ExtUtils-CBuilder
+Summary:        Compile and link C code for Perl modules
+License:        GPL+ or Artistic
+# Epoch bump for clean upgrade over old standalone package
+Epoch:          1
+Version:        0.280225
+BuildArch:      noarch
+Requires:       perl-devel
+Requires:       %perl_compat
+Requires:       perl(DynaLoader)
+Requires:       perl(ExtUtils::Mksymlists)
+Requires:       perl(File::Spec) >= 3.13
+Requires:       perl(Perl::OSType) >= 1
+%if %{defined perl_bootstrap}
+%gendep_perl_ExtUtils_CBuilder
+%endif
+
+%description ExtUtils-CBuilder
+This module can build the C portions of Perl modules by invoking the
+appropriate compilers and linkers in a cross-platform manner. It was motivated
+by the Module::Build project, but may be useful for other purposes as well.
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%package ExtUtils-Command
+Summary:        Perl routines to replace common UNIX commands in Makefiles
+License:        GPL+ or Artistic
+Epoch:          0
+Version:        7.10
+BuildArch:      noarch
+Requires:       %perl_compat
+Conflicts:      perl < 4:5.20.1-312
+Requires:       perl(File::Find)
+%if %{defined perl_bootstrap}
+%gendep_perl_ExtUtils_Command
+%endif
+
+%description ExtUtils-Command
+This Perl module is used to replace common UNIX commands. In all cases the
+functions work with @ARGV rather than taking arguments. This makes them
+easier to deal with in Makefiles.
+%endif
+
+%package ExtUtils-Embed
+Summary:        Utilities for embedding Perl in C/C++ applications
+License:        GPL+ or Artistic
+Epoch:          0
+Version:        1.33
+Requires:       perl-devel
+Requires:       %perl_compat
+%if %{defined perl_bootstrap}
+%gendep_perl_ExtUtils_Embed
+%endif
+BuildArch:      noarch
+
+%description ExtUtils-Embed
+Utilities for embedding Perl in C/C++ applications.
+
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%package ExtUtils-Install
+Summary:        Install files from here to there
+License:        GPL+ or Artistic
+Epoch:          0
+Version:        2.04
+BuildArch:      noarch
+Requires:       %perl_compat
+Requires:       perl(Data::Dumper)
+%if %{defined perl_bootstrap}
+%gendep_perl_ExtUtils_Install
+%endif
+
+%description ExtUtils-Install
+Handles the installing and uninstalling of perl modules, scripts, man
+pages, etc.
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%package ExtUtils-MakeMaker
+Summary:        Create a module Makefile
+License:        GPL+ or Artistic
+Epoch:          0
+Version:        7.10
+# If an XS module is built, code generated from XS will be compiled and it
+# includes Perl header files.
+# TODO: This dependency will be weaken in order to relieve building noarch
+# packages from perl-devel and gcc.
+Requires:       perl-devel
+Requires:       %perl_compat
+Requires:       perl(Data::Dumper)
+Requires:       perl(DynaLoader)
+Requires:       perl(ExtUtils::Command)
+Requires:       perl(ExtUtils::Install)
+Requires:       perl(ExtUtils::Manifest)
+Requires:       perl(File::Find)
+Requires:       perl(Getopt::Long)
+# Optional Pod::Man is needed for generating manual pages from POD
+Requires:       perl(Pod::Man)
+Requires:       perl(POSIX)
+Requires:       perl(Test::Harness)
+Requires:       perl(version)
+# If an XS module is compiled, xsubpp(1) is needed
+Requires:       perl-ExtUtils-ParseXS
+%if %{defined perl_bootstrap}
+%gendep_perl_ExtUtils_MakeMaker
+%endif
+BuildArch:      noarch
+
+# Filter false DynaLoader provides. Versioned perl(DynaLoader) keeps
+# unfiltered on perl package, no need to reinject it.
+%global __provides_exclude %{?__provides_exclude:%__provides_exclude|}^perl\\(DynaLoader\\)\\s*$
+%global __provides_exclude %__provides_exclude|^perl\\(ExtUtils::MakeMaker::_version\\)
+
+%description ExtUtils-MakeMaker
+Create a module Makefile.
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%package ExtUtils-Manifest
+Summary:        Utilities to write and check a MANIFEST file
+License:        GPL+ or Artistic
+Epoch:          0
+Version:        1.70
+Requires:       %perl_compat
+Requires:       perl(File::Path)
+%if %{defined perl_bootstrap}
+%gendep_perl_ExtUtils_Manifest
+%endif
+BuildArch:      noarch
+
+%description ExtUtils-Manifest
+%{summary}.
+%endif
+
+%package ExtUtils-Miniperl
+Summary:        Write the C code for perlmain.c
+License:        GPL+ or Artistic
+Epoch:          0
+Version:        1.05
+Requires:       perl-devel
+Requires:       %perl_compat
+%if %{defined perl_bootstrap}
+%gendep_perl_ExtUtils_Miniperl
+%endif
+BuildArch:      noarch
+
+%description ExtUtils-Miniperl
+writemain() takes an argument list of directories containing archive libraries
+that relate to perl modules and should be linked into a new perl binary. It
+writes a corresponding perlmain.c file that is a plain C file containing all
+the bootstrap code to make the If the first argument to writemain() is a
+reference to a scalar it is used as the filename to open for ouput. Any other
+reference is used as the filehandle to write to. Otherwise output defaults to
+STDOUT.
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%package -n perl-ExtUtils-MM-Utils
+Summary:        ExtUtils::MM methods without dependency on ExtUtils::MakeMaker
+License:        GPL+ or Artistic
+Epoch:          0
+Version:        7.11
+BuildArch:      noarch
+Requires:       %perl_compat
+%if %{defined perl_bootstrap}
+%gendep_perl_ExtUtils_MM_Utils
+%endif
+
+%description -n perl-ExtUtils-MM-Utils
+This is a collection of ExtUtils::MM subroutines that are used by many
+other modules but that do not need full-featured ExtUtils::MakeMaker. The
+issue with ExtUtils::MakeMaker is it pulls in Perl header files and that
+is an overkill for small subroutines.
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%package ExtUtils-ParseXS
+Summary:        Module and a script for converting Perl XS code into C code
+License:        GPL+ or Artistic
+# Epoch bump for clean upgrade over old standalone package
+Epoch:          1
+Version:        3.31
+Requires:       %perl_compat
+%if %{defined perl_bootstrap}
+%gendep_perl_ExtUtils_ParseXS
+%endif
+BuildArch:      noarch
+
+%description ExtUtils-ParseXS
+ExtUtils::ParseXS will compile XS code into C code by embedding the constructs
+necessary to let C functions manipulate Perl values and creates the glue
+necessary to let Perl access those functions.
+%endif
+
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%package File-Fetch
+Summary:        Generic file fetching mechanism
+License:        GPL+ or Artistic
+Epoch:          0
+Version:        0.48
+Requires:       perl(IPC::Cmd) >= 0.36
+Requires:       perl(Module::Load::Conditional) >= 0.04
+Requires:       perl(Params::Check) >= 0.07
+Requires:       %perl_compat
+%if %{defined perl_bootstrap}
+%gendep_perl_File_Fetch
+%endif
+BuildArch:      noarch
+
+%description File-Fetch
+File::Fetch is a generic file fetching mechanism.
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%package File-Path
+Summary:        Create or remove directory trees
+License:        GPL+ or Artistic
+Epoch:          0
+Version:        2.12
+Requires:       %perl_compat
+Requires:       perl(Carp)
+%if %{defined perl_bootstrap}
+%gendep_perl_File_Path
+%endif
+BuildArch:      noarch
+Conflicts:      perl < 4:5.16.2-265
+
+%description File-Path
+This module provides a convenient way to create directories of arbitrary
+depth and to delete an entire directory subtree from the file system.
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%package File-Temp
+Summary:        Return name and handle of a temporary file safely
+License:        GPL+ or Artistic
+Epoch:          0
+# Normalized version
+Version:        0.230.400
+Requires:       %perl_compat
+BuildArch:      noarch
+Requires:       perl(File::Path) >= 2.06
+Requires:       perl(POSIX)
+%if %{defined perl_bootstrap}
+%gendep_perl_File_Temp
+%endif
+Conflicts:      perl < 4:5.16.2-265
+
+%description File-Temp
+File::Temp can be used to create and open temporary files in a safe way.
+There is both a function interface and an object-oriented interface. The
+File::Temp constructor or the tempfile() function can be used to return the
+name and the open file handle of a temporary file. The tempdir() function
+can be used to create a temporary directory.
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+# FIXME Filter-Simple? version?
+%package Filter
+Summary:        Perl source filters
+License:        GPL+ or Artistic
+Epoch:          2
+Version:        1.55
+Requires:       %perl_compat
+%if %{defined perl_bootstrap}
+%gendep_perl_Filter
+%endif
+
+%description Filter
+Source filters alter the program text of a module before Perl sees it, much as
+a C preprocessor alters the source text of a C program before the compiler
+sees it.
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%package Filter-Simple
+Summary:        Simplified Perl source filtering
+License:        GPL+ or Artistic
+Epoch:          0
+Version:        0.92
+BuildArch:      noarch
+Requires:       %perl_compat
+Conflicts:      perl < 4:5.20.1-312
+Requires:       perl(Text::Balanced) >= 1.97
+Requires:       perl(warnings)
+%if %{defined perl_bootstrap}
+%gendep_perl_Filter_Simple
+%endif
+
+%description Filter-Simple
+The Filter::Simple Perl module provides a simplified interface to
+Filter::Util::Call; one that is sufficient for most common cases.
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%package Getopt-Long
+Summary:        Extended processing of command line options
+License:        GPLv2+ or Artistic
+Epoch:          0
+Version:        2.48
+Requires:       %perl_compat
+Requires:       perl(overload)
+Requires:       perl(Text::ParseWords)
+# Recommended:
+Requires:       perl(Pod::Usage) >= 1.14
+%if %{defined perl_bootstrap}
+%gendep_perl_Getopt_Long
+%endif
+BuildArch:      noarch
+Conflicts:      perl < 4:5.16.3-268
+
+%description Getopt-Long
+The Getopt::Long module implements an extended getopt function called
+GetOptions(). It parses the command line from @ARGV, recognizing and removing
+specified options and their possible values.  It adheres to the POSIX syntax
+for command line options, with GNU extensions. In general, this means that
+options have long names instead of single letters, and are introduced with
+a double dash "--". Support for bundling of command line options, as was the
+case with the more traditional single-letter approach, is provided but not
+enabled by default.
+%endif
+
+%package IO
+Summary:        Perl input/output modules
+License:        GPL+ or Artistic
+Epoch:          0
+Version:        1.36
+Requires:       %perl_compat
+%if %{defined perl_bootstrap}
+%gendep_perl_IO
+%endif
+Conflicts:      perl < 4:5.22.0-351
+
+%description IO
+This is a collection of Perl input/output modules.
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%package IO-Compress
+Summary:        IO::Compress wrapper for modules
+License:        GPL+ or Artistic
+Epoch:          0
+Version:        2.069
+Requires:       %perl_compat
+Obsoletes:      perl-Compress-Zlib <= 2.020
+Provides:       perl(IO::Uncompress::Bunzip2)
+%if %{defined perl_bootstrap}
+%gendep_perl_IO_Compress
+%endif
+BuildArch:      noarch
+
+%description IO-Compress
+This module is the base class for all IO::Compress and IO::Uncompress modules.
+This module is not intended for direct use in application code. Its sole
+purpose is to to be sub-classed by IO::Compress modules.
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%package IO-Socket-IP
+Summary:        Drop-in replacement for IO::Socket::INET supporting both IPv4 and IPv6
+License:        GPL+ or Artistic
+Epoch:          0
+Version:        0.37
+Requires:       %perl_compat
+%if %{defined perl_bootstrap}
+%gendep_perl_IO_Socket_IP
+%endif
+BuildArch:      noarch
+Conflicts:      perl < 4:5.20.0-303
+
+%description IO-Socket-IP
+This module provides a protocol-independent way to use IPv4 and IPv6
+sockets, as a drop-in replacement for IO::Socket::INET. Most constructor
+arguments and methods are provided in a backward-compatible way.
+%endif
+
+%package IO-Zlib
+Summary:        Perl IO:: style interface to Compress::Zlib
+License:        GPL+ or Artistic
+# Epoch bump for clean upgrade over old standalone package
+Epoch:          1
+Version:        1.10
+Requires:       perl(Compress::Zlib)
+Requires:       %perl_compat
+%if %{defined perl_bootstrap}
+%gendep_perl_IO_Zlib
+%endif
+BuildArch:      noarch
+
+%description IO-Zlib
+This modules provides an IO:: style interface to the Compress::Zlib package.
+The main advantage is that you can use an IO::Zlib object in much the same way
+as an IO::File object so you can have common code that doesn't know which sort
+of file it is using.
+
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%package IPC-Cmd
+Summary:        Finding and running system commands made easy
+License:        GPL+ or Artistic
+# Epoch bump for clean upgrade over old standalone package
+Epoch:          1
+Version:        0.92
+Requires:       perl(ExtUtils::MM::Utils)
+Requires:       %perl_compat
+%if %{defined perl_bootstrap}
+%gendep_perl_IPC_Cmd
+%endif
+BuildArch:      noarch
+
+%description IPC-Cmd
+IPC::Cmd allows you to run commands, interactively if desired, in a platform
+independent way, but have them still work.
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%package IPC-SysV
+Summary:        Object interface to System V IPC
+License:        GPL+ or Artistic
+Epoch:          0
+Version:        2.06
+Requires:       %perl_compat
+Requires:       perl(DynaLoader)
+%if %{defined perl_bootstrap}
+%gendep_perl_IPC_SysV
+%endif
+Conflicts:      perl < 4:5.22.0-351
+
+%description IPC-SysV
+This is an object interface for System V messages, semaphores, and
+inter-process calls.
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%package HTTP-Tiny
+Summary:        A small, simple, correct HTTP/1.1 client
+License:        GPL+ or Artistic
+Epoch:          0
+Version:        0.056
+Requires:       perl(bytes)
+Requires:       perl(Carp)
+Requires:       perl(IO::Socket)
+Requires:       perl(Time::Local)
+%if %{defined perl_bootstrap}
+%gendep_perl_HTTP_Tiny
+%endif
+BuildArch:      noarch
+
+%description HTTP-Tiny
+This is a very simple HTTP/1.1 client, designed primarily for doing simple GET 
+requests without the overhead of a large framework like LWP::UserAgent.
+It is more correct and more complete than HTTP::Lite. It supports proxies 
+(currently only non-authenticating ones) and redirection. It also correctly 
+resumes after EINTR.
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%package JSON-PP
+Summary:        JSON::XS compatible pure-Perl module
+Epoch:          0
+Version:        2.27300
+License:        GPL+ or Artistic
+BuildArch:      noarch
+Requires:       %perl_compat 
+Requires:       perl(Data::Dumper)
+Requires:       perl(Encode)
+Requires:       perl(Math::BigFloat)
+Requires:       perl(Math::BigInt)
+Requires:       perl(Scalar::Util)
+Requires:       perl(subs)
+%if %{defined perl_bootstrap}
+%gendep_perl_JSON_PP
+%endif
+Conflicts:      perl-JSON < 2.50
+
+%description JSON-PP
+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 is compatible with JSON::XS.
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%package libnet
+Summary:        Perl clients for various network protocols
+License:        GPL+ or Artistic
+Epoch:          0
+Version:        3.08
+Requires:       %perl_compat
+Requires:       perl(File::Basename)
+Requires:       perl(IO::Socket) >= 1.05
+# Prefer IO::Socket::IP over IO::Socket::INET6 and IO::Socket::INET
+Requires:       perl(IO::Socket::IP) >= 0.20
+Requires:       perl(POSIX)
+Requires:       perl(Socket) >= 2.016
+Requires:       perl(utf8)
+%if %{defined perl_bootstrap}
+%gendep_perl_libnet
+%endif
+BuildArch:      noarch
+Conflicts:      perl < 4:5.22.0-347
+
+%description libnet
+This is a collection of Perl modules which provides a simple and
+consistent programming interface (API) to the client side of various
+protocols used in the internet community.
+%endif
+
+%package libnetcfg
+Summary:        Configure libnet
+License:        GPL+ or Artistic
+Epoch:          %perl_epoch
+Version:        %perl_version
+# Net::Config is optional
+BuildArch:      noarch
+%if %{defined perl_bootstrap}
+%gendep_perl_libnetcfg
+%endif
+Conflicts:      perl-devel < 4:5.22.0-347
+
+%description libnetcfg
+The libnetcfg utility can be used to configure the libnet.
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%package Locale-Codes
+Summary:        Distribution of modules to handle locale codes
+Epoch:          0
+Version:        3.25
+License:        GPL+ or Artistic
+Requires:       %perl_compat
+Requires:       perl(constant)
+Provides:       perl(Locale::Codes) = %{version}
+%if %{defined perl_bootstrap}
+%gendep_perl_Locale_Codes
+%endif
+BuildArch:      noarch
+
+# Do not export unversioned module
+%global __provides_exclude %{?__provides_exclude:%__provides_exclude|}^perl\\(Locale::Codes\\)\\s*$
+
+# Filter dependencies on private modules. Generator:
+# for F in $(find lib -type f); do perl -e '$/ = undef; $_ = <>; if (/^package #\R([\w:]*);/m) { print qq{|^perl\\\\($1\\\\)} }' "$F"; done
+%global __requires_exclude %{?__requires_exclude:%__requires_exclude|}^perl\\(Locale::Codes::Country_Retired\\)|^perl\\(Locale::Codes::LangFam_Retired\\)|^perl\\(Locale::Codes::Script_Retired\\)|^perl\\(Locale::Codes::LangExt_Codes\\)|^perl\\(Locale::Codes::LangFam_Codes\\)|^perl\\(Locale::Codes::Script_Codes\\)|^perl\\(Locale::Codes::Language_Codes\\)|^perl\\(Locale::Codes::LangExt_Retired\\)|^perl\\(Locale::Codes::Currency_Codes\\)|^perl\\(Locale::Codes::LangVar_Retired\\)|^perl\\(Locale::Codes::Language_Retired\\)|^perl\\(Locale::Codes::Country_Codes\\)|^perl\\(Locale::Codes::LangVar_Codes\\)|^perl\\(Locale::Codes::Currency_Retired\\)
+
+%description Locale-Codes
+Locale-Codes is a distribution containing a set of modules. The modules
+each deal with different types of codes which identify parts of the locale
+including languages, countries, currency, etc.
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%package Locale-Maketext
+Summary:        Framework for localization
+License:        GPL+ or Artistic
+Epoch:          0
+Version:        1.26
+Requires:       %perl_compat
+%if %{defined perl_bootstrap}
+%gendep_perl_Locale_Maketext
+%endif
+BuildArch:      noarch
+Conflicts:      perl < 4:5.16.3-268
+
+%description Locale-Maketext
+It is a common feature of applications (whether run directly, or via the Web)
+for them to be "localized" -- i.e., for them to present an English interface
+to an English-speaker, a German interface to a German-speaker, and so on for
+all languages it's programmed with. Locale::Maketext is a framework for
+software localization; it provides you with the tools for organizing and
+accessing the bits of text and text-processing code that you need for
+producing localized applications.
+%endif
+
+%package Locale-Maketext-Simple
+Summary:        Simple interface to Locale::Maketext::Lexicon
+License:        MIT
+# Epoch bump for clean upgrade over old standalone package
+Epoch:          1
+Version:        0.21
+Requires:       %perl_compat
+%if %{defined perl_bootstrap}
+%gendep_perl_Locale_Maketext_Simple
+%endif
+BuildArch:      noarch
+
+%description Locale-Maketext-Simple
+This module is a simple wrapper around Locale::Maketext::Lexicon, designed
+to alleviate the need of creating Language Classes for module authors.
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%package Math-BigInt
+Summary:        Arbitrary-size integer and float mathematics
+License:        GPL+ or Artistic
+Epoch:          0
+# Real version 1.999715
+Version:        1.9997.15
+Requires:       %perl_compat
+Requires:       perl(Carp)
+# File::Spec not used on recent perl
+%if %{defined perl_bootstrap}
+%gendep_perl_Math_BigInt
+%endif
+BuildArch:      noarch
+Conflicts:      perl < 4:5.22.0-347
+
+# Do not export unversioned module
+%global __provides_exclude %{?__provides_exclude:%__provides_exclude|}^perl\\(Math::BigInt\\)\\s*$
+
+%description Math-BigInt
+This provides Perl modules for arbitrary-size integer and float mathematics.
+
+%package Math-BigInt-FastCalc
+Summary:        Math::BigInt::Calc XS implementation
+License:        GPL+ or Artistic
+Epoch:          0
+# Version normalized to dot format
+Version:        0.400
+Requires:       %perl_compat
+%if %{defined perl_bootstrap}
+%gendep_perl_Math_BigInt_FastCalc
+%endif
+Conflicts:      perl < 4:5.22.0-348
+
+%description Math-BigInt-FastCalc
+This package provides support for faster big integer calculations.
+
+%package Math-BigRat
+Summary:        Arbitrary big rational numbers
+License:        GPL+ or Artistic
+Epoch:          0
+# Real version 0.2608.02
+Version:        0.2608.02
+Requires:       %perl_compat
+Requires:       perl(Math::BigInt)
+%if %{defined perl_bootstrap}
+%gendep_perl_Math_BigRat
+%endif
+BuildArch:      noarch
+Conflicts:      perl < 4:5.22.0-348
+
+%description Math-BigRat
+Math::BigRat complements Math::BigInt and Math::BigFloat by providing support
+for arbitrary big rational numbers.
+%endif
+
+%package Math-Complex
+Summary:        Complex numbers and trigonometric functions
+License:        GPL+ or Artistic
+Epoch:          0
+Version:        1.59
+Requires:       %perl_compat
+%if %{defined perl_bootstrap}
+%gendep_perl_Math_Complex
+%endif
+BuildArch:      noarch
+Conflicts:      perl < 4:5.22.0-348
+
+%description Math-Complex
+This package lets you create and manipulate complex numbers. By default, Perl
+limits itself to real numbers, but an extra "use" statement brings full
+complex support, along with a full set of mathematical functions typically
+associated with and/or extended to complex numbers.
+
+%package Memoize
+Summary:        Transparently speed up functions by caching return values
+License:        GPL+ or Artistic
+Epoch:          0
+Version:        1.03
+Requires:       %perl_compat
+# Keep Time::HiRes optional
+%if %{defined perl_bootstrap}
+%gendep_perl_Memoize
+%endif
+BuildArch:      noarch
+Conflicts:      perl < 4:5.22.0-350
+
+%description Memoize
+Memoizing a function makes it faster by trading space for time. It does
+this by caching the return values of the function in a table. If you call
+the function again with the same arguments, memoize jumps in and gives
+you the value out of the table, instead of letting the function compute
+the value all over again.
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%package MIME-Base64
+Summary:        Encoding and decoding of Base64 and quoted-printable strings
+# cpan/MIME-Base64/Base64.xs:   (GPL+ or Artistic) and MIT (Bellcore's part)
+# Other files:                  GPL+ or Artistic
+License:        (GPL+ or Artistic) and MIT
+Epoch:          0
+Version:        3.15
+Requires:       %perl_compat
+%if %{defined perl_bootstrap}
+%gendep_perl_MIME_Base64
+%endif
+Conflicts:      perl < 4:5.22.0-347
+
+%description MIME-Base64
+This package contains a Base64 encoder/decoder and a quoted-printable
+encoder/decoder. These encoding methods are specified in RFC 2045 - MIME
+(Multipurpose Internet Mail Extensions).
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%package Module-CoreList
+Summary:        What modules are shipped with versions of perl
+License:        GPL+ or Artistic
+Epoch:          1
+Version:        5.20180414
+Requires:       %perl_compat
+Requires:       perl(List::Util)
+Requires:       perl(version) >= 0.88
+%if %{defined perl_bootstrap}
+%gendep_perl_Module_CoreList
+%endif
+BuildArch:      noarch
+
+%description Module-CoreList
+Module::CoreList provides information on which core and dual-life modules
+are shipped with each version of perl.
+
+
+%package Module-CoreList-tools
+Summary:        Tool for listing modules shipped with perl
+License:        GPL+ or Artistic
+Epoch:          1
+Version:        5.20180414
+Requires:       %perl_compat
+Requires:       perl(feature)
+Requires:       perl(version) >= 0.88
+Requires:       perl-Module-CoreList = %{epoch}:%{version}-%{release}
+%if %{defined perl_bootstrap}
+%gendep_perl_Module_CoreList_tools
+%endif
+# The files were distributed with perl.spec's subpackage
+# perl-Module-CoreList <= 1:5.020001-309
+Conflicts:      perl-Module-CoreList < 1:5.020001-310
+BuildArch:      noarch
+
+%description Module-CoreList-tools
+This package provides a corelist(1) tool which can be used to query what
+modules were shipped with given perl version.
+%endif
+
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%package Module-Load
+Summary:        Runtime require of both modules and files
+License:        GPL+ or Artistic
+# Epoch bump for clean upgrade over old standalone package
+Epoch:          1
+Version:        0.32
+Requires:       %perl_compat
+%if %{defined perl_bootstrap}
+%gendep_perl_Module_Load
+%endif
+BuildArch:      noarch
+
+%description Module-Load
+Module::Load eliminates the need to know whether you are trying to require
+either a file or a module.
+%endif
+
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%package Module-Load-Conditional
+Summary:        Looking up module information / loading at runtime
+License:        GPL+ or Artistic
+Epoch:          0
+Version:        0.64
+Requires:       %perl_compat
+%if %{defined perl_bootstrap}
+%gendep_perl_Module_Load_Conditional
+%endif
+BuildArch:      noarch
+
+%description Module-Load-Conditional
+Module::Load::Conditional provides simple ways to query and possibly load any
+of the modules you have installed on your system during runtime.
+%endif
+
+
+%package Module-Loaded
+Summary:        Mark modules as loaded or unloaded
+License:        GPL+ or Artistic
+# Epoch bump for clean upgrade over old standalone package
+Epoch:          1
+Version:        0.08
+Requires:       %perl_compat
+%if %{defined perl_bootstrap}
+%gendep_perl_Module_Loaded
+%endif
+BuildArch:      noarch
+
+%description Module-Loaded
+When testing applications, often you find yourself needing to provide
+functionality in your test environment that would usually be provided by
+external modules. Rather than munging the %%INC by hand to mark these external
+modules as loaded, so they are not attempted to be loaded by perl, this module
+offers you a very simple way to mark modules as loaded and/or unloaded.
+
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%package Module-Metadata
+Summary:        Gather package and POD information from perl module files
+Epoch:          0
+Version:        1.000031
+License:        GPL+ or Artistic
+BuildArch:      noarch
+Requires:       %perl_compat
+%if %{defined perl_bootstrap}
+%gendep_perl_Module_Metadata
+%endif
+
+%description Module-Metadata
+Gather package and POD information from perl module files
+%endif
+
+%package Net-Ping
+Summary:        Check a remote host for reachability
+License:        GPL+ or Artistic
+Epoch:          0
+Version:        2.43
+Requires:       %perl_compat
+# Keep Net::Ping::External optional
+%if %{defined perl_bootstrap}
+%gendep_perl_Net_Ping
+%endif
+BuildArch:      noarch
+Conflicts:      perl < 4:5.22.0-350
+
+%description Net-Ping
+Net::Ping module contains methods to test the reachability of remote hosts on
+a network.
+
+%package open
+Summary:        Perl pragma to set default PerlIO layers for input and output
+License:        GPL+ or Artistic
+Epoch:          0
+Version:        1.10
+Requires:       %perl_compat
+Requires:       perl(Carp)
+Requires:       perl(Encode)
+Requires:       perl(encoding)
+%if %{defined perl_bootstrap}
+%gendep_perl_open
+%endif
+Conflicts:      perl < 4:5.20.2-326
+BuildArch:      noarch
+
+%description open
+The "open" pragma serves as one of the interfaces to declare default "layers"
+(also known as "disciplines") for all I/O.
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%package parent
+Summary:        Establish an ISA relationship with base classes at compile time
+License:        GPL+ or Artistic
+# Epoch bump for clean upgrade over old standalone package
+Epoch:          1
+Version:        0.234
+Requires:       %perl_compat
+%if %{defined perl_bootstrap}
+%gendep_perl_parent
+%endif
+BuildArch:      noarch
+
+%description parent
+parent allows you to both load one or more modules, while setting up
+inheritance from those modules at the same time. Mostly similar in effect to:
+
+    package Baz;
+
+    BEGIN {
+        require Foo;
+        require Bar;
+
+        push @ISA, qw(Foo Bar);
+    }
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%package Params-Check
+Summary:        Generic input parsing/checking mechanism
+License:        GPL+ or Artistic
+# Epoch bump for clean upgrade over old standalone package
+Epoch:          1
+Version:        0.38
+Requires:       %perl_compat
+%if %{defined perl_bootstrap}
+%gendep_perl_Params_Check
+%endif
+BuildArch:      noarch
+
+%description Params-Check
+Params::Check is a generic input parsing/checking mechanism.
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%package Parse-CPAN-Meta
+Summary:        Parse META.yml and other similar CPAN metadata files
+License:        GPL+ or Artistic
+# Epoch bump for clean upgrade over old standalone package
+Epoch:          1
+Version:        1.4417
+Requires:       %perl_compat
+BuildArch:      noarch
+Requires:       perl(CPAN::Meta::YAML) >= 0.002
+Requires:       perl(JSON::PP) >= 2.27103
+%if %{defined perl_bootstrap}
+%gendep_perl_Parse_CPAN_Meta
+%endif
+# FIXME it could be removed now?
+Obsoletes:      perl-Parse-CPAN-Meta < 1.40
+
+%description Parse-CPAN-Meta 
+Parse::CPAN::Meta is a parser for META.yml files, based on the parser half of
+YAML::Tiny.
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%package PathTools
+Summary:        PathTools Perl module (Cwd, File::Spec)
+License:        (GPL+ or Artistic) and BSD
+Epoch:          0
+Version:        3.63
+Requires:       %perl_compat
+Requires:       perl(Carp)
+%if %{defined perl_bootstrap}
+%gendep_perl_PathTools
+%endif
+
+%description PathTools
+PathTools Perl module (Cwd, File::Spec).
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%package perlfaq
+Summary:        Frequently asked questions about Perl
+# Code examples are Public Domain
+License:        (GPL+ or Artistic) and Public Domain
+Epoch:          0
+Version:        5.021010
+Requires:       %perl_compat
+%if %{defined perl_bootstrap}
+%gendep_perl_perlfaq
+%endif
+BuildArch:      noarch
+Conflicts:      perl < 4:5.22.0-347
+
+%description perlfaq
+The perlfaq comprises several documents that answer the most commonly asked
+questions about Perl and Perl programming.
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%package PerlIO-via-QuotedPrint
+Summary:        PerlIO layer for quoted-printable strings
+License:        GPL+ or Artistic
+Epoch:          0
+Version:        0.08
+Requires:       %perl_compat
+%if %{defined perl_bootstrap}
+%gendep_perl_PerlIO_via_QuotedPrint
+%endif
+BuildArch:      noarch
+Conflicts:      perl < 4:5.22.0-347
+
+%description PerlIO-via-QuotedPrint
+This module implements a PerlIO layer that works on files encoded in the
+quoted-printable format. It will decode from quoted-printable while
+reading from a handle, and it will encode as quoted-printable while
+writing to a handle.
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%package Perl-OSType
+Summary:        Map Perl operating system names to generic types
+Version:        1.009
+Epoch:          0
+License:        GPL+ or Artistic
+Requires:       %perl_compat
+%if %{defined perl_bootstrap}
+%gendep_perl_Perl_OSType
+%endif
+BuildArch:      noarch
+
+%description Perl-OSType
+Modules that provide OS-specific behaviors often need to know if the current
+operating system matches a more generic type of operating systems. For example,
+'linux' is a type of 'Unix' operating system and so is 'freebsd'.
+This module provides a mapping between an operating system name as given by $^O
+and a more generic type. The initial version is based on the OS type mappings
+provided in Module::Build and ExtUtils::CBuilder (thus, Microsoft operating
+systems are given the type 'Windows' rather than 'Win32').
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%package Pod-Checker
+Summary:        Check POD documents for syntax errors
+Epoch:          4
+Version:        1.60
+License:        GPL+ or Artistic
+Requires:       %perl_compat
+%if %{defined perl_bootstrap}
+%gendep_perl_Pod_Checker
+%endif
+BuildArch:      noarch
+
+%description Pod-Checker
+Module and tools to verify POD documentation contents for compliance with the
+Plain Old Documentation format specifications.
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%package Pod-Escapes
+Summary:        Resolve POD escape sequences
+License:        GPL+ or Artistic
+# Epoch bump for clean upgrade over old standalone package
+Epoch:          1
+Version:        1.07
+Requires:       %perl_compat
+%if %{defined perl_bootstrap}
+%gendep_perl_Pod_Escapes
+%endif
+BuildArch:      noarch
+
+%description Pod-Escapes
+This module provides things that are useful in decoding Pod E<...> sequences.
+%endif
+
+%package Pod-Html
+Summary:        Convert POD files to HTML
+License:        GPL+ or Artistic
+Epoch:          0
+# Real version 1.2201
+Version:        1.22.01
+Requires:       %perl_compat
+%if %{defined perl_bootstrap}
+%gendep_perl_Pod_Html
+%endif
+BuildArch:      noarch
+Conflicts:      perl < 4:5.22.0-350
+
+%description Pod-Html
+This package converts files from POD format (see perlpod) to HTML format. It
+can automatically generate indexes and cross-references, and it keeps a cache
+of things it knows how to cross-reference.
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%package Pod-Parser
+Summary:        Basic perl modules for handling Plain Old Documentation (POD)
+License:        GPL+ or Artistic
+Epoch:          0
+Version:        1.63
+Requires:       %perl_compat
+%if %{defined perl_bootstrap}
+%gendep_perl_Pod_Parser
+%endif
+BuildArch:      noarch
+
+%description Pod-Parser
+This software distribution contains the packages for using Perl5 POD (Plain
+Old Documentation). See the "perlpod" and "perlsyn" manual pages from your
+Perl5 distribution for more information about POD.
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%package Pod-Perldoc
+Summary:        Look up Perl documentation in Pod format
+License:        GPL+ or Artistic
+Epoch:          0
+Version:        3.25
+%if %{with perl_enables_groff}
+# Pod::Perldoc::ToMan executes roff
+Requires:       groff-base
+%endif
+Requires:       %perl_compat
+Requires:       perl(File::Temp) >= 0.22
+Requires:       perl(HTTP::Tiny)
+Requires:       perl(IO::Handle)
+Requires:       perl(IPC::Open3)
+# POD2::Base is optional
+# Pod::Checker is not needed if Pod::Simple::Checker is available
+Requires:       perl(Pod::Simple::Checker)
+Requires:       perl(Pod::Simple::RTF) >= 3.16
+Requires:       perl(Pod::Simple::XMLOutStream) >= 3.16
+Requires:       perl(Text::ParseWords)
+# Tk is optional
+Requires:       perl(Symbol)
+%if %{defined perl_bootstrap}
+%gendep_perl_Pod_Perldoc
+%endif
+BuildArch:      noarch
+
+%description Pod-Perldoc
+perldoc looks up a piece of documentation in .pod format that is embedded
+in the perl installation tree or in a perl script, and displays it via
+"groff -man | $PAGER". This is primarily used for the documentation for
+the perl library modules.
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%package Pod-Simple
+Summary:        Framework for parsing POD documentation
+License:        GPL+ or Artistic
+# Epoch bump for clean upgrade over old standalone package
+Epoch:          1
+Version:        3.32
+Requires:       %perl_compat
+%if %{defined perl_bootstrap}
+%gendep_perl_Pod_Simple
+%endif
+BuildArch:      noarch
+
+%description Pod-Simple
+Pod::Simple is a Perl library for parsing text in the Pod ("plain old
+documentation") markup language that is typically used for writing
+documentation for Perl and for Perl modules.
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%package Pod-Usage
+Summary:        Print a usage message from embedded pod documentation
+License:        GPL+ or Artistic
+Epoch:          4
+Version:        1.68
+Requires:       %perl_compat
+# Pod::Usage executes perldoc from perl-Pod-Perldoc by default
+Requires:       perl-Pod-Perldoc
+Requires:       perl(Pod::Text)
+%if %{defined perl_bootstrap}
+%gendep_perl_Pod_Usage
+%endif
+BuildArch:      noarch
+
+%description Pod-Usage
+pod2usage will print a usage message for the invoking script (using its
+embedded POD documentation) and then exit the script with the desired exit
+status. The usage message printed may have any one of three levels of
+"verboseness": If the verbose level is 0, then only a synopsis is printed.
+If the verbose level is 1, then the synopsis is printed along with a
+description (if present) of the command line options and arguments. If the
+verbose level is 2, then the entire manual page is printed.
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%package podlators
+Summary:        Format POD source into various output formats
+License:        (GPL+ or Artistic) and MIT
+Epoch:          0
+Version:        4.07
+BuildArch:      noarch
+Requires:       %perl_compat
+Requires:       perl(File::Spec) >= 0.8
+Requires:       perl(Pod::Simple) >= 3.06
+%if %{defined perl_bootstrap}
+%gendep_perl_podlators
+%endif
+Conflicts:      perl < 4:5.16.1-234
+
+%description podlators
+This package contains Pod::Man and Pod::Text modules which convert POD input
+to *roff source output, suitable for man pages, or plain text.  It also
+includes several sub-classes of Pod::Text for formatted output to terminals
+with various capabilities.
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%package Scalar-List-Utils
+Summary:        A selection of general-utility scalar and list subroutines
+License:        GPL+ or Artistic
+Epoch:          3
+# Real version 1.42_02
+Version:        1.42
+Requires:       %perl_compat
+%if %{defined perl_bootstrap}
+%gendep_perl_Scalar_List_Utils
+%endif
+
+%description Scalar-List-Utils
+Scalar::Util and List::Util contain a selection of subroutines that people have
+expressed would be nice to have in the perl core, but the usage would not
+really be high enough to warrant the use of a keyword, and the size so small
+such that being individual extensions would be wasteful.
+%endif
+
+%package SelfLoader
+Summary:        Load functions only on demand
+License:        GPL+ or Artistic
+Epoch:          0
+Version:        1.23
+BuildArch:      noarch
+Requires:       %perl_compat
+Requires:       perl(Carp)
+%if %{defined perl_bootstrap}
+%gendep_perl_SelfLoader
+%endif
+Conflicts:      perl < 4:5.22.0-351
+
+%description SelfLoader
+This Perl module tells its users that functions in a package are to be
+autoloaded from after the "__DATA__" token. See also "Autoloading" in
+perlsub.
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%package Socket
+Summary:        C socket.h defines and structure manipulators
+License:        GPL+ or Artistic
+Epoch:          4
+Version:        2.020
+Requires:       %perl_compat
+%if %{defined perl_bootstrap}
+%gendep_perl_Socket
+%endif
+
+%description Socket
+This module is just a translation of the C socket.h file.  Unlike the old
+mechanism of requiring a translated socket.ph file, this uses the h2xs program
+(see the Perl source distribution) and your native C compiler.  This means
+that it has a far more likely chance of getting the numbers right.  This
+includes all of the commonly used pound-defines like AF_INET, SOCK_STREAM, etc.
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%package Storable
+Summary:        Persistence for Perl data structures
+License:        GPL+ or Artistic
+Epoch:          1
+Version:        2.56
+Requires:       %perl_compat
+# Carp substitutes missing Log::Agent
+Requires:       perl(Carp)
+Requires:       perl(Config)
+# Fcntl is optional, but locking is good
+Requires:       perl(Fcntl)
+Requires:       perl(IO::File)
+%if %{defined perl_bootstrap}
+%gendep_perl_Storable
+%endif
+Conflicts:      perl < 4:5.16.3-274
+
+%description Storable
+The Storable package brings persistence to your Perl data structures
+containing scalar, array, hash or reference objects, i.e. anything that
+can be conveniently stored to disk and retrieved at a later time.
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%package Sys-Syslog
+Summary:        Perl interface to the UNIX syslog(3) calls
+License:        GPL+ or Artistic
+Epoch:          0
+Version:        0.33
+Requires:       %perl_compat
+Requires:       perl(XSLoader)
+%if %{defined perl_bootstrap}
+%gendep_perl_Sys_Syslog
+%endif
+Conflicts:      perl < 4:5.16.3-269
+
+%description Sys-Syslog
+Sys::Syslog is an interface to the UNIX syslog(3) function. Call syslog() with
+a string priority and a list of printf() arguments just like at syslog(3).
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%package Term-ANSIColor
+Summary:        Color screen output using ANSI escape sequences
+License:        GPL+ or Artistic
+Epoch:          0
+Version:        4.04
+Requires:       %perl_compat
+%if %{defined perl_bootstrap}
+%gendep_perl_Term_ANSIColor
+%endif
+BuildArch:      noarch
+Conflicts:      perl < 4:5.18.2-302
+
+%description Term-ANSIColor
+This module has two interfaces, one through color() and colored() and the
+other through constants. It also offers the utility functions uncolor(),
+colorstrip(), colorvalid(), and coloralias(), which have to be explicitly
+imported to be used.
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%package Term-Cap
+Summary:        Perl termcap interface
+License:        GPL+ or Artistic
+Epoch:          0
+Version:        1.17
+Requires:       %perl_compat
+# ncurses for infocmp tool
+Requires:       ncurses
+Requires:       perl(Carp)
+%if %{defined perl_bootstrap}
+%gendep_perl_Term_Cap
+%endif
+BuildArch:      noarch
+Conflicts:      perl < 4:5.22.0-347
+
+%description Term-Cap
+These are low-level functions to extract and use capabilities from a terminal
+capability (termcap) database.
+%endif
+
+%package Test
+Summary:        Simple framework for writing test scripts
+License:        GPL+ or Artistic
+Epoch:          0
+Version:        1.28
+Requires:       %perl_compat
+# Algorithm::Diff 1.15 is optional
+Requires:       perl(File::Temp)
+%if %{defined perl_bootstrap}
+%gendep_perl_Test
+%endif
+BuildArch:      noarch
+Conflicts:      perl < 4:5.22.0-351
+
+%description Test
+The Test Perl module simplifies the task of writing test files for Perl modules,
+such that their output is in the format that Test::Harness expects to see.
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%package Test-Harness
+Summary:        Run Perl standard test scripts with statistics
+License:        GPL+ or Artistic
+Epoch:          0
+Version:        3.36
+Requires:       %perl_compat
+%if %{defined perl_bootstrap}
+%gendep_perl_Test_Harness
+%endif
+BuildArch:      noarch
+
+%description Test-Harness
+Run Perl standard test scripts with statistics.
+Use TAP::Parser, Test::Harness package was whole rewritten.
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%package Test-Simple
+Summary:        Basic utilities for writing tests
+License:        (GPL+ or Artistic) and CC0 and Public Domain
+Epoch:          0
+Version:        1.001014
+Requires:       %perl_compat
+Requires:       perl(Data::Dumper)
+%if %{defined perl_bootstrap}
+%gendep_perl_Test_Simple
+%endif
+BuildArch:      noarch
+
+%description Test-Simple
+Basic utilities for writing tests.
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%package Text-Balanced
+Summary:        Extract delimited text sequences from strings
+License:        GPL+ or Artistic
+Epoch:          0
+Version:        2.03
+Requires:       %perl_compat
+%if %{defined perl_bootstrap}
+%gendep_perl_Text_Balanced
+%endif
+BuildArch:      noarch
+Conflicts:      perl < 4:5.22.0-347
+
+%description Text-Balanced
+These Perl subroutines may be used to extract a delimited substring, possibly
+after skipping a specified prefix string.
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%package Text-ParseWords
+Summary:        Parse text into an array of tokens or array of arrays
+License:        GPL+ or Artistic
+Epoch:          0
+Version:        3.30
+Requires:       %perl_compat
+Requires:       perl(Carp)
+%if %{defined perl_bootstrap}
+%gendep_perl_Text_ParseWords
+%endif
+BuildArch:      noarch
+Conflicts:      perl < 4:5.16.2-256
+
+%description Text-ParseWords
+Parse text into an array of tokens or array of arrays.
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%package Text-Tabs+Wrap
+Summary:        Expand tabs and do simple line wrapping
+License:        TTWL
+Epoch:          0
+Version:        2013.0523
+Requires:       %perl_compat
+%if %{defined perl_bootstrap}
+%gendep_perl_Text_Tabs_Wrap
+%endif
+BuildArch:      noarch
+Conflicts:      perl < 4:5.20.2-325
+
+%description Text-Tabs+Wrap
+Text::Tabs performs the same job that the UNIX expand(1) and unexpand(1)
+commands do: adding or removing tabs from a document.
+
+Text::Wrap::wrap() will reformat lines into paragraphs. All it does is break
+up long lines, it will not join short lines together.
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%package Thread-Queue
+Summary:        Thread-safe queues
+License:        GPL+ or Artistic
+Epoch:          0
+Version:        3.09
+Requires:       %perl_compat
+Requires:       perl(Carp)
+%if %{defined perl_bootstrap}
+%gendep_perl_Thread_Queue
+%endif
+BuildArch:      noarch
+Conflicts:      perl < 4:5.16.2-257
+
+%description Thread-Queue
+This module provides thread-safe FIFO queues that can be accessed safely by
+any number of threads.
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%package Time-HiRes
+Summary:        High resolution alarm, sleep, gettimeofday, interval timers
+License:        GPL+ or Artistic
+Epoch:          0
+Version:        1.9741
+Requires:       %perl_compat
+Requires:       perl(Carp)
+%if %{defined perl_bootstrap}
+%gendep_perl_Time_HiRes
+%endif
+Conflicts:      perl < 4:5.16.3-271
+
+%description Time-HiRes
+The Time::HiRes module implements a Perl interface to the usleep, nanosleep,
+ualarm, gettimeofday, and setitimer/getitimer system calls, in other words,
+high resolution time and timers.
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%package Time-Local
+Summary:        Efficiently compute time from local and GMT time
+License:        GPL+ or Artistic
+Epoch:          0
+Version:        1.2300
+Requires:       %perl_compat
+%if %{defined perl_bootstrap}
+%gendep_perl_Time_Local
+%endif
+BuildArch:      noarch
+Conflicts:      perl < 4:5.16.3-262
+
+%description Time-Local
+This module provides functions that are the inverse of built-in perl functions
+localtime() and gmtime(). They accept a date as a six-element array, and
+return the corresponding time(2) value in seconds since the system epoch
+(Midnight, January 1, 1970 GMT on Unix, for example). This value can be
+positive or negative, though POSIX only requires support for positive values,
+so dates before the system's epoch may not work on all operating systems.
+%endif
+
+%package Time-Piece
+Summary:        Time objects from localtime and gmtime
+License:        (GPL+ or Artistic) and BSD
+Epoch:          0
+Version:        1.31
+Requires:       %perl_compat
+%if %{defined perl_bootstrap}
+%gendep_perl_Time_Piece
+%endif
+
+%description Time-Piece
+The Time::Piece module replaces the standard localtime and gmtime functions
+with implementations that return objects.  It does so in a backwards compatible
+manner, so that using localtime or gmtime as documented in perlfunc still
+behave as expected.
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%package threads
+Summary:        Perl interpreter-based threads
+License:        GPL+ or Artistic
+Epoch:          1
+Version:        2.07
+Requires:       %perl_compat
+%if %{defined perl_bootstrap}
+%gendep_perl_threads
+%endif
+
+%description threads
+Since Perl 5.8, thread programming has been available using a model called
+interpreter threads  which provides a new Perl interpreter for each thread,
+and, by default, results in no data or state information being shared between
+threads.
+
+(Prior to Perl 5.8, 5005threads was available through the Thread.pm API. This
+threading model has been deprecated, and was removed as of Perl 5.10.0.)
+
+As just mentioned, all variables are, by default, thread local. To use shared
+variables, you need to also load threads::shared.
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%package threads-shared
+Summary:        Perl extension for sharing data structures between threads
+License:        GPL+ or Artistic
+Epoch:          0
+Version:        1.51
+Requires:       %perl_compat
+%if %{defined perl_bootstrap}
+%gendep_perl_threads_shared
+%endif
+
+%description threads-shared
+By default, variables are private to each thread, and each newly created thread
+gets a private copy of each existing variable. This module allows you to share
+variables across different threads (and pseudo-forks on Win32). It is used
+together with the threads module.  This module supports the sharing of the
+following data types only: scalars and scalar refs, arrays and array refs, and
+hashes and hash refs.
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%package Unicode-Collate
+Summary:        Unicode Collation Algorithm
+License:        (GPL+ or Artistic) and Unicode
+Epoch:          0
+Version:        1.14
+Requires:       %perl_compat
+Requires:       perl(Unicode::Normalize)
+%if %{defined perl_bootstrap}
+%gendep_perl_Unicode_Collate
+%endif
+Conflicts:      perl < 4:5.22.0-347
+
+%description Unicode-Collate
+This package is Perl implementation of Unicode Technical Standard #10 (Unicode
+Collation Algorithm).
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%package Unicode-Normalize
+Summary:        Unicode Normalization Forms
+License:        GPL+ or Artistic
+Epoch:          0
+Version:        1.25
+Requires:       %perl_compat
+# unicore/CombiningClass.pl and unicore/Decomposition.pl from perl, perl is
+# auto-detected.
+%if %{defined perl_bootstrap}
+%gendep_perl_Unicode_Normalize
+%endif
+Conflicts:      perl < 4:5.22.0-347
+
+%description Unicode-Normalize
+This package provides Perl functions that can convert strings into various
+Unicode normalization forms as defined in Unicode Standard Annex #15.
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%package version
+Summary:        Perl extension for Version Objects
+License:        GPL+ or Artistic
+# Epoch bump for clean upgrade over old standalone package
+Epoch:          5
+# real version 0.9916
+Version:        0.99.16
+Requires:       %perl_compat
+%if %{defined perl_bootstrap}
+%gendep_perl_version
+%endif
+BuildArch:      noarch
+
+%description version
+Perl extension for Version Objects
+%endif
+
+%prep
+%setup -q -n perl-%{perl_version}
+%patch1 -p1
+%ifarch %{multilib_64_archs}
+%patch3 -p1
+%endif
+%patch4 -p1
+%patch5 -p1
+%patch6 -p1
+%patch7 -p1
+%patch8 -p1
+%patch15 -p1
+%patch16 -p1
+%patch22 -p1
+%patch26 -p1
+%patch28 -p1
+%patch30 -p1
+%patch34 -p1
+%patch36 -p1
+%patch37 -p1
+%patch40 -p1
+%patch41 -p1
+%patch48 -p1
+%patch49 -p1
+%patch50 -p1
+%patch51 -p1
+%patch52 -p1
+%patch53 -p1
+%patch54 -p1
+%patch55 -p1
+%patch56 -p1
+%patch57 -p1
+%patch58 -p1
+%patch59 -p1
+%patch60 -p1
+%patch61 -p1
+%patch62 -p1
+%patch63 -p1
+%patch64 -p1
+%patch65 -p1
+%patch66 -p1
+%patch67 -p1
+%patch68 -p1
+%patch69 -p1
+%patch70 -p1
+%patch71 -p1
+%patch72 -p1
+%patch73 -p1
+%patch74 -p1
+%patch75 -p1
+%patch76 -p1
+pushd cpan/Compress-Raw-Zlib
+%patch77 -p1
+%patch78 -p1
+popd
+%patch79 -p1
+%patch80 -p1
+%patch81 -p1
+%patch82 -p1
+%patch83 -p1
+%patch84 -p1
+%patch85 -p1
+%patch87 -p1
+%patch88 -p1
+%patch89 -p1
+%patch90 -p1
+%patch91 -p1
+%patch92 -p1
+%patch93 -p1
+%patch94 -p1
+%patch95 -p1
+%patch97 -p1
+%patch98 -p1
+%patch99 -p1
+%patch100 -p1
+%patch101 -p1
+%patch102 -p1
+%patch103 -p1
+%patch105 -p1
+%patch106 -p1
+%patch107 -p1
+%patch108 -p1
+%patch109 -p1
+%patch110 -p1
+%patch111 -p1
+%patch112 -p1
+%patch113 -p1
+%patch114 -p1
+%patch115 -p1
+%patch116 -p1
+%patch117 -p1
+%patch118 -p1
+%patch119 -p1
+%patch120 -p1
+%patch121 -p1
+%patch122 -p1
+%patch123 -p1
+%patch124 -p1
+%patch125 -p1
+%patch126 -p1
+%patch127 -p1
+%patch128 -p1
+%patch129 -p1
+%patch130 -p1
+%patch131 -p1
+%patch132 -p1
+%patch133 -p1
+%patch200 -p1
+%patch201 -p1
+
+%if !%{defined perl_bootstrap}
+# Local patch tracking
+perl -x patchlevel.h \
+    'Fedora Patch1: Removes date check, Fedora/RHEL specific' \
+%ifarch %{multilib_64_archs} \
+    'Fedora Patch3: support for libdir64' \
+%endif \
+    'Fedora Patch4: use libresolv instead of libbind' \
+    'Fedora Patch5: USE_MM_LD_RUN_PATH' \
+    'Fedora Patch6: Provide MM::maybe_command independently (bug #1129443)' \
+    'Fedora Patch7: Dont run one io test due to random builder failures' \
+    'Fedora Patch15: Define SONAME for libperl.so' \
+    'Fedora Patch16: Install libperl.so to -Dshrpdir value' \
+    'Fedora Patch22: Document Math::BigInt::CalcEmu requires Math::BigInt (CPAN RT#85015)' \
+    'Fedora Patch26: Make *DBM_File desctructors thread-safe (RT#61912)' \
+    'Fedora Patch27: Make PadlistNAMES() lvalue again (CPAN RT#101063)' \
+    'Fedora Patch28: Make magic vtable writable as a work-around for Coro (CPAN RT#101063)' \
+    'Fedora Patch30: Replace EU::MakeMaker dependency with EU::MM::Utils in IPC::Cmd (bug #1129443)' \
+    'Fedora Patch34: Do not use unitialized memory in $h{\const} warnings (RT#128189)' \
+    'Fedora Patch36: Do not treat %: as a stash (RT#128238)' \
+    'Fedora Patch37: Do not crash when inserting a non-stash into a stash (RT#128238)' \
+    'Fedora Patch40: Fix a crash when vivifying a stub in a deleted package (RT#128532)' \
+    'Fedora Patch41: Fix a crash in "Subroutine redefined" warning (RT#128257)' \
+    'Fedora Petch48: Fix crash in splice (RT#129164, RT#129166, RT#129167)' \
+    'Fedora Patch49: Fix string overrun in Perl_gv_fetchmethod_pvn_flags (RT#129267)' \
+    'Fedora Patch50: Fix string overrun in Perl_gv_fetchmethod_pvn_flags (RT#129267)' \
+    'Fedora Patch51: Fix string overrun in Perl_gv_fetchmethod_pvn_flags (RT#129267)' \
+    'Fedora Patch52: Fix string overrun in Perl_gv_fetchmethod_pvn_flags (RT#129267)' \
+    'Fedora Patch53: Fix string overrun in Perl_gv_fetchmethod_pvn_flags (RT#129267)' \
+    'Fedora Patch54: Fix crash when matching UTF-8 string with non-UTF-8 substrings (RT#129350)' \
+    'Fedora Patch55: Fix parsing perl options in shell bang line (RT#129336)' \
+    'Fedora Patch56: Fix firstchar bitmap under UTF-8 with prefix optimization (RT#129950)' \
+    'Fedora Patch57: Avoid infinite loop in h2xs tool if enum and type have the same name (RT130001)' \
+    'Fedora Patch58: Fix stack handling when calling chdir without an argument (RT#129130)' \
+    'Fedora Patch59: Fix crash in Storable when deserializing malformed code reference (RT#68348, RT#130098)' \
+    'Fedora Patch60: Fix crash on explicit return from regular expression substitution (RT#130188)' \
+    'Fedora Patch61: Fix assigning split() return values to an array' \
+    'Fedora Patch62: Fix const correctness in hv_func.h (RT#130169)' \
+    'Fedora Patch63: Fix a crash in optimized evaluation of "or ((0) x 0))" (RT#130247)' \
+    'Fedora Patch64: Fix a memory leak in IO::Poll (RT#129788)' \
+    'Fedora Patch65: Fix regular expression matching (RT#130307)' \
+    'Fedora Patch66: Fix a buffer overflow in split in scalar context (RT#130262)' \
+    'Fedora Patch67: Fix a heap overflow with pack "W" (RT129149)' \
+    'Fedora Patch69: Fix a use-after-free when processing scalar variables in forms (RT#129125)' \
+    'Fedora Patch70: Fix a heap overflow if invalid octal or hexadecimal number is used in transliteration expression (RT#129342)' \
+    'Fedora Patch71: Fix out-of-bound read in case of unmatched regexp backreference (RT#129377)' \
+    'Fedora Patch72: Fix UTF-8 string handling in & operator (RT#129287)' \
+    'Fedora Patch73: Fix recreation of *:: (RT#129869)' \
+    'Fedora Patch74: Fix a memory leak in B::RHE->HASH method (RT#130504)' \
+    'Fedora Patch75: Fix parsing goto statements in multicalled subroutine (RT#113938)' \
+    'Fedora Patch76: Fix a heap overlow in parsing $# (RT#129274)' \
+    'Fedora Patch77: Adapt to zlib-1.2.11 (CPAN RT#119762)' \
+    'Fedora Patch78: Fix compiler fatal warnings in Compress-Raw-Zlib (CPAN RT#120272)' \
+    'Fedora Patch79: Fix a crash when compiling a regexp with impossible quantifiers (RT#130561)' \
+    'Fedora Patch82: Fix a buffer overrun with format and "use bytes" (RT#130703)' \
+    'Fedora Patch83: Fix a buffer overflow when studying some regexps repeatedly (RT#129281, RT#129061)' \
+    'Fedora Patch85: Fix a heap buffer overflow when evaluating regexps with embedded code blocks from more than one source, RT#129881' \
+    'Fedora Patch87: Fix a null-pointer dereference on malformed code (RT#130815)' \
+    'Fedora Patch88: Fix an use-after-free in substr() that modifies a magic variable (RT#129340)' \
+    'Fedora Patch89: Fix a memory leak leak in Perl_reg_named_buff_fetch() (RT#130822)' \
+    'Fedora Patch90: Fix an invalid memory read when parsing a loop variable (RT#130814)' \
+    'Fedora Patch94: Fix a heap-use-after-free in four-arguments substr call (RT#130624)' \
+    'Fedora Patch95: Make File::Glob more resistant against degenerative matching (RT#131211)' \
+    'Fedora Patch98: Fix a crash when calling a subroutine from a stash (RT#131085)' \
+    'Fedora Patch99: Fix an improper cast of a negative integer to an unsigned 8-bit type (RT#131190)' \
+    'Fedora Patch100: Fix cloning :via handles on thread creation (RT#131221)' \
+    'Fedora Patch102: Fix glob UTF-8 flag on a glob reassignment (RT#131263)' \
+    'Fedora Patch103: Fix a buffer overflow in my_atof2() (RT#131526)' \
+    'Fedora Patch105: Fix handling backslashes in PATH environment variable when executing "perl -S" (RT#129183)' \
+    'Fedora Patch106: Fix a conditional jump on uninitilized memory in re_intuit_start() (RT#131575)' \
+    'Fedora Patch107: Fix spurious "Assuming NOT a POSIX class" warning (RT#131522)' \
+    'Fedora Patch109: Fix handling attribute specification on our variables (RT#131597)' \
+    'Fedora Patch110: Fix a crash when a match for inversely repeated group fails (RT#132017)' \
+    'Fedora Patch111: Fix an overflow when parsing a character range with no preceding character (RT#132245)' \
+    'Fedora Patch112: Fix walking symbol table for ISA in Carp' \
+    'Fedora Patch113: Fix handling file names with null bytes in stat and lstat functions (RT#131895)' \
+    'Fedora Patch114: Fix a crash when untying an object witout a stash' \
+    'Fedora Patch115: Fix deparsing of transliterations with unprintable characters (RT#132405)' \
+    'Fedora Patch116: Fix error reporting on do() on a directory (RT#125774)' \
+    'Fedora Patch117: Fix stack manipulation when a lexical subroutine is defined in a do block in a member of an iteration list (RT#132442)' \
+    'Fedora Patch118: Fix setting $! when statting a closed filehandle (RT#108288)' \
+    'Fedora Patch119: Fix tainting of s/// with overloaded replacement (RT#115266)' \
+    'Fedora Patch120: Expand system() arguments before a fork (RT#121105)' \
+    'Fedora Patch123: Avoid undefined behavior when copying memory in Glob and pp_caller (RT#131746)' \
+    'Fedora Patch125: Fix compatibility with libxcrypt (bug #1536752)' \
+    'Fedora Patch126: Link XS modules to pthread library to fix linking with -z defs' \
+    'Fedora Patch127: Fix parsing braced subscript after parentheses (RT#8045)' \
+    'Fedora Patch128: Adjust tests to gdbm-1.15 (RT#133295)' \
+    'Fedora Patch129: Pass the correct CFLAGS to dtrace' \
+    'Fedora Patch200: Link XS modules to libperl.so with EU::CBuilder on Linux' \
+    'Fedora Patch201: Link XS modules to libperl.so with EU::MM on Linux' \
+    %{nil}
+%endif
+
+#copy the example script
+cp -a %{SOURCE5} .
+
+#copy Pod-Html license clarification
+cp %{SOURCE6} .
+
+#
+# Candidates for doc recoding (need case by case review):
+# find . -name "*.pod" -o -name "README*" -o -name "*.pm" | xargs file -i | grep charset= | grep -v '\(us-ascii\|utf-8\)'
+recode()
+{
+        iconv -f "${2:-iso-8859-1}" -t utf-8 < "$1" > "${1}_"
+        touch -r "$1" "${1}_"
+        mv -f "${1}_" "$1"
+}
+# TODO iconv fail on this one
+##recode README.tw big5
+#recode pod/perlebcdic.pod
+#recode pod/perlhack.pod
+#recode pod/perlhist.pod
+#recode pod/perlthrtut.pod
+#recode AUTHORS
+
+find . -name \*.orig -exec rm -fv {} \;
+
+# Configure Compress::Zlib to use system zlib
+sed -i 's|BUILD_ZLIB      = True|BUILD_ZLIB      = False|
+    s|INCLUDE         = ./zlib-src|INCLUDE         = %{_includedir}|
+    s|LIB             = ./zlib-src|LIB             = %{_libdir}|' \
+    cpan/Compress-Raw-Zlib/config.in
+
+# Ensure that we never accidentally bundle zlib or bzip2
+rm -rf cpan/Compress-Raw-Zlib/zlib-src
+rm -rf cpan/Compress-Raw-Bzip2/bzip2-src
+sed -i '/\(bzip2\|zlib\)-src/d' MANIFEST
+
+%if !%{with gdbm}
+# Do not install anything requiring NDBM_File if NDBM is not available.
+rm -rf 'cpan/Memoize/Memoize/NDBM_File.pm'
+sed -i '\|cpan/Memoize/Memoize/NDBM_File.pm|d' MANIFEST
+%endif
+
+
+%build
+echo "RPM Build arch: %{_arch}"
+
+# use "lib", not %%{_lib}, for privlib, sitelib, and vendorlib
+# To build production version, we would need -DDEBUGGING=-g
+
+# Perl INC path (perl -V) in search order:
+# - /usr/local/share/perl5            -- for CPAN     (site lib)
+# - /usr/local/lib[64]/perl5          -- for CPAN     (site arch)
+# - /usr/share/perl5/vendor_perl      -- 3rd party    (vendor lib)
+# - /usr/lib[64]/perl5/vendor_perl    -- 3rd party    (vendor arch)
+# - /usr/share/perl5                  -- Fedora       (priv lib)
+# - /usr/lib[64]/perl5                -- Fedora       (arch lib)
+
+%global privlib     %{_prefix}/share/perl5
+%global archlib     %{_libdir}/perl5
+
+%global perl_vendorlib  %{privlib}/vendor_perl
+%global perl_vendorarch %{archlib}/vendor_perl
+
+# ldflags is not used when linking XS modules.
+# Only ldflags is used when linking miniperl.
+# Only ccflags and ldflags are used for Configure's compiler checks.
+# Set optimize=none to prevent from injecting upstream's value.
+/bin/sh Configure -des \
+        -Doptimize="none" \
+        -Dccflags="$RPM_OPT_FLAGS" \
+        -Dldflags="$RPM_LD_FLAGS" \
+        -Dccdlflags="-Wl,--enable-new-dtags $RPM_LD_FLAGS" \
+        -Dlddlflags="-shared $RPM_LD_FLAGS" \
+        -Dshrpdir="%{_libdir}" \
+        -DDEBUGGING=-g \
+        -Dversion=%{perl_version} \
+        -Dmyhostname=localhost \
+        -Dperladmin=root@localhost \
+        -Dcc='%{__cc}' \
+        -Dcf_by='Red Hat, Inc.' \
+        -Dprefix=%{_prefix} \
+%if %{without perl_enables_groff}
+        -Dman1dir="%{_mandir}/man1" \
+        -Dman3dir="%{_mandir}/man3" \
+%endif
+        -Dvendorprefix=%{_prefix} \
+        -Dsiteprefix=%{_prefix}/local \
+        -Dsitelib="%{_prefix}/local/share/perl5" \
+        -Dsitearch="%{_prefix}/local/%{_lib}/perl5" \
+        -Dprivlib="%{privlib}" \
+        -Dvendorlib="%{perl_vendorlib}" \
+        -Darchlib="%{archlib}" \
+        -Dvendorarch="%{perl_vendorarch}" \
+        -Darchname=%{perl_archname} \
+%ifarch %{multilib_64_archs}
+        -Dlibpth="/usr/local/lib64 /lib64 %{_prefix}/lib64" \
+%endif
+%ifarch sparc sparcv9
+        -Ud_longdbl \
+%endif
+        -Duseshrplib \
+        -Dusethreads \
+        -Duseithreads \
+%if %{with perl_enables_systemtap}
+        -Dusedtrace='/usr/bin/dtrace' \
+%else
+        -Uusedtrace \
+%endif
+        -Duselargefiles \
+        -Dd_semctl_semun \
+        -Di_db \
+%if %{with gdbm}
+        -Ui_ndbm \
+        -Di_gdbm \
+%endif
+        -Di_shadow \
+        -Di_syslog \
+        -Dman3ext=3pm \
+        -Duseperlio \
+        -Dinstallusrbinperl=n \
+        -Ubincompat5005 \
+        -Uversiononly \
+        -Dpager='/usr/bin/less -isr' \
+        -Dd_gethostent_r_proto -Ud_endhostent_r_proto -Ud_sethostent_r_proto \
+        -Ud_endprotoent_r_proto -Ud_setprotoent_r_proto \
+        -Ud_endservent_r_proto -Ud_setservent_r_proto \
+        -Dscriptdir='%{_bindir}' \
+        -Dusesitecustomize \
+        -Duse64bitint1
+
+# -Duseshrplib creates libperl.so, -Ubincompat5005 help create DSO -> libperl.so
+
+BUILD_BZIP2=0
+BZIP2_LIB=%{_libdir}
+export BUILD_BZIP2 BZIP2_LIB
+
+# Prepapre a symlink from proper DSO name to libperl.so now so that new perl
+# can be executed from make.
+%global soname libperl.so.%(echo '%{perl_version}' | sed 's/^\\([^.]*\\.[^.]*\\).*/\\1/')
+test -L %soname || ln -s libperl.so %soname
+
+%ifarch sparc64 %{arm}
+make
+%else
+make %{?_smp_mflags}
+%endif
+
+%install
+make install DESTDIR=$RPM_BUILD_ROOT
+
+%global build_archlib $RPM_BUILD_ROOT%{archlib}
+%global build_privlib $RPM_BUILD_ROOT%{privlib}
+%global build_bindir  $RPM_BUILD_ROOT%{_bindir}
+%global new_perl LD_PRELOAD="%{build_archlib}/CORE/libperl.so" \\\
+    LD_LIBRARY_PATH="%{build_archlib}/CORE" \\\
+    PERL5LIB="%{build_archlib}:%{build_privlib}" \\\
+    %{build_bindir}/perl
+
+# Make proper DSO names, move libperl to standard path.
+mv "%{build_archlib}/CORE/libperl.so" \
+    "$RPM_BUILD_ROOT%{_libdir}/libperl.so.%{perl_version}"
+ln -s "libperl.so.%{perl_version}" "$RPM_BUILD_ROOT%{_libdir}/%{soname}"
+ln -s "libperl.so.%{perl_version}" "$RPM_BUILD_ROOT%{_libdir}/libperl.so"
+# XXX: Keep symlink from original location because various code glues
+# $archlib/CORE/$libperl to get the DSO.
+ln -s "../../libperl.so.%{perl_version}" "%{build_archlib}/CORE/libperl.so"
+# XXX: Remove the soname named file from CORE directory that was created as
+# a symlink in build section and installed as a regular file by perl build
+# system.
+rm -f "%{build_archlib}/CORE/%{soname}"
+
+install -p -m 755 utils/pl2pm %{build_bindir}/pl2pm
+
+for i in asm/termios.h syscall.h syslimits.h syslog.h \
+    sys/ioctl.h sys/socket.h sys/time.h wait.h
+do
+    %{new_perl} %{build_bindir}/h2ph -a -d %{build_archlib} $i || true
+done
+
+# vendor directories (in this case for third party rpms)
+# perl doesn't create the auto subdirectory, but modules put things in it,
+# so we need to own it.
+
+mkdir -p $RPM_BUILD_ROOT%{perl_vendorarch}/auto
+mkdir -p $RPM_BUILD_ROOT%{perl_vendorlib}
+
+#
+# perl RPM macros
+#
+mkdir -p ${RPM_BUILD_ROOT}%{_rpmconfigdir}/macros.d
+install -p -m 644 %{SOURCE3} ${RPM_BUILD_ROOT}%{_rpmconfigdir}/macros.d/
+
+#
+# Core modules removal
+#
+# Dual-living binaries clashes on debuginfo files between perl and standalone
+# packages. Excluding is not enough, we need to remove them. This is
+# a work-around for rpmbuild bug #878863.
+find $RPM_BUILD_ROOT -type f -name '*.bs' -empty -delete
+chmod -R u+w $RPM_BUILD_ROOT/*
+
+# miniperl? As an interpreter? How odd. Anyway, a symlink does it:
+rm %{build_privlib}/ExtUtils/xsubpp
+ln -s ../../../bin/xsubpp %{build_privlib}/ExtUtils/
+
+# Don't need the .packlist
+rm %{build_archlib}/.packlist
+
+# Do not distribute File::Spec::VMS as it works on VMS only (bug #973713)
+# We cannot remove it in %%prep because dist/Cwd/t/Spec.t test needs it.
+rm %{build_archlib}/File/Spec/VMS.pm
+rm $RPM_BUILD_ROOT%{_mandir}/man3/File::Spec::VMS.3*
+
+# Fix some manpages to be UTF-8
+mkdir -p $RPM_BUILD_ROOT%{_mandir}/man1/
+pushd $RPM_BUILD_ROOT%{_mandir}/man1/
+  for i in perl588delta.1 perldelta.1 ; do
+    iconv -f MS-ANSI -t UTF-8 $i --output new-$i
+    rm $i
+    mv new-$i $i
+  done
+popd
+
+# for now, remove Bzip2:
+# Why? Now is missing Bzip2 files and provides
+##find $RPM_BUILD_ROOT -name Bzip2 | xargs rm -r
+##find $RPM_BUILD_ROOT -name '*B*zip2*'| xargs rm
+
+# tests -- FIXME need to validate that this all works as expected
+mkdir -p %{buildroot}%{perl5_testdir}/perl-tests
+
+# "core"
+tar -cf - t/ | ( cd %{buildroot}%{perl5_testdir}/perl-tests && tar -xf - )
+
+# "dual-lifed"
+for dir in `find ext/ -type d -name t -maxdepth 2` ; do
+
+    tar -cf - $dir | ( cd %{buildroot}%{perl5_testdir}/perl-tests/t && tar -xf - )
+done
+
+# Normalize shell bangs in tests.
+# brp-mangle-shebangs executed by rpm-build chokes on t/TEST.
+%{new_perl} -MConfig -i -pn \
+    -e 's"\A#!(?:perl|\./perl|/usr/bin/perl|/usr/bin/env perl)\b"$Config{startperl}"' \
+    $(find %{buildroot}%{perl5_testdir}/perl-tests -type f)
+
+%if %{with perl_enables_systemtap}
+# Systemtap tapset install
+mkdir -p %{buildroot}%{tapsetdir}
+%ifarch %{multilib_64_archs}
+%global libperl_stp libperl%{perl_version}-64.stp
+%else
+%global libperl_stp libperl%{perl_version}-32.stp
+%endif
+
+sed \
+  -e "s|LIBRARY_PATH|%{_libdir}/%{soname}|" \
+  %{SOURCE4} \
+  > %{buildroot}%{tapsetdir}/%{libperl_stp}
+%endif
+
+# TODO: Canonicalize test files (rewrite intrerpreter path, fix permissions)
+# XXX: We cannot rewrite ./perl before %%check phase. Otherwise the test
+# would run against system perl at build-time.
+# See __spec_check_pre global macro in macros.perl.
+#T_FILES=`find %%{buildroot}%%{perl5_testdir} -type f -name '*.t'`
+#%%fix_shbang_line $T_FILES
+#%%{__chmod} +x $T_FILES
+#%%{_fixperms} %%{buildroot}%%{perl5_testdir}
+#
+# lib/perl5db.t will fail if Term::ReadLine::Gnu is available
+%check
+%if %{with test}
+%{new_perl} -I/lib regen/lib_cleanup.pl
+pushd t
+%{new_perl} -I../lib porting/customized.t --regen
+popd
+%if %{parallel_tests}
+    JOBS=$(printf '%%s' "%{?_smp_mflags}" | sed 's/.*-j\([0-9][0-9]*\).*/\1/')
+    LC_ALL=C TEST_JOBS=$JOBS make test_harness
+%else
+    LC_ALL=C make test
+%endif
+%endif
+
+%ldconfig_scriptlets libs
+
+%files
+%{_mandir}/man1/*.1*
+%{_mandir}/man3/*.3*
+%{_bindir}/*
+%{archlib}/*
+%{privlib}/*
+
+
+# libs
+%exclude %dir %{archlib}
+%exclude %dir %{archlib}/auto
+%exclude %{archlib}/auto/re
+%exclude %dir %{archlib}/CORE
+%exclude %{archlib}/CORE/libperl.so
+%exclude %{archlib}/re.pm
+%exclude %{_libdir}/libperl.so.*
+%exclude %dir %{perl_vendorarch}
+%exclude %dir %{perl_vendorarch}/auto
+%exclude %dir %{privlib}
+%exclude %{privlib}/integer.pm
+%exclude %{privlib}/strict.pm
+%exclude %{privlib}/unicore
+%exclude %{privlib}/utf8.pm
+%exclude %{privlib}/utf8_heavy.pl
+%exclude %{privlib}/warnings.pm
+%exclude %{privlib}/XSLoader.pm
+%exclude %dir %{perl_vendorlib}
+%exclude %{_mandir}/man3/integer.*
+%exclude %{_mandir}/man3/re.*
+%exclude %{_mandir}/man3/strict.*
+%exclude %{_mandir}/man3/utf8.*
+%exclude %{_mandir}/man3/warnings.*
+%exclude %{_mandir}/man3/XSLoader.*
+
+# devel
+%exclude %{_bindir}/h2xs
+%exclude %{_mandir}/man1/h2xs*
+%exclude %{_bindir}/perlivp
+%exclude %{_mandir}/man1/perlivp*
+%exclude %{archlib}/CORE/*.h
+%exclude %{_libdir}/libperl.so
+%exclude %{_mandir}/man1/perlxs*
+%if %{with perl_enables_systemtap}
+%exclude %dir %{_datadir}/systemtap
+%exclude %dir %{_datadir}/systemtap/tapset
+%endif
+
+# utils
+%exclude %{_bindir}/c2ph
+%exclude %{_bindir}/h2ph
+%exclude %{_bindir}/perlbug
+%exclude %{_bindir}/perlthanks
+%exclude %{_bindir}/pl2pm
+%exclude %{_bindir}/pstruct
+%exclude %{_bindir}/splain
+%exclude %{privlib}/pod/perlutil.pod
+%exclude %{_mandir}/man1/c2ph.*
+%exclude %{_mandir}/man1/h2ph.*
+%exclude %{_mandir}/man1/perlbug.*
+%exclude %{_mandir}/man1/perlthanks.*
+%exclude %{_mandir}/man1/perlutil.*
+%exclude %{_mandir}/man1/pl2pm.*
+%exclude %{_mandir}/man1/pstruct.*
+%exclude %{_mandir}/man1/splain.*
+
+# Archive-Tar
+%exclude %{_bindir}/ptar
+%exclude %{_bindir}/ptardiff
+%exclude %{_bindir}/ptargrep
+%exclude %dir %{privlib}/Archive
+%exclude %{privlib}/Archive/Tar
+%exclude %{privlib}/Archive/Tar.pm
+%exclude %{_mandir}/man1/ptar.1*
+%exclude %{_mandir}/man1/ptardiff.1*
+%exclude %{_mandir}/man1/ptargrep.1*
+%exclude %{_mandir}/man3/Archive::Tar*
+
+# Attribute-Handlers
+%exclude %{privlib}/Attribute
+%exclude %{_mandir}/man3/Attribute::Handlers.*
+
+# autodie
+%exclude %{privlib}/autodie/
+%exclude %{privlib}/autodie.pm
+%exclude %{privlib}/Fatal.pm
+%exclude %{_mandir}/man3/autodie.3*
+%exclude %{_mandir}/man3/autodie::*
+%exclude %{_mandir}/man3/Fatal.3*
+
+# B-Debug
+%exclude %{privlib}/B/Debug.pm
+%exclude %{_mandir}/man3/B::Debug.3*
+
+# bignum
+%exclude %{privlib}/bigint.pm
+%exclude %{privlib}/bignum.pm
+%exclude %{privlib}/bigrat.pm
+%exclude %{privlib}/Math/BigFloat
+%exclude %{privlib}/Math/BigInt/Trace.pm
+%exclude %{_mandir}/man3/bigint.*
+%exclude %{_mandir}/man3/bignum.*
+%exclude %{_mandir}/man3/bigrat.*
+
+# Carp
+%exclude %{privlib}/Carp
+%exclude %{privlib}/Carp.*
+%exclude %{_mandir}/man3/Carp.*
+
+# Config-Perl-V
+%exclude %{privlib}/Config/Perl
+%exclude %{_mandir}/man3/Config::Perl::V.*
+
+# constant
+%exclude %{privlib}/constant.pm
+%exclude %{_mandir}/man3/constant.3*
+
+# CPAN
+%exclude %{_bindir}/cpan
+%exclude %dir %{privlib}/App
+%exclude %{privlib}/App/Cpan.pm
+%exclude %{privlib}/CPAN
+%exclude %{privlib}/CPAN.pm
+%exclude %{_mandir}/man1/cpan.1*
+%exclude %{_mandir}/man3/App::Cpan.*
+%exclude %{_mandir}/man3/CPAN.*
+%exclude %{_mandir}/man3/CPAN:*
+
+# CPAN-Meta
+%exclude %dir %{privlib}/CPAN
+%exclude %{privlib}/CPAN/Meta.pm
+%exclude %dir %{privlib}/CPAN/Meta
+%exclude %{privlib}/CPAN/Meta/Converter.pm
+%exclude %{privlib}/CPAN/Meta/Feature.pm
+%exclude %dir %{privlib}/CPAN/Meta/History
+%exclude %{privlib}/CPAN/Meta/History.pm
+%exclude %{privlib}/CPAN/Meta/Merge.pm
+%exclude %{privlib}/CPAN/Meta/Prereqs.pm
+%exclude %{privlib}/CPAN/Meta/Spec.pm
+%exclude %{privlib}/CPAN/Meta/Validator.pm
+%exclude %{_mandir}/man3/CPAN::Meta*
+
+# CPAN-Meta-Requirements
+%exclude %dir %{privlib}/CPAN
+%exclude %dir %{privlib}/CPAN/Meta
+%exclude %{privlib}/CPAN/Meta/Requirements.pm
+%exclude %{_mandir}/man3/CPAN::Meta::Requirements.3*
+
+# CPAN-Meta-YAML
+%exclude %dir %{privlib}/CPAN
+%exclude %dir %{privlib}/CPAN/Meta
+%exclude %{privlib}/CPAN/Meta/YAML.pm
+%exclude %{_mandir}/man3/CPAN::Meta::YAML*
+
+# Parse-CPAN-Meta
+%exclude %dir %{privlib}/Parse
+%exclude %dir %{privlib}/Parse/CPAN
+%exclude %{privlib}/Parse/CPAN/Meta.pm
+%exclude %{_mandir}/man3/Parse::CPAN::Meta.3*
+
+# Compress-Raw-Bzip2
+%exclude %dir %{archlib}/Compress
+%exclude %dir %{archlib}/Compress/Raw
+%exclude %{archlib}/Compress/Raw/Bzip2.pm
+%exclude %dir %{archlib}/auto/Compress
+%exclude %dir %{archlib}/auto/Compress/Raw
+%exclude %{archlib}/auto/Compress/Raw/Bzip2
+%exclude %{_mandir}/man3/Compress::Raw::Bzip2*
+
+# Compress-Raw-Zlib
+%exclude %dir %{archlib}/Compress
+%exclude %dir %{archlib}/Compress/Raw
+%exclude %{archlib}/Compress/Raw/Zlib.pm
+%exclude %dir %{archlib}/auto/Compress
+%exclude %dir %{archlib}/auto/Compress/Raw
+%exclude %{archlib}/auto/Compress/Raw/Zlib
+%exclude %{_mandir}/man3/Compress::Raw::Zlib*
+
+# Data-Dumper
+%exclude %dir %{archlib}/auto/Data
+%exclude %dir %{archlib}/auto/Data/Dumper
+%exclude %{archlib}/auto/Data/Dumper/Dumper.so
+%exclude %dir %{archlib}/Data
+%exclude %{archlib}/Data/Dumper.pm
+%exclude %{_mandir}/man3/Data::Dumper.3*
+
+# DB_File
+%exclude %{archlib}/DB_File.pm
+%exclude %dir %{archlib}/auto/DB_File
+%exclude %{archlib}/auto/DB_File/DB_File.so
+%exclude %{_mandir}/man3/DB_File*
+
+# Devel-Peek
+%dir %exclude %{archlib}/Devel
+%exclude %{archlib}/Devel/Peek.pm
+%dir %exclude %{archlib}/auto/Devel
+%exclude %{archlib}/auto/Devel/Peek
+%exclude %{_mandir}/man3/Devel::Peek.*
+
+# Devel-PPPort
+%exclude %{archlib}/Devel/PPPort.pm
+%exclude %{_mandir}/man3/Devel::PPPort.3*
+
+# Devel-SelfStubber
+%exclude %dir %{privlib}/Devel
+%exclude %{privlib}/Devel/SelfStubber.pm
+%exclude %{_mandir}/man3/Devel::SelfStubber.*
+
+# Digest
+%exclude %{privlib}/Digest.pm
+%exclude %dir %{privlib}/Digest
+%exclude %{privlib}/Digest/base.pm
+%exclude %{privlib}/Digest/file.pm
+%exclude %{_mandir}/man3/Digest.3*
+%exclude %{_mandir}/man3/Digest::base.3*
+%exclude %{_mandir}/man3/Digest::file.3*
+
+# Digest-MD5
+%exclude %dir %{archlib}/Digest
+%exclude %{archlib}/Digest/MD5.pm
+%exclude %dir %{archlib}/auto/Digest
+%exclude %{archlib}/auto/Digest/MD5
+%exclude %{_mandir}/man3/Digest::MD5.3*
+
+# Digest-SHA
+%exclude %{_bindir}/shasum
+%exclude %dir %{archlib}/Digest
+%exclude %{archlib}/Digest/SHA.pm
+%exclude %dir %{archlib}/auto/Digest
+%exclude %{archlib}/auto/Digest/SHA
+%exclude %{_mandir}/man1/shasum.1*
+%exclude %{_mandir}/man3/Digest::SHA.3*
+
+# Encode
+%exclude %{_bindir}/encguess
+%exclude %{_bindir}/piconv
+%exclude %{archlib}/Encode*
+%exclude %{archlib}/auto/Encode*
+%exclude %{privlib}/Encode
+%exclude %{_mandir}/man1/encguess.1*
+%exclude %{_mandir}/man1/piconv.1*
+%exclude %{_mandir}/man3/Encode*.3*
+
+# encoding
+%exclude %{archlib}/encoding.pm
+%exclude %{_mandir}/man3/encoding.3*
+
+# Encode-devel
+%exclude %{_bindir}/enc2xs
+%exclude %dir %{privlib}/Encode
+%exclude %{privlib}/Encode/*.e2x
+%exclude %{privlib}/Encode/encode.h
+%exclude %{_mandir}/man1/enc2xs.1*
+
+# Env
+%exclude %{privlib}/Env.pm
+%exclude %{_mandir}/man3/Env.3*
+
+# Errno
+%exclude %{archlib}/Errno.pm
+%exclude %{_mandir}/man3/Errno.*
+
+# Exporter
+%exclude %{privlib}/Exporter*
+%exclude %{_mandir}/man3/Exporter*
+
+# experimental
+%exclude %{privlib}/experimental*
+%exclude %{_mandir}/man3/experimental*
+
+# ExtUtils-CBuilder
+%exclude %{privlib}/ExtUtils/CBuilder
+%exclude %{privlib}/ExtUtils/CBuilder.pm
+%exclude %{_mandir}/man3/ExtUtils::CBuilder*
+
+# ExtUtils-Command
+%exclude %{privlib}/ExtUtils/Command.pm
+%exclude %{_mandir}/man3/ExtUtils::Command.*
+
+# ExtUtils-Embed
+%exclude %{privlib}/ExtUtils/Embed.pm
+%exclude %{_mandir}/man3/ExtUtils::Embed*
+
+# ExtUtils-Install
+%exclude %{privlib}/ExtUtils/Install.pm
+%exclude %{privlib}/ExtUtils/Installed.pm
+%exclude %{privlib}/ExtUtils/Packlist.pm
+%exclude %{_mandir}/man3/ExtUtils::Install.3*
+%exclude %{_mandir}/man3/ExtUtils::Installed.3*
+%exclude %{_mandir}/man3/ExtUtils::Packlist.3*
+
+# ExtUtils-Manifest
+%exclude %{privlib}/ExtUtils/Manifest.pm
+%exclude %{privlib}/ExtUtils/MANIFEST.SKIP
+%exclude %{_mandir}/man3/ExtUtils::Manifest.3*
+
+# ExtUtils-MakeMaker
+%exclude %{_bindir}/instmodsh
+%exclude %{privlib}/ExtUtils/Command
+%exclude %{privlib}/ExtUtils/Liblist
+%exclude %{privlib}/ExtUtils/Liblist.pm
+%exclude %{privlib}/ExtUtils/MakeMaker
+%exclude %{privlib}/ExtUtils/MakeMaker.pm
+%exclude %{privlib}/ExtUtils/MM.pm
+%exclude %{privlib}/ExtUtils/MM_*.pm
+%exclude %{privlib}/ExtUtils/MY.pm
+%exclude %{privlib}/ExtUtils/Mkbootstrap.pm
+%exclude %{privlib}/ExtUtils/Mksymlists.pm
+%exclude %{privlib}/ExtUtils/testlib.pm
+%exclude %{_mandir}/man1/instmodsh.1*
+%exclude %{_mandir}/man3/ExtUtils::Command::MM*
+%exclude %{_mandir}/man3/ExtUtils::Liblist.3*
+%exclude %{_mandir}/man3/ExtUtils::MM.3*
+%exclude %{_mandir}/man3/ExtUtils::MM_*
+%exclude %{_mandir}/man3/ExtUtils::MY.3*
+%exclude %{_mandir}/man3/ExtUtils::MakeMaker*
+%exclude %{_mandir}/man3/ExtUtils::Mkbootstrap.3*
+%exclude %{_mandir}/man3/ExtUtils::Mksymlists.3*
+%exclude %{_mandir}/man3/ExtUtils::testlib.3*
+
+# ExtUtils-Miniperl
+%exclude %{privlib}/ExtUtils/Miniperl.pm
+%exclude %{_mandir}/man3/ExtUtils::Miniperl.3*
+
+# ExtUtils-MM-Utils
+%exclude %dir %{privlib}/ExtUtils/MM
+%exclude %{privlib}/ExtUtils/MM/Utils.pm
+%exclude %{_mandir}/man3/ExtUtils::MM::Utils.*
+
+# ExtUtils-ParseXS
+%exclude %dir %{privlib}/ExtUtils/ParseXS
+%exclude %{privlib}/ExtUtils/ParseXS.pm
+%exclude %{privlib}/ExtUtils/ParseXS.pod
+%exclude %{privlib}/ExtUtils/ParseXS/Constants.pm
+%exclude %{privlib}/ExtUtils/ParseXS/CountLines.pm
+%exclude %{privlib}/ExtUtils/ParseXS/Eval.pm
+%exclude %{privlib}/ExtUtils/ParseXS/Utilities.pm
+%exclude %dir %{privlib}/ExtUtils/Typemaps
+%exclude %{privlib}/ExtUtils/Typemaps.pm
+%exclude %{privlib}/ExtUtils/Typemaps/Cmd.pm
+%exclude %{privlib}/ExtUtils/Typemaps/InputMap.pm
+%exclude %{privlib}/ExtUtils/Typemaps/OutputMap.pm
+%exclude %{privlib}/ExtUtils/Typemaps/Type.pm
+%exclude %{privlib}/ExtUtils/xsubpp
+%exclude %{_bindir}/xsubpp
+%exclude %{_mandir}/man1/xsubpp*
+%exclude %{_mandir}/man3/ExtUtils::ParseXS.3*
+%exclude %{_mandir}/man3/ExtUtils::ParseXS::Constants.3*
+%exclude %{_mandir}/man3/ExtUtils::ParseXS::Eval.3*
+%exclude %{_mandir}/man3/ExtUtils::ParseXS::Utilities.3*
+%exclude %{_mandir}/man3/ExtUtils::Typemaps.3*
+%exclude %{_mandir}/man3/ExtUtils::Typemaps::Cmd.3*
+%exclude %{_mandir}/man3/ExtUtils::Typemaps::InputMap.3*
+%exclude %{_mandir}/man3/ExtUtils::Typemaps::OutputMap.3*
+%exclude %{_mandir}/man3/ExtUtils::Typemaps::Type.3*
+
+# File-Fetch
+%exclude %{privlib}/File/Fetch.pm
+%exclude %{_mandir}/man3/File::Fetch.3*
+
+# File-Path
+%exclude %{privlib}/File/Path.pm
+%exclude %{_mandir}/man3/File::Path.3*
+
+# File-Temp
+%exclude %{privlib}/File/Temp.pm
+%exclude %{_mandir}/man3/File::Temp.3*
+
+# Filter
+%exclude %dir %{archlib}/auto/Filter
+%exclude %{archlib}/auto/Filter/Util
+%exclude %dir %{archlib}/Filter
+%exclude %{archlib}/Filter/Util
+%exclude %{privlib}/pod/perlfilter.pod
+%exclude %{_mandir}/man1/perlfilter.*
+%exclude %{_mandir}/man3/Filter::Util::*
+
+# Filter-Simple
+%exclude %dir %{privlib}/Filter
+%exclude %{privlib}/Filter/Simple.pm
+%exclude %{_mandir}/man3/Filter::Simple.3*
+
+# Getopt-Long
+%exclude %{privlib}/Getopt/Long.pm
+%exclude %{_mandir}/man3/Getopt::Long.3*
+
+# IO
+%exclude %dir %{archlib}/IO
+%exclude %{archlib}/IO.pm
+%exclude %{archlib}/IO/Dir.pm
+%exclude %{archlib}/IO/File.pm
+%exclude %{archlib}/IO/Handle.pm
+%exclude %{archlib}/IO/Pipe.pm
+%exclude %{archlib}/IO/Poll.pm
+%exclude %{archlib}/IO/Seekable.pm
+%exclude %{archlib}/IO/Select.pm
+%exclude %dir %{archlib}/IO/Socket
+%exclude %{archlib}/IO/Socket/INET.pm
+%exclude %{archlib}/IO/Socket/UNIX.pm
+%exclude %{archlib}/IO/Socket.pm
+%exclude %dir %{archlib}/auto/IO
+%exclude %{archlib}/auto/IO/IO.so
+%exclude %{_mandir}/man3/IO.*
+%exclude %{_mandir}/man3/IO::Dir.*
+%exclude %{_mandir}/man3/IO::File.*
+%exclude %{_mandir}/man3/IO::Handle.*
+%exclude %{_mandir}/man3/IO::Pipe.*
+%exclude %{_mandir}/man3/IO::Poll.*
+%exclude %{_mandir}/man3/IO::Seekable.*
+%exclude %{_mandir}/man3/IO::Select.*
+%exclude %{_mandir}/man3/IO::Socket::INET.*
+%exclude %{_mandir}/man3/IO::Socket::UNIX.*
+%exclude %{_mandir}/man3/IO::Socket.*
+
+# IO-Compress
+%exclude %{_bindir}/zipdetails
+%exclude %dir %{privlib}/IO
+%exclude %dir %{privlib}/IO/Compress
+%exclude %{privlib}/IO/Compress/FAQ.pod
+%exclude %{_mandir}/man1/zipdetails.*
+%exclude %{_mandir}/man3/IO::Compress::FAQ.*
+# Compress-Zlib
+%exclude %dir %{privlib}/Compress
+%exclude %{privlib}/Compress/Zlib.pm
+%exclude %{_mandir}/man3/Compress::Zlib*
+# IO-Compress-Base
+%exclude %{privlib}/File/GlobMapper.pm
+%exclude %dir %{privlib}/IO
+%exclude %dir %{privlib}/IO/Compress
+%exclude %{privlib}/IO/Compress/Base
+%exclude %{privlib}/IO/Compress/Base.pm
+%exclude %dir %{privlib}/IO/Uncompress
+%exclude %{privlib}/IO/Uncompress/AnyUncompress.pm
+%exclude %{privlib}/IO/Uncompress/Base.pm
+%exclude %{_mandir}/man3/File::GlobMapper.*
+%exclude %{_mandir}/man3/IO::Compress::Base.*
+%exclude %{_mandir}/man3/IO::Uncompress::AnyUncompress.*
+%exclude %{_mandir}/man3/IO::Uncompress::Base.*
+# IO-Compress-Zlib
+%exclude %dir %{privlib}/IO
+%exclude %dir %{privlib}/IO/Compress
+%exclude %{privlib}/IO/Compress/Adapter
+%exclude %{privlib}/IO/Compress/Deflate.pm
+%exclude %{privlib}/IO/Compress/Gzip
+%exclude %{privlib}/IO/Compress/Gzip.pm
+%exclude %{privlib}/IO/Compress/RawDeflate.pm
+%exclude %{privlib}/IO/Compress/Bzip2.pm
+%exclude %{privlib}/IO/Compress/Zip
+%exclude %{privlib}/IO/Compress/Zip.pm
+%exclude %{privlib}/IO/Compress/Zlib
+%exclude %dir %{privlib}/IO/Uncompress
+%exclude %{privlib}/IO/Uncompress/Adapter
+%exclude %{privlib}/IO/Uncompress/AnyInflate.pm
+%exclude %{privlib}/IO/Uncompress/Bunzip2.pm
+%exclude %{privlib}/IO/Uncompress/Gunzip.pm
+%exclude %{privlib}/IO/Uncompress/Inflate.pm
+%exclude %{privlib}/IO/Uncompress/RawInflate.pm
+%exclude %{privlib}/IO/Uncompress/Unzip.pm
+%exclude %{_mandir}/man3/IO::Compress::Deflate*
+%exclude %{_mandir}/man3/IO::Compress::Bzip2*
+%exclude %{_mandir}/man3/IO::Compress::Gzip*
+%exclude %{_mandir}/man3/IO::Compress::RawDeflate*
+%exclude %{_mandir}/man3/IO::Compress::Zip*
+%exclude %{_mandir}/man3/IO::Uncompress::AnyInflate*
+%exclude %{_mandir}/man3/IO::Uncompress::Bunzip2*
+%exclude %{_mandir}/man3/IO::Uncompress::Gunzip*
+%exclude %{_mandir}/man3/IO::Uncompress::Inflate*
+%exclude %{_mandir}/man3/IO::Uncompress::RawInflate*
+%exclude %{_mandir}/man3/IO::Uncompress::Unzip*
+
+# IO-Socket-IP
+%exclude %dir %{privlib}/IO
+%exclude %dir %{privlib}/IO/Socket
+%exclude %{privlib}/IO/Socket/IP.pm
+%exclude %{_mandir}/man3/IO::Socket::IP.*
+
+# IO-Zlib
+%exclude %dir %{privlib}/IO
+%exclude %{privlib}/IO/Zlib.pm
+%exclude %{_mandir}/man3/IO::Zlib.*
+
+# HTTP-Tiny
+%exclude %dir %{privlib}/HTTP
+%exclude %{privlib}/HTTP/Tiny.pm
+%exclude %{_mandir}/man3/HTTP::Tiny*
+
+# IPC-Cmd
+%exclude %{privlib}/IPC/Cmd.pm
+%exclude %{_mandir}/man3/IPC::Cmd.3*
+
+# IPC-SysV
+%exclude %{archlib}/auto/IPC
+%exclude %{archlib}/IPC/Msg.pm
+%exclude %{archlib}/IPC/Semaphore.pm
+%exclude %{archlib}/IPC/SharedMem.pm
+%exclude %{archlib}/IPC/SysV.pm
+%exclude %{_mandir}/man3/IPC::Msg.*
+%exclude %{_mandir}/man3/IPC::Semaphore.*
+%exclude %{_mandir}/man3/IPC::SharedMem.*
+%exclude %{_mandir}/man3/IPC::SysV.*
+
+# JSON-PP
+%exclude %{_bindir}/json_pp
+%exclude %dir %{privlib}/JSON
+%exclude %{privlib}/JSON/PP
+%exclude %{privlib}/JSON/PP.pm
+%exclude %{_mandir}/man1/json_pp.1*
+%exclude %{_mandir}/man3/JSON::PP.3*
+%exclude %{_mandir}/man3/JSON::PP::Boolean.3pm*
+
+# libnet
+%exclude %{privlib}/Net/Cmd.pm
+%exclude %{privlib}/Net/Config.pm
+%exclude %{privlib}/Net/Domain.pm
+%exclude %{privlib}/Net/FTP
+%exclude %{privlib}/Net/FTP.pm
+%exclude %{privlib}/Net/libnetFAQ.pod
+%exclude %{privlib}/Net/NNTP.pm
+%exclude %{privlib}/Net/Netrc.pm
+%exclude %{privlib}/Net/POP3.pm
+%exclude %{privlib}/Net/SMTP.pm
+%exclude %{privlib}/Net/Time.pm
+%exclude %{_mandir}/man3/Net::Cmd.*
+%exclude %{_mandir}/man3/Net::Config.*
+%exclude %{_mandir}/man3/Net::Domain.*
+%exclude %{_mandir}/man3/Net::FTP.*
+%exclude %{_mandir}/man3/Net::libnetFAQ.*
+%exclude %{_mandir}/man3/Net::NNTP.*
+%exclude %{_mandir}/man3/Net::Netrc.*
+%exclude %{_mandir}/man3/Net::POP3.*
+%exclude %{_mandir}/man3/Net::SMTP.*
+%exclude %{_mandir}/man3/Net::Time.*
+
+# libnetcfg
+%exclude %{_bindir}/libnetcfg
+%exclude %{_mandir}/man1/libnetcfg*
+
+# Locale-Codes
+%exclude %dir %{privlib}/Locale
+%exclude %{privlib}/Locale/Codes
+%exclude %{privlib}/Locale/Codes.*
+%exclude %{privlib}/Locale/Country.*
+%exclude %{privlib}/Locale/Currency.*
+%exclude %{privlib}/Locale/Language.*
+%exclude %{privlib}/Locale/Script.*
+%exclude %{_mandir}/man3/Locale::Codes::*
+%exclude %{_mandir}/man3/Locale::Codes.*
+%exclude %{_mandir}/man3/Locale::Country.*
+%exclude %{_mandir}/man3/Locale::Currency.*
+%exclude %{_mandir}/man3/Locale::Language.*
+%exclude %{_mandir}/man3/Locale::Script.*
+
+# Locale-Maketext
+%exclude %dir %{privlib}/Locale
+%exclude %dir %{privlib}/Locale/Maketext
+%exclude %{privlib}/Locale/Maketext.*
+%exclude %{privlib}/Locale/Maketext/Cookbook.*
+%exclude %{privlib}/Locale/Maketext/Guts.*
+%exclude %{privlib}/Locale/Maketext/GutsLoader.*
+%exclude %{privlib}/Locale/Maketext/TPJ13.*
+%exclude %{_mandir}/man3/Locale::Maketext.*
+%exclude %{_mandir}/man3/Locale::Maketext::Cookbook.*
+%exclude %{_mandir}/man3/Locale::Maketext::Guts.*
+%exclude %{_mandir}/man3/Locale::Maketext::GutsLoader.*
+%exclude %{_mandir}/man3/Locale::Maketext::TPJ13.*
+
+# Locale-Maketext-Simple
+%exclude %dir %{privlib}/Locale
+%exclude %dir %{privlib}/Locale/Maketext
+%exclude %{privlib}/Locale/Maketext/Simple.pm
+%exclude %{_mandir}/man3/Locale::Maketext::Simple.*
+
+# Math-BigInt
+%exclude %{privlib}/Math/BigFloat.pm
+%exclude %{privlib}/Math/BigInt.pm
+%exclude %dir %exclude %{privlib}/Math/BigInt
+%exclude %{privlib}/Math/BigInt/Calc.pm
+%exclude %{privlib}/Math/BigInt/CalcEmu.pm
+%exclude %{_mandir}/man3/Math::BigFloat.*
+%exclude %{_mandir}/man3/Math::BigInt.*
+%exclude %{_mandir}/man3/Math::BigInt::Calc.*
+%exclude %{_mandir}/man3/Math::BigInt::CalcEmu.*
+
+# Math-BigInt-FastCalc
+%exclude %{archlib}/Math
+%exclude %{archlib}/auto/Math
+%exclude %{_mandir}/man3/Math::BigInt::FastCalc.*
+
+# Math-BigRat
+%exclude %{privlib}/Math/BigRat.pm
+%exclude %{_mandir}/man3/Math::BigRat.*
+
+# Math-Complex
+%dir %exclude %{privlib}/Math
+%exclude %{privlib}/Math/Complex.pm
+%exclude %{privlib}/Math/Trig.pm
+%exclude %{_mandir}/man3/Math::Complex.*
+%exclude %{_mandir}/man3/Math::Trig.*
+
+# Memoize
+%exclude %{privlib}/Memoize
+%exclude %{privlib}/Memoize.pm
+%exclude %{_mandir}/man3/Memoize::*
+%exclude %{_mandir}/man3/Memoize.*
+
+# MIME-Base64
+%exclude %{archlib}/auto/MIME
+%exclude %{archlib}/MIME
+%exclude %{_mandir}/man3/MIME::*
+
+# Module-CoreList
+%exclude %dir %{privlib}/Module
+%exclude %{privlib}/Module/CoreList
+%exclude %{privlib}/Module/CoreList.pm
+%exclude %{privlib}/Module/CoreList.pod
+%exclude %{_mandir}/man3/Module::CoreList*
+
+# Module-CoreList-tools
+%exclude %{_bindir}/corelist
+%exclude %{_mandir}/man1/corelist*
+
+# Module-Load
+%exclude %dir %{privlib}/Module
+%exclude %{privlib}/Module/Load.pm
+%exclude %{_mandir}/man3/Module::Load.*
+
+# Module-Load-Conditional
+%exclude %dir %{privlib}/Module
+%exclude %{privlib}/Module/Load
+%exclude %{_mandir}/man3/Module::Load::Conditional*
+
+# Module-Loaded
+%exclude %dir %{privlib}/Module
+%exclude %{privlib}/Module/Loaded.pm
+%exclude %{_mandir}/man3/Module::Loaded*
+
+# Module-Metadata
+%exclude %dir %{privlib}/Module
+%exclude %{privlib}/Module/Metadata.pm
+%exclude %{_mandir}/man3/Module::Metadata.3pm*
+
+# Net-Ping
+%exclude %{privlib}/Net/Ping.pm
+%exclude %{_mandir}/man3/Net::Ping.*
+
+# PathTools
+%exclude %{archlib}/Cwd.pm
+%exclude %{archlib}/File/Spec*
+%exclude %{archlib}/auto/Cwd/
+%exclude %{_mandir}/man3/Cwd*
+%exclude %{_mandir}/man3/File::Spec*
+
+# Params-Check
+%exclude %{privlib}/Params/
+%exclude %{_mandir}/man3/Params::Check*
+
+# perlfaq
+%exclude %{privlib}/perlfaq.pm
+%exclude %{privlib}/pod/perlfaq*
+%exclude %{privlib}/pod/perlglossary.pod
+%exclude %{_mandir}/man1/perlfaq*
+%exclude %{_mandir}/man1/perlglossary.*
+
+# PerlIO-via-QuotedPrint
+%exclude %{privlib}/PerlIO
+%exclude %{_mandir}/man3/PerlIO::via::QuotedPrint.*
+
+# Perl-OSType
+%exclude %dir %{privlib}/Perl
+%exclude %{privlib}/Perl/OSType.pm
+%exclude %{_mandir}/man3/Perl::OSType.3pm*
+
+# open
+%exclude %{privlib}/open.pm
+%exclude %{_mandir}/man3/open.3*
+
+# parent
+%exclude %{privlib}/parent.pm
+%exclude %{_mandir}/man3/parent.3*
+
+# Pod-Checker
+%exclude %{_bindir}/podchecker
+%exclude %{privlib}/Pod/Checker.pm
+%exclude %{_mandir}/man1/podchecker.*
+%exclude %{_mandir}/man3/Pod::Checker.*
+
+# Pod-Escapes
+%exclude %{privlib}/Pod/Escapes.pm
+%exclude %{_mandir}/man3/Pod::Escapes.*
+
+# Pod-Html
+%exclude %{_bindir}/pod2html
+%exclude %{privlib}/Pod/Html.pm
+%exclude %{_mandir}/man1/pod2html.1*
+%exclude %{_mandir}/man3/Pod::Html.*
+
+# Pod-Parser
+%exclude %{_bindir}/podselect
+%exclude %{privlib}/Pod/Find.pm
+%exclude %{privlib}/Pod/InputObjects.pm
+%exclude %{privlib}/Pod/ParseUtils.pm
+%exclude %{privlib}/Pod/Parser.pm
+%exclude %{privlib}/Pod/PlainText.pm
+%exclude %{privlib}/Pod/Select.pm
+%exclude %{_mandir}/man1/podselect.1*
+%exclude %{_mandir}/man3/Pod::Find.*
+%exclude %{_mandir}/man3/Pod::InputObjects.*
+%exclude %{_mandir}/man3/Pod::ParseUtils.*
+%exclude %{_mandir}/man3/Pod::Parser.*
+%exclude %{_mandir}/man3/Pod::PlainText.*
+%exclude %{_mandir}/man3/Pod::Select.*
+
+# Pod-Perldoc
+%exclude %{_bindir}/perldoc
+%exclude %{privlib}/pod/perldoc.pod
+%exclude %{privlib}/Pod/Perldoc.pm
+%exclude %{privlib}/Pod/Perldoc/
+%exclude %{_mandir}/man1/perldoc.1*
+%exclude %{_mandir}/man3/Pod::Perldoc*
+
+# Pod-Usage
+%exclude %{_bindir}/pod2usage
+%exclude %{privlib}/Pod/Usage.pm
+%exclude %{_mandir}/man1/pod2usage.*
+%exclude %{_mandir}/man3/Pod::Usage.*
+
+# podlators
+%exclude %{_bindir}/pod2man
+%exclude %{_bindir}/pod2text
+%exclude %{privlib}/pod/perlpodstyle.pod
+%exclude %{privlib}/Pod/Man.pm
+%exclude %{privlib}/Pod/ParseLink.pm
+%exclude %{privlib}/Pod/Text
+%exclude %{privlib}/Pod/Text.pm
+%exclude %{_mandir}/man1/pod2man.1*
+%exclude %{_mandir}/man1/pod2text.1*
+%exclude %{_mandir}/man1/perlpodstyle.1*
+%exclude %{_mandir}/man3/Pod::Man*
+%exclude %{_mandir}/man3/Pod::ParseLink*
+%exclude %{_mandir}/man3/Pod::Text*
+
+# Pod-Simple
+%exclude %{privlib}/Pod/Simple/
+%exclude %{privlib}/Pod/Simple.pm
+%exclude %{privlib}/Pod/Simple.pod
+%exclude %{_mandir}/man3/Pod::Simple*
+
+# Scalar-List-Utils
+%exclude %{archlib}/List/
+%exclude %{archlib}/Scalar/
+%exclude %{archlib}/Sub/
+%exclude %{archlib}/auto/List/
+%exclude %{_mandir}/man3/List::Util*
+%exclude %{_mandir}/man3/Scalar::Util*
+%exclude %{_mandir}/man3/Sub::Util*
+
+# SelfLoader
+%exclude %{privlib}/SelfLoader.pm
+%exclude %{_mandir}/man3/SelfLoader*
+
+# Storable
+%exclude %{archlib}/Storable.pm
+%exclude %{archlib}/auto/Storable/
+%exclude %{_mandir}/man3/Storable.*
+
+# Sys-Syslog
+%exclude %{archlib}/Sys/Syslog.pm
+%exclude %{archlib}/auto/Sys/Syslog/
+%exclude %{_mandir}/man3/Sys::Syslog.*
+
+# Term-ANSIColor
+%exclude %{privlib}/Term/ANSIColor.pm
+%exclude %{_mandir}/man3/Term::ANSIColor*
+
+# Term-Cap
+%exclude %{privlib}/Term/Cap.pm
+%exclude %{_mandir}/man3/Term::Cap.*
+
+# Test
+%exclude %{privlib}/Test.pm
+%exclude %{_mandir}/man3/Test.*
+
+# Test-Harness
+%exclude %{_bindir}/prove
+%exclude %dir %{privlib}/App
+%exclude %{privlib}/App/Prove*
+%exclude %{privlib}/TAP*
+%exclude %dir %{privlib}/Test
+%exclude %{privlib}/Test/Harness*
+%exclude %{_mandir}/man1/prove.1*
+%exclude %{_mandir}/man3/App::Prove*
+%exclude %{_mandir}/man3/TAP*
+%exclude %{_mandir}/man3/Test::Harness*
+
+# Test-Simple
+%exclude %{privlib}/ok*
+%exclude %dir %{privlib}/Test
+%exclude %{privlib}/Test/More*
+%exclude %{privlib}/Test/Builder*
+%exclude %{privlib}/Test/Tester*
+%exclude %{privlib}/Test/Simple*
+%exclude %{privlib}/Test/Tutorial*
+%exclude %{privlib}/Test/use
+%exclude %{_mandir}/man3/ok*
+%exclude %{_mandir}/man3/Test::More*
+%exclude %{_mandir}/man3/Test::Builder*
+%exclude %{_mandir}/man3/Test::Tester*
+%exclude %{_mandir}/man3/Test::Simple*
+%exclude %{_mandir}/man3/Test::Tutorial*
+%exclude %{_mandir}/man3/Test::use::*
+
+# Text-Balanced
+%exclude %{privlib}/Text/Balanced.pm
+%exclude %{_mandir}/man3/Text::Balanced.*
+
+# Text-ParseWords
+%exclude %{privlib}/Text/ParseWords.pm
+%exclude %{_mandir}/man3/Text::ParseWords.*
+
+# Text-Tabs+Wrap
+%exclude %{privlib}/Text/Tabs.pm
+%exclude %{privlib}/Text/Wrap.pm
+%exclude %{_mandir}/man3/Text::Tabs.*
+%exclude %{_mandir}/man3/Text::Wrap.*
+
+# Thread-Queue
+%exclude %{privlib}/Thread/Queue.pm
+%exclude %{_mandir}/man3/Thread::Queue.*
+
+# Time-HiRes
+%exclude %dir %{archlib}/Time
+%exclude %{archlib}/Time/HiRes.pm
+%exclude %dir %{archlib}/auto/Time
+%exclude %{archlib}/auto/Time/HiRes
+%exclude %{_mandir}/man3/Time::HiRes.*
+
+# Time-Local
+%exclude %{privlib}/Time/Local.pm
+%exclude %{_mandir}/man3/Time::Local.*
+
+# Time-Piece
+%exclude %dir %{archlib}/Time
+%exclude %{archlib}/Time/Piece.pm
+%exclude %{archlib}/Time/Seconds.pm
+%exclude %dir %{archlib}/auto/Time
+%exclude %{archlib}/auto/Time/Piece
+%exclude %{_mandir}/man3/Time::Piece.3*
+%exclude %{_mandir}/man3/Time::Seconds.3*
+
+# Socket
+%exclude %dir %{archlib}/auto/Socket
+%exclude %{archlib}/auto/Socket/Socket.*
+%exclude %{archlib}/Socket.pm
+%exclude %{_mandir}/man3/Socket.3*
+
+# threads
+%dir %exclude %{archlib}/auto/threads
+%exclude %{archlib}/auto/threads/threads*
+%exclude %{archlib}/threads.pm
+%exclude %{_mandir}/man3/threads.3*
+
+# threads-shared
+%exclude %{archlib}/auto/threads/shared*
+%exclude %dir %{archlib}/threads
+%exclude %{archlib}/threads/shared*
+%exclude %{_mandir}/man3/threads::shared*
+
+# Unicode-Collate
+%dir %exclude %{archlib}/auto/Unicode
+%exclude %{archlib}/auto/Unicode/Collate
+%dir %exclude %{archlib}/Unicode
+%exclude %{archlib}/Unicode/Collate
+%exclude %{archlib}/Unicode/Collate.pm
+%exclude %{privlib}/Unicode/Collate
+%exclude %{_mandir}/man3/Unicode::Collate.*
+%exclude %{_mandir}/man3/Unicode::Collate::*
+
+# Unicode-Normalize
+%exclude %{archlib}/auto/Unicode/Normalize
+%exclude %{archlib}/Unicode/Normalize.pm
+%exclude %{_mandir}/man3/Unicode::Normalize.*
+
+# version
+%exclude %{privlib}/version.pm
+%exclude %{privlib}/version.pod
+%exclude %{privlib}/version/
+%exclude %{_mandir}/man3/version.3*
+%exclude %{_mandir}/man3/version::Internals.3*
+
+%files libs
+%license Artistic Copying
+%doc AUTHORS README Changes
+%dir %{archlib}
+%dir %{archlib}/auto
+%{archlib}/auto/re
+%dir %{archlib}/CORE
+%{archlib}/CORE/libperl.so
+%{archlib}/re.pm
+%{_libdir}/libperl.so.*
+%dir %{perl_vendorarch}
+%dir %{perl_vendorarch}/auto
+%dir %{privlib}
+%{privlib}/integer.pm
+%{privlib}/strict.pm
+%{privlib}/unicore
+%{privlib}/utf8.pm
+%{privlib}/utf8_heavy.pl
+%{privlib}/warnings.pm
+%{privlib}/XSLoader.pm
+%dir %{perl_vendorlib}
+%{_mandir}/man3/integer.*
+%{_mandir}/man3/re.*
+%{_mandir}/man3/strict.*
+%{_mandir}/man3/utf8.*
+%{_mandir}/man3/warnings.*
+%{_mandir}/man3/XSLoader.*
+
+%files devel
+%{_bindir}/h2xs
+%{_mandir}/man1/h2xs*
+%{_bindir}/perlivp
+%{_mandir}/man1/perlivp*
+%{archlib}/CORE/*.h
+%{_libdir}/libperl.so
+%{_mandir}/man1/perlxs*
+%if %{with perl_enables_systemtap}
+%dir %{_datadir}/systemtap
+%dir %{_datadir}/systemtap/tapset
+%{tapsetdir}/%{libperl_stp}
+%doc perl-example.stp
+%endif
+
+%files macros
+%{_rpmconfigdir}/macros.d/macros.perl
+
+%files tests
+%{perl5_testdir}/
+
+%files utils
+%{_bindir}/c2ph
+%{_bindir}/h2ph
+%{_bindir}/perlbug
+%{_bindir}/perlthanks
+%{_bindir}/pl2pm
+%{_bindir}/pstruct
+%{_bindir}/splain
+%dir %{privlib}/pod
+%{privlib}/pod/perlutil.pod
+%{_mandir}/man1/c2ph.*
+%{_mandir}/man1/h2ph.*
+%{_mandir}/man1/perlbug.*
+%{_mandir}/man1/perlthanks.*
+%{_mandir}/man1/perlutil.*
+%{_mandir}/man1/pl2pm.*
+%{_mandir}/man1/pstruct.*
+%{_mandir}/man1/splain.*
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%files Archive-Tar
+%{_bindir}/ptar
+%{_bindir}/ptardiff
+%{_bindir}/ptargrep
+%dir %{privlib}/Archive
+%{privlib}/Archive/Tar 
+%{privlib}/Archive/Tar.pm
+%{_mandir}/man1/ptar.1*
+%{_mandir}/man1/ptardiff.1*
+%{_mandir}/man1/ptargrep.1*
+%{_mandir}/man3/Archive::Tar* 
+%endif
+
+%files Attribute-Handlers
+%{privlib}/Attribute
+%{_mandir}/man3/Attribute::Handlers.*
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%files autodie
+%{privlib}/autodie/
+%{privlib}/autodie.pm
+%{privlib}/Fatal.pm
+%{_mandir}/man3/autodie.3*
+%{_mandir}/man3/autodie::*
+%{_mandir}/man3/Fatal.3*
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%files B-Debug
+%dir %{privlib}/B
+%{privlib}/B/Debug.pm
+%{_mandir}/man3/B::Debug.3*
+
+%files bignum
+%{privlib}/bigint.pm
+%{privlib}/bignum.pm
+%{privlib}/bigrat.pm
+%dir %{privlib}/Math
+%{privlib}/Math/BigFloat
+%dir %{privlib}/Math/BigInt
+%{privlib}/Math/BigInt/Trace.pm
+%{_mandir}/man3/bigint.*
+%{_mandir}/man3/bignum.*
+%{_mandir}/man3/bigrat.*
+
+%files Carp
+%{privlib}/Carp
+%{privlib}/Carp.*
+%{_mandir}/man3/Carp.*
+
+%files Compress-Raw-Bzip2
+%dir %{archlib}/Compress
+%dir %{archlib}/Compress/Raw
+%{archlib}/Compress/Raw/Bzip2.pm
+%dir %{archlib}/auto/Compress
+%dir %{archlib}/auto/Compress/Raw
+%{archlib}/auto/Compress/Raw/Bzip2
+%{_mandir}/man3/Compress::Raw::Bzip2*
+
+%files Compress-Raw-Zlib
+%dir %{archlib}/Compress
+%dir %{archlib}/Compress/Raw
+%{archlib}/Compress/Raw/Zlib.pm
+%dir %{archlib}/auto/Compress
+%dir %{archlib}/auto/Compress/Raw
+%{archlib}/auto/Compress/Raw/Zlib
+%{_mandir}/man3/Compress::Raw::Zlib*
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%files Config-Perl-V
+%dir %{privlib}/Config
+%{privlib}/Config/Perl
+%{_mandir}/man3/Config::Perl::V.*
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%files constant
+%{privlib}/constant.pm
+%{_mandir}/man3/constant.3*
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%files CPAN
+%{_bindir}/cpan
+%dir %{privlib}/App
+%{privlib}/App/Cpan.pm
+%{privlib}/CPAN
+%{privlib}/CPAN.pm
+%{_mandir}/man1/cpan.1*
+%{_mandir}/man3/App::Cpan.*
+%{_mandir}/man3/CPAN.*
+%{_mandir}/man3/CPAN:*
+%exclude %{privlib}/CPAN/Meta/
+%exclude %{privlib}/CPAN/Meta.pm
+%exclude %{_mandir}/man3/CPAN::Meta*
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%files CPAN-Meta
+%dir %{privlib}/CPAN/Meta
+%{privlib}/CPAN/Meta.pm
+%{privlib}/CPAN/Meta/Converter.pm
+%{privlib}/CPAN/Meta/Feature.pm
+%dir %{privlib}/CPAN/Meta/History
+%{privlib}/CPAN/Meta/History.pm
+%{privlib}/CPAN/Meta/Merge.pm
+%{privlib}/CPAN/Meta/Prereqs.pm
+%{privlib}/CPAN/Meta/Spec.pm
+%{privlib}/CPAN/Meta/Validator.pm
+%{_mandir}/man3/CPAN::Meta*
+%exclude %{_mandir}/man3/CPAN::Meta::YAML*
+%exclude %{_mandir}/man3/CPAN::Meta::Requirements*
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%files CPAN-Meta-Requirements
+%dir %{privlib}/CPAN
+%dir %{privlib}/CPAN/Meta
+%{privlib}/CPAN/Meta/Requirements.pm
+%{_mandir}/man3/CPAN::Meta::Requirements.3*
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%files CPAN-Meta-YAML
+%dir %{privlib}/CPAN
+%dir %{privlib}/CPAN/Meta
+%{privlib}/CPAN/Meta/YAML.pm
+%{_mandir}/man3/CPAN::Meta::YAML*
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%files Data-Dumper
+%dir %{archlib}/auto/Data
+%dir %{archlib}/auto/Data/Dumper
+%{archlib}/auto/Data/Dumper/Dumper.so
+%dir %{archlib}/Data
+%{archlib}/Data/Dumper.pm
+%{_mandir}/man3/Data::Dumper.3*
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%files DB_File
+%{archlib}/DB_File.pm
+%dir %{archlib}/auto/DB_File
+%{archlib}/auto/DB_File/DB_File.so
+%{_mandir}/man3/DB_File*
+%endif
+
+%files Devel-Peek
+%dir %{archlib}/Devel
+%{archlib}/Devel/Peek.pm
+%dir %{archlib}/auto/Devel
+%{archlib}/auto/Devel/Peek
+%{_mandir}/man3/Devel::Peek.*
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%files Devel-PPPort
+%dir %{archlib}/Devel
+%{archlib}/Devel/PPPort.pm
+%{_mandir}/man3/Devel::PPPort.3*
+%endif
+
+%files Devel-SelfStubber
+%dir %{privlib}/Devel
+%{privlib}/Devel/SelfStubber.pm
+%{_mandir}/man3/Devel::SelfStubber.*
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%files Digest
+%{privlib}/Digest.pm
+%dir %{privlib}/Digest
+%{privlib}/Digest/base.pm
+%{privlib}/Digest/file.pm
+%{_mandir}/man3/Digest.3*
+%{_mandir}/man3/Digest::base.3*
+%{_mandir}/man3/Digest::file.3*
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%files Digest-MD5
+%dir %{archlib}/Digest
+%{archlib}/Digest/MD5.pm
+%dir %{archlib}/auto/Digest
+%{archlib}/auto/Digest/MD5
+%{_mandir}/man3/Digest::MD5.3*
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%files Digest-SHA
+%{_bindir}/shasum
+%dir %{archlib}/Digest
+%{archlib}/Digest/SHA.pm
+%dir %{archlib}/auto/Digest
+%{archlib}/auto/Digest/SHA
+%{_mandir}/man1/shasum.1*
+%{_mandir}/man3/Digest::SHA.3*
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%files Encode
+%{_bindir}/encguess
+%{_bindir}/piconv
+%{archlib}/Encode*
+%{archlib}/auto/Encode*
+%{privlib}/Encode
+%exclude %{privlib}/Encode/*.e2x
+%exclude %{privlib}/Encode/encode.h
+%{_mandir}/man1/encguess.1*
+%{_mandir}/man1/piconv.1*
+%{_mandir}/man3/Encode*.3*
+
+%files encoding
+%{archlib}/encoding.pm
+%{_mandir}/man3/encoding.3*
+
+%files Encode-devel
+%{_bindir}/enc2xs
+%dir %{privlib}/Encode
+%{privlib}/Encode/*.e2x
+%{privlib}/Encode/encode.h
+%{_mandir}/man1/enc2xs.1*
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%files Env
+%{privlib}/Env.pm
+%{_mandir}/man3/Env.3*
+%endif
+
+%files Errno
+%{archlib}/Errno.pm
+%{_mandir}/man3/Errno.*
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%files Exporter
+%{privlib}/Exporter*
+%{_mandir}/man3/Exporter*
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%files experimental
+%{privlib}/experimental*
+%{_mandir}/man3/experimental*
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%files ExtUtils-CBuilder
+%dir %{privlib}/ExtUtils
+%{privlib}/ExtUtils/CBuilder
+%{privlib}/ExtUtils/CBuilder.pm
+%{_mandir}/man3/ExtUtils::CBuilder*
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%files ExtUtils-Command
+%dir %{privlib}/ExtUtils
+%{privlib}/ExtUtils/Command.pm
+%{_mandir}/man3/ExtUtils::Command.*
+%endif
+
+%files ExtUtils-Embed
+%dir %{privlib}/ExtUtils
+%{privlib}/ExtUtils/Embed.pm
+%{_mandir}/man3/ExtUtils::Embed*
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%files ExtUtils-Install
+%dir %{privlib}/ExtUtils
+%{privlib}/ExtUtils/Install.pm
+%{privlib}/ExtUtils/Installed.pm
+%{privlib}/ExtUtils/Packlist.pm
+%{_mandir}/man3/ExtUtils::Install.3*
+%{_mandir}/man3/ExtUtils::Installed.3*
+%{_mandir}/man3/ExtUtils::Packlist.3*
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%files ExtUtils-Manifest
+%dir %{privlib}/ExtUtils
+%{privlib}/ExtUtils/Manifest.pm
+%{privlib}/ExtUtils/MANIFEST.SKIP
+%{_mandir}/man3/ExtUtils::Manifest.3*
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%files ExtUtils-MakeMaker
+%{_bindir}/instmodsh
+%dir %{privlib}/ExtUtils
+%{privlib}/ExtUtils/Command/
+%{privlib}/ExtUtils/Liblist
+%{privlib}/ExtUtils/Liblist.pm
+%{privlib}/ExtUtils/MakeMaker
+%{privlib}/ExtUtils/MakeMaker.pm
+%{privlib}/ExtUtils/MM.pm
+%{privlib}/ExtUtils/MM_*.pm
+%{privlib}/ExtUtils/MY.pm
+%{privlib}/ExtUtils/Mkbootstrap.pm
+%{privlib}/ExtUtils/Mksymlists.pm
+%{privlib}/ExtUtils/testlib.pm
+%{_mandir}/man1/instmodsh.1*
+%{_mandir}/man3/ExtUtils::Command::MM*
+%{_mandir}/man3/ExtUtils::Liblist.3*
+%{_mandir}/man3/ExtUtils::MM.3*
+%{_mandir}/man3/ExtUtils::MM_*
+%{_mandir}/man3/ExtUtils::MY.3*
+%{_mandir}/man3/ExtUtils::MakeMaker*
+%{_mandir}/man3/ExtUtils::Mkbootstrap.3*
+%{_mandir}/man3/ExtUtils::Mksymlists.3*
+%{_mandir}/man3/ExtUtils::testlib.3*
+%endif
+
+%files ExtUtils-Miniperl
+%dir %{privlib}/ExtUtils
+%{privlib}/ExtUtils/Miniperl.pm
+%{_mandir}/man3/ExtUtils::Miniperl.3*
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%files ExtUtils-MM-Utils
+%dir %{privlib}/ExtUtils
+%dir %{privlib}/ExtUtils/MM
+%{privlib}/ExtUtils/MM/Utils.pm
+%{_mandir}/man3/ExtUtils::MM::Utils.*
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%files ExtUtils-ParseXS
+%dir %{privlib}/ExtUtils
+%dir %{privlib}/ExtUtils/ParseXS
+%{privlib}/ExtUtils/ParseXS.pm
+%{privlib}/ExtUtils/ParseXS.pod
+%{privlib}/ExtUtils/ParseXS/Constants.pm
+%{privlib}/ExtUtils/ParseXS/CountLines.pm
+%{privlib}/ExtUtils/ParseXS/Eval.pm
+%{privlib}/ExtUtils/ParseXS/Utilities.pm
+%dir %{privlib}/ExtUtils/Typemaps
+%{privlib}/ExtUtils/Typemaps.pm
+%{privlib}/ExtUtils/Typemaps/Cmd.pm
+%{privlib}/ExtUtils/Typemaps/InputMap.pm
+%{privlib}/ExtUtils/Typemaps/OutputMap.pm
+%{privlib}/ExtUtils/Typemaps/Type.pm
+%{privlib}/ExtUtils/xsubpp
+%{_bindir}/xsubpp
+%{_mandir}/man1/xsubpp*
+%{_mandir}/man3/ExtUtils::ParseXS.3*
+%{_mandir}/man3/ExtUtils::ParseXS::Constants.3*
+%{_mandir}/man3/ExtUtils::ParseXS::Eval.3*
+%{_mandir}/man3/ExtUtils::ParseXS::Utilities.3*
+%{_mandir}/man3/ExtUtils::Typemaps.3*
+%{_mandir}/man3/ExtUtils::Typemaps::Cmd.3*
+%{_mandir}/man3/ExtUtils::Typemaps::InputMap.3*
+%{_mandir}/man3/ExtUtils::Typemaps::OutputMap.3*
+%{_mandir}/man3/ExtUtils::Typemaps::Type.3*
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%files File-Fetch
+%dir %{privlib}/File
+%{privlib}/File/Fetch.pm
+%{_mandir}/man3/File::Fetch.3*
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%files File-Path
+%dir %{privlib}/File
+%{privlib}/File/Path.pm
+%{_mandir}/man3/File::Path.3*
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%files File-Temp
+%dir %{privlib}/File
+%{privlib}/File/Temp.pm
+%{_mandir}/man3/File::Temp.3*
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%files Filter
+%dir %{archlib}/auto/Filter
+%{archlib}/auto/Filter/Util
+%dir %{archlib}/Filter
+%{archlib}/Filter/Util
+%{privlib}/pod/perlfilter.pod
+%{_mandir}/man1/perlfilter.*
+%{_mandir}/man3/Filter::Util::*
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%files Filter-Simple
+%dir %{privlib}/Filter
+%{privlib}/Filter/Simple.pm
+%{_mandir}/man3/Filter::Simple.3*
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%files Getopt-Long
+%dir %{privlib}/Getopt
+%{privlib}/Getopt/Long.pm
+%{_mandir}/man3/Getopt::Long.3*
+%endif
+
+%files IO
+%dir %{archlib}/IO
+%{archlib}/IO.pm
+%{archlib}/IO/Dir.pm
+%{archlib}/IO/File.pm
+%{archlib}/IO/Handle.pm
+%{archlib}/IO/Pipe.pm
+%{archlib}/IO/Poll.pm
+%{archlib}/IO/Seekable.pm
+%{archlib}/IO/Select.pm
+%dir %{archlib}/IO/Socket
+%{archlib}/IO/Socket/INET.pm
+%{archlib}/IO/Socket/UNIX.pm
+%{archlib}/IO/Socket.pm
+%dir %{archlib}/auto/IO
+%{archlib}/auto/IO/IO.so
+%{_mandir}/man3/IO.*
+%{_mandir}/man3/IO::Dir.*
+%{_mandir}/man3/IO::File.*
+%{_mandir}/man3/IO::Handle.*
+%{_mandir}/man3/IO::Pipe.*
+%{_mandir}/man3/IO::Poll.*
+%{_mandir}/man3/IO::Seekable.*
+%{_mandir}/man3/IO::Select.*
+%{_mandir}/man3/IO::Socket::INET.*
+%{_mandir}/man3/IO::Socket::UNIX.*
+%{_mandir}/man3/IO::Socket.*
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%files IO-Compress
+# IO-Compress
+%{_bindir}/zipdetails
+%dir %{privlib}/IO
+%dir %{privlib}/IO/Compress
+%{privlib}/IO/Compress/FAQ.pod
+%{_mandir}/man1/zipdetails.*
+%{_mandir}/man3/IO::Compress::FAQ.*
+# Compress-Zlib
+%dir %{privlib}/Compress
+%{privlib}/Compress/Zlib.pm
+%{_mandir}/man3/Compress::Zlib*
+#IO-Compress-Base
+%dir %{privlib}/File
+%{privlib}/File/GlobMapper.pm
+%dir %{privlib}/IO
+%dir %{privlib}/IO/Compress
+%{privlib}/IO/Compress/Base
+%{privlib}/IO/Compress/Base.pm
+%dir %{privlib}/IO/Uncompress
+%{privlib}/IO/Uncompress/AnyUncompress.pm
+%{privlib}/IO/Uncompress/Base.pm
+%{_mandir}/man3/File::GlobMapper.*
+%{_mandir}/man3/IO::Compress::Base.*
+%{_mandir}/man3/IO::Uncompress::AnyUncompress.*
+%{_mandir}/man3/IO::Uncompress::Base.*
+# IO-Compress-Zlib
+%dir %{privlib}/IO
+%dir %{privlib}/IO/Compress
+%{privlib}/IO/Compress/Adapter
+%{privlib}/IO/Compress/Deflate.pm
+%{privlib}/IO/Compress/Bzip2.pm
+%{privlib}/IO/Compress/Gzip
+%{privlib}/IO/Compress/Gzip.pm
+%{privlib}/IO/Compress/RawDeflate.pm
+%{privlib}/IO/Compress/Zip
+%{privlib}/IO/Compress/Zip.pm
+%{privlib}/IO/Compress/Zlib
+%dir %{privlib}/IO/Uncompress
+%{privlib}/IO/Uncompress/Adapter/
+%{privlib}/IO/Uncompress/AnyInflate.pm
+%{privlib}/IO/Uncompress/Bunzip2.pm
+%{privlib}/IO/Uncompress/Gunzip.pm
+%{privlib}/IO/Uncompress/Inflate.pm
+%{privlib}/IO/Uncompress/RawInflate.pm
+%{privlib}/IO/Uncompress/Unzip.pm
+%{_mandir}/man3/IO::Compress::Deflate*
+%{_mandir}/man3/IO::Compress::Gzip*
+%{_mandir}/man3/IO::Compress::Bzip2*
+%{_mandir}/man3/IO::Compress::RawDeflate*
+%{_mandir}/man3/IO::Compress::Zip*
+%{_mandir}/man3/IO::Uncompress::AnyInflate*
+%{_mandir}/man3/IO::Uncompress::Bunzip2*
+%{_mandir}/man3/IO::Uncompress::Gunzip*
+%{_mandir}/man3/IO::Uncompress::Inflate*
+%{_mandir}/man3/IO::Uncompress::RawInflate*
+%{_mandir}/man3/IO::Uncompress::Unzip*
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%files IO-Socket-IP
+%dir %{privlib}/IO
+%dir %{privlib}/IO/Socket
+%{privlib}/IO/Socket/IP.pm
+%{_mandir}/man3/IO::Socket::IP.*
+%endif
+
+%files IO-Zlib
+%dir %{privlib}/IO
+%{privlib}/IO/Zlib.pm
+%{_mandir}/man3/IO::Zlib.*
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%files HTTP-Tiny
+%dir %{privlib}/HTTP
+%{privlib}/HTTP/Tiny.pm
+%{_mandir}/man3/HTTP::Tiny*
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%files IPC-Cmd
+%dir %{privlib}/IPC
+%{privlib}/IPC/Cmd.pm
+%{_mandir}/man3/IPC::Cmd.3*
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%files IPC-SysV
+%{archlib}/auto/IPC
+%dir %{archlib}/IPC
+%{archlib}/IPC/Msg.pm
+%{archlib}/IPC/Semaphore.pm
+%{archlib}/IPC/SharedMem.pm
+%{archlib}/IPC/SysV.pm
+%{_mandir}/man3/IPC::Msg.*
+%{_mandir}/man3/IPC::Semaphore.*
+%{_mandir}/man3/IPC::SharedMem.*
+%{_mandir}/man3/IPC::SysV.*
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%files JSON-PP
+%{_bindir}/json_pp
+%dir %{privlib}/JSON
+%{privlib}/JSON/PP
+%{privlib}/JSON/PP.pm
+%{_mandir}/man1/json_pp.1*
+%{_mandir}/man3/JSON::PP.3*
+%{_mandir}/man3/JSON::PP::Boolean.3pm*
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%files libnet
+%dir %{privlib}/Net
+%{privlib}/Net/Cmd.pm
+%{privlib}/Net/Config.pm
+%{privlib}/Net/Domain.pm
+%{privlib}/Net/FTP
+%{privlib}/Net/FTP.pm
+%{privlib}/Net/libnetFAQ.pod
+%{privlib}/Net/NNTP.pm
+%{privlib}/Net/Netrc.pm
+%{privlib}/Net/POP3.pm
+%{privlib}/Net/SMTP.pm
+%{privlib}/Net/Time.pm
+%{_mandir}/man3/Net::Cmd.*
+%{_mandir}/man3/Net::Config.*
+%{_mandir}/man3/Net::Domain.*
+%{_mandir}/man3/Net::FTP.*
+%{_mandir}/man3/Net::libnetFAQ.*
+%{_mandir}/man3/Net::NNTP.*
+%{_mandir}/man3/Net::Netrc.*
+%{_mandir}/man3/Net::POP3.*
+%{_mandir}/man3/Net::SMTP.*
+%{_mandir}/man3/Net::Time.*
+%endif
+
+%files libnetcfg
+%{_bindir}/libnetcfg
+%{_mandir}/man1/libnetcfg*
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%files Locale-Codes
+%dir %{privlib}/Locale
+%{privlib}/Locale/Codes
+%{privlib}/Locale/Codes.*
+%{privlib}/Locale/Country.*
+%{privlib}/Locale/Currency.*
+%{privlib}/Locale/Language.*
+%{privlib}/Locale/Script.*
+%{_mandir}/man3/Locale::Codes::*
+%{_mandir}/man3/Locale::Codes.*
+%{_mandir}/man3/Locale::Country.*
+%{_mandir}/man3/Locale::Currency.*
+%{_mandir}/man3/Locale::Language.*
+%{_mandir}/man3/Locale::Script.*
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%files Locale-Maketext
+%dir %{privlib}/Locale
+%dir %{privlib}/Locale/Maketext
+%{privlib}/Locale/Maketext.*
+%{privlib}/Locale/Maketext/Cookbook.*
+%{privlib}/Locale/Maketext/Guts.*
+%{privlib}/Locale/Maketext/GutsLoader.*
+%{privlib}/Locale/Maketext/TPJ13.*
+%{_mandir}/man3/Locale::Maketext.*
+%{_mandir}/man3/Locale::Maketext::Cookbook.*
+%{_mandir}/man3/Locale::Maketext::Guts.*
+%{_mandir}/man3/Locale::Maketext::GutsLoader.*
+%{_mandir}/man3/Locale::Maketext::TPJ13.*
+%endif
+
+%files Locale-Maketext-Simple
+%dir %{privlib}/Locale
+%dir %{privlib}/Locale/Maketext
+%{privlib}/Locale/Maketext/Simple.pm
+%{_mandir}/man3/Locale::Maketext::Simple.*
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%files Math-BigInt
+%dir %{privlib}/Math
+%{privlib}/Math/BigFloat.pm
+%{privlib}/Math/BigInt.pm
+%dir %{privlib}/Math/BigInt
+%{privlib}/Math/BigInt/Calc.pm
+%{privlib}/Math/BigInt/CalcEmu.pm
+%{_mandir}/man3/Math::BigFloat.*
+%{_mandir}/man3/Math::BigInt.*
+%{_mandir}/man3/Math::BigInt::Calc.*
+%{_mandir}/man3/Math::BigInt::CalcEmu.*
+
+%files Math-BigInt-FastCalc
+%{archlib}/Math
+%{archlib}/auto/Math
+%{_mandir}/man3/Math::BigInt::FastCalc.*
+
+%files Math-BigRat
+%dir %{privlib}/Math
+%{privlib}/Math/BigRat.pm
+%{_mandir}/man3/Math::BigRat.*
+%endif
+
+%files Math-Complex
+%dir %{privlib}/Math
+%{privlib}/Math/Complex.pm
+%{privlib}/Math/Trig.pm
+%{_mandir}/man3/Math::Complex.*
+%{_mandir}/man3/Math::Trig.*
+
+%files Memoize
+%{privlib}/Memoize
+%{privlib}/Memoize.pm
+%{_mandir}/man3/Memoize::*
+%{_mandir}/man3/Memoize.*
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%files MIME-Base64
+%{archlib}/auto/MIME
+%{archlib}/MIME
+%{_mandir}/man3/MIME::*
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%files Module-CoreList
+%dir %{privlib}/Module
+%{privlib}/Module/CoreList
+%{privlib}/Module/CoreList.pm
+%{privlib}/Module/CoreList.pod
+%{_mandir}/man3/Module::CoreList*
+
+%files Module-CoreList-tools
+%{_bindir}/corelist
+%{_mandir}/man1/corelist*
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%files Module-Load
+%dir %{privlib}/Module
+%{privlib}/Module/Load.pm
+%{_mandir}/man3/Module::Load.*
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%files Module-Load-Conditional
+%dir %{privlib}/Module
+%{privlib}/Module/Load
+%{_mandir}/man3/Module::Load::Conditional* 
+%endif
+
+%files Module-Loaded
+%dir %{privlib}/Module
+%{privlib}/Module/Loaded.pm
+%{_mandir}/man3/Module::Loaded*
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%files Module-Metadata
+%dir %{privlib}/Module
+%{privlib}/Module/Metadata.pm
+%{_mandir}/man3/Module::Metadata.3pm*
+%endif
+
+%files Net-Ping
+%dir %{privlib}/Net
+%{privlib}/Net/Ping.pm
+%{_mandir}/man3/Net::Ping.*
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%files PathTools
+%{archlib}/Cwd.pm
+%dir %{archlib}/File
+%{archlib}/File/Spec*
+%{archlib}/auto/Cwd
+%{_mandir}/man3/Cwd*
+%{_mandir}/man3/File::Spec*
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%files Params-Check
+%{privlib}/Params/
+%{_mandir}/man3/Params::Check*
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%files Parse-CPAN-Meta
+%dir %{privlib}/Parse/
+%dir %{privlib}/Parse/CPAN/
+%{privlib}/Parse/CPAN/Meta.pm
+%{_mandir}/man3/Parse::CPAN::Meta.3*
+%endif
+
+%files open
+%{privlib}/open.pm
+%{_mandir}/man3/open.3*
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%files parent
+%{privlib}/parent.pm
+%{_mandir}/man3/parent.3*
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%files perlfaq
+%{privlib}/perlfaq.pm
+%dir %{privlib}/pod
+%{privlib}/pod/perlfaq*
+%{privlib}/pod/perlglossary.pod
+%{_mandir}/man1/perlfaq*
+%{_mandir}/man1/perlglossary.*
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%files PerlIO-via-QuotedPrint
+%{privlib}/PerlIO
+%{_mandir}/man3/PerlIO::via::QuotedPrint.*
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%files Perl-OSType
+%dir %{privlib}/Perl
+%{privlib}/Perl/OSType.pm
+%{_mandir}/man3/Perl::OSType.3pm*
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%files Pod-Checker
+%{_bindir}/podchecker
+%dir %{privlib}/Pod
+%{privlib}/Pod/Checker.pm
+%{_mandir}/man1/podchecker.*
+%{_mandir}/man3/Pod::Checker.*
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%files Pod-Escapes
+%dir %{privlib}/Pod
+%{privlib}/Pod/Escapes.pm
+%{_mandir}/man3/Pod::Escapes.*
+%endif
+
+%files Pod-Html
+%license Pod-Html-license-clarification
+%dir %{privlib}/Pod
+%{_bindir}/pod2html
+%{privlib}/Pod/Html.pm
+%{_mandir}/man1/pod2html.1*
+%{_mandir}/man3/Pod::Html.*
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%files Pod-Parser
+%{_bindir}/podselect
+%dir %{privlib}/Pod
+%{privlib}/Pod/Find.pm
+%{privlib}/Pod/InputObjects.pm
+%{privlib}/Pod/ParseUtils.pm
+%{privlib}/Pod/Parser.pm
+%{privlib}/Pod/PlainText.pm
+%{privlib}/Pod/Select.pm
+%{_mandir}/man1/podselect.1*
+%{_mandir}/man3/Pod::Find.*
+%{_mandir}/man3/Pod::InputObjects.*
+%{_mandir}/man3/Pod::ParseUtils.*
+%{_mandir}/man3/Pod::Parser.*
+%{_mandir}/man3/Pod::PlainText.*
+%{_mandir}/man3/Pod::Select.*
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%files Pod-Perldoc
+%{_bindir}/perldoc
+%{privlib}/pod/perldoc.pod
+%dir %{privlib}/Pod
+%{privlib}/Pod/Perldoc
+%{privlib}/Pod/Perldoc.pm
+%{_mandir}/man1/perldoc.1*
+%{_mandir}/man3/Pod::Perldoc*
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%files Pod-Usage
+%{_bindir}/pod2usage
+%dir %{privlib}/Pod
+%{privlib}/Pod/Usage.pm
+%{_mandir}/man1/pod2usage.*
+%{_mandir}/man3/Pod::Usage.*
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%files podlators
+%{_bindir}/pod2man
+%{_bindir}/pod2text
+%{privlib}/pod/perlpodstyle.pod
+%dir %{privlib}/Pod
+%{privlib}/Pod/Man.pm
+%{privlib}/Pod/ParseLink.pm
+%{privlib}/Pod/Text
+%{privlib}/Pod/Text.pm
+%{_mandir}/man1/pod2man.1*
+%{_mandir}/man1/pod2text.1*
+%{_mandir}/man1/perlpodstyle.1*
+%{_mandir}/man3/Pod::Man*
+%{_mandir}/man3/Pod::ParseLink*
+%{_mandir}/man3/Pod::Text*
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%files Pod-Simple
+%dir %{privlib}/Pod
+%{privlib}/Pod/Simple
+%{privlib}/Pod/Simple.pm
+%{privlib}/Pod/Simple.pod
+%{_mandir}/man3/Pod::Simple*
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%files Scalar-List-Utils
+%{archlib}/List
+%{archlib}/Scalar
+%{archlib}/Sub
+%{archlib}/auto/List
+%{_mandir}/man3/List::Util*
+%{_mandir}/man3/Scalar::Util*
+%{_mandir}/man3/Sub::Util*
+%endif
+
+%files SelfLoader
+%{privlib}/SelfLoader.pm
+%{_mandir}/man3/SelfLoader*
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%files Sys-Syslog
+%dir %{archlib}/Sys
+%{archlib}/Sys/Syslog.pm
+%dir %{archlib}/auto/Sys
+%{archlib}/auto/Sys/Syslog
+%{_mandir}/man3/Sys::Syslog.*
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%files Socket
+%dir %{archlib}/auto/Socket
+%{archlib}/auto/Socket/Socket.*
+%{archlib}/Socket.pm
+%{_mandir}/man3/Socket.3*
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%files Storable
+%{archlib}/Storable.pm
+%{archlib}/auto/Storable
+%{_mandir}/man3/Storable.*
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%files Term-ANSIColor
+%dir %{privlib}/Term
+%{privlib}/Term/ANSIColor.pm
+%{_mandir}/man3/Term::ANSIColor*
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%files Term-Cap
+%dir %{privlib}/Term
+%{privlib}/Term/Cap.pm
+%{_mandir}/man3/Term::Cap.*
+%endif
+
+%files Test
+%{privlib}/Test.pm
+%{_mandir}/man3/Test.*
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%files Test-Harness
+%{_bindir}/prove
+%dir %{privlib}/App
+%{privlib}/App/Prove*
+%{privlib}/TAP*
+%dir %{privlib}/Test
+%{privlib}/Test/Harness*
+%{_mandir}/man1/prove.1*
+%{_mandir}/man3/App::Prove*
+%{_mandir}/man3/TAP*
+%{_mandir}/man3/Test::Harness*
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%files Test-Simple
+%{privlib}/ok*
+%dir %{privlib}/Test
+%{privlib}/Test/More*
+%{privlib}/Test/Builder*
+%{privlib}/Test/Tester*
+%{privlib}/Test/Simple*
+%{privlib}/Test/Tutorial*
+%{privlib}/Test/use
+%{_mandir}/man3/ok*
+%{_mandir}/man3/Test::More*
+%{_mandir}/man3/Test::Builder*
+%{_mandir}/man3/Test::Tester*
+%{_mandir}/man3/Test::Simple*
+%{_mandir}/man3/Test::Tutorial*
+%{_mandir}/man3/Test::use::*
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%files Text-Balanced
+%dir %{privlib}/Text
+%{privlib}/Text/Balanced.pm
+%{_mandir}/man3/Text::Balanced.*
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%files Text-ParseWords
+%dir %{privlib}/Text
+%{privlib}/Text/ParseWords.pm
+%{_mandir}/man3/Text::ParseWords.*
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%files Text-Tabs+Wrap
+%dir %{privlib}/Text
+%{privlib}/Text/Tabs.pm
+%{privlib}/Text/Wrap.pm
+%{_mandir}/man3/Text::Tabs.*
+%{_mandir}/man3/Text::Wrap.*
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%files Thread-Queue
+%dir %{privlib}/Thread
+%{privlib}/Thread/Queue.pm
+%{_mandir}/man3/Thread::Queue.*
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%files Time-HiRes
+%dir %{archlib}/Time
+%{archlib}/Time/HiRes.pm
+%dir %{archlib}/auto/Time
+%{archlib}/auto/Time/HiRes
+%{_mandir}/man3/Time::HiRes.*
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%files Time-Local
+%dir %{privlib}/Time
+%{privlib}/Time/Local.pm
+%{_mandir}/man3/Time::Local.*
+%endif
+
+%files Time-Piece
+%dir %{archlib}/Time
+%{archlib}/Time/Piece.pm 
+%{archlib}/Time/Seconds.pm
+%dir %{archlib}/auto/Time
+%{archlib}/auto/Time/Piece
+%{_mandir}/man3/Time::Piece.3*
+%{_mandir}/man3/Time::Seconds.3*
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%files threads
+%dir %{archlib}/auto/threads
+%{archlib}/auto/threads/threads*
+%{archlib}/threads.pm
+%{_mandir}/man3/threads.3*
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%files threads-shared
+%dir %{archlib}/auto/threads
+%{archlib}/auto/threads/shared*
+%dir %{archlib}/threads
+%{archlib}/threads/shared*
+%{_mandir}/man3/threads::shared*
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%files Unicode-Collate
+%dir %{archlib}/auto/Unicode
+%{archlib}/auto/Unicode/Collate
+%dir %{archlib}/Unicode
+%{archlib}/Unicode/Collate
+%{archlib}/Unicode/Collate.pm
+%dir %{privlib}/Unicode
+%{privlib}/Unicode/Collate
+%{_mandir}/man3/Unicode::Collate.*
+%{_mandir}/man3/Unicode::Collate::*
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%files Unicode-Normalize
+%dir %{archlib}/auto/Unicode
+%{archlib}/auto/Unicode/Normalize
+%dir %{archlib}/Unicode
+%{archlib}/Unicode/Normalize.pm
+%{_mandir}/man3/Unicode::Normalize.*
+%endif
+
+%if %{dual_life} || %{rebuild_from_scratch}
+%files version
+%{privlib}/version.pm
+%{privlib}/version.pod
+%{privlib}/version/
+%{_mandir}/man3/version.3*
+%{_mandir}/man3/version::Internals.3*
+%endif
+
+%files core
+# Nothing. Nada. Zilch. Zarro. Uh uh. Nope. Sorry.
+
+%files interpreter
+# Empty on purpose.
+
+# Old changelog entries are preserved in CVS.
+%changelog
+* Mon Mar 25 2019 Jitka Plesnikova <jplesnik@redhat.com> - 4:5.24.4-404
+- Fix annocheck failure by enabling hardening (bug #1636329)
+
+* Thu Feb 07 2019 Petr Pisar <ppisar@redhat.com> - 4:5.24.4-403
+- Require perl-interpreter from perl (bug #1670435)
+
+* Thu Jan 31 2019 Petr Pisar <ppisar@redhat.com> - 4:5.24.4-402
+- Add a dummy perl-interpreter package to mask non-modular one (bug #1670435)
+
+* Wed Dec 05 2018 Jitka Plesnikova <jplesnik@redhat.com> - 4:5.24.4-401
+- Resolves: #1656293
+  - Fix CVE-2018-18311 Integer overflow leading to buffer overflow
+  - Fix CVE-2018-18312 Heap-buffer-overflow write in regcomp.c
+  - Fix CVE-2018-18313 Heap-buffer-overflow read in regcomp.c
+  - Fix CVE-2018-18314 Heap-buffer-overflow write in regcomp.c
+
+* Fri Nov 02 2018 Petr Pisar <ppisar@redhat.com> - 4:5.24.4-400
+- Install Encode developmental files when installing complete Perl
+  (bug #1645225)
+
+* Tue Oct 02 2018 Jitka Plesnikova <jplesnik@redhat.com> - 4:5.24.4-399
+- Fix annocheck failure by passing CFLAGS to dtrace (bug #1630617)
+
+* Mon Jul 09 2018 Petr Pisar <ppisar@redhat.com> - 4:5.24.4-398
+- Adjust tests to gdbm-1.15 (RT#133295)
+
+* Mon Apr 16 2018 Petr Pisar <ppisar@redhat.com> - 4:5.24.4-397
+- 5.24.4 bump
+- Fix CVE-2018-6913 (heap buffer overflow in pp_pack.c) (bug #1567776)
+- Fix CVE-2018-6798 (heap read overflow in regexec.c) (bug #1567777)
+- Fix CVE-2018-6797 (heap write overflow in regcomp.c) (bug #1567778)
+
+* Tue Feb 06 2018 Petr Pisar <ppisar@redhat.com> - 4:5.24.3-396
+- Fix handling attribute specification on our variables (RT#131597)
+- Remove invalid macro definitions from macros.perl (bug #1532539)
+- Fix a crash when a match for inversely repeated group fails (RT#132017)
+- Fix an overflow when parsing a character range with no preceding character
+  (RT#132245)
+- Fix walking symbol table for ISA in Carp
+- Fix handling file names with null bytes in stat and lstat functions
+  (RT#131895)
+- Fix a crash when untying an object witout a stash
+- Fix deparsing of transliterations with unprintable characters (RT#132405)
+- Fix error reporting on do() on a directory (RT#125774)
+- Fix stack manipulation when a lexical subroutine is defined in a do block in
+  a member of an iteration list (RT#132442)
+- Fix setting $! when statting a closed filehandle (RT#108288)
+- Fix tainting of s/// with overloaded replacement (RT#115266)
+- Expand system() arguments before a fork (RT#121105)
+- Avoid undefined behavior when copying memory in Glob and pp_caller (RT#131746)
+- Add patch to conditionalize a fix for an old and long fixed bug
+  in libcrypt / glibc (rhbz#1536752)
+- Link XS modules to pthread library to fix linking with -z defs
+- Correct shell bangs in tests
+- Fix parsing braced subscript after parentheses (RT#8045)
+- Call ldconfig scriptlets using a macro
+
+* Mon Sep 25 2017 Jitka Plesnikova <jplesnik@redhat.com> - 4:5.24.3-395
+- Update perl(:MODULE_COMPAT_*)
+
+* Mon Sep 25 2017 Jitka Plesnikova <jplesnik@redhat.com> - 4:5.24.3-394
+- 5.24.3 bump (see <http://search.cpan.org/dist/perl-5.24.3/pod/perldelta.pod>
+  for release notes)
+
+* Mon Jul 17 2017 Jitka Plesnikova <jplesnik@redhat.com> - 4:5.24.2-393
+- 5.24.2 bump (see <http://search.cpan.org/dist/perl-5.24.2/pod/perldelta.pod>
+  for release notes)
+
+* Mon Jun 19 2017 Petr Pisar <ppisar@redhat.com> - 4:5.24.1-392
+- Make File::Glob more resistant against degenerative matching (RT#131211)
+- Fix a memory wrap in sv_vcatpvfn_flags() (RT#131260)
+- Fix a crash when calling a subroutine from a stash (RT#131085)
+- Fix an improper cast of a negative integer to an unsigned 8-bit type (RT#131190)
+- Fix cloning :via handles on thread creation (RT#131221)
+- Fix glob UTF-8 flag on a glob reassignment (RT#131263)
+- Fix a buffer overflow in my_atof2() (RT#131526)
+- Fix checks for tainted directory in $ENV{PATH} if a backslash escape presents
+- Fix handling backslashes in PATH environment variable when executing
+  "perl -S" (RT#129183)
+- Fix a conditional jump on uninitilized memory in re_intuit_start() (RT#131575)
+- Fix spurious "Assuming NOT a POSIX class" warning (RT#131522)
+- Provide perl-interpreter RPM dependency symbol
+  <https://fedoraproject.org/wiki/Changes/perl_Package_to_Install_Core_Modules>
+
+* Fri Mar 31 2017 Petr Pisar <ppisar@redhat.com> - 4:5.24.1-391
+- Introduce build-conditions for groff, systemtap, syslog tests, and tcsh
+
+* Wed Mar 08 2017 Petr Pisar <ppisar@redhat.com> - 4:5.24.1-390
+- Fix a null-pointer dereference on malformed code (RT#130815)
+- Fix an use-after-free in substr() that modifies a magic variable (RT#129340)
+- Fix a memory leak leak in Perl_reg_named_buff_fetch() (RT#130822)
+- Fix an invalid memory read when parsing a loop variable (RT#130814)
+- Fix a heap-use-after-free in four-arguments substr call (RT#130624)
+
+* Fri Feb 17 2017 Petr Pisar <ppisar@redhat.com> - 4:5.24.1-389
+- Adapt Compress::Raw::Zlib to zlib-1.2.11 (bug #1420326)
+- Fix a heap buffer overflow when evaluating regexps with embedded code blocks
+  from more than one source (RT#129881)
+- Fix a memory leak in list assignment from or to magic values (RT#130766)
+
+* Fri Feb 10 2017 Petr Pisar <ppisar@redhat.com> - 4:5.24.1-388
+- Adapt tests to zlib-1.2.11 (bug #1420326)
+- Fix a crash when compiling a regexp with impossible quantifiers (RT#130561)
+- Fix a buffer overrun with format and "use bytes" (RT#130703)
+- Fix a buffer overflow when studying some regexps repeatedly
+  (RT#129281, RT#129061)
+
+* Thu Jan 26 2017 Petr Pisar <ppisar@redhat.com> - 4:5.24.1-387
+- Fix UTF-8 string handling in & operator (RT#129287)
+- Fix recreation of *:: (RT#129869)
+- Fix a memory leak in B::RHE->HASH method (RT#130504)
+- Fix parsing goto statements in multicalled subroutine (RT#113938)
+- Fix a heap overlow in parsing $# (RT#129274)
+
+* Fri Jan 20 2017 Petr Pisar <ppisar@redhat.com> - 4:5.24.1-386
+- Fix a buffer overflow in split in scalar context (RT#130262)
+- Fix a heap overflow with pack "W" (RT129149)
+- Fix a use-after-free when processing scalar variables in forms (RT#129125)
+- Fix a heap overflow if invalid octal or hexadecimal number is used in
+  transliteration expression (RT#129342)
+- Fix out-of-bound read in case of unmatched regexp backreference (RT#129377)
+
+* Mon Jan 16 2017 Jitka Plesnikova <jplesnik@redhat.com> - 4:5.24.1-385
+- 5.24.1 bump (see <http://search.cpan.org/dist/perl-5.24.1/pod/perldelta.pod>
+  for release notes)
+
+* Thu Jan 12 2017 Igor Gnatenko <ignatenko@redhat.com> - 4:5.24.0-384
+- Rebuild for readline 7.x
+
+* Fri Jan 06 2017 Petr Pisar <ppisar@redhat.com> - 4:5.24.0-383
+- Remove bundled Math-BigInt-FastCalc (bug #1408463)
+- Remove bundled Math-BigRat (bug #1408467)
+- Remove bundled bignum (bug #1409585)
+
+* Mon Dec 19 2016 Petr Pisar <ppisar@redhat.com> - 4:5.24.0-382
+- Fix a crash in optimized evaluation of "or ((0) x 0))" (RT#130247)
+- Fix a memory leak in IO::Poll (RT#129788)
+- Fix regular expression matching (RT#130307)
+
+* Thu Dec 01 2016 Petr Pisar <ppisar@redhat.com> - 4:5.24.0-381
+- Fix crash in Storable when deserializing malformed code reference
+  (RT#68348, RT#130098)
+- Fix crash on explicit return from regular expression substitution (RT#130188)
+- Tighten dependencies between architecture specific sub-packages to ISA
+- Fix assigning split() return values to an array
+- Fix const correctness in hv_func.h (bug #1242980)
+
+* Wed Nov 09 2016 Petr Pisar <ppisar@redhat.com> - 4:5.24.0-380
+- Tie perl-Errno release to interpreter build because of kernel version check
+  (bug #1393421)
+
+* Thu Nov 03 2016 Petr Pisar <ppisar@redhat.com> - 4:5.24.0-379
+- Fix crash in "evalbytes S" (RT#129196)
+- Fix crash in splice (RT#129164, RT#129166, RT#129167)
+- Fix string overrun in Perl_gv_fetchmethod_pvn_flags (RT#129267)
+- Fix crash when matching UTF-8 string with non-UTF-8 substrings (RT#129350)
+- Fix parsing perl options in shell bang line (RT#129336)
+- Fix firstchar bitmap under UTF-8 with prefix optimization (RT#129950)
+- Avoid infinite loop in h2xs tool if enum and type have the same name
+  (RT130001)
+- Fix stack handling when calling chdir without an argument (RT#129130)
+
+* Fri Sep 02 2016 Petr Pisar <ppisar@redhat.com> - 4:5.24.0-378
+- perl-core depends on Parse::CPAN::Meta module instead of package name to allow
+  upgrading perl-CPAN-Meta to 2.150010 (bug #1370681)
+
+* Tue Aug 02 2016 Jitka Plesnikova <jplesnik@redhat.com> - 4:5.24.0-377
+- Avoid loading of modules from current directory, CVE-2016-1238, (bug #1360425)
+
+* Thu Jul 28 2016 Petr Pisar <ppisar@redhat.com> - 4:5.24.0-376
+- Fix handling \N{} in tr for characters in range 128--255 (RT#128734)
+
+* Tue Jul 26 2016 Petr Pisar <ppisar@redhat.com> - 4:5.24.0-375
+- Fix building without perl in the build root
+- Own systemtap directories by perl-devel
+
+* Tue Jul 12 2016 Petr Pisar <ppisar@redhat.com> - 4:5.24.0-374
+- Fix a crash in lexical scope warnings (RT#128597)
+
+* Fri Jul 08 2016 Petr Pisar <ppisar@redhat.com> - 4:5.24.0-373
+- Fix a crash in "Subroutine redefined" warning (RT#128257)
+
+* Thu Jul 07 2016 Petr Pisar <ppisar@redhat.com> - 4:5.24.0-372
+- Fix a crash when vivifying a stub in a deleted package (RT#128532)
+
+* Thu Jul 07 2016 Jitka Plesnikova <jplesnik@redhat.com> - 4:5.24.0-371
+- Do not let XSLoader load relative paths (CVE-2016-6185)
+
+* Mon Jul 04 2016 Petr Pisar <ppisar@redhat.com> - 4:5.24.0-370
+- Fix line numbers with perl -x (RT#128508)
+
+* Fri Jun 24 2016 Petr Pisar <ppisar@redhat.com> - 4:5.24.0-369
+- Do not crash when inserting a non-stash into a stash (RT#128238)
+
+* Wed Jun 22 2016 Petr Pisar <ppisar@redhat.com> - 4:5.24.0-368
+- Do not use unitialized memory in $h{\const} warnings (RT#128189)
+- Fix precedence in hv_ename_delete (RT#128086)
+- Do not treat %: as a stash (RT#128238)
+
+* Mon Jun 20 2016 Petr Pisar <ppisar@redhat.com> - 4:5.24.0-367
+- Fix compiling regular expressions like /\X*(?0)/ (RT#128109)
+
+* Thu Jun 16 2016 Petr Pisar <ppisar@redhat.com> - 4:5.24.0-366
+- Do not mangle errno from failed socket calls (RT#128316)
+
+* Tue Jun 14 2016 Petr Pisar <ppisar@redhat.com> - 4:5.24.0-365
+- Fix a memory leak when compiling a regular expression with a POSIX class
+  (RT#128313)
+
+* Thu May 19 2016 Petr Pisar <ppisar@redhat.com> - 4:5.24.0-364
+- Remove reflexive dependencies
+- Use pregenerated dependencies on bootstrapping
+- Specify more build-time dependencies
+
+* Wed May 18 2016 Jitka Plesnikova <jplesnik@redhat.com> - 4:5.24.0-363
+- Stop providing old perl(MODULE_COMPAT_5.22.*)
+- Update license tags
+
+* Wed May 11 2016 Jitka Plesnikova <jplesnik@redhat.com> - 4:5.24.0-362
+- 5.24.0 bump (see <http://search.cpan.org/dist/perl-5.24.0/pod/perldelta.pod>
+  for release notes)
+- Update sub-packages; Update or remove patches
+
+* Mon May 02 2016 Jitka Plesnikova <jplesnik@redhat.com> - 4:5.22.6-361
+- 5.22.2 bump (see <http://search.cpan.org/dist/perl-5.22.2/pod/perldelta.pod>
+  for release notes)
+
+* Mon Apr 18 2016 Petr Pisar <ppisar@redhat.com> - 4:5.22.1-360
+- Weak perl-Encode-devel dependency on perl-devel to Recommends level
+  (bug #1129443)
+- Remove perl-ExtUtils-ParseXS dependency on perl-devel (bug #1129443)
+- Require perl-devel by perl-ExtUtils-MakeMaker
+- Provide MM::maybe_command independently (bug #1129443)
+- Replace ExtUtils::MakeMaker dependency with ExtUtils::MM::Utils in IPC::Cmd
+  (bug #1129443)
+- Remove perl-ExtUtils-Install dependency on perl-devel (bug #1129443)
+- Remove perl-ExtUtils-Manifest dependency on perl-devel (bug #1129443)
+
+* Tue Mar 15 2016 Petr Pisar <ppisar@redhat.com> - 4:5.22.1-359
+- Do not filter FCGI dependency, CGI is non-core now
+
+* Fri Mar 04 2016 Petr Pisar <ppisar@redhat.com> - 4:5.22.1-358
+- Remove bundled perl-IPC-SysV (bug #1308527)
+
+* Wed Mar 02 2016 Petr Pisar <ppisar@redhat.com> - 4:5.22.1-357
+- Fix CVE-2016-2381 (ambiguous environment variables handling) (bug #1313702)
+
+* Thu Feb 04 2016 Fedora Release Engineering <releng@fedoraproject.org> - 4:5.22.1-356
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild
+
+* Tue Dec 15 2015 Petr Pisar <ppisar@redhat.com> - 4:5.22.1-355
+- Remove bundled Math-BigInt (bug #1277203)
+
+* Mon Dec 14 2015 Jitka Plesnikova <jplesnik@redhat.com> - 5.22.1-354
+- 5.22.1 bump (see <http://search.cpan.org/dist/perl-5.22.1/pod/perldelta.pod>
+  for release notes)
+
+* Tue Oct 20 2015 Petr Pisar <ppisar@redhat.com> - 4:5.22.0-353
+- Rebuild to utilize perl(:VERSION) dependency symbol
+
+* Tue Oct 13 2015 Petr Pisar <ppisar@redhat.com> - 4:5.22.0-352
+- Do not own IO::Socket::IP manual page by perl-IO
+
+* Fri Oct 09 2015 Petr Pisar <ppisar@redhat.com> - 4:5.22.0-351
+- Sub-package Attribute-Handlers
+- Sub-package Devel-Peek
+- Sub-package Devel-SelfStubber
+- Sub-package SelfLoader
+- Sub-package IO
+- Sub-package Errno
+- Correct perl-Digest-SHA dependencies
+- Correct perl-Pod-Perldoc dependencies
+- Move utf8 and dependencies to perl-libs
+- Correct perl-devel and perl-CPAN dependencies
+- Sub-package IPC-SysV
+- Sub-package Test
+- Sub-package utilities (splain) into perl-utils
+- Provide perl version in perl(:VERSION) dependency symbol
+
+* Fri Aug 07 2015 Petr Pisar <ppisar@redhat.com> - 4:5.22.0-350
+- Sub-package Memoize
+- Sub-package Net-Ping
+- Sub-package Pod-Html
+
+* Thu Jul 16 2015 Petr Pisar <ppisar@redhat.com> - 4:5.22.0-349
+- Disable hardening due to some run-time failures (bug #1238804)
+
+* Mon Jul 13 2015 Petr Pisar <ppisar@redhat.com> - 4:5.22.0-348
+- Sub-package bignum
+- Sub-package Math-BigRat
+- Sub-package Math-BigInt-FastCalc
+- Sub-package Math-Complex
+- Remove bundled perl-Config-Perl-V (bug #1238203)
+- Remove bundled perl-MIME-Base64 (bug #1238222)
+- Remove bundled perl-PerlIO-via-QuotedPrint (bug #1238229)
+- Remove bundled perl-Pod-Escapes (bug #1238237)
+- Remove bundled perl-Term-Cap (bug #1238248)
+- Remove bundled perl-Text-Balanced (bug #1238269)
+- Remove bundled perl-libnet (bug #1238689)
+- Remove bundled perl-perlfaq (bug #1238703)
+- Remove bundled perl-Unicode-Normalize (bug #1238730)
+- Remove bundled perl-Unicode-Collate (bug #1238760)
+
+* Wed Jul 08 2015 Petr Pisar <ppisar@redhat.com> - 4:5.22.0-347
+- Store distribution's linker and compiler flags to more Config's options
+  in order to apply them when linking executable programs (bug #1238804)
+- Sub-package Config-Perl-V (bug #1238203)
+- Sub-package MIME-Base64 (bug #1238222)
+- Sub-package PerlIO-via-QuotedPrint (bug #1238229)
+- Update Pod-Escapes metadata (bug #1238237)
+- Sub-package Term-Cap (bug #1238248)
+- Sub-package Text-Balanced (bug #1238269)
+- Sub-package libnet (bug #1238689)
+- Sub-package perlfaq (bug #1238703)
+- Sub-package Unicode-Normalize (bug #1238730)
+- Sub-package Unicode-Collate (bug #1238760)
+- Sub-package Math-BigInt
+- Do not provide Net/libnet.cfg (bug #1238689)
+- Revert downstream change in Net::Config default configuration
+- Move libnetcfg tool from perl-devel into perl-libnetcfg sub-package
+
+* Thu Jun 18 2015 Petr Pisar <ppisar@redhat.com> - 4:5.22.0-346
+- Subpackage "open" module in order to keep deprecated "encoding" module
+  optional (bug #1228378)
+- Control building dual-lived sub-packages by perl_bootstrap macro
+- Make PadlistNAMES() lvalue again (bug #1231165)
+- Make magic vtable writable as a work-around for Coro (bug #1231165)
+- Explain file break-down into RPM packages in perl package description
+
+* Thu Jun 18 2015 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 4:5.22.0-345
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild
+
+* Wed Jun 10 2015 Jitka Plesnikova <jplesnik@redhat.com> - 4:5.22.0-244
+- Stop providing old perl(MODULE_COMPAT_5.20.*)
+
+* Thu Jun 04 2015 Jitka Plesnikova <jplesnik@redhat.com> - 4:5.22.0-243
+- Move ok and Test::Use::ok to perl-Test-Simple
+
+* Wed Jun 03 2015 Jitka Plesnikova <jplesnik@redhat.com> - 4:5.22.0-242
+- Move bin/encguess to perl-Encode
+
+* Mon Jun 01 2015 Jitka Plesnikova <jplesnik@redhat.com> - 4:5.22.0-241
+- 5.22.0 bump (see <http://search.cpan.org/dist/perl-5.22.0/pod/perldelta.pod>
+  for release notes)
+- Update sub-packages and erase the removed modules from the core
+- Clean patches, not needed with new version
+- Update patches to work with new version
+
+* Wed Apr 15 2015 Jitka Plesnikova <jplesnik@redhat.com> - 4:5.20.2-328
+- Sub-package perl-CGI-Fast and perl-Module-Build-Deprecated
+- Add missing dual-life modules to perl-core
+
+* Thu Apr 02 2015 Petr Šabata <contyk@redhat.com> - 4:5.20.2-327
+- Bump to make koji happy
+
+* Thu Apr 02 2015 Petr Šabata <contyk@redhat.com> - 4:5.20.2-326
+- Correct license tags of the main package, CGI, Compress-Raw-Zlib,
+  Digest-MD5, Test-Simple and Time-Piece
+- Package a Pod-Html license clarification email
+
+* Wed Mar 25 2015 Petr Pisar <ppisar@redhat.com> - 4:5.20.2-325
+- Sub-package Text-Tabs+Wrap (bug #910798)
+
+* Thu Mar 19 2015 Lubomir Rintel <lkundrak@v3.sk> - 4:5.20.2-324
+- Add systemtap probes for new dtrace markers
+
+* Mon Mar 16 2015 Petr Pisar <ppisar@redhat.com> - 4:5.20.2-323
+- Move perl(:MODULE_COMPAT_*) symbol and include directories to perl-libs
+  package (bug #1174951)
+
+* Sat Feb 21 2015 Till Maas <opensource@till.name> - 4:5.20.2-322
+- Rebuilt for Fedora 23 Change
+  https://fedoraproject.org/wiki/Changes/Harden_all_packages_with_position-independent_code
+
+* Wed Feb 18 2015 Jitka Plesnikova <jplesnik@redhat.com> - 4:5.20.2-321
+- Provide 5.20.2 MODULE_COMPAT
+- Clean list of provided files
+- Update names of changed patches
+
+* Tue Feb 17 2015 Jitka Plesnikova <jplesnik@redhat.com> - 4:5.20.2-320
+- 5.20.2 bump (see <http://search.cpan.org/dist/perl-5.20.2/pod/perldelta.pod>
+  for release notes)
+- Regenerate a2p.c (BZ#1177672)
+
+* Mon Feb 16 2015 Petr Pisar <ppisar@redhat.com> - 4:5.20.1-319
+- Improve h2ph fix for GCC 5.0
+
+* Thu Feb 12 2015 Petr Pisar <ppisar@redhat.com> - 4:5.20.1-318
+- Fix regressions with GCC 5.0
+
+* Tue Feb 03 2015 Jitka Plesnikova <jplesnik@redhat.com> - 4:5.20.1-317
+- Sub-package inc-latest module
+
+* Fri Jan 23 2015 Petr Pisar <ppisar@redhat.com> - 4:5.20.1-316
+- Delete dual-living programs clashing on debuginfo files (bug #878863)
+
+* Mon Dec 01 2014 Petr Pisar <ppisar@redhat.com> - 4:5.20.1-315
+- Report inaccesible file on failed require (bug #1166504)
+- Use stronger algorithm needed for FIPS in t/op/taint.t (bug #1128032)
+
+* Wed Nov 19 2014 Petr Pisar <ppisar@redhat.com> - 4:5.20.1-314
+- Consider Filter::Util::Call dependency as mandatory (bug #1165183)
+- Sub-package encoding module
+- Own upper directories by each package that installs a file there and
+  remove empty directories (bug #1165013)
+
+* Thu Nov 13 2014 Petr Pisar <ppisar@redhat.com> - 4:5.20.1-313
+- Freeze epoch at perl-Pod-Checker and perl-Pod-Usage (bug #1163490)
+- Remove bundled perl-ExtUtils-Command (bug #1158536)
+- Remove bundled perl-Filter-Simple (bug #1158542)
+
+* Wed Nov 12 2014 Petr Pisar <ppisar@redhat.com> - 4:5.20.1-312
+- Do not double-own perl-Pod-Usage' and perl-Pod-Checker' files by
+  perl-Pod-Parser on bootstrap
+- Sub-package ExtUtils-Command (bug #1158536)
+- Sub-package Filter-Simple (bug #1158542)
+- Build-require groff-base instead of big groff
+
+* Wed Oct 29 2014 Petr Pisar <ppisar@redhat.com> - 4:5.20.1-311
+- Remove bundled perl-Devel-PPPort (bug #1143999)
+- Remove bundled perl-B-Debug (bug #1142952)
+- Remove bundled perl-ExtUtils-CBuilder (bug #1144033)
+- Remove bundled perl-ExtUtils-Install (bug #1144068)
+
+* Thu Oct 23 2014 Petr Pisar <ppisar@redhat.com> - 4:5.20.1-310
+- Move all Module-CoreList files into perl-Module-CoreList
+- Sub-package corelist(1) into perl-Module-CoreList-tools (bug #1142757)
+- Remove bundled perl-Module-CoreList, and perl-Module-CoreList-tools
+  (bug #1142757)
+- Sub-package Devel-PPPort (bug #1143999)
+- Sub-package B-Debug (bug #1142952)
+- Use native version for perl-ExtUtils-CBuilder
+- Specify all dependencies for perl-ExtUtils-Install (bug #1144068)
+- Require perl-ExtUtils-ParseXS by perl-ExtUtils-MakeMaker because of xsubpp
+
+* Tue Sep 16 2014 Petr Šabata <contyk@redhat.com> - 4:5.20.1-309
+- Provide 5.20.0 MODULE_COMPAT
+
+* Mon Sep 15 2014 Jitka Plesnikova <jplesnik@redhat.com> - 4:5.20.1-308
+- 5.20.1 bump (see <http://search.cpan.org/dist/perl-5.20.1/pod/perldelta.pod>
+  for release notes)
+- Sub-package perl-ExtUtils-Miniperl (bug #1141222)
+
+* Wed Sep 10 2014 Petr Pisar <ppisar@redhat.com> - 4:5.20.0-307
+- Specify all dependencies for perl-CPAN (bug #1090112)
+- Disable non-core modules at perl-CPAN when bootstrapping
+- Remove bundled perl-CPAN (bug #1090112)
+
+* Sun Sep 07 2014 Jitka Plesnikova <jplesnik@redhat.com> - 4:5.20.0-306
+- Stop providing old perl(MODULE_COMPAT_5.18.*)
+
+* Mon Aug 18 2014 Jitka Plesnikova <jplesnik@redhat.com> - 4:5.20.0-305
+- Update to Perl 5.20.0
+- Clean patches, not needed with new version
+- Update patches to work with new version
+- Update version of sub-packages, remove the deleted sub-packages
+- Sub-package perl-IO-Socket-IP, perl-experimental
+- Disable BR perl(local::lib) for cpan tool when bootstraping
+
+* Sun Aug 17 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 4:5.18.2-304
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild
+
+* Fri Aug 08 2014 Petr Pisar <ppisar@redhat.com> - 4:5.18.2-303
+- Declare dependencies for cpan tool (bug #1122498)
+- Use stronger algorithm needed for FIPS in t/op/crypt.t (bug #1128032)
+- Make *DBM_File desctructors thread-safe (bug #1107543)
+
+* Tue Jul 29 2014 Jitka Plesnikova <jplesnik@redhat.com> - 4:5.18.2-302
+- Sub-package perl-Term-ANSIColor and remove it (bug #1121924)
+
+* Fri Jun 27 2014 Petr Pisar <ppisar@redhat.com> - 4:5.18.2-301
+- Remove bundled perl-App-a2p, perl-App-find2perl, perl-App-s2p, and
+  perl-Package-Constants
+- Correct perl-App-s2p license to ((GPL+ or Artistic) and App-s2p)
+
+* Thu Jun 19 2014 Petr Pisar <ppisar@redhat.com> - 4:5.18.2-300
+- Sub-package perl-App-find2perl (bug #1111196)
+- Sub-package perl-App-a2p (bug #1111232)
+- Sub-package perl-App-s2p (bug #1111242)
+
+* Sat Jun 07 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 4:5.18.2-299
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild
+
+* Thu Apr 10 2014 Petr Pisar <ppisar@redhat.com> - 4:5.18.2-298
+- Pass -fwrapv to stricter GCC 4.9 (bug #1082957)
+
+* Fri Apr 04 2014 Petr Pisar <ppisar@redhat.com> - 4:5.18.2-297
+- Fix t/comp/parser.t not to load system modules (bug #1084399)
+
+* Mon Feb 03 2014 Petr Pisar <ppisar@redhat.com> - 4:5.18.2-296
+- Move macro files into %%{_rpmconfigdir}/macros.d
+
+* Wed Jan 29 2014 Petr Pisar <ppisar@redhat.com> - 4:5.18.2-295
+- Provide perl(CPAN::Meta::Requirements) with six decimal places
+
+* Tue Jan 21 2014 Petr Pisar <ppisar@redhat.com> - 4:5.18.2-294
+- Drop perl-Test-Simple-tests package is it is not delivered by dual-lived
+  version
+- Hide dual-lived perl-Object-Accessor
+
+* Tue Jan 14 2014 Petr Pisar <ppisar@redhat.com> - 4:5.18.2-293
+- Use a macro to cover all 64-bit PowerPC architectures (bug #1052709)
+
+* Tue Jan 14 2014 Petr Pisar <ppisar@redhat.com> - 4:5.18.2-292
+- Use upstream patch to fix a test failure in perl5db.t when TERM=vt100
+
+* Tue Dec 10 2013 Jitka Plesnikova <jplesnik@redhat.com> - 4:5.18.2-291
+- 5.18.2 bump (see <http://search.cpan.org/dist/perl-5.18.2/pod/perldelta.pod>
+  for release notes)
+
+* Mon Dec 02 2013 Petr Pisar <ppisar@redhat.com> - 4:5.18.1-290
+- Document Math::BigInt::CalcEmu requires Math::BigInt (bug #959096)
+
+* Tue Oct 22 2013 Petr Pisar <ppisar@redhat.com> - 4:5.18.1-289
+- perl_default_filter macro does not need to filter private libraries from
+  provides (bug #1020809)
+- perl_default_filter anchors the filter regular expressions
+- perl_default_filter appends the filters instead of redefining them
+
+* Mon Sep 09 2013 Jitka Plesnikova <jplesnik@redhat.com> - 4:5.18.1-288
+- Fix rules for parsing numeric escapes in regexes (bug #978233)
+- Fix crash with \&$glob_copy (bug #989486)
+- Fix coreamp.t's rand test (bug #970567)
+- Reap child in case where exception has been thrown (bug #988805)
+- Fix using regexes with multiple code blocks (bug #982131)
+
+* Tue Aug 13 2013 Jitka Plesnikova <jplesnik@redhat.com> - 4:5.18.1-287
+- 5.18.1 bump (see <http://search.cpan.org/dist/perl-5.18.1/pod/perldelta.pod>
+  for release notes)
+- Disable macro %%{rebuild_from_scratch}
+- Fix regex seqfault 5.18 regression (bug #989921)
+- Fixed interpolating downgraded variables into upgraded (bug #970913)
+- SvTRUE returns correct value (bug #967463)
+- Fixed doc command in perl debugger (bug #967461)
+- Fixed unaligned access in slab allocator (bug #964950)
+
+* Sat Aug 03 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 4:5.18.0-286
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild
+
+* Mon Jul 15 2013 Petr Pisar <ppisar@redhat.com> - 4:5.18.0-285
+- Stop providing old perl(MODULE_COMPAT_5.16.*)
+
+* Fri Jul 12 2013 Petr Pisar <ppisar@redhat.com> - 4:5.18.0-284
+- Perl 5.18 rebuild
+
+* Tue Jul 09 2013 Petr Pisar <ppisar@redhat.com> - 4:5.18.0-283
+- Define SONAME for libperl.so and move the libary into standard path
+- Link XS modules to libperl.so on Linux (bug #960048)
+
+* Mon Jul 08 2013 Petr Pisar <ppisar@redhat.com> - 4:5.18.0-282
+- Do not load system Term::ReadLine::Gnu while running tests
+- Disable ornaments on perl5db AutoTrace tests
+
+* Thu Jul 04 2013 Jitka Plesnikova <jplesnik@redhat.com> - 4:5.18.0-281
+- Update to Perl 5.18.0
+- Clean patches, not needed with new version
+
+* Wed Jun 26 2013 Petr Pisar <ppisar@redhat.com> - 4:5.16.3-280
+- Edit local patch level before compilation
+
+* Fri Jun 14 2013 Petr Pisar <ppisar@redhat.com> - 4:5.16.3-279
+- Do not distribute File::Spec::VMS (bug #973713)
+- Remove bundled CPANPLUS-Dist-Build (bug #973041)
+
+* Wed Jun 12 2013 Petr Pisar <ppisar@redhat.com> - 4:5.16.3-278
+- Update SystemTap scripts to recognize new phase__change marker and new probe
+  arguments (bug #971094)
+- Update h2ph(1) documentation (bug #948538)
+- Update pod2html(1) documentation (bug #948538)
+- Do not double-own archlib directory (bug #894195)
+
+* Tue Jun 11 2013 Petr Pisar <ppisar@redhat.com> - 4:5.16.3-277
+- Move CPANPLUS-Dist-Build files from perl-CPANPLUS
+- Move CPAN-Meta-Requirements files from CPAN-Meta
+- Add perl-Scalar-List-Utils to perl-core dependencies
+
+* Thu Jun 06 2013 Petr Pisar <ppisar@redhat.com> - 4:5.16.3-276
+- Require $Config{libs} providers (bug #905482)
+
+* Thu May 30 2013 Petr Pisar <ppisar@redhat.com> - 4:5.16.3-275
+- Correct typo in perl-Storable file list (bug #966865)
+- Remove bundled Storable (bug #966865)
+
+* Wed May 29 2013 Petr Pisar <ppisar@redhat.com> - 4:5.16.3-274
+- Sub-package Storable (bug #966865)
+
+* Mon May 13 2013 Petr Pisar <ppisar@redhat.com> - 4:5.16.3-273
+- Use lib64 directories on aarch64 architecture (bug #961900)
+
+* Fri May 10 2013 Petr Pisar <ppisar@redhat.com> - 4:5.16.3-272
+- Make regular expression engine safe in a signal handler (bug #849703)
+- Remove bundled ExtUtils-ParseXS, and Time-HiRes
+
+* Fri Apr 26 2013 Petr Pisar <ppisar@redhat.com> - 4:5.16.3-271
+- Sub-package Time-HiRes (bug #957048)
+- Remove bundled Getopt-Long, Locale-Maketext, and Sys-Syslog
+
+* Wed Apr 10 2013 Petr Pisar <ppisar@redhat.com> - 4:5.16.3-270
+- Fix leaking tied hashes (bug #859910)
+- Fix dead lock in PerlIO after fork from thread (bug #947444)
+- Add proper conflicts to perl-Getopt-Long, perl-Locale-Maketext, and
+  perl-Sys-Syslog
+
+* Tue Apr 09 2013 Petr Pisar <ppisar@redhat.com> - 4:5.16.3-269
+- Sub-package Sys-Syslog (bug #950057)
+
+* Fri Apr 05 2013 Petr Pisar <ppisar@redhat.com> - 4:5.16.3-268
+- Sub-package Getopt-Long (bug #948855)
+- Sub-package Locale-Maketext (bug #948974)
+
+* Fri Apr 05 2013 Petr Pisar <ppisar@redhat.com> - 4:5.16.3-267
+- Remove bundled constant, DB_File, Digest-MD5, Env, Exporter, File-Path,
+  File-Temp, Module-Load, Log-Message-Simple, Pod-Simple, Test-Harness,
+  Text-ParseWords
+
+* Mon Mar 25 2013 Petr Pisar <ppisar@redhat.com> - 4:5.16.3-266
+- Filter provides from *.pl files (bug #924938)
+
+* Fri Mar 22 2013 Petr Pisar <ppisar@redhat.com> - 4:5.16.3-265
+- Conflict perl-autodie with older perl (bug #911226)
+- Sub-package Env (bug #924619)
+- Sub-package Exporter (bug #924645)
+- Sub-package File-Path (bug #924782)
+- Sub-package File-Temp (bug #924822)
+
+* Thu Mar 21 2013 Petr Pisar <ppisar@redhat.com> - 4:5.16.3-264
+- Sub-package constant (bug #924169)
+- Sub-package DB_File (bug #924351)
+
+* Tue Mar 19 2013 Petr Pisar <ppisar@redhat.com> - 4:5.16.3-263
+- Correct perl-Digest-MD5 dependencies
+- Remove bundled Archive-Extract, File-Fetch, HTTP-Tiny,
+  Module-Load-Conditional, Time-Local
+
+* Fri Mar 15 2013 Petr Pisar <ppisar@redhat.com> - 4:5.16.3-262
+- Correct dependencies of perl-HTTP-Tiny
+- Sub-package Time-Local (bug #922054)
+
+* Thu Mar 14 2013 Petr Pisar <ppisar@redhat.com> - 4:5.16.3-261
+- 5.16.3 bump (see <http://search.cpan.org/dist/perl-5.16.3/pod/perldelta.pod>
+  for release notes)
+- Remove bundled autodie, B-Lint, CPANPLUS, Encode, File-CheckTree, IPC-Cmd,
+  Params-Check, Text-Soundex, Thread-Queue
+
+* Tue Mar 05 2013 Petr Pisar <ppisar@redhat.com> - 4:5.16.2-260
+- Fix CVE-2013-1667 (DoS in rehashing code) (bug #918008)
+
+* Mon Feb 18 2013 Petr Pisar <ppisar@redhat.com> - 4:5.16.2-259
+- Sub-package autodie (bug #911226)
+- Add NAME headings to CPAN modules (bug #908113)
+
+* Thu Feb 14 2013 Petr Pisar <ppisar@redhat.com> - 4:5.16.2-258
+- Fix perl-Encode-devel dependency declaration
+
+* Thu Feb 14 2013 Petr Pisar <ppisar@redhat.com> - 4:5.16.2-257
+- Sub-package Thread-Queue (bug #911062)
+
+* Wed Feb 13 2013 Petr Pisar <ppisar@redhat.com> - 4:5.16.2-256
+- Sub-package File-CheckTree (bug #909144)
+- Sub-package Text-ParseWords
+- Sub-package Encode (bug #859149)
+
+* Fri Feb 08 2013 Petr Pisar <ppisar@redhat.com> - 4:5.16.2-255
+- Remove bundled Log-Message
+- Remove bundled Term-UI
+
+* Thu Feb 07 2013 Petr Pisar <ppisar@redhat.com> - 4:5.16.2-254
+- Correct perl-podlators dependencies
+- Obsolete perl-ExtUtils-Typemaps by perl-ExtUtils-ParseXS (bug #891952)
+
+* Tue Feb 05 2013 Petr Pisar <ppisar@redhat.com> - 4:5.16.2-253
+- Sub-package Pod-Checker and Pod-Usage (bugs #907546, #907550)
+
+* Mon Feb 04 2013 Petr Pisar <ppisar@redhat.com> - 4:5.16.2-252
+- Remove bundled PathTools
+
+* Wed Jan 30 2013 Petr Pisar <ppisar@redhat.com> - 4:5.16.2-251
+- Sub-package B-Lint (bug #906015)
+
+* Wed Jan 30 2013 Petr Pisar <ppisar@redhat.com> - 4:5.16.2-250
+- Sub-package Text-Soundex (bug #905889)
+- Fix conflict declaration at perl-Pod-LaTeX (bug #904085)
+- Remove bundled Module-Pluggable (bug #903624)
+
+* Tue Jan 29 2013 Petr Pisar <ppisar@redhat.com> - 4:5.16.2-249
+- Run-require POD convertors by Module-Build and ExtUtils-MakeMaker to
+  generate documentation when building other packages
+
+* Fri Jan 25 2013 Petr Pisar <ppisar@redhat.com> - 4:5.16.2-248
+- Sub-package Pod-LaTeX (bug #904085)
+
+* Wed Jan 16 2013 Petr Pisar <ppisar@redhat.com> - 4:5.16.2-247
+- Remove bundled Pod-Parser
+
+* Fri Jan 11 2013 Petr Pisar <ppisar@redhat.com> - 4:5.16.2-246
+- Fix CVE-2012-6329 (misparsing of maketext strings) (bug #884354)
+
+* Thu Jan 10 2013 Petr Pisar <ppisar@redhat.com> - 4:5.16.2-245
+- Do not package App::Cpan(3pm) to perl-Test-Harness (bug #893768)
+
+* Tue Dec 18 2012 Petr Pisar <ppisar@redhat.com> - 4:5.16.2-244
+- Remove bundled Archive-Tar
+- Remove bundled CPAN-Meta-YAML
+- Remove bundled Module-Metadata
+
+* Tue Dec 18 2012 Petr Pisar <ppisar@redhat.com> - 4:5.16.2-243
+- Remove bundled Filter modules
+
+* Mon Nov 05 2012 Jitka Plesnikova <jplesnik@redhat.com> - 4:5.16.2-242
+- 5.16.2 bump (see
+  http://search.cpan.org/dist/perl-5.16.1/pod/perldelta.pod for release
+  notes)
+
+* Wed Oct 31 2012 Petr Pisar <ppisar@redhat.com> - 4:5.16.1-241
+- Remove bundled podlators (bug #856516)
+
+* Wed Oct 17 2012 Jitka Plesnikova <jplesnik@redhat.com> - 4:5.16.1-240
+- Do not crash when vivifying $| (bug #865296)
+
+* Mon Sep 24 2012 Petr Pisar <ppisar@redhat.com> - 4:5.16.1-239
+- Conflict perl-podlators with perl before sub-packaging (bug #856516)
+
+* Fri Sep 21 2012 Petr Pisar <ppisar@redhat.com> - 4:5.16.1-238
+- Do not leak with attribute on my variable (bug #858966)
+- Allow operator after numeric keyword argument (bug #859328)
+- Extend stack in File::Glob::glob (bug #859332)
+
+* Thu Sep 20 2012 Petr Pisar <ppisar@redhat.com> - 4:5.16.1-237
+- Put perl-podlators into perl-core list (bug #856516)
+
+* Tue Sep 18 2012 Petr Pisar <ppisar@redhat.com> - 4:5.16.1-236
+- Remove bundled perl-ExtUtils-Manifest
+- perl-PathTools uses Carp
+
+* Fri Sep 14 2012 Petr Pisar <ppisar@redhat.com> - 4:5.16.1-235
+- Override the Pod::Simple::parse_file to set output to STDOUT by default
+  (bug #826872)
+
+* Wed Sep 12 2012 Petr Pisar <ppisar@redhat.com> - 4:5.16.1-234
+- Sub-package perl-podlators (bug #856516)
+
+* Tue Sep 11 2012 Petr Pisar <ppisar@redhat.com> - 4:5.16.1-233
+- Do not access freed memory when cloning thread (bug #825749)
+- Match non-breakable space with /[\h]/ in ASCII mode (bug #844919)
+- Clear $@ before `do' I/O error (bug #834226)
+- Do not truncate syscall() return value to 32 bits (bug #838551)
+
+* Wed Sep 05 2012 Petr Pisar <ppisar@redhat.com> - 4:5.16.1-232
+- Move App::Cpan from perl-Test-Harness to perl-CPAN (bug #854577)
+
+* Fri Aug 24 2012 Petr Pisar <ppisar@redhat.com> - 4:5.16.1-231
+- Remove perl-devel dependency from perl-Test-Harness and perl-Test-Simple
+
+* Mon Aug 13 2012 Marcela Mašláňová <mmaslano@redhat.com> - 4:5.16.0-230
+- define perl_compat by macro for rebuilds
+- sub-packages depend on compat rather than on nvr
+
+* Thu Aug  9 2012 Marcela Mašláňová <mmaslano@redhat.com> - 4:5.16.0-229
+- apply conditionals for dual life patches
+
+* Thu Aug 09 2012 Jitka Plesnikova <jplesnik@redhat.com> 4:5.16.1-228
+- 5.16.1 bump (see
+  http://search.cpan.org/dist/perl-5.16.1/pod/perldelta.pod for release
+  notes)
+- Fixed reopening by scalar handle (bug #834221)
+- Fixed tr/// multiple transliteration (bug #831679)
+- Fixed heap-overflow in gv_stashpv (bug #826516)
+
+* Fri Jul 20 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 4:5.16.0-227
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild
+
+* Fri Jul 13 2012 Paul Howarth <paul@city-fan.org> 4:5.16.0-226
+- Move the rest of ExtUtils-ParseXS into its sub-package, so that the main
+  perl package doesn't need to pull in perl-devel (bug #839953)
+
+* Mon Jul 02 2012 Jitka Plesnikova <jplesnik@redhat.com> 4:5.16.0-225
+- Fix broken atof (bug #835452)
+
+* Wed Jun 27 2012 Petr Pisar <ppisar@redhat.com> - 4:5.16.0-224
+- perl-Pod-Perldoc must require groff-base because Pod::Perldoc::ToMan executes
+  roff
+
+* Mon Jun 25 2012 Petr Pisar <ppisar@redhat.com> - 4:5.16.0-223
+- Test::Build requires Data::Dumper
+- Sub-package perl-Pod-Parser
+
+* Thu Jun 07 2012 Petr Pisar <ppisar@redhat.com> - 4:5.16.0-222
+- Remove MODULE_COMPAT_5.14.* Provides
+
+* Wed Jun 06 2012 Petr Pisar <ppisar@redhat.com> - 4:5.16.0-221
+- Perl 5.16 rebuild
+
+* Wed Jun 06 2012 Petr Pisar <ppisar@redhat.com> - 4:5.16.0-220
+- perl_bootstrap macro is distributed in perl-srpm-macros now
+
+* Fri Jun 01 2012 Petr Pisar <ppisar@redhat.com> - 4:5.16.0-219
+- Own zipdetails and IO::Compress::FAQ by perl-IO-Compress
+
+* Fri Jun  1 2012 Jitka Plesnikova <jplesnik@redhat.com> - 4:5.16.0-218
+- Fix find2perl to translate ? glob properly (bug #825701)
+
+* Thu May 31 2012 Petr Pisar <ppisar@redhat.com> - 4:5.16.0-218
+- Shorten perl-Module-Build version to 2 digits to follow upstream
+
+* Fri May 25 2012 Marcela Mašláňová <mmaslano@redhat.com> - 4:5.16.0-217
+- upload the stable 5.16.0
+
+* Wed May 16 2012 Marcela Mašláňová <mmaslano@redhat.com> - 4:5.16.0-RC2-217
+- clean patches, not needed with new version
+- regen by podcheck list of failed pods. cn, jp, ko pods failed. I can't decide
+  whether it's a real problem or false positives.
+
+* Mon Apr 30 2012 Petr Pisar <ppisar@redhat.com> - 4:5.14.2-216
+- Enable usesitecustomize
+
+* Thu Apr 19 2012 Petr Pisar <ppisar@redhat.com> - 4:5.14.2-215
+- Rebuild perl against Berkeley database version 5 (bug #768846)
+
+* Fri Apr 13 2012 Petr Pisar <ppisar@redhat.com> - 4:5.14.2-214
+- perl-Data-Dumper requires Scalar::Util (bug #811239)
+
+* Tue Apr 10 2012 Petr Pisar <ppisar@redhat.com> - 4:5.14.2-213
+- Sub-package Data::Dumper (bug #811239)
+
+* Tue Feb 21 2012 Petr Pisar <ppisar@redhat.com> - 4:5.14.2-212
+- Sub-package Filter (bug #790349)
+
+* Mon Feb 06 2012 Petr Pisar <ppisar@redhat.com> - 4:5.14.2-211
+- Fix searching for Unicode::Collate::Locale data (bug #756118)
+- Run safe signal handlers before returning from sigsuspend() and pause()
+  (bug #771228)
+- Correct perl-Scalar-List-Utils files list
+- Stop !$^V from leaking (bug #787613)
+
+* Tue Jan 10 2012 Paul Howarth <paul@city-fan.org> - 4:5.14.2-210
+- Rebuild again now that perl dependency generator is fixed (#772632, #772699)
+
+* Fri Jan 06 2012 Iain Arnell <iarnell@gmail.com> -4:5.14.2-209
+- perl-ExtUtils-MakeMaker sub-package requires ExtUtils::Install
+
+* Fri Jan  6 2012 Paul Howarth <paul@city-fan.org> - 4:5.14.2-208
+- Rebuild for gcc 4.7
+
+* Tue Dec 20 2011 Petr Pisar <ppisar@redhat.com> - 4:5.14.2-207
+- Fix interrupted reading. Thanks to Šimon Lukašík for reporting this issue
+  and thanks to Marcela Mašláňová for finding fix. (bug #767931)
+
+* Wed Dec 14 2011 Petr Pisar <ppisar@redhat.com> - 4:5.14.2-206
+- Fix leak with non-matching named captures (bug #767597)
+
+* Tue Nov 29 2011 Petr Pisar <ppisar@redhat.com> - 4:5.14.2-205
+- Sub-package ExtUtils::Install
+- Sub-package ExtUtils::Manifest
+- Do not provide private perl(ExtUtils::MakeMaker::_version)
+
+* Thu Nov 24 2011 Ville Skyttä <ville.skytta@iki.fi> - 4:5.14.2-204
+- Add $RPM_LD_FLAGS to lddlflags.
+
+* Wed Nov 23 2011 Petr Pisar <ppisar@redhat.com> - 4:5.14.2-203
+- Sub-package Socket
+
+* Mon Nov 21 2011 Petr Pisar <ppisar@redhat.com> - 4:5.14.2-202
+- Sub-package Pod::Perldoc
+
+* Fri Nov 18 2011 Petr Pisar <ppisar@redhat.com> - 4:5.14.2-201
+- Increase epoch of perl-Module-CoreList to overcome version regression in
+  upstream (bug #754641)
+
+* Thu Nov  3 2011 Marcela Mašláňová <mmaslano@redhat.com> - 4:5.14.2-200
+- perl(DBIx::Simple) is not needed in spec requirement in CPANPLUS. It's generated
+  automatically.
+
+* Wed Nov 02 2011 Petr Pisar <ppisar@redhat.com> - 4:5.14.2-199
+- Provide perl(DB) by perl
+
+* Mon Oct 24 2011 Petr Pisar <ppisar@redhat.com> - 4:5.14.2-198
+- Do not warn about missing site directories (bug #732799)
+
+* Thu Oct 20 2011 Marcela Mašláňová <mmaslano@redhat.com> - 4:5.14.2-197
+- cleaned spec (thanks to Grigory Batalov)
+-  Module-Metadata sub-package contained perl_privlib instead of privlib
+-  %%files parent section was repeated twice
+
+* Fri Oct 14 2011 Petr Pisar <ppisar@redhat.com> - 4:5.14.2-196
+- Filter false perl(DynaLoader) provide from perl-ExtUtils-MakeMaker
+  (bug #736714)
+- Change Perl_repeatcpy() prototype to allow repeat count above 2^31
+  (bug #720610)
+- Do not own site directories located in /usr/local (bug #732799)
+
+* Tue Oct 04 2011 Petr Pisar <ppisar@redhat.com> - 4:5.14.2-195
+- Fix CVE-2011-3597 (code injection in Digest) (bug #743010)
+- Sub-package Digest and thus Digest::MD5 module (bug #743247)
+
+* Tue Oct 04 2011 Iain Arnell <iarnell@gmail.com> 4:5.14.2-194
+- add provide for perl(:MODULE_COMPAT_5.14.2)
+
+* Mon Oct 03 2011 Petr Pisar <ppisar@redhat.com> - 4:5.14.2-193
+- 5.14.2 bump (see
+  https://metacpan.org/module/FLORA/perl-5.14.2/pod/perldelta.pod for release
+  notes).
+- Fixes panics when processing regular expression with \b class and /aa
+  modifier (bug #731062)
+- Fixes CVE-2011-2728 (File::Glob bsd_glob() crash with certain glob flags)
+  (bug #742987)
+
+* Mon Oct 03 2011 Petr Pisar <ppisar@redhat.com> - 4:5.14.1-192
+- Enable GDBM support again to build against new gdbm 1.9.1
+
+* Fri Sep 30 2011 Petr Pisar <ppisar@redhat.com> - 4:5.14.1-191
+- Disable NDBM support temporarily too as it's provided by gdbm package
+
+* Wed Sep 21 2011 Petr Pisar <ppisar@redhat.com> - 4:5.14.1-190
+- Disable GDBM support temporarily to build new GDBM
+
+* Thu Sep 15 2011 Petr Pisar <ppisar@redhat.com> - 4:5.14.1-189
+- Correct perl-CGI list of Provides
+- Make tests optional
+- Correct perl-ExtUtils-ParseXS Provides
+- Correct perl-Locale-Codes Provides
+- Correct perl-Module-CoreList version
+- Automate perl-Test-Simple-tests Requires version
+
+* Tue Sep 13 2011 Petr Pisar <ppisar@redhat.com> - 4:5.14.1-188
+- Make gdbm support optional to bootstrap with new gdbm
+- Split Carp into standalone sub-package to dual-live with newer versions
+  (bug #736768)
+
+* Tue Aug 30 2011 Petr Pisar <ppisar@redhat.com> - 4:5.14.1-187
+- Split Locale::Codes into standalone sub-package to dual-live with newer
+  versions (bug #717863)
+
+* Sun Aug 14 2011 Iain Arnell <iarnell@gmail.com> 4:5.14.1-186
+- perl needs to own vendorarch/auto directory
+
+* Fri Aug 05 2011 Petr Sabata <contyk@redhat.com> - 4:5.14.1-185
+- Move xsubpp to ExtUtils::ParseXS (#728393)
+
+* Fri Jul 29 2011 Iain Arnell <iarnell@gmail.com> 4:5.14.1-184
+- fix Compress-Raw-Bzip2 pacakging
+- ensure that we never bundle bzip2 or zlib
+
+* Tue Jul 26 2011 Marcela Mašláňová <mmaslano@redhat.com> - 4:5.14.1-183
+- remove from provides MODULE_COMPAT 5.12.*
+
+* Fri Jul 22 2011 Paul Howarth <paul@city-fan.org> - 4:5.14.1-182
+- Have perl-Module-Build explicitly require perl(CPAN::Meta) >= 2.110420,
+  needed for creation of MYMETA files by Build.PL; the dual-life version of
+  the package already has this dependency
+
+* Tue Jul 19 2011 Petr Sabata <contyk@redhat.com> - 4:5.14.1-181
+- Temporarily provide 5.12.* MODULE_COMPAT
+
+* Sat Jul 16 2011 Iain Arnell <iarnell@gmail.com> 4:5.14.1-180
+- fix escaping of the __provides_exclude_from macro
+
+* Wed Jul 13 2011 Iain Arnell <iarnell@gmail.com> 4:5.14.1-179
+- Parse-CPAN-Meta explicitly requires CPAN::Meta::YAML and JSON::PP
+- Exclude CPAN::Meta* from CPAN sub-package
+- Don't try to normalize CPAN-Meta, JSON-PP, and Parse-CPAN-Meta versions;
+  their dual-life packages aren't and have much higher numbers already
+
+* Mon Jun 27 2011 Marcela Mašláňová <mmaslano@redhat.com> - 4:5.14.1-178
+- update macros -> add %%perl_bootstrap 1 and example for readability
+- add into Module::Build dependency on perl-devel (contains macros.perl)
+- create new sub-package macros, because we need macros in minimal buildroot
+
+* Thu Jun 23 2011 Marcela Mašláňová <mmaslano@redhat.com> - 4:5.14.1-175
+- remove from macros BSD, because there exists BSD::Resources
+
+* Tue Jun 21 2011 Marcela Mašláňová <mmaslano@redhat.com> - 4:5.14.1-174
+- remove old MODULE_COMPATs
+
+* Mon Jun 20 2011 Iain Arnell <iarnell@gmail.com> 4:5.14.1-173
+- move ptargrep to Archive-Tar sub-package
+- fix version numbers in last two changelog entries
+
+* Mon Jun 20 2011 Paul Howarth <paul@city-fan.org> - 4:5.14.1-172
+- add provide for perl(:MODULE_COMPAT_5.14.1)
+
+* Mon Jun 20 2011 Marcela Mašláňová <mmaslano@redhat.com> - 4:5.14.1-171
+- update to 5.14.1 - no new modules, just serious bugfixes and doc
+- switch off fork test, which is failing only on koji
+
+* Thu Jun 16 2011 Marcela Mašláňová <mmaslano@redhat.com> - 4:5.14.0-170
+- try to update to latest ExtUtils::MakeMaker, no luck -> rebuild with current 
+  version, fix bug RT#67618 in modules
+
+* Wed Jun 15 2011 Marcela Mašláňová <mmaslano@redhat.com> - 4:5.14.0-169
+- filter even Mac:: requires, polish filter again for correct installation
+- add sub-package Compress-Raw-Bzip2, solve Bzip2 conflicts after install
+- and add IO::Uncompress::Bunzip2 correctly into IO-Compress
+
+* Mon Jun 13 2011 Marcela Mašláňová <mmaslano@redhat.com> - 4:5.14.0-167
+- Perl 5.14 mass rebuild, bump release, remove releases in subpackages
+
+* Thu Jun 09 2011 Marcela Mašláňová <mmaslano@redhat.com> - 4:5.14.0-165
+- Perl 5.14 mass rebuild
+
+* Thu Jun 09 2011 Marcela Mašláňová <mmaslano@redhat.com> - 4:5.14.0-163
+- Perl 5.14 mass rebuild
+
+* Thu Jun  9 2011 Marcela Mašláňová <mmaslano@redhat.com> - 4:5.14.0-162
+- add new sub-packages, remove BR in them
+
+* Wed Jun  1 2011 Marcela Mašláňová <mmaslano@redhat.com> - 4:5.14.0-161
+- arm can't do parallel builds
+- add require EE::MM into IPC::Cmd 711486
+
+* Mon May 16 2011 Marcela Mašláňová <mmaslano@redhat.com> - 4:5.14.0-161
+- test build of released 5.14.0
+- remove Class::ISA from sub-packages
+- patches 8+ are part of new release
+- remove vendorarch/auto/Compress/Zlib
+
+* Wed Apr 13 2011 Marcela Mašláňová <mmaslano@redhat.com> - 4:5.12.3-160
+- add provides UNIVERSAL and DB back into perl
+
+* Thu Apr 07 2011 Petr Pisar <ppisar@redhat.com> - 4:5.12.3-159
+- Remove rpath-make patch because we use --enable-new-dtags linker option
+
+* Fri Apr  1 2011 Marcela Mašláňová <mmaslano@redhat.com> - 4:5.12.3-158
+- 692900 - lc launders tainted flag, RT #87336
+
+* Fri Apr  1 2011 Robin Lee <cheeselee@fedoraproject.org> - 4:5.12.3-157
+- Cwd.so go to the PathTools sub-package
+
+* Tue Mar 15 2011 Marcela Mašláňová <mmaslano@redhat.com> - 4:5.12.3-156
+- sub-package Path-Tools
+
+* Sat Feb 19 2011 Iain Arnell <iarnell@gmail.com> 4:5.12.3-154
+- sub-package Scalar-List-Utils
+
+* Tue Feb 08 2011 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 4:5.12.3-153
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild
+
+* Thu Jan 27 2011 Petr Pisar <ppisar@redhat.com> - 4:5.12.3-152
+- Document ExtUtils::ParseXS upgrade in local patch tracking
+
+* Wed Jan 26 2011 Tom Callaway <spot@fedoraproject.org> - 4:5.12.3-151
+- update ExtUtils::ParseXS to 2.2206 (current) to fix Wx build
+
+* Wed Jan 26 2011 Petr Pisar <ppisar@redhat.com> - 4:5.12.3-150
+- Make %%global perl_default_filter lazy
+- Do not hard-code tapsetdir path
+
+* Tue Jan 25 2011 Lukas Berk <lberk@redhat.com> - 4:5.12.3-149
+- added systemtap tapset to make use of systemtap-sdt-devel
+- added an example systemtap script
+
+* Mon Jan 24 2011 Marcela Mašláňová <mmaslano@redhat.com> - 4:5.12.3-148
+- stable update 5.12.3
+- add COMPAT
+
+* Thu Dec  9 2010 Marcela Mašláňová <mmaslano@redhat.com> - 4:5.12.2-146
+- 463773 revert change. txt files are needed for example by UCD::Unicode,
+ PDF::API2,...
+
+* Thu Dec  9 2010 Marcela Mašláňová <mmaslano@redhat.com> - 4:5.12.2-145
+- required systemtap-sdt-devel on request in 661553
+
+* Mon Nov 29 2010 Marcela Mašláňová <mmaslano@redhat.com> - 4:5.12.2-144
+- create sub-package for CGI 3.49
+
+* Tue Nov 09 2010 Petr Pisar <ppisar@redhat.com> - 4:5.12.2-143
+- Sub-package perl-Class-ISA (bug #651317)
+
+* Mon Nov 08 2010 Petr Pisar <ppisar@redhat.com> - 4:5.12.2-142
+- Make perl(ExtUtils::ParseXS) version 4 digits long (bug #650882)
+
+* Tue Oct 19 2010 Marcela Mašláňová <mmaslano@redhat.com> - 4:5.12.2-141
+- 643447 fix redefinition of constant C in h2ph (visible in git send mail,
+  XML::Twig test suite)
+- remove ifdef for s390
+
+* Thu Oct 07 2010 Petr Pisar <ppisar@redhat.com> - 4:5.12.2-140
+- Package Test-Simple tests to dual-live with standalone package (bug #640752)
+ 
+* Wed Oct  6 2010 Marcela Mašláňová <mmaslano@redhat.com> - 4:5.12.2-139
+- remove removal of NDBM
+
+* Tue Oct 05 2010 Petr Pisar <ppisar@redhat.com> - 4:5.12.2-138
+- Consolidate Requires filtering
+- Consolidate libperl.so* Provides
+
+* Fri Oct  1 2010 Marcela Mašláňová <mmaslano@redhat.com> - 4:5.12.2-137
+- filter useless requires, provide libperl.so
+
+* Fri Oct 01 2010 Petr Pisar <ppisar@redhat.com> - 4:5.12.2-136
+- Reformat perl-threads description
+- Fix threads directories ownership
+
+* Thu Sep 30 2010 Marcela Mašláňová <mmaslano@redhat.com> - 4:5.12.2-135
+- sub-package threads
+
+* Thu Sep 23 2010 Marcela Mašláňová <mmaslano@redhat.com> - 4:5.12.2-134
+- add vendor path, clean paths in Configure in spec file
+- create sub-package threads-shared
+
+* Tue Sep  7 2010 Petr Pisar <ppisar@redhat.com> - 4:5.12.2-133
+- Do not leak when destroying thread (RT #77352, RHBZ #630667)
+
+* Tue Sep  7 2010 Petr Sabata <psabata@redhat.com> - 5:5.12.2-132
+- Fixing release number for modules
+
+* Tue Sep  7 2010 Petr Sabata <psabata@redhat.com> - 4:5.12.2-1
+- Update to 5.12.2
+- Removed one hardcoded occurence of perl version in build process
+- Added correct path to dtrace binary
+- BuildRequires: systemtap-sdt-devel
+
+* Tue Sep  7 2010 Marcela Mašláňová <mmaslano@redhat.com> - 4:5.12.1-131
+- run Configure with -Dusedtrace for systemtap support
+
+* Wed Aug 18 2010 Petr Pisar <ppisar@redhat.com> - 4:5.12.1-130
+- Run tests in parallel
+- Add "-Wl,--enable-new-dtags" to linker to allow to override perl's rpath by
+  LD_LIBRARY_PATH used in tests. Otherwise tested perl would link to old
+  in-system libperl.so.
+- Normalize spec file indentation
+
+* Mon Jul 26 2010  Marcela Mašláňová <mmaslano@redhat.com> - 4:5.12.1-129
+- 617956 move perlxs* docs files into perl-devel
+
+* Thu Jul 15 2010  Marcela Mašláňová <mmaslano@redhat.com> - 4:5.12.1-128
+- 614662 wrong perl-suidperl version in obsolete
+
+* Sun Jul 11 2010 Dan Horák <dan[at]danny.cz> - 4:5.12.1-127
+- add temporary compat provides needed on s390(x)
+
+* Fri Jul 09 2010 Petr Pisar <ppisar@redhat.com> - 4:5.12.1-126
+- Add Digest::SHA requirement to perl-CPAN and perl-CPANPLUS (bug #612563)
+
+* Thu Jul  8 2010 Marcela Mašláňová <mmaslano@redhat.com> - 4:5.12.1-125
+- 607505 add another dir into Module::Build (thanks to Paul Howarth)
+
+* Mon Jun 28 2010 Ralf Corsépius <corsepiu@fedoraproject.org> -  4:5.12.1-124
+- Address perl-Compress-Raw directory ownership (BZ 607881).
+
+* Thu Jun 10 2010 Marcela Mašláňová <mmaslano@redhat.com> - 4:5.12.1-123
+- remove patch with debugging symbols, which should be now ok without it
+- update to 5.12.1
+- MODULE_COMPAT
+
+* Tue Apr 27 2010 Marcela Mašláňová <mmaslano@redhat.com> - 4:5.12.0-122
+- packages in buildroot needs MODULE_COMPAT 5.10.1, add it back for rebuild
+
+* Sun Apr 25 2010 Marcela Mašláňová <mmaslano@redhat.com> - 4:5.12.0-121
+- rebuild with tests in test buildroot
+
+* Fri Apr 23 2010 Marcela Mašláňová <mmaslano@redhat.com> - 4:5.12.0-120-test
+- MODULE_COMPAT 5.12.0
+- remove BR man
+- clean configure
+- fix provides/requires in IO-Compress
+
+* Wed Apr 14 2010 Marcela Mašláňová <mmaslano@redhat.com> - 4:5.12.0-119.1
+- rebuild 5.12.0 without MODULE_COMPAT
+
+* Wed Apr 14 2010 Marcela Mašláňová <mmaslano@redhat.com> - 4:5.12.0-119
+- initial 5.12.0 build
+
+* Tue Apr  6 2010 Marcela Mašláňová <mmaslano@redhat.com> - 4:5.10.1-118
+- 463773 remove useless txt files from installation
+- 575842 remove PERL_USE_SAFE_PUTENV, use perl putenv
+
+* Tue Mar 16 2010 Chris Weyl <cweyl@alumni.drew.edu> - 4:5.10.1-117
+- package tests in their own subpackage
+
+* Mon Mar 15 2010 Marcela Mašláňová <mmaslano@redhat.com> - 4:5.10.1-116
+- add noarch into correct sub-packages
+- move Provides/Obsoletes into correct modules from main perl
+
+* Thu Mar 11 2010 Paul Howarth <paul@city-fan.org> - 4:5.10.1-115
+- restore missing version macros for Compress::Raw::Zlib, IO::Compress::Base
+  and IO::Compress::Zlib
+
+* Thu Mar 11 2010 Marcela Mašláňová <mmaslano@redhat.com> - 4:5.10.1-114
+- clean spec a little more
+- rebuild with new gdbm
+
+* Fri Mar  5 2010 Marcela Mašláňová <mmaslano@redhat.com> - 4:5.10.1-112
+- fix license according to advice from legal
+- clean unused patches
+
+* Wed Feb 24 2010 Chris Weyl <cweyl@alumni.drew.edu> - 4:5.10.1-111
+- update subpackage tests macros to handle packages with an epoch properly
+
+* Fri Feb 05 2010 Chris Weyl <cweyl@alumni.drew.edu> - 4:5.10.1-110
+- add initial EXPERIMENTAL tests subpackage rpm macros to macros.perl
+
+* Tue Dec 22 2009 Marcela Mašláňová <mmaslano@redhat.com> - 4:5.10.1-109
+- 547656 CVE-2009-3626 perl: regexp matcher crash on invalid UTF-8 characters  
+- 549306 version::Internals should be packaged in perl-version subpackage
+- Parse-CPAN-Meta updated and separate package is dead
+
+* Mon Dec 21 2009 Chris Weyl <cweyl@alumni.drew.edu> - 4:5.10.1-107
+- subpackage parent and Parse-CPAN-Meta; add them to core's dep list
+
+* Fri Dec 18 2009 Ralf Corsépius <corsepiu@fedoraproject.org> - 4:5.10.1-106
+- exclude "parent".
+
+* Fri Dec 18 2009 Ralf Corsépius <corsepiu@fedoraproject.org> - 4:5.10.1-105
+- exclude Parse-CPAN-Meta.
+
+* Mon Dec  7 2009 Stepan Kasal <skasal@redhat.com> - 4:5.10.1-104
+- do not pack Bzip2 manpages either (#544582)
+
+* Mon Dec  7 2009 Stepan Kasal <skasal@redhat.com> - 4:5.10.1-103
+- do not pack Bzip2 modules (#544582)
+- hack: cheat about Compress::Raw::Zlib version (#544582)
+
+* Thu Dec  3 2009 Stepan Kasal <skasal@redhat.com> - 4:5.10.1-102
+- switch off check for ppc64 and s390x
+- remove the hack for "make test," it is no longer needed
+
+* Thu Dec  3 2009 Stepan Kasal <skasal@redhat.com> - 4:5.10.1-101
+- be more careful with the libperl.so compatibility symlink (#543936)
+
+* Wed Dec  2 2009 Stepan Kasal <skasal@redhat.com> - 4:5.10.1-100
+- new upstream version
+- release number must be high, because of stale version numbers of some
+  of the subpackages
+- drop upstreamed patches
+- update the versions of bundled modules
+- shorten the paths in @INC
+- build without DEBUGGING
+- implement compatibility measures for the above two changes, for a short
+  transition period
+- provide perl(:MODULE_COMPAT_5.10.0), for that transition period only
+
+* Tue Dec  1 2009 Stepan Kasal <skasal@redhat.com> - 4:5.10.0-87
+- fix patch-update-Compress-Raw-Zlib.patch (did not patch Zlib.pm)
+- update Compress::Raw::Zlib to 2.023
+- update IO::Compress::Base, and IO::Compress::Zlib to 2.015 (#542645)
+
+* Mon Nov 30 2009 Marcela Mašláňová <mmaslano@redhat.com> - 4:5.10.0-86
+- 542645 update IO-Compress-Base
+
+* Tue Nov 24 2009 Stepan Kasal <skasal@redhat.com> - 4:5.10.0-85
+- back out perl-5.10.0-spamassassin.patch (#528572)
+
+* Thu Oct 01 2009 Chris Weyl <cweyl@alumni.drew.edu> - 4:5.10.0-84
+- add /perl(UNIVERSAL)/d; /perl(DB)/d to perl_default_filter auto-provides
+  filtering
+
+* Thu Oct  1 2009 Stepan Kasal <skasal@redhat.com> - 4:5.10.0-83
+- update Storable to 2.21
+
+* Mon Aug 31 2009 Chris Weyl <cweyl@alumni.drew.edu> - 4:5.10.0-82
+- update our Test-Simple update to 0.92 (patch by Iain Arnell), #519417
+- update Module-Pluggable to 3.9
+
+* Thu Aug 27 2009 Chris Weyl <cweyl@alumni.drew.edu> - 4:5.10.0-81
+- fix macros.perl *sigh*
+
+* Mon Aug 24 2009 Stepan Kasal <skasal@redhat.com> - 4:5.10.0-80
+- Remove -DDEBUGGING=-g, we are not ready yet.
+
+* Fri Aug 21 2009 Chris Weyl <cweyl@alumni.drew.edu> - 4:5.10.0-79
+- add helper filtering macros to -devel, for perl-* package invocation
+  (#502402)
+
+* Fri Jul 31 2009 Stepan Kasal <skasal@redhat.com> - 4:5.10.0-78
+- Add configure option -DDEBUGGING=-g (#156113)
+
+* Tue Jul 28 2009 arcela Mašláňová <mmaslano@redhat.com> - 4:5.10.0-77
+- 510127 spam assassin suffer from tainted bug
+
+* Mon Jul 27 2009 Marcela Mašláňová <mmaslano@redhat.com> - 4:5.10.0-76
+- 494773 much better swap logic to support reentrancy and fix assert failure (rt #60508)
+
+* Sat Jul 25 2009 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 4:5.10.0-75
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild
+
+* Fri Jul 10 2009 Stepan Kasal <skasal@redhat.com> - 4:5.10.0-74
+- fix generated .ph files so that they no longer cause warnings (#509676)
+- remove PREREQ_FATAL from Makefile.PL's processed by miniperl
+- update to latest Scalar-List-Utils (#507378)
+- perl-skip-prereq.patch: skip more prereq declarations in Makefile.PL files
+
+* Tue Jul  7 2009 Stepan Kasal <skasal@redhat.com> - 4:5.10.0-73
+- re-enable tests
+
+* Tue Jul  7 2009 Stepan Kasal <skasal@redhat.com> - 4:5.10.0-72
+- move -DPERL_USE_SAFE_PUTENV to ccflags (#508496)
+
+* Mon Jun  8 2009 Marcela Mašláňová <mmaslano@redhat.com> - 4:5.10.0-71
+- #504386 update of Compress::Raw::Zlib 2.020
+
+* Thu Jun  4 2009 Marcela Mašláňová <mmaslano@redhat.com> - 4:5.10.0-70
+- update File::Spec (PathTools) to 3.30
+
+* Wed Jun  3 2009 Stepan Kasal <skasal@redhat.com> - 4:5.10.0-69
+- fix #221113, $! wrongly set when EOF is reached
+
+* Fri Apr 10 2009 Marcela Mašláňová <mmaslano@redhat.com> - 4:5.10.0-68
+- do not use quotes in patchlevel.h; it breaks installation from cpan (#495183)
+
+* Tue Apr  7 2009 Stepan Kasal <skasal@redhat.com> - 4:5.10.0-67
+- update CGI to 3.43, dropping upstreamed perl-CGI-escape.patch
+
+* Tue Apr  7 2009 Stepan Kasal <skasal@redhat.com> - 4:5.10.0-66
+- fix CGI::escape for all strings (#472571)
+- perl-CGI-t-util-58.patch: Do not distort lib/CGI/t/util-58.t
+  http://rt.perl.org/rt3/Ticket/Display.html?id=64502
+
+* Fri Mar 27 2009 Stepan Kasal <skasal@redhat.com> - 4:5.10.0-65
+- Move the gargantuan Changes* collection to -devel (#492605)
+
+* Tue Mar 24 2009 Stepan Kasal <skasal@redhat.com> - 4:5.10.0-64
+- update module autodie
+
+* Mon Mar 23 2009 Stepan Kasal <skasal@redhat.com> - 4:5.10.0-63
+- update Digest::SHA (fixes 489221)
+
+* Wed Mar 11 2009 Tom "spot" Callaway <tcallawa@redhat.com> - 4:5.10.0-62
+- drop 26_fix_pod2man_upgrade (don't need it)
+- fix typo in %%define ExtUtils_CBuilder_version
+
+* Wed Mar 11 2009 Tom "spot" Callaway <tcallawa@redhat.com> - 4:5.10.0-61
+- apply Change 34507: Fix memory leak in single-char character class optimization
+- Reorder @INC, based on b9ba2fadb18b54e35e5de54f945111a56cbcb249
+- fix Archive::Extract to fix test failure caused by tar >= 1.21
+- Merge useful Debian patches
+
+* Tue Mar 10 2009 Stepan Kasal <skasal@redhat.com> - 4:5.10.0-60
+- remove compatibility obsolete sitelib directories
+- use a better BuildRoot
+- drop a redundant mkdir in %%install
+- call patchlevel.h only once; rm patchlevel.bak
+- update modules Sys::Syslog, Module::Load::Conditional, Module::CoreList,
+  Test::Harness, Test::Simple, CGI.pm (dropping the upstreamed patch),
+  File::Path (that includes our perl-5.10.0-CVE-2008-2827.patch),
+  constant, Pod::Simple, Archive::Tar, Archive::Extract, File::Fetch,
+  File::Temp, IPC::Cmd, Time::HiRes, Module::Build, ExtUtils::CBuilder
+- standardize the patches for updating embedded modules
+- work around a bug in Module::Build tests bu setting TMPDIR to a directory
+  inside the source tree
+
+* Sun Mar 08 2009 Robert Scheck <robert@fedoraproject.org> - 4:5.10.0-59
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild
+
+* Mon Feb 16 2009 Tom "spot" Callaway <tcallawa@redhat.com> - 4:5.10.0-58
+- add /usr/lib/perl5/site_perl to otherlibs (bz 484053)
+
+* Mon Feb 16 2009 Dennis Gilmore <dennis@ausil.us> - 4:5.10.0-57
+- build sparc64 without _smp_mflags
+
+* Sat Feb 07 2009 Dennis Gilmore <dennis@ausil.us> - 4:5.10.0-56
+- limit sparc builds to -j12
+
+* Tue Feb  3 2009 Marcela Mašláňová <mmaslano@redhat.com> - 4:5.10.0-55
+- update IPC::Cmd to v 0.42
+
+* Mon Jan 19 2009 Marcela Mašláňová <mmaslano@redhat.com> - 4:5.10.0-54
+- 455410 http://rt.perl.org/rt3/Public/Bug/Display.html?id=54934
+  Attempt to free unreferenced scalar fiddling with the symbol table
+  Keep the refcount of the globs generated by PerlIO::via balanced.
+
+* Mon Dec 22 2008 Marcela Mašláňová <mmaslano@redhat.com> - 4:5.10.0-53
+- add missing XHTML.pm into Pod::Simple
+
+* Fri Dec 12 2008 Marcela Mašláňová <mmaslano@redhat.com> - 4:5.10.0-52
+- 295021 CVE-2007-4829 perl-Archive-Tar directory traversal flaws
+- add another source for binary files, which test untaring links
+
+* Fri Nov 28 2008 Tom "spot" Callaway <tcallawa@redhat.com> - 4:5.10.0-51
+- to fix Fedora bz 473223, which is really perl bug #54186 (http://rt.perl.org/rt3//Public/Bug/Display.html?id=54186)
+  we apply Changes 33640, 33881, 33896, 33897
+
+* Mon Nov 24 2008 Marcela Mašláňová <mmaslano@redhat.com> - 4:5.10.0-50
+- change summary according to RFC fix summary discussion at fedora-devel :)
+
+* Thu Oct 23 2008 Tom "spot" Callaway <tcallawa@redhat.com> - 4:5.10.0-49
+- update File::Temp to 0.20
+
+* Sun Oct 12 2008 Lubomir Rintel <lkundrak@v3.sk> - 4:5.10.0-48
+- Include fix for rt#52740 to fix a crash when using Devel::Symdump and
+  Compress::Zlib together
+
+* Tue Oct 07 2008 Marcela Mašláňová <mmaslano@redhat.com> 4:5.10.0-47.fc10
+- rt#33242, rhbz#459918. Segfault after reblessing objects in Storable.
+- rhbz#465728 upgrade Simple::Pod to 3.07
+
+* Wed Oct  1 2008 Stepan Kasal <skasal@redhat.com> - 4:5.10.0-46
+- also preserve the timestamp of AUTHORS; move the fix to the recode
+  function, which is where the stamps go wrong
+
+* Wed Oct  1 2008 Tom "spot" Callaway <tcallawa@redhat.com> 4:5.10.0-45
+- give Changes*.gz the same datetime to avoid multilib conflict
+
+* Wed Sep 17 2008 Marcela Maslanova <mmaslano@redhat.com> 4:5.10.0-44.fc10
+- remove Tar.pm from Archive-Extract
+- fix version of Test::Simple in spec
+- update Test::Simple
+- update Archive::Tar to 1.38
+
+* Tue Sep 16 2008 Marcela Maslanova <mmaslano@redhat.com> 4:5.10.0-43.fc10
+- 462444 update Test::Simple to 0.80
+
+* Thu Aug 14 2008 Stepan Kasal <skasal@redhat.com> - 4:5.10.0-42.fc10
+- move libnet to the right directory, along Net/Config.pm
+
+* Wed Aug 13 2008 Stepan Kasal <skasal@redhat.com> - 4:5.10.0-41.fc10
+- do not create directory .../%%{version}/auto
+
+* Tue Aug  5 2008 Marcela Maslanova <mmaslano@redhat.com> 4:5.10.0-40.fc10
+- 457867 remove required IPC::Run from CPANPLUS - needed only by win32
+- 457771 add path
+
+* Fri Aug  1 2008 Stepan Kasal <skasal@redhat.com> 4:5.10.0-39.fc10
+- CGI.pm bug in exists() on tied param hash (#457085)
+- move the enc2xs templates (../Encode/*.e2x) to -devel, (#456534)
+
+* Mon Jul 21 2008 Marcela Maslanova <mmaslano@redhat.com> 4:5.10.0-38
+- 455933 update to CGI-3.38
+- fix fuzz problems (patch6)
+- 217833 pos() function handle unicode characters correct
+
+* Thu Jul 10 2008 Tom "spot" Callaway <tcallawa@redhat.com> 4:5.10.0-36
+- rebuild for new db4 4.7
+
+* Wed Jul  9 2008 Stepan Kasal <skasal@redhat.com> 4:5.10.0-35
+- remove db4 require, it is handled automatically
+
+* Thu Jul  3 2008 Stepan Kasal <skasal@redhat.com> 4:5.10.0-34
+- 453646 use -DPERL_USE_SAFE_PUTENV. Without fail some modules f.e. readline.
+
+* Tue Jul  1 2008 Marcela Maslanova <mmaslano@redhat.com> 4:5.10.0-33
+- 451078 update Test::Harness to 3.12 for more testing. Removed verbose 
+test, new Test::Harness has possibly verbose output, but updated package
+has a lot of features f.e. TAP::Harness. Carefully watched all new bugs 
+related to tests!
+
+* Fri Jun 27 2008 Stepan Kasal <skasal@redhat.com> 4:5.10.0-32
+- bump the release number, so that it is not smaller than in F-9
+
+* Tue Jun 24 2008 Marcela Maslanova <mmaslano@redhat.com> 4:5.10.0-28
+- CVE-2008-2827 perl: insecure use of chmod in rmtree
+
+* Wed Jun 11 2008 Marcela Maslanova <mmaslano@redhat.com> 4:5.10.0-27
+- 447371 wrong access permission rt49003
+
+* Tue Jun 10 2008 Stepan Kasal <skasal@redhat.com> 4:5.10.0-26
+- make config parameter list consistent for 32bit and 64bit platforms,
+  add config option -Dinc_version_list=none (#448735)
+- use perl_archname consistently
+- cleanup of usage of *_lib macros in %%install
+
+* Fri Jun  6 2008 Marcela Maslanova <mmaslano@redhat.com> 4:5.10.0-25
+- 449577 rebuild for FTBFS
+
+* Mon May 26 2008 Marcela Maslanova <mmaslano@redhat.com> 4:5.10.0-24
+- 448392 upstream fix for assertion
+
+* Thu May 22 2008 Tom "spot" Callaway <tcallawa@redhat.com> 4:5.10.0-23
+- sparc64 breaks with the rpath hack patch applied
+
+* Mon May 19 2008 Marcela Maslanova <mmaslano@redhat.com>
+- 447142 upgrade CGI to 3.37 (this actually happened in -21 in rawhide.)
+
+* Sat May 17 2008 Tom "spot" Callaway <tcallawa@redhat.com> 4:5.10.0-21
+- sparc64 fails two tests under mysterious circumstances. we need to get the
+  rest of the tree moving, so we temporarily disable the tests on that arch.
+
+* Tue Mar 18 2008 Tom "spot" Callaway <tcallawa@redhat.com> 4:5.10.0-20
+- create the vendor_perl/%%{perl_version}/%%{perl_archname}/auto directory 
+  in %%{_libdir} so we own it properly
+
+* Tue Mar 18 2008 Tom "spot" Callaway <tcallawa@redhat.com> 4:5.10.0-19
+- fix CPANPLUS-Dist-Build Provides/Obsoletes (bz 437615)
+- bump version on Module-CoreList subpackage
+
+* Tue Mar 18 2008 Tom "spot" Callaway <tcallawa@redhat.com> 4:5.10.0-18
+- forgot to create the auto directory for multilib vendor_perl dirs
+
+* Tue Mar 18 2008 Tom "spot" Callaway <tcallawa@redhat.com> 4:5.10.0-17
+- own multilib vendor_perl directories
+- mark Module::CoreList patch in patchlevel.h
+
+* Tue Mar 18 2008 Marcela Maslanova <mmaslano@redhat.com> 4:5.10.0-16
+- 437817: RFE: Upgrade Module::CoreList to 2.14
+
+* Wed Mar 12 2008 Marcela Maslanova <mmaslano@redhat.com> 4:5.10.0-15
+- xsubpp now lives in perl-devel instead of perl.
+
+* Sat Mar  8 2008 Tom "spot" Callaway <tcallawa@redhat.com> 4:5.10.0-14
+- back out Archive::Extract patch, causing odd test failure
+
+* Sat Mar  8 2008 Tom "spot" Callaway <tcallawa@redhat.com> 4:5.10.0-13
+- add missing lzma test file
+
+* Fri Mar  7 2008 Tom "spot" Callaway <tcallawa@redhat.com> 4:5.10.0-12
+- conditionalize multilib patch report in patchlevel.h
+- Update Archive::Extract to 0.26
+- Update Module::Load::Conditional to 0.24
+
+* Fri Mar  7 2008 Tom "spot" Callaway <tcallawa@redhat.com> 4:5.10.0-11
+- only do it once, and do it for all our patches
+
+* Fri Mar  7 2008 Tom "spot" Callaway <tcallawa@redhat.com> 4:5.10.0-10
+- note 32891 in patchlevel.h
+
+* Fri Mar  7 2008 Tom "spot" Callaway <tcallawa@redhat.com> 4:5.10.0-9
+- get rid of bad conflicts on perl-File-Temp
+
+* Fri Mar  7 2008 Tom "spot" Callaway <tcallawa@redhat.com> 4:5.10.0-8
+- use /usr/local for sitelib/sitearch dirs
+- patch 32891 for significant performance improvement
+
+* Fri Feb 22 2008 Stepan Kasal <skasal@redhat.com> - 4:5.10.0-7
+- Add perl-File-Temp provides/obsoletes/conflicts (#433836),
+  reported by Bill McGonigle <bill@bfccomputing.com>
+- escape the macros in Jan 30 entry
+
+* Tue Feb 19 2008 Fedora Release Engineering <rel-eng@fedoraproject.org> - 4:5.10.0-6
+- Autorebuild for GCC 4.3
+
+* Wed Jan 30 2008 Tom "spot" Callaway <tcallawa@redhat.com> - 4:5.10.0-5
+- disable some futime tests in t/io/fs.t because they started failing on x86_64
+  in the Fedora builders, and no one can figure out why. :/
+
+* Wed Jan 30 2008 Tom "spot" Callaway <tcallawa@redhat.com> - 4:5.10.0-4
+- create %%{_prefix}/lib/perl5/vendor_perl/%%{perl_version}/auto and own it
+  in base perl (resolves bugzilla 214580)
+
+* Thu Jan 10 2008 Tom "spot" Callaway <tcallawa@redhat.com> - 4:5.10.0-3
+- Update Sys::Syslog to 0.24, to fix test failures
+
+* Wed Jan 9 2008 Tom "spot" Callaway <tcallawa@redhat.com> - 4:5.10.0-2
+- add some BR for tests
+
+* Tue Jan 8 2008 Tom "spot" Callaway <tcallawa@redhat.com> - 4:5.10.0-1
+- 5.10.0 final
+- clear out all the unnecessary patches (down to 8 patches!)
+- get rid of super perl debugging mode
+- add new subpackages
+
+* Thu Nov 29 2007 Robin Norwood <rnorwood@redhat.com> - 4:5.10.0_RC2-0.1
+- first attempt at building 5.10.0
+
+