# simply put, what this does is let you select your priorities for rooms, and fill in which
# champions you have.
# then the logic finds the champion for each room who has the highest value, with the
# least remaining value for all the other rooms.
# My "database" is missing a lot of information for champions I don't have. If you can
# fill in the blanks, PM me.
# -- Carnou, Earth-228
# Special thanks to Zero and Zero's league, [GLC] The Corps, for helping me fill in the "database".
# Currently missing champions: Martian Manhunter, Nightwing, Sinestro, Hawkgirl
# we can fill out these rooms (training, bio_lab, steel, chips, armory, drone, research, power)
# with more data as we get it.
# for any champions not yet listed, it requires clicking on an assignee of each room, getting
# the percentage they contribute, and adding it to each room.
### This section is the "configuration" section
# You list your order of preference for the rooms
# And you list the champions that you have.
# Here, we fill out the list of champions that you actually have. As this
# grows, we'll have more champions in each room than are necessarily in this list
champions = [
'penguin' ,
'red hood' ,
'atom' ,
'vixen' ,
'batman' ,
'superman' ,
'harley quinn' ,
'aquaman' ,
'bane' ,
'black canary' ,
'robin' ,
'flash' ,
'red robin' ,
'poison ivy' ,
'deadshot' ,
'dr fate' ,
'wonder woman' ,
'catwoman' ,
'killer croc' ,
'black adam' ,
'mera' ,
'green arrow' ,
'captain cold' ,
'batgirl' ,
'twoface' ,
]
# Here, we set the priority FROM LOWEST TO HIGHEST
# The algorithm will favor maximizing the rooms at the bottom
# do not add or remove rooms, simply rearrange them
priority = [
'training' ,
'training' ,
'armory' ,
'steel' ,
'steel' ,
'chips' ,
'chips' ,
'steel' ,
'steel' ,
'chips' ,
'chips' ,
'research' ,
'drone' ,
'drone' ,
'bio_lab' ,
'bio_lab' ,
'bio_lab' ,
'bio_lab' ,
'power' ,
'power' ,
]
### This is "the database". It's not really a database, but it's where
# we track champion data for each room
# Once I get the complete database information, this will go in the
# "don't touch!" section
training = {
'aquaman' : 30 ,
'atom' : 15 ,
'bane' : 30 ,
'batgirl' : 30 ,
'batman' : 30 ,
'black adam' : 10 ,
'black canary' : 30 ,
'captain cold' : 10 ,
'catwoman' : 15 ,
'cyborg' : 20 ,
'deadshot' : 20 ,
'deathstroke' : 30 ,
'dr fate' : 20 ,
'flash' : 30 ,
'green arrow' : 15 ,
'green lantern' : 20 ,
'harley quinn' : 30 ,
'joker' : 30 ,
'killer croc' : 15 ,
'luthor' : 30 ,
'mera' : 10 ,
'penguin' : 20 ,
'poison ivy' : 20 ,
'raven' : 20 ,
'red hood' : 15 ,
'red robin' : 30 ,
'robin' : 30 ,
'scarecrow' : 30 ,
'shazam' : 20 ,
'stargirl' : 20 ,
'superman' : 30 ,
'twoface' : 20 ,
'vixen' : 15 ,
'wonder woman' : 15 ,
}
bio_lab = {
'aquaman' : 30 ,
'atom' : 15 ,
'bane' : 30 ,
'batgirl' : 20 ,
'batman' : 20 ,
'black adam' : 10 ,
'black canary' : 30 ,
'captain cold' : 10 ,
'catwoman' : 10 ,
'cyborg' : 20 ,
'deadshot' : 20 ,
'deathstroke' : 30 ,
'dr fate' : 20 ,
'flash' : 30 ,
'green arrow' : 10 ,
'green lantern' : 30 ,
'harley quinn' : 20 ,
'joker' : 30 ,
'killer croc' : 15 ,
'luthor' : 20 ,
'mera' : 15 ,
'penguin' : 20 ,
'poison ivy' : 30 ,
'raven' : 30 ,
'red hood' : 15 ,
'red robin' : 20 ,
'robin' : 30 ,
'scarecrow' : 20 ,
'shazam' : 30 ,
'stargirl' : 20 ,
'superman' : 30 ,
'twoface' : 30 ,
'vixen' : 15 ,
'wonder woman' : 10 ,
}
steel = {
'aquaman' : 20 ,
'atom' : 10 ,
'bane' : 20 ,
'batgirl' : 20 ,
'batman' : 30 ,
'black adam' : 15 ,
'black canary' : 20 ,
'captain cold' : 10 ,
'catwoman' : 10 ,
'cyborg' : 30 ,
'deadshot' : 30 ,
'deathstroke' : 20 ,
'dr fate' : 30 ,
'flash' : 30 ,
'green arrow' : 10 ,
'green lantern' : 30 ,
'harley quinn' : 20 ,
'joker' : 20 ,
'killer croc' : 10 ,
'luthor' : 20 ,
'mera' : 10 ,
'penguin' : 20 ,
'poison ivy' : 20 ,
'raven' : 30 ,
'red hood' : 10 ,
'red robin' : 20 ,
'robin' : 20 ,
'scarecrow' : 20 ,
'shazam' : 30 ,
'stargirl' : 30 ,
'superman' : 30 ,
'twoface' : 20 ,
'vixen' : 10 ,
'wonder woman' : 15 ,
}
chips = {
'aquaman' : 20 ,
'atom' : 10 ,
'bane' : 20 ,
'batgirl' : 30 ,
'batman' : 30 ,
'black adam' : 10 ,
'black canary' : 20 ,
'captain cold' : 10 ,
'catwoman' : 15 ,
'cyborg' : 30 ,
'deadshot' : 20 ,
'deathstroke' : 20 ,
'dr fate' : 20 ,
'flash' : 20 ,
'green arrow' : 15 ,
'green lantern' : 20 ,
'harley quinn' : 30 ,
'joker' : 20 ,
'killer croc' : 10 ,
'luthor' : 30 ,
'mera' : 10 ,
'penguin' : 30 ,
'poison ivy' : 20 ,
'raven' : 20 ,
'red hood' : 10 ,
'red robin' : 30 ,
'robin' : 30 ,
'scarecrow' : 30 ,
'shazam' : 20 ,
'stargirl' : 20 ,
'superman' : 20 ,
'twoface' : 20 ,
'vixen' : 10 ,
'wonder woman' : 10 ,
}
armory = {
'aquaman' : 20 ,
'atom' : 10 ,
'bane' : 30 ,
'batgirl' : 20 ,
'batman' : 30 ,
'black adam' : 15 ,
'black canary' : 20 ,
'captain cold' : 10 ,
'catwoman' : 15 ,
'cyborg' : 30 ,
'deadshot' : 30 ,
'deathstroke' : 30 ,
'dr fate' : 30 ,
'flash' : 30 ,
'green arrow' : 15 ,
'green lantern' : 20 ,
'harley quinn' : 20 ,
'joker' : 30 ,
'killer croc' : 15 ,
'luthor' : 30 ,
'mera' : 10 ,
'penguin' : 20 ,
'poison ivy' : 20 ,
'raven' : 20 ,
'red hood' : 10 ,
'red robin' : 20 ,
'robin' : 20 ,
'scarecrow' : 20 ,
'shazam' : 20 ,
'stargirl' : 30 ,
'superman' : 20 ,
'twoface' : 30 ,
'vixen' : 10 ,
'wonder woman' : 10 ,
}
drone = {
'aquaman' : 20 ,
'atom' : 15 ,
'bane' : 20 ,
'batgirl' : 30 ,
'batman' : 30 ,
'black adam' : 10 ,
'black canary' : 20 ,
'catwoman' : 10 ,
'captain cold' : 10 ,
'cyborg' : 30 ,
'deadshot' : 20 ,
'deathstroke' : 30 ,
'dr fate' : 30 ,
'flash' : 20 ,
'green arrow' : 15 ,
'green lantern' : 30 ,
'harley quinn' : 30 ,
'joker' : 20 ,
'killer croc' : 10 ,
'luthor' : 30 ,
'mera' : 10 ,
'penguin' : 20 ,
'poison ivy' : 20 ,
'raven' : 20 ,
'red hood' : 10 ,
'red robin' : 30 ,
'robin' : 30 ,
'scarecrow' : 30 ,
'shazam' : 30 ,
'stargirl' : 20 ,
'superman' : 20 ,
'twoface' : 20 ,
'vixen' : 15 ,
'wonder woman' : 10 ,
}
research = {
'aquaman' : 30 ,
'atom' : 15 ,
'bane' : 30 ,
'batgirl' : 30 ,
'batman' : 30 ,
'black adam' : 10 ,
'black canary' : 20 ,
'catwoman' : 10 ,
'captain cold' : 10 ,
'cyborg' : 20 ,
'deadshot' : 20 ,
'deathstroke' : 20 ,
'dr fate' : 20 ,
'flash' : 30 ,
'green arrow' : 10 ,
'green lantern' : 20 ,
'harley quinn' : 30 ,
'joker' : 30 ,
'killer croc' : 10 ,
'luthor' : 30 ,
'mera' : 15 ,
'penguin' : 20 ,
'poison ivy' : 30 ,
'raven' : 20 ,
'red hood' : 15 ,
'red robin' : 30 ,
'robin' : 30 ,
'scarecrow' : 30 ,
'shazam' : 20 ,
'stargirl' : 20 ,
'superman' : 20 ,
'twoface' : 30 ,
'vixen' : 10 ,
'wonder woman' : 10 ,
}
power = {
'aquaman' : 30 ,
'atom' : 10 ,
'bane' : 30 ,
'batgirl' : 20 ,
'batman' : 30 ,
'black adam' : 15 ,
'black canary' : 30 ,
'captain cold' : 10 ,
'catwoman' : 10 ,
'cyborg' : 30 ,
'deadshot' : 20 ,
'deathstroke' : 20 ,
'dr fate' : 20 ,
'flash' : 30 ,
'green arrow' : 10 ,
'green lantern' : 30 ,
'harley quinn' : 20 ,
'joker' : 20 ,
'killer croc' : 10 ,
'luthor' : 20 ,
'mera' : 10 ,
'penguin' : 20 ,
'poison ivy' : 20 ,
'raven' : 30 ,
'red hood' : 10 ,
'red robin' : 20 ,
'robin' : 30 ,
'scarecrow' : 20 ,
'shazam' : 30 ,
'stargirl' : 30 ,
'superman' : 30 ,
'twoface' : 20 ,
'vixen' : 10 ,
'wonder woman' : 10 ,
}
### DO NOT MODIFY BEYOND THIS POINT
### (unless you like coding logic)
rooms = {
'training' : training,
'bio_lab' : bio_lab,
'steel' : steel,
'chips' : chips,
'armory' : armory,
'drone' : drone,
'research' : research,
'power' : power,
}
def calculate_value( champion) :
value = sum ( [ rooms[ room] [ champion] for room in priority] )
return value
while priority:
room_name = priority.pop ( )
score = -1
champ = ""
value = 999999
for champion in champions:
champ_value = calculate_value( champion)
if rooms[ room_name] [ champion] > score:
score = rooms[ room_name] [ champion]
champ = champion
value = champ_value
if rooms[ room_name] [ champion] == score and champ_value < value:
score = rooms[ room_name] [ champion]
champ = champion
value = champ_value
champions.remove ( champ)
print ( f"{champ} assigned to {room_name} with {score} points" )
IyBzaW1wbHkgcHV0LCB3aGF0IHRoaXMgZG9lcyBpcyBsZXQgeW91IHNlbGVjdCB5b3VyIHByaW9yaXRpZXMgZm9yIHJvb21zLCBhbmQgZmlsbCBpbiB3aGljaAojIGNoYW1waW9ucyB5b3UgaGF2ZS4KIyB0aGVuIHRoZSBsb2dpYyBmaW5kcyB0aGUgY2hhbXBpb24gZm9yIGVhY2ggcm9vbSB3aG8gaGFzIHRoZSBoaWdoZXN0IHZhbHVlLCB3aXRoIHRoZQojIGxlYXN0IHJlbWFpbmluZyB2YWx1ZSBmb3IgYWxsIHRoZSBvdGhlciByb29tcy4KIyBNeSAiZGF0YWJhc2UiIGlzIG1pc3NpbmcgYSBsb3Qgb2YgaW5mb3JtYXRpb24gZm9yIGNoYW1waW9ucyBJIGRvbid0IGhhdmUuICBJZiB5b3UgY2FuCiMgZmlsbCBpbiB0aGUgYmxhbmtzLCBQTSBtZS4KIyAtLSBDYXJub3UsIEVhcnRoLTIyOAoKIyBTcGVjaWFsIHRoYW5rcyB0byBaZXJvIGFuZCBaZXJvJ3MgbGVhZ3VlLCBbR0xDXSBUaGUgQ29ycHMsIGZvciBoZWxwaW5nIG1lIGZpbGwgaW4gdGhlICJkYXRhYmFzZSIuCiMgQ3VycmVudGx5IG1pc3NpbmcgY2hhbXBpb25zOiBNYXJ0aWFuIE1hbmh1bnRlciwgTmlnaHR3aW5nLCBTaW5lc3RybywgSGF3a2dpcmwKCiMgd2UgY2FuIGZpbGwgb3V0IHRoZXNlIHJvb21zICh0cmFpbmluZywgYmlvX2xhYiwgc3RlZWwsIGNoaXBzLCBhcm1vcnksIGRyb25lLCByZXNlYXJjaCwgcG93ZXIpCiMgd2l0aCBtb3JlIGRhdGEgYXMgd2UgZ2V0IGl0LgojIGZvciBhbnkgY2hhbXBpb25zIG5vdCB5ZXQgbGlzdGVkLCBpdCByZXF1aXJlcyBjbGlja2luZyBvbiBhbiBhc3NpZ25lZSBvZiBlYWNoIHJvb20sIGdldHRpbmcgCiMgdGhlIHBlcmNlbnRhZ2UgdGhleSBjb250cmlidXRlLCBhbmQgYWRkaW5nIGl0IHRvIGVhY2ggcm9vbS4KCiMjIyBUaGlzIHNlY3Rpb24gaXMgdGhlICJjb25maWd1cmF0aW9uIiBzZWN0aW9uCiMgWW91IGxpc3QgeW91ciBvcmRlciBvZiBwcmVmZXJlbmNlIGZvciB0aGUgcm9vbXMKIyBBbmQgeW91IGxpc3QgdGhlIGNoYW1waW9ucyB0aGF0IHlvdSBoYXZlLgoKIyBIZXJlLCB3ZSBmaWxsIG91dCB0aGUgbGlzdCBvZiBjaGFtcGlvbnMgdGhhdCB5b3UgYWN0dWFsbHkgaGF2ZS4gIEFzIHRoaXMKIyBncm93cywgd2UnbGwgaGF2ZSBtb3JlIGNoYW1waW9ucyBpbiBlYWNoIHJvb20gdGhhbiBhcmUgbmVjZXNzYXJpbHkgaW4gdGhpcyBsaXN0CmNoYW1waW9ucyA9IFsKCSdwZW5ndWluJywKCSdyZWQgaG9vZCcsCgknYXRvbScsCgkndml4ZW4nLAoJJ2JhdG1hbicsCgknc3VwZXJtYW4nLAoJJ2hhcmxleSBxdWlubicsCgknYXF1YW1hbicsIAoJJ2JhbmUnLAoJJ2JsYWNrIGNhbmFyeScsCgkncm9iaW4nLAoJJ2ZsYXNoJywKCSdyZWQgcm9iaW4nLAoJJ3BvaXNvbiBpdnknLAoJJ2RlYWRzaG90JywKCSdkciBmYXRlJywKCSd3b25kZXIgd29tYW4nLAoJJ2NhdHdvbWFuJywKCSdraWxsZXIgY3JvYycsCgknYmxhY2sgYWRhbScsCgknbWVyYScsCgknZ3JlZW4gYXJyb3cnLAoJJ2NhcHRhaW4gY29sZCcsCgknYmF0Z2lybCcsCgkndHdvZmFjZScsCl0KCiMgSGVyZSwgd2Ugc2V0IHRoZSBwcmlvcml0eSBGUk9NIExPV0VTVCBUTyBISUdIRVNUCiMgVGhlIGFsZ29yaXRobSB3aWxsIGZhdm9yIG1heGltaXppbmcgdGhlIHJvb21zIGF0IHRoZSBib3R0b20KIyBkbyBub3QgYWRkIG9yIHJlbW92ZSByb29tcywgc2ltcGx5IHJlYXJyYW5nZSB0aGVtCnByaW9yaXR5ID0gWwogICAgJ3RyYWluaW5nJywgCiAgICAndHJhaW5pbmcnLCAKICAgICdhcm1vcnknLCAKICAgICdzdGVlbCcsIAogICAgJ3N0ZWVsJywgCiAgICAnY2hpcHMnLCAKICAgICdjaGlwcycsIAogICAgJ3N0ZWVsJywgCiAgICAnc3RlZWwnLCAKICAgICdjaGlwcycsIAogICAgJ2NoaXBzJywgCiAgICAncmVzZWFyY2gnLCAKICAgICdkcm9uZScsIAogICAgJ2Ryb25lJywgCiAgICAnYmlvX2xhYicsIAogICAgJ2Jpb19sYWInLCAKICAgICdiaW9fbGFiJywgCiAgICAnYmlvX2xhYicsIAogICAgJ3Bvd2VyJywKICAgICdwb3dlcicsCiAgICBdCiAKIyMjIFRoaXMgaXMgInRoZSBkYXRhYmFzZSIuICBJdCdzIG5vdCByZWFsbHkgYSBkYXRhYmFzZSwgYnV0IGl0J3Mgd2hlcmUKIyB3ZSB0cmFjayBjaGFtcGlvbiBkYXRhIGZvciBlYWNoIHJvb20KIyBPbmNlIEkgZ2V0IHRoZSBjb21wbGV0ZSBkYXRhYmFzZSBpbmZvcm1hdGlvbiwgdGhpcyB3aWxsIGdvIGluIHRoZSAKIyAiZG9uJ3QgdG91Y2ghIiBzZWN0aW9uCnRyYWluaW5nID0gewogICAgJ2FxdWFtYW4nOiAzMCwKICAgICdhdG9tJzogMTUsCiAgICAnYmFuZSc6IDMwLAogICAgJ2JhdGdpcmwnOiAzMCwKICAgICdiYXRtYW4nOiAzMCwKICAgICdibGFjayBhZGFtJzogMTAsCiAgICAnYmxhY2sgY2FuYXJ5JzogMzAsCiAgICAnY2FwdGFpbiBjb2xkJzogMTAsCiAgICAnY2F0d29tYW4nOiAxNSwKICAgICdjeWJvcmcnOiAyMCwKICAgICdkZWFkc2hvdCc6IDIwLAogICAgJ2RlYXRoc3Ryb2tlJzogMzAsCiAgICAnZHIgZmF0ZSc6IDIwLAogICAgJ2ZsYXNoJzogMzAsCiAgICAnZ3JlZW4gYXJyb3cnOiAxNSwKICAgICdncmVlbiBsYW50ZXJuJzogMjAsCiAgICAnaGFybGV5IHF1aW5uJzogMzAsCiAgICAnam9rZXInOiAzMCwKICAgICdraWxsZXIgY3JvYyc6IDE1LAogICAgJ2x1dGhvcic6IDMwLAogICAgJ21lcmEnOiAxMCwKICAgICdwZW5ndWluJzogMjAsCiAgICAncG9pc29uIGl2eSc6IDIwLAogICAgJ3JhdmVuJzogMjAsCiAgICAncmVkIGhvb2QnOiAxNSwKICAgICdyZWQgcm9iaW4nOiAzMCwKICAgICdyb2Jpbic6IDMwLCAKICAgICdzY2FyZWNyb3cnOiAzMCwKICAgICdzaGF6YW0nOiAyMCwKICAgICdzdGFyZ2lybCc6IDIwLAogICAgJ3N1cGVybWFuJzogMzAsCiAgICAndHdvZmFjZSc6IDIwLAogICAgJ3ZpeGVuJzogMTUsCiAgICAnd29uZGVyIHdvbWFuJzogMTUsCn0KCmJpb19sYWIgPSB7CiAgICAnYXF1YW1hbic6IDMwLAogICAgJ2F0b20nOiAxNSwKICAgICdiYW5lJzogMzAsCiAgICAnYmF0Z2lybCc6IDIwLAogICAgJ2JhdG1hbic6IDIwLAogICAgJ2JsYWNrIGFkYW0nOiAxMCwKICAgICdibGFjayBjYW5hcnknOiAzMCwKICAgICdjYXB0YWluIGNvbGQnOiAxMCwKICAgICdjYXR3b21hbic6IDEwLAogICAgJ2N5Ym9yZyc6IDIwLAogICAgJ2RlYWRzaG90JzogMjAsCiAgICAnZGVhdGhzdHJva2UnOiAzMCwKICAgICdkciBmYXRlJzogMjAsCiAgICAnZmxhc2gnOiAzMCwKICAgICdncmVlbiBhcnJvdyc6IDEwLAogICAgJ2dyZWVuIGxhbnRlcm4nOiAzMCwKICAgICdoYXJsZXkgcXVpbm4nOiAyMCwKICAgICdqb2tlcic6IDMwLAogICAgJ2tpbGxlciBjcm9jJzogMTUsCiAgICAnbHV0aG9yJzogMjAsCiAgICAnbWVyYSc6IDE1LAogICAgJ3Blbmd1aW4nOiAyMCwKICAgICdwb2lzb24gaXZ5JzogMzAsCiAgICAncmF2ZW4nOiAzMCwKICAgICdyZWQgaG9vZCc6IDE1LAogICAgJ3JlZCByb2Jpbic6IDIwLAogICAgJ3JvYmluJzogMzAsIAogICAgJ3NjYXJlY3Jvdyc6IDIwLAogICAgJ3NoYXphbSc6IDMwLAogICAgJ3N0YXJnaXJsJzogMjAsCiAgICAnc3VwZXJtYW4nOiAzMCwKICAgICd0d29mYWNlJzogMzAsCiAgICAndml4ZW4nOiAxNSwKICAgICd3b25kZXIgd29tYW4nOiAxMCwKfQoKc3RlZWwgPSB7CiAgICAnYXF1YW1hbic6IDIwLAogICAgJ2F0b20nOiAxMCwKICAgICdiYW5lJzogMjAsCiAgICAnYmF0Z2lybCc6IDIwLAogICAgJ2JhdG1hbic6IDMwLAogICAgJ2JsYWNrIGFkYW0nOiAxNSwKICAgICdibGFjayBjYW5hcnknOiAyMCwKICAgICdjYXB0YWluIGNvbGQnOiAxMCwKICAgICdjYXR3b21hbic6IDEwLAogICAgJ2N5Ym9yZyc6IDMwLAogICAgJ2RlYWRzaG90JzogMzAsCiAgICAnZGVhdGhzdHJva2UnOiAyMCwKICAgICdkciBmYXRlJzogMzAsCiAgICAnZmxhc2gnOiAzMCwKICAgICdncmVlbiBhcnJvdyc6IDEwLAogICAgJ2dyZWVuIGxhbnRlcm4nOiAzMCwKICAgICdoYXJsZXkgcXVpbm4nOiAyMCwKICAgICdqb2tlcic6IDIwLAogICAgJ2tpbGxlciBjcm9jJzogMTAsCiAgICAnbHV0aG9yJzogMjAsCiAgICAnbWVyYSc6IDEwLAogICAgJ3Blbmd1aW4nOiAyMCwKICAgICdwb2lzb24gaXZ5JzogMjAsCiAgICAncmF2ZW4nOiAzMCwKICAgICdyZWQgaG9vZCc6IDEwLAogICAgJ3JlZCByb2Jpbic6IDIwLAogICAgJ3JvYmluJzogMjAsIAogICAgJ3NjYXJlY3Jvdyc6IDIwLAogICAgJ3NoYXphbSc6IDMwLAogICAgJ3N0YXJnaXJsJzogMzAsCiAgICAnc3VwZXJtYW4nOiAzMCwKICAgICd0d29mYWNlJzogMjAsCiAgICAndml4ZW4nOiAxMCwKICAgICd3b25kZXIgd29tYW4nOiAxNSwKfQoKY2hpcHMgPSB7CiAgICAnYXF1YW1hbic6IDIwLAogICAgJ2F0b20nOiAxMCwKICAgICdiYW5lJzogMjAsCiAgICAnYmF0Z2lybCc6IDMwLAogICAgJ2JhdG1hbic6IDMwLAogICAgJ2JsYWNrIGFkYW0nOiAxMCwKICAgICdibGFjayBjYW5hcnknOiAyMCwKICAgICdjYXB0YWluIGNvbGQnOiAxMCwKICAgICdjYXR3b21hbic6IDE1LAogICAgJ2N5Ym9yZyc6IDMwLAogICAgJ2RlYWRzaG90JzogMjAsCiAgICAnZGVhdGhzdHJva2UnOiAyMCwKICAgICdkciBmYXRlJzogMjAsCiAgICAnZmxhc2gnOiAyMCwKICAgICdncmVlbiBhcnJvdyc6IDE1LAogICAgJ2dyZWVuIGxhbnRlcm4nOiAyMCwKICAgICdoYXJsZXkgcXVpbm4nOiAzMCwKICAgICdqb2tlcic6IDIwLAogICAgJ2tpbGxlciBjcm9jJzogMTAsCiAgICAnbHV0aG9yJzogMzAsCiAgICAnbWVyYSc6IDEwLAogICAgJ3Blbmd1aW4nOiAzMCwKICAgICdwb2lzb24gaXZ5JzogMjAsCiAgICAncmF2ZW4nOiAyMCwKICAgICdyZWQgaG9vZCc6IDEwLAogICAgJ3JlZCByb2Jpbic6IDMwLAogICAgJ3JvYmluJzogMzAsIAogICAgJ3NjYXJlY3Jvdyc6IDMwLAogICAgJ3NoYXphbSc6IDIwLAogICAgJ3N0YXJnaXJsJzogMjAsCiAgICAnc3VwZXJtYW4nOiAyMCwKICAgICd0d29mYWNlJzogMjAsCiAgICAndml4ZW4nOiAxMCwKICAgICd3b25kZXIgd29tYW4nOiAxMCwKfQoKYXJtb3J5ID0gewogICAgJ2FxdWFtYW4nOiAyMCwKICAgICdhdG9tJzogMTAsCiAgICAnYmFuZSc6IDMwLAogICAgJ2JhdGdpcmwnOiAyMCwKICAgICdiYXRtYW4nOiAzMCwKICAgICdibGFjayBhZGFtJzogMTUsCiAgICAnYmxhY2sgY2FuYXJ5JzogMjAsCiAgICAnY2FwdGFpbiBjb2xkJzogMTAsCiAgICAnY2F0d29tYW4nOiAxNSwKICAgICdjeWJvcmcnOiAzMCwKICAgICdkZWFkc2hvdCc6IDMwLAogICAgJ2RlYXRoc3Ryb2tlJzogMzAsCiAgICAnZHIgZmF0ZSc6IDMwLAogICAgJ2ZsYXNoJzogMzAsCiAgICAnZ3JlZW4gYXJyb3cnOiAxNSwKICAgICdncmVlbiBsYW50ZXJuJzogMjAsCiAgICAnaGFybGV5IHF1aW5uJzogMjAsCiAgICAnam9rZXInOiAzMCwKICAgICdraWxsZXIgY3JvYyc6IDE1LAogICAgJ2x1dGhvcic6IDMwLAogICAgJ21lcmEnOiAxMCwKICAgICdwZW5ndWluJzogMjAsCiAgICAncG9pc29uIGl2eSc6IDIwLAogICAgJ3JhdmVuJzogMjAsCiAgICAncmVkIGhvb2QnOiAxMCwKICAgICdyZWQgcm9iaW4nOiAyMCwKICAgICdyb2Jpbic6IDIwLCAKICAgICdzY2FyZWNyb3cnOiAyMCwKICAgICdzaGF6YW0nOiAyMCwKICAgICdzdGFyZ2lybCc6IDMwLAogICAgJ3N1cGVybWFuJzogMjAsCiAgICAndHdvZmFjZSc6IDMwLAogICAgJ3ZpeGVuJzogMTAsCiAgICAnd29uZGVyIHdvbWFuJzogMTAsCn0KCmRyb25lID0gewogICAgJ2FxdWFtYW4nOiAyMCwKICAgICdhdG9tJzogMTUsCiAgICAnYmFuZSc6IDIwLAogICAgJ2JhdGdpcmwnOiAzMCwKICAgICdiYXRtYW4nOiAzMCwKICAgICdibGFjayBhZGFtJzogMTAsCiAgICAnYmxhY2sgY2FuYXJ5JzogMjAsCiAgICAnY2F0d29tYW4nOiAxMCwKICAgICdjYXB0YWluIGNvbGQnOiAxMCwKICAgICdjeWJvcmcnOiAzMCwKICAgICdkZWFkc2hvdCc6IDIwLAogICAgJ2RlYXRoc3Ryb2tlJzogMzAsCiAgICAnZHIgZmF0ZSc6IDMwLAogICAgJ2ZsYXNoJzogMjAsCiAgICAnZ3JlZW4gYXJyb3cnOiAxNSwKICAgICdncmVlbiBsYW50ZXJuJzogMzAsCiAgICAnaGFybGV5IHF1aW5uJzogMzAsCiAgICAnam9rZXInOiAyMCwKICAgICdraWxsZXIgY3JvYyc6IDEwLAogICAgJ2x1dGhvcic6IDMwLAogICAgJ21lcmEnOiAxMCwKICAgICdwZW5ndWluJzogMjAsCiAgICAncG9pc29uIGl2eSc6IDIwLAogICAgJ3JhdmVuJzogMjAsCiAgICAncmVkIGhvb2QnOiAxMCwKICAgICdyZWQgcm9iaW4nOiAzMCwKICAgICdyb2Jpbic6IDMwLCAKICAgICdzY2FyZWNyb3cnOiAzMCwKICAgICdzaGF6YW0nOiAzMCwKICAgICdzdGFyZ2lybCc6IDIwLAogICAgJ3N1cGVybWFuJzogMjAsCiAgICAndHdvZmFjZSc6IDIwLAogICAgJ3ZpeGVuJzogMTUsCiAgICAnd29uZGVyIHdvbWFuJzogMTAsCn0KCnJlc2VhcmNoID0gewogICAgJ2FxdWFtYW4nOiAzMCwKICAgICdhdG9tJzogMTUsCiAgICAnYmFuZSc6IDMwLAogICAgJ2JhdGdpcmwnOiAzMCwKICAgICdiYXRtYW4nOiAzMCwKICAgICdibGFjayBhZGFtJzogMTAsCiAgICAnYmxhY2sgY2FuYXJ5JzogMjAsCiAgICAnY2F0d29tYW4nOiAxMCwKICAgICdjYXB0YWluIGNvbGQnOiAxMCwKICAgICdjeWJvcmcnOiAyMCwKICAgICdkZWFkc2hvdCc6IDIwLAogICAgJ2RlYXRoc3Ryb2tlJzogMjAsCiAgICAnZHIgZmF0ZSc6IDIwLAogICAgJ2ZsYXNoJzogMzAsCiAgICAnZ3JlZW4gYXJyb3cnOiAxMCwKICAgICdncmVlbiBsYW50ZXJuJzogMjAsCiAgICAnaGFybGV5IHF1aW5uJzogMzAsCiAgICAnam9rZXInOiAzMCwKICAgICdraWxsZXIgY3JvYyc6IDEwLAogICAgJ2x1dGhvcic6IDMwLAogICAgJ21lcmEnOiAxNSwKICAgICdwZW5ndWluJzogMjAsCiAgICAncG9pc29uIGl2eSc6IDMwLAogICAgJ3JhdmVuJzogMjAsCiAgICAncmVkIGhvb2QnOiAxNSwKICAgICdyZWQgcm9iaW4nOiAzMCwKICAgICdyb2Jpbic6IDMwLCAKICAgICdzY2FyZWNyb3cnOiAzMCwKICAgICdzaGF6YW0nOiAyMCwKICAgICdzdGFyZ2lybCc6IDIwLAogICAgJ3N1cGVybWFuJzogMjAsCiAgICAndHdvZmFjZSc6IDMwLAogICAgJ3ZpeGVuJzogMTAsCiAgICAnd29uZGVyIHdvbWFuJzogMTAsCn0KCnBvd2VyID0gewogICAgJ2FxdWFtYW4nOiAzMCwKICAgICdhdG9tJzogMTAsCiAgICAnYmFuZSc6IDMwLAogICAgJ2JhdGdpcmwnOiAyMCwKICAgICdiYXRtYW4nOiAzMCwKICAgICdibGFjayBhZGFtJzogMTUsCiAgICAnYmxhY2sgY2FuYXJ5JzogMzAsCiAgICAnY2FwdGFpbiBjb2xkJzogMTAsCiAgICAnY2F0d29tYW4nOiAxMCwKICAgICdjeWJvcmcnOiAzMCwKICAgICdkZWFkc2hvdCc6IDIwLAogICAgJ2RlYXRoc3Ryb2tlJzogMjAsCiAgICAnZHIgZmF0ZSc6IDIwLAogICAgJ2ZsYXNoJzogMzAsCiAgICAnZ3JlZW4gYXJyb3cnOiAxMCwKICAgICdncmVlbiBsYW50ZXJuJzogMzAsCiAgICAnaGFybGV5IHF1aW5uJzogMjAsCiAgICAnam9rZXInOiAyMCwKICAgICdraWxsZXIgY3JvYyc6IDEwLAogICAgJ2x1dGhvcic6IDIwLAogICAgJ21lcmEnOiAxMCwKICAgICdwZW5ndWluJzogMjAsCiAgICAncG9pc29uIGl2eSc6IDIwLAogICAgJ3JhdmVuJzogMzAsCiAgICAncmVkIGhvb2QnOiAxMCwKICAgICdyZWQgcm9iaW4nOiAyMCwKICAgICdyb2Jpbic6IDMwLCAKICAgICdzY2FyZWNyb3cnOiAyMCwKICAgICdzaGF6YW0nOiAzMCwKICAgICdzdGFyZ2lybCc6IDMwLAogICAgJ3N1cGVybWFuJzogMzAsCiAgICAndHdvZmFjZSc6IDIwLAogICAgJ3ZpeGVuJzogMTAsCiAgICAnd29uZGVyIHdvbWFuJzogMTAsCn0KCiMjIyBETyBOT1QgTU9ESUZZIEJFWU9ORCBUSElTIFBPSU5UCiMjIyAodW5sZXNzIHlvdSBsaWtlIGNvZGluZyBsb2dpYykKcm9vbXMgPSB7CiAgICAndHJhaW5pbmcnOiB0cmFpbmluZywKICAgICdiaW9fbGFiJzogYmlvX2xhYiwKICAgICdzdGVlbCc6IHN0ZWVsLAogICAgJ2NoaXBzJzogY2hpcHMsCiAgICAnYXJtb3J5JzogYXJtb3J5LAogICAgJ2Ryb25lJzogZHJvbmUsCiAgICAncmVzZWFyY2gnOiByZXNlYXJjaCwKICAgICdwb3dlcic6IHBvd2VyLAp9CgpkZWYgY2FsY3VsYXRlX3ZhbHVlKGNoYW1waW9uKToKICAgIHZhbHVlID0gc3VtKFtyb29tc1tyb29tXVtjaGFtcGlvbl0gZm9yIHJvb20gaW4gcHJpb3JpdHldKQogICAgcmV0dXJuIHZhbHVlCgp3aGlsZSBwcmlvcml0eToKICAgIHJvb21fbmFtZSA9IHByaW9yaXR5LnBvcCgpCiAgICBzY29yZSA9IC0xCiAgICBjaGFtcCA9ICIiCiAgICB2YWx1ZSA9IDk5OTk5OQoKICAgIGZvciBjaGFtcGlvbiBpbiBjaGFtcGlvbnM6CiAgICAgICAgY2hhbXBfdmFsdWUgPSBjYWxjdWxhdGVfdmFsdWUoY2hhbXBpb24pCiAgICAgICAgaWYgcm9vbXNbcm9vbV9uYW1lXVtjaGFtcGlvbl0gPiBzY29yZToKICAgICAgICAgICAgc2NvcmUgPSByb29tc1tyb29tX25hbWVdW2NoYW1waW9uXQogICAgICAgICAgICBjaGFtcCA9IGNoYW1waW9uCiAgICAgICAgICAgIHZhbHVlID0gY2hhbXBfdmFsdWUKICAgICAgICBpZiByb29tc1tyb29tX25hbWVdW2NoYW1waW9uXSA9PSBzY29yZSBhbmQgY2hhbXBfdmFsdWUgPCB2YWx1ZToKICAgICAgICAgICAgc2NvcmUgPSByb29tc1tyb29tX25hbWVdW2NoYW1waW9uXQogICAgICAgICAgICBjaGFtcCA9IGNoYW1waW9uCiAgICAgICAgICAgIHZhbHVlID0gY2hhbXBfdmFsdWUKICAgICAgICAgICAgCiAgICBjaGFtcGlvbnMucmVtb3ZlKGNoYW1wKQogICAgcHJpbnQoZiJ7Y2hhbXB9IGFzc2lnbmVkIHRvIHtyb29tX25hbWV9IHdpdGgge3Njb3JlfSBwb2ludHMiKQoKCg==