# Perl Assignment - Hash of Hashes
# Naomi Jones
# Survey, Summer 2025
# Assignment 8 - Perl
# July 20, 2025
# Teams using a Hash of Hashes
# NFL Team Year Owner Coach Home Stadium Division Super Bowl Wins
# Philadelphia Eagles 1933 Lurie Sirianni Lincoln Financial NFC East 2
# Buffalo Bills 1960 Pegulas McDermott Highmark AFC East 0
# Kansas City Chiefs 1960 Hunt Reid GEHA Field AFC West 4
# Baltimore Ravens 1996 Bisciotti Harbaugh M&T Bank AFC North 2
# Detroit Lions 1929 Ford Hamp Campbell Ford NFC North 0
# I have created the following array:
@teams = ( "Philadelphia Eagles" , "Buffalo Bills" , "Kansas City Chiefs" , "Baltimore Ravens" , "Detroit Lions" ) ;
# and the following Hash of Hashes:
%myTeams = (
"Philadelphia Eagles" => { start => 1933 ,
owner => "Lurie" ,
coach => "Sirianni" ,
homeStadium => "Lincoln Financial" ,
division => "NFC East" ,
superBowlWins => 2 ,
} ,
"Buffalo Bills" => { start => 1960 ,
owner => "Pegulas" ,
coach => "McDermott" ,
homeStadium => "Highmark" ,
division => "AFC East" ,
superBowlWins => 0 ,
} ,
"Kansas City Chiefs" => { start => 1960 ,
owner => "Hunt" ,
coach => "Reid" ,
homeStadium => "GEHA Field" ,
division => "AFC West" ,
superBowlWins => 4 ,
} ,
"Baltimore Ravens" => { start => 1996 ,
owner => "Bisciotti" ,
coach => "Harbaugh" ,
homeStadium => "M&T Bank" ,
division => "AFC North" ,
superBowlWins => 2 ,
} ,
"Detroit Lions" => { start => 1929 ,
owner => "Ford Hamp" ,
coach => "Campbell" ,
homeStadium => "Ford" ,
division => "NFC North" ,
superBowlWins => 0 ,
} ,
) ;
# To print out sorted Team information in the Hash of Hashes (ascending order):
print ( "\n \n Best Football Teams - sorted by Team Name ascending:\n \n " ) ;
printf ( "%-20s \t %-6s \t %-10s \t %-10s \t %-15s \t %-10s \t %-6s \n " , "Team" , "Start" , "Owner" , "Coach" , "Home Stadium" , "Division" , "SB Wins" ) ;
@sortedKeys = sort ( @teams ) ;
for $teamName ( @sortedKeys ) {
$start = $myTeams { $teamName } { 'start' } ;
$owner = $myTeams { $teamName } { 'owner' } ;
$coach = $myTeams { $teamName } { 'coach' } ;
$homeStadium = $myTeams { $teamName } { 'homeStadium' } ;
$division = $myTeams { $teamName } { 'division' } ;
$superBowlWins = $myTeams { $teamName } { 'superBowlWins' } ;
printf ( "%-20s \t %-6s \t %-10s \t %-10s \t %-15s \t %-10s \t %-6s \n " , $teamName , $start , $owner , $coach , $homeStadium , $division , $superBowlWins ) ; }
# To print out sorted Team information in the Hash of Hashes (descending order):
print ( "\n \B est Football Teams - sorted by Team Name descending:\n \n " ) ;
printf ( "%-20s \t %-6s \t %-10s \t %-10s \t %-15s \t %-10s \t %-6s \n " , "Team" , "Start" , "Owner" , "Coach" , "Home Stadium" , "Division" , "SB Wins" ) ;
@reverseKeys = reverse ( @sortedKeys ) ;
for $teamName ( @reverseKeys ) {
$start = $myTeams { $teamName } { 'start' } ;
$owner = $myTeams { $teamName } { 'owner' } ;
$coach = $myTeams { $teamName } { 'coach' } ;
$homeStadium = $myTeams { $teamName } { 'homeStadium' } ;
$division = $myTeams { $teamName } { 'division' } ;
$superBowlWins = $myTeams { $teamName } { 'superBowlWins' } ;
printf ( "%-20s \t %-6s \t %-10s \t %-10s \t %-15s \t %-10s \t %-6s \n " , $teamName , $start , $owner , $coach , $homeStadium , $division , $superBowlWins ) ; }
#HTML
print "\n \n HTML Page containing information on the best football teams:\n \n " ;
print "<title>Dream Teams</title>" ; print "<H1>Best Football Teams</H1>\n " ; print "<table border=1>\n " ; print "<tr><th>Team</th><th>Start</th><th>Owner</th><th>Coach</th><th>Home</th><th>Division</th><th>SB Wins</th></tr>\n " ;
$start = $myTeams { $teamName } { 'start' } ;
$owner = $myTeams { $teamName } { 'owner' } ;
$coach = $myTeams { $teamName } { 'coach' } ;
$homeStadium = $myTeams { $teamName } { 'homeStadium' } ;
$division = $myTeams { $teamName } { 'division' } ;
$superBowlWins = $myTeams { $teamName } { 'superBowlWins' } ;
print "<tr><td>$teamName</td><td>$start</td><td>$owner</td><td>$coach</td><td>$homeStadium</td><td>$division</td><td>$superBowlWins</td></tr>\n " ; }
# XML
print "\n \n XML file containing information on my Team - by Team Name ascending:\n \n " ;
print "<?xml version=\" 1.0\" ?>\n " ;
$start = $myTeams { $teamName } { 'start' } ;
$owner = $myTeams { $teamName } { 'owner' } ;
$coach = $myTeams { $teamName } { 'coach' } ;
$homeStadium = $myTeams { $teamName } { 'homeStadium' } ;
$division = $myTeams { $teamName } { 'division' } ;
$superBowlWins = $myTeams { $teamName } { 'superBowlWins' } ;
print " <teamName>$teamName</teamName>\n " ; print " <start>$start</start>\n " ; print " <owner>$owner</owner>\n " ; print " <coach>$coach</coach>\n " ; print " <homeStadium>$homeStadium</homeStadium>\n " ; print " <division>$division</division>\n " ; print " <superBowlWins>$superBowlWins</superBowlWins>\n " ; }
IyBQZXJsIEFzc2lnbm1lbnQgLSBIYXNoIG9mIEhhc2hlcwojIE5hb21pIEpvbmVzCiMgU3VydmV5LCBTdW1tZXIgMjAyNQojIEFzc2lnbm1lbnQgOCAtIFBlcmwKIyBKdWx5IDIwLCAyMDI1CgojIFRlYW1zIHVzaW5nIGEgSGFzaCBvZiBIYXNoZXMKCiMgTkZMIFRlYW0gICAgICAgICAgICAgICAgIFllYXIgICAgICAgT3duZXIgICAgICAgICAgQ29hY2ggICAgICAgICAgICBIb21lIFN0YWRpdW0gICAgICAgICAgRGl2aXNpb24gICAgICAgU3VwZXIgQm93bCBXaW5zCiAKIyBQaGlsYWRlbHBoaWEgRWFnbGVzICAxOTMzICAgICAgIEx1cmllICAgICAgICAgICAgIFNpcmlhbm5pICAgICAgICAgIExpbmNvbG4gRmluYW5jaWFsICAgICAgIE5GQyBFYXN0ICAgICAgICAgICAgIDIKIyBCdWZmYWxvIEJpbGxzICAgICAgICAgICAgICAgMTk2MCAgICAgICBQZWd1bGFzICAgICAgICBNY0Rlcm1vdHQgICAgSGlnaG1hcmsgICAgICAgICAgICAgICAgICAgQUZDIEVhc3QgICAgICAgICAgICAgMAojIEthbnNhcyBDaXR5IENoaWVmcyAgIDE5NjAgICAgICAgSHVudCAgICAgICAgICAgICAgUmVpZCAgICAgICAgICAgICAgR0VIQSBGaWVsZCAgICAgICAgICAgICAgIEFGQyBXZXN0ICAgICAgICAgICAgIDQKIyBCYWx0aW1vcmUgUmF2ZW5zICAgICAxOTk2ICAgICAgIEJpc2Npb3R0aSAgICAgICAgIEhhcmJhdWdoICAgICAgTSZUIEJhbmsgICAgICAgICAgICAgICAgIEFGQyBOb3J0aCAgICAgICAgICAgIDIKIyBEZXRyb2l0IExpb25zICAgICAgICAgICAgIDE5MjkgICAgICAgRm9yZCBIYW1wICAgIENhbXBiZWxsICAgICAgIEZvcmQgICAgICAgICAgICAgICAgICAgICAgICAgIE5GQyBOb3J0aCAgICAgICAgICAgMAoKIyBJIGhhdmUgY3JlYXRlZCB0aGUgZm9sbG93aW5nIGFycmF5OgoKQHRlYW1zID0gKCJQaGlsYWRlbHBoaWEgRWFnbGVzIiwgIkJ1ZmZhbG8gQmlsbHMiLCAiS2Fuc2FzIENpdHkgQ2hpZWZzIiwgIkJhbHRpbW9yZSBSYXZlbnMiLCAiRGV0cm9pdCBMaW9ucyIpOwoKIyBhbmQgdGhlIGZvbGxvd2luZyBIYXNoIG9mIEhhc2hlczoKCiVteVRlYW1zID0gKAogICAgIlBoaWxhZGVscGhpYSBFYWdsZXMiID0+IHsgc3RhcnQgPT4gMTkzMywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyID0+ICJMdXJpZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2FjaCA9PiAiU2lyaWFubmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9tZVN0YWRpdW0gPT4gIkxpbmNvbG4gRmluYW5jaWFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpdmlzaW9uID0+ICJORkMgRWFzdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBlckJvd2xXaW5zID0+IDIsICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgIkJ1ZmZhbG8gQmlsbHMiICAgICAgID0+IHsgc3RhcnQgPT4gMTk2MCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyID0+ICJQZWd1bGFzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvYWNoID0+ICJNY0Rlcm1vdHQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9tZVN0YWRpdW0gPT4gIkhpZ2htYXJrIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpdmlzaW9uID0+ICJBRkMgRWFzdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBlckJvd2xXaW5zID0+IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAiS2Fuc2FzIENpdHkgQ2hpZWZzIiAgPT4geyBzdGFydCA9PiAxOTYwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3duZXIgPT4gIkh1bnQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29hY2ggPT4gIlJlaWQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9tZVN0YWRpdW0gPT4gIkdFSEEgRmllbGQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2aXNpb24gPT4gIkFGQyBXZXN0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cGVyQm93bFdpbnMgID0+IDQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAiQmFsdGltb3JlIFJhdmVucyIgICAgPT4geyBzdGFydCA9PiAxOTk2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3duZXIgPT4gIkJpc2Npb3R0aSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2FjaCA9PiAiSGFyYmF1Z2giLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9tZVN0YWRpdW0gPT4gIk0mVCBCYW5rIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpdmlzaW9uID0+ICJBRkMgTm9ydGgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwZXJCb3dsV2lucyA9PiAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgIkRldHJvaXQgTGlvbnMiICAgICAgICA9PiB7IHN0YXJ0ID0+IDE5MjksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3duZXIgPT4gIkZvcmQgSGFtcCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29hY2ggPT4gIkNhbXBiZWxsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob21lU3RhZGl1bSA9PiAiRm9yZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2aXNpb24gPT4gIk5GQyBOb3J0aCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwZXJCb3dsV2lucyA9PiAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKTsKCiAgICAjIFRvIHByaW50IG91dCBzb3J0ZWQgVGVhbSBpbmZvcm1hdGlvbiBpbiB0aGUgSGFzaCBvZiBIYXNoZXMgKGFzY2VuZGluZyBvcmRlcik6CgogICAgcHJpbnQgKCJcblxuQmVzdCBGb290YmFsbCBUZWFtcyAtIHNvcnRlZCBieSBUZWFtIE5hbWUgYXNjZW5kaW5nOlxuXG4iKTsKCiAgICBwcmludGYoIiUtMjBzIFx0JS02cyBcdCUtMTBzIFx0JS0xMHMgXHQlLTE1cyBcdCUtMTBzIFx0JS02cyBcbiIsICJUZWFtIiwgIlN0YXJ0IiwgIk93bmVyIiwgIkNvYWNoIiwgIkhvbWUgU3RhZGl1bSIsICJEaXZpc2lvbiIsICJTQiBXaW5zIik7CgogICAgQHNvcnRlZEtleXMgPSBzb3J0IChAdGVhbXMpOwoKICAgIGZvciAkdGVhbU5hbWUgKEBzb3J0ZWRLZXlzKSB7CiAgICAgICAgJHN0YXJ0ID0gJG15VGVhbXN7JHRlYW1OYW1lfXsnc3RhcnQnfTsKICAgICAgICAkb3duZXIgPSAkbXlUZWFtc3skdGVhbU5hbWV9eydvd25lcid9OwogICAgICAgICRjb2FjaCA9ICRteVRlYW1zeyR0ZWFtTmFtZX17J2NvYWNoJ307CiAgICAgICAgJGhvbWVTdGFkaXVtID0gJG15VGVhbXN7JHRlYW1OYW1lfXsnaG9tZVN0YWRpdW0nfTsKICAgICAgICAkZGl2aXNpb24gPSAkbXlUZWFtc3skdGVhbU5hbWV9eydkaXZpc2lvbid9OwogICAgICAgICRzdXBlckJvd2xXaW5zID0gJG15VGVhbXN7JHRlYW1OYW1lfXsnc3VwZXJCb3dsV2lucyd9OwoKICAgICAgICBwcmludGYoIiUtMjBzIFx0JS02cyBcdCUtMTBzIFx0JS0xMHMgXHQlLTE1cyBcdCUtMTBzIFx0JS02cyBcbiIsICR0ZWFtTmFtZSwgJHN0YXJ0LCAkb3duZXIsICRjb2FjaCwgJGhvbWVTdGFkaXVtLCAkZGl2aXNpb24sICRzdXBlckJvd2xXaW5zKTsKICAgICAgICBwcmludCAiXG4iOwogICAgfQoKICAgICMgVG8gcHJpbnQgb3V0IHNvcnRlZCBUZWFtIGluZm9ybWF0aW9uIGluIHRoZSBIYXNoIG9mIEhhc2hlcyAoZGVzY2VuZGluZyBvcmRlcik6CgogICAgcHJpbnQgKCJcblxCZXN0IEZvb3RiYWxsIFRlYW1zIC0gc29ydGVkIGJ5IFRlYW0gTmFtZSBkZXNjZW5kaW5nOlxuXG4iKTsKCiAgICBwcmludGYoIiUtMjBzIFx0JS02cyBcdCUtMTBzIFx0JS0xMHMgXHQlLTE1cyBcdCUtMTBzIFx0JS02cyBcbiIsICJUZWFtIiwgIlN0YXJ0IiwgIk93bmVyIiwgIkNvYWNoIiwgIkhvbWUgU3RhZGl1bSIsICJEaXZpc2lvbiIsICJTQiBXaW5zIik7CgogICAgQHJldmVyc2VLZXlzID0gcmV2ZXJzZSAoQHNvcnRlZEtleXMpOwoKICAgZm9yICR0ZWFtTmFtZSAoQHJldmVyc2VLZXlzKSB7CiAgICAgICAgJHN0YXJ0ID0gJG15VGVhbXN7JHRlYW1OYW1lfXsnc3RhcnQnfTsKICAgICAgICAkb3duZXIgPSAkbXlUZWFtc3skdGVhbU5hbWV9eydvd25lcid9OwogICAgICAgICRjb2FjaCA9ICRteVRlYW1zeyR0ZWFtTmFtZX17J2NvYWNoJ307CiAgICAgICAgJGhvbWVTdGFkaXVtID0gJG15VGVhbXN7JHRlYW1OYW1lfXsnaG9tZVN0YWRpdW0nfTsKICAgICAgICAkZGl2aXNpb24gPSAkbXlUZWFtc3skdGVhbU5hbWV9eydkaXZpc2lvbid9OwogICAgICAgICRzdXBlckJvd2xXaW5zID0gJG15VGVhbXN7JHRlYW1OYW1lfXsnc3VwZXJCb3dsV2lucyd9OwogICAgICAgIAogICAgICAgIHByaW50ZigiJS0yMHMgXHQlLTZzIFx0JS0xMHMgXHQlLTEwcyBcdCUtMTVzIFx0JS0xMHMgXHQlLTZzIFxuIiwgJHRlYW1OYW1lLCAkc3RhcnQsICRvd25lciwgJGNvYWNoLCAkaG9tZVN0YWRpdW0sICRkaXZpc2lvbiwgJHN1cGVyQm93bFdpbnMpOwogICAgICAgIHByaW50ICJcbiI7CiAgICB9CiAgICAKICAgI0hUTUwgIAogICAgcHJpbnQgIlxuXG5IVE1MIFBhZ2UgY29udGFpbmluZyBpbmZvcm1hdGlvbiBvbiB0aGUgYmVzdCBmb290YmFsbCB0ZWFtczpcblxuIjsKCiAgICBwcmludCAiPGh0bWw+XG4iOwogICAgcHJpbnQgIjxoZWFkPlxuIjsKICAgIHByaW50ICI8dGl0bGU+RHJlYW0gVGVhbXM8L3RpdGxlPiI7CiAgICBwcmludCAiPC9oZWFkPlxuIjsKICAgIHByaW50ICI8Ym9keT5cbiI7CiAgICBwcmludCAiPEgxPkJlc3QgRm9vdGJhbGwgVGVhbXM8L0gxPlxuIjsKICAgIHByaW50ICI8dGFibGUgYm9yZGVyPTE+XG4iOwogICAgcHJpbnQgIjx0cj48dGg+VGVhbTwvdGg+PHRoPlN0YXJ0PC90aD48dGg+T3duZXI8L3RoPjx0aD5Db2FjaDwvdGg+PHRoPkhvbWU8L3RoPjx0aD5EaXZpc2lvbjwvdGg+PHRoPlNCIFdpbnM8L3RoPjwvdHI+XG4iOwoKICAgIGZvciAkdGVhbU5hbWUgKHNvcnQga2V5cyAlbXlUZWFtcyApIHsKICAgICAgICAkc3RhcnQgPSAkbXlUZWFtc3skdGVhbU5hbWV9eydzdGFydCd9OwogICAgICAgICRvd25lciA9ICRteVRlYW1zeyR0ZWFtTmFtZX17J293bmVyJ307CiAgICAgICAgJGNvYWNoID0gJG15VGVhbXN7JHRlYW1OYW1lfXsnY29hY2gnfTsKICAgICAgICAkaG9tZVN0YWRpdW0gPSAkbXlUZWFtc3skdGVhbU5hbWV9eydob21lU3RhZGl1bSd9OwogICAgICAgICRkaXZpc2lvbiA9ICRteVRlYW1zeyR0ZWFtTmFtZX17J2RpdmlzaW9uJ307CiAgICAgICAgJHN1cGVyQm93bFdpbnMgPSAkbXlUZWFtc3skdGVhbU5hbWV9eydzdXBlckJvd2xXaW5zJ307CgogICAgICAgIHByaW50ICI8dHI+PHRkPiR0ZWFtTmFtZTwvdGQ+PHRkPiRzdGFydDwvdGQ+PHRkPiRvd25lcjwvdGQ+PHRkPiRjb2FjaDwvdGQ+PHRkPiRob21lU3RhZGl1bTwvdGQ+PHRkPiRkaXZpc2lvbjwvdGQ+PHRkPiRzdXBlckJvd2xXaW5zPC90ZD48L3RyPlxuIjsKICAgIH0KICAgIHByaW50ICI8L3RhYmxlPlxuIjsKICAgIHByaW50ICI8L2JvZHk+XG4iOwogICAgcHJpbnQgIjwvaHRtbD5cbiI7CgojIFhNTApwcmludCAiXG5cblhNTCBmaWxlIGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gb24gbXkgVGVhbSAtIGJ5IFRlYW0gTmFtZSBhc2NlbmRpbmc6XG5cbiI7CgpwcmludCAiPD94bWwgdmVyc2lvbj1cIjEuMFwiPz5cbiI7CiAgICBwcmludCAiPHRlYW1zPlxuIjsKCiAgICBmb3IgJHRlYW1OYW1lIChzb3J0IGtleXMgJW15VGVhbXMgKSB7CgogICAgcHJpbnQgIiAgPHRlYW0+XG4iOwoKICAgICRzdGFydCA9ICRteVRlYW1zeyR0ZWFtTmFtZX17J3N0YXJ0J307CiAgICAkb3duZXIgPSAkbXlUZWFtc3skdGVhbU5hbWV9eydvd25lcid9OwogICAgJGNvYWNoID0gJG15VGVhbXN7JHRlYW1OYW1lfXsnY29hY2gnfTsKICAgICRob21lU3RhZGl1bSA9ICRteVRlYW1zeyR0ZWFtTmFtZX17J2hvbWVTdGFkaXVtJ307CiAgICAkZGl2aXNpb24gPSAkbXlUZWFtc3skdGVhbU5hbWV9eydkaXZpc2lvbid9OwogICAgJHN1cGVyQm93bFdpbnMgPSAkbXlUZWFtc3skdGVhbU5hbWV9eydzdXBlckJvd2xXaW5zJ307CgogICAgcHJpbnQgIiBcbiI7CgogICAgcHJpbnQgIiA8dGVhbU5hbWU+JHRlYW1OYW1lPC90ZWFtTmFtZT5cbiI7CiAgICBwcmludCAiIDxzdGFydD4kc3RhcnQ8L3N0YXJ0PlxuIjsKICAgIHByaW50ICIgPG93bmVyPiRvd25lcjwvb3duZXI+XG4iOwogICAgcHJpbnQgIiA8Y29hY2g+JGNvYWNoPC9jb2FjaD5cbiI7CiAgICBwcmludCAiIDxob21lU3RhZGl1bT4kaG9tZVN0YWRpdW08L2hvbWVTdGFkaXVtPlxuIjsKICAgIHByaW50ICIgPGRpdmlzaW9uPiRkaXZpc2lvbjwvZGl2aXNpb24+XG4iOwogICAgcHJpbnQgIiA8c3VwZXJCb3dsV2lucz4kc3VwZXJCb3dsV2luczwvc3VwZXJCb3dsV2lucz5cbiI7CiAgICBwcmludCAiIDwvdGVhbT5cbiI7CiAgfQogIHByaW50ICI8L3RlYW1zPlxuIjs=