ÎĖĖĖˈˆˆŽŠŠŠŽˆˆˆŽĖĖĖŽĖĀĖŽĖĀĖŽĖĀĖĖĖėĖĀîˆĻĀîĖŽĀĖĀŽĀĀĀŽĀĀĀŽĀĀÎĖĖĖˈˆˆŽŠŠŠŽˆˆˆŽĖĖĖŽĖĖĖŽĖĀĖŽĖĀĖĖĖėĖĀîˆĻĀîĖŽĀĖĖŽĀĀĀŽĀĀĀŽĀĀŽĖĖĖŽŠŠŠŽŠŽŠŽŠĘĖŽŠŠŠŒˆˆˆĖĀĖÎĖĖÎĖŽĖŠŠĀėŽŠĀĀĀĖîĀėîĖĖîîŽĖĖĖŽŠŠŠŽŠŽŠŽŠĘĖŽŠŠŠŒˆˆˆĖĀĖÎĖĖÎĖŽĖŠŠĀėŽŠĀĀĀĖîĀėîĖĖîî >Ā?ĖĖUUUÅĖ@DDÄĖDDDÄLDĖLDDDDDDDD33333333333333333#""""" """""""""""""""!"""""""""""""""""""""""""""""""""ĖU\Ė\ĖULDDĖDLĖLĖLÄLDDDDDDDDD3333333333303333 """"""" """"""""""""""""""""""""""""""""""""""" """"""ĖU\UUÅĖDDĖDLDDÄLÄĖLDDDDDDD433333333333""""""""""""""""""""""!""""""""""""""""""" """"""ĖĖUĖ\ĖU @DĖDLĖLÄLÄLÄDDDDDDD3333333333333 """"""""""""""""""""""""""""""""""""""""" """"""ĖUUUUÅĖDÄĖDDDĖĖDĖLDDDDDD43333333333333""""""""""""""""""""""""!""""""""""""""""" """"""UUUUUUUDDLDDDDDDDDDDDD33333333333333 """"""""""""""""""""""" """"""""""""""""""""""UUUUUUU@DDDDDDDDDDDDDD0333333333333333"""""""""""""""""""""""""""""""""""""""""""""UUUUUUUDDDDDDDDDDDDD0333333333333333"""""""""""""""""""""" """"""""""""""""""""ÅĖUUUUUDDDDDĖDDÄĖĖÄĖĖ3Ė<3Ė<ÃĖĖÃĖ<333Ė,""""""""""""""ÂĖ"""ĖĖĖĖĖĖ """"""""""""""""""ĖU\UUÅ\ ĖĖĖLÄĖÄĖDDÄLĖÃ<ÃÃ<Ã33Ė33Ė33Ã,Â"""ÂĖ,ĖĖ"ÂĖ"Ė ""ĖÂ," ĖÁĖÁĖÁĖÁĖÁĖ"""""""""""""""ĖU\UUÅĖĖĀĖĀĖDDDĖDDÄĖ Ā<3ĖĖ3ĖĖ3Ã<3Ė<33Ã<Â""",Â,Ė",,Â,Ė,Ė,,ĀĖÁÁĖÁÁĖÁÁĖÁÁĖÁÁĖÁ """"""""""""ĖĖ\UUÅÅÅĀĖĀĖĖÄĖDĖDĖĖĖ333Ã33ÃÃ3ĖÃ<333ÃĖĖ""",Â,Ė",ĖĖ,Ė ĖĖÁ ÁÁÁÁÁÁÁÁÁÁÁ"""""""ĖU\ĖĖÅÅÅĖĖDDĖDDÄĖLĖÄĖ Ā<33Ė<3Ė<3Ė<ÃĖĖ33Ã<ÂÂĖ,ÂĖ,Ė","Â,ÁĖĖĖĖĖĖĖĖ"""""""UUUUUUUDDĖLDDDDDDD033333333333333333""""""""""ÂĖ""""""""UUUUUUU@DDDDDDDDDDDD033333333333333333""""""""""""""""""""UUUUUUU@DDDDDDDDDDDDDD033333333333333333""""""""""""""""""""ĖĖUUUUUDDDDDDDDDĖDDÄĖLÄĖĖ3Ė<3Ė<ÃĖĖ3Ã<33ÃĖ,"""""""""""ÁĖÁĖĖĖÁĖĖĖĖ """"""ĖU\UUÅ\LDĖĖDĖLÄĖÄĖDDDDĖÄ<3Ã<3Ã<ÃÃ<33Ė<33Ã<Â"""ÂĖ,ĖĖ"ÂĖĖĖÁĖÁÁĖÁÁÁÁÁ """"""ĖĖUUUÅĖĖÄDĖÄDĖDDDĖDDDĖLÄĖ<ÃĖ<3ĖĖÃĖ<Ã<<33ÃĖ,""",Â,Ė",, ĖÁĖĖĖÁĖĖĖĖĖ """"""ĖU\UUÅÅÄÄDĖÄĖĖÄĖDĖDĖÄLDDĖÃ<Ã33Ã33ĖÃĖĖ33à Ā""",Â,Ė",ĖĖ ĖĖĖÁĖÁÁÁÁÁĀ """"""ĖĖUĖĖÅÅÄDĖĖDDĖDDÄĖLĖÄĖĖÄĖ<3Ė<3Ė<ÃĖ<33<33ÃĖ ÂĖ,ÂĖ,Ė"," ÁĖĖĖĖÁĖĖĖĖĖ""""""UUUUUUEDDDDDĖLDDDDDDDDDDD0333333333333333 """"""""ÂĖ""""""UUUUUUEDDDDDDDDDDDDDDDDDD4333333333333333""""""""""""""UUUUUUDDDDDDDDDDDDDDDDDDD33333333333333 """"""" """""ĖĖUUUÅĖDDÄĖLÄĖLDÄLÄĖĖDĖLDĖ<3333333333333 """""""""ˆˆˆˆˆ!"""""ĖU\Ė\ĖÄLDDDĖDDĖDĖLDDĖÄLÄÄL03333333333333 """"" """ˆˆˆˆˆˆˆˆˆ"""""ĖU\UUĖLLDDĖLDĖLÄLLDÄLDĖLÄĖ 333333333333""""""€ˆˆˆˆˆ€ˆˆˆˆˆˆ"""""ĖĖUĖ\ĖDLĖÄLDÄLDÄĖĖDĖDÄLÄÄLÄ033333333333 """""""ˆˆˆˆˆˆˆˆˆˆˆˆˆ """"ĖU\UUÄĖDĖÄĖĖÄĖĖDDLÄLDDĖLDĖ 3333333333""""""""€ˆˆˆˆˆˆˆ€ˆˆˆˆˆˆˆˆ """"UUUUDDDDDDDDDDDDDDDDDDDDD33333333 """""""""€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ""""UUUUDDDDDDDDDDDDDDDDDDDDD333333 """""""""ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ """UUUDDDDDDDDDDDDDDDDDDDDD03333""""""""""ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ"""ĖUĖ ĀLDDDDDDDDÄLDĖDDDDDÄLD333Ė33Ė"""""""""€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ€ˆˆˆˆˆˆ"""\Å\ĀLĖLÄĖLĖĖDĖĖLDDDDĖĖÄLDÄĖ0ÃĖ<Ė3<< ""ĖĖ"Ė,"""ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ ""\Å LDDLÄLĖDLÄLDĖÄĖÄĖDÄLDĖ<Ė<3ĖĖ3< ĖÂĖ"Â,Ė"""€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ€ˆˆˆˆˆˆˆˆ""\Å ĀLĖLLÄLĖDLÄLDĖDDÄĖDÄLDĖ0<Ė<3Ė3<ĖĖ Ė"ÂĖÂĖ""""ˆˆˆˆˆˆˆˆˆˆˆˆˆˆ€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ "ĖĖ ĀLDDÄĖLĖDLDĖLĖDDDĖĖDĖLĀĖ3ÃĖ<Ė3<Ėà ĖÂĖ,"Ė,"""ˆˆˆˆˆˆˆˆˆˆˆˆˆˆ€ˆˆˆˆˆˆˆˆˆˆ€ˆˆˆˆˆˆˆˆˆˆ @DDDDDDDDDDDDDDDDDDDD033333333333""""""""""ˆˆˆˆˆˆˆˆˆˆˆˆ€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ@DDDDDDDDDDDDDDDDDDDD333333333333#"""""""""ˆˆˆˆˆˆ€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆDDDDDDDDDDDDDDDDDDD333333333333#"""""""""ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆĖĖ Ā DDDDDDDDÄLDDDDDDDDDĖ3333333Ė3333"Ė""""""ˆˆ€ˆˆˆˆˆpwwˆˆpww€ˆˆˆˆˆˆˆˆ€ˆˆˆˆˆˆˆˆˆˆˆˆ\Å\Ā ĖLĖĖDÄĖDĖĖLDDÄĖLĖĖD0Ã<<3ĖĖÃĖĖ3Ė<3ĖĖ""""""€ˆˆˆˆˆˆˆwwwwwwˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ\Å\Å @DĖDLĖDLÄLDDDLÄLĖDLĖÃĖĖÃ3Ė3Ė3Ã<ĖÃĖ"""""ˆˆˆˆ€ˆˆˆpwwwwpwwww€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ\ÅĖĖU\ĖLĖDLĖDLÄLDDDLÄLĖD ĖÃÃÃÃ3Ė3Ė3ÃĖ3ÃĖ"""""€ˆˆˆˆˆˆˆwwwwwwwwwwˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆĖÅ\ÅÅ\U@ĖDLÄĖDDĖLDDÄĖLĖD ĖÃÃÃ3ĖĖ3ÃĖ3Ė<3ĖĖ """ˆˆˆˆˆpwwwwwwwwwwwwwˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆUUUUUUUEDDDDDDDDDDDDDDDD03333333333333""ˆˆˆˆˆwwwwwwwwwwwwwwpwwˆˆˆˆˆˆˆˆˆˆˆˆˆUUUUUUUUDDDDDDDDDDDDDDD03333333333333""""ˆˆˆˆˆpwwwwwwwwwwwwwwwpwwwwˆˆˆˆˆˆˆˆˆˆˆˆˆUUUUUUUUUDDDDDDDDDDDDDD03333333333333 """""ˆˆˆˆˆwwwwwwwwwwwwwwwwwwwwwˆˆˆˆˆˆˆˆˆˆˆˆˆUUUUUUUUUEDDDDDDDDDDDD333333333333""""""ˆˆˆˆwwwwwwwwwpwwwwwwpwwwwww€ˆˆˆˆˆˆˆˆˆˆˆˆUUUUUUUUUUDDDDDDDDDDD333333333333#"""""""€ˆˆˆwwwwwwwwwwwwwwwwwww‡ˆˆˆˆˆˆˆˆˆˆˆˆUUUUUUUUUUDDDDDDDDDDDDD333333333333#"""""""€ˆˆˆxwpwwwfvwwfpwwwwwwwwwww‡ˆˆˆˆˆˆˆˆˆˆˆˆUUUUUUUUUUDDDDDDDDDDDDD033333333333""""""""ˆˆwwwwgff`ffwwwpwwwwwwwwˆˆˆˆˆˆˆˆˆˆˆ€ˆˆˆˆUUUUUUUUUUU@DDDDDDDDDDDD3333333333""""""""€ˆˆˆpwwwpwffffffpwwpwwwwwwww€ˆˆˆˆˆˆˆˆˆˆ€ˆˆˆˆˆˆUUUUUUUUUUUDDDDDDDDDD4333333333""""""""ˆˆˆˆxwww`fffffffffffpwwwwwwwwˆˆˆˆˆˆˆˆˆ€ˆˆˆˆˆˆˆˆUUUUUUUUUUUU@DDDDDDDDDDD33333333""""""""ˆˆˆˆxwwwffffffffff`fffpwwwwwwww€ˆˆˆˆˆˆˆˆ€ˆˆˆˆˆˆˆˆˆˆUUUUUUUUUUUUDDDDDDDDDDDD43333333""""""""ˆˆˆˆwwfffff`ffffffffvwwwwwwwwˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆUUUUUUUUUUUU@DDDDDDDDDDDDD333333 """""""ˆˆˆpwffffffffffffwwwwwww€ˆˆˆˆˆˆ€ˆˆˆˆˆˆˆˆˆˆˆˆUUUUUUUUUUUUDDDDDDDDDDDDDD0333333 """""""ˆˆw`f`fUPU`ff`fffffwwwwwwwˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆUUUUUUUUUUUUDDDDDDDDDDDDDD33333""""""€ˆpwwffPUUUUf`fffffpwwwwwwpwww€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆUUUUUUUUUUUUU@DDDDDDDDDDDDDDD0333333 """""ˆpwwffUUUUUPU`fffffwwwwwpwwwww€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆUUUUUUUUUUUUU@DDDDDDDDDDDDDDD3333333""""ˆˆpwwffVUUUUUUUefffffpwwwwwwwwwwˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆUUUUUUUUUUUUUDDDDDDDDDDDDDDDD033333333"""""ˆˆˆwffUEPUPUUUffffpwwpwwwwwwwˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆUUUUUUUUUUUUUDDDDDDDDDDDDDDDD333333333"""ˆˆˆwgfUDDDDDPUUU`fffffwwwwwwww€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆUUUUUUUUUUUUUEDDDDDDDDDDDDDDDDD333333333 """"ˆˆˆxwwU@D4@DDTUUUff`fffpwwwwwwwww€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆUUUUUUUUUUUUUEDDDDDDDDDDDDDDDDD3333333333"""""ˆˆpwwVU433DDUUUffffpwwwwwwwwwˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆUUUUUUUUUUUUUEDDDDDDDDDDDDDDDDD3333333333 """"""ˆˆxwwfE023DDPUPUU`fffffwwwwwwwwwwˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆUUUUUUUUUUUUUEDDDDDDDDDDDDDDDDD3333333333 """"""ˆˆwf# 0@D@DUUUffffffwwwwwwwwwwˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆUUUUUUUUUUUUUEDDDDDDDDDDDDDDDDD3333333333 """"""ˆˆpwfFƒˆ0DDTUUUUffffffwwwwwwwwwwˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆUUUUUUUUUUUUUEDDDDDDDDDDDDDDDDD3333333333 """"""ˆˆ`U„ˆ("3DDTUUUUffffffwwwwwwwwwwˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆUUUUUUUUUUUUUEDDDDDDDDDDDDDDDDD3333333333 """"""ˆˆev"03DDTUUUUffffffwwwwwwwwwwˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆUUUUUUUUUUUUUEDDDDDDDDDDDDDDDDD3333333333"""""€ˆˆwg`"33CDDUUUffffffwwwwwwwwwwˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆUUUUUUUUUUUUUEDDDDDDDDDDDDDDDDD333333333 """"€ˆˆww‡€!33DDTUU`fffffwwwwwwwwwwˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆUUUUUUUUUUUUUDDDDDDDDDDDDDDDD333333333""" ""ˆˆ‡ˆ 33CDDDUUUffffpwwwwwwwwwˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆUUUUUUUUUUUUUDDDDDDDDDDDDDDDD033333333 """""ˆˆˆˆˆ"23@DDDPUUU`fffpwwwwwwwww€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆUUUUUUUUUUUUU@DDDDDDDDDDDDDDD333333333 """"""03@DDDUUUUfffffwwwwwwww€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆUUUUUUUUUUUUU@DDDDDDDDDDDDDDD03333333333"""""!""33DDTUUUUU`ffffpwwwwwwwˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆUUUUUUUUUUUUDDDDDDDDDDDDDD33333033333""""" ""33@DPUUUUUfffffwwwwwwˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆUUUUUUUUUUUUDDDDDDDDDDDDDD333333333""""" " ""33DPUUUUU`ffffffpwwwww€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆUUUUUUUUUUUU@DDDDDDDDDDDDD@DDD03333333"""""""""03@DDPUUUUUfffffffpwwwwww€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆUUUUUUUUUUUUDDDDDDDDDDDDDDDDDD03333333""""""""" " ""3DDDTUUUUUfffffffpwwwwwwˆˆˆˆˆˆˆˆˆˆˆˆˆUUUUUUUUUUUU@DDDDDDDDDDD@DDDDDDD33333333#"""""""""""""033@DDDDUUUUeffffffffwwwwwww‡ˆˆˆˆˆˆˆˆˆˆˆˆUUUUUUUUUUUDDDDDDDDDDDDDDDDDD33333333"""""""""""""333CDDDDPUUU`ffffffffpwwwwwwwwˆˆˆˆˆˆˆˆˆˆˆUUUUUUUUUUUDDDDDDDD@DDDDDDDDD33333333 """""""""""333CDDDDUU`ffffffffwwwwwwwww‡ˆˆˆˆˆˆˆˆˆˆUUUUUUUUUUPUUUUDDDDDDDDDDDDDDDD3333333333 """ """3333DDDPUU`ffffffffpwwwwwwwwww€ˆˆˆˆˆˆˆˆˆˆˆˆUUUUUUUUUUUUUUUUUDDDD@DDDDDDDDDDD333333330333""""233033@DDUUU`ffffffffwwwwwwwwwww€ˆˆˆˆˆˆˆˆˆˆˆˆˆUUUUUUUUUUUUUUUUUUUDDDDDDDDDDDD433333333333 "33#"3333CDDDPUUUUfffffffvwwwwwwwwwwww€ˆˆˆˆˆˆˆˆˆˆˆˆˆUUUUUUUUUUUUUUUUUUUUDDDDDDDDDDDD43333333033333033303333DDDUUUUUfffffffvwwwwwwwwwwww€ˆˆˆˆˆˆˆˆˆˆˆUUUUUUUUUPUUUUUUUUUUUUDDDDDDDDDDDD333333333333333333333@DDDDPUUUUUU`ffffffpwwwwwwwwwwwwˆˆˆˆˆˆˆˆˆˆˆˆUUUUUUUUPUUUUUUUUUUUUUU@DDDDDDDDDDDDD0333333333333333333333DDDDDTUUUUUUfffffwwwwwwwwwwwwwˆˆˆˆˆˆˆˆˆˆˆˆˆˆUUUUUUUUUUUUUUUUUUUUUU@DDDDDDDDDDDDD3333333333333333333DDDDDTUUUUUU`ffffwwwwwwwwwwwww€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆUUUUUUUPUUUUUUUUUUUUUUUU@DDDDDDDDDDDDD33333333333333033DDDDDTUUUUUU`ffwwwwwwwwwwwwwˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆUUUUUUPUUUUUUUUUUUUUUUU@DDDDDDDDDDDDD@DDD3333333333333DDDDDTUUUUUUfffwwwwwwwwwwwwwˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆUUUUUUUUUUUUUUUUUUUUU@DDDDDDDDDDDDD@DDDDD033333033333@DDDDDDDUUUUUfffffwwwwwwwwwwwww€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆUUUPUUUUUUUUUUUUUUUUUU@DDDDDDDDDDDDDDDDDDD33333333DDD@DDDDPUUUU`ffffffwwwwwwwwwwwwwˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆPUUUUUUUUUUUUUUUUUU@DDDDDDDDDDDDD@DDDDDDD03330333@DDDDDDDUUUfffffffwwwwwwwwwwwwwˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆUUUUUUUUUUUUUUUUUUUDDDDDDDDDDDDDDDDDDDD33@DD33DDDDD@DDUUPUU`ffffffffpwwwwwwwwwwww€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆUUUUUUUUUUUUUUUUUUUDDDDDDDDDDDDDDDDDDDDDD@DDDD@DDDDDDUUUUfffffffffvwwwwwwwwwwww€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆPUUUUUUUUUUUUUUUUUUUUDDDDDDDDDDDDDDDDDDDDDDDDDDD@DDDDDDPUUUUUfffffffffvwwwwwwwwwwwwˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆPUUUUUUUUUUUUUUUUUUUU@DDDDDDDDDDDDDDDDDDDDD@DDDDDD@DDDDDDUUUUUU`ffffffffffwwwwwwwwwwwˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆfPUUUUUUUUUUUUUUUUUUUUDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDPUUUUUUU`ffffffffffpwwwwwwwwwwˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆffUUUUUUUUUUUUUUUUUUUUU@DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDPUUUUUUU`ffffffffffwwwwwwwww€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆffUUUUUUUUUUUUUUUUUUUUUDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUUUUUUUUeffffffffffpwwwwwwww€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆfffUUUUUUUUUUUUUUUUUUUUU@DDDDDDDDDDDDDDDDDDDDDDDDDD@DDDDUUUUUUUUeffffffffffwwwwwww€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆfffUUUUUUUUUUUUUUUUUUUUUDDDDDDDDDDDDDDDDDDDDDDDDDDDDUUUUUUUUeffffffffffpwwwwww€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆfffUUUUUUUUUUUUUUUUUUUUU@UUUUDDDDDDDDDDDDDDDDDDD@DDUUUUUUUUeffffffffffpwwww€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆffffUUUUUUUUUUUUUUUUUUUUUUUUUUU@DDDDDDDDD@DDDDDDDDUUUUUUUUfffffffffpwwwwww€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆffffUUUUUUUUUUUUUUUUUUUUUUUUUUUUU@DDDDDDDDDDDDDDDDUUUPUUUUUUUfffffffffpwwwwwwww€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆfffffUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUDDDDDDDDDDDDDDDUUUUUPUUUUUUU`ffffffffpwwwwwwwwww€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆfffffUUUUUUUUUUUUUUUUUUUUUPUUUUUUUUUUU@DDDDDDD@DDDDDDPUUUUUUUUUUUUfffffffwwwwwwwwwww€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆfffffVUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUDDDDDDDDDDDUUUUUUUPUUUUU`ffffffpwwwwwwwwwwwwˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆfffffVUUUUUUUUUUUUUUUUUUUUPUUUUUUUUUUUUU@DDDDDPUUU@DDDDPUUUUUUUUUUUUffffffffwwwwwwwwwwwwwˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆffffffUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU@DDDUUUUUUEDDUUUUUUUUUUUefffffffffpwwwwwwwwwwwwwwˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆffffffUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUPUUUUUUUUUUUUUUUUfffffffpwwwwwwwwwwwwww€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆffffffVUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUPUUUUUUUUUU`ffffffffwwwwwwwwwwwwwww‡ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆffffffVUUUUUUUUUUUUUUUUUUPUUUUUUUUUUUUUUUPUUUUUUUUUPUUUUUUUUUUfffffffffwwwwwwwwwwwwwwwˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆffffffVUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUPUUUUUUUUUU`ffffffffffpwwwwwwwwwwwwwwwwˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆfffffffUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUPUUUUUUUUUUUPUUUUUUUUUUfffffffffffpwwwwwwwwwwwwwwww€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆfffffffPUUUUUUUUUUUUUUUUPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU`ffffffffffffwwwwwwwwwwwwwwwwwˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆfffffffPUUUUUUUUUUUUUUUUPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU`ffffffffffffwwwwwwwwwwwwwwwwwˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆfffffffUUUUUUUUUUUUUUUPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU`ffffffffffffwwwwwwwwwwwwwwwww€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆfffffffPUUUUUUUUUUUUUUPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUfffffffffffffwwwwwwwwwwwwwwwwwˆˆˆˆˆˆˆˆˆˆˆˆˆˆfffffffPUUUUUUUUUUUUPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUfffffffffffffwwwwwwwwwwwwwwwwwˆˆˆˆˆˆˆˆˆˆˆˆfffffffUUUUUUUUUUUPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUPUUUUUUUUfffffffffffffwwwwwwwwwwwwwwwww€ˆˆˆˆˆˆˆˆˆˆˆfffffffUUUUUUUUUPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUfffffffffffffwwwwwwwwwwwwwwwww€ˆˆˆˆˆˆˆˆˆfffffffUUUUUUUPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUPUUUUUUfffffffffffffwwwwwwwwwwwwwwwww€ˆˆˆˆˆˆˆfffffffPUUUUPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUfffffffffffffwwwwwwwwwwwwwwwwwˆˆˆˆffffffffffffUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU`fffffffffffffffffvwwwwwwwwwwwwwwww€ˆˆˆˆˆfffffff`ffffffffUUUUUUUUUUUUUUUUUUUUUUUUUUUU`ffffff`ffffffffffffpwwwwwwwwwwwwwwwwˆˆˆˆˆˆˆˆffffffffffffffffffPUUUUUUUUUUUUUUUUUUUUUUUUUUU`ffffffff`ffffffffffffwwwwwwwwwwwwwww€ˆˆˆˆˆˆˆˆˆˆˆffffffffffffffffffffPUUUUUUUUUUUUUUUUUUUUUUUUUUUeffffffffff`ffffffffffffwwwwwwwwwwwwwww€ˆˆˆˆˆˆˆˆˆˆˆˆˆfffffff`ffffffffffffffUUUUUUUUUUUUUUPUUUUUUUUUUUffffffffffffffffffffffpwwwwwwwwwwwwwwˆˆˆˆˆˆˆˆˆˆˆˆˆˆffffffffffffffffffffffUUUUUUUUUUUUUUUUUUUUUUUUeffffffffffff`ffffffffffpwwwwwwwwwwwwww€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆffffffffffffffffffffffffVUUUUUUUUUUUUUPUUUUUUUUUffffffffffffffffffffffwwwwwwwwwwwww‡ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆfffffff`ffffffffffffffffffUUUUUUUUUUUUUUUUUUUUeffffffffffffff`ffffffffpwwwwwwwwwwwwˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆffffffffffffffffffffffffffVUUUUUUUUUUUPUUUUUUU`fffffffffffffffffffffwwwwwwwwwww‡ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆffffff`ffffffffffffffffffffUUUUUUUUUU`ffffUUUUUUfffffffffffffff`ffffffwwwwpwwwwwwwwwwˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ-- title: Doyle explorer -- author: pestis cos, sin, pi, sqrt = math.cos, math.sin, math.pi, math.sqrt cached = false clockwise = false animated = false p = 8 q = 16 function _d(z, t, p, q) --The square of the distance between z*e^(it) and z*e^(it)^(p/q). local w, s = z ^ (p / q), (p * t + 2 * pi) / q return ( (z * cos(t) - w * cos(s)) ^ 2 + (z * sin(t) - w * sin(s)) ^ 2 ) end function ddz_d(z, t, p, q) --The partial derivative of _d with respect to z. local w, s = z ^ (p / q), (p * t + 2 * pi) / q local ddz_w = (p / q) * z ^ ((p - q) / q) return ( 2 * (w * cos(s) - z * cos(t)) * (ddz_w * cos(s) - cos(t)) + 2 * (w * sin(s) - z * sin(t)) * (ddz_w * sin(s) - sin(t)) ) end function ddt_d(z, t, p, q) --The partial derivative of _d with respect to t. local w, s = z ^ (p / q), (p * t + 2 * pi) / q local dds_t = (p / q) return ( 2 * (z * cos(t) - w * cos(s)) * ( -z * sin(t) + w * sin(s) * dds_t) + 2 * (z * sin(t) - w * sin(s)) * (z * cos(t) - w * cos(s) * dds_t) ) end function _s(z, t, p, q) --The square of the sum of the origin-distance of z*e^(it) and --the origin-distance of z*e^(it)^(p/q). return (z + z ^ (p / q)) ^ 2 end function ddz_s(z, t, p, q) -- The partial derivative of _s with respect to z. local w, ddz_w = z ^ (p / q), (p / q) * z ^ ((p - q) / q) return 2 * (w + z) * (ddz_w + 1) end function ddt_s(z, t, p, q) -- The partial derivative of _s with respect to t. return 0 end function _r(z, t, p, q) --The square of the radius-ratio implied by having touching circles --centred at z*e^(it) and z*e^(it)^(p/q). return _d(z, t, p, q) / _s(z, t, p, q) end function ddz_r(z, t, p, q) --The partial derivative of _r with respect to z. return ( ( ddz_d(z, t, p, q) * _s(z, t, p, q) - _d(z, t, p, q) * ddz_s(z, t, p, q) ) / (_s(z, t, p, q)) ^ 2 ) end function ddt_r(z, t, p, q) --The partial derivative of _r with respect to t. return ( ( ddt_d(z, t, p, q) * _s(z, t, p, q) - _d(z, t, p, q) * ddt_s(z, t, p, q) ) / (_s(z, t, p, q)) ^ 2 ) end -- class DoyleSpiral(object): -- """Result object -- """ -- def __init__(self, z, t, p, q): -- w = z**(p/q) -- s = (p*t + 2*pi)/q -- self.a = z*cos(t) + z*sin(t)*1j -- self.b = w*cos(s) + w*sin(s)*1j -- self.r = sqrt(_r(z,t,0,1)) --We want to find (z, t) such that: --_r(z,t,0,1) = _r(z,t,p,q) = _r(z**(p/q), (p*t + 2*pi)/q, 0,1) function spiral(p, q) function _f(z, t) return _r(z, t, 0, 1) - _r(z, t, p, q) end function ddz_f(z, t) return ddz_r(z, t, 0, 1) - ddz_r(z, t, p, q) end function ddt_f(z, t) return ddt_r(z, t, 0, 1) - ddt_r(z, t, p, q) end function _g(z, t) return _r(z, t, 0, 1) - _r(z ^ (p / q), (p * t + 2 * pi) / q, 0, 1) end function ddz_g(z, t) return ddz_r(z, t, 0, 1) - ddz_r(z ^ (p / q), (p * t + 2 * pi) / q, 0, 1) * (p / q) * z ^ ((p - q) / q) end function ddt_g(z, t) return ddt_r(z, t, 0, 1) - ddt_r(z ^ (p / q), (p * t + 2 * pi) / q, 0, 1) * (p / q) end local epsilon = 1e-10 function find_root(z, t) while true do local v_f, v_g = _f(z, t), _g(z, t) if -epsilon < v_f and v_f < epsilon and -epsilon < v_g and v_g < epsilon then return true, z, t end local a, b, c, d = ddz_f(z, t), ddt_f(z, t), ddz_g(z, t), ddt_g(z, t) local det = a * d - b * c if -epsilon < det and det < epsilon then return false, z, t end local delta_z, delta_t = (d * v_f - b * v_g) / det, (a * v_g - c * v_f) / det z = z - delta_z t = t - delta_t if z < epsilon then return false, z, t end end end local ok, z, t = find_root(2, 0) if not ok then return 0, 0, 0, 0, 0 end local w = z ^ (p / q) local s = (p * t + 2 * pi) / q return sqrt(_r(z, t, 0, 1)), z, t, w, s end function TIC() if btnp(0) then q = q + 1 cached = false end if btnp(1) and q > p then q = q - 1 cached = false end if btnp(2) and p > 1 then p = p - 1 cached = false end if btnp(3) and p < q then p = p + 1 cached = false end if keyp(3) then clockwise = not clockwise end if keyp(1) then animated = not animated end if not cached then r, a_mag, a_ang, b_mag, b_ang = spiral(p, q) cached = true end cls() local scale = 120 local t = animated and time() / 999 % 1 or 0 for i = 0, p - 1 do for k = -10 // math.log(b_mag), 4 do j = (k - q * i // p) ang = a_ang * i + b_ang * (j + t) ang = clockwise and -ang or ang mag = a_mag ^ i * b_mag ^ (j + t) * scale x = math.cos(ang) * mag + 120 y = math.sin(ang) * mag + 68 rad = mag * r circ(x, y, rad, i + 1) end end print(string.format("P=%d Q=%d", p, q), 0, 0, 12) print(string.format("A_mag=%f A_ang=%f", a_mag, a_ang), 0, 8, 12) print(string.format("B_mag=%f B_ang=%f", b_mag, b_ang), 0, 16, 12) print(string.format("R=%f", r), 0, 24, 12) print(clockwise and "[C]=clockwise" or "[C]=anti-clockwise", 0, 32, 12) print(animated and "[A]=animated" or "[A]=not animated", 0, 40, 12) end