=p€Р?џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ№№№/""""""""""""""ђџџџџџџЬЬЬЬџџџЬЬЬџџџџЬЬџџџЬЬЬџџџџџџџџџџџџџџџџџџџџџџџџџџџџ№№№/""""""""""""""ђџџџџџџЬЬЬЬђџџЬЬЬђџџџЬЬђџџЬЬЬђџџџџџџџџџџџџџџџџџџџџџџџџџџџ№№№/""""""""""""""ђџџџџџџ/""ЬЬџЬЬ"ЬЬџџЬЬЬђџЬЬ""Ьџџџџџџџџџџџџџџџџџџџџџџџџџџџ№№№/""""""""""""""ђџџџџџџџџџЬЬђЬЬђЬЬђџЬЬЬђџЬЬђџЬђџџџџџџџџџџџџџџџџџџџџџџџџџџ№№№/""""""""""""""ђџџџџџџџЬЬЬ"ђЬЬЬ/ЬђЬЬ"Ьђџ/ЬЬЬ/ђџџџџџџџџџџџџџџџџџџџџџџџџџџ№№№/""""""""""""""ђџџџџџџџЬЬЬђџЬЬЬђЬђЬЬђЬђџџЬЬЬђџџџџџџџџџџџџџџџџџџџџџџџџџџџ№№№/""""""""""""""ђџџџџџџЬЬ""ђџЬЬ"ђЬђЬЬЬЬЬџЬЬ""Ьџџџџџџџџџџџџџџџџџџџџџџџџџџџ№№№/""""""""""""""ђџџџџџџЬЬђџџџЬЬђџЬђЬЬЬЬЬђЬЬђџЬђџџџџџџџџџџџџџџџџџџџџџџџџџџ№№№/""""""""""""""ђџџџџџџЬЬЬЬЬџ/ЬЬЬ/ђ/""Ь"ђ/ЬЬЬ/ђџџџџџџџџџџџџџџџџџџџџџџџџџџ№№№/""""""""""""""ђџџџџџџЬЬЬЬЬђџЬЬЬђџџџџЬђџџЬЬЬђџџџџџџџџџџџџџџџџџџџџџџџџџџџ№№№/""""""""""""""ђџџџџџџ/""""ђџ/""ђџџџџ/ђџџ/""ђџџџџџџџџџџџџџџџџџџџџџџџџџџџ№№№/""""""""""""""ђџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ№№№/""""" """"""ђџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ№№№/"""""""""""""ђџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ№№№/"""""" """"""ђџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ№№№/""""" """""""ђџџџџџџDџєODєODєDџєџџџODєODџODџDDџDDєџџџџџџџџџџџџџџџџџџџџ№№№/"""""""""""ђџџџџџџDџєџDџDџџDџєџџџDєџDџєDџєDџєDџџџџџџџџџџџџџџџџџџџџџџ№№№/""""""""""""""ђџџџџџџDDєџDџDOєDDєџџџODџDџџDџєDџєDDџџџџџџџџџџџџџџџџџџџџџ№№№/""""""""""""""ђџџџџџџDџєџDџDџєDџєџџџџDєDџєDџєDDџDџџџџџџџџџџџџџџџџџџџџџџ№№№/""""""""""""""ђџџџџџџDџєODєODєDџєџџџDDџODџODџDџєDDєџџџџџџџџџџџџџџџџџџџџ№№№/""""""""""""""ђџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ№№№/""""""""""""""ђџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ№№№/""""""""""""""ђџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ№№№/""""""""""""""ђџџџџџџџ3џ?3џ33ѓ?3џ?3џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ№№№/""""""""""""""ђџџџџџџ?3џ3џѓџ?ѓ3џѓ3џѓџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ№№№/""""""""""""""ђџџџџџџџ3џ?3ѓџ3џ?3џ?3џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ№№№/""""""""""""""ђџџџџџџџ3џџџѓ?ѓџ3џѓ3џѓџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ№№№/""""""""""""""ђџџџџџџ?3ѓ?3џ3џџ?3џ?3џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ№№№/""""""""""""""ђџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ№№№/""""""""""""""ђџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ_ѕѕ_UџUџѕUUџџџџ_Uѕ_Uџ_UџUUџUUѕџџџџџџџџџџџџџџџџџџџџ№№/""""""""""""""ђ?33333333333333ѓџџџџџџ_ѕѕUџѕUџѕUџѕџџџUѕџUџѕUџѕUџѕUџџџџџџџџџџџџџџџџџџџџџџ№№/""""""""""""""ђ?33333333333333ѓџџџџџџ_UѕUџѕUџѕUџѕџџџ_UџUџџUџѕUџѕUUџџџџџџџџџџџџџџџџџџџџџ№№/""""""""""""""ђ?33333333333333ѓџџџџџџџUџUџѕUџѕUUџџџџџUѕUџѕUџѕUUџUџџџџџџџџџџџџџџџџџџџџџџ№№/""""""""""""""ђ?33333333333333ѓџџџџџџџUџ_Uџ_UџUџѕџџџUUџ_Uџ_UџUџѕUUѕџџџџџџџџџџџџџџџџџџџџ№№/""""""""""""""ђ?33333333333333ѓџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ№№/""""""""""""""ђ?33333333333333ѓџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ№№/""""""""""""""ђ?33333333333333ѓџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ№№/""""""""""""""ђ?33333333333333ѓџџџџџџџЬџџЬџџЬџЯЬџЬЬџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ№№/""""""""""""""ђ?33333333333333ѓџџџџџџЯЬџЯЬџЯЬџЬџќџЯќџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ№№/""""""""""""""ђ?33333333333333ѓџџџџџџџЬџЬЯџџЬџЯЬќЯЬџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ№№/""""""""""""""ђ?33333333333333ѓџџџџџџџЬџЬЬќџЬџџџќЬџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ№№/""""""""""""""ђ?33333333333333ѓџџџџџџЯЬќџЯџЯЬќЯЬџЬЬќџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ№№/""""" """"""ђ?3333330333333ѓџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ№№/"""""""""""""ђ?3333330333333ѓџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ№№/"""""" """"""ђ?3333300333333ѓџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ№№/""""" """""""ђ?33333333333ѓџџџџџџюџўяюўяюўюџўџџџяюўяюўюџџююўџџџџџџџџџџџџџџџџџџџџџџџ№№/"""""""""""ђ?33333330333333ѓџџџџџџюџўџюџюџџюџўџџџџюџџюџюџџюџџџџџџџџџџџџџџџџџџџџџџџџџ№№/""""""""""""""ђ?33333333333333ѓџџџџџџююўџюџюяўююўџџџџюџџюџюџџююџџџџџџџџџџџџџџџџџџџџџџџџ№№/""""""""""""""ђ?33333333333333ѓџџџџџџюџўџюџюџўюџўџџџџюџџюџюџџюџџџџџџџџџџџџџџџџџџџџџџџџџ№№/""""""""""""""ђ?33333333333333ѓџџџџџџюџўяюўяюўюџўџџџџюџяюўююўююўџџџџџџџџџџџџџџџџџџџџџџџ№№/""""""""""""""ђ?33333333333333ѓџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ№№/""""""""""""""ђ?33333333333333ѓџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ№№/""""""""""""""ђ?33333333333333ѓџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ№№/""""""""""""""ђ?33333333333333ѓџџџџџџџЛџПЛџЛЛџџЛџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ№№/""""""""""""""ђ?33333333333333ѓџџџџџџПЛџЛПћџПћПЛџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ№№/""""""""""""""ђ?33333333333333ѓџџџџџџџЛџЛћћПЛџЛПџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ№№/""""""""""""""ђ?33333333333333ѓџџџџџџџЛџЛџћЛџџЛЛћџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ№№/""""""""""""""ђ?33333333333333ѓџџџџџџПЛћПЛџЛЛћџПџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ№№/""""""""""""""ђ?33333333333333ѓџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ№№/""""""""""""""ђ?33333333333333ѓџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџDџєODєODєDџєџџџODєDDџDDєDDєDDџџџџџџџџџџџџџџџџџџџџџ№/""""""""""""""ђODDDDDDDDDDDDDDє_UUUUUUUUUUUUUUѕџџџџџџDџєџDџDџџDџєџџџDєџDџєDџџDџџDџєџџџџџџџџџџџџџџџџџџџџ№/""""""""""""""ђODDDDDDDDDDDDDDє_UUUUUUUUUUUUUUѕџџџџџџDDєџDџDOєDDєџџџODџDџєDDџDDџDџєџџџџџџџџџџџџџџџџџџџџ№/""""""""""""""ђODDDDDDDDDDDDDDє_UUUUUUUUUUUUUUѕџџџџџџDџєџDџDџєDџєџџџџDєDDџDџџDџџDџєџџџџџџџџџџџџџџџџџџџџ№/""""""""""""""ђODDDDDDDDDDDDDDє_UUUUUUUUUUUUUUѕџџџџџџDџєODєODєDџєџџџDDџDџџDDєDDєDDџџџџџџџџџџџџџџџџџџџџџ№/""""""""""""""ђODDDDDDDDDDDDDDє_UUUUUUUUUUUUUUѕџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ№/""""""""""""""ђODDDDDDDDDDDDDDє_UUUUUUUUUUUUUUѕџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ№/""""""""""""""ђODDDDDDDDDDDDDDє_UUUUUUUUUUUUUUѕџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ№/""""""""""""""ђODDDDDDDDDDDDDDє_UUUUUUUUUUUUUUѕџџџџџџџ3џ?3џ?3џџџџ?3џ33ѓџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ№/""""""""""""""ђODDDDDDDDDDDDDDє_UUUUUUUUUUUUUUѕџџџџџџ?3џ3?ѓ3џѓџџџ3?ѓ3џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ№/""""""""""""""ђODDDDDDDDDDDDDDє_UUUUUUUUUUUUUUѕџџџџџџ3?џ3ѓѓ?3ѓџџџ3ѓѓ33џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ№/""""""""""""""ђODDDDDDDDDDDDDDє_UUUUUUUUUUUUUUѕџџџџџџ33ѓ3џѓџџѓ?ѓџ3џѓџ?ѓџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ№/""""""""""""""ђODDDDDDDDDDDDDDє_UUUUUUUUUUUUUUѕџџџџџџџ?џ?3џ?3џ?ѓџ?3џ33џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ№/""""" """"""ђODDDDDD@DDDDDDє_UUUUUUUUUUUѕџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ№/"""""""""""""ђODDDDD@DDDDDDє_UUUUUUUUUUUѕџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ№/"""""" """"""ђODDDDDD@DDDDDDє_UUUUUUUUUUUѕџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ№/""""" """""""ђODDDDD@DDDDDDє_UUUUUUUPUUUUѕџџџџџџ_ѕѕ_UџUџѕUUџџџџ_UѕUUџUUѕUUѕUUџџџџџџџџџџџџџџџџџџџџџ№/"""""""""""ђODDDDDD@DDDDDDє_UUUUPUUUUUѕџџџџџџ_ѕѕUџѕUџѕUџѕџџџUѕџUџѕUџџUџџUџѕџџџџџџџџџџџџџџџџџџџџ№/""""""""""""""ђODDDDDDDDDDDDDDє_UUUUUUUUUUUUUUѕџџџџџџ_UѕUџѕUџѕUџѕџџџ_UџUџѕUUџUUџUџѕџџџџџџџџџџџџџџџџџџџџ№/""""""""""""""ђODDDDDDDDDDDDDDє_UUUUUUUUUUUUUUѕџџџџџџџUџUџѕUџѕUUџџџџџUѕUUџUџџUџџUџѕџџџџџџџџџџџџџџџџџџџџ№/""""""""""""""ђODDDDDDDDDDDDDDє_UUUUUUUUUUUUUUѕџџџџџџџUџ_Uџ_UџUџѕџџџUUџUџџUUѕUUѕUUџџџџџџџџџџџџџџџџџџџџџ№/""""""""""""""ђODDDDDDDDDDDDDDє_UUUUUUUUUUUUUUѕџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ№/""""""""""""""ђODDDDDDDDDDDDDDє_UUUUUUUUUUUUUUѕџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ№/""""""""""""""ђODDDDDDDDDDDDDDє_UUUUUUUUUUUUUUѕџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ№/""""""""""""""ђODDDDDDDDDDDDDDє_UUUUUUUUUUUUUUѕџџџџџџЬЬќџЬџЬЬќџџџЯЬџџЬџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ№/""""""""""""""ђODDDDDDDDDDDDDDє_UUUUUUUUUUUUUUѕџџџџџџЬџџЯЬџџЯќџџџЬџќЯЬџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ№/""""""""""""""ђODDDDDDDDDDDDDDє_UUUUUUUUUUUUUUѕџџџџџџЬЬџЬЯџџЬџџџџЯЬќџЬџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ№/""""""""""""""ђODDDDDDDDDDDDDDє_UUUUUUUUUUUUUUѕџџџџџџџЯќЬЬќќЯќЯќџџџќџЬџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ№/""""""""""""""ђODDDDDDDDDDDDDDє_UUUUUUUUUUUUUUѕџџџџџџЬЬџџЯџЯЬџЯќџЯЬџЯЬќџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ№/""""""""""""""ђODDDDDDDDDDDDDDє_UUUUUUUUUUUUUUѕџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ№/""""""""""""""ђODDDDDDDDDDDDDDє_UUUUUUUUUUUUUUѕџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпн§пнџнп§нн§џџџпн§пн§нп§нн§ннџџџџџџџџџџџџџџџџџџџџџПЛЛЛЛЛЛЛЛЛЛЛЛЛЛћЏЊЊЊЊЊЊЊЊЊЊЊЊЊЊњˆˆˆˆˆˆˆˆˆˆˆˆˆˆјwwwwwwwwwwwwwwїџџџџџџнџџнџ§нн§нџџџџџџнџџнџнн§нџџнџ§џџџџџџџџџџџџџџџџџџџџПЛЛЛЛЛЛЛЛЛЛЛЛЛЛћЏЊЊЊЊЊЊЊЊЊЊЊЊЊЊњˆˆˆˆˆˆˆˆˆˆˆˆˆˆјwwwwwwwwwwwwwwїџџџџџџнп§нџ§нн§ннџџџџџнџџнџнн§ннџнџ§џџџџџџџџџџџџџџџџџџџџПЛЛЛЛЛЛЛЛЛЛЛЛЛЛћЏЊЊЊЊЊЊЊЊЊЊЊЊЊЊњˆˆˆˆˆˆˆˆˆˆˆˆˆˆјwwwwwwwwwwwwwwїџџџџџџнџ§нн§§§§нџџџџџџнџџнџ§§§нџџннџџџџџџџџџџџџџџџџџџџџџПЛЛЛЛЛЛЛЛЛЛЛЛЛЛћЏЊЊЊЊЊЊЊЊЊЊЊЊЊЊњˆˆˆˆˆˆˆˆˆˆˆˆˆˆјwwwwwwwwwwwwwwїџџџџџџпн§нџ§§џ§нн§џџџџнџпн§§џ§нн§нџ§џџџџџџџџџџџџџџџџџџџџПЛЛЛЛЛЛЛЛЛЛЛЛЛЛћЏЊЊЊЊЊЊЊЊЊЊЊЊЊЊњˆˆˆˆˆˆˆˆˆˆˆˆˆˆјwwwwwwwwwwwwwwїџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџПЛЛЛЛЛЛЛЛЛЛЛЛЛЛћЏЊЊЊЊЊЊЊЊЊЊЊЊЊЊњˆˆˆˆˆˆˆˆˆˆˆˆˆˆјwwwwwwwwwwwwwwїџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџПЛЛЛЛЛЛЛЛЛЛЛЛЛЛћЏЊЊЊЊЊЊЊЊЊЊЊЊЊЊњˆˆˆˆˆˆˆˆˆˆˆˆˆˆјwwwwwwwwwwwwwwїџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџПЛЛЛЛЛЛЛЛЛЛЛЛЛЛћЏЊЊЊЊЊЊЊЊЊЊЊЊЊЊњˆˆˆˆˆˆˆˆˆˆˆˆˆˆјwwwwwwwwwwwwwwїџџџџџџяюџяюџџюџџџџююџяюџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџПЛЛЛЛЛЛЛЛЛЛЛЛЛЛћЏЊЊЊЊЊЊЊЊЊЊЊЊЊЊњˆˆˆˆˆˆˆˆˆˆˆˆˆˆјwwwwwwwwwwwwwwїџџџџџџюџўюџџяюџџџџџяўюџўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџПЛЛЛЛЛЛЛЛЛЛЛЛЛЛћЏЊЊЊЊЊЊЊЊЊЊЊЊЊЊњˆˆˆˆˆˆˆˆˆˆˆˆˆˆјwwwwwwwwwwwwwwїџџџџџџяюџююџџюџџџџяюџяюџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџПЛЛЛЛЛЛЛЛЛЛЛЛЛЛћЏЊЊЊЊЊЊЊЊЊЊЊЊЊЊњˆˆˆˆˆˆˆˆˆˆˆˆˆˆјwwwwwwwwwwwwwwїџџџџџџюџўюџўџюџяўџюџџюџўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџПЛЛЛЛЛЛЛЛЛЛЛЛЛЛћЏЊЊЊЊЊЊЊЊЊЊЊЊЊЊњˆˆˆˆˆˆˆˆˆˆˆˆˆˆјwwwwwwwwwwwwwwїџџџџџџяюџяюџяюўяўџююўяюџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџПЛЛЛ ЛЛЛЛЛћЏЊЊ Њ    ЊЊЊњˆˆˆШŒШЬŒˆЬŒˆˆˆјwwwwЧЬwwЬwwwwwїџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџПЛ Л АЛ А ЛЛћЏЊЊ  ЊЊ ЊЊЊЊЊњˆˆˆЬŒˆˆЬШŒШˆˆˆјwwwwЬwwЧЬwwwwwїџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџПЛЛЛАА Л ЛЛћЏЊЊ  Њ  Њ ЊЊЊњˆˆˆШŒˆЬŒˆЬŒˆˆˆјwwwwЬЬwЬЧwwwwwїџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџПЛЛЛЛАЛЛАЛћЏЊЊЊЊЊ    ЊЊЊЊњˆˆˆШŒШŒˆШŒШˆˆˆјwwwwЬw|ЬЬ|wwwwїџџџџџџп§§пнџнџ§ннџџџџпн§пн§нн§ннџпн§џџџџџџџџџџџџџџџџџџџџПЛ А ЛАЛ ЛЛћЏЊЊ  Њ ЊЊЊњˆˆˆЬЬШЬЬˆЬŒˆˆˆјwwwwЧЬwwЧwwwwwїџџџџџџп§§нџ§нџ§нџ§џџџн§џџнџнџџнџ§н§џџџџџџџџџџџџџџџџџџџџџПЛЛЛЛЛЛЛЛЛЛЛЛЛЛћЏЊЊЊЊЊЊЊЊЊЊЊЊЊЊњˆˆˆˆˆˆˆˆˆˆˆˆˆˆјwwwwwwwwwwwwwwїџџџџџџпн§нџ§нџ§нџ§џџџпнџџнџннџнџ§пнџџџџџџџџџџџџџџџџџџџџџПЛЛЛЛЛЛЛЛЛЛЛЛЛЛћЏЊЊЊЊЊЊЊЊЊЊЊЊЊЊњˆˆˆˆˆˆˆˆˆˆˆˆˆˆјwwwwwwwwwwwwwwїџџџџџџџнџнџ§нџ§ннџџџџџн§џнџнџџннџџн§џџџџџџџџџџџџџџџџџџџџПЛЛЛЛЛЛЛЛЛЛЛЛЛЛћЏЊЊЊЊЊЊЊЊЊЊЊЊЊЊњˆˆˆˆˆˆˆˆˆˆˆˆˆˆјwwwwwwwwwwwwwwїџџџџџџџнџпнџпнџнџ§џџџннџџнџнн§нџџннџџџџџџџџџџџџџџџџџџџџџПЛЛЛЛЛЛЛЛЛЛЛЛЛЛћЏЊЊЊЊЊЊЊЊЊЊЊЊЊЊњˆˆˆˆˆˆˆˆˆˆˆˆˆˆјwwwwwwwwwwwwwwїџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџПЛЛЛЛЛЛЛЛЛЛЛЛЛЛћЏЊЊЊЊЊЊЊЊЊЊЊЊЊЊњˆˆˆˆˆˆˆˆˆˆˆˆˆˆјwwwwwwwwwwwwwwїџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџПЛЛЛЛЛЛЛЛЛЛЛЛЛЛћЏЊЊЊЊЊЊЊЊЊЊЊЊЊЊњˆˆˆˆˆˆˆˆˆˆˆˆˆˆјwwwwwwwwwwwwwwїџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџПЛЛЛЛЛЛЛЛЛЛЛЛЛЛћЏЊЊЊЊЊЊЊЊЊЊЊЊЊЊњˆˆˆˆˆˆˆˆˆˆˆˆˆˆјwwwwwwwwwwwwwwїџџџџџџяюџџюџяюџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџПЛЛЛЛЛЛЛЛЛЛЛЛЛЛћЏЊЊЊЊЊЊЊЊЊЊЊЊЊЊњˆˆˆˆˆˆˆˆˆˆˆˆˆˆјwwwwwwwwwwwwwwїџџџџџџюџўяюџюяўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџПЛЛЛЛЛЛЛЛЛЛЛЛЛЛћЏЊЊЊЊЊЊЊЊЊЊЊЊЊЊњˆˆˆˆˆˆˆˆˆˆˆˆˆˆјwwwwwwwwwwwwwwїџџџџџџяюџџюџюўўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџПЛЛЛЛЛЛЛЛЛЛЛЛЛЛћЏЊЊЊЊЊЊЊЊЊЊЊЊЊЊњˆˆˆˆˆˆˆˆˆˆˆˆˆˆјwwwwwwwwwwwwwwїџџџџџџюџўџюџюџўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџПЛЛЛЛЛЛЛЛЛЛЛЛЛЛћЏЊЊЊЊЊЊЊЊЊЊЊЊЊЊњˆˆˆˆˆˆˆˆˆˆˆˆˆˆјwwwwwwwwwwwwwwїџџџџџџяюџяюўяюџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџПЛЛЛЛЛЛЛЛЛЛЛЛЛЛћЏЊЊЊЊЊЊЊЊЊЊЊЊЊЊњˆˆˆˆˆˆˆˆˆˆˆˆˆˆјwwwwwwwwwwwwwwїџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџПЛЛЛЛЛЛЛЛЛЛЛЛЛЛћЏЊЊЊЊЊЊЊЊЊЊЊЊЊЊњˆˆˆˆˆˆˆˆˆˆˆˆˆˆјwwwwwwwwwwwwwwїџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџr,-- title: 2048 -- desc: a sliding puzzle game -- author: ArchTauruS -- script: lua -- version: 1.0 --[[ Use your arrow keys to move the tiles. Tiles with the same number merge into one when they touch. Add them up to reach 2048! HOW TO PLAY 1. ARROWKEYS TO SLIDE 2. ENTER TO RESTART 3. BACKSPACE TO QUIT ]] function BOOT() Title = 2048 ScreenWidth = 240 ScreenHeight = 136 BackgroundColor = 15 TileWidth = 30 TileMargin = 2 Key_Enter = 50 Key_Backspace = 51 Key_Up = 58 Key_Down = 59 Key_Left = 60 Key_Right = 61 HighScore = pmem(0) -- LOAD HIGH-SCORE RECORD HighSpeed = { 0 } -- LOAD SPEED RUN RECORD for i = 1, 17 do HighSpeed[i] = pmem(i) end Scene = TitleScreen end function TitleScreen() cls(BackgroundColor) if Title == 2048 and math.random() > 0.995 then Title = math.floor(2 ^ math.random(1, 17)) elseif math.random() > 0.98 then Title = 2048 end local titleScale = 4 local titleWidth = print(Title, 0, 200, 0, true, titleScale) local titleX = (ScreenWidth - titleWidth) // 2 local titleY = (ScreenHeight - titleScale * 4) // 2 print(Title, titleX + 1, titleY + 1, 4, true, titleScale) print(Title, titleX, titleY, 2, true, titleScale) local helpString = "press enter to start" local helpWidth = print(helpString, 0, 200, 0, true) local helpX = (ScreenWidth - helpWidth) // 2 local helpY = 100 print(helpString, helpX + 1, helpY + 1, 0, true) print(helpString, helpX, helpY, math.random(16), true) end function Start() MaxTileValue = 0 MaxTileTicks = 0 Score = 0 Grid = { { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 } } DropTile() DropTile() Scene = PlayGame Slides = 0 -- NUMBER OF SLIDES Ticks = 0 -- GAME TIME end function DropTile() local emptyTiles = {} for i = 1, 4 do for j = 1, 4 do local empty = Grid[i][j] == 0 if empty then -- MAKE PRE-CONSTRUCTED TILE FOR CHOOSE local value = math.random() < 0.9 and 1 or 2 local emptyTile = { i = i, j = j, iMoveTo = i, jMoveTo = j, value = value, width = 2 } table.insert(emptyTiles, emptyTile) end end end if (#emptyTiles) == 0 then return end local index = math.random(#emptyTiles) -- THE CHOOSEN INDEX local tile = emptyTiles[index] -- THE CHOOSEN TILE Grid[tile.i][tile.j] = tile -- PUT THE NEW TILE INTO THE GRID if tile.value > MaxTileValue then MaxTileValue = tile.value end end function PlayGame() Ticks = Ticks + 1 if Score > HighScore then HighScore = Score pmem(0, HighScore) end cls(BackgroundColor) DrawGrid() DrawText() if IsGameOver() then Scene = GameOver elseif keyp(Key_Up) or keyp(Key_Down) or keyp(Key_Left) or keyp(Key_Right) then local slided = SlideGrid() sfx(0, slided and 64 or 16) -- SOUND OF COLLISION OR BLOCKED if slided then Slides = Slides + 1 DropTile() end end end function DrawGrid() -- DRAW 4x4 BLACK CELLS for i = 0, 3 do for j = 0, 3 do local x = 5 + (TileWidth + TileMargin) * j local y = 5 + (TileWidth + TileMargin) * i rect(x, y, TileWidth, TileWidth, 0) end end for i = 1, 4 do for j = 1, 4 do local tile = Grid[i][j] if tile ~= 0 then -- CELL ANIMATION if tile.i < tile.iMoveTo then tile.i = tile.i + 0.5 end if tile.i > tile.iMoveTo then tile.i = tile.i - 0.5 end if tile.j < tile.jMoveTo then tile.j = tile.j + 0.5 end if tile.j > tile.jMoveTo then tile.j = tile.j - 0.5 end if tile.width < TileWidth then tile.width = tile.width + 2 end -- DRAW CELL local x = 5 + (TileWidth + TileMargin) * (tile.j - 1) + TileWidth / 2 local y = 5 + (TileWidth + TileMargin) * (tile.i - 1) + TileWidth / 2 rect(x - tile.width / 2, y - tile.width / 2, tile.width, tile.width, tile.value % 15 + 1) -- DRAW NUMBER local n = math.floor(2 ^ tile.value) -- NUMBER TO DISPLAY local l = -- LENGTH OF NUMNER n >= 10000 and 5 or n >= 1000 and 4 or n >= 100 and 3 or n >= 10 and 2 or 1 local o = 6 * (l / 2) -- OFFSET OF NUMNER local s = -- COLOR OF NUMBER tile.value <= 4 and 0 or tile.value <= 8 and 12 or tile.value <= 12 and 0 or tile.value <= 16 and 12 or 0 if tile.width > 20 then print(n, x - o, y - 3, s, true) end end end end end function DrawText() local x = 144 local Title = math.floor(2 ^ (MaxTileValue + 1)) print(Title, x + 1, 5 + 1, 2, true, 2) print(Title, x, 5, 12, true, 2) local orange = 3 local yellow = 4 local green = 5 local white = 12 local blue = 11 local grey = 13 local darkgrey = 14 local y = 20 print("HIGH SCORE", x, y, yellow, true) y = y + 8 print(HighScore, x, y, orange, true) y = y + 8 print("YOUR SCORE", x, y, green, true) y = y + 8 print(Score, x, y, white, true) y = y + 8 print("HIGH TILE", x, y, darkgrey, true) y = y + 8 local tile = math.floor(2 ^ (MaxTileValue)) print(tile, x, y, blue, true) y = y + 8 print("HIGH SPEED", x, y, yellow, true) y = y + 8 local highSpeed = TicksToSeconds(HighSpeed[MaxTileValue]) print(highSpeed, x, y, orange, true) y = y + 8 print("YOUR SPEED", x, y, green, true) y = y + 8 print(TicksToSeconds(MaxTileTicks), x, y, (HighSpeed[MaxTileValue] ~= 0 and HighSpeed[MaxTileValue] == MaxTileTicks and orange or white), true) y = y + 8 print("GAME TIMER", x, y, grey, true) y = y + 8 print(TicksToSeconds(Ticks), x, y, darkgrey, true) y = y + 8 print("GAME STEPS", x, y, grey, true) y = y + 8 print(Slides, x, y, darkgrey, true) end function TicksToSeconds(ticks) return math.floor(ticks / 60 * 100) / 100 end function IsGameOver() -- CHECK ANY ZERO or ANY POPUP for i = 1, 4 do for j = 1, 4 do if Grid[i][j] == 0 or Grid[i][j].width < TileWidth then return false end end end -- CHECK ALL ROWS and COLS HAS COMBINE for i = 1, 4 do local row = Grid[i] for k = 1, 3 do if row[k].value == row[k + 1].value then return false end end local col = { Grid[1][i], Grid[2][i], Grid[3][i], Grid[4][i] } for k = 1, 3 do if col[k].value == col[k + 1].value then return false end end end return true end function GameOver() local gameover = "GAME OVER" local gameoverScale = 2 local width = print(gameover, 0, -100, 0, true, gameoverScale) local offsetX = math.random(-1, 1) local offsetY = math.random(-1, 1) local gameoverX = (136 - width) // 2 local gameoverY = (ScreenHeight - gameoverScale * 6) // 2 print(gameover, gameoverX + offsetX, gameoverY + offsetY, math.random(16), true, gameoverScale) print(gameover, gameoverX, gameoverY, 2, true, gameoverScale) end function SlideGrid() local slided = false if keyp(Key_Up) then for j = 1, 4 do local tiles = { Grid[1][j], Grid[2][j], Grid[3][j], Grid[4][j] } if SlideLine(tiles) then slided = true end for i = 1, 4 do if tiles[i] ~= 0 then tiles[i].iMoveTo = i end Grid[i][j] = tiles[i] -- PUT SLIDED CELL BACK TO GRID end end elseif keyp(Key_Down) then for j = 1, 4 do local tiles = { Grid[4][j], Grid[3][j], Grid[2][j], Grid[1][j] } if SlideLine(tiles) then slided = true end for i = 1, 4 do local t = { 4, 3, 2, 1 } local k = t[i] if tiles[k] ~= 0 then tiles[k].iMoveTo = i end Grid[i][j] = tiles[k] -- PUT SLIDED CELL BACK TO GRID end end elseif keyp(Key_Left) then for i = 1, 4 do -- NO NEED TO PUT SLIDED CELL BACK TO GRID IN THIS CASE if SlideLine(Grid[i]) then slided = true end for j = 1, 4 do if Grid[i][j] ~= 0 then Grid[i][j].jMoveTo = j end end end elseif keyp(Key_Right) then for i = 1, 4 do local tiles = { Grid[i][4], Grid[i][3], Grid[i][2], Grid[i][1] } if SlideLine(tiles) then slided = true end Grid[i] = { tiles[4], tiles[3], tiles[2], tiles[1] } -- PUT SLIDED CELL BACK TO GRID for j = 1, 4 do if Grid[i][j] ~= 0 then Grid[i][j].jMoveTo = j end end end end return slided end function SlideLine(tiles) if Slidable(tiles) then Slide(tiles) Combine(tiles) Slide(tiles) return true else return false end end function Slidable(tiles) for i = 1, 3 do if tiles[i] == 0 and tiles[i + 1] ~= 0 then return true end end local values = {} for i, tile in pairs(tiles) do if tile ~= 0 then table.insert(values, tile.value) end end for i = 1, #values - 1 do if values[i] == values[i + 1] then return true end end return false end function Slide(tiles) -- REMOVE ZEROS for i = 4, 1, -1 do if tiles[i] == 0 then table.remove(tiles, i) end end -- PADDING ZEROS while #tiles < 4 do table.insert(tiles, 0) end end function Combine(tiles) for i = 1, #tiles - 1 do local collision = ( tiles[i] ~= 0 and tiles[i + 1] ~= 0 and tiles[i].value == tiles[i + 1].value ) if collision then tiles[i + 1] = 0 tiles[i].value = tiles[i].value + 1 Score = math.floor(Score + 2 ^ tiles[i].value) end end CheckMaxTile() -- CHECK SPEED RUN FOR MAX TILE end function CheckMaxTile() local maxTile = 0 for i = 1, 4 do for j = 1, 4 do local tile = Grid[i][j] if tile ~= 0 and tile.value > maxTile then maxTile = tile.value end end end if maxTile > MaxTileValue then MaxTileValue = maxTile MaxTileTicks = Ticks if HighSpeed[MaxTileValue] == 0 or MaxTileTicks < HighSpeed[MaxTileValue] then HighSpeed[MaxTileValue] = MaxTileTicks pmem(MaxTileValue, MaxTileTicks) end end end function TIC() poke(0x3FFB, 0) -- hide the mouse cursor if keyp(Key_Enter) then Scene = Start elseif keyp(Key_Backspace) then Scene = TitleScreen end Scene() end