   Ò ðÿÿÿÿÌÌÌÏÝÝÝÏÍÌÌÏÍÍÝÏÍÌÝÏÍÝÝÏÍÝÝÿÿÿÿÌÌÌÌÝÝÝÝÝÝÌÌÜÍÝÜÝÝÝÌÝÝÝÝÍÜÝÝÿ  Ìÿ  Ýü  Üü  Üü  Üü  Üü  Üü  ðÿÿÿÿÌÌÌÏÝÝÝÏÍÌÌÏÍÌÌÏÍÌÌÏÍÌÌÏÍÌÌÿÿÿÿÌÌÌÌÝÝÝÝÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÿ  Ìÿ  Ýü  Üü  Üü  Üü  Üü  Üü  ðÿÿÿÿÌÌÌÏÝÝÝÏÍÌÌÏÍÌÌÏÍÌÌÏÍÌÌÏÍÌÌÿÿÿÿÌÌÌÌÝÝÝÝÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÿ  Ìÿ  Ýü  Üü  Üü  Üü  Üü  Üü  ðÿÿÿÿÌÌÌÏÝÝÝÏÍÌÌÏÍÌÌÏÍÌÌÏÍÌÌÏÍÌÌÿÿÿÿÌÌÌÌÝÝÝÝÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÿ  Ìÿ  Ýü  Üü  Üü  Üü  Üü  Üü  ðÿÿÿÿÌÌÌÏÝÝÝÏÍÌÌÏÍÌÌÏÍÌÌÏÍÌÌÏÍÌÌÿÿÿÿÌÌÌÌÝÝÝÝÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÿ  Ìÿ  Ýü  Üü  Üü  Üü  Üü  Üü   ð   Ï  Ïÿ ðÏÌÏÏÌüðÌÌü ÏÌ ðÿ ÏÝÜÝÏÝÝÝÏÍÝÝÏÍÝÝÏÍÝÝÏÍÝÝÏÍÝÝÏÍÝÝÜÍÝÍÜÍÝÝÍÜÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝü  Ýü  Üü  Üü  Üü  Üü  Üü  Üü  ÏÍÌÌÏÍÌÌÏÍÌÌÏÍÌÌÏÍÌÌÏÍÌüÏÍÌüÏÍÌÌÌÌÌÌÌÌÌÌÌÌÌÌüÏÌÌüÏÌÌÏüÏÌÏüÏÌüÏÌÌÜü  Üü  Üü  Üü  Üü  Üü  Üü  Üü  ÏÍÌÌÏÍÌÌÏÍÌÌÏÍÌÌÏÍÌÌÏÍÌ,ÏÍÌ,ÏÍÌÌÌÌÌÌÌÌÌÌÌÌÌÌ,ÂÌÌ""ÌÌ""ÂÌ""ÂÌ""ÌÌÜü  Üü  Üü  Üü  Üü  Üü  Üü  Üü  ÏÍÌÌÏÍÌÌÏÍÌÌÏÍÌ,ÏÍÌ"ÏÍÌ"ÏÍÌ,ÏÍÌÌÌÌÌÌÌÌÌÌÌÌÌÌÂ,ÂÌ"""Ì"""Ì""ÂÌ""ÌÌÜü  Üü  Üü  Üü  Üü  Üü  Üü  Üü  ÏÍÌÌÏÍÌÌÏÍÌÌÏÍÌÌÏÍÌÌÏÍÌüÏÍÌüÏÍÌÌÌÌÌÌÌÌÌÌÌÌÌÌüÏÌÌÿÿÌÌÿÿÏÌÿÿÏÌüÏÌÌÜü  Üü  Üü  Üü  Üü  Üü  Üü  Üü   ÿÿ ðÌÌÏÿÿüÏÿüÏÿüüðüÌÿ ÿÌü ðÿÏÍÝÝÏÍÝÝÏÍÝÝÏÝÝÝÏÝÜÝÏÍÝÝÏÍÝÝÏÍÌÝÝÝÝÝÝÝÝÝÍÜÝÝÜÍÝÝÜÍÝÍÍÜÝÝÝÝÝÝÝÝÝÌÜü  Üü  Üü  Ýü  Ýü  Üü  Üü  Üü  ÏÍÌÌÏÍÌÌÏÍÌÌÏÍÌÌÏÍÌÌÏÍÌÌÏÍÌÌÏÍÌÌÿÿÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÜü  Üü  Üü  Üü  Üü  Üü  Üü  Üü  ÏÍÌÌÏÍÌÌÏÍÌÌÏÍÌÌÏÍÌÌÏÍÌÌÏÍÌÌÏÍÌÌ,ÂÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÜü  Üü  Üü  Üü  Üü  Üü  Üü  Üü  ÏÍÌÌÏÍÌÌÏÍÌÌÏÍÌÌÏÍÌÌÏÍÌÌÏÍÌÌÏÍÌÌ,ÂÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÜü  Üü  Üü  Üü  Üü  Üü  Üü  Üü  ÏÍÌÌÏÍÌÌÏÍÌÌÏÍÌÌÏÍÌÌÏÍÌÌÏÍÌÌÏÍÌÌÿÿÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÜü  Üü  Üü  Üü  Üü  Üü  Üü  Üü      ªªªªªªªªªªªªªªªªªªªªªªªª££££ÏÍÍÝÏÍÌÌÏÝÝÝÿÌÌÌðÿÿÿ            ÜÍÝÜÝÝÌÌÝÝÝÝÌÌÌÌÿÿÿÿ            Üü  Üü  Ýü  Ìÿ  ÿ              ÏÍÌÌÏÍÌÌÏÝÝÝÿÌÌÌðÿÿÿ            ÌÌÌÌÌÌÌÌÝÝÝÝÌÌÌÌÿÿÿÿ            Üü  Üü  Ýü  Ìÿ  ÿ              ÏÍÌÌÏÍÌÌÏÝÝÝÿÌÌÌðÿÿÿ            ÌÌÌÌÌÌÌÌÝÝÝÝÌÌÌÌÿÿÿÿ            Üü  Üü  Ýü  Ìÿ  ÿ              ÏÍÌÌÏÍÌÌÏÝÝÝÿÌÌÌðÿÿÿ            ÌÌÌÌÌÌÌÌÝÝÝÝÌÌÌÌÿÿÿÿ            Üü  Üü  Ýü  Ìÿ  ÿ              ÏÍÌÌÏÍÌÌÏÝÝÝÿÌÌÌðÿÿÿ            ÌÌÌÌÌÌÌÌÝÝÝÝÌÌÌÌÿÿÿÿ            Üü  Üü  Ýü  Ìÿ  ÿ              ::::3333333333333333333333334444                  P  P  P  UU                                                                                  P  P     P                                                                                   P  P     P                                                                                  P  P  UU   P                                                                                  UU     U   P                                                                CCCCDDDDDDDDDDDDDDDDDDDDDDDD@@@@  P                                                                                              UU                                                                                              P                                                                                               P                                                                                              U                                                                                                                                                                              P  P  P  UU                                                                                  P  P     P                                                                                   P  P     P                                                                                  P  P  UU   P                                                                                  UU     U   P                                                                                                  P                                                                                              UU                                                                                              P                                                                                               P                                                                                              U                                                                                                              P     UU  P                                                                                  UU   P     P                                                                                   P  P  P  P                                                                                  UU  P  UU   P                                                                                  P                         P   P   P                                                                     UU                                                                                              P                                                                                               P                                                                                              P                                                                                              P                                                                                                                                                                             P     UU  P                                                                                  UU   P     P                                                                                   P  P  P  P                                                                                  UU  P  UU   P                                                                                 P P P P                                                                                                  UU                                                                                              P                                                                                               P                                                                                              P                                                                                             P                                                                                                               U   P   P  P                                                                                  P  P  P  U                                                                                  P    U                                                                                                                                                                  ðÿÿÿÿÌÌÌÏÝÝÝÏÍÌÌÏÍÌÌÏÍÌÌÏÍÌÌÏÍÌÌÿÿÿÿÌÌÌÌÝÝÝÝÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÿ  Ìÿ  Ýü  Üü  Üü  Üü  Üü  Üü                                    P                                                                                              PU                                                                                              P                                                                                                                                                                                            ÏÍÌÌÏÍÌÌÏÍÌÌÏÍÌÌÏÍÌÌÏÍÌÌÏÍÌÌÏÍÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÜü  Üü  Üü  Üü  Üü  Üü  Üü  Üü                                                                                     U   P   P  P                                                                                  P  P  P  U                                                                                  P    U                                                                                                                                  ÏÍÌÌÏÍÌÌÏÍÌÌÏÍÌÌÏÍÌÌÏÍÌÌÏÍÌÌÏÍÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÜü  Üü  Üü  Üü  Üü  Üü  Üü  Üü                                                                    P                                                                                              PU                                                                                              P                                                                                                                                                            ÏÍÌÌÏÍÌÌÏÝÝÝÿÌÌÌðÿÿÿ            ÌÌÌÌÌÌÌÌÝÝÝÝÌÌÌÌÿÿÿÿ            Üü  Üü  Ýü  Ìÿ  ÿ­ @DDDDÿÿÿôODDô  ô  ô  ô  ô  DDDDÿÿÿÿDDDD                    DD ÿÿD DôO  @O  @O  @O  @O  @O      îîîà  à   à   à   à   à       îîîî                            î   à                                                                                                                                                                                                                                                                                                                                                 ô  ô  ô  ô  ô  ô  ô  ô                                   @O  @O  @O  @O  @O  @O  @O  @O à   à   à   à   à   à   à   à                                                                                                                                                                                                                                                                                                                                                                                           ô  ô  ô  ô  ô  ô  ô  ô                                   @O  @O  @O  @O  @O  @O  @O  @O à   à   à   à   à   à   à   à                                                                                                                                                                                                                                                                                                                                                                                           ô  ô  ô  ô  ôODDDÿÿÿ@DDD                    DDDDÿÿÿÿDDDD     @O  @O  @O  @O DôO ÿÿD DD     à   à   à   îîî                            îîîî                      à  îþ //////////////////////////////                                                                                                                                                                                                                  ??????????????????????????????                                                                                                                                                                                                                  OOOOOOOOOOOOOOOOOOOOOOOOOOOOOO	>                                                                À? wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwÿÿwwwwÿwwwwÿwwww÷ww÷ÿwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwÿÿwwwwwwwÿwwww÷wwwwwwwwwwwwwwwwwwwwwwÿwwww÷ww÷ÿwwwwwwÿw÷ÿww÷ÿ÷ÿÿwÿÿ÷wwÿ÷wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwÿw÷ÿw÷ÿÿwwwÿÿÿÿw÷ÿÿw÷ÿwÿÿw÷ÿ÷ÿÿwwÿÿ÷wwÿ÷wwwwwÿwÿwÿ÷÷wÿw÷ÿwwwwwÿwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwÿwÿ÷ÿwÿÿwww÷wÿw÷ÿwÿ÷ÿwÿw÷ÿw÷ÿwwwwwÿwwwwwÿÿwÿwÿ÷÷wÿww÷ÿ÷wwÿwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwÿwÿwÿwÿwww÷wÿww÷÷ÿwÿwÿwwwÿ÷ÿww÷ÿ÷wwÿwwwwwwÿww÷ÿwÿ÷÷w÷ÿ÷ÿ÷ww÷ÿwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwÿÿw÷ÿw÷ÿÿwwwwÿÿww÷ÿww÷ÿwÿwwÿÿw÷ÿ÷ÿ÷ÿ÷ww÷ÿwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww÷ÿwwwwwwwÿ÷wwwwÿwwÿwwwwwwwwwwww÷www÷wwwwÿwwwÿÿwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwÿwÿw÷ÿw÷w÷ÿÿÿwÿwwÿww÷ÿwÿwwÿÿwÿÿ÷ÿÿwwww÷wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwÿwÿw÷ÿ÷w÷ÿwÿw÷ÿww÷÷÷÷÷ÿw÷wÿwwwwwwÿwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww÷ÿÿÿÿÿÿÿÿwwwwwwwwÿÿ÷ÿw÷ÿ÷w÷ÿwÿw÷ÿwww÷÷÷÷÷ÿw÷wwÿÿwww÷wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwÿÌÌÌÌÌÌÌÌÿwwwwwwwwÿwww÷ÿÿwÿ÷ÿÿÿw÷ÿwÿww÷ÿwÿ÷ÿwwÿÿÿwÿwww÷ÿwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwÏÝÝÝÝÝÝÝÝüwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww÷wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwÏÍÌÌÌÌÌÌÜüwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwÏÍ""ÌÌÌÌÜüwwwwwwwwwwwwwwwwwwwwww÷ÿÿÿÿÿÿÿÿww÷ÿÿÿÿÿÿÿÿww÷ÿÿÿÿÿÿÿÿwwwwwwwwwwwwwwwîîîîîîîîwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwÏÍÌ,ÌÌÌÌÜüwwwwwwwwwwwwwwwwwwwwwwÿÌÌÌÌÌÌÌÌÿwwÿÌÌÌÌÌÌÌÌÿwwÿÌÌÌÌÌÌÌÌÿwwwwwwwwwwwwwwç~wwwwwwç~wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwÏÍÌÂÌÌÌÌÜüwwwwwwwwwwwwwwwwwwwwwwÏÝÝÝÝÝÝÝÝüwwÏÝÝÝÝÝÝÝÝüwwÏÝÝÝÝÝÝÝÝüwwwwwwwwwwwwwwçwwwwwwww~wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwÏÍ,ÌÌÌÌÌÜüwwwwwwwwwwwwwwwwwwwwwwÏÍÌÌÝÝÌÌÜüwwÏÍÌÌÌÌÌÌÜüwwÏÍÌÌÌÌÌÌÜüwwwwwwwwwwwwwwçwwwwwwww~wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwÏÍ,ÌÌÌÌÌÜüwwwwwwwwwwwwwwwwwwwwwwÏÍÍÝÜÍÝÜÜüwwÏÍÿÿÌÌÌÌÜüwwÏÍüÏÌÌÌÌÜüwwwwwwwwwwwwwwçwwwwwwww~wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwÏÍÌÌÌÌÌÌÜüwwwwwwwwwwwwwwwwwwwwwwÏÍÌÝÝÝÝÌÜüwwÏÍÌüÌÌÌÌÜüwwÏÍÏüÌÌÌÌÜüwwwwwwwwwwwwwwçwwwwwwww~wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwÏÍÌÌÌÌÌÌÜüwwwwwwwwwwwwwwwwwwwwwwÏÍÝÝÝÝÝÝÜüwwÏÍÌÏÌÌÌÌÜüwwÏÍÏüÌÌÌÌÜüwwwwwwwwwwwwwwçwwwwwwww~wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwÏÍÌ,Â,ÂÌÜüwwwwwwwwwwwwwwwwwwwwwwÏÍÝÝÍÜÝÝÜüwwÏÍüÌÌÌÌÌÜüwwÏÍÿÿÌÌÌÌÜüwwwwwwwwwwwwwwçwwwwwwww~wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwÏÍÌ""""ÌÜüwwwwwwwwwwwwwwwwwwwwwwÏÝÜÝÜÍÝÍÝüwwÏÍüÌÌÌÌÌÜüwwÏÍÏüÌÌÌÌÜüwwwwwwwwwwwwwwçwwwwwwww~wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwÏÍÌ""""ÌÜüwwwwwwwwwwwwwwwwwwwwwwÏÝÝÝÜÍÝÝÝüwwÏÍÌÌÌÌÌÌÜüwwÏÍÌÌÌÌÌÌÜüwwwwwwwwwwwwwwçwwwwwwww~wwwwwwwwwwwwwwwwwwwwwww÷ÿÿÿÿÿÿÿÿÏ,""ÂüÿÿÿÿÿÿÿÿwwwwwwwwwwwwwwwÏÍÝÝÍÜÝÝÜüwwÏÍÌÌÌÌÌÌÜüwwÏÍÌÌÌÌÌÌÜüwwwwwwwwwwwwwwçwwwwwwww~wwwwwwwwwwwwwwwwwwwwwwwÿÌÌÌÌÌÌÌÌÿÌ""ÌÿÌÌÌÌÌÌÌÌÿwwwwwwwwwwwwwwwÏÍÝÝÝÝÝÝÜüwwÏÍÌÌüÏÌÌÜüwwÏÍÌÌüÏÌÌÜüwwwwwwwwwwwwwwçwwwwwwww~wwwwwwwwwwwwwwwwwwwwwwwÏÝÝÝÝÝÝÝÝüÌ,ÂÌÏÝÝÝÝÝÝÝÝüwwwwwwwwwwwwwwwÏÍÝÝÝÝÝÝÜüwwÏÍÌÌüÏÌÌÜüwwÏÍÌÌüÏÌÌÜüwwwwwwwwwwwwwwçwwwwwwww~wwwwwwwwwwwwwwwwwwwwwwwÏÍÌÌÌÌÌÌÜüÌÌÌÌÏÍÌÌÌÌÌÌÜüwwwwwwwwwwwwwwwÏÍÝÝÝÝÝÝÜüwwÏÍÌüÏüÏÌÜüwwÏÍÌüÏüÏÌÜüwwwwwwwwwwwwwwçwwwwwwww~wwwwwwwwwwwwwwwwwwwwwwwÏÍÌÿÌÌÌÌÜüÌÌÌÌÏÍüÏÌÌÌÌÜüwwwwwwwwwwwwwwwÏÍÝÝÝÝÝÝÜüwwÏÍÌüÏüÏÌÜüwwÏÍÌüÏüÏÌÜüwwwwwwwwwwwwwwçwwwwwwww~wwwwwwwwwwwwwwwwwwwwwwwÏÍÌüÌÌÌÌÜüÌÌÌÌÏÍÏüÌÌÌÌÜüwwwwwwwwwwwwwwwÏÍÝÝÝÝÝÝÜüwwÏÍÌÌüÏÌÌÜüwwÏÍÌÌüÏÌÌÜüwwwwwwwwwwwwwwçwwwwwwww~wwwwwwwwwwwwwwwwwwwwwwwÏÍÌüÌÌÌÌÜüÌÌÌ"ÏÍüÏÌÌÌÌÜüwwwwwwwwwwwwwwwÏÍÝÝÝÝÝÝÜüwwÏÍÌÌÿÿÌÌÜüwwÏÍÌÌÿÿÌÌÜüwwwwwwwwwwwwwwçwwwwwwww~wwwwwwwwwwwwwwwwwwwwwwwÏÍÏüÌÌÌÌÜüÌÌÌÌÏÍÏüÌÌÌÌÜüwwwwwwwwwwwwwwwÏÍÝÝÝÝÝÝÜüwwÏÍÌÌÌÌÌÌÜüwwÏÍÌÌÌÌÌÌÜüwwwwwwwwwwwwwwçwwwwwwww~wwwwwwwwwwwwwwwwwwwwwwwÏÍüÏÌÌÌÌÜüÌÌÌÌÏÍüÏÌÌÌÌÜüwwwwwwwwwwwwwwwÏÍÝÝÍÜÝÝÜüwwÏÍÌÌÌÌÌÌÜüwwÏÍÌÌÌÌÌÌÜüwwwwwwwwwwwwwwçwwwwwwww~wwwwwwwwwwwwwwwwwwwwwwwÏÍÌÌÌÌÌÌÜüÌÌÌ,ÏÍÌÌÌÌÌÌÜüwwwwwwwwwwwwwwwÏÝÝÝÜÍÝÝÝüwwÏÍÌÌÌÌÌÌÜüwwÏÍÌÌÌÌÌÌÜüwwwwwwwwwwwwwwçwwwwwwww~wwwwwwwwwwwwwwwwwwwwwwwÏÍÌÌÌÌÌÌÜüÌÌÌ,ÏÍÌÌÌÌÌÌÜüwwwwwwwwwwwwwwwÏÝÜÝÜÍÝÍÝüwwÏÍÌÌÌÌÿÿÜüwwÏÍÌÌÌÌüÏÜüwwwwwwwwwwwwwwçwwwwwwww~wwwwwwwwwwwwwwwwwwwwwwwÏÍÌÌüÏÌÌÜüÌÌÌÌÏÍÌÌüÏÌÌÜüwwwwwwwwwwwwwwwÏÍÝÝÍÜÝÝÜüwwÏÍÌÌÌÌÌüÜüwwÏÍÌÌÌÌÏüÜüwwwwwwwwwwwwwwçwwwwwwww~wwwwwwwwwwwwwwwwwwwwwwwÏÍÌÌüÏÌÌÜüÝÝÝÝÏÍÌÌüÏÌÌÜüwwwwwwwwwwwwwwwÏÍÝÝÝÝÝÝÜüwwÏÍÌÌÌÌÌÏÜüwwÏÍÌÌÌÌÏüÜüwwwwwwwwwwwwwwçwwwwwwww~wwwwwwwwwwwwwwwwwwwwwwwÏÍÌüÏüÏÌÜüÌÌÌÌÏÍÌüÏüÏÌÜüwwwwwwwwwwwwwwwÏÍÌÝÝÝÝÌÜüwwÏÍÌÌÌÌüÌÜüwwÏÍÌÌÌÌÿÿÜüwwwwwwwwwwwwwwçwwwwwwww~wwwwwwwwwwwwwwww÷ÿÿÿÿÿÿÿÿÏüÏüÏüÿÿÿÿÿÿÿÿÏüÏüÏüÿÿÿÿÿÿÿÿwwwwwwwwÏÍÍÝÜÍÝÜÜüwwÏÍÌÌÌÌüÌÜüwwÏÍÌÌÌÌÏüÜüwwwwwwwwwwwwwwçwwwwwwww~wwwwwwwwwwwwwwwwÿÌÌÌÌÌÌÌÌÿÌüÏÌÿÌÌÌÌÌÌÌÌÿÌüÏÌÿÌÌÌÌÌÌÌÌÿwwwwwwwwÏÍÌÌÝÝÌÌÜüwwÏÍÌÌÌÌÌÌÜüwwÏÍÌÌÌÌÌÌÜüwwwwwwwwwwwwwwç~wwwwwwç~wwwwwwwwwwwwwwwwÏÝÝÝÝÝÝÝÝüÌÿÿÌÏÝÝÝÝÝÝÝÝüÌÿÿÌÏÝÝÝÝÝÝÝÝüwwwwwwwwÏÝÝÝÝÝÝÝÝüwwÏÝÝÝÝÝÝÝÝüwwÏÝÝÝÝÝÝÝÝüwwwwwwwwwwwwwwwîîîîîîîîwwwwwwwwwwwwwwwwwÏÍÌÌÌÌÌÌÜüÌÌÌÌÏÍÌÌÌÌÌÌÜüÌÌÌÌÏÍÌÌÌÌÌÌÜüwwwwwwwwÿÌÌÌÌÌÌÌÌÿwwÿÌÌÌÌÌÌÌÌÿwwÿÌÌÌÌÌÌÌÌÿwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwÏÍüÏÌÌÌÌÜüÌÌÌÌÏÍÂ,ÂÌÌÌÜüÌÌÌÌÏÍ""ÌÌÌÌÜüwwwwwwww÷ÿÿÿÿÿÿÿÿww÷ÿÿÿÿÿÿÿÿww÷ÿÿÿÿÿÿÿÿwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwÏÍÏüÌÌÌÌÜüÌÌÌÌÏÍÂÂ,ÌÌÌÜüÌÌÌÌÏÍÌ,ÌÌÌÌÜüwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwÏÍÏüÌÌÌÌÜüÌÌÌÌÏÍÂÂ,ÌÌÌÜüÌÌÌüÏÍÌÂÌÌÌÌÜüwwwwwwwwwwwwwwwwwwwwwwww÷wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwÏÍÏÿÌÌÌÌÜüÌÌÌÌÏÍÂÂ,ÌÌÌÜüÌÌÌÏÏÍ,ÌÌÌÌÌÜüwwwwwwwwwwwwwwwwwwwwwwwwÏwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwÏÍüÿÌÌÌÌÜüÌÌÌÌÏÍÂ,ÂÌÌÌÜüÌÌÌüÏÍ,ÌÌÌÌÌÜüwwwwwwwwwwwwwwwwwwwwwwwwÏÿwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwÏÍÌÌÌÌÌÌÜüÌÌÌÏÏÍÌÌÌÌÌÌÜüÌÌÌÏÏÍÌÌÌÌÌÌÜüwwwwwwwwwwwwwwwwwwwwwww÷ÏÌwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwÏÍÌÌÌÌÌÌÜüÌÌÌüÏÍÌÌÌÌÌÌÜüÌÌÌüÏÍÌÌÌÌÌÌÜüwwwwwwwwwwwwwwwwwwwwwwwÏÏÌüwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwÏÍÌÌüÏÌÌÜüÌÌÌÌÏÍÌÌ,ÂÌÌÜüÌÌÌÌÏÍÌÌ,ÂÌÌÜüwwwwwwwwwwwwwwwwwwwwwww÷ÌÌüwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwÏÍÌÌüÏÌÌÜüÝÝÝÝÏÍÌÌ""ÌÌÜüÝÝÝÝÏÍÌÌ""ÌÌÜüwwwwwwwwwwwwwwwwwwwwwwwwÏÌwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwÏÍÌüÏüÏÌÜüÌÌÌÌÏÍÌ,""ÂÌÜüÌÌÌÌÏÍÌ,""ÂÌÜüwwwwwwwwwwwwwwwwwwwwwwww÷ÿwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww÷ÿÿÿÿÿÿÿÿÏüÏüÏüÿÿÿÿÿÿÿÿÏ,""ÂüÿÿÿÿÿÿÿÿÏ,""ÂüÿÿÿÿÿÿÿÿwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwÿÌÌÌÌÌÌÌÌÿÌüÏÌÿÌÌÌÌÌÌÌÌÿÌ""ÌÿÌÌÌÌÌÌÌÌÿÌ""ÌÿÌÌÌÌÌÌÌÌÿwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwÏÝÝÝÝÝÝÝÝüÌÿÿÌÏÝÝÝÝÝÝÝÝüÌ,ÂÌÏÝÝÝÝÝÝÝÝüÌ,ÂÌÏÝÝÝÝÝÝÝÝüwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwÏÍÌÌÌÌÌÌÜüÌÌÌÌÏÍÌÌÌÌÌÌÜüÌÌÌÌÏÍÌÌÌÌÌÌÜüÌÌÌÌÏÍÌÌÌÌÌÌÜüwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwÏÍüÏÌÌÌÌÜüÌÌÌÌÏÍÿÿÌÌÌÌÜüÌÌÌÌÏÍ,ÂÌÌÌÌÜüÌÌÌÌÏÍÌ"ÌÌÌÌÜüwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwÏÍÏüÌÌÌÌÜüÌÌÌÌÏÍÏüÌÌÌÌÜüÌÌÌÌÏÍÂ,ÌÌÌÌÜüÌÌÌÌÏÍÌ,ÌÌÌÌÜüwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwÏÍÌÏÌÌÌÌÜüÌÌÌüÏÍÿÿÌÌÌÌÜüÌÌÂ,ÏÍÌÂÌÌÌÌÜüÌÌÌ"ÏÍÌ,ÌÌÌÌÜüwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwÏÍüÌÌÌÌÌÜüÌÌÌÏÏÍÌüÌÌÌÌÜüÌÌÂÂÏÍÂ,ÌÌÌÌÜüÌÌÌÌÏÍÂ,ÌÌÌÌÜüwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwÏÍÿÿÌÌÌÌÜüÌÌÌÏÏÍüÏÌÌÌÌÜüÌÌÂÂÏÍ,ÂÌÌÌÌÜüÌÌÌÌÏÍ,ÂÌÌÌÌÜüwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwÏÍÌÌÌÌÌÌÜüÌÌÌÏÏÍÌÌÌÌÌÌÜüÌÌÂÂÏÍÌÌÌÌÌÌÜüÌÌÌ,ÏÍÌÌÌÌÌÌÜüwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwÏÍÌÌÌÌÌÌÜüÌÌÌüÏÍÌÌÌÌÌÌÜüÌÌÂ,ÏÍÌÌÌÌÌÌÜüÌÌÌ,ÏÍÌÌÌÌÌÌÜüwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwÏÍÌÌüÏÌÌÜüÌÌÌÌÏÍÌÌüÏÌÌÜüÌÌÌÌÏÍÌÌ,ÂÌÌÜüÌÌÌÌÏÍÌÌ,ÂÌÌÜüwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwÏÍÌÌÿÿÌÌÜüÝÝÝÝÏÍÌÌÿÿÌÌÜüÝÝÝÝÏÍÌÌ""ÌÌÜüÝÝÝÝÏÍÌÌ""ÌÌÜüwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwÏÍÌüÿÿÏÌÜüÌÌÌÌÏÍÌüÿÿÏÌÜüÌÌÌÌÏÍÌ,""ÂÌÜüÌÌÌÌÏÍÌ,""ÂÌÜüwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww÷ÿÿÿÿÿÿÿÿÏüÿÿÏüÿÿÿÿÿÿÿÿÏüÿÿÏüÿÿÿÿÿÿÿÿÏ,""ÂüÿÿÿÿÿÿÿÿÏ,""ÂüÿÿÿÿÿÿÿÿwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwÿÌÌÌÌÌÌÌÌÿÌüÏÌÿÌÌÌÌÌÌÌÌÿÌüÏÌÿÌÌÌÌÌÌÌÌÿÌ""ÌÿÌÌÌÌÌÌÌÌÿÌ""ÌÿÌÌÌÌÌÌÌÌÿwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwÏÝÝÝÝÝÝÝÝüÌÿÿÌÏÝÝÝÝÝÝÝÝüÌÿÿÌÏÝÝÝÝÝÝÝÝüÌ,ÂÌÏÝÝÝÝÝÝÝÝüÌ,ÂÌÏÝÝÝÝÝÝÝÝüwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwÏÍÌÌÌÌÌÌÜüÌÌÌÌÏÍÌÌÌÌÌÌÜüÌÌÌÌÏÍÌÌÌÌÌÌÜüÌÌÌÌÏÍÌÌÌÌÌÌÜüÌÌÌÌÏÍÌÌÌÌÌÌÜüwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwÏÍüÏÌÌÌÌÜüÌÌÌÌÏÍÂ,ÌÌÌÌÜüÌÌÌÌÏÍüÏÌÌÌÌÜüÌÌÌÌÏÍÂ,ÌÌÌÌÜüÌÌÌÌÏÍ""ÌÌÌÌÜüwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwÏÍÏüÌÌÌÌÜüÌÌÌÌÏÍÂ,ÌÌÌÌÜüÌÌÌÌÏÍÏÌÌÌÌÌÜüÌÌÌÌÏÍÂ,ÌÌÌÌÜüÌÌÌÌÏÍÂÌÌÌÌÌÜüwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwÏÍÏüÌÌÌÌÜüÌÌÌüÏÍ""ÌÌÌÌÜüÌÌÌÿÏÍÿÿÌÌÌÌÜüÌÌÌ,ÏÍ""ÌÌÌÌÜüÌÌÌÌÏÍ"ÂÌÌÌÌÜüwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwÏÍÿÿÌÌÌÌÜüÌÌÌÏÏÍÌ,ÌÌÌÌÜüÌÌÌÏÏÍÏüÌÌÌÌÜüÌÌÌÂÏÍÌ,ÌÌÌÌÜüÌÌÌÌÏÍÌ,ÌÌÌÌÜüwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwÏÍÏüÌÌÌÌÜüÌÌÌÌÏÍÌ,ÌÌÌÌÜüÌÌÌÿÏÍÿÿÌÌÌÌÜüÌÌÌÌÏÍÌ,ÌÌÌÌÜüÌÌÌÌÏÍ"ÂÌÌÌÌÜüwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwÏÍÌÌÌÌÌÌÜüÌÌÌüÏÍÌÌÌÌÌÌÜüÌÌÌÌÏÍÌÌÌÌÌÌÜüÌÌÌÂÏÍÌÌÌÌÌÌÜüÌÌÌÂÏÍÌÌÌÌÌÌÜüwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwÏÍÌÌÌÌÌÌÜüÌÌÌÿÏÍÌÌÌÌÌÌÜüÌÌÌüÏÍÌÌÌÌÌÌÜüÌÌÌ,ÏÍÌÌÌÌÌÌÜüÌÌÌ,ÏÍÌÌÌÌÌÌÜüwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwÏÍÌÌüÏÌÌÜüÌÌÌÌÏÍÌÌ,ÂÌÌÜüÌÌÌÌÏÍÌÌüÏÌÌÜüÌÌÌÌÏÍÌ,Â,ÂÌÜüÌÌÌÌÏÍÌ,Â,ÂÌÜüwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwÏÍÌÌÿÿÌÌÜüÝÝÝÝÏÍÌÌ""ÌÌÜüÝÝÝÝÏÍÌÌÿÿÌÌÜüÝÝÝÝÏÍÌ""""ÌÜüÝÝÝÝÏÍÌ""""ÌÜüwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwÏÍÌüÿÿÏÌÜüÌÌÌÌÏÍÌ,""ÂÌÜüÌÌÌÌÏÍÌüÿÿÏÌÜüÌÌÌÌÏÍÌ""""ÌÜüÌÌÌÌÏÍÌ""""ÌÜüwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww÷ÿÿÿÿÿÿÿÿÏüÿÿÏüÿÿÿÿÿÿÿÿÏ,""ÂüÿÿÿÿÿÿÿÿÏüÿÿÏüÿÿÿÿÿÿÿÿÏ,""ÂüÿÿÿÿÿÿÿÿÏ,""ÂüÿÿÿÿÿÿÿÿwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwÿÌÌÌÌÌÌÌÌÿÌüÏÌÿÌÌÌÌÌÌÌÌÿÌ""ÌÿÌÌÌÌÌÌÌÌÿÌüÏÌÿÌÌÌÌÌÌÌÌÿÌ""ÌÿÌÌÌÌÌÌÌÌÿÌ""ÌÿÌÌÌÌÌÌÌÌÿwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwÏÝÝÝÝÝÝÝÝüÌÿÿÌÏÝÝÝÝÝÝÝÝüÌ,ÂÌÏÝÝÝÝÝÝÝÝüÌÿÿÌÏÝÝÝÝÝÝÝÝüÌ,ÂÌÏÝÝÝÝÝÝÝÝüÌ,ÂÌÏÝÝÝÝÝÝÝÝüwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwÏÍÌÌÌÌÌÌÜüÌÌÌÌÏÍÌÌÌÌÌÌÜüÌÌÌÌÏÍÌÌÌÌÌÌÜüÌÌÌÌÏÍÌÌÌÌÌÌÜüÌÌÌÌÏÍÌÌÌÌÌÌÜüÌÌÌÌÏÍÌÌÌÌÌÌÜüwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwÏÍ""ÌÌÌÌÜüÌÌÌÌÏÍÏüÌÌÌÌÜüÌÌÌÌÏÍ,ÂÌÌÌÌÜüÌÌÌÌÏÍÂ,ÌÌÌÌÜüÌÌÌÌÏÍ,ÂÌÌÌÌÜüÌÌÌÌÏÍÏüÏÌÌÌÜüwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwÏÍÂ,ÌÌÌÌÜüÌÌÌÌÏÍÏüÌÌÌÌÜüÌÌÌÌÏÍÂÌÌÌÌÌÜüÌÌÌÌÏÍÂÂÌÌÌÌÜüÌÌÌÌÏÍÂ,ÌÌÌÌÜüÌÌÌÌÏÍÏÏüÌÌÌÜüwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwÏÍ""ÌÌÌÌÜüÌÌÌüÏÍÿÿÌÌÌÌÜüÌÌÌÂÏÍ""ÌÌÌÌÜüÌÌÌüÏÍ"ÌÌÌÌÌÜüÌÌÌÂÏÍÌÂÌÌÌÌÜüÌÌÌ"ÏÍÏÏüÌÌÌÜüwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwÏÍÌ,ÌÌÌÌÜüÌÌÌÏÏÍÌüÌÌÌÌÜüÌÌÌÂÏÍÂ,ÌÌÌÌÜüÌÌÌÏÏÍÂÂÌÌÌÌÜüÌÌÌÂÏÍ,ÌÌÌÌÌÜüÌÌÌÂÏÍÏÏüÌÌÌÜüwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwÏÍ,ÂÌÌÌÌÜüÌÌÌÏÏÍÌüÌÌÌÌÜüÌÌÌ"ÏÍ""ÌÌÌÌÜüÌÌÌÿÏÍÂ,ÌÌÌÌÜüÌÌÌ"ÏÍ""ÌÌÌÌÜüÌÌÌ"ÏÍÏüÏÌÌÌÜüwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwÏÍÌÌÌÌÌÌÜüÌÌÌÿÏÍÌÌÌÌÌÌÜüÌÌÌÌÏÍÌÌÌÌÌÌÜüÌÌÌÏÏÍÌÌÌÌÌÌÜüÌÌÌÌÏÍÌÌÌÌÌÌÜüÌÌÌÌÏÍÌÌÌÌÌÌÜüwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwÏÍÌÌÌÌÌÌÜüÌÌÌÏÏÍÌÌÌÌÌÌÜüÌÌÌÌÏÍÌÌÌÌÌÌÜüÌÌÌÿÏÍÌÌÌÌÌÌÜüÌÌÌÌÏÍÌÌÌÌÌÌÜüÌÌÌ"ÏÍÌÌÌÌÌÌÜüwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwÏÍÌÌ,ÂÌÌÜüÌÌÌÌÏÍÌÌüÏÌÌÜüÌÌÌÌÏÍÌ,Â,ÂÌÜüÌÌÌÌÏÍÌ,Â,ÂÌÜüÌÌÌÌÏÍÌ,Â,ÂÌÜüÌÌÌÌÏÍÌÌüÏÌÌÜüwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwÏÍÌÌ""ÌÌÜüÝÝÝÝÏÍÌÌÿÿÌÌÜüÝÝÝÝÏÍÌ""""ÌÜüÝÝÝÝÏÍÌ""""ÌÜüÝÝÝÝÏÍÌ""""ÌÜüÝÝÝÝÏÍÌÌÿÿÌÌÜüwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwÏÍÌ,""ÂÌÜüÌÌÌÌÏÍÌüÿÿÏÌÜüÌÌÌÌÏÍÌ""""ÌÜüÌÌÌÌÏÍÌ""""ÌÜüÌÌÌÌÏÍÌ""""ÌÜüÌÌÌÌÏÍÌüÿÿÏÌÜüwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww÷ÿÿÿÿÿÿÿÿÏ,""ÂüÿÿÿÿÿÿÿÿÏüÿÿÏüÿÿÿÿÿÿÿÿÏ,""ÂüÿÿÿÿÿÿÿÿÏ,""ÂüÿÿÿÿÿÿÿÿÏ,""ÂüÿÿÿÿÿÿÿÿÏüÿÿÏüÿÿÿÿÿÿÿÿwwwwwwwwwwwwwwwwwwwwwwwwwwÿÌÌÌÌÌÌÌÌÿÌ""ÌÿÌÌÌÌÌÌÌÌÿÌüÏÌÿÌÌÌÌÌÌÌÌÿÌ""ÌÿÌÌÌÌÌÌÌÌÿÌ""ÌÿÌÌÌÌÌÌÌÌÿÌ""ÌÿÌÌÌÌÌÌÌÌÿÌüÏÌÿÌÌÌÌÌÌÌÌÿwwwwwwwwwwwwwwwwwwwwwwwwwwÏÝÝÝÝÝÝÝÝüÌ,ÂÌÏÝÝÝÝÝÝÝÝüÌÿÿÌÏÝÝÝÝÝÝÝÝüÌ,ÂÌÏÝÝÝÝÝÝÝÝüÌ,ÂÌÏÝÝÝÝÝÝÝÝüÌ,ÂÌÏÝÝÝÝÝÝÝÝüÌÿÿÌÏÝÝÝÝÝÝÝÝüwwwwwwwwwwwwwwwwwwwwwwwwwwÏÍÌÌÌÌÌÌÜüÌÌÌÌÏÍÌÌÌÌÌÌÜüÌÌÌÌÏÍÌÌÌÌÌÌÜüÌÌÌÌÏÍÌÌÌÌÌÌÜüÌÌÌÌÏÍÌÌÌÌÌÌÜüÌÌÌÌÏÍÌÌÌÌÌÌÜüÌÌÌÌÏÍÌÌÌÌÌÌÜüwwwwwwwwwwwwwwwwwwwwwwwwwwÏÍÂ,ÂÌÌÌÜüÌÌÌÌÏÍÿÿÌÌÌÌÜüÌÌÌÌÏÍÏüÌÌÌÌÜüÌÌÌÌÏÍüÏÌÌÌÌÜüÌÌÌÌÏÍüÏÌÌÌÌÜüÌÌÌÌÏÍ,ÂÌÌÌÌÜüÌÌÌÌÏÍ""ÌÌÌÌÜüwwwwwwwwwwwwwwwwwwwwwwwwwwÏÍÂÂ,ÌÌÌÜüÌÌÌÌÏÍÏÌÌÌÌÌÜüÌÌÌÌÏÍÏÏÌÌÌÌÜüÌÌÌÌÏÍÏüÌÌÌÌÜüÌÌÌÌÏÍÏüÌÌÌÌÜüÌÌÌÌÏÍÂ,ÌÌÌÌÜüÌÌÌÌÏÍÂÌÌÌÌÌÜüwwwwwwwwwwwwwwwwwwwwwwwwwwÏÍÂÂ,ÌÌÌÜüÌÌÌ"ÏÍÿÏÌÌÌÌÜüÌÌÌÏÏÍÿÌÌÌÌÌÜüÌÌÌ,ÏÍÌÏÌÌÌÌÜüÌÌÌÂÏÍüÏÌÌÌÌÜüÌÌÌ,ÏÍ,ÂÌÌÌÌÜüÌÌÏüÏÍ"ÂÌÌÌÌÜüwwwwwwwwwwwwwwwwwwwwwwwwwwÏÍÂÂ,ÌÌÌÜüÌÌÌÂÏÍÌüÌÌÌÌÜüÌÌÌÏÏÍÏÏÌÌÌÌÜüÌÌÌÂÏÍÏüÌÌÌÌÜüÌÌÌÂÏÍÏüÌÌÌÌÜüÌÌÌÂÏÍÂ,ÌÌÌÌÜüÌÌÏÏÏÍÌ,ÌÌÌÌÜüwwwwwwwwwwwwwwwwwwwwwwwwwwÏÍÂ,ÂÌÌÌÜüÌÌÌ"ÏÍÿÏÌÌÌÌÜüÌÌÌÿÏÍÏüÌÌÌÌÜüÌÌÌ"ÏÍüÏÌÌÌÌÜüÌÌÌ"ÏÍüÏÌÌÌÌÜüÌÌÌÌÏÍ,ÂÌÌÌÌÜüÌÌÏÏÏÍ"ÂÌÌÌÌÜüwwwwwwwwwwwwwwwwwwwwwwwwwwÏÍÌÌÌÌÌÌÜüÌÌÌÌÏÍÌÌÌÌÌÌÜüÌÌÌÌÏÍÌÌÌÌÌÌÜüÌÌÌÂÏÍÌÌÌÌÌÌÜüÌÌÌÂÏÍÌÌÌÌÌÌÜüÌÌÌ,ÏÍÌÌÌÌÌÌÜüÌÌÏÏÏÍÌÌÌÌÌÌÜüwwwwwwwwwwwwwwwwwwwwwwwwwwÏÍÌÌÌÌÌÌÜüÌÌÌ,ÏÍÌÌÌÌÌÌÜüÌÌÌÌÏÍÌÌÌÌÌÌÜüÌÌÌ"ÏÍÌÌÌÌÌÌÜüÌÌÌÂÏÍÌÌÌÌÌÌÜüÌÌÌ"ÏÍÌÌÌÌÌÌÜüÌÌÏüÏÍÌÌÌÌÌÌÜüwwwwwwwwwwwwwwwwwwwwwwwwwwÏÍÌ,Â,ÂÌÜüÌÌÌÌÏÍÌÌüÏÌÌÜüÌÌÌÌÏÍÌÌüÏÌÌÜüÌÌÌÌÏÍÌÌüÏÌÌÜüÌÌÌÌÏÍÌÌüÏÌÌÜüÌÌÌÌÏÍÌÌ,ÂÌÌÜüÌÌÌÌÏÍÌÌ,ÂÌÌÜüwwwwwwwwwwwwwwwwwwwwwwwwwwÏÍÌ""""ÌÜüÝÝÝÝÏÍÌÌÿÿÌÌÜüÝÝÝÝÏÍÌÌüÏÌÌÜüÝÝÝÝÏÍÌÌÿÿÌÌÜüÝÝÝÝÏÍÌÌÿÿÌÌÜüÝÝÝÝÏÍÌÌ""ÌÌÜüÝÝÝÝÏÍÌÌ""ÌÌÜüwwwwwwwwwwwwwwwwwwwwwwwwwwÏÍÌ""""ÌÜüÌÌÌÌÏÍÌüÿÿÏÌÜüÌÌÌÌÏÍÌüÏüÏÌÜüÌÌÌÌÏÍÌüÿÿÏÌÜüÌÌÌÌÏÍÌüÿÿÏÌÜüÌÌÌÌÏÍÌ,""ÂÌÜüÌÌÌÌÏÍÌ,""ÂÌÜüwwwwwwwwwwwwwwwwwwwwwwwwwwÏÍÌ,""ÂÌÜüÿÿÿÿÏÍÌüÿÿÏÌÜüÿÿÿÿÏÍÌüÏüÏÌÜüÿÿÿÿÏÍÌüÿÿÏÌÜüÿÿÿÿÏÍÌüÿÿÏÌÜüÿÿÿÿÏÍÌ,""ÂÌÜüÿÿÿÿÏÍÌ,""ÂÌÜüwwwwwwwwwwwwwwwwwwwwwwwwwwÏÍÌÌ""ÌÌÜüwwwwÏÍÌÌüÏÌÌÜüwwwwÏÍÌÌüÏÌÌÜüwwwwÏÍÌÌüÏÌÌÜüwwwwÏÍÌÌüÏÌÌÜüwwwwÏÍÌÌ""ÌÌÜüwwwwÏÍÌÌ""ÌÌÜüwwwwwwwwwwwwwwwwwwwwwwwwwwÏÍÌÌ,ÂÌÌÜüwwwwÏÍÌÌÿÿÌÌÜüwwwwÏÍÌÌÿÿÌÌÜüwwwwÏÍÌÌÿÿÌÌÜüwwwwÏÍÌÌÿÿÌÌÜüwwwwÏÍÌÌ,ÂÌÌÜüwwwwÏÍÌÌ,ÂÌÌÜüwwwwwwwwwwwwwwwwwwwwwwwwwwÏÍÌÌÌÌÌÌÜüwwwwÏÍÌÌÌÌÌÌÜüwwwwÏÍÌÌÌÌÌÌÜüwwwwÏÍÌÌÌÌÌÌÜüwwwwÏÍÌÌÌÌÌÌÜüwwwwÏÍÌÌÌÌÌÌÜüwwwwÏÍÌÌÌÌÌÌÜüwwwwwwwwwwwwwwwwwwwwwwwwwwÏÍÌÌÌÌÌÌÜüwwwwÏÍÌÌÌÌÌÌÜüwwwwÏÍÌÌÌÌÌÌÜüwwwwÏÍÌÌÌÌÌÌÜüwwwwÏÍÌÌÌÌÌÌÜüwwwwÏÍÌÌÌÌÌÌÜüwwwwÏÍÌÌÌÌÌÌÜüwwwwwwwwwwwwwwwwwwwwwwwwwwÏÍÌÌÌÌÌÌÜüwwwwÏÍÌÌÌÌÌÌÜüwwwwÏÍÌÌÌÌÌÌÜüwwwwÏÍÌÌÌÌÌÌÜüwwwwÏÍÌÌÌÌÌÌÜüwwwwÏÍÌÌÌÌÌÌÜüwwwwÏÍÌÌÌÌÌÌÜüwwwwwwwwwwwwwwwwwwwwwwwwwwÏÍÌÌÌÂ,ÂÜüwwwwÏÍÌÌÌÌÿÿÜüwwwwÏÍÌÌÌÌÏüÜüwwwwÏÍÌÌÌÌüÏÜüwwwwÏÍÌÌÌÌüÏÜüwwwwÏÍÌÌÌÌ,ÂÜüwwwwÏÍÌÌÌÌ""ÜüwwwwwwwwwwwwwwwwwwwwwwwwwwÏÍÌÌÌÂÂ,ÜüwwwwÏÍÌÌÌÌÏÌÜüwwwwÏÍÌÌÌÌÏÏÜüwwwwÏÍÌÌÌÌÏüÜüwwwwÏÍÌÌÌÌÏüÜüwwwwÏÍÌÌÌÌÂ,ÜüwwwwÏÍÌÌÌÌÂÌÜüwwwwwwwwwwwwwwwwwwwwwwwwwwÏÍÌÌÌÂÂ,ÜüwwwwÏÍÌÌÌÌÿÏÜüwwwwÏÍÌÌÌÌÿÌÜüwwwwÏÍÌÌÌÌÌÏÜüwwwwÏÍÌÌÌÌüÏÜüwwwwÏÍÌÌÌÌ,ÂÜüwwwwÏÍÌÌÌÌ"ÂÜüwwwwwwwwwwwwwwwwwwwwwwwwwwÏÍÌÌÌÂÂ,ÜüwwwwÏÍÌÌÌÌÌüÜüwwwwÏÍÌÌÌÌÏÏÜüwwwwÏÍÌÌÌÌÏüÜüwwwwÏÍÌÌÌÌÏüÜüwwwwÏÍÌÌÌÌÂ,ÜüwwwwÏÍÌÌÌÌÌ,ÜüwwwwwwwwwwwwwwwwwwwwwwwwwwÏÍÌÌÌÂ,ÂÜüwwwwÏÍÌÌÌÌÿÏÜüwwwwÏÍÌÌÌÌÏüÜüwwwwÏÍÌÌÌÌüÏÜüwwwwÏÍÌÌÌÌüÏÜüwwwwÏÍÌÌÌÌ,ÂÜüwwwwÏÍÌÌÌÌ"ÂÜüwwwwwwwwwwwwwwwwwwwwwwwwwwÏÍÌÌÌÌÌÌÜüwwwwÏÍÌÌÌÌÌÌÜüwwwwÏÍÌÌÌÌÌÌÜüwwwwÏÍÌÌÌÌÌÌÜüwwwwÏÍÌÌÌÌÌÌÜüwwwwÏÍÌÌÌÌÌÌÜüwwwwÏÍÌÌÌÌÌÌÜüwwwwwwwwwwwwwwwwwwwwwwwwwwÏÝÝÝÝÝÝÝÝüwwwwÏÝÝÝÝÝÝÝÝüwwwwÏÝÝÝÝÝÝÝÝüwwwwÏÝÝÝÝÝÝÝÝüwwwwÏÝÝÝÝÝÝÝÝüwwwwÏÝÝÝÝÝÝÝÝüwwwwÏÝÝÝÝÝÝÝÝüwwwwwwwwwwwwwwwwwwwwwwwwwwÿÌÌÌÌÌÌÌÌÿwwwwÿÌÌÌÌÌÌÌÌÿwwwwÿÌÌÌÌÌÌÌÌÿwwwwÿÌÌÌÌÌÌÌÌÿwwwwÿÌÌÌÌÌÌÌÌÿwwwwÿÌÌÌÌÌÌÌÌÿwwwwÿÌÌÌÌÌÌÌÌÿwwwwwwwwwwwwwwwwwwwwwwwwww÷ÿÿÿÿÿÿÿÿwwww÷ÿÿÿÿÿÿÿÿwwww÷ÿÿÿÿÿÿÿÿwwww÷ÿÿÿÿÿÿÿÿwwww÷ÿÿÿÿÿÿÿÿwwww÷ÿÿÿÿÿÿÿÿwwww÷ÿÿÿÿÿÿÿÿwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwèG // title:   Pyramid Solitaire
// author:  denis1080
// desc:    Clear the pyramid and the deck by pairing cards equal to 13
// site:    N/A
// license: MIT License
// version: 0.1
// script:  wren
// saveid:  PyramidSolitaire_denis1080

// Ideas:
// Pyramid solitaire (easy)
// Tri-peak solitaire (medium)
// Penguin solitaire (hard)

import "random" for Random

class Color {
	// pal(c0, c1) assigns draws of color c0 to c1 instead
	static pal(c0, c1) {
		TIC.poke4(0x3FF0*2+c0,c1)
	}

	// pal() resets color mapping
	static pal() {
		for (i in 0..15) {
			TIC.poke4(0x3FF0*2+i,i)
		}
	}
}

// https://easings.net/
var EasingLinear = Fn.new {|x|
	return x
}

var EasingInQuad = Fn.new {|x|
	return x * x
}

var EasingOutQuad = Fn.new {|x|
	return 1 - (1 - x) * (1 - x)
}

var EasingInOutQuad = Fn.new {|x|
	if (x < 0.5) {
		return 2 * x * x
	} else {
		return 1 - ((-2 * x + 2) * (-2 * x + 2)) / 2
	}
}

class ID {
	static init() {
		__nextID = -1
	}
	// 0, 1, 2, ...
	static new() {
		__nextID = __nextID + 1
		return __nextID
	}
}

class Animate {
	static init() {
		__animations = []
	}

	// entity must have getters and setters for x and y.
	static xy(entity, endX, endY, duration, easingFunc) {
		var startX = entity.x
		var startY = entity.y
		var anim = Fiber.new {
			for (i in 1..duration) {
				if (i == duration) {
					entity.x = endX
					entity.y = endY
					return
				}
				var progress = easingFunc.call(i / duration)
				entity.x = startX + (endX - startX) * progress
				entity.y = startY + (endY - startY) * progress
				Fiber.yield()
			}
		}
		__animations.add(anim)
	}

	static single(startValue, endValue, duration, easingFunc, assignValueFunc) {
		var anim = Fiber.new {
			for (i in 1..duration) {
				if (i == duration) {
					assignValueFunc.call(endValue)
					return
				}
				var progress = easingFunc.call(i / duration)
				var value = startValue + (endValue - startValue) * progress
				assignValueFunc.call(value)
				Fiber.yield()
			}
		}
		__animations.add(anim)
	}

	static update() {
		for (anim in __animations) {
			anim.call()
		}
		if (__animations.count > 0) {
			__animations = __animations.where {|anim| !anim.isDone}.toList
		}
	}
}

class Timer {
	static init() {
		__delayedCalls = []
	}

	static delay(delay, callback) {
		var delayedCall = Fiber.new {
			for (i in 1..delay) {
				Fiber.yield()
			}
			callback.call()
		}
		__delayedCalls.add(delayedCall)
	}

	static update() {
		for (dc in __delayedCalls) {
			dc.call()
		}
		if (__delayedCalls.count > 0) {
			__delayedCalls = __delayedCalls.where {|dc| !dc.isDone}.toList
		}
	}
}

class Savefile {
	static getPlayerPoints() {
		return TIC.pmem(0)
	}
	static setPlayerPoints(points) {
		// var currentPoints = getPlayerPoints()
		// TIC.pmem(0, currentPoints + points)
		TIC.pmem(0, points)
	}
}

class Card {
	static init() {
		__rankSpriteIDs = {
			1: 64,
			2: 67,
			3: 70,
			4: 73,
			5: 76,
			6: 128,
			7: 131,
			8: 134,
			9: 137,
			10: 140,
			11: 192,
			12: 195,
			13: 198
		}
		__suitSpriteIDs = {
			"club": 3,
			"diamond": 6,
			"heart": 9,
			"spade": 12
		}
		__suitColors = {
			"club": 15,
			"diamond": 2,
			"heart": 2,
			"spade": 15
		}
		__cardFrontSelectedSpriteID = 256
	}

	construct new(x, y, rank, suit) {
		_x = x
		_y = y
		_w = 20
		_h = 29
		_cardBackSpriteID = 0
		_cardBackXOffset = 0
		_cardBackYOffset = 0
		_rank = rank
		_cardFrontRankSpriteID = __rankSpriteIDs[rank]
		_cardFrontSuitSpriteID = __suitSpriteIDs[suit]
		_cardFrontSuitColor = __suitColors[suit]
		_cardFrontXOffset = 0
		_cardFrontYOffset = 29
		_selected = false
	}

	x { _x }

	x=(value) { _x = value }

	y { _y }

	y=(value) { _y = value }

	rank { _rank }

	selected { _selected }

	pyramidIdx { _pyramidIdx }

	pyramidIdx=(value) { _pyramidIdx = value }

	select() {
		_selected = !_selected
	}

	selectedFalse() {
		_selected = false
	}

	// flip starts the card flipping animation
	flip(duration) {
		Animate.single(0, 29, duration, EasingOutQuad) {|newValue|
			_cardFrontYOffset = 29 - newValue
			_cardBackYOffset = newValue
		}
	}

	unflip(duration) {
		Animate.single(0, 29, duration, EasingOutQuad) {|newValue|
			_cardFrontYOffset = newValue
			_cardBackYOffset = 29 - newValue
		}
	}

	// move the card over time
	move(newX, newY, duration) {
		Animate.xy(this, newX, newY, duration, EasingOutQuad)
	}

	draw() {
		TIC.clip(_x, _y, _w, _h)
		if (_cardBackYOffset < _h) {
			TIC.spr(_cardBackSpriteID, _x + _cardBackXOffset, _y + _cardBackYOffset, 0, 1, 0, 0, 3, 4)
		}
		if (_cardFrontYOffset < _h) {
			TIC.spr(_cardFrontSuitSpriteID, _x + _cardFrontXOffset, _y + _cardFrontYOffset, 0, 1, 0, 0, 3, 4)
			Color.pal(5, _cardFrontSuitColor)
			// Can't set colorkey as a list in wren :(
			TIC.spr(_cardFrontRankSpriteID, _x + _cardFrontXOffset, _y + _cardFrontYOffset, 0, 1, 0, 0, 3, 4)
			Color.pal()
		}
		TIC.clip()
		if (_selected) {
			// [-1, -1] offset due to how it's laid out in the sprite sheet
			TIC.spr(__cardFrontSelectedSpriteID, _x - 1, _y - 1, 0, 1, 0, 0, 3, 4)
		}
	}
}

class Pile {
	static init() {
		__pileBackgroundSpriteID = 259
	}

	construct newEmpty(x, y) {
		_x = x
		_y = y
		_cards = []
	}
	construct newFullDeck(x, y) {
		_x = x
		_y = y
		_cards = []
		for (rank in 1..13) {
		// NOTE: For shortened game
		// for (rank in [1, 12, 13]) {
			for (suit in ["club", "diamond", "heart", "spade"]) {
				_cards.add(Card.new(_x, _y, rank, suit))
			}
		}
		// Shuffle list of cards
		var rnd = Random.new()
		for (i in _cards.count - 1..0) {
			var randomIndex = rnd.int(i + 1)
			_cards.swap(i, randomIndex)
		}
	}

	add(card) {
		_cards.add(card)
		card.move(_x, _y, 45)
	}

	addMany(cards) {
		for (card in cards) {
			add(card)
		}
	}

	topCard() {
		if (_cards.count == 0) {
			return null
		}
		return _cards[_cards.count - 1]
	}

	takeTopCard() {
		if (_cards.count == 0) {
			return null
		}
		return _cards.removeAt(_cards.count - 1)
	}

	draw() {
		TIC.spr(__pileBackgroundSpriteID, _x, _y, 0, 1, 0, 0, 3, 4)
		for (card in _cards) {
			card.draw()
		}
	}
}

class Deck {
	construct new(x, y) {
		_id = ID.new()
		_x = x
		_y = y
		_drawPile = Pile.newFullDeck(_x, _y)
		_discardPile1 = Pile.newEmpty(_x + 24, _y)
		_discardPile2 = Pile.newEmpty(_x + 48, _y)
		_throwawayPile = Pile.newEmpty(_x - 144, _y)
		_cursorIdx = 0
		_deckTraversals = 0
		_playerPoints = Savefile.getPlayerPoints()
	}

	id { _id }

	drawPile { _drawPile }

	discardPile1 { _discardPile1 }

	discardPile2 { _discardPile2 }

	throwawayPile { _throwawayPile }

	drawPileSelected { _cursorIdx == 0 }

	// Stop counting after 99 so the printed value doesn't overflow the screen
	deckTraversals { 99.min(_deckTraversals) }

	availablePoints { 0.max(3 - deckTraversals) }

	addPlayerPoints() {
		_playerPoints = _playerPoints + availablePoints
		Savefile.setPlayerPoints(_playerPoints)
	}

	selectedCards {
		var sc = []
		var topCard = discardPile1.topCard()
		if (topCard && topCard.selected) {
			sc.add(topCard)
		}
		topCard = discardPile2.topCard()
		if (topCard && topCard.selected) {
			sc.add(topCard)
		}
		return sc
	}

	takeSelectedCards() {
		var sc = []
		var topCard = discardPile1.topCard()
		if (topCard && topCard.selected) {
			topCard.selectedFalse()
			sc.add(discardPile1.takeTopCard())
		}
		topCard = discardPile2.topCard()
		if (topCard && topCard.selected) {
			topCard.selectedFalse()
			sc.add(discardPile2.takeTopCard())
		}
		return sc
	}

	cursorCard() {
		if (_cursorIdx == 0) {
			var topCard = drawPile.topCard()
			if (topCard) {
				return topCard
			}
		} else if (_cursorIdx == 1) {
			var topCard = discardPile1.topCard()
			if (topCard) {
				return topCard
			}
		} else if (_cursorIdx == 2) {
			var topCard = discardPile2.topCard()
			if (topCard) {
				return topCard
			}
		}
		return null
	}

	left() {
		if (_cursorIdx == 2) {
			var topCard = discardPile1.topCard()
			if (topCard) {
				_cursorIdx = 1
				return
			}
		}
		if (_cursorIdx >= 1) {
			// var topCard = drawPile.topCard()
			// if (topCard) {
			_cursorIdx = 0
			return
			// }
		}
	}

	right() {
		if (_cursorIdx == 0) {
			var topCard = discardPile1.topCard()
			if (topCard) {
				_cursorIdx = 1
				return
			}
		}
		if (_cursorIdx <= 1) {
			var topCard = discardPile2.topCard()
			if (topCard) {
				_cursorIdx = 2
				return
			}
		}
	}

	reposition() {
		if (_cursorIdx == 1 && !discardPile1.topCard() ||
			_cursorIdx == 2 && !discardPile2.topCard()) {
			_cursorIdx = 0
			return
		}
	}

	select() {
		if (_cursorIdx == 0) {
			var drawCard = _drawPile.takeTopCard()
			var discard1Card = _discardPile1.takeTopCard()
			if (drawCard) {
				// Shift cards over
				var discard2Card = _discardPile2.topCard()
				if (discard2Card) {
					discard2Card.selectedFalse()
				}
				if (discard1Card) {
					discard1Card.selectedFalse()
					_discardPile2.add(discard1Card)
				}
				drawCard.flip(45)
				_discardPile1.add(drawCard)
			} else {
				// Reassemble draw pile from discard piles
				_deckTraversals = _deckTraversals + 1
				if (discard1Card) {
					discard1Card.selectedFalse()
					discard1Card.unflip(45)
					_drawPile.add(discard1Card)
				}
				while (true) {
					var discard2Card = _discardPile2.takeTopCard()
					if (discard2Card) {
						discard2Card.selectedFalse()
						discard2Card.unflip(45)
						_drawPile.add(discard2Card)
					} else {
						break
					}
				}
				return
			}
		} else if (_cursorIdx == 1) {
			discardPile1.topCard().select()
		} else if (_cursorIdx == 2) {
			discardPile2.topCard().select()
		}
		return null
	}

	draw() {
		_drawPile.draw()
		_discardPile1.draw()
		_discardPile2.draw()
		_throwawayPile.draw()
		TIC.print("Points: ", 2, 2)
		TIC.print(_playerPoints.toString, 42, 2)
		TIC.print("Deck traversals: ", 132, 2)
		TIC.print(deckTraversals.toString, 226, 2)
		TIC.print("Available points: ", 132, 9)
		TIC.print(availablePoints.toString, 226, 9)
	}
}

class Pyramid {
	static init() {
		__cardPositionOffset = [
			[0, 0],
			[-14, 14], [14, 14],
			[-28, 28], [0, 28], [28, 28],
			[-42, 42], [-14, 42], [14, 42], [42, 42],
			[-56, 56], [-28, 56], [0, 56], [28, 56], [56, 56],
			[-70, 70], [-42, 70], [-14, 70], [14, 70], [42, 70], [70, 70],
			[-84, 84], [-56, 84], [-28, 84], [0, 84], [28, 84], [56, 84], [84, 84]
		]
		// For each _cards idx, describes indices of child cards (below-left and below-right)
		__childIndex = [
			[1, 2],
			[3, 4], [4, 5],
			[6, 7], [7, 8], [8, 9],
			[10, 11], [11, 12], [12, 13], [13, 14],
			[15, 16], [16, 17], [17, 18], [18, 19], [19, 20],
			[21, 22], [22, 23], [23, 24], [24, 25], [25, 26], [26, 27],
			[], [], [], [], [], [], []
		]
		// NOTE: For shortened game
		// __childIndex = [
		// 	[1, 2],
		// 	[3, 4], [4, 5],
		// 	[], [], [],
		// 	[], [], [], [],
		// 	[], [], [], [], [],
		// 	[], [], [], [], [], [],
		// 	[], [], [], [], [], [], []
		// ]
	}

	construct new(x, y) {
		// xy coordinates of the top card
		_id = ID.new()
		_x = x
		_y = y
		_cards = []
		_cursorIdx = 0
	}

	id { _id }

	addCard(card) {
		var offsets = __cardPositionOffset[_cards.count]
		card.move(_x + offsets[0], _y + offsets[1], 75 - _cards.count)
		card.flip(45 - _cards.count)
		card.pyramidIdx = _cards.count
		_cards.add(card)
	}

	removeCard(card) {
		// Replacing the card with null to preserve pyramid traversal behaviour
		_cards[card.pyramidIdx] = null
	}

	// If no cards are selectable, the pyramid is empty (part of the win condition)
	selectableCards {
		// For any given card in the pyramid, if there's a child card present, the card can't be selected.
		var selectable = []
		for (i in 0.._cards.count - 1) {
			if (!_cards[i]) {
				continue
			}
			var canBeSelected = true
			for (childIdx in __childIndex[i]) {
				if (_cards[childIdx]) {
					canBeSelected = false
				}
			}
			if (canBeSelected) {
				selectable.add(_cards[i])
			}
		}
		selectable.sort {|a, b| a.x < b.x}

		return selectable
	}

	selectedCards {
		return _cards.where {|card| card && card.selected}.toList
	}

	cursorCard() {
		if (_cursorIdx < 0) {
			return null
		}
		return selectableCards[_cursorIdx]
	}

	left() {
		_cursorIdx = 0.max(_cursorIdx - 1)
	}

	right() {
		_cursorIdx = (selectableCards.count - 1).min(_cursorIdx + 1)
	}

	reposition() {
		// Risk of _cursorIdx being larger than the new selectableCards set
		_cursorIdx = (selectableCards.count - 1).min(_cursorIdx)
	}

	select() {
		selectableCards[_cursorIdx].select()
	}

	takeSelectedCards() {
		var removedCards = []
		for (i in _cards.count - 1..0) {
			var card = _cards[i]
			if (card && card.selected) {
				removedCards.add(card)
				card.select()
				_cards[i] = null
			}
		}
		return removedCards
	}

	draw() {
		for (card in _cards) {
			if (card) {
				card.draw()
			}
		}
	}
}

class Cursor {
	static init() {
		__pointerSpriteID = 15
		__reinitDrawPileSpriteID = 31
	}

	construct new(pyramid, deck) {
		_pyramid = pyramid
		_pyramidID = pyramid.id
		_deck = deck
		_deckID = deck.id
		_pointerPointFrames = 0
		_isGameComplete = false
		_gameDoneBannerX = -240

		var cursorFirstCard = _pyramid.selectableCards[0]
		startOnFirstCard(cursorFirstCard)
	}

	isGameComplete { _isGameComplete }

	// Start off screen
	startOnFirstCard(card) {
		_pyramidOrDeckSelected = _pyramidID
		var x = card.x + 6
		var y = card.y + 30

		// Set card further down...
		_x = x
		_y = y + 16
		// ... to have the cursor appear from below the screen
		moveSlow(x, y)
	}

	x { _x }

	x=(value) { _x = value }

	y { _y }

	y=(value) { _y = value }

	moveToCard(card) {
		var x = card.x + 6
		var y = card.y + 30
		move(x, y)
	}

	moveToCardSlow(card) {
		var x = card.x + 6
		var y = card.y + 30
		moveSlow(x, y)
	}

	// move over time
	move(newX, newY) {
		Animate.xy(this, newX, newY, 8, EasingLinear)
	}

	// move over time
	moveSlow(newX, newY) {
		Animate.xy(this, newX, newY, 15, EasingLinear)
	}

	left() {
		if (_pyramidOrDeckSelected == _pyramidID) {
			_pyramid.left()
			moveToCard(_pyramid.cursorCard())
		} else if (_pyramidOrDeckSelected == _deckID) {
			_deck.left()
			var card = _deck.cursorCard()
			if (card) {
				moveToCard(card)
			} else if (_deck.drawPileSelected) {
				move(166, 46)
			}
		}
	}

	right() {
		if (_pyramidOrDeckSelected == _pyramidID) {
			_pyramid.right()
			moveToCard(_pyramid.cursorCard())
		} else if (_pyramidOrDeckSelected == _deckID) {
			_deck.right()
			var card = _deck.cursorCard()
			if (card) {
				moveToCard(card)
			}
		}
	}

	up() {
		if (_pyramidOrDeckSelected == _pyramidID) {
			_pyramidOrDeckSelected = _deckID
			var card = _deck.cursorCard()
			if (card) {
				moveToCardSlow(card)
			} else if (_deck.drawPileSelected) {
				moveSlow(166, 42)
			}
		}
	}

	down() {
		if (_pyramidOrDeckSelected == _deckID) {
			_pyramidOrDeckSelected = _pyramidID
			moveToCardSlow(_pyramid.cursorCard())
		}
	}

	reposition() {
		_pyramid.reposition()
		_deck.reposition()
		if (_pyramidOrDeckSelected == _pyramidID) {
			var card = _pyramid.cursorCard()
			if (card) {
				moveToCard(card)
			}
		} else if (_pyramidOrDeckSelected == _deckID) {
			var card = _deck.cursorCard()
			if (card) {
				moveToCard(card)
			}
		}
	}

	select() {
		if (_pyramidOrDeckSelected == _pyramidID) {
			_pyramid.select()
		} else if (_pyramidOrDeckSelected == _deckID) {
			_deck.select()
		}

		var selectedCards = _pyramid.selectedCards + _deck.selectedCards
		if (selectedCards.count == 1) {
			var card = selectedCards[0]
			if (card.rank == 13) {
				_deck.throwawayPile.addMany(_pyramid.takeSelectedCards())
				_deck.throwawayPile.addMany(_deck.takeSelectedCards())
				reposition()
			}
		} else if (selectedCards.count == 2) {
			var card1 = selectedCards[0]
			var card2 = selectedCards[1]
			if (card1.rank + card2.rank == 13) {
				_deck.throwawayPile.addMany(_pyramid.takeSelectedCards())
				_deck.throwawayPile.addMany(_deck.takeSelectedCards())
				reposition()
			}
		}

		_pointerPointFrames = 10

		var isPyramidEmpty = _pyramid.selectableCards.count == 0
		var isDrawPileEmpty = _deck.drawPile.topCard() == null
		var isDiscardPile1Empty = _deck.discardPile1.topCard() == null
		var isDiscardPile2Empty = _deck.discardPile2.topCard() == null
		if (!_isGameComplete && isPyramidEmpty && isDrawPileEmpty && isDiscardPile1Empty && isDiscardPile2Empty) {
			_isGameComplete = true
			_deck.addPlayerPoints()
			Animate.single(-240, 0, 60, EasingLinear) {|newValue|
				_gameDoneBannerX = newValue
			}
			Timer.delay(50) {
				_youWinMessage = true
			}
		}
	}

	draw() {
		var card = _deck.cursorCard()
		var spriteID = __pointerSpriteID
		// Hack to see if the cursor
		// * is positioned on the draw pile
		// * draw pile is empty
		if (_x == 166 && _y == 46 && !card) {
			spriteID = __reinitDrawPileSpriteID
		}

		var y = _y
		if (_pointerPointFrames > 0) {
			_pointerPointFrames = _pointerPointFrames - 1
			y = y - 1
		}
		TIC.spr(spriteID, _x, y, 0)
		if (_isGameComplete) {
			TIC.map(0, 0, 30, 3, _gameDoneBannerX, 56, 0)
		}
		if (_youWinMessage) {
			TIC.print("Well done!", 42, 60, 15, false, 3)
		}
		// Print entity position
		// TIC.print(_x.toString + ":" + _y.toString, _x + 8, _y)
	}
}

class Game is TIC {
	construct new() {
		ID.init()
		Animate.init()
		Timer.init()
		Card.init()
		Pile.init()
		Cursor.init()
		Pyramid.init()

		_deck = Deck.new(160, 16)
		_pyramid = Pyramid.new(96, 12)
		for (delay in [
			0,
			30, 60,
			80, 100, 120,
			135, 150, 165, 180,
			192, 204, 216, 228, 240,
			250, 260, 270, 280, 290, 300,
			310, 320, 330, 340, 350, 360, 370
		]) {
		// for (delay in [
		// 	0,
		// 	0, 0,
		// 	0, 0, 0,
		// 	0, 0, 0, 0,
		// 	0, 0, 0, 0, 0,
		// 	0, 0, 0, 0, 0, 0,
		// 	0, 0, 0, 0, 0, 0, 0
		// ]) {
		// NOTE: For shortened game
		// for (delay in [
		// 	0,
		// 	0, 0,
		// 	0, 0, 0
		// ]) {
			Timer.delay(delay) {
				var card = _deck.drawPile.takeTopCard()
				_pyramid.addCard(card)
			}
		}

		Timer.delay(420) {
		// NOTE: For shortened game
		// Timer.delay(60) {
			_cursor = Cursor.new(_pyramid, _deck)
		}
	}
	
	TIC() {
		if (_cursor && !_cursor.isGameComplete) {
			// Up
			if (TIC.btnp(0)) {
				_cursor.up()
			}
			// Down
			if (TIC.btnp(1)) {
				_cursor.down()
			}
			// Left
			if (TIC.btnp(2)) {
				_cursor.left()
			}
			// Right
			if (TIC.btnp(3)) {
				_cursor.right()
			}
			// Z
			if (TIC.btnp(4)) {
				_cursor.select()
			}
		}

		Animate.update()
		Timer.update()
		
		TIC.cls(7)
		_pyramid.draw()
		_deck.draw()
		if (_cursor) {
			_cursor.draw()
		}
	}
}
