`  џ џ   <<<nnnЊЊЊ Z 1yж MЬ#yтШџ ииЈNѕѕѕџ џ   <<<nnnЊЊЊ Z 1yж MЬ#yтШџ ииЈNѕѕѕР? нннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџп§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџп§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџп§џннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннџп§џ§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпџп§џ§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпџп§џ§џџџџџџџџџџџџџџџјџџџџџџџџџџџџџџџџџџџјџџџјјџџјџџџџџџјџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпџп§џ§џџџџџџџџџџџџџџџјџџџџџџџџџџџџџџџџџџџјџџџјјџџјџџџџџџјџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпџп§џ§џџџџџџџџџџџџџџџјџјџјџјџџјјџјџџџџјџџјџџџџџџјџџџџјџјџјјџџјџџџџџџџџџџџџџџџџџпџп§џ§џџџџџџџџџџџџџџџјџјџјџјџџјјџјџџџџјџџјџџџџџџјџџџџјџјџјјџџјџџџџџџџџџџџџџџџџџпџп§џ§џџџџџџџџџџџџџџџјџјјџјјјјјџјјџјјјџџјџџџџџџјџјџџјџџјџјјџјјјџџџџџџџџџџџџџџџџпџп§џ§џџџџџџџџџџџџџџџјџјјџјјјјјџјјџјјјџџјџџџџџџјџјџџјџџјџјјџјјјџџџџџџџџџџџџџџџџпџп§џ§џџџџџџџџџџџџџџџјџјјџјјјџјјџјјјџџјџџџџџџјџџџџџјјџџјџјјџјјџџџџџџџџџџџџџџџџџџпџп§џ§џџџџџџџџџџџџџџџјџјјџјјјџјјџјјјџџјџџџџџџјџџџџџјјџџјџјјџјјџџџџџџџџџџџџџџџџџџпџп§џ§џџџџџџџџџџџџџџџјџџјџјјјџјјџјјџјџјџџџџјјџџјџјјџџјџџџџџџџџџџџџџџџџџпџп§џ§џџџџџџџџџџџџџџџјџџјџјјјџјјџјјџјџјџџџџјјџџјџјјџџјџџџџџџџџџџџџџџџџџпџп§џ§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџјџџџџџџџџџџџџџџџџџџџџџџџџџпџп§џ§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџјџџџџџџџџџџџџџџџџџџџџџџџџџпџп§џ§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпџп§џ§џџџџџёџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџћџџЛЛћПЛџПЛћЛПџџПџџџџџџџџџџљџџџџџџџџџџџџџџџџџџџџџџџџџџпџп§џ§џџџёџџџџџџџёџёџџџџџџџџџџџџџџџџџџџџџџџџџџџПџџџЛџџЛџћЛћџЛПџџџћџџџџџџџџџџљџџџљџљџџџџџџџџџџџпџп§џ§џџџёёёџџёџџџџџџџџџџџџџџџџџџџџџџџџџџџџџћџџџЛЛџЛџћПЛџЛЛџџџПџџџџџџџџљџџљџџџџџљљљџљљљљџџџџџџџџпџп§џ§џџџёџџџџёёџџёџџџџџџџџџџџџџџџџџџџџџџџџџџџџџПџџџЛџџЛЛћџЛћПћџџџћџџџџџџџџџџџџџљџљљљџљљљџџџџџџџџџпџп§џ§џџџџџџџёёџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџћџџЛЛћЛџћЛЛџПћџџПџџџџџџљљџџџљџџџџљљџљџљџџџџџџџџџпџп§џ§џџџџџџџџџџџџџџџџџџџџџџџџџџёџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпџп§џ§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпџп§џ§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпџп§џ§џџџџџџџџџџџџџџџџџџџёџџџџџџџџџџџџџџџџџџџџџџџёџџџЛЛџПЛџПЛџџџћџџџџџџџџџљџџџџџџџџџџџџџџџџџџџџџџџџпџп§џ§џџџёџёёџџёџёџёџџџџёџџџёПџџПћЛПћЛПћџџПџџџџџџџџџљџџџџљљџџџџџљџџџџџљљџџџџџџџпџп§џ§џџџёџёёёџџёџёёџџџёџџџёџџџџџёћџџПЛџЛћћЛћћџџџћџџџџџџџџљџџљџљљџџџџџљџџљџљљџџџџџџџпџп§џ§џџёџёёџџёџёџџџџџџџёџџџџџџПџџЛџџЛџћЛџћџџПџџџџџџџџџљџџџџџџљџџџџџљџџџџџџџљџџџџџџџпџп§џ§џџџёџёџёџёџёџёџџёџџёџџёџџёџџЛЛћПЛџПЛџџџћџџџџџџџџџџџџџљџџџџџџџџџџљџџџџџџџџпџп§џ§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпџп§џ§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпџп§џ§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџЛЛџџџџџџџПћџџџЛЛџЛџџџџЛџџџџџџџџџџџџџџџџЛћџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпџп§џ§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџЛџћПЛџПЛћЛЛћџџЛџћџџЛЛПЛЛџЛЛПЛћџЛЛџЛћџџПћЛџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпџп§џ§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџЛЛџЛПћЛћџПћџџџЛџћЛПЛџџЛџПџЛПћППЛџПћЛџџПЛПџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпџп§џ§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџЛџћЛћџџЛћПћџџџЛџћЛџПЛџЛџПџЛПћППЛџПЛџџџПћПџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпџп§џ§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџЛЛџПЛџЛЛџџЛћџџЛЛџЛПЛћџПЛџЛЛПћПџЛЛџЛћџџџЛћџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпџп§џ§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпџп§џ§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпџп§џ§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпџп§џннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннџп§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџп§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџп§џнннннннннннннннннннннннннннџџџпннннннннннннннннннннннннннннннннннннннннннннннннннннннџџџџнннннннннннннннннннннннннннџп§џ§џџџџџџџџџџџџџџџџџџџџџџџџџпџџџпO4ђЊџџџЏџџЊЊЊЊЊЊЊЊЊЊЊЊџџџџЏЊџџџџџњџOCуeUёпџџџџ§џџџџџџџџџџџџџџџџџџџџџџџџџпџп§џ§џџџџџџџџџџџџџџџџџџџџџџџџџпџџџпЏQUBєџњџџџџџ?ЊЊЊЊЊЊЊЊЊЊњџџџџЊЊџџџџЏџџ/V2Rђпџџџџ§џџџџџџџџџџџџџџџџџџџџџџџџџпџп§џ§џџџЏџџџџџџџџџџџџџџџџџџџџџпџџџпORUBџџЊџџџџџOЊЊЊЊЊЊЊЊЊЊџџџџџЊњџџџџњџџ.!""ёпџџџџ§џџџџџџџџџџџџџџџџџџџџџџџџџпџп§џ§џџџџ§џџџџџџџџџџџџџџџџџџџџпџџџп/"%єЊЊњџџџџєЉЊЊЊЊЊЊЊЊЊџџџЏџЊњџџџџњЏЊ:U!O$Qёпџџџџ§џџџџџџџџџџџџџџџџџџџџџџџџџпџп§џ§џџџПќџџџџџџџџџџџџџџџџџџџџпџџџп"QѓџЏњџџџџЄЉЊЊЊЊЊЊЊЊЊџџњЏЏЊџџџџЏџЊџ$єd"Qёпџџџџ§џџџ?3ѓџџџџџџџџџџџџџџџџџџџпџп§џ§џџџяђџџџџџџёџџџџџџџџџпџџџп/U1џџЊџџOџЏ?ЊЊЊЊЊЊЊЊЊЊџџЊЏЊЊџџџџЏџџџSBJ.Qёпџџџџ§џџ?CD4ѓџџџџџџџџџџџџџџџпџп§џ§џџџJєџџџџџџёџџёџџёёџпџџџпџU2DџџЏџњ?џџџЊЊЊЊЊI3ЄЊњЊЊЊЊЊџџЏњњџџџ&Aф^Uёпџџџџ§џџ3DDD3џџџџёџёџёџџџпџп§џ§џDDЉџџџџџџџџџёёџпџџџп?"UU5џџЏџњЊ4џџџЊЊЊЊЊ:3ЮЬЛЃњЊџЊЊЊњџЊЊџџџџ#V!уUVёпџџџџ§џ?3DDD3ѓџџџёџёёџџџџџпџп§џ§џџџєџџџџџџџёџёџёџџпџџџп?RQUѓџџџњЏ$џџџџЊЊЊЊгЬЬЬЬ+єЊЏЊЊЊњџњџџџџџфV2"U%.Uёпџџџџ§џџ33333џџџџџёёџџёџџџпџп§џ§џџџIџџџџџџџџџёџёёџџпџџџп/SQU2џџџЏџ#џџџџOЉЊЊЊЊ:ЭЬЬЬЬМKџЏЊЊЊњџџџџџЏЊcR.Uх.Sёпџџџџ§џџџџџџџџџџџёџёџёџџџпџп§џ§џџ=3Gзџџџџџџџџџџџџџџџџџџџпџџџп!3џЏџњ#3џџџџЉЊЊЊгЬЬЬЬЬМЛЊЏЊЊЊњџџџџџЏDn!UтVёпџџџџ§џџџџџџџџџџџџџџџџџџџџџџџџџпџп§џ§џџџџџџџџџџџџџџџџџџџџџџџџџпџџџп/!3DOџЏ:&3њџџџЏЊЊЉJнМЛЬЬЬМЛ3ЊЊЊЊџџџџџџJюU!SUUUёпџџџџ§џџџџџџџџџџџџџџџџџџџџџџџџџпџп§џ§џџџџџџџџџџџџџџџџџџџџџџџџџпџџџп/!3DOџЏ:&3њџџџЏЊЊЉJнМЛЬЬЬМЛ3ЊЊЊЊџџџџџџJюU!SUUUёпџџџџ§џџџџџџџџџџџџџџџџџџџџџџџџџпџп§џ§џџџџџџџџџџџџџџџџџџџџџџџџџпџџџпQєџOєJ?""ЊџџџџЊЊ:юЫЬЬЬЬЬМЊЊЊњџџџџџџT!%"ёпџџџџ§џџџџџџџџџџџџџџџџџџџџџџџџџпџп§џ§џџџџџџџџџџџџџџџџџџџџџџџџџпџџџпUBџODOO&3ЊџџџџџЊЊ:ЮЬЬЬЬЬЬМЛЃЊЊџџџџџџџ43323.UUёпџџџџ§џџџџџџџџџџџџџџџџџџџџџџџџџпџп§џ§џџџџџџџџџџџџџџџџџџџџџџџџџпџџџп!%DџDє4&"ЏњџџџџџуЬЬЬМЛЫЬМЛЋЊњџџџџџЏџЊЊd%1."4ёпџџџџ§џџџџџџџџџџџџџџџџџџџџџџџџџпџп§џ§џџџџџџџџџџџџџџџџџџџџџџџџџпџџџпQQ"єDє#"єЊџџџџџЏУЬЛЛББЛЛЋЊџџџџџњЏЏЊЊ3#т&"#ёпџџџџ§џџџџџџџџџџџџџџџџџџџџџџџџџпџп§џ§џџџџџџџџџџџџџџџџџџџџџџџџџпџџџп"QEџD?"ѓЏњџџџџџУЛЛ+"ЛЛЋЊџџџџЏњњЏЊD>&!gfUUёпџџџџ§џџџџџџџџџџџџџџџџџџџџџџџџџпџп§џ§џџџџџџџџџџџџџџџџџџџџџџџџџпџџџп!Q%"2Oџ4&"ЄџЊњџџџџу!нэб.т-ЋЊџџџџЏЏњЊЊ3.тV^UQ!ёпџџџџ§џџџџџџџџџџџџџџџџџџџџпџп§џ§џџџџџџџџџџџџџџџџџџџџџџџџџпџџџпЁUUѓDџџO3""єєЏЊџџџџубнCв>"ЂЊџџџџЏЊЊЊ:fU%.%WQђпџџџџ§џџџџџџџџџџџџџџџџџџџџџџџпџп§џ§џџџџџџџџџџџџџџџџџџџџџџџџџпџџџп!%Bџєџ?&"ѓЏџЊџџџџН+ђнџтмТѓЊџџџџЏЊЊЊ#fюQсUѓпџџџџ§џџёџџџџџџџџџџџџџџџџџџпџп§џ§џџџ?џџџџџџџџџџџџџџџџџџџџџпџџџп""Dџџ#"""AЏњЏњџџџЭюонOднMВ"ЃЊЏџџџЏњЊ:%R"ёпџџџџ§џџннёџџџџџџџџџџџџџџџџџџпџп§џ§џџџdєџџџџџџџџџџџџџџџџџџџџпџџџп!RQUєџD#"""ЊЊЏЊЊџџдонннннO-ЊЊЊџџџџЏЊЊ?C3#!1ѓпџџџџ§џџннёџџџџџџџџџџџџџџџџџџпџп§џ§џџOfFџџџџџџџџџџџџџџџџџџџџпџџџпAOO3""DєЊЊњЊџD3ннннннн-ЊЊЊџџЏџЏЊџџџџ#!ђѓпџџџџ§џџннёџџџџџџџџџџџџџџџџџџпџп§џ§џџOfіџџџџџџџџџџџџџџџџџџџџпџџџпAOO3""DєЊЊњЊџD3ннннннн-ЊЊЊџџЏџЏЊџџџџ#!ђѓпџџџџ§џџннёџџџџџџџџџџџџџпџп§џ§џџџfіџџџџџџџџџџџџџџџџџџџџпџџџпBџ4#"ѓDЏњњџD(1ннннЬн>ЊЏЊџџЊџЏњџџџDbB!3ѕпџџџџ§џџннёџџџџџџџџџџџџџпџп§џ§џџof6џџџџџџџџџџџџџџџџџџџџпџџџп23AOR2"BDњњЏЊC"1ннннЭнѓџџџЏџЊџЊџџџџ3nUсQѕпџџџџ§џџннёџџџџџџџџџџџџпџп§џ§џџcffєџџџџџџџџџџџџџџџџџпџџџп!џDO2"""1OєџЏЊЄ(тнн=CннѓџџџџЊЊЊњџњџOюbUт%D#RUѕпџџџџ§џџннёџџџџџџџџџџџџџџпџп§џ§џџOfFџџџџџџёёџёџёџџџпџџџпQ3џєO""""єџџDDCвгн-"в=HџџџџЏЊЊџџњџфfVb!.2џ%Bџпџџџџ§џџннёџџџёџџџџџџџџпџп§џ§џџofFџџџџџџёёёёџџџпџџџпQ"Dџ4f"""BџDDD3(влнннв-DџџџџЊЊџџњOnfVUс.RUU%Bѓпџџџџ§џџннёџџџџџџџџџџџџџџџџџџпџп§џ§џџfffєџџџџџёёџџџџџџпџџџпU34b&"CCOєџЊЃв,нпнн"DџџџџЏЊџџЊ$RUNTUU"%ђпџџџџ§џџннёџџџџџџџџџџџџџџџџџџпџп§џ§џ?fffІџџџџџёёџџёџёџџџпџџџп!""2""BџDOЊЊоЭнн."3џџџџЊЊџџЏ"Q"с.4QR%ѕпџџџџ§џџёџёџџџџџџџџџџџџџџџџџџпџп§џ§џџ?fvџџџџџџџџџџџџџџџџџџџџпџџџпQ3""""DєЄЊЊ:Ђ"оЭЛ!ю"DџџџџЏџџџЏ:1D"n&U2Qѓпџџџџ§џџёџёџџџџџџџџџџџџџџџџџџпџп§џ§џџoffњџџџџџџџџџџџџџџџџџџџпџџџп/!!A"22""""BЏЊЊЊЊ(>33"DџџџЊЊџЏџЊ:єDсVe$!џпџџџџ§џџџџџџџџџџџџџџџџџџџџџџџџџпџп§џ§џOfffFџџџџџџџџџџџџџџџџџџџпџџџпO!?2!DѓOb"""2єЉЊЊЊЊ(""ЄDџџџЊњџЏЊњЏЊ"RQ$Aџпџџџџ§џџџџџџџџџџџџџџџџџџџџџџџџџпџп§џ§џџєфDџџџџџџџџџџџџџџџџџџџџпџџџп?!џџ4џџ$"""єЊЉЊЊЊ)"Њ(DЏџЏЊњџЊњџЊ:U!21ёпџџџџ§џџџџџџџџџџџџџџџџџџџџџџџџџпџп§џ§џџџэ§џџџџџџџџџџџџџџџџџџџџпџџџп?!џџ4џџ$"""єЊЉЊЊЊ)"Њ(DЏџЏЊњџЊњџЊ:U!21ёпџџџџ§џџџџџџџџџџџџџџџџџџџџџџџџџпџп§џ§џџџџџџџџџџџџџџџџџџџџџџџџџпџџџп?!ЊџџџOcbf2DЊЊЈЊЊЊ"ѓЏЏЏњЊЊњЏЊ$fV!ёпџџџџ§џџџџџџџџџџџџџџџџџџџџџџџџџпџп§џ§џџџџџџџџџџџџџџџџџџџџџџџџџпџџџп/"Њњџџ$"b&єЊЊЊBЊЊЊЊ#"8ЊЊЊџЊЊџЏЊу"!2!ёпџџџџ§џџџџџџџџџџџџџџџџџџџџџџџџџпџп§џ§џџџџџџџџџџџџџџџџџџџџџџџџџпџџџп/;ЊЊњџO42єЏЊЊЊЂЊЊЊЊ3DЊЊЊЊЂЊњџџЊџЏ:.U#"1#!"ёпџџџџ§џџџџџџџџџџџџџџџџџџџџџџџџџпџп§џ§џџџџџџџџџџџџџџџџџџџџџџџџџпџџџп!;ЊЊЊџџ$ђJЊЊЊЊЃЊЊЊJCЊЊЊЊЊЊЊЊЊ8ЊџџџњџЊcV"!+!џ3D.ёпџџџџ§џџџџџџџџџџџџџџџџџџџџџџџџџпџп§џ§џџџџџџџџџџџџџџџџџџџџџџџџџпџџџп!2ЏЊЊЊ:5D3ЉЊ(ЃЊЊЊJЃЊЊЊЊЊЊЊЊЊЊњЊџЊњџ?%!3A.1џџDюёпџџџџ§џџџџџџџџџџџџџџџџџџџџџџџџџпџп§џ§џџџџџџџџџџџџџџџџџџџџџџџџџпџџџп!2џЊЊЊJѓD4"(ЄЊЊЊDЊЊЊЊЊЊЊЊЊЊЊєњЏџџџOJѓ3ѓ!.ADуёпџџџџ§џџџџџџџџџџџџџџџџџџџџџџџџџпџп§џ§џџџџџџџџџџџџџџџџџџџџџџџџџпџџџп!!њџЊЊJєЊЊ("(ЊЊЊЊDЊЊЊЊЊЊЊЊЊЊЊѓOѓџџџЊЊџџџ4Nт"ёпџџџџ§џџџџџџџџџџџџџџџџџџџџџџџџџпџп§џ§џџџџџџџџџџџёџџџџџџџџџџџпџџџп!"ЊЊџЊJџЊJ#(ЊЊЊЊЄЊЊЊЊЊЊЊЊЊЊЊђAџџЏЊњЏЊџOџDт"ёпџџџџ§џџџџџџџџџџџџџџџџџџџџџџпџп§џ§џџџџџџџџџџџџёџёџџџџпџџџпO#JњњџDЏ:"!"ЊЊЊJЄЊЊЊЊЊЊЉЊЊЊЊ8!џџЊЊџЏЊЊџџуВёпџџџџ§џDџџDџџDџџџёџџёџџпџп§џ§џЬЬwџџџџџџёџёёџёџџпџџџпЏ*32ЊњџєЊ#B$ЊЊЊЊЊЊЊЊЊЊЉЉЊЊЊDDџњЏЊЊџџO9увєпџџџџ§OџєOџєOџєџџёџёџёёёџёпџп§џ§џЬЬwџџџџџёџёёёёџёџџпџџџпџџJЂЊЊџЄ:"єЊЊЊЊЊЊЊЊЊЊЊѓЏЊџџџЏЊIџџюєџпџџџџ§џџOєџOєџџџџџёџёёџёпџп§џ§џџџџџџџџџџџџџёёёџџџпџџџпџџJЂЊЊџЄ:"єЊЊЊЊЊЊЊЊЊЊЊѓЏЊџџџЏЊIџџюєџпџџџџ§џџєOџєOџџџџёџџџёџёпџп§џ§џџџџџџџџџџџџџџџџџџџџџџџџпџџџпџџџЊЊЊЃ)ѓЉЊЊЊЊЊЊЊЊЊЊЊЁЊџџџџЏЊIџџOCџџпџџџџ§џџџџџџџџџџџџџџџџџџџџџџџпџп§џ§џџџџџџџџџџџџџџџџџџџџџџџџџпџџџпџџџOЃЊЊ)ђЉЊЊЉЊЊЊЊЊЊЉЊЊЊ*!њџџџџЊJџџџOџџџпџџџџ§џџџџџџџџџџџџџџџџџџџџџџџџџпџп§џ§џџџџџџџџџџџџџџџџџџџџџџџџџпџџџпЏџџџЊЊЊ"ђЉЊЊЉЊЊЊЊЊЊЊЊ*џџЊџЊЊџџџџџџџџпџџџџ§џџџџџџџџџџџџџџџџџџџџџџџџџпџп§џ§џџџџџџџџџџџџџџџџџџџџџџџџџпџџџпЏњџџџЊЊ3ѓЈЊDЄЊЊЊЊ"Љ)єЏњџЊњџџџџџџџџпџџџџ§џџџџџџџџџџџџџџџџџџџџџџџџџпџп§џ§џџџџџџџџџџџџџџџџџџџџџџџџџпџџџпњџџџџЊ:"њOЈЊDЊЊЊЊ(ЊЊ9(єњџЊњџџџџџџџџџпџџџџ§џџџџџџџџџџџџџџџџџџџџџџџџџпџп§џ§џџџџџџџџџџџџџџџџџџџџџџџџџпџџџпњЏџџџЊ#!ЊЊJЈЊЊЊЊЃCђџЊџџџџџєџџџџџпџџџџ§џџџџџџџџџџџџџџџџџџџџџџџџџпџп§џ§џџџџџџџџџџџџџџџџџџџџџџџџџпџџџпOЉџЄџџџ:ЂЊЊ:ЊЊ34єђџџџџЏЊDџџџџєњпџџџџ§џџџџџџџџџџџџџџџџџџџџџџџџџпџп§џ§џџџџџџџџџџџџџџџџџџџџџџџџџпџџџпODЉєџџ?+3ЊЊЊJ(OЈЊ)ѓџџџOЄJњџџџЏџњпџџџџ§џџџџџџџџџџџџџџџџџџџџџџџџџпџп§џ§џџџџџџџџџџџџџџџџџџџџџџџџџпџџџпџOIЉЊџф;ЊЊЊЊ4Hџ3ЈЊ!єџџџЄџњџџџџџЏњпџџџџ§џџџџџџџџџџџџџџџџџџџџџџџџџпџп§џнннннннннннннннннннннннннннџџџпннннннннннннннннннннннннннннннннннннннннннннннннннннннџџџџнннннннннннннннннннннннннннџп§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџп§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџп§џџџџџџџџннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннџџџџџџџџп§џџџџџџџџ§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпџџџџџџџџп§џџџџџџџџ§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпџџџџџџџџп§џџџџџџџџ§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпџџџџџџџџп§џџџџџџџ§џџёёџџџёџџџџёџџџџџёџџџџџџџџџџџџџџџџџџёџџџџџџџџџџџџџџџџџџџџёџџёџџџџџџџџџџџџџџџџпџџџџџџџџп§џџџџџџџёџёџџџёџџёёџџёёёџџџџёџџџёёџџџџџџёџёџёџџџџёџёџџёџџџџпџџџџџџџџп§џџџџџџёёёџџёџџёџёџџџџёџёџёёџёџџџџџџёёёџџџџёёёёџёџџџёџёџёџџџџпџџџџџџџџп§џџџџџџёџёџёџџџџёџџџџџџёџёёџёџџёџџџёёёџџџџџџёџџџџџёџџёџёџџџџџџпџџџџџџџџп§џџџџёџёџџёёџџџёџџёџџџёџџёџёџџџџџџџёёџџџџёёџёџёёџџёџџёџџџёёџёџџџџпџџџџџџџџп§џџџџџџџџ§џџџџџџџџџџџџџџџёџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџёџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпџџџџџџџџп§џџџџџџџџ§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпџџџџџџџџп§џџџџёџџ§џџџџџёџџџџџџџџџџџџџџџџџџёџџёџџёџџџёџџџџџџџџџёџџџџџџџџџџџџџёџџџёёџџџџџџџёџџџџпџџџџџџџџп§џџџџё§џџџџёџёџёџџџџёџџёџёџџџёџџџёџџёџџџёџџџџџёџџџёџџёџёёџёџџџпџџџџџџџџп§џџџёџёџџџџёёёџџџџџџёџёџёёџџџёџёџџџџџџџџёџџџџёџёџџџџџёџёёџёёџџџџпџџџџџџџџп§џџџџёџёџџџџёёёџџџџёџџёџёёџџџёџёџџёџџџёџёџџџёџџџёџџџёёџёёџџёџџџџпџџџџџџџџп§џџџџё§џџџёџёёёџџџџџџёџџџџёёџџџџџџџџџџџџёёџџџџёёџџџџџџџёёџџџёџџџпџџџџџџџџп§џџџџџџџџ§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпџџџџџџџџп§џџџџџџџџ§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпџџџџџџџџп§џџџџџџџџ§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпџџџџџџџџп§џџџџџџџџннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннџџџџџџџџп§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџп§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџёџџџёёџџџџёџп§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџёёџџџџёџџёџџёџёёёёџп§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџёёёџџёџёёџёёёџџёёёёёџп§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџёёџџёёёџџёџџёёёџџџџёџёёџп§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџёџџёёёџџёџёёџёёџџџп§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпнннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн?р # script: python
# title:   Downhill Escape
# author:  mrfixit2001 (and some AI assistants)
# desc:    Ski downhill and avoid obstacles and the avalanche - a game concept based on skifree

W = 240
H = 136
WHITE = 15
BLACK = 1
BLUE = 8
GREEN = 6
RED = 12

ASSETS = {
    "skier_down": (9, 16, "0001020f000401040005010a0007010f0103010f0104010d0201020f0203010d0204010c0206020f030101040302010f0303010c0304010b0305010d0306010f030701040401010f0402010404030102040401010405010b0406020f0501010f050201040503010d0504010e0505010d050601040507010f06020104060301090604010306050109060601040701010a07020108070304090707010a0801010a0802020308040209080601030807010a0902010f0903010809040109090501080906010d0a01010f0a0301090a0401040a0501090a06020f0b01020f0b0302040b0501090b06010f0c01010f0c0301040c0401030c0501070c06010f0d01010f0d0301040d0401070d0501040d06010f0e01010f0e03010f0e0402070e06010f0f01010f0f03010f0f0401070f0501040f06010f"),
    "skier_ang": (11, 10, "0002010f0004010d0005010c0006010d000701040008030f0101010f0103010f0104020b0106010f0202020f0204010e020501020206010f020801040209010f020a01040302010f0304010f030501090306010a030702040309020f0402020f0404010a0405010904060108040701040408010f0501010f0503010f05040104050502030509020f0600040f060502090607020f060a010f0703020f07050203070701040708030f0800020f080201070803010d08040107080501040806010f0900010d09010107090201040903010f0907020f"),
    "skier_side": (10, 10, "0001010f0003010f0004010a0006010f0101010f0103010d0104010f0106010f0201020f0203010c0204010b0205040f0300010f0302010f030301020304010e0305010f0401010f040302040405010a0406040f0502010f0504010a05050109050604040601020f0603010406040109060501030606030f07040104070501090800010d080101070802010408030107080403030807010d0808010f"),
    "skier_crash": (12, 10, "0003010f0004020c000601040007040f0101010d0102010f010301040104010d0105020c0109010d010a010402010104020201070203010402040103020501010206010b020701040208010d02090107020a010f0301010f03020107030301030304010d0305010e030601030307010d0308010303090107030b010f0400010f0402010d040301040404010f04050103040601040407010f0408010304090104040b010f0500020f0502010405030107050404090508010705090104050b010f0601020f06030107060404090608010d0609020f0700010f0701010407030104070404090708010d070a0104070b010f080001040801030f0804010708050209080701070808030f080b0103090001040901030f090401040905010f090701040908010f090a020f"),
    "tree_1x": (10, 16, "0001030f000401030005030f0101010f0103010401040106010501040107010f0200010f0202010402030306020601040208010f0300020f03020104030303060306030f0400010f0402010f040303060406010f0408010f0500020f05020406050601030507020f0601010306020506060701040700020f0702010407030306070601040707020f0801010f08020406080601040900010f09010606090701040908010f0a0001030a0107060a08010a0b00020f0b0201030b0303060b0601070c01010f0c0205060c07010a0d0001040d0107060d0801040e00010f0e0101040e02010f0e0301040e04010e0e0502040e07020f0f03010d0f04010e0f05010d"),
    "tree_1_5x": (15, 24, "0004010f000602040009010f0103010f0105010f010602060108030f0202030f02050406020a020f0302010f030401030305040603090104030a020f0401010f0403010404040606040a0104040c010f0501030f05040104050504060509030f0602010f06040104060504060609010f060b010f0701010f0703010f07040606070a010f070c010f0800030f08030706080a0103080b030f0901010f09020906090b0103090c020f0a00020f0a0201030a0308060a0b01040a0c020f0b00010f0b02020f0b0401030b0504060b0901040b0a010f0c00020f0c0301040c0406060c0c010f0d0201040d0307060d0a01030d0b010f0e00010f0e0101030e020a060e0c01040e0d010f0f0001040f010c060f0d010f1000010f10010103100201061003010710040606100a0204100c010f1103010a11040606110a0104110c010f1200010f1202010f12030806120b0104120d010f1301010f13020a06130c010f1400010414010c06140d010f1500010f150102041503010f150401041505010f1506020e15080504150d010f160501041606020e1608010d1700050f1705020e1707010d170801031709050f"),
    "tree_2x": (20, 32, "0006010f0008010f00090106000a030f0105030f0108010301090106010a0104010c010f0205010f0207010402080306020b0104020d010f0304010f0306010f03070506030c030f0403010f0405010f04060606040c0103040f010f0503020f0505010305060706050d0103050e030f0602010f0604010f06050906060e030f0704020f0706010307070506070c0104070f010f0803020f08060606080c0104080e010f0903010f0905010409060706090d010f090f010f0a02010f0a04010f0a0508060a0d01030a0e030f0b01010f0b0301040b040a060b0e01030b0f010f0b11010f0c00010f0c0201040c030c060c0f01030c10030f0d00010f0d02010f0d030d060d10010f0d12010f0e01010f0e0301040e0409060e0d01040e0e01060e0f010f0e11010f0f04020f0f0607060f10010f1002010f1004010f1005010310060706100d0104100f010f1101010f1103010f11040a06110e010f1110020f1200010f1202010412030c06120f01041210010f1212010f1301010413020e0613100103131101041312010f1400010414011006141101041500010f15010f06151001041512010f1601010f1602040416060706160d0103160e020f1611010f1700010f1704010f17050906170e01041710010f1801030f18040b06180f010f1811010f1900010f1902010f1903010319040c061910030f1a01010f1a020e061a1001031b0001031b0111061b12010f1c00010f1c0106041c07010f1c0801031c09020e1c0b01031c0c06041c12010f1d08030e1d0b010d1e00070f1e07010d1e08040e1e0c070f1f04010f1f0601041f07030e1f0a010d1f0b01041f0c010d1f0e010f"),
    "tree_2_5x": (25, 40, "0009010f000b010f000c0106000d030f0108020f010b0103010c0106010d0104010f010f0208010f020a0104020b0306020e01040210010f0307010f0309010f030a0506030f030f0406030f04090606040f01040411010f0506010f0508010405090706051001040512010f0605010f06070104060809060611030f0704030f07070b060712030f0804010f0806010f08070a06081101040812020f0905010f0907020f09090606090f01030910010f0a06010f0a0801040a0907060a10030f0b05030f0b0808060b1001040b12010f0c04020f0c0701030c0809060c11010f0c13010f0d04010f0d0601040d070b060d12010f0d14010f0e02030f0e0501040e060d060e13010f0e15010f0f02020f0f0401030f050f060f14030f1002010f10041006101401031016010f1102010f1104010f11050f061114030f1203010f12050204120701071208010412090706121003041213010f1215010f1304010f13080806131001071314010f1404020f14070104140809061411030f1503010f1506010415070a06151101031513020f1602010f1604010f1605010316060c06161201041613010f1616010f1701010f17030104170410061714020f1717010f1802010418031306181601041817010f19010104190214061916010f1a01010f1a0213061a1501041a17010f1b02010f1b030f061b1201031b1301041b14010f1b16010f1c01010f1c03040f1c0701041c0809061c1101031c15010f1d02010f1d06010f1d070b061d1201041d14010f1e03030f1e060d061e1301041e15010f1f02010f1f04010f1f0501031f060e061f14030f2001010f2003010f20041006201401032016020f21020104210312062115010422010103220215062217010f2301020f23030804230b030e230e0103230f01072310020323120107231301042314010623150304240a010f240b040e240f010f2501080f250a010d250b040e250f01042510080f2607020f26090104260a050e260f010d2611010f2706010f2708010f2709020e270b0103270c010e270d010d270e010f270f01032710010f2712010f"),
    "tree_3x": (30, 48, "000c010f000e0104000f01030011010f010b010f010d0104010e02060110010f0112010f020a030f020d04060212010f0309030f030c0103030d0406031101040313010f0409010f040b0104040c06060412010f0414010f0508010f050a010f050b08060513030f0607030f060a0906061301040615010f0707010f07090103070a0a06071401040716010f0806010f0808010408090c06081501040816020f0905030f09080e060916020f0a06020f0a0801040a090b060a1401040a15030f0b09020f0b0b08060b13010f0c07030f0c0a09060c13030f0d07010f0d0901040d0a09060d1301030d15010f0e06030f0e090b060e1401040e16010f0f05020f0f0801030f090c060f15010f0f17010f1004010f1007010410080e061016010f1018010f1103010f1105010f11060103110710061117010f1119010f1202030f120513061218010f121a010f1302010f1304010f130514061319030f1403010f1405010314061206141801041419020f1503030f15061106151701041518010f151a010f1604010f1606010f160702041609010f160a0906161301031614030f1705010f17090104170a0a061714010f1717020f1806010f1808010f18090b06181401041816010f1904020f1907010f19080d061915010f1917010f1a03010f1a0601041a070f061a16010f1a18020f1b02010f1b04010f1b0501041b0611061b17010f1b1a020f1c01010f1c03010f1c0414061c1801031c19010f1d02010f1d0318061d1b010f1e01010f1e0219061e1b020f1f01010f1f0218061f1a010f1f1c010f2002010420031506201801032019010f201b010f2101010f2103010f210401032105010621060103210701072108010421090c06211502042117010f211a010f2202010f2208010f22090c06221501042218020f2303050f23080e06231601042318010f2404020f2407010324080f06241701042419010f2503020f25060104250711062518030f2602010f260501042606120626180104261a010f2703010f270401032705140627190104271b020f2801010f2802010428031706281a01042901010329021906291b0103291c010f2a01020f2a0302042a0501072a0601042a0701062a0801042a0901072a0a03042a0d01032a0e030e2a1101062a1201032a1302062a1501032a1601062a1701072a1802032a1a01042a1b01072a1c010a2b0c010f2b0d050e2b12010f2b14010f2c010a0f2c0c010f2c0d050e2c12010d2c13020f2c17060f2d09010f2d0b010f2d0c060e2d12010d2d14010f2e08030f2e0b080e2e13010f2e15010f2f08010f2f0a01042f0b010e2f0c010d2f0d01032f0e020e2f10020f2f1201042f13010f2f15010f"),
    "rock": (12, 5, "0004040301020203010404040108020302010203020306040209020303000303030306040309030304010a03"),
    "rough": (18, 4, "0002020400080204000e0204010101040104010401070104010a0104010d01040110010402050204020b02040304010403070104030a0104030d0104"),
    "jump": (12, 3, "0000040c00040307000703090100040c0104030701070309"),
    "lift": (10, 15, "00000a01010002010108020102010801030101010302020d030402010306020d03080101040101010402020d040402010406020d04080101050101010502020d050402010506020d05080101060101010602020d060402010606020d06080101070101010702020d070402010706020d07080101080101010802020d080402010806020d08080101090101010902020d090402010906020d090801010a0101010a02020d0a0402010a06020d0a0801010b0101010b02020d0b0402010b06020d0b0801010c0101010c02020d0c0402010c06020d0c0801010d0102010d0702010e0102010e070201"),
    "title_bg": (96, 54, "000002040002010300030201000501050006030100090102000a010f000b010a000c070f0013010a0014030f0017010400180508001d04090021160a0037080f003f030a0042090f004b010a004c030f004f010400500106005101010052010300530104005401030055010e005601050057010600580205005a06010100010a0101010401020201010403050107010201080204010a020f010c010a010d0b0f0118010301190408011d05090122140a0136080f013e040a0142080f014a010a014b040f014f0102015001060151010501520102015301030154010e01550101015601020157010501580701015f0102020001040201010202020101020301020204030502070102020801040209030f020c020a020e0a0f0218010402190408021d05090222130a0235090f023e030a0241080f0249010a024a040f024e0104024f01010250010e02510102025201010253050202580801030001020301040103050202030701050308010203090104030a010f030b040a030f080f031701040318010f03190103031a0208031c07090323120a0335060f033b010a033c020f033e030a0341080f0349010a034a020f034c030a034f01030350020503520101035301020354010f035502040357010203580201035a0105035b0102035c04010400050104050202040701010408010504090103040a030f040d020a040f080f041701040418010a04190104041a0208041c07090423120a0435030f0438010a0439020f043b010a043c010f043d030a0440080f0448010a0449020f044b020a044d010f044e0104044f010204500401045401040455010f04560104045701060458010204590101045a0105045b05010500010205010104050203010505020505070301050a0103050b030f050e020a0510050f051501040516020f0518010a0519010f051a0103051b07090522130a0535030f0538020a053a010f053b050a0540080f0548010a0549050f054e0103054f0105055001020551010105520102055301040554010a055501040556010e0557010205580201055a0205055c04010600010f060101020602030106050205060701020608010306090204060b040f060f010a0610020f0612010a0613020f061501030616050f061b0108061c060906220a0a062c0209062e0104062f0203063101040632040a0636010f0637090a0640040f0644020a0646010f0647010a0648060f064e0103064f0101065001060651010206520101065302040655020e065701050658010106590205065b0106065c0401070001030701020207030505070801030709040f070d010a070e020f0710010a0711010f0712020a07140104071501030716050f071b0104071c050907210a0a072b0203072d010e072e030c0731020b073301030734020a0736010f0737010a0738020f073a070a0741020f0743040a0747070f074e0103074f010207500106075101050752010107530102075401030755010e075601020757020107590205075b0106075c0105075d03010800010308010102080201050803010108040105080502010807020508090103080a060f0810010a0811020f0813010a08140104081501020816070f081d0104081e03090821080a08290109082a0103082b010d082c070c0833010b08340102083501040836010f0837010a0838010f0839080a0841020f0843010a08440a0f084e0104084f010e08500106085101050852010208530103085402020856020108580205085a0102085b010e085c0102085d0205085f01010900010209010103090201050903010109040105090502010907020509090102090a0103090b060f0911010a0912020f09140103091501020916080f091e0104091f01090920090a09290103092a010d092b090c0934020b093601040937020f0939080a09410b0f094c020a094e0103094f010609500102095101050952010e095301020954040109580205095a020e095c0102095d0103095e0105095f01010a0001010a0101020a0206010a0801020a0902010a0b01030a0c030f0a0f010a0a10020f0a12010a0a13010f0a1401030a1501020a1601030a17080f0a1f01090a20050a0a2501090a26020a0a2801030a29010d0a2a0a0c0a34030b0a37010a0a38010f0a39080a0a410b0f0a4c010a0a4d01040a4e010e0a4f01060a5001050a5104010a5501020a5601030a5701010a5801050a5901020a5a010e0a5b01060a5c02050a5e02010b0001020b0107010b0801020b0902030b0b01040b0c010f0b0d01040b0e030f0b11020a0b1301030b1401060b1501020b1601030b17010a0b18080f0b20040a0b2401090b25020a0b2701040b28020d0b2a010c0b2b020b0b2d070c0b34030b0b3701030b38080a0b400b0f0b4b010a0b4c01040b4d010e0b4e02050b5005010b5501020b5601030b5702050b5902010b5b04050b5f01010c0008010c0801050c0901040c0a030f0c0d02040c0f010f0c10010a0c1101040c12010f0c1301030c1403020c17020a0c19080f0c21040a0c2501090c26010a0c2701030c28020e0c2a010b0c2b0b0c0c36010b0c3701010c38070a0c3f0c0f0c4b01040c4c01050c4d02010c4f02020c5103010c5401020c5501010c5601050c5702020c5907010d0007010d0702050d0901020d0a01040d0b020f0d0d03040d10010f0d1101040d12010f0d1301040d1401060d1501020d1601030d17020a0d19090f0d22050a0d2701030d28010e0d290d0c0d36020b0d3801030d39050a0d3e0d0f0d4b01040d4c04030d5001020d5101030d5201020d5301010d5402030d56010e0d5701020d5803050d5b05010e0008010e0801020e0901050e0a01020e0b01040e0c020f0e0e03040e11010f0e1201040e1301030e1401060e1502020e17010f0e18020a0e1a0a0f0e24010a0e2501090e2601030e27010e0e28060c0e2e040b0e32040c0e36030b0e39040a0e3d0b0f0e48010a0e49020f0e4b030a0e4e01040e4f01060e5001050e5102020e5302010e5501030e56010e0e5702020e5901040e5a01030e5b05010f0003010f0301020f0402010f0601050f0703010f0a01050f0b01020f0c01040f0d010f0f0e03040f11010f0f1201030f1303020f1601010f1701040f18010f0f19020a0f1b0a0f0f25010a0f2601030f27030c0f2a030b0f2d01010f2e020b0f3004010f34050b0f39030a0f3c090f0f45010a0f46020f0f48010a0f49010f0f4a040a0f4e03030f5101020f5202010f5401020f55010e0f5601060f5702020f5901030f5a02020f5c04011000030110030202100501011006010510070501100c0105100d0104100e020f101002041012010f101301031014020210160101101701031018020f101a020a101c0a0f102601031027010c1028020b102a0201102c020b102e0402103203011035040b1039030a103c080f1044020a1046010f1047010a1048020f104a030a104d0104104e010e104f010310500106105101021052010110530102105401071055030610580305105b0501110002011102020211040201110602051108010211090104110a0101110b0202110d0103110e010f110f01041110020f11120104111301031114010611150202111701041118010a1119020f111b030a111e080f112601031127010e1128010211290201112b0102112c020d112e010e112f01011130010d1131010e113202021134010e1135010d11360102113701011138010b1139030a113c080f1144010a1145010f1146020a1148010f1149040a114d0103114e010e114f01021150010511510101115201021153010e11540106115501051156010e1157020511590101115a0105115b0301115e0102115f0101120002011202010a12030103120401011205040512090103120a010f120b0104120c050f121101041212020312140302121701041218010f12190104121a020f121c030a121f070f122601031227010e1228010312290201122b020d122d0103122e0104122f010312300101123101021232010d1233010e123401031235020212370101123801021239030a123c080f1244080a124c0103124d0106124e0305125101021252010e125301021254010512550102125601071257010512580201125a0105125b0401125f010213000201130201021303020113050105130601011307010513080202130a0104130b010f130c0104130d040f13110103131201061313030213160101131701031318020f131a010a131b020f131d020a131f070f1326010d1327020b13290202132b010f132c010d132d020f132f01021330010e1331010c1332010d1333010e13340101133501021336010c13370101133801031339010f133a020a133c080f1344070a134b0103134c0102134d0106134e02011350020e1352010113530105135401011355010e1356020513580701135f01031400070114070402140b0104140c040f141001031411060214170101141801041419010f141a020a141c020f141e020a1420060f1426010d1427010c1428030e142b020d142d010f142e02041430040d14340104143501021436010b14370102143801031439030a143c010f143d010a143e060f1444020a1446010f1447030a144a0103144b0105144c0102144d0101144e0102144f05011454010214550105145602021458080115000601150602021508010515090101150a0205150c0104150d030f1510020415120103151306021519040a151d010f151e040a1522040f152601041527010d1528010e15290a0d1533010f153401041535010d153601021537050a153c080f1544050a1549010f154a0203154c0104154d0203154f010215500501155501021556010415570701155e020316000d01160d0104160e010f160f01041610010f16110104161202031614030216170304161a010f161b050a1620010f1621010a1622020f162402041626020316280e0d163601021637050a163c050f1641010a1642020f1644030a1647070f164e0103164f01021650030116530102165402011656010216570601165d0102165e010f165f01031700090117090102170a0201170c0102170d0104170e020f17100104171102031713030217160101171701031718010f17190204171b010f171c020a171e010f171f010a1720020f172203041725010917260108172701021728010117290103172a070d1731020c1733020d1735010e173601031737010a1738010f1739030a173c040f1740020a1742020f1744020a1746070f174d0104174e0102174f01061750010517510101175201021753010417540102175501011756010b17570501175c0102175d0203175f01051800090118090102180a0203180c0101180d0104180e010f180f01041810010218110105181201021813010118140102181501031816020218180304181b010a181c010f181d010a181e020f1820020a18220103182301041824010918250108182602021828010118290103182a080d1832010c1833020d183501031836070f183d010a183e020f1840020a1842010f1843020a1845080f184d0103184e010e184f010618500205185203011855010e185601021857020118590105185a0201185c0205185e0101185f010519000a01190a0102190b010f190c0204190e010f190f010419100102191101031912050219170101191801031919010f191a0204191c040f1920020a192201041923010a192401081925010219260208192801021929010e192a040d192e0203193001041931040d193501031936080f193e060a1944030f1947010a1948040f194c0104194d010e194e0102194f01061950020519520201195401021955010e19560105195701021958010419590103195a0202195c04051a000a011a0a01051a0b01031a0c020f1a0e01041a0f020f1a1101041a1207021a1901041a1a050f1a1f03041a2201031a2301041a2404081a2801021a29010d1a2a01031a2b030d1a2e04021a32020d1a3401031a3501081a3601041a37080f1a3f040a1a43040f1a47010a1a48030f1a4b01041a4c010e1a4d02061a4f01051a5001021a5101061a5201011a5301021a54010e1a5502021a5701031a58010f1a5901031a5a01011a5b01051a5c02021a5e01041a5f010f1b000a011b0a01051b0b01021b0c02041b0e020f1b1001041b1101031b1202061b1406021b1a01041b1b020f1b1d05041b2202031b24010a1b2502081b2702021b29010d1b2a010b1b2b060d1b3101021b32020d1b3401021b3502081b3701041b38080f1b40030a1b43040f1b47010a1b48020f1b4a01041b4b010e1b4c03061b4f03051b5201011b53020e1b5502021b5705051b5c02021b5e01041b5f01031c000b011c0b01051c0c02031c0e01041c0f01031c1001021c1102061c1303021c1601011c1701031c1801041c1901031c1a01041c1b010f1c1c02041c1e030f1c21010a1c2201031c23020a1c2502081c2701011c2801021c29010d1c2a010c1c2b01021c2c010d1c2d010f1c2e050d1c3303021c3601081c3701041c38090f1c41020a1c43040f1c47020a1c4901041c4a02021c4c02051c4e04011c52010e1c5302041c5504051c5902011c5b02021c5d01051c5e02021d0005011d0501051d0603011d0901021d0a03011d0d06021d1301031d1404021d1801041d19020f1d1b02041d1d010f1d1e01041d1f030a1d2201031d2301081d24010a1d2501091d2601021d2701011d28010e1d29020d1d2b010c1d2c01011d2d040d1d31010e1d3204021d3601081d3701031d38080f1d40030a1d43050f1d48010a1d4902021d4b01011d4c01051d4d02021d4f02011d51020e1d5301021d5401041d5501031d5601011d5701051d5803011d5b01021d5c02051d5e01021d5f01051e0006011e0601051e0702011e0902031e0b03011e0e01051e0f01011e1001021e1101011e1207021e1903041e1c010f1e1d01041e1e050a1e2301031e2401021e25010a1e2602021e28010e1e29020d1e2b010c1e2c010b1e2d01011e2e01021e2f020e1e3102021e3302081e3502091e3701041e38090f1e41010a1e42060f1e48020a1e4a01031e4b01011e4c01031e4d01041e4e02021e50010e1e5102061e5301021e5401051e5501011e5602051e5801011e5901021e5a01031e5b01051e5c02011e5e01051e5f01031f0001021f0103011f0402021f0602011f0801021f0901011f0a01041f0b02021f0d01031f0e01021f0f01031f1008021f1801011f1901021f1a01041f1b010f1f1c080a1f2401021f2502081f2701021f28010e1f2904031f2d03021f3005081f3502091f3701041f38060f1f3e040a1f42020f1f44010a1f45020f1f47030a1f4a01031f4b01041f4c010f1f4d01041f4e01011f4f010e1f5001061f5102051f5301061f5402011f5601051f5702011f5901041f5a01021f5b01051f5c02011f5e01021f5f010f2000010420010301200401022005010f20060103200701022008010320090101200a0102200b0104200c0103200d020f200f01042010010220110106201206022018010320190104201a010f201b0109201c080a2024010820250502202a0108202b0409202f01042030010a2031050920360108203701042038060f203e030a2041030f2044040a2048020f204a030a204d0202204f0205205101012052010520530201205502052057020120590104205a0102205b0301205e0104205f010f2100010321010301210401022105040f21090104210a0103210b030f210e0104210f070221160101211701042118010f2119020a211b0109211c020a211e0109211f050a212401092125040221290508212e0109212f020a213101092132040821360102213701042138010f2139010a213a030f213d040a2141020f2143030a2146030f2149030a214c0103214d0205214f0201215101022152070121590102215a0103215b0301215e0103215f01012200010322010301220401022205020a2207060f220d0104220e0103220f010622100102221103062214010222150103221601042217040a221b0108221c010a221d0108221e0109221f060a222501092226020222280208222a0209222c0108222d0209222f0908223801032239020f223b010a223c010f223d010a223e010f223f020a2241010f2242040a2246020f2248030a224b0104224c0102224d0206224f0105225005012255010222560a012300010223010201230302022305030a2308040f230c0104230d04022311020623130102231401042315010f2316050a231b0108231c0109231d0102231e0104231f070a232601032327010223280408232c0202232e0508233303092336030823390103233a060a2340020f2342030a2345030f2348030a234b0103234c010e234d0102234e0105234f02012351020223530101235401022355010323560601235c0102235d030124000102240102012403010b240401032405050a240a030f240d0204240f01032410010224110103241201042413020f2415060a241b0208241d0102241e080a2426020324280409242c0104242d010a242e0109242f080a2437020924390108243a0102243b040a243f040f2443020a2445030f2448020a244a0103244b010e244c0102244d0205244f0101245001032451030224540101245502032457010224580201245a0402245e020125000201250201022503010b250401032505060a250b030f250e0104250f02022511010f2512010a251301042514070a251b0208251d0103251e070a2525010425260103252701042528110a25390109253a0108253b0103253c020a253e050f2543010a2544030f2547020a25490103254a0206254c0105254d0102254e0101254f010225500103255101012552010b2553010225540101255501022556020f2558010325590204255b010e255c0202255e02012600020126020202260401032605010f2606070a260d0103260e0105260f01032610020426120203261401092615010a261601082617020a26190209261b0108261c0102261d0103261e070a26250104262601032627130a263a0109263b0108263c010a263d010f263e020a2640020f2642020a2644040f2648010326490105264a0102264b0101264c0102264d0103264e0101264f010426500102265101012652010e2653010226540101265501032656030f26590204265b020e265d0102265e02012700020127020202270401032705020f2707060a270d0104270e0103270f010f27100304271301032714010827150109271602022718010827190109271a0208271c0102271d0104271e060a272402042726140a273a0109273b0108273c0104273d010f273e010a273f020f2741010a2742060f274801042749010a274a0104274b0103274c010f274d0203274f010f27500101275101022752010e27530102275401012755030427580209275a0108275b0103275c010e275d0301280002012802010228030101280401022805010a2806030f2809040a280d0204280f010f2810040a28140108281502022817020128190308281c0102281d070a282402042826150a283b0108283c0103283d020f283f0104284001032841060f2847040a284b050f28500104285101032852010e28530104285401032855020828570409285b0102285c010e285d0202285f010129000201290203022905040a2909020f290b020a290d0104290e020f2910030a2913010429140103291501022916030129190308291c0102291d070a292401042925150a293a0209293c0102293d010f293e0103293f0201294101042942040f2946040a294a020f294c020a294e030f295101042952020f2954020429560409295a0108295b0102295c010e295d0202295f01012a0001042a0101022a0201012a0301032a0401022a05010a2a0601042a07010a2a08010f2a09010a2a0a020f2a0c02042a0e010f2a0f020a2a1101032a1202022a1404012a1801022a1901092a1a01082a1b02022a1d060a2a2302042a250c0a2a3101092a32090a2a3b01092a3c01082a3d01032a3e01022a3f02012a4101022a42030f2a45040a2a49030f2a4c040a2a50040f2a5401042a5503092a5803082a5b01032a5c010e2a5d01022a5e010b2a5f01012b00020a2b0201022b0302032b0501022b0601032b07030a2b0a020f2b0c01042b0d010f2b0e020a2b1001032b1102022b1305012b1801082b1901022b1a02042b1c01022b1d060a2b2301092b240d0a2b3101092b32010a2b3303092b36060a2b3c01092b3d01082b3e01032b3f03012b4203042b45020f2b47010a2b48020f2b4a040a2b4e050f2b5301042b5402092b5602082b5802092b5a02032b5c010e2b5d01022b5e010d2b5f01042c00030f2c03010a2c0401042c0501022c06050a2c0b010f2c0c01042c0d020a2c0f01032c1002022c1207012c1901042c1a010f2c1b01042c1c01082c1d060a2c2301092c240d0a2c3101092c3202082c3401092c35020a2c3707092c3e01032c3f06012c4501032c46020f2c48030a2c4b060f2c51030a2c5401042c5501082c5601092c5701042c58030f2c5b020e2c5d01042c5e020f2d00050f2d0501042d0601092d07050a2d0c01032d0d010a2d0e01092d0f01022d1009012d1901032d1a010f2d1b01042d1c01082d1d01092d1e040a2d2201042d2301092d240c0a2d3001092d3103082d3401092d35010a2d3601092d37050a2d3c02092d3e01022d3f07012d46030a2d49080f2d51030a2d5401092d5501042d56040f2d5a01042d5b01032d5c01042d5d030f2e00060f2e0601042e0701032e08040a2e0c01032e0d02092e0f01022e1009012e1901022e1a010f2e1b01042e1c01082e1d01092e1e040a2e2201092e230c0a2e2f02092e3104082e3501092e36070a2e3d01022e3e08012e4601022e47010a2e48080f2e50030a2e5301042e54060f2e5a01042e5b050f2f00010a2f01060f2f07050a2f0c01032f0d01082f0e02022f1009012f1901022f1a010f2f1b01032f1c01082f1d01092f1e040a2f2201092f230b0a2f2e04092f3201082f3301022f3401082f3502092f37060a2f3d01022f3e09012f47040f2f4b020a2f4d010f2f4e040a2f520e0f3000020a3002070f3009030a300c0104300d0208300f080130170303301a010f301b0103301c0208301e030a302102043023090a302c0409303003083033020230350108303603093039020a303b0209303d0102303e0901304701043048020f304a020a304c020f304e030a30510f0f310001093101010a3102090f310b020a310d0103310e0108310f0701311601023117010a3118020f311a0204311c0109311d0108311e030a312101043122090a312b0409312f05083134010231350108313601093137030a313a0109313b0103313c0108313d0202313f0801314701043148010f3149010a314a030f314d020a314f110f320003093203010a3204020f3206010a3207050f320c020a320e0103320f010232100501321501023216040a321a0204321c0109321d0108321e030a322101093222060a32280609322e0108322f010932300508323501023236020832380209323a0103323b010a323c0103323d0104323e0103323f0801324701023248030f324b020a324d090f325601043257090f33000104330103093304010a3305020f330701043308010a3309050f330e010a330f010333100401331401023315050a331a0103331b0104331c0109331d0108331e020933200108332101093322050a33270809332f060833350203333701083338010933390108333a0104333b0103333c0104333d010f333e0103333f0801334701023348090f3351030a335402043356070f335d0104335e010f335f010a34000304340303093406020a3408010934090104340a050f340f01033410010b34110102341202033414060a341a0204341c060834220c09342e0608343401023435010f34360104343702083439020a343b0108343c020a343e0109343f010234400701344701033448070f344f02043451020a345301043454010a3455070f345c010a345d020f345f010a3500020f3502020435040209350601043507010a35080209350a020a350c020f350e0104350f010e3510010b351101033512070a35190104351a0103351b0109351c0108351d0109351e040835220c09352e0608353401043535020f35370103353801083539010a353a0108353b0109353c020a353e02093540060135460102354701043548060f354e0104354f010a3550020f3552010a35530b0f355e020a")
}

TREE_KEYS = ["tree_1x", "tree_1_5x", "tree_2x", "tree_2_5x", "tree_3x"]
FIXED_HAZARDS = ["rock", "lift"]
SLOW_KEYS = ["rough"]
JUMP_KEYS = ["jump"]

parsed = {}
state = "title"
dir = 2
speed = 1.8
max_speed = 3
trees = []
hazards = []
slows = []
jumps = []
score = 0.0
best = 0.0
frame = 0
snow = []
jump_timer = 0
crash_timer = 0
difficulty = 0
DIFF_NAMES = ["EASY", "MEDIUM", "HARD"]
DIFF_MULTS = [2.0, 1.0, 1.0/1.2]
FORCED_STRAIGHT_HAZARD_EVERY = 12
avalanche_start = 200
avalanche_active = False
avalanche_dist = 0.0
avalanche_timer = 0
avalanche_game_over = False
crash_resume_push = 0
crash_input_lock = 0
crash_recovering = False
paused = False
runtime_spawn_count = 0
start_safe_timer = 0
inited = False

try:
    import random as _random_mod
except:
    _random_mod = None

def rnd(n):
    if _random_mod is not None:
        return _random_mod.random() * n
    return 0

def parse_asset(name):
    if name in parsed:
        return parsed[name]
    w, h, hx = ASSETS[name]
    data = []
    i = 0
    n = len(hx)
    while i < n:
        y = int(hx[i:i+2], 16)
        i += 2
        x = int(hx[i:i+2], 16)
        i += 2
        ln = int(hx[i:i+2], 16)
        i += 2
        c = int(hx[i:i+2], 16)
        i += 2
        data.append((y, x, ln, c))
    parsed[name] = (w, h, data)
    return parsed[name]

def draw_asset(name, px, py, flip=False):
    w, h, data = parse_asset(name)
    i = 0
    if not flip:
        while i < len(data):
            y, x, ln, c = data[i]
            line(px + x, py + y, px + x + ln - 1, py + y, c)
            i += 1
    else:
        while i < len(data):
            y, x, ln, c = data[i]
            sx = px + (w - x - ln)
            line(sx, py + y, sx + ln - 1, py + y, c)
            i += 1

def draw_asset_rot180(name, px, py, flip=False):
    w, h, data = parse_asset(name)
    i = 0
    if not flip:
        while i < len(data):
            y, x, ln, c = data[i]
            sx = px + (w - x - ln)
            sy = py + (h - 1 - y)
            line(sx, sy, sx + ln - 1, sy, c)
            i += 1
    else:
        while i < len(data):
            y, x, ln, c = data[i]
            sx = px + x
            sy = py + (h - 1 - y)
            line(sx, sy, sx + ln - 1, sy, c)
            i += 1

def asset_size(name):
    w, h, data = parse_asset(name)
    return w, h

def current_asset():
    if dir == 5:
        return "skier_crash", False
    if dir == 2:
        return "skier_down", False
    if dir == 1:
        return "skier_ang", False
    if dir == 3:
        return "skier_ang", True
    if dir == 0:
        return "skier_side", False
    return "skier_side", True

def skier_rect():
    name, flip = current_asset()
    w, h = asset_size(name)
    x = int(W / 2 - w / 2)
    y = int(H / 2 - h / 2)
    # feet / ski area, slightly forgiving
    bx = x + max(1, w // 3)
    by = y + h - 4
    bw = max(2, w - max(2, (w // 3) * 2 - 1))
    bh = 4
    return bx, by, bw, bh

def tree_rect(t):
    x = t[0]
    y = t[1]
    key = t[2]
    w, h = asset_size(key)
    # collide mainly on lower trunk / center mass
    bx = x + int(w * 0.34)
    by = y + int(h * 0.76)
    bw = max(2, int(w * 0.30))
    bh = max(3, int(h * 0.20))
    return bx, by, bw, bh

def fixed_rect(t):
    x = t[0]
    y = t[1]
    key = t[2]
    w, h = asset_size(key)
    if key == "rock":
        return x + 2, y + max(1, h - 3), max(4, w - 4), 3
    if key == "lift":
        return x + 1, y + 2, max(4, w - 2), max(8, h - 2)
    if key == "rough":
        return x + 1, y, max(8, w - 2), h
    if key == "jump":
        return x, y, w, h
    return x, y, w, h

def draw_asset_scaled(name, px, py, scale_pct, flip=False):
    if scale_pct <= 100:
        draw_asset(name, px, py, flip)
        return
    w, h, data = parse_asset(name)
    s = scale_pct
    i = 0
    while i < len(data):
        y, x, ln, c = data[i]
        yy0 = py + (y * s) // 100
        yy1 = py + ((y + 1) * s) // 100 - 1
        if yy1 < yy0:
            yy1 = yy0
        j = 0
        while j < ln:
            sx = x + j
            if flip:
                sx = w - 1 - sx
            xx0 = px + (sx * s) // 100
            xx1 = px + ((sx + 1) * s) // 100 - 1
            if xx1 < xx0:
                xx1 = xx0
            rect(xx0, yy0, xx1 - xx0 + 1, yy1 - yy0 + 1, c)
            j += 1
        i += 1

def visual_rect(t):
    x = t[0]
    y = t[1]
    key = t[2]
    w, h = asset_size(key)
    if key.startswith("tree_"):
        return x + 1, y + 1, max(2, w - 2), max(2, h - 2)
    if key == "lift":
        return x, y, w, h
    if key == "rock":
        return x, y + max(0, h - 7), w, min(7, h)
    if key == "rough":
        return x, y, w, h
    if key == "jump":
        return x, y, w, h
    return x, y, w, h

def overlaps_any_world_visual(test_rect):
    i = 0
    while i < len(trees):
        if overlap(test_rect, visual_rect(trees[i])):
            return True
        i += 1
    i = 0
    while i < len(hazards):
        if overlap(test_rect, visual_rect(hazards[i])):
            return True
        i += 1
    i = 0
    while i < len(slows):
        if overlap(test_rect, visual_rect(slows[i])):
            return True
        i += 1
    i = 0
    while i < len(jumps):
        if overlap(test_rect, visual_rect(jumps[i])):
            return True
        i += 1
    return False

def overlaps_any_world(test_rect):
    i = 0
    while i < len(trees):
        if overlap(test_rect, tree_rect(trees[i])):
            return True
        i += 1
    i = 0
    while i < len(hazards):
        if overlap(test_rect, fixed_rect(hazards[i])):
            return True
        i += 1
    i = 0
    while i < len(slows):
        if overlap(test_rect, fixed_rect(slows[i])):
            return True
        i += 1
    i = 0
    while i < len(jumps):
        if overlap(test_rect, fixed_rect(jumps[i])):
            return True
        i += 1
    return False

def choose_fixed_key(kind_list, offset):
    idx = int((frame // 17 + offset) % len(kind_list))
    return kind_list[idx]

def lane_spawn_x(w):
    srx, sry, srw, srh = skier_rect()
    x = int(srx + srw / 2 - w / 2)
    if x < 4:
        x = 4
    if x > W - w - 4:
        x = W - w - 4
    return x

def add_diagonal_object(store, key, next_count):
    w, h = asset_size(key)
    srx, sry, srw, srh = skier_rect()
    lane_center = int(srx + srw / 2)
    target_y = int(sry + srh / 2)
    move_right = True
    if dir == 3:
        move_right = False
    elif dir != 1:
        move_right = ((next_count // 20) % 2) == 0
    y = H + h
    tries = 0
    while tries < 4:
        ty = y + tries * (h + 10)
        rise = ty - target_y
        if rise < 1:
            rise = 1
        offset = int(rise * 55 / 84)
        x = int(lane_center - w / 2)
        if move_right:
            x -= offset
        else:
            x += offset
        if x < 4:
            x = 4
        if x > W - w - 4:
            x = W - w - 4
        t = [x, ty, key]
        if not overlaps_any_world_visual(visual_rect(t)):
            store.append(t)
            return True
        tries += 1
    return add_lane_object(store, key)

def add_lane_object(store, key):
    w, h = asset_size(key)
    x = lane_spawn_x(w)
    y = H + h
    tries = 0
    while tries < 4:
        t = [x, y + tries * (h + 10), key]
        if not overlaps_any_world_visual(visual_rect(t)):
            store.append(t)
            return True
        tries += 1
    store.append([x, y, key])
    return True

def add_forced_hazard(next_count):
    global runtime_spawn_count
    key = choose_fixed_key(FIXED_HAZARDS, len(hazards) * 3 + next_count)
    if next_count % 20 == 0:
        if add_diagonal_object(hazards, key, next_count):
            runtime_spawn_count += 1
        return
    if next_count % FORCED_STRAIGHT_HAZARD_EVERY == 0:
        if add_lane_object(hazards, key):
            runtime_spawn_count += 1
        return

def add_fixed_object(store, key, gap):
    global runtime_spawn_count
    w, h = asset_size(key)
    next_count = runtime_spawn_count + 1
    if next_count % 20 == 0 or next_count % FORCED_STRAIGHT_HAZARD_EVERY == 0:
        add_forced_hazard(next_count)
        return
    span = W - w - 8
    if span < 8:
        span = 8
    tries = 0
    while tries < 20:
        x = int(4 + ((frame * gap + (len(store) + tries) * 23) % span))
        t = [x, H + h, key]
        if not overlaps_any_world_visual(visual_rect(t)) and not in_player_start_lane(t[0], t[1], w, h):
            store.append(t)
            runtime_spawn_count += 1
            return
        tries += 1

def spawn_objects():
    mult = DIFF_MULTS[difficulty]
    tree_gap = int(18 * mult)
    hazard_gap = int(53 * mult)
    slow_gap = int(41 * mult)
    jump_gap = int(89 * mult)
    if tree_gap < 1:
        tree_gap = 1
    if hazard_gap < 1:
        hazard_gap = 1
    if slow_gap < 1:
        slow_gap = 1
    if jump_gap < 1:
        jump_gap = 1
    if frame % tree_gap == 0:
        add_tree()
    if frame % hazard_gap == 0:
        add_fixed_object(hazards, choose_fixed_key(FIXED_HAZARDS, len(hazards) * 3), 31)
    if frame % slow_gap == 0:
        add_fixed_object(slows, "rough", 19)
    if frame % jump_gap == 0:
        add_fixed_object(jumps, "jump", 37)

def move_store(store, dx, dy, move_speed):
    i = len(store) - 1
    while i >= 0:
        key = store[i][2]
        w, h = asset_size(key)
        store[i][0] += dx * move_speed
        store[i][1] += dy * move_speed
        if store[i][1] < -h or store[i][0] < -w or store[i][0] > W + w:
            store.pop(i)
        i -= 1

def jump_scale_pct():
    if jump_timer <= 0:
        return 100
    seq = [102, 102, 103, 103, 104, 104, 106, 106, 108, 108, 110, 110, 112, 112, 114, 114, 116, 116, 118, 118, 120, 120, 122, 122, 124, 124, 126, 126, 128, 128, 130, 130, 132, 132, 134, 134, 136, 136, 138, 138, 138, 138, 138, 138, 136, 136, 134, 134, 132, 132, 130, 130, 128, 128, 126, 126, 124, 124, 122, 122, 120, 120]
    idx = 62 - jump_timer
    if idx < 0:
        idx = 0
    if idx >= len(seq):
        idx = len(seq) - 1
    return seq[idx]

def jump_arc_px():
    if jump_timer <= 0:
        return 0
    seq = [0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 4, 4, 5, 5, 6, 6, 6, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 7, 7, 7, 6, 6, 6, 5, 5, 4, 4, 3, 3, 3, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0]
    idx = 62 - jump_timer
    if idx < 0:
        idx = 0
    if idx >= len(seq):
        idx = len(seq) - 1
    return seq[idx]

def overlap(a, b):
    ax, ay, aw, ah = a
    bx, by, bw, bh = b
    return ax < bx + bw and ax + aw > bx and ay < by + bh and ay + ah > by

def crash_push_for_rect(r):
    sx, sy, sw, sh = skier_rect()
    ox, oy, ow, oh = r
    push = (oy + oh) - sy + 6
    if push < 18:
        push = 18
    return push

def any_button_pressed():
    if btnp(0) or btnp(1) or btnp(2) or btnp(3):
        return True
    if btnp(4) or btnp(5) or btnp(6) or btnp(7):
        return True
    return False

def avalanche_label():
    if avalanche_start < 0:
        return "OFF"
    return str(avalanche_start)

def in_player_start_lane(x, y, w, h):
    if start_safe_timer <= 0:
        return False
    skier_x = int(W / 2 - 8)
    lane_pad = 18
    lane_x0 = skier_x - lane_pad
    lane_x1 = skier_x + 16 + lane_pad
    # "in front" means upper-middle playfield where player will travel immediately after start
    safe_y0 = int(H / 2 - 26)
    safe_y1 = H + 24
    if x + w <= lane_x0 or x >= lane_x1:
        return False
    if y + h <= safe_y0 or y >= safe_y1:
        return False
    return True

def rects_overlap(x1, y1, w1, h1, x2, y2, w2, h2, pad):
    return not (x1 + w1 + pad <= x2 or x2 + w2 + pad <= x1 or y1 + h1 + pad <= y2 or y2 + h2 + pad <= y1)

def can_place_object(x, y, w, h, existing, pad):
    i = 0
    while i < len(existing):
        e = existing[i]
        ex = 0
        ey = 0
        ew = 0
        eh = 0
        if type(e) == dict:
            ex = e["x"]
            ey = e["y"]
            ew = e["w"]
            eh = e["h"]
        else:
            ex = e[0]
            ey = e[1]
            key = e[2]
            ew, eh = asset_size(key)
        if rects_overlap(x, y, w, h, ex, ey, ew, eh, pad):
            return False
        i += 1
    return True

def reset_game():
    global state, dir, speed, score, trees, hazards, slows, jumps, snow, jump_timer, crash_timer, avalanche_active, avalanche_dist, avalanche_timer, avalanche_game_over, crash_resume_push, crash_input_lock, crash_recovering, paused, runtime_spawn_count, start_safe_timer
    state = "play"
    dir = 2
    speed = 1.88
    score = 0.0
    jump_timer = 0
    crash_timer = 0
    avalanche_active = False
    avalanche_dist = 0.0
    avalanche_timer = 0
    avalanche_game_over = False
    crash_resume_push = 0
    crash_input_lock = 0
    crash_recovering = False
    paused = False
    runtime_spawn_count = 0
    start_safe_timer = 300
    snow = []
    trees = []
    hazards = []
    slows = []
    jumps = []

    all_objs = []

    tree_counts = 18
    if difficulty == 0:
        tree_counts = 9
    elif difficulty == 2:
        tree_counts = 22

    i = 0
    attempts = 0
    while i < tree_counts and attempts < tree_counts * 50:
        attempts += 1
        size_name = TREE_KEYS[int(rnd(len(TREE_KEYS)))]
        w, h = asset_size(size_name)
        x = int(rnd(W - w - 8)) + 4
        y = int(rnd(900))
        if can_place_object(x, y, w, h, all_objs, 6) and not in_player_start_lane(x, y, w, h):
            t = [x, y, size_name]
            trees.append(t)
            all_objs.append(t)
            i += 1

    hazard_counts = 14
    if difficulty == 0:
        hazard_counts = 7
    elif difficulty == 2:
        hazard_counts = 17

    i = 0
    attempts = 0
    while i < hazard_counts and attempts < hazard_counts * 50:
        attempts += 1
        name = FIXED_HAZARDS[int(rnd(len(FIXED_HAZARDS)))]
        w, h = asset_size(name)
        x = int(rnd(W - w - 8)) + 4
        y = int(rnd(900))
        if can_place_object(x, y, w, h, all_objs, 6) and not in_player_start_lane(x, y, w, h):
            t = [x, y, name]
            hazards.append(t)
            all_objs.append(t)
            i += 1

    slow_counts = 8
    if difficulty == 0:
        slow_counts = 4
    elif difficulty == 2:
        slow_counts = 10

    i = 0
    attempts = 0
    while i < slow_counts and attempts < slow_counts * 50:
        attempts += 1
        name = "rough"
        w, h = asset_size(name)
        x = int(rnd(W - w - 8)) + 4
        y = int(rnd(900))
        if can_place_object(x, y, w, h, all_objs, 4) and not in_player_start_lane(x, y, w, h):
            t = [x, y, name]
            slows.append(t)
            all_objs.append(t)
            i += 1

    jump_counts = 5
    if difficulty == 0:
        jump_counts = 3
    elif difficulty == 2:
        jump_counts = 6

    i = 0
    attempts = 0
    while i < jump_counts and attempts < jump_counts * 50:
        attempts += 1
        name = "jump"
        w, h = asset_size(name)
        x = int(rnd(W - w - 8)) + 4
        y = int(rnd(900))
        if can_place_object(x, y, w, h, all_objs, 4) and not in_player_start_lane(x, y, w, h):
            t = [x, y, name]
            jumps.append(t)
            all_objs.append(t)
            i += 1

def crash(resume_push=18):
    global state, dir, speed, best, crash_timer, avalanche_game_over, crash_resume_push, crash_input_lock, crash_recovering
    dir = 5
    speed = 0.0
    state = "crash"
    crash_timer = 0
    avalanche_game_over = False
    if avalanche_start >= 0:
        crash_recovering = True
        crash_resume_push = resume_push
        if crash_resume_push < 18:
            crash_resume_push = 18
        crash_input_lock = 60
        return
    crash_recovering = False
    crash_resume_push = 18
    crash_input_lock = 0
    if score > best:
        best = score

def start_avalanche_hit():
    global state, speed, avalanche_timer, best, avalanche_game_over
    state = "avalanche"
    speed = 0.0
    avalanche_timer = 0
    avalanche_game_over = True
    if score > best:
        best = score

def resume_after_crash():
    global state, dir, speed, jump_timer, crash_timer, avalanche_dist, avalanche_game_over, crash_resume_push, crash_input_lock, crash_recovering, paused
    i = 0
    while i < len(trees):
        trees[i][1] -= crash_resume_push
        i += 1
    i = 0
    while i < len(hazards):
        hazards[i][1] -= crash_resume_push
        i += 1
    i = 0
    while i < len(slows):
        slows[i][1] -= crash_resume_push
        i += 1
    i = 0
    while i < len(jumps):
        jumps[i][1] -= crash_resume_push
        i += 1

    state = "play"
    dir = 2
    speed = 1.88
    jump_timer = 0
    crash_timer = 0
    crash_input_lock = 0
    crash_recovering = False
    paused = False
    avalanche_game_over = False
    if avalanche_start >= 0 and avalanche_active and avalanche_dist < 18:
        avalanche_dist = 18

def choose_tree_key():
    idx = int((frame // 15 + len(trees) * 7) % len(TREE_KEYS))
    return TREE_KEYS[idx]

def add_tree():
    global runtime_spawn_count
    if speed < 2.1:
        return
    key = choose_tree_key()
    tw, th = asset_size(key)
    next_count = runtime_spawn_count + 1
    if next_count % 20 == 0 or next_count % FORCED_STRAIGHT_HAZARD_EVERY == 0:
        add_forced_hazard(next_count)
        return
    span = W - tw - 8
    if span < 8:
        span = 8
    tries = 0
    while tries < 20:
        x = int(4 + ((frame * 47 + (len(trees) + tries) * 29) % span))
        t = [x, H + th, key]
        tr = visual_rect(t)
        if not overlaps_any_world_visual(tr) and not in_player_start_lane(t[0], t[1], tw, th):
            trees.append(t)
            runtime_spawn_count += 1
            return
        tries += 1

def update_play():
    global dir, speed, score, jump_timer, avalanche_active, avalanche_dist, start_safe_timer

    slowing = btn(0)
    boosting = btn(1)
    airborne = jump_timer > 0

    if not airborne:
        if btnp(2, 8, 4):
            dir -= 1
            if dir < 0:
                dir = 0
        if btnp(3, 8, 4):
            dir += 1
            if dir > 4:
                dir = 4

    if dir == 0 or dir == 4:
        if speed > 1.35:
            speed -= 0.03
    elif dir == 1 or dir == 3:
        if speed < max_speed - 0.45:
            speed += 0.015
    else:
        if speed < max_speed:
            speed += 0.024

    spawn_objects()

    dx = 0.0
    dy = -1.0
    if dir == 1:
        dx = 0.55
        dy = -0.84
    elif dir == 3:
        dx = -0.55
        dy = -0.84
    elif dir == 0:
        dx = 0.82
        dy = -0.30
    elif dir == 4:
        dx = -0.82
        dy = -0.30

    move_speed = speed * 0.5
    if boosting:
        move_speed = speed
    elif slowing:
        move_speed = speed * 0.25

    if not airborne:
        srect = skier_rect()
        i = 0
        while i < len(slows):
            if overlap(srect, fixed_rect(slows[i])):
                move_speed *= 0.5
                break
            i += 1

        i = 0
        while i < len(jumps):
            if overlap(srect, fixed_rect(jumps[i])):
                jump_timer = 62
                airborne = True
                break
            i += 1

    score += move_speed * 0.12

    if avalanche_start >= 0 and not avalanche_active and score >= avalanche_start:
        avalanche_active = True
        avalanche_dist = 50.0

    if avalanche_active:
        avalanche_dist += move_speed - 2.068
        if avalanche_dist < 0:
            avalanche_dist = 0
            start_avalanche_hit()
            return

    i = len(trees) - 1
    while i >= 0:
        key = trees[i][2]
        tw, th = asset_size(key)
        trees[i][0] += dx * move_speed
        trees[i][1] += dy * move_speed
        if trees[i][1] < -th or trees[i][0] < -tw or trees[i][0] > W + tw:
            trees.pop(i)
        i -= 1

    move_store(hazards, dx, dy, move_speed)
    move_store(slows, dx, dy, move_speed)
    move_store(jumps, dx, dy, move_speed)

    if not airborne:
        srect = skier_rect()
        i = 0
        while i < len(trees):
            if overlap(srect, tree_rect(trees[i])):
                crash(crash_push_for_rect(tree_rect(trees[i])))
                break
            i += 1
        if state == "play":
            i = 0
            while i < len(hazards):
                if overlap(srect, fixed_rect(hazards[i])):
                    crash(crash_push_for_rect(fixed_rect(hazards[i])))
                    break
                i += 1

    i = 0
    while i < len(snow):
        p = snow[i]
        p[0] += dx * move_speed * (0.25 + p[2] * 0.08)
        p[1] += dy * move_speed * (0.55 + p[2] * 0.12)
        if p[1] < 0:
            p[1] = H - 1
            p[0] = (frame * (13 + i * 7)) % W
        if p[0] < 0:
            p[0] = W - 1
        elif p[0] >= W:
            p[0] = 0
        i += 1

    if jump_timer > 0:
        jump_timer -= 1

def draw_hud():
    rect(4, 4, 232, 12, 15)
    rectb(4, 4, 232, 12, 13)

    dist_text = "Dist " + str(int(score))
    print(dist_text, 8, 7, BLACK, False, 1, True)

    print_centered("Downhill Escape", int(W / 2), 7, BLUE, 1)

    if avalanche_active:
        aval_text = "Avalanche " + str(int(avalanche_dist))
        aval_x = W - 8 - len(aval_text) * 6
        if aval_x < 136:
            aval_x = 136
        print(aval_text, aval_x, 7, RED, False, 1, True)

def draw_visible_avalanche():
    if not avalanche_active:
        return
    rw, rh = asset_size("rough")
    # avalanche starts off-screen above the playfield and moves downward as distance shrinks
    y = int(-rh * 2 + ((50 - avalanche_dist) * (H // 2 + rh * 3) / 50))
    if y < -rh * 2:
        return
    if y > H:
        y = H

    # cover everything above the avalanche edge with white snow so nothing shows above it
    cover_h = y + rh
    if cover_h > 0:
        if cover_h > H:
            cover_h = H
        rect(0, 0, W, cover_h, WHITE)

    # small horizontal sway makes the avalanche read more like moving snow
    sway = 0
    if (frame // 6) % 2 == 0:
        sway = -2
    else:
        sway = 2

    x = -2 + sway
    while x < W + rw:
        draw_asset("rough", x, y, False)
        x += rw
    x = int(-rw / 2) - sway
    while x < W + rw:
        draw_asset("rough", x, y + rh - 1, False)
        x += rw

    # sprinkle a few shifting snow streaks near the leading edge
    x = sway
    while x < W:
        line(x, y + rh - 1, x + 2, y + rh + 1, WHITE)
        x += 11

def draw_play():
    set_outer_border_gray()
    cls(WHITE)
    rectb(0, 0, W, H, 13)
    i = 0
    while i < len(snow):
        p = snow[i]
        pix(int(p[0]), int(p[1]), 15)
        i += 1

    ordered = []
    i = 0
    while i < len(trees):
        ordered.append([trees[i][0], trees[i][1], trees[i][2], 0])
        i += 1
    i = 0
    while i < len(hazards):
        ordered.append([hazards[i][0], hazards[i][1], hazards[i][2], 1])
        i += 1
    i = 0
    while i < len(slows):
        ordered.append([slows[i][0], slows[i][1], slows[i][2], 2])
        i += 1
    i = 0
    while i < len(jumps):
        ordered.append([jumps[i][0], jumps[i][1], jumps[i][2], 3])
        i += 1

    i = 0
    while i < len(ordered):
        j = i + 1
        while j < len(ordered):
            if ordered[j][1] < ordered[i][1]:
                tmp = ordered[i]
                ordered[i] = ordered[j]
                ordered[j] = tmp
            j += 1
        i += 1

    i = 0
    while i < len(ordered):
        draw_asset(ordered[i][2], int(ordered[i][0]), int(ordered[i][1]))
        i += 1

    draw_visible_avalanche()

    name, flip = current_asset()
    w, h = asset_size(name)
    scale_pct = jump_scale_pct()
    arc = jump_arc_px()
    dw = (w * scale_pct) // 100
    dh = (h * scale_pct) // 100
    px = int(W / 2 - dw / 2)
    py = int(H / 2 - dh / 2 - arc)
    if scale_pct <= 100 and arc <= 0:
        draw_asset(name, int(W / 2 - w / 2), int(H / 2 - h / 2), flip)
    else:
        draw_asset_scaled(name, px, py, scale_pct, flip)
    draw_hud()

def draw_avalanche_cover(cover_h):
    y0 = H - cover_h
    if y0 < 0:
        y0 = 0
    rect(0, y0, W, cover_h, 12)
    i = 0
    while i < W:
        line(i, y0 + (i % 5), min(W - 1, i + 3), y0 + (i % 5), 15)
        i += 7

def draw_avalanche_state():
    set_outer_border_gray()
    draw_play()
    t = avalanche_timer
    cover_h = 0
    if t < 44:
        cover_h = (t * (H + 20)) // 44
    else:
        cover_h = H + 20

    name, flip = current_asset()
    w, h = asset_size(name)
    base_x = int(W / 2 - w / 2)
    base_y = int(H / 2 - h / 2)

    if t < 16:
        draw_asset_rot180(name, base_x, base_y - 2, flip)
    elif t < 30:
        line(int(W / 2 - 5), int(H / 2), int(W / 2 - 2), int(H / 2 - 8), 6)
        line(int(W / 2 + 2), int(H / 2), int(W / 2 + 5), int(H / 2 - 8), 6)
        line(int(W / 2 - 5), int(H / 2 + 1), int(W / 2 - 2), int(H / 2 - 7), 3)
        line(int(W / 2 + 2), int(H / 2 + 1), int(W / 2 + 5), int(H / 2 - 7), 3)

    draw_avalanche_cover(cover_h)

def set_outer_border_gray():
    poke(0x03FF8, 13)

def print_centered(text, cx, y, color, scale=1):
    tw = print(text, -200, -200, color, False, scale, True)
    print(text, int(cx - tw / 2), y, color, False, scale, True)

def draw_title():
    set_outer_border_gray()
    cls(WHITE)
    rectb(0, 0, W, H, 13)

    bg_scale = 109
    bg_w = (96 * bg_scale + 99) // 100
    bg_h = (54 * bg_scale + 99) // 100
    bg_x = int(W / 2 - bg_w / 2)
    bg_y = 47

    rect(bg_x - 2, bg_y - 1, bg_w + 4, bg_h + 1, 15)
    draw_asset_scaled("title_bg", bg_x, bg_y, bg_scale, False)
    rectb(bg_x - 2, bg_y - 1, bg_w + 4, bg_h + 1, 13)

    rect(4, 4, 232, 40, 15)
    rectb(4, 4, 232, 40, 13)
    print_centered("Downhill Escape", int(W / 2), 7, BLUE, 2)
    print("Difficulty", 10, 20, BLACK, False, 1, True)
    print("< " + DIFF_NAMES[difficulty] + " >", 112, 20, 11, False, 1, True)
    print("L/R Change", 160, 20, 9, False, 1, True)
    print("Avalanche Starts At", 10, 28, BLACK, False, 1, True)
    print("< " + avalanche_label() + " >", 112, 28, 11, False, 1, True)
    print("U +20  D -20", 160, 28, 9, False, 1, True)
    print_centered("Best Distance " + str(int(best)), int(W / 2), 35, 11, 1)

    rect(4, 46, 54, 60, 15)
    rectb(4, 46, 54, 60, 13)
    draw_asset("skier_side", 8, 49, True)
    print("Skier", 28, 52, BLACK, False, 1, False)
    draw_asset("tree_1x", 9, 68, False)
    print("Tree", 28, 74, BLACK, False, 1, False)
    draw_asset("jump", 8, 93, False)
    print("Jump", 28, 91, BLACK, False, 1, False)

    rect(182, 46, 54, 60, 15)
    rectb(182, 46, 54, 60, 13)
    draw_asset("rock", 187, 51, False)
    print("Rock", 204, 52, BLACK, False, 1, False)
    draw_asset("lift", 188, 65, False)
    print("Lift", 204, 71, BLACK, False, 1, False)
    draw_asset("rough", 184, 92, False)
    print("Rough", 204, 91, BLACK, False, 1, False)

    rect(18, 108, 204, 20, 15)
    rectb(18, 108, 204, 20, 13)
    print_centered("Left/Right Turn", 52, 112, BLACK, 1)
    print_centered("Rough = Half Speed", 120, 112, BLACK, 1)
    print_centered("X/Y Pause", 188, 112, BLACK, 1)
    print_centered("Hold Down = Fast", 52, 119, BLACK, 1)
    print_centered("Hold Up = Slow", 120, 119, BLACK, 1)
    print_centered("A/B Start", 188, 119, BLACK, 1)

    print("by mrfixit2001", 162, 129, BLACK, False, 1, False)

def update_avalanche_state():
    global avalanche_timer, state, dir
    avalanche_timer += 1
    dir = 5
    if avalanche_timer >= 44:
        state = "crash"

def update_crash_pause():
    global avalanche_dist, state, avalanche_game_over, crash_input_lock, crash_recovering, best
    if crash_input_lock > 0:
        crash_input_lock -= 1
    if avalanche_start >= 0 and avalanche_active and crash_recovering and not avalanche_game_over:
        avalanche_dist -= 2.068
        if avalanche_dist <= 0:
            avalanche_dist = 0
            avalanche_game_over = True
            crash_recovering = False
            if score > best:
                best = score

def draw_pause_overlay():
    rect(48, 38, 144, 46, 15)
    rectb(48, 38, 144, 46, 13)
    print("Paused", 94, 44, 12, False, 2, True)
    print("X/Y = Resume", 72, 62, BLACK, False, 1, True)
    print("A = Menu", 94, 72, BLACK, False, 1, True)

def draw_crash():
    set_outer_border_gray()
    draw_play()
    rect(38, 44, 164, 42, 15)
    rectb(38, 44, 164, 42, 13)
    print("Crash!", 94, 52, RED, False, 2, True)
    print("Press A/B For Title", 55, 68, BLACK, False, 1, True)

def TIC():
    global inited, state, frame, difficulty, crash_timer, avalanche_start, paused
    if not inited:
        reset_game()
        state = "title"
        inited = True
    frame += 1
    if state == "title":
        if btnp(2, 8, 4):
            difficulty -= 1
            if difficulty < 0:
                difficulty = 0
        if btnp(3, 8, 4):
            difficulty += 1
            if difficulty > 2:
                difficulty = 2
        if btnp(0, 8, 4):
            avalanche_start += 20
            if avalanche_start > 1000:
                avalanche_start = 1000
        if btnp(1, 8, 4):
            avalanche_start -= 20
            if avalanche_start < -20:
                avalanche_start = -20
        if btnp(4) or btnp(5):
            reset_game()
        draw_title()
    elif state == "play":
        if btnp(6) or btnp(7):
            paused = not paused
        if paused:
            draw_play()
            draw_pause_overlay()
            if btnp(4):
                paused = False
                state = "title"
        else:
            update_play()
            draw_play()
    elif state == "avalanche":
        update_avalanche_state()
        draw_avalanche_state()
    else:
        if crash_recovering:
            update_crash_pause()
            if avalanche_game_over:
                draw_crash()
                if btnp(4) or btnp(5):
                    state = "title"
            else:
                draw_play()
                if crash_input_lock <= 0:
                    if any_button_pressed():
                        resume_after_crash()
        else:
            draw_crash()
            if btnp(4) or btnp(5):
                state = "title"
