Contract con_tg_game_1


Contract Code


  
1 # The game works as following (turn based):
2 # The player wants to move to the bottom to win
3 # The enemy tries to catch him before he reaches and wins
4 # Should return a good formated map for telegram message
5
6
7 import currency
8 rooms = Hash(default_value=False)
9 operator = Variable()
10
11 p = "Player"
12 c = "Collider"
13 e = "Enemy"
14 f = "Finish"
15
16 @construct
17 def seed():
18 operator.set("ff61544ea94eaaeb5df08ed863c4a938e9129aba6ceee5f31b6681bdede11b89")
19
20 @export
21 def change_op(op:str):
22 assert operator.get() == ctx.caller, "Only op can change it"
23 operator.set(op)
24
25 @export
26 def createGame(roomName: str, wager: float):
27 assert roomName != "", "The room name cannot be empty"
28 assert rooms[roomName] == False, "There is already a room with that name"
29 assert wager > 0, "Wager needs to be more than 0"
30
31 currency.transfer_from(amount=wager, to=ctx.this, main_account=ctx.caller)
32
33
34 rooms[roomName, "state"] = "waiting"
35 rooms[roomName, "winner"] = ""
36 rooms[roomName, "player"] = ctx.caller
37 rooms[roomName, "enemy"] = ""
38 rooms[roomName, "turn"] = "Enemy"
39 rooms[roomName, "p_position"] = 20
40 rooms[roomName, "e_position"] = 113
41 rooms[roomName, "map"] = [
42 c, c, c, c, c, c, c, c, c, c, c, c, c,
43 c, 0, 0, 0, 0, 0, p, 0, 0, 0, 0, 0, c,
44 c, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, c,
45 c, 0, 0, c, 0, 0, 0, 0, 0, c, 0, 0, c,
46 c, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, c,
47 c, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, c,
48 c, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, c,
49 c, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, c,
50 c, 0, 0, c, 0, 0, 0, 0, 0, c, 0, 0, c,
51 c, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, c,
52 c, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, c,
53 f, f, f, f, f, f, f, f, f, f, f, f, f
54 ]
55 rooms[roomName, "pot"] = wager
56
57 printable_map = ""
58 i = 0
59 for tile in rooms[roomName, "map"]:
60 abbreviation = tile
61 if(tile == "Enemy"):
62 abbreviation = "E"
63 if(tile == "Collider"):
64 abbreviation = "C"
65 if(tile == "Player"):
66 abbreviation = "P"
67 if(tile == "Finish"):
68 abbreviation = "F"
69 if i % 13 == 0:
70 printable_map += '\n'
71 printable_map += str(f" {abbreviation}")
72 i+=1
73 return printable_map
74
75 @export
76 def joinGame(roomName:str):
77 assert rooms[roomName, "enemy"] == "", "Room is full"
78 assert rooms[roomName, "state"] == "waiting", "Room is full"
79 currency.transfer_from(amount=rooms[roomName, "pot"], to=ctx.this, main_account=ctx.caller)
80 rooms[roomName, "pot"] *= 2
81 rooms[roomName, "enemy"] == ctx.caller
82 rooms[roomName, "state"] = "playing"
83 printable_map = ""
84 i = 0
85 for tile in rooms[roomName, "map"]:
86 abbreviation = tile
87 if(tile == "Enemy"):
88 abbreviation = "E"
89 if(tile == "Collider"):
90 abbreviation = "C"
91 if(tile == "Player"):
92 abbreviation = "P"
93 if(tile == "Finish"):
94 abbreviation = "F"
95 if i % 13 == 0:
96 printable_map += '\n'
97 printable_map += str(f" {abbreviation}")
98 i+=1
99 return printable_map
100
101 @export
102 def move(roomName:str, direction:str):
103 assert rooms[roomName, "enemy"] == ctx.caller or rooms[roomName, "player"] == ctx.caller, "You are not a player in that room"
104 assert rooms[roomName, "winner"] == "", "This game ended already."
105 assert rooms[roomName, "state"] == "playing", "This game ended already."
106
107 room_map = rooms[roomName, "map"]
108
109
110 if rooms[roomName, "enemy"] == ctx.caller:
111 assert rooms[roomName, "turn"] == "Enemy", "Its not your turn"
112 if direction == "left":
113 assert room_map[rooms[roomName, "e_position"] - 1] != c, "You cannot move there"
114 assert room_map[rooms[roomName, "e_position"] - 1] != f, "You cannot move there"
115 if(room_map[rooms[roomName, "e_position"] - 1] == 0):
116 room_map[rooms[roomName, "e_position"]] = 0
117 room_map[rooms[roomName, "e_position"] - 1] = e
118 rooms[roomName, "e_position"] -= 1
119 if(room_map[rooms[roomName, "e_position"] - 1] == p):
120 room_map[rooms[roomName, "e_position"]] = 0
121 room_map[rooms[roomName, "e_position"] - 1] = e
122 rooms[roomName, "e_position"] -= 1
123 rooms[roomName, "state"] = "ended"
124 rooms[roomName, "winner"] = rooms[roomName, "enemy"]
125 if direction == "right":
126 assert room_map[rooms[roomName, "e_position"] + 1] != c, "You cannot move there"
127 assert room_map[rooms[roomName, "e_position"] + 1] != f, "You cannot move there"
128 if(room_map[rooms[roomName, "e_position"] + 1] == 0):
129 room_map[rooms[roomName, "e_position"]] = 0
130 room_map[rooms[roomName, "e_position"] + 1] = e
131 rooms[roomName, "e_position"] += 1
132 if(room_map[rooms[roomName, "e_position"] + 1] == p):
133 room_map[rooms[roomName, "e_position"]] = 0
134 room_map[rooms[roomName, "e_position"] + 1] = e
135 rooms[roomName, "e_position"] += 1
136 rooms[roomName, "state"] = "ended"
137 rooms[roomName, "winner"] = rooms[roomName, "enemy"]
138 if direction == "down":
139 assert rooms[roomName, "e_position"] + 13 <= 155, "You cannot move there"
140 assert room_map[rooms[roomName, "e_position"] + 13] != c, "You cannot move there"
141 assert room_map[rooms[roomName, "e_position"] + 13] != f, "You cannot move there"
142 if(room_map[rooms[roomName, "e_position"] + 13] == 0):
143 room_map[rooms[roomName, "e_position"]] = 0
144 room_map[rooms[roomName, "e_position"] + 13] = e
145 rooms[roomName, "e_position"] += 13
146 if(room_map[rooms[roomName, "e_position"] + 13] == p):
147 room_map[rooms[roomName, "e_position"]] = 0
148 room_map[rooms[roomName, "e_position"] + 13] = e
149 rooms[roomName, "e_position"] += 13
150 rooms[roomName, "state"] = "ended"
151 rooms[roomName, "winner"] = rooms[roomName, "enemy"]
152 if direction == "up":
153 assert rooms[roomName, "e_position"] - 13 >= 0, "You cannot move there"
154 assert room_map[rooms[roomName, "e_position"] - 13] != c, "You cannot move there"
155 assert room_map[rooms[roomName, "e_position"] - 13] != f, "You cannot move there"
156 if(room_map[rooms[roomName, "e_position"] - 13] == 0):
157 room_map[rooms[roomName, "e_position"]] = 0
158 room_map[rooms[roomName, "e_position"] - 13] = e
159 rooms[roomName, "e_position"] -= 13
160 if(room_map[rooms[roomName, "e_position"] - 13] == p):
161 room_map[rooms[roomName, "e_position"]] = 0
162 room_map[rooms[roomName, "e_position"] - 13] = e
163 rooms[roomName, "e_position"] -= 13
164 rooms[roomName, "state"] = "ended"
165 rooms[roomName, "winner"] = rooms[roomName, "enemy"]
166 rooms[roomName, "turn"] = "Player"
167
168 if rooms[roomName, "player"] == ctx.caller:
169 assert rooms[roomName, "turn"] == "Player", "Its not your turn"
170 if direction == "left":
171 assert room_map[rooms[roomName, "p_position"] - 1] != c, "You cannot move there"
172 if(room_map[rooms[roomName, "p_position"] - 1] == 0):
173 room_map[rooms[roomName, "p_position"]] = 0
174 room_map[rooms[roomName, "p_position"] - 1] = e
175 rooms[roomName, "p_position"] -= 1
176 if(room_map[rooms[roomName, "p_position"] - 1] == p):
177 room_map[rooms[roomName, "p_position"]] = 0
178 room_map[rooms[roomName, "p_position"] - 1] = e
179 rooms[roomName, "p_position"] -= 1
180 rooms[roomName, "state"] = "ended"
181 rooms[roomName, "winner"] = rooms[roomName, "enemy"]
182 if(room_map[rooms[roomName, "p_position"] - 1] == f):
183 room_map[rooms[roomName, "p_position"]] = 0
184 room_map[rooms[roomName, "p_position"] - 1] = e
185 rooms[roomName, "p_position"] -= 1
186 rooms[roomName, "state"] = "ended"
187 rooms[roomName, "winner"] = rooms[roomName, "player"]
188 if direction == "right":
189 assert room_map[rooms[roomName, "p_position"] + 1] != c, "You cannot move there"
190 if(room_map[rooms[roomName, "p_position"] + 1] == 0):
191 room_map[rooms[roomName, "p_position"]] = 0
192 room_map[rooms[roomName, "p_position"] + 1] = e
193 rooms[roomName, "p_position"] += 1
194 if(room_map[rooms[roomName, "p_position"] + 1] == p):
195 room_map[rooms[roomName, "p_position"]] = 0
196 room_map[rooms[roomName, "p_position"] + 1] = e
197 rooms[roomName, "p_position"] += 1
198 rooms[roomName, "state"] = "ended"
199 rooms[roomName, "winner"] = rooms[roomName, "enemy"]
200 if(room_map[rooms[roomName, "p_position"] + 1] == f):
201 room_map[rooms[roomName, "p_position"]] = 0
202 room_map[rooms[roomName, "p_position"] + 1] = e
203 rooms[roomName, "p_position"] += 1
204 rooms[roomName, "state"] = "ended"
205 rooms[roomName, "winner"] = rooms[roomName, "player"]
206
207 if direction == "down":
208 assert rooms[roomName, "p_position"] + 13 <= 155, "You cannot move there"
209 assert room_map[rooms[roomName, "p_position"] + 13] != c, "You cannot move there"
210 if(room_map[rooms[roomName, "p_position"] + 13] == 0):
211 room_map[rooms[roomName, "p_position"]] = 0
212 room_map[rooms[roomName, "p_position"] + 13] = e
213 rooms[roomName, "p_position"] += 13
214 if(room_map[rooms[roomName, "p_position"] + 13] == p):
215 room_map[rooms[roomName, "p_position"]] = 0
216 room_map[rooms[roomName, "p_position"] + 13] = e
217 rooms[roomName, "p_position"] += 13
218 rooms[roomName, "state"] = "ended"
219 rooms[roomName, "winner"] = rooms[roomName, "enemy"]
220 if(room_map[rooms[roomName, "p_position"] + 13] == f):
221 room_map[rooms[roomName, "p_position"]] = 0
222 room_map[rooms[roomName, "p_position"] + 13] = e
223 rooms[roomName, "p_position"] += 13
224 rooms[roomName, "state"] = "ended"
225 rooms[roomName, "winner"] = rooms[roomName, "player"]
226 if direction == "up":
227 assert rooms[roomName, "p_position"] - 13 >= 0, "You cannot move there"
228 assert room_map[rooms[roomName, "p_position"] - 13] != c, "You cannot move there"
229 if(room_map[rooms[roomName, "p_position"] - 13] == 0):
230 room_map[rooms[roomName, "p_position"]] = 0
231 room_map[rooms[roomName, "p_position"] - 13] = e
232 rooms[roomName, "p_position"] -= 13
233 if(room_map[rooms[roomName, "p_position"] - 13] == p):
234 room_map[rooms[roomName, "p_position"]] = 0
235 room_map[rooms[roomName, "p_position"] - 13] = e
236 rooms[roomName, "p_position"] -= 13
237 rooms[roomName, "state"] = "ended"
238 rooms[roomName, "winner"] = rooms[roomName, "enemy"]
239 if(room_map[rooms[roomName, "p_position"] - 13] == f):
240 room_map[rooms[roomName, "p_position"]] = 0
241 room_map[rooms[roomName, "p_position"] - 13] = e
242 rooms[roomName, "p_position"] -= 13
243 rooms[roomName, "state"] = "ended"
244 rooms[roomName, "winner"] = rooms[roomName, "player"]
245 rooms[roomName, "turn"] = "Enemy"
246
247 rooms[roomName, "map"] = room_map
248 if rooms[roomName, "state"] == "playing":
249 printable_map = ""
250 i = 0
251 for tile in room_map:
252 abbreviation = tile
253 if(tile == "Enemy"):
254 abbreviation = "E"
255 if(tile == "Collider"):
256 abbreviation = "C"
257 if(tile == "Player"):
258 abbreviation = "P"
259 if(tile == "Finish"):
260 abbreviation = "F"
261 if i % 13 == 0:
262 printable_map += '\n'
263 printable_map += str(f" {abbreviation}")
264 i+=1
265 return printable_map
266
267 if rooms[roomName, "state"] == "ended":
268 currency_to_transfer_to_winner = rooms[roomName, "pot"] / 100 * 98
269 currency_to_transfer_to_op = rooms[roomName, "pot"] - currency_to_transfer_to_winner
270 currency.transfer(amount=currency_to_transfer_to_winner, to=rooms[roomName, "winner"])
271 currency.transfer(amount=currency_to_transfer_to_op, to=operator.get())
272 return f"The winner is {rooms[roomName, 'winner']}"

Byte Code

e30000000000000000000000000500000040000000739a000000640064016c005a00650164026403640464058d035a0265036403640664078d025a0464085a0564095a06640a5a07640b5a08640c640d84005a09650a64038301650b640e9c01640f6410840483015a0c650a64038301650b650d64119c0264126413840483015a0e650a64038301650b64149c0164156416840483015a0f650a64038301650b650b64179c0264186419840483015a1064015300291ae9000000004e46da0d636f6e5f74675f67616d655f31da05726f6f6d732903da0d64656661756c745f76616c7565da08636f6e7472616374da046e616d65da086f70657261746f72290272050000007206000000da06506c61796572da08436f6c6c69646572da05456e656d79da0646696e697368630000000000000000000000000200000043000000730e00000074006a016401830101006400530029024eda40666636313534346561393465616165623564663038656438363363346139333865393132396162613663656565356633316236363831626465646531316238392902da0a5f5f6f70657261746f72da03736574a900720f000000720f000000da00da045f5f5f5f0a00000073040000000001040172110000002901da026f70630100000000000000010000000200000043000000732400000074006a01830074026a036b027316740464018301820174006a057c00830101006400530029024e7a154f6e6c79206f702063616e206368616e67652069742906720d000000da03676574da03637478da0663616c6c6572da0e417373657274696f6e4572726f72720e00000029017212000000720f000000720f0000007210000000da096368616e67655f6f700f00000073040000000002160172170000002902da08726f6f6d4e616d65da057761676572630200000000000000060000009c00000043000000737e0200007c0064016b037310740064028301820174017c00190064036b02732474006404830182017c0164056b047334740064068301820174026a037c0174046a0574046a0664078d030100640874017c00640966023c00640174017c00640a66023c0074046a0674017c00640b66023c00640174017c00640c66023c00640d74017c00640e66023c00640f74017c00641066023c00641174017c00641266023c0074077407740774077407740774077407740774077407740774077407640564056405640564057408640564056405640564057407740764056405640564056405640564056405640564056405740774076405640574076405640564056405640574076405640574077407640564056405640564056405640564056405640564057407740764056405640564056405640564056405640564056405740774076405640564056405640564056405640564056405640574077407640564056405640564056405640564056405640564057407740764056405740764056405640564056405740764056405740774076405640564056405640564056405640564056405640574077407640564056405640564057409640564056405640564057407740a740a740a740a740a740a740a740a740a740a740a740a740a679c74017c00641366023c007c0174017c00641466023c0064017d0264057d03788274017c0064136602190044005d727d047c047d057c04640d6b029002721a64157d057c0464166b029002722864177d057c0464186b029002723664197d057c04641a6b0290027244641b7d057c03641c160064056b029002725a7c02641d37007d027c02740b641e7c059b009d02830137007d027c03641f37007d039002710457007c02530029204e72100000007a1d54686520726f6f6d206e616d652063616e6e6f7420626520656d707479467a26546865726520697320616c7265616479206120726f6f6d20776974682074686174206e616d6572010000007a1d5761676572206e6565647320746f206265206d6f7265207468616e20302903da06616d6f756e74da02746fda0c6d61696e5f6163636f756e74da0777616974696e67da057374617465da0677696e6e6572da06706c61796572da05656e656d79720a000000da047475726ee914000000da0a705f706f736974696f6ee971000000da0a655f706f736974696f6eda036d6170da03706f74da01457209000000da01437208000000da0150720b000000da0146e90d000000da010afa0120e901000000290c7216000000da075f5f726f6f6d73da0863757272656e6379da0d7472616e736665725f66726f6d7214000000da04746869737215000000da0163da0170da0165da0166da03737472290672180000007219000000da0d7072696e7461626c655f6d6170da0169da0474696c65da0c616262726576696174696f6e720f000000720f0000007210000000da0a63726561746547616d6515000000734a000000000210011401100114010c010c010e010c010c010c010c011e012e012e012e012e012e012e0112010c0104010401120104010a0104010a0104010a0104010a0104010e01080112010e01723e00000029017218000000630100000000000000050000000500000043000000730201000074007c0064016602190064026b027318740164038301820174007c0064046602190064056b027330740164038301820174026a0374007c0064066602190074046a0574046a0664078d03010074007c0064066602050019006408390003003c0074007c0064016602190074046a066b020100640974007c00640466023c0064027d01640a7d02787674007c00640b6602190044005d667d037c037d047c03640c6b0272a8640d7d047c03640e6b0272b4640f7d047c0364106b0272c064117d047c0364126b0272cc64137d047c0264141600640a6b0272e07c01641537007d017c01740764167c049b009d02830137007d017c02641737007d02719457007c01530029184e722100000072100000007a0c526f6f6d2069732066756c6c721e000000721d00000072280000002903721a000000721b000000721c000000e902000000da07706c6179696e6772010000007227000000720a00000072290000007209000000722a0000007208000000722b000000720b000000722c000000722d000000722e000000722f000000723000000029087231000000721600000072320000007233000000721400000072340000007215000000723900000029057218000000723a000000723b000000723c000000723d000000720f000000720f0000007210000000da086a6f696e47616d653e000000733000000000021801180112010a01140112010c010401040112010401080104010801040108010401080104010c01080112010c01724100000029027218000000da09646972656374696f6e63020000000000000009000000050000004300000073380c000074007c0064016602190074016a026b02732c74007c0064026602190074016a026b02732c740364038301820174007c0064046602190064056b027344740364068301820174007c0064076602190064086b02735c740364068301820174007c006409660219007d0274007c0064016602190074016a026b029005722074007c00640a66021900640b6b0273947403640c830182017c01640d6b02900172a27c0274007c00640e66021900640f1800190074046b0373be74036410830182017c0274007c00640e66021900640f1800190074056b0373de74036410830182017c0274007c00640e66021900640f1800190064116b029001723064117c0274007c00640e660219003c0074067c0274007c00640e66021900640f18003c0074007c00640e660205001900640f380003003c007c0274007c00640e66021900640f1800190074076b02900172a264117c0274007c00640e660219003c0074067c0274007c00640e66021900640f18003c0074007c00640e660205001900640f380003003c00641274007c00640766023c0074007c0064016602190074007c00640466023c007c0164136b02900272b47c0274007c00640e66021900640f1700190074046b03900173ce74036410830182017c0274007c00640e66021900640f1700190074056b03900173f074036410830182017c0274007c00640e66021900640f1700190064116b029002724264117c0274007c00640e660219003c0074067c0274007c00640e66021900640f17003c0074007c00640e660205001900640f370003003c007c0274007c00640e66021900640f1700190074076b02900272b464117c0274007c00640e660219003c0074067c0274007c00640e66021900640f17003c0074007c00640e660205001900640f370003003c00641274007c00640766023c0074007c0064016602190074007c00640466023c007c0164146b02900372e474007c00640e660219006415170064166b01900273dc74036410830182017c0274007c00640e6602190064151700190074046b03900273fe74036410830182017c0274007c00640e6602190064151700190074056b039003732074036410830182017c0274007c00640e6602190064151700190064116b029003727264117c0274007c00640e660219003c0074067c0274007c00640e66021900641517003c0074007c00640e6602050019006415370003003c007c0274007c00640e6602190064151700190074076b02900372e464117c0274007c00640e660219003c0074067c0274007c00640e66021900641517003c0074007c00640e6602050019006415370003003c00641274007c00640766023c0074007c0064016602190074007c00640466023c007c0164176b029005721474007c00640e660219006415180064116b059004730c74036410830182017c0274007c00640e6602190064151800190074046b039004732e74036410830182017c0274007c00640e6602190064151800190074056b039004735074036410830182017c0274007c00640e6602190064151800190064116b02900472a264117c0274007c00640e660219003c0074067c0274007c00640e66021900641518003c0074007c00640e6602050019006415380003003c007c0274007c00640e6602190064151800190074076b029005721464117c0274007c00640e660219003c0074067c0274007c00640e66021900641518003c0074007c00640e6602050019006415380003003c00641274007c00640766023c0074007c0064016602190074007c00640466023c00641874007c00640a66023c0074007c0064026602190074016a026b02900b721e74007c00640a6602190064186b029005734e7403640c830182017c01640d6b02900672b07c0274007c00641966021900640f1800190074046b039005737a74036410830182017c0274007c00641966021900640f1800190064116b02900572cc64117c0274007c006419660219003c0074067c0274007c00641966021900640f18003c0074007c006419660205001900640f380003003c007c0274007c00641966021900640f1800190074076b029006723e64117c0274007c006419660219003c0074067c0274007c00641966021900640f18003c0074007c006419660205001900640f380003003c00641274007c00640766023c0074007c0064016602190074007c00640466023c007c0274007c00641966021900640f1800190074056b02900672b064117c0274007c006419660219003c0074067c0274007c00641966021900640f18003c0074007c006419660205001900640f380003003c00641274007c00640766023c0074007c0064026602190074007c00640466023c007c0164136b02900872127c0274007c00641966021900640f1700190074046b03900673dc74036410830182017c0274007c00641966021900640f1700190064116b029007722e64117c0274007c006419660219003c0074067c0274007c00641966021900640f17003c0074007c006419660205001900640f370003003c007c0274007c00641966021900640f1700190074076b02900772a064117c0274007c006419660219003c0074067c0274007c00641966021900640f17003c0074007c006419660205001900640f370003003c00641274007c00640766023c0074007c0064016602190074007c00640466023c007c0274007c00641966021900640f1700190074056b029008721264117c0274007c006419660219003c0074067c0274007c00641966021900640f17003c0074007c006419660205001900640f370003003c00641274007c00640766023c0074007c0064026602190074007c00640466023c007c0164146b029009729274007c006419660219006415170064166b019008733a74036410830182017c0274007c0064196602190064151700190074046b039008735c74036410830182017c0274007c0064196602190064151700190064116b02900872ae64117c0274007c006419660219003c0074067c0274007c00641966021900641517003c0074007c0064196602050019006415370003003c007c0274007c0064196602190064151700190074076b029009722064117c0274007c006419660219003c0074067c0274007c00641966021900641517003c0074007c0064196602050019006415370003003c00641274007c00640766023c0074007c0064016602190074007c00640466023c007c0274007c0064196602190064151700190074056b029009729264117c0274007c006419660219003c0074067c0274007c00641966021900641517003c0074007c0064196602050019006415370003003c00641274007c00640766023c0074007c0064026602190074007c00640466023c007c0164176b02900b721274007c006419660219006415180064116b05900973ba74036410830182017c0274007c0064196602190064151800190074046b03900973dc74036410830182017c0274007c0064196602190064151800190064116b02900a722e64117c0274007c006419660219003c0074067c0274007c00641966021900641518003c0074007c0064196602050019006415380003003c007c0274007c0064196602190064151800190074076b02900a72a064117c0274007c006419660219003c0074067c0274007c00641966021900641518003c0074007c0064196602050019006415380003003c00641274007c00640766023c0074007c0064016602190074007c00640466023c007c0274007c0064196602190064151800190074056b02900b721264117c0274007c006419660219003c0074067c0274007c00641966021900641518003c0074007c0064196602050019006415380003003c00641274007c00640766023c0074007c0064026602190074007c00640466023c00640b74007c00640a66023c007c0274007c00640966023c0074007c0064076602190064086b02900b72c464057d0364117d04787a7c0244005d727d057c057d067c05640b6b02900b7260641a7d067c05641b6b02900b726e641c7d067c0564186b02900b727c641d7d067c05641e6b02900b728a641f7d067c046415160064116b02900b72a07c03642037007d037c03740864217c069b009d02830137007d037c04640f37007d04900b714a57007c03530074007c0064076602190064126b02900c723474007c0064226602190064231b00642414007d0774007c006422660219007c0718007d0874096a0a7c0774007c0064046602190064258d02010074096a0a7c08740b6a0c830064258d020100642674007c006404660219009b009d0253006400530029274e722100000072200000007a21596f7520617265206e6f74206120706c6179657220696e207468617420726f6f6d721f00000072100000007a18546869732067616d6520656e64656420616c72656164792e721e000000724000000072270000007222000000720a0000007a11497473206e6f7420796f7572207475726eda046c656674722600000072300000007a15596f752063616e6e6f74206d6f76652074686572657201000000da05656e646564da057269676874da04646f776e722d000000e99b000000da0275707208000000722400000072290000007209000000722a000000722b000000720b000000722c000000722e000000722f0000007228000000e964000000e9620000002902721a000000721b0000007a0e5468652077696e6e657220697320290d7231000000721400000072150000007216000000723500000072380000007237000000723600000072390000007232000000da087472616e73666572720d0000007213000000290972180000007242000000da08726f6f6d5f6d6170723a000000723b000000723c000000723d000000da1e63757272656e63795f746f5f7472616e736665725f746f5f77696e6e6572da1a63757272656e63795f746f5f7472616e736665725f746f5f6f70720f000000720f0000007210000000da046d6f76655a000000736c010000000216011601180118010c01140118010a0112010e0112010e011a011001140114011a011001140114010c0114010a0112011001120110011a011001140114011a011001140114010c0114010a010a01140112011001120110011a011001140114011a011001140114010c0114010a010a01140112011001120110011a011001140114011a011001140114010c0114010c0114011a010a01120110011a011001140114011a011001140114010c0114011a011001140114010c0114010a01120110011a011001140114011a011001140114010c0114011a011001140114010c0114010a010a011401120110011a011001140114011a011001140114010c0114011a011001140114010c0114010a010a011401120110011a011001140114011a011001140114010c0114011a011001140114010c0114010c010c011201040104010a0104010a0104010a0104010a0104010a0104010e01080112010e010401120114010a01060108010e011202724f00000029117232000000da04486173687231000000da085661726961626c65720d00000072360000007235000000723700000072380000007211000000da085f5f6578706f727472390000007217000000da05666c6f6174723e0000007241000000724f000000720f000000720f000000720f0000007210000000da083c6d6f64756c653e01000000731e00000008010e010c010401040104010403080506011005060112280601101b0601