Re: BBC testing from upriver downwards
[email protected] (James E Keenan) Thu, 30 Mar 2017 16:36:05 -0400
| Newsgroups | perl.qa |
|---|---|
| Message-ID | <[email protected]> |
--------------1159120156855FF65C38F28A
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 8bit
On 03/20/2017 09:32 PM, James E Keenan wrote:
> On 03/17/2017 09:42 PM, Karen Etheridge wrote:
>> >
>> 1. Compose a list of CPAN distros starting with those farthest up river,
>> i.e., distros that only depend on the perl 5 core. Within that set of
>> distros I'd like to order them from most reverse dependencies to
>> fewest. Then go down river from there.
>>
>> David Golden has a script for generating the CPAN river heirarchy --
>> the last run of this that I know of (at least, it's the data I've been
>> working off of) is at https://gist.github.com/xdg/af7a32c5b21d45a6b255
>> <https://gist.github.com/xdg/af7a32c5b21d45a6b255>. It lists the
>> distributions in their position on the CPAN river, and their top 5 users
>> (reverse dependencies). This would be a natural place to start testing,
>> and determining which branches of the river have blockages (the first
>> instance of a no-dot-in-INC issue). David, can you generate a fresh
>> copy?
>>
>
> Karen, thanks for that link. Actually, just using the first 1000 or so
> distros in that gist as is would suffice for now.
>
> We now have a perl-5.25.11 tarball which contains
> no-dot-by-default-in-@INC. So we have a real (dev) release with which
> to begin testing CPAN distros.
>
> The next question is: How can I set up a reporting apparatus such that
> when a distro fails I can retain the complete test run/output on disk
> for inspection?
>
The approach I took today was as follows:
1. I took the file which David Golden prepared last year as a proxy for
the current state of the river. I decompressed it to a plain-text file
called 'river-2016-02-27.txt'.
2. I wrote a program (attached) called get-upriver-distros.pl to parse
the plain-text file for the first 1000 distros found, which were stored
in another plain-text file called top-1000.txt.
3. Built and installed perl5 blead for testing, then installed 'cpanm'
against that perl.
4. cat top-1000.txt | xargs bin/cpanm install && go get breakfast
5. Copied and renamed the 'cpanm' build.log to 20170330-1000-build.log.gz.
6. grepped out relevant lines from the build log:
zgrep FAIL 20170330-1000-build.log.gz | grep -v 'Result: FAIL' | sed -e
's/^-> //' > 20170330-1000-fails.txt
7. Wrote second perl program (attached) called 'order-battle.pl' to
record the order in which various modules *first* appeared in the
'fails' file and the total number of times each module was cited.
Results are attached as 'order-of-battle-20170330.txt'.
What is the "order of battle"? It's the order in which, as of today, we
need to get new CPAN releases out so that down-river distros are no
longer failing due to failures in their upstream dependencies.
For example, today David Golden prepared a new version of Sub::Uplevel
-- the #1 distro in the order of battle. Once he releases that to CPAN,
a tremendous number of downstream distros will have their prerequisites
satisfied and -- assuming they don't have their own configure/build/test
failures -- will become installable via this perl-5.26.0-friendly cpanm.
This approach is useful for me because I only have a laptop to work
with. YMMV.
Thank you very much.
Jim Keenan
--------------1159120156855FF65C38F28A
Content-Type: application/x-perl;
name="get-upriver-distros.pl"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
filename="get-upriver-distros.pl"
# perl
use strict;
use warnings;
use 5.10.1;
use Data::Dumper;$Data::Dumper::Indent=1;
use Data::Dump qw( dd pp );
use Carp;
use Cwd;
use IO::File;
my $cwd = cwd();
croak "Must supply positive integer as command-line argument"
unless (@ARGV == 1 and $ARGV[0] =~ m/^\d+$/ and $ARGV[0]);
my $target_count = shift(@ARGV);
my @distros = ();
my $file = "$cwd/river-2016-02-27.txt";
my $IN = IO::File->new($file, 'r');
croak "Unable to open $file" unless defined $IN;
while (my $l = <$IN>) {
chomp $l;
next if $l =~ m/<(?:blead|cpan)-upstream>/;
next unless $l =~ m/^\s*(\d+)\s(\S+)/;
my ($depcount, $distro) = ($1,$2);
next if $distro eq 'perl';
my $module = $distro;
$module =~ s/-/::/g;
push @distros, [ $distro, $depcount, $module ];
}
$IN->close or croak "Unable to close $file after reading";
say STDOUT "$_->[2]" for @distros[0 .. ($target_count - 1)];
say STDERR "Finished";
--------------1159120156855FF65C38F28A
Content-Type: text/plain; charset=UTF-8;
name="order-of-battle-20170330.txt"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="order-of-battle-20170330.txt"
ICAxICBTdWI6OlVwbGV2ZWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMwogIDIgIFN1Yjo6SWRlbnRpZnkgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA2CiAgMyAgRGV2ZWw6Ok92ZXJsb2FkSW5mbyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDEKICA0ICBUZXN0OjpDbGVhbk5hbWVzcGFjZXMgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQogIDUgIG5hbWVzcGFjZTo6YXV0b2Ns
ZWFuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ4CiAgNiAgRGF0ZVRpbWU6
OlRpbWVab25lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKICA3ICBE
YXRlVGltZTo6TG9jYWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
NAogIDggIFRlc3Q6OkV4Y2VwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDUwCiAgOSAgTW9vc2U6OlV0aWw6OlR5cGVDb25zdHJhaW50cyAgICAgICAgICAg
ICAgICAgICAgICAgICAgMjkKIDEwICBDYXJwOjpDbGFuICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMwogMTEgIFN1Yjo6RXhwb3J0ZXI6OkZvck1ldGhv
ZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CiAxMiAgTW9vc2U6OlJvbGUgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDIKIDEzICBNb29zZTo6
TWV0YTo6VHlwZUNvbnN0cmFpbnQ6OlVuaW9uICAgICAgICAgICAgICAgICAgICAgMQogMTQg
IE1vb3NlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDY5CiAxNSAgTW9vc2U6OkV4cG9ydGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMTMKIDE2ICBNb29zZTo6TWV0YTo6Um9sZSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMQogMTcgIFRlc3Q6Ok1vb3NlICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDEyCiAxOCAgTW9vc2VYOjpSb2xlOjpXaXRoT3Zl
cmxvYWRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgIDEKIDE5ICBNb29zZTo6VXRpbCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMwogMjAgIFRlc3Q6
Oldhcm4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CiAy
MSAgTW9vc2VYOjpSb2xlOjpQYXJhbWV0ZXJpemVkICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDgKIDIyICBNb29zZTo6TWV0YTo6Q2xhc3MgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgNAogMjMgIE1vb3NlOjpNZXRhOjpBdHRyaWJ1dGUgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA0CiAyNCAgTmV0OjpTU0xlYXkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKIDI1ICBJTzo6U29ja2V0OjpTU0wgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgogMjYgIERCSSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CiAyNyAgUGVy
bElPOjp1dGY4X3N0cmljdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEK
IDI4ICBTVVBFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMQogMjkgIE1vb3NlWDo6VHlwZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDE1CiAzMCAgTW9vc2VYOjpUeXBlczo6TW9vc2UgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMTcKIDMxICBNaXhpbjo6TGluZXdpc2U6OlJlYWRlcnMg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQogMzIgIFhNTDo6TmFtZXNwYWNlU3Vw
cG9ydCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CiAzMyAgWE1MOjpTQVg6
OkJhc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKIDM0ICBY
TUw6OlNBWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MwogMzUgIFhNTDo6U0FYOjpFeGNlcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAxCiAzNiAgQ2xvbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDcKIDM3ICBNaXhpbjo6TGluZXdpc2U6OldyaXRlcnMgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMQogMzggIEhUTUw6OlRyZWVCdWlsZGVyICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CiAzOSAgSFRUUDo6U2VydmVyOjpT
aW1wbGU6OkNHSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKIDQwICBDR0kgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAogNDEg
IFRlc3Q6Ok1vY2tNb2R1bGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAyCiA0MiAgTG9nOjpEaXNwYXRjaDo6T3V0cHV0ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDEKIDQzICBYTUw6OlNBWDo6RXhwYXQgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMQogNDQgIExvZzo6RGlzcGF0Y2ggICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAxCiA0NSAgTG9nOjpEaXNwYXRjaDo6U2NyZWVu
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKIDQ2ICBMb2c6OkRpc3BhdGNo
OjpTeXNsb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQogNDcgIExvZzo6
RGlzcGF0Y2g6OkZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCiA0
OCAgTG9nOjpEaXNwYXRjaDo6QXJyYXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDEKIDQ5ICBNb29zZVg6Ok9uZUFyZ05ldyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMQogNTAgIFJvbGU6OklkZW50aWZpYWJsZTo6SGFzSWRlbnQgICAgICAg
ICAgICAgICAgICAgICAgICAgICAxCiA1MSAgUm9sZTo6SGFzTWVzc2FnZSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKIDUyICBNb29zZTo6VXRpbDo6TWV0YVJv
bGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNwogNTMgIENvbmZpZzo6TVZQ
OjpSZWFkZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCiA1NCAgQ29u
ZmlnOjpNVlA6OlJlYWRlcjo6RmluZGFibGU6OkJ5RXh0ZW5zaW9uICAgICAgICAgICAgIDIK
IDU1ICBDb25maWc6OklOSTo6UmVhZGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMgogNTYgIENvbmZpZzo6TVZQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAyCiA1NyAgVHJlZTo6U2ltcGxlOjpWaXNpdG9yICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDEKIDU4ICBUcmVlOjpTaW1wbGUgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQogNTkgIERhdGVUaW1lOjpMb2NhbGU6
OkJhc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCiA2MCAgRGF0ZVRpbWUg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjUKIDYxICBE
YXRlVGltZTo6TG9jYWxlOjpGcm9tRGF0YSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MQogNjIgIFBQSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDEwCiA2MyAgUFBJOjpEb2N1bWVudCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDYKIDY0ICBUZXN0OjpMZWFrVHJhY2UgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgNAogNjUgIEZpbGU6OkhvbWVEaXIgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CiA2NiAgTFdQOjpQcm90b2NvbDo6
aHR0cHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKIDY3ICBDb25maWc6
Ok1WUDo6U2VjdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQogNjgg
IENvbmZpZzo6TVZQOjpBc3NlbWJsZXI6OldpdGhCdW5kbGVzICAgICAgICAgICAgICAgICAg
ICAyCiA2OSAgQ29uZmlnOjpNVlA6OlJlYWRlcjo6RmluZGVyICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDIKIDcwICBDUEFOOjpVcGxvYWRlciAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMQogNzEgIE1vb3NlWDo6VHlwZXM6OlBlcmwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAyCiA3MiAgTG9nOjpEaXNwYXRjaG91bGkgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKIDczICBQZXJsOjpQcmVyZXFT
Y2FubmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgogNzQgIENvbmZp
Zzo6TVZQOjpBc3NlbWJsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCiA3
NSAgVGVybTo6RW5jb2RpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDEKIDc2ICBDb25maWc6Ok1WUDo6UmVhZGVyOjpJTkkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMgogNzcgIE1vb3NlWDo6U2V0T25jZSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAxCiA3OCAgUG9kOjpFdmVudHVhbCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKIDc5ICBNb29zZVg6OkxhenlSZXF1aXJl
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgogODAgIFRlc3Q6Ok1vc3Qg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CiA4MSAgRGF0
ZVRpbWU6OkZvcm1hdDo6U3RycHRpbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEK
IDgyICBQYXRoOjpJc0Rldjo6T2JqZWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMQogODMgIFBhdGg6OklzRGV2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAyCiA4NCAgVGFzazo6V2Vha2VuICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMTAKIDg1ICBQYXRoOjpGaW5kRGV2ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQogODYgIE1vdXNlICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCiA4NyAgQ2FycDo6QXNz
ZXJ0OjpNb3JlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKIDg4ICBI
VFRQOjpTZXJ2ZXI6OlNpbXBsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MgogODkgIFdXVzo6TWVjaGFuaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAxCiA5MCAgUFBJOjpEb2N1bWVudDo6RnJhZ21lbnQgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDEKIDkxICBQUEk6OkR1bXBlciAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMQogOTIgIFBQSXg6OlV0aWxpdGllczo6U3RhdGVt
ZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCiA5MyAgUFBJOjpUb2tlbjo6UXVv
dGU6OlNpbmdsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKIDk0ICBQUEk6OlRv
a2VuOjpXaGl0ZXNwYWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQogOTUg
IFBQSXg6OlJlZ2V4cCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAyCiA5NiAgUFBJOjpEb2N1bWVudDo6RmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDEKIDk3ICBQUEl4OjpVdGlsaXRpZXM6Ok5vZGUgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMQogOTggIFBQSTo6Tm9kZSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAxCiA5OSAgQ2xvbmU6OlBQICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKMTAwICBEYXRlVGltZTo6RHVy
YXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQoxMDEgIExpc3Q6
OlNvbWVVdGlsczo6WFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCjEw
MiAgTGlzdDo6U29tZVV0aWxzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDEKMTAzICBMaXN0OjpVdGlsc0J5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMgoxMDQgIEZ1bmN0aW9uOjpGYWxsYmFjazo6Q29yZU9yUFAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAzCjEwNSAgQ0dJOjpDb29raWUgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKMTA2ICBUZXN0OjpXV1c6Ok1lY2hhbml6
ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQoxMDcgIERhdGE6OkNsZWFu
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCjEwOCAgRGF0
YTo6U2FoOjpOb3JtYWxpemUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgK
MTA5ICBTYWg6OlNjaGVtYTo6cmluY2k6OmZ1bmN0aW9uX21ldGEgICAgICAgICAgICAgICAg
ICAgICAgMgoxMTAgIE1vb3NlOjpNZXRhOjpUeXBlQ29uc3RyYWludDo6UGFyYW1ldGVyaXph
YmxlICAgICAgICAgICAxCjExMSAgTW9vc2U6Ok1ldGE6OlR5cGVDb25zdHJhaW50ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDMKMTEyICBNb29zZTo6TWV0YTo6VHlwZUNvZXJjaW9u
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQoxMTMgIE1vb3NlWDo6VHlwZXM6OkRh
dGVUaW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCjExNCAgRGV2ZWw6OlBh
cnRpYWxEdW1wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKMTE1ICBN
b2R1bGU6OlBhdGg6Ok1vcmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MgoxMTYgIElQQzo6UnVuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAyCjExNyAgSVBDOjpTeXN0ZW06Ok9wdGlvbnMgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDMKMTE4ICBOb2RlanM6OlV0aWwgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMQoxMTkgIERhdGE6Ok1vZGVNZXJnZSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCjEyMCAgRGF0YTo6U2FoOjpSZXNv
bHZlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKMTIxICBsaWI6OmZp
bHRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgoxMjIg
IERhdGE6OlNhaDo6Q29lcmNlQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAxCjEyMyAgRGF0YTo6U2FoOjpDb2VyY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDEKMTI0ICBQZXJpbmNpOjpTdWI6OlV0aWwgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgNwoxMjUgIERhdGE6OlNhaCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAyCjEyNiAgUGVyaW5jaTo6U3ViOjpOb3JtYWxp
emUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKMTI3ICBNb29zZTo6TWV0YTo6
Um9sZTo6QXR0cmlidXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgMQoxMjggIFBvZDo6
RXZlbnR1YWw6OlNpbXBsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCjEy
OSAgRGF0YTo6U2FoOjpVdGlsOjpUeXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDQKMTMwICBEYXRhOjpDbGVhbjo6SlNPTiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMgoxMzEgIFBlcmluY2k6OlN1Yjo6R2V0QXJnczo6QXJyYXkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAxCjEzMiAgRGF0YTo6Q2xlYW46OkZyb21KU09OICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKMTMzICBCaXQ6OlZlY3RvciAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQoxMzQgIENvbXBsZXRlOjpC
YXNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CjEzNSAgUGVy
aW5jaTo6U3ViOjpQcm9wZXJ0eVV0aWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEK
MTM2ICBQZXJpbmNpOjpPYmplY3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgNAoxMzcgIFBlcmluY2k6OlN1Yjo6UHJvcGVydHk6OmFyZzo6Y21kbGluZSAgICAg
ICAgICAgICAgICAgICAxCjEzOCAgSFRUUDo6U2VydmVyOjpTaW1wbGU6OlBTR0kgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDEKMTM5ICBIYXNoOjpNZXJnZTo6U2ltcGxlICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAoxNDAgIE1JTUU6OkNoYXJzZXQgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCjE0MSAgQ29tcGxldGU6
OkdldG9wdDo6TG9uZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKMTQyICBQ
ZXJpbmNpOjpTdWI6OkdldEFyZ3M6OkFyZ3YgICAgICAgICAgICAgICAgICAgICAgICAgICAg
NAoxNDMgIFBlcmluY2k6OkV4YW1wbGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA1CjE0NCAgTW9vc2VYOjpUeXBlczo6U3RyaW5nbGlrZSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDEKMTQ1ICBQZXJpbmNpOjpTdWI6OldyYXBwZXIgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMQoxNDYgIFByb2dyZXNzOjpBbnkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCjE0NyAgUGVyaW5jaTo6U3ViOjpD
b21wbGV0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKMTQ4ICBQZXJpbmNp
OjpBY2Nlc3M6OlNjaGVtZWxlc3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQoxNDkg
IFBlcmluY2k6OkFjY2Vzczo6UGVybCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAxCjE1MCAgTW9kdWxlOjpDUEFOZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDEKMTUxICBQYWRXYWxrZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMgoxNTIgIFBlcmluY2k6OkV4YW1wbGVzOjpDTEkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAxCjE1MyAgUGVyaW5jaTo6U3ViOjpDb252ZXJ0
QXJnczo6QXJndiAgICAgICAgICAgICAgICAgICAgICAgIDEKMTU0ICBQcm9ncmVzczo6QW55
OjpPdXRwdXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgoxNTUgIFBlcmw6
OkNyaXRpYzo6VXRpbHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCjE1
NiAgUGVybDo6Q3JpdGljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDEKMTU3ICBQZXJsOjpDcml0aWM6OlZpb2xhdGlvbiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMQoxNTggIFBlcmluY2k6OlN1Yjo6VG86OkNMSURvY0RhdGEgICAgICAg
ICAgICAgICAgICAgICAgICAgICAxCjE1OSAgUGVyaW5jaTo6QWNjZXNzICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKMTYwICBQZXJpbmNpOjpDbWRMaW5lOjpH
ZW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQoxNjEgIFBlcmluY2k6OkV4
YW1wbGVzOjpUaW55ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCjE2MiAgQ29u
ZmlnOjpJT0Q6OlJlYWRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEK
MTYzICBQZXJpbmNpOjpDbWRMaW5lOjpVdGlsOjpDb25maWcgICAgICAgICAgICAgICAgICAg
ICAgICAgMQoxNjQgIENvbXBsZXRlOjpUY3NoICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAxCjE2NSAgUGVyaW5jaTo6QWNjZXNzOjpMaXRlICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDEKMTY2ICBUZXN0OjpQZXJpbmNpOjpDbWRMaW5lICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQoxNjcgIFBlcmluY2k6OkNtZExpbmU6
OkhlbHAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCjE2OCAgUHJvZ3Jlc3M6
OkFueTo6T3V0cHV0OjpUZXJtUHJvZ3Jlc3NCYXJDb2xvciAgICAgICAgICAgIDEKMTY5ICBD
b21wbGV0ZTo6WnNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MQoxNzAgIENvbXBsZXRlOjpGaXNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAxCjE3MSAgUG9kOjpFbGVtZW50YWwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDMKMTcyICBQb2Q6OkVsZW1lbnRhbDo6U2VsZWN0b3JzICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMQoxNzMgIFBvZDo6RWxlbWVudGFsOjpUcmFuc2Zv
cm1lcjo6TmVzdGVyICAgICAgICAgICAgICAgICAgICAxCjE3NCAgUG9kOjpFbGVtZW50YWw6
OkVsZW1lbnQ6OlBvZDU6Ok9yZGluYXJ5ICAgICAgICAgICAgICAgIDEKMTc1ICBQb2Q6OkVs
ZW1lbnRhbDo6RWxlbWVudDo6UG9kNTo6Q29tbWFuZCAgICAgICAgICAgICAgICAgMgoxNzYg
IFBvZDo6RWxlbWVudGFsOjpFbGVtZW50OjpQb2Q1OjpSZWdpb24gICAgICAgICAgICAgICAg
ICAxCjE3NyAgUG9kOjpFbGVtZW50YWw6OkRvY3VtZW50ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDEKMTc4ICBQb2Q6OkVsZW1lbnRhbDo6VHlwZXMgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMgoxNzkgIFBvZDo6RWxlbWVudGFsOjpFbGVtZW50OjpQb2Q1
OjpWZXJiYXRpbSAgICAgICAgICAgICAgICAxCjE4MCAgUG9kOjpFbGVtZW50YWw6OkVsZW1l
bnQ6Ok5lc3RlZCAgICAgICAgICAgICAgICAgICAgICAgIDEKMTgxICBQb2Q6OkVsZW1lbnRh
bDo6VHJhbnNmb3JtZXI6OlBvZDUgICAgICAgICAgICAgICAgICAgICAgMgoxODIgIFBvZDo6
RWxlbWVudGFsOjpUcmFuc2Zvcm1lcjo6R2F0aGVyZXIgICAgICAgICAgICAgICAgICAxCjE4
MyAgWUFNTDo6WFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDMKMTg0ICBFeHRVdGlsczo6UGtnQ29uZmlnICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgNAoxODUgIFBlcmluY2k6OkNtZExpbmU6OkxpdGUgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAxCjE4NiAgRGF0ZVRpbWU6OkZvcm1hdDo6QnVpbGRlciAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKMTg3ICBtZXRhY2xhc3MgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgoxODggIFRlc3Q6OkNsYXNz
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCjE4OSAgTW9v
c2U6Ok1ldGE6OlR5cGVDb25zdHJhaW50OjpSb2xlICAgICAgICAgICAgICAgICAgICAgIDEK
MTkwICBNb29zZTo6RXhjZXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMQoxOTEgIERldmVsOjpDYWxsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAxCjE5MiAgRGF0ZVRpbWU6OkZvcm1hdDo6VzNDRFRGICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDIKMTkzICBEYXRlVGltZTo6Rm9ybWF0OjpNYWlsICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgoxOTQgIERCSXg6OkNvbnRleHR1YWxG
ZXRjaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCjE5NSAgUGFyc2U6OlJl
Y0Rlc2NlbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKMTk2ICBJ
Tzo6QWxsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MQoxOTcgIElubGluZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAxCjE5OCAgUGVnZXggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDEKMTk5ICBDbGFzczo6VHJpZ2dlciAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMQoyMDAgIEltYTo6REJJICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCjIwMSAgTW9vc2VYOjpUeXBlczo6
UGF0aDo6Q2xhc3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKMjAyICBBbnlFdmVu
dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgoyMDMg
IE9iamVjdDo6UGx1Z2dhYmxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAxCjIwNCAgQ2Fpcm8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDIKMjA1ICBHbGliICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMgoyMDYgIFBPRTo6Q29tcG9uZW50OjpTeW5kaWNhdG9yICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAxCjIwNyAgUGFuZ28gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKMjA4ICBQYXJzZTo6TWV0aG9k
OjpTaWduYXR1cmVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMwoyMDkgIEhUTUw6
OlRlbXBsYXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCjIx
MCAgUFBJOjpVdGlsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDEKMjExICBEYXRhOjpWaXNpdG9yOjpDYWxsYmFjayAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMgoyMTIgIERhdGE6OlZpc2l0b3IgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAxCjIxMyAgQWxpZW46Ond4V2lkZ2V0cyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKMjE0ICBhc2EgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgoyMTUgIENsYXNzOjpDb250
YWluZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCjIxNiAgRGlz
dDo6WmlsbGE6OlJvbGU6OlBsdWdpbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMK
MjE3ICBUZXN0OjpNb29zZTo6TW9yZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMgoyMTggIEV4dFV0aWxzOjpNYWtlTWFrZXI6OkNQQU5maWxlICAgICAgICAgICAg
ICAgICAgICAgICAgICAzCjIxOSAgRGlzdDo6WmlsbGE6OlJvbGU6OkZpbGVQcnVuZXIgICAg
ICAgICAgICAgICAgICAgICAgICAgIDIKMjIwICBEaXN0OjpaaWxsYTo6Um9sZTo6UGx1Z2lu
QnVuZGxlICAgICAgICAgICAgICAgICAgICAgICAgMQoyMjEgIFZlcnNpb246Ok5leHQgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCjIyMiAgRGlzdDo6Wmls
bGE6OlBsdWdpbjo6R2F0aGVyRGlyICAgICAgICAgICAgICAgICAgICAgICAgIDIKMjIzICBE
aXN0OjpaaWxsYTo6Um9sZTo6QWZ0ZXJNaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAg
MQoyMjQgIERpc3Q6OlppbGxhOjpSb2xlOjpBZnRlclJlbGVhc2UgICAgICAgICAgICAgICAg
ICAgICAgICAyCjIyNSAgRGlzdDo6WmlsbGE6OlJvbGU6OlZlcnNpb25Qcm92aWRlciAgICAg
ICAgICAgICAgICAgICAgIDEKMjI2ICBEaXN0OjpaaWxsYTo6Um9sZTo6R2l0Q29uZmlnICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMQoyMjcgIERpc3Q6OlppbGxhOjpSb2xlOjpCZWZv
cmVSZWxlYXNlICAgICAgICAgICAgICAgICAgICAgICAyCjIyOCAgVGVzdDo6RFppbCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKMjI5ICBNb29zZVg6
OlR5cGVzOjpQYXRoOjpUaW55ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgoyMzAg
IERpc3Q6OlppbGxhOjpGaWxlOjpJbk1lbW9yeSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA2CjIzMSAgRGlzdDo6WmlsbGEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDYKMjMyICBEaXN0OjpaaWxsYTo6UGx1Z2luOjpDb25maWc6OkdpdCAgICAg
ICAgICAgICAgICAgICAgICAgMQoyMzMgIERpc3Q6OlppbGxhOjpSb2xlOjpSZWxlYXNlciAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAxCjIzNCAgRGlzdDo6WmlsbGE6OlJvbGU6OkFm
dGVyQnVpbGQgICAgICAgICAgICAgICAgICAgICAgICAgIDIKMjM1ICBEaXN0OjpaaWxsYTo6
VGVzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMwoyMzYgIEdpdDo6
V3JhcHBlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCjIz
NyAgTW9vc2VYOjpUeXBlczo6Q29tbW9uOjpTdHJpbmcgICAgICAgICAgICAgICAgICAgICAg
ICAgIDEKMjM4ICBNb29zZVg6Ok1ldGE6OlR5cGVDb25zdHJhaW50OjpNb29pc2ggICAgICAg
ICAgICAgICAgICAgMQoyMzkgIExpc3Q6OkFsbFV0aWxzICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAxCjI0MCAgRGF0ZVRpbWU6OlNldCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKMjQxICBUZXN0Ojp1dGY4ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQoyNDIgIFBvZDo6RWxlbWVu
dGFsOjpQZXJsTXVuZ2VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCjI0MyAgRGlz
dDo6WmlsbGE6OlJvbGU6OkZpbGVNdW5nZXIgICAgICAgICAgICAgICAgICAgICAgICAgIDcK
MjQ0ICBQb2Q6OldlYXZlcjo6Q29uZmlnOjpBc3NlbWJsZXIgICAgICAgICAgICAgICAgICAg
ICAgICAgMQoyNDUgIERpc3Q6OlppbGxhOjpSb2xlOjpGaWxlRmluZGVyVXNlciAgICAgICAg
ICAgICAgICAgICAgICA1CjI0NiAgUG9kOjpXZWF2ZXIgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDEKMjQ3ICBCOjpVdGlscyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgoyNDggIFBlcmw6Ok1pbmltdW1WZXJz
aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCjI0OSAgREJEOjpTUUxp
dGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKMjUwICBE
Qkl4OjpDbGFzcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MgoyNTEgIFNRTDo6VHJhbnNsYXRvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAxCjI1MiAgUGFyYW1zOjpDbGFzc2lmeSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDEKMjUzICBNZXRhOjpCdWlsZGVyICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMQoyNTQgIENsYXNzOjpNaXggICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCjI1NSAgQ2xhc3M6OkFjY2Vzc29y
OjpMaXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKMjU2ICBIVFRQOjpQ
YXJzZXI6OlhTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQoyNTcg
IEhUTUw6OkVsZW1lbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAxCjI1OCAgRGF0ZTo6Q2FsYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDEKMjU5ICBSZWdleHA6OkNvbW1vbiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMgoyNjAgIE1vZHVsZTo6Q1BBTlRTOjpBbmFseXNlICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAxCjI2MSAgWE1MOjpMaWJYTUwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKMjYyICBYTUw6OkF0b20gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQoyNjMgIFhNTDo6
UlNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCjI2
NCAgRmVlZDo6RmluZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDEKMjY1ICBEYXRlVGltZTo6RXZlbnQ6OlJlY3VycmVuY2UgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMQoyNjYgIENhdGFseXN0OjpSdW50aW1lICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAyCjI2NyAgRGlzdDo6WmlsbGE6OlV0aWwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKMjY4ICBEaXN0OjpaaWxsYTo6QXBwOjpD
b21tYW5kOjphdXRob3JkZXBzICAgICAgICAgICAgICAgICAgMQoyNjkgIERpc3Q6OlppbGxh
OjpBcHA6OlRlc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCjI3MCAgU3lz
dGVtOjpDb21tYW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEK
MjcxICBUZW1wbGF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMwoyNzIgIENhdGFseXN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAyCjI3MyAgVGVtcGxhdGU6OlRpbWVyICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDEKMjc0ICBEYXRlVGltZTo6RXZlbnQ6OklDYWwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQoyNzUgIFVuaWNvZGU6OkdDU3RyaW5n
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCjI3NiAgRGlzdDo6Wmls
bGE6OkRpc3Q6OkJ1aWxkZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKMjc3ICBE
aXN0OjpaaWxsYTo6TVZQOjpBc3NlbWJsZXI6OlppbGxhICAgICAgICAgICAgICAgICAgICAg
MQoyNzggIERpc3Q6OlppbGxhOjpDaHJvbWU6OlRlc3QgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAxCjI3OSAgRGlzdDo6WmlsbGE6Ok1WUDo6U2VjdGlvbiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDEKMjgwICBTdHJpbmc6OlByaW50ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMgoyODEgIERpc3Q6OlppbGxhOjpSb2xlOjpCb290
c3RyYXAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCjI4MiAgTG9nOjpSZXBvcnQ6Ok9w
dGlvbmFsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKMjgzICBIVE1MOjpU
cmVlQnVpbGRlcjo6WFBhdGggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQoyODQg
IENvbnRleHQ6OlByZXNlcnZlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAxCjI4NSAgUGFyc2U6Ok1ldGhvZDo6U2lnbmF0dXJlczo6UGFyYW06OlBsYWNlaG9sZGVy
ICAgICAgICAgIDIKMjg2ICBNb29zZTo6TWV0YTo6TWV0aG9kICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMgoyODcgIFBhcnNlOjpNZXRob2Q6OlNpZ25hdHVyZXM6OlR5
cGVDb25zdHJhaW50ICAgICAgICAgICAgICAxCjI4OCAgTW9vc2VYOjpNZXRhOjpUeXBlQ29u
c3RyYWludDo6Rm9yY2VDb2VyY2lvbiAgICAgICAgICAgIDEKMjg5ICBNb29zZVg6OlR5cGVz
OjpTdHJ1Y3R1cmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgoyOTAgIE1vb3Nl
WDo6VHlwZXM6OlV0aWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCjI5
MSAgUGFyc2U6Ok1ldGhvZDo6U2lnbmF0dXJlczo6UGFyYW06Ok5hbWVkICAgICAgICAgICAg
ICAgIDEKMjkyICBQYXJzZTo6TWV0aG9kOjpTaWduYXR1cmVzOjpUeXBlcyAgICAgICAgICAg
ICAgICAgICAgICAgMQoyOTMgIE1vb3NlWDo6Q29uZmlnRnJvbUZpbGUgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAxCjI5NCAgRGlzdDo6WmlsbGE6OlJvbGU6OlByZXJlcVNv
dXJjZSAgICAgICAgICAgICAgICAgICAgICAgIDMKMjk1ICBUZXN0OjpNaW5pbXVtVmVyc2lv
biAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQoyOTYgIERpc3Q6OlppbGxh
OjpSb2xlOjpUZXh0VGVtcGxhdGUgICAgICAgICAgICAgICAgICAgICAgICAzCjI5NyAgRGlz
dDo6WmlsbGE6OlJvbGU6OkZpbGVHYXRoZXJlciAgICAgICAgICAgICAgICAgICAgICAgIDUK
Mjk4ICBIYXNoOjpNZXJnZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMQoyOTkgIERhdGE6OlBhZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAxCjMwMCAgTG9jYWxlOjpUZXh0RG9tYWluICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDIKMzAxICBEYXRhOjpSZWNvcmQgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQozMDIgIFRleHQ6OkxpbmVGb2xkICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCjMwMyAgTW9vWDo6Q29u
ZmlnRnJvbUZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKMzA0ICBQ
b2Q6OkNvdmVyYWdlOjpUcnVzdFBvZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MgozMDUgIERCSUN4OjpUZXN0RGF0YWJhc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAxCjMwNiAgTUlNRTo6RW50aXR5ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDEKMzA3ICBEaXN0OjpaaWxsYTo6UGx1Z2luOjpCb290c3RyYXA6
OmxpYiAgICAgICAgICAgICAgICAgICAgMQozMDggIERpc3Q6OlppbGxhOjpQbHVnaW46Ok1l
dGFDb25maWcgICAgICAgICAgICAgICAgICAgICAgICAxCjMwOSAgU2VyZWFsOjpEZWNvZGVy
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKMzEwICBIVE1MOjpG
b3JtYXRUZXh0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQozMTEg
IE1vb3NlWDo6TWV0aG9kQXR0cmlidXRlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAxCjMxMiAgTW9vc2VYOjpUcmFpdHM6OlBsdWdnYWJsZSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDEKMzEzICBMb2NhbGU6Ok1lc3NhZ2VzICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMQozMTQgIFRleHQ6OkNTViAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAxCjMxNSAgVGV4dDo6SG9nYW46OkNvbXBpbGVy
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKMzE2ICBNb2R1bGU6OkluZm8g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQozMTcgIENvbmZp
Zzo6T25pb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCjMx
OCAgSU86OkhhbmRsZTo6VXRpbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDEKMzE5ICBVUkk6OlRlbXBsYXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMQozMjAgIENHSTo6RXhwYW5kICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAxCjMyMSAgQW55OjpNb29zZSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKMzIyICBPUkxpdGUgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQozMjMgIFd4ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCjMyNCAgVGVz
dDo6QVBJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEK
MzI1ICBFeHRVdGlsczo6WFNwcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMQozMjYgIERhdGVUaW1lOjpGb3JtYXQ6OklDYWwgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAxCjMyNyAgRGF0ZVRpbWU6OkZvcm1hdDo6TmF0dXJhbCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDEKMzI4ICBEYXRlVGltZTo6Rm9ybWF0OjpGbGV4aWJs
ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQozMjkgIFBvZDo6RWxlbWVudGFsOjpU
cmFuc2Zvcm1lciAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCjMzMCAgTnVtYmVyOjpX
aXRoRXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKMzMxICBN
b29zZVg6Ok1ldGhvZDo6U2lnbmF0dXJlczo6VHlwZXMgICAgICAgICAgICAgICAgICAgICAg
MQozMzIgIE1vb3NlWDo6TWV0aG9kOjpTaWduYXR1cmVzOjpNZXRhOjpNZXRob2QgICAgICAg
ICAgICAgICAxCjMzMyAgTW9vc2VYOjpNZXRob2Q6OlNpZ25hdHVyZXMgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDEKMzM0ICBMb2c6OlJlcG9ydCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMgozMzUgIFNIQVJZQU5UTzo6QXJyYXk6OlV0aWwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCjMzNiAgWE1MOjpDb21waWxlOjpU
ZXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKMzM3ICBDbGFzczo6
QWRhcHRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQozMzgg
IENsYXNzOjpBZGFwdGVyOjpCdWlsZGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAxCjMzOSAgRGlzdDo6WmlsbGE6OlJvbGU6OlBQSSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDIKMzQwICBEaXN0OjpaaWxsYTo6Um9sZTo6UGx1Z2luQnVuZGxlOjpFYXN5
ICAgICAgICAgICAgICAgICAgMQozNDEgIERpc3Q6OlppbGxhOjpSb2xlOjpGaWxlV2F0Y2hl
ciAgICAgICAgICAgICAgICAgICAgICAgICAxCjM0MiAgRGlzdDo6WmlsbGE6OlJvbGU6Ok1l
dGFQcm92aWRlciAgICAgICAgICAgICAgICAgICAgICAgIDIKMzQzICBNb29zZVg6OlR5cGVz
OjpVUkkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQo=
--------------1159120156855FF65C38F28A
Content-Type: application/x-perl;
name="order-battle.pl"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
filename="order-battle.pl"
# perl
use strict;
use warnings;
use 5.10.1;
use Data::Dumper;$Data::Dumper::Indent=1;
use Data::Dump qw( dd pp );
use Carp;
use Cwd;
my $cwd = cwd();
croak "Must supply file in current directory as command-line argument"
unless (@ARGV == 1 and -f $ARGV[0]);
my $fails_file = shift(@ARGV);
my %failures = ();
my $rank = 0;
open my $IN, '<', $fails_file or croak "Unable to open $fails_file for reading";
while (my $l = <$IN>) {
chomp $l;
my @these_fails = ();
next unless ((@these_fails) = $l =~ m/Module '([^']+?)' is not installed/g);
for my $mod (@these_fails) {
if (! exists $failures{$mod}) {
$failures{$mod}{count} = 1;
$failures{$mod}{rank} = ++$rank;
}
else {
$failures{$mod}{count}++;
}
}
}
close $IN or croak "Unable to close $fails_file after reading";
#dd(\%failures);
for my $mod ( sort { $failures{$a}{rank} <=> $failures{$b}{rank} } keys %failures) {
printf "%3d %-50s%6d\n" => ($failures{$mod}{rank}, $mod, $failures{$mod}{count});
}
say STDERR "Finished";
--------------1159120156855FF65C38F28A--