In case Flash no longer exists; a copy of this site is included in the Flashpoint archive's "ultimate" collection.

Dead Code Preservation :: Archived AS3 works from wonderfl.net

forked from: Lemmings Follow Terrain

forkして操作できるように改造してみた。
stage dataは一番最後のクラス
Get Adobe Flash player
by Hio818214 23 Sep 2010
/**
 * Copyright Hio818214 ( http://wonderfl.net/user/Hio818214 )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/hLab
 */

// forked from Hasufel's Lemmings Follow Terrain
//********************************************************
//forkして操作できるように改造してみた。
//stage dataは一番最後のクラス
//*******************************************************/
package {
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.Loader;
    import flash.display.Sprite;
    import flash.display.StageAlign;
    import flash.display.StageQuality;
    import flash.display.StageScaleMode;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.geom.Point;
    import flash.geom.Rectangle;
    import flash.geom.Matrix;
    import flash.utils.ByteArray;
    import flash.utils.getTimer;
    import flash.utils.Timer;

    import net.hires.debug.Stats;

    [SWF(width=465, height=465, backgroundColor=0,frameRate=15)]

    public class Main extends Sprite {
        private const _stageW:uint = stage.stageWidth;
        private const _stageH:uint = stage.stageHeight;
        private const _lemmingsSheetData:String = "89504E470D0A1A0A0000000D49484452000001CC000000DC04030000000F548C9A000000017352474200AECE1CE900000015504C54456F726DFD00005F60FE00AF00EFD0CFFFFE00FEE9DFC88285930000000174524E530040E6D86600000001624B47440088051D48000000097048597300000B1300000B1301009A9C180000000774494D4507DA0917000635BF46FB1B00000AF04944415478DAED5DCB6EE42A10A531C33A1DA9676D391AAF5B63C96BEBAA93F57494BE6B64CFE5FF3FE1523C0A6C937E645A139B50914A27D0060E601B0A281342F67B329358D8BAA568401500356AF6F1B0B5D36C916BBB77FF46C2D62E5228A57901D26A1266FE5DB9F4C8B5272335095BB7F00A9467538F553A34B9E35A79AE7CCE75E5023465550222A88066254661EB165A2A361468F6A07493C6C2D6DE69F5A354FD1161613C6CEDEFCD623414302A3D09C603A852A4890380607890A0542325F443363D9195B48AC31B44ABA45BD334644592EFB409D3D4FD951825A04913EDB430CC93A0B8519CA42D826449419AD100F78F5329F6B72279D7DC643C0F3FC0E3831F038A697AF1E1AECF0E91B39071711D226440D4C8B3B98DC7A84A186904A6271CCD7918D0F403BC01C9399AC59C47477C0167D10C8BDF5DA4D94E0BAD1291331E416E8DCB8DF932B7D2E5D6BA6B1105618A673F360C199A98B1EDC95D11B4AB2512D2A4AE0625BE933CE231D48BE9B52A398BBAA2452236AC0BDB1AE7C0B22FC78841CA25E6514E460863E43266B4B6D9F1BEC67A79DA8F8BCA46D1552D46A8732F66132667E43CEAFAC078E3FA209293BDC47C916615CD17C33C4D8A151C201BFDE2AAA35315E3EA376825478E799A14B3A353C21334A3CE6485C99564D6278C2D07AACDD164417A17720BC879EED5BC3A6869EAB78361215607D61BF5D955648E628591B302C8486FA33E37D74ACCE7E67BCC85DC484531BA4474A6430719772E3B933133D581D95D402EB72A52A9153EEF5CF58EDA46E7DBE951DC24E52E9E9B7A1CE15D802F30C9F181E29FC888B874CF04223154FA54AE45725A002EF0E69BE5C6A04FCF730B4B7F0E65C992254B962C7F4BD817E1D9E5E64CC77E52B45D38B98DCEE6F7E4D24F3E9948E3942E2ADF93600990499C633782CD2A404FAA35393D276C173C7ED47373A3A4B33968D30128D6626C2B439A9B07BD630863F508992F78BDB745728D9ACD6D8017C7C5C04E130643F5E6B1648A9C6AF6CDB600A566429BEFD292DB3C80FABEDCD6DC7C2F9D0286DB16667CA05E4075C070FBA895FC4D76DB6220DB231DC8EEA8EA640B34B78FBDBAF6A4D0B7D7E5D2DC7E371C90CD486D10ED5E011D6B69D5AB6ACDDD6B4D8CDA3E807AAC174B73F7AFE3E095A7797C9C84193602F80B17A626E85B30D8E97F97DA9A91368CB1DE18050CB5E9066C625BAAC3CCD6B7C04EB6C47B33E030EAA55E99E25B255011B788066B687C6C46599E703153FA91699E9BD3D8DF87B87A391C08FB7D58ECA8B0C0D77CAA5B82EC20688F7BA2F7E9D22CE43E54C98AB48AABB18F489625BCF0B85222D99D4F5A042C14A4BD2548CB78335BA69969AEE0112445A8B2803C043A61D97C0D9A640B5C8FC9D3DC299EBBE39A5BF4DBE99C72BDF6B4DDBE3D3FE8565D29CBD3E97D8534DF4EA7C3E1B85D6DBF7D55F2EB5DE57BED41C9F369C54FA1F2AC0A691E9E5747535B0F4EBFE6BC9E20466F5B7B6A564F53EF746C7EFC20840E8DDD3D67D02041098BF0DE5C294D18E2B53D3C6406D8D62A1A870688019A06AD9B26F9A1A69AF4BF1F9A8D52BD610808BA6E8FC8B0347D563D6BD746136E4B5A034D7356152C421AE95D877AD682FB0F37BB374B7375CD092F0B5A7E23767FA3999201D2566743B314D3D67C3E3EACB03575AFAC4AC1CD9ECF4A332C9175397D041DD6C6529C84ED95B013975740B3F7E44C0B97B317CADA067BB00C62FD01548E91463D76DFBE4A607830369750449C72B77042F994E661C57331E0C41185A7A902EBC9EE048DF9B6F629E7057BD0E6B87D3B9C8EBBD58DDD9B883A43F381EC9EB70F9BDDCA6816E315B14BCB620FD646B259D9A376B22236483594E77AAB0F8CFA34D2A37B8EA7AD8C2968B3B24E2B474A48EEB8B66AD80E480313862DBA3A63903EB305278FB952C2FC6B684AA429C73457F91681853FF5A214C10A83750D505BD427E029804FFCE504CA8D69690A2B2CD52D2A299AFAAC584CADB8D38E57C4CEAB2C59B264C99225CB1F48E7C0E79D3BC263D4E7DFEBE3E83F1F04747F99A63D427E61BF21BFF07F4CD899908EDCA9818BFDD53CB53EDF3ED3E89B369B76C1B9B062E2DA86F9A2761F71AEE37DC3C40887BF3334F9D97A513F6A828BB931ED35819B9598271D4FAE75A819E60534A843C422B1EF21EF1B264618C39CC71F41867347B75474EB2F1E84A119EC94F6F01F8B18A1B2C15831291643D40545BD1DF9D31E31C21856F84BC5E539CAF4E2C06349E0FD638F08C35C613A5FAC196291B0CB489C23ECC3FC49A6FE8A19E724E9DA2533723F23226198CA9D11BD84C4A4A2C9851971A42E6161CC24D3237A291DA2C22286A8A395CFF8CE887B543A44EB3BD0A455699F45EA05E3103CAD2C610CA31ED95806FE675CD807902F7E3DA74425A212BB56A4C35F4913DEB8FECD62118B847144D4236110B8C0C1B018AA11A9DBC1212C7E1F1089214EFE9866304E602C18319C413C8684460C1119A1E8B5025346223CA0E491B895A677A91338D789F909FA74C40374B6F459B264C992E5936D1DA4636C3E2D661F4A4DA5D49D99757F0ACFEE3A6307BB5C55F1A4BA5B92FA1B55F231C2AC231FAEA877091FEECDED102B1BBB5870064DC7263DBC9BFD9C5D5BA1F0C3EE702F6BD2CDCDFA1E614F492376F176BDA6071DF09787BF7CE792F77AA870D6197EA53B01F64E9A076F6F128161EACE226E22FC82A627E1B64B716F1A1337569EB688F10E0D6CC2590AEF4CB36878A42E23BF73E45E8AC6169273E7DD5AA0158CA329530486C958C6E88CBA30343B70CDC4BDC9EEBE338EC15B03917011D4AAAF0E47840FCE6A219D2F5D5ED5729A5E4878E6273C4C7970E478EF52E181B7E4BB081F9A1861E9910DF44E9C7BF41D401155E82DD75FEB09BB3CB8449A7C7026478E96338EFE7F25B9F39E0EE95D0B8784678887E46AB48D9119F2CE888BA0DA1C421FE38A12F684E0DA7286EED49A953B80C17B8FAA39AA3CA2D7224F44BA8EE06CBCD7A6777F11315BCF7DDCADF1B9ED630922169E5E962C59B264C9F229C28397B708955E554CC5EF55014B865A695EDC2C4F7158CAE736360D9AA530AA95B502556F1469FB1E621369CEE2676D552B2B6058A9A9AD524503D386A6E953A15959D538728D467B4DF3672A9EAFF46C73CC95689AD49F414985E644E969AE9EEFD13A119A66FFD084EBE493EBC9BC3891AB41A9BA89E4C9338C1832B264C992254B962C59BEA4E845BAA49DF6C3B8B668610C5FB469126C895D682EA41EC3A777341EC6EC057C7ED728B378DCA7C450DF867244D39EB54989A6B5C6966EAD5FEFFE37BD35299AF019F14233D437A43E9E64E69D2979B36F2AECA513776C3C259AA621FBD8360A99104DB3C9287DEBC8BAFDE35C2DF46BD0CC07ABB264C992254B962C5F54BC2BE522E5EF6F7A57CAC53E5DAE866183A3784D736893ECB4C6496D5F3BF5F433B539A8F52CAC5B13B70481F23EB193A149FD674F344DDDA4497DF858E8ED4EFAB6D4136CEDFA4424F77155DD905C534C79826D0FDB95898F0E68B0F33B6191E46B48734E15B77D5F63F183BD26FE2D8DE6B6EF6B2C9826B842D46782ADDA5BA523F481E3060E0717A856F9DA543727BF49ADF309242B296F522BEDB5D5CD2AD35CF028A8BC51AD741454832AC7A88C44B87F573A0A12A0E418C94884FB374B962C59B264C992254BE222ECB7829333096AAB417CE05EA6D06CB1494DE9E17AA4B83455B38DC603DAE5BC1D97DE7D2F2E501B339728E9992EBBF89ECB393A9B8CB46BCF698476F94EA75832596FAD0B3C95A2A5B28CF5C602093F45DA7599DD17770E4B2EA4A3F953CC9A9062F9F7176EEB72D1347B299D6BC6BAB79444CFD102BDC76FA4BC77FF4E992EA85D79EFBF3C549DE9C864081EA9DCF01241B39633C2E552DAF57FB0A993D9EB7474410000000049454E44AE426082";
        private const _enterData:Array = [
        "47494638396129001900A2FF00C0C0C05F000E8F2010404041606063BF500F848484E0802021F90401000000002C00000000290019000003755872D2F130CA492310811DD57AFD6070654B6176A81386E3EABA400C64666DDFE7B3E1BC22C6014E6AA80A128F3F99F1988208990E9994D6B361A8559F74BB640E0604838100C56CCFD8DE75A74E9EA7CFA113EA7E4FD9B875DBCEEFFBFF808182838485868788898A8B8C8D8E8F90919293947609003B50B717578E205F5820587FB700B8803F01305F377F40203857605050501858A6374F86972098305F5F2F5886304F9F285F7C186F57005FC71F5F962058AB3858872868702060AA58585830677420689FD700D70097005F57507F407F30678870574030679F286FA0406F5F496F49606063386F88606748007FC72F60C7187F98009760F700F74477683077A04077783877934077880887C7587750BF500F78780000A74800B700D720D87F5F7F6071804080882F60F7487F80707070586FAE189797B740B8807F00188FC86070A7588852B758574087A0B760386F900038976F18A770976097278FCF787878C7682FE6592A00D701848484979700DF684700C7F800F701E08020E77837D77877C79077F77878F08741C89760CF9F28F09030B7B700EF9048CF9F58F09841E79758C0AF51B8AF8080C79700F7F8A0B0C7A8B0B7EFA05090BFAFB7B77898C88890C79FC8AF90A8B7C087CFAEB8B8B898C7C788C8F098CFA0E8B758C7C76090D79FA8C7B7B8C0C7EFB760F8BF29C0C0C0A0C7EFD7B8B799D7B8A1D7A7D7D720A8D8A0C7C7A1F7C728B0D794B8D0A7B8C7D7BFCFA0D7C0B8C8C8C8C0C8DDDEC0B9C7CFA8C0C8E7B0DF97C0CFC060F7F7E6C0B8B8D7BAA0E7AFC0D7BFF0C0BED0CFC9E7C8BFC4D1E8F8C798C8D7C8B1E7B4C0E0C0EEC8C2C8DFC7D3D8E5C0EFB4F7F700EBD8C9D0DFEFD7E7B8DFDFD0D0E0F7D8E0E5E1DFD8D8E0F1E1E0E0D8E7D1D8E7F7EFE0DFF0E7B8EFE7C4F7E0D8E0E8EFECE8D1E7EFB8F7DFE0E0E8F7F7E7C0E8E8E7EFE7D8F7E8DFE0EFF8F8EFC0F7E8E7F7F799F8EFCDE8F0F7F0EFE4F0F0F0F7EFE8ECF3F3F7F7CDF7F3EBF8F8F82C00000000290019000008A100D5886824A2E0808308132A5CC8302100110308361258B062C38B18073C8C38508DC78A200D66CCB871A4499300520288E8B1A5CB971F0F4E844953A0C694032886DC293227CF9F3755FAFC1912A14EA206552A6559D32544A64D6D2A9D3A94E888115B1021DA8214E2D4AF506B3E9D2936E8D7A547771A456AF6EC52B230C796754BB7AEDDBB78F3EADDCBB7AFDFBF80030B1E4CB8B0E1C388132B5ECCD86D40003B",
        "47494638396129001900B3FF00C0C0C05F000E8F2010404043205F203F3FDF60606FBF500F848484E0802000000000000000000000000000000000000021F90401000000002C00000000290019000004A0F088246AB838EBCD331001954855D99D68F085D3E196B095A6EB55114491177CEFFFC0A00C10680970BAA072C93B5054808FC095A88E924CA0D3FA1244BFB10A951BDC56BBB1AF3A1C1E17CE2476494D77A1E50579C97EA0FBF77C7115793081717E8876317C0108017C8B2E88936281150303064595905E939F44852E98008A26A0A8749B5E035220A9B0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C36A11003B00D700D720689F7F407F3067883F3FDF30679F606060406F5F286FA0496F4960606F007FC7386F886067482F60C7187F98009760407760F700F740777847776F4077880887C7587750377A99BF500F78780000A748D720D800B7007F5F7F2F60F7607180408088487F80707070189797807F00B740B8586FAE198FC86070A7588850B758576F9000B7603818A77038976F976097787878278FCF508F68C7682FE6592A00D701848484979700DF684700C7F800F701E08020E77837D77877C79077F77878F08741C89760CF9F28F09030B7B700EF9048CF9F58F09841E79758C0AF51B8AF8080C79700F7F8A0B0C7A8B0B7EFA05090BFAFB7B77898C88890C79FC8AF90A8B7C087CFAEB8B8B898C7C788C8F098CFA0E8B758C7C76090D79FA8C7B7B8C0C7EFB760F8BF29C0C0C0A0C7EFD7B8B799D7B8A1D7A7D7D720A8D8A0C7C7A1F7C728B0D794B8D0A7B8C7D7BFCFA0D7C0B8C8C8C8C0C8DDDEC0B9C7CFA8C0C8E7B0DF97C0CFC060F7F7E6C0B8B8D7BAA0E7AFEFC0B8C0D7BFEFC0C0D0CFC9E7C8BFC4D1E8F8C798B1E7B4C8D7C8C0E0C0EEC8C2C8DFC7D3D8E5C0EFB4F7F700EBD8C9D0DFEFD7E7B8DFDFD0D0E0F7D8E0E5E1DFD8D8E0EFE1E0E0D8E0F6D8E7D1D8E7F7EFE0DFF0E7B8F0E8C0EFE7C8F7E0D8E0E8EFECE8D1E7EFB8F7DFE0E0E8F7F7E7C0E8E8E7EFE7D8F7E8DFE0EFF8F8EFC0F7E8E7F7F799EFEFE0F8EFCDE8F0F7F0EFE8F0F0F0F7EFE8ECF3F3F7F7CDF7F3EBF8F8F82C00000000290019000008CD00CD904844A2E0808308132A5CC8302100120308261258B062C38B18073C8C38D08CC78A200D66CCB8F160C1152BA2A48CC2B2A5CB9730638A0430A02309942A63EADCC9D20C418D001E92F098A8E8C49C3C61FA34FA9144D0A7210B12651A7369D1A6219F6A8D1A756A94AB14B956D44AD62356B151C456346B86ACDBB56CC3164C0B326E58B778CD86643B80D000B67B3DE21D2C356EC11225AED42C0CD8E9E0C734EB7A440C40AF45C898C92E765A4228C4CCA0438B1E4DBAB4E9D3A853AB5ECDBAB5EBD7B063CB9EAD3520003B",
        "47494638396129001900B3FF00C0C0C05F000E8F2010404040205F203F3FDF606066BF500F848484E0802000000000000000000000000000000000000021F90401000000002C00000000290019000004A5F088246AB838EBCD331001954855D99D68F085D3E196B095A6EB55114491177CEFFFC0A00C1010BC70BAA072C97BA90044E308B7DB31972F10746B3B4C75D5EB2F7BD99A31D20335292E90CBE633DAAB5E33DFF0B85956A4AFAD3D78157A8445205D23088A8B08825A848430732306958E839090867C981F879B8F9999A045712092A2A95C15039116AAB05B020003067AB3B1B9BABBBCBDBEBFC0C1C2C3C4C5C6C7C89911003B677420689FD700D70097007F407F3067883F3FDF30679F406F5F286FA0496F49606066386F88007FC76067482F60C7187F98009760407760F700F740777847776F4077880887C7587750377A99BF500F78780000A748D720D800B7007F5F7F2F60F7607180408088487F80707070189797807F00B740B8586FAE198FC86070A7588852B758576F9000B7603818A77038976F976097787878278FCFC7682FE6592A00D701848484979700DF684700C7F800F701E08020E77837D77877C79077F77878F08741C89760CF9F28F09030B7B700EF9048CF9F58F09841E79758C0AF51B8AF8080C79700F7F8A0B0C7A8B0B7EFA05090BFAFB7B77898C88890C79FC8AF90A8B7C087CFAEB8B8B898C7C788C8F098CFA0E8B758C7C76090D79FA8C7B7B8C0C7EFB760F8BF29C0C0C0A0C7EFD7B8B799D7B8A1D7A7D7D720A8D8A0C7C7A1F7C728B0D794B8D0A7B8C7D7BFCFA0D7C0B8C8C8C8C0C8DDDEC0B9C7CFA8C0C8E7B0DF97C0CFC060F7F7E6C0B8B8D7BAA0E7AFC0D7BFF0C0BED0CFC9E7C8BFC4D1E8F8C798C8D7C8B1E7B4C0E0C0EEC8C2C8DFC7D3D8E5C0EFB4F7F700EBD8C9D0DFEFD7E7B8DFDFD0D0E0F7D8E0E5E1DFD8D8E0EFE1E0E0D8E0F6D8E7D1D8E7F7EFE0DFF0E7B8F0E8C0EFE7C8F7E0D8E0E8EFECE8D1E7EFB8F7DFE0E0E8F7F7E7C0E8E8E7EFE7D8F7E8DFE0EFF8F8EFC0F7E8E7F7F799EFEFE0F8EFCDE8F0F7F0EFE8F0F0F0F7EFE8ECF3F3F7F7CDF7F3EBF8F8F82C00000000290019000008D300D18C5034A2E0808308132A5CC83021801103082A1258B062C38B18073C8C38108DC78A200D66CCB8F16041152AA8A4A4C2B2A5CB9730638A043060C447942A63EADCC9F2A34600346D4E44B97225CF9D1F21025D6A12CD5095458FBE4C7A70A9558442D110CD29950AD5AA56AF6275AA752BCFAF60C35A155993EC56A32DD116544BB726C4A6130BE9DD5B48AE52BA74418E9D98A5B0DFB98001DB658BF8E1DDC57F1327865C332C44C19233332D4822B041CDA0978E0040228BDAD1A153AB5ECDBAB5EBD7B063CB9E4DBBB6EDDBB8130704003B",
        "47494638396129001900B3FF00C0C0C05F000E8F2010404040205F203F3FDF5F606BBF500F6F9000848484E08020EBD8C900000000000000000000000021F90401000000002C00000000290019000004BAF008256AB838EBCD331001A54855D99D68F085D3E196B095A66B50190451E845EFFFC0A0D06001D814899C8E276C3A1312953170401210B91ED3C9851E2E80F07191C02276BC2DF7973050A461E3848CC02A77EB60FB1DEF8FCB574A59793D7B207D887F7566776A7A6E87888955640996979899990651929E025506A2A3A4A5A5032E709E8845ABAE4612AF923691B27E9DB67E15B97DADBC71B4BFBEBFC0B5AF36AAC4C5B9C6CA7103CED17DD0D2D106D5D8D9DADBDCDDD911003B606B386F88606748007FC72F60C7187F98009760F700F74477683077A04077783877934077880887C7587750BF500F78780000A74800B700D720D8606F7F7F5F7F2F60F7408088487F80807F00189797B740B8586FAE607787188FC86070A7588850747474B758574087A0B760386F900018A77038976F976097278FCF508F68C7682FE6592A00D701848484979700DF684700C7F800F701E08020E77837D77877C79077F77878F08741C89760CF9F28F09030B7B700EF9048CF9F58F09841E79758C0AF51B8AF8080C79700F7F8A0B0C7A8B0B7EFA05090BFAFB7B77898C88890C79FC8AF90A8B7C087CFAEB8B8B898C7C788C8F098CFA0BFB8C0E8B758C7C76090D79FA8C7B7B8C0C7EFB760F8BF29C0C0C0A0C7EFD7B8B799D7B8A1D7A7D7D720A8D8A0C7C7A1F7C728B0D794B8D0A7B8C7D7BFCFA0D7C0B8C8C8C8C0C8DDDEC0B9C7CFA8C0C8E7B0DF97C0CFC060F7F7E6C0B8B8D7BAA0E7AFEFC0B8C0D7BFEFC0C0D0CFC9E7C8BFC4D1E8F8C798B1E7B4C8D7C8C0E0C0EEC8C2C8DFC7D3D8E5C0EFB4F7F700EBD8C9D0DFEFD7E7B8DFDFD0D0E0F7D8E0E5E1DFD8D8E0EFE1E0E0D8E0F6D8E7D1D8E7F7EFE0DFF0E7B8F0E8C0EFE7C8F7E0D8E0E8EFECE8D1E7EFB8F7DFE0E0E8F7F7E7C0E8E8E7EFE7D8F7E8DFE0EFF8F8EFC0F7E8E7F7F799EFEFE0F8EFCDE8F0F7F0EFE8F0F0F0F7EFE8ECF3F3F7F7CDF7F3EBF8F8F82C00000000290019000008EA00C9904044A2E0808308132A5CC8302100120308221258B062C38B18073C8C38908CC78A200D66CCB87140C12A2B56405109A5A5CB973063CAAC62108049448352AA6429B3A7CF410235DA1C4006E70A3D295BF2F4C91428998300A2DEC43608A99E952C97327D39A80A41A1516D0EA4AA07A9CE955B6376FD1AB6EDD4AA4775264DDB722DC4B678DF96B57A56AB5AAF77F1E62D4A7590E1C3881327AE1254B0631245AB489E4CB972E5121EC13AC65B73B3679B023F0B361958B4DBC6A6DD164CDDB633EBB0A45FBB7E0DBBF467939A69D74E6D5B77D812BE83B7052E3C7895E2C8932B5FCEBC79F280003B",
        "47494638396129001900B3FF00C0C0C05F000E8F2010404041205F203F3FDF5F606BBF500F6F9000848484E08020EBD8C900000000000000000000000021F90401000000002C00000000290019000004C6F008256AB838EBCD331001A54855D99D68F085D3E196B095A66B50250451E845EFFFC0A0306101D80EB8DC4EC86CF6880795D1B6C021944BA7366170498D8243F58AD8F1785A20372C00B8DD36C5F89AD3A1D34F03FBFDBE4CC6047475787901125F7C17077209088E818377430686207C97478C099B9C9D9E9E94618897706106A7A8A9AAAB0303A2A4A47EA3B0B44651B3B0B2B5BB3617BB9836BFB420B8BC15C29745C889BDCB60BECE7DCDC2BDC5C8D0D7D6CB03D1DDB0DCDEE16E06E2E5E6E7E8E9D111003B60C7187F98009760F700F74477683077A04077783877934077880887C7587750BF500F78780000A74800B700D720D8606F7F7F5F7F2F60F7408088487F80807F00189797B740B8586FAE607787188FC86070A7588850747474B758574087A0B760386F900018A77038976F976097278FCF508F68C7682FE6592A00D701848484979700DF684700C7F800F701E08020E77837D77877C79077F77878F08741C89760CF9F28F09030B7B700EF9048CF9F58F09841E79758C0AF51B8AF8080C79700F7F8A0B0C7A8B0B7EFA05090BFAFB7B77898C88890C79FC8AF90A8B7C087CFAEB8B8B898C7C788C8F098CFA0BFB8C0E8B758C7C76090D79FA8C7B7B8C0C7EFB760F8BF29C0C0C0A0C7EFD7B8B799D7B8A1D7A7D7D720A8D8A0C7C7A1F7C728B0D794B8D0A7B8C7D7BFCFA0D7C0B8C8C8C8C0C8DDDEC0B9C7CFA8C0C8E7B0DF97C0CFC060F7F7E6C0B8B8D7BAA0E7AFEFC0B8C0D7BFEFC0C0D0CFC9E7C8BFC4D1E8F8C798B1E7B4C8D7C8C0E0C0EEC8C2C8DFC7D3D8E5C0EFB4F7F700EBD8C9D0DFEFD7E7B8DFDFD0D0E0F7D8E0E5E1DFD8D8E0EFE1E0E0D8E0F6D8E7D1D8E7F7EFE0DFF0E7B8F0E8C0EFE7C8F7E0D8E0E8EFECE8D1E7EFB8F7DFE0E0E8F7F7E7C0E8E8E7EFE7D8F7E8DFE0EFF8F8EFC0F7E8E7F7F799EFEFE0F8EFCDE8F0F7F0EFE8F0F0F0F7EFE8ECF3F3F7F7CDF7F3EBF8F8F82C00000000290019000008F800C9904044A2E0808308132A5CC8302100120308221258B062C38B18073C8C38908CC78A200D66CCB87140C1412B56405109A5A5CB973063CA1C64108049322853AE94C9B3674B9A6434DA34890DA51E9D3B7D2A1D54C5A3509B24C8143DAA67254B964A61328D4A028057AF26114D3D9A5225D6AC3FAB70FDFAF5E0C0A92BC896459B7680C0A76C0F92113B488FDFB873CFCEAC621722DBC337F90E5ACCB8B163C784A3E23D0C366A95CB98336BDE5CA28464CA94DD4E064DDA66D0D1A045975E6DF2E06AC4265F9386889A7541D9876BE2CEDB7A3754D7BEDBF696DDBA366EE0C78DEF2E11BC3968E6CEA37BAD22BDBAF5EBD8B3070F08003B",
        "47494638396129001900B3FF00C0C0C05F000E8F2010404041205F203F3FDF5F606BBF500F6F9000848484E08020EBD8C900000000000000000000000021F90401000000002C00000000290019000004CEF008256AB838EBCD331001A54855D99D68F085D3E196B095A66B30250451E845EFFFC0A0306100D90E0B5C6E276C3A7B440B20E04A12104BE6731B0501A60249128BD8F1785B60D73BA586C7D89C0E9D86166D972F58824C90E5597551366C5F177C02707F4B74434520467A8661157D099798999A9A77842A926D8806A3A4A5A6A703037891A07B52ADB0B017909FAD4778B5B1B1B39EBAAB79BABEBFC1B885C1B646C6B6BFB9C786CCC7C5CDCED2D4C3CE92D0D446D3D1BCD860DDE078E05F03E5E8BA06E9ECA0EBEDF0F1C711003B3B00F74477683077A04077783877934077880887C7587750BF500F78780000A74800B700D720D8606F7F7F5F7F2F60F7408088487F80707070189797B740B8807F005E6FA8607787188FC8588850B758574087A0B760386F900038976F18A770976097787878278FCF508F68C7682FE6592A00D701848484979700DF684700C7F800F701E08020E77837D77877C79077F77878F08741C89760CF9F28F09030B7B700EF9048CF9F58F09841E79758C0AF51B8AF8080C79700F7F8A0B0C7A8B0B7EFA05090BFAFB7B77898C88890C79FC8AF90A8B7C087CFAEB8B8B898C7C788C8F098CFA0BFB8C0E8B758C7C76090D79FA8C7B7B8C0C7EFB760F8BF29C0C0C0A0C7EFD7B8B799D7B8A1D7A7D7D720A8D8A0C7C7A1F7C728B0D794B8D0A7B8C7D7BFCFA0D7C0B8C8C8C8C0C8DDDEC0B9C7CFA8C0C8E7B0DF97C0CFC060F7F7E6C0B8B8D7BAA0E7AFEFC0B8C0D7BFEFC0C0D0CFC9E7C8BFC4D1E8F8C798B1E7B4C8D7C8C0E0C0EEC8C2C8DFC7D3D8E5C0EFB4F7F700EBD8C9D0DFEFD7E7B8DFDFD0D0E0F7D8E0E5E1DFD8D8E0EFE1E0E0D8E0F6D8E7D1D8E7F7EFE0DFF0E7B8F0E8C0EFE7C8F7E0D8E0E8EFECE8D1E7EFB8F7DFE0E0E8F7F7E7C0E8E8E7EFE7D8F7E8DFE0EFF8F8EFC0F7E8E7F7F799EFEFE0F8EFCDE8F0F7F0EFE8F0F0F0F7EFE8ECF3F3F7F7CDF7F3EBF8F8F82C00000000290019000008FF00C9904044A2E0808308132A5CC8302100120308221258B062C38B18073C8C38908CC78A200D66CCB871C0C0412B56405109A5A5CB973063CA1C5405A24932D850A65C29B3A7CF96340D0218E031E78A3C3B79FE5C1A142280A12404E6449A67254B964B6136753A9468D4A94853AAC49A15684D93079F421588731055B149CB0635C9F5E941B624C0BEDD4976664D8836D5DA8D5AB0EDA0C388132B567C96AE46C15DF156994CB9B2E5CB254AA00D0C79ADD0CEA0411F04FCB8F34DB4A543871EED58F5E6B4AA5DBF8E8DBA6E6CD3366D9B7E9DFAB65DDEB76BF7F62D9CF86CDF828113B7393C386BE4509B43470BFD6989EAD85557C9CE1DF2F6EEE0C3DF020E08003B",
        "47494638396129001900B3FF00C0C0C05F000E8F2010403F44205F203F3FDF5F606BBF500F6F9000848484E08020EBD8C900000000000000000000000021F90401000000002C00000000290019000004D8F008256AB838EBCD331001A54855D99D68F085D3E196B095A66BB5240451E845EFFFC0A03061A87C04B79C8E276C3A8903D545904822723DA6730B056124D5C415B1E369B73F68C07B21851157E50E1D54AF3324EA6DACC4D27B5D537815607B7004714B686A5E6C01246E370993949596960603208D830212070106A2A3A4A5A603519B825F84160200B0B1B2B3B4AA9CAC9E77AFB4BCBCB6AB6D269BBDC4B2BF77ACBA6BC5CCC78EA0CABBCCBDCE199CC3D3D4CAC8ABB6D9DAAADCC8DEDFB5DB8ED7CBE5B3D534EBB228B403EFF4B306F5F800F7F9D311003B00F74477683077A04077783877934077880887C7587750BF500F78780000A74800B700D720D87F5F7F6071802F60F7408088487F80707070189797B740B8807F00188FC85E6FA8588850B758574087A0B760386F900018A77038976F976097787878278FCF508F68C7682FE6592A00D701848484979700DF684700C7F800F701E08020E77837D77877C79077F77878F08741C89760CF9F28F09030B7B700EF9048CF9F58F09841E79758C0AF51B8AF8080C79700F7F8A0B0C7A8B0B7EFA05090BFAFB7B77898C88890C79FC8AF90A8B7C087CFAEB8B8B898C7C788C8F098CFA0E8B758C7C76090D79FA8C7B7B8C0C7EFB760F8BF29C0C0C0A0C7EFD7B8B799D7B8A1D7A7D7D720A8D8A0C7C7A1F7C728B0D794B8D0A7B8C7D7BFCFA0D7C0B8C8C8C8C0C8DDDEC0B9C7CFA8C0C8E7B0DF97C0CFC060F7F7E6C0B8B8D7BAA0E7AFC0D7BFF0C0BED0CFC9E7C8BFC4D1E8F8C798C8D7C8B1E7B4C0E0C0EEC8C2C8DFC7D3D8E5C0EFB4F7F700EBD8C9D0DFEFD7E7B8DFDFD0D0E0F7D8E0E5E1DFD8D8E0EFE1E0E0D8E0F6D8E7D1D8E7F7EFE0DFF0E7B8F0E8C0EFE7C8F7E0D8E0E8EFECE8D1E7EFB8F7DFE0E0E8F7F7E7C0E8E8E7EFE7D8F7E8DFE0EFF8F8EFC0F7E8E7F7F799EFEFE0F8EFCDE8F0F7F0EFE8F0F0F0F7EFE8ECF3F3F7F7CDF7F3EBF8F8F82C00000000290019000008FF00CF8C5034A2E0808308132A5CC83021801103082A1258B062C38B18073C8C38F08CC78A200D66CCB8B120B6422A544C5139A5A5CB973063CA2C84A5E0C3112753AA6429B3A74F9A24341E1C5128E79E942D79FA5C0A14224281450B1DDDB392A5D2A52F810E707A9062D43D4775AEC41A53EBD68414899E9CAA1329D9964D87A22D08752D5815617762D5EA94EB008A5E4F161A4CB8B061C3584840EC3B7784C03303B0489E4CB9B265124117CB7D4AD7E00800A0438B1E4D5A3363CE8ECF7E26CD9AB5E9CD5D2D2E6E4D5BF4EBB39C556FADCDFBB65FC8BA57F36EED3B21E3D9C389EBC6BDD97472E59A99E376FEBCF472BFC777571F5D9CE476D11849930DF84E7E3496F2E8019C4F3F3C20003B",
        ];
        private const _exitData:Array = [
        "47494638396121001900E6FF000000000B0B0B2F00002E000700007F0000835F000F291F0F202028102E0F7F0000053F0020206E5222060004E62E2F360000FE7F007F49391A38490000595A401FAF8F201040404F543E200772005E3F20205F206D3D106F3E11703F10007F00FD0000BE00BF6E4A26A7380F6030CE754E2AA3430D7F4F2F3F3FDFEE202060606F8A593000AF00905F35FE00FFBF500F7878007667669E6039807F009F653F6F9000A96A3F5E5EFE05CE005F60FE00B4B5808080818181EF601083838386868600BEBF878787888888BE794A8989898A8A8A8B8B8BFE57648C8C8C8D8D8D8E8E8E8F8F8FC97F4EE0802000FE00FF9128BFBE0000FEFFFE9F60F89F81C0C0C0C0C0CFA4C8EFA5CAEFFEBA8FCFCFCFD3D0C8C0DBC0EFD0CFFFFE00FEE9DFFEFBFFFCFEFEFDFEFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002C00000000210019000007FF80002982008586878889898382298C8A90918E85295D8F919886959382969806A0988E9E855D5D9F172A2A0698A417A95C2A178A06AF2A3B3BA0B287B6B1B300B78AAA17B5173BABAAB988C186B72A88B5C7C4A9AFB6AB86A93B87B7A9CDB2AF89C5B7ACA9CC85DDE8DC98B6B5CFDD8AD3E8001728F528F300C506CF99B5C5E7F6ECE1DB472C533E55E4E60544B1019F3583AF8E390CB8A1862171AC228973A790618D1A0D7F59CB48AB1AB879153F6E08396FDF308DA0C415FA087225BE73B6226503F7CC828598B5B01DC4050914B559AB7CFE8C29B49CB692416DBD98AA74E9B979B2F8852B07ACD654AA4A43CD2A56F05048151B8EC96AC2B6C9D717612F71E2220960E5860B76571968CBF6ADD273CE7ED5ADB812E85EBE88A9922B67C06E0D504B635A404C992A4EBC840301003B",
        "47494638396121001900E6FF000000000B0B0B2F00002E000700007F0000835F000F291F0F202028102E0F7F0000053F0020206E5222060004E62E2F360000FE7F007F49391A38490000595A401FAF8F201040404F543E200772005E3F20205F206D3D106F3E11703F10007F00FD0000BE00BF6E4A26A7380F6030CE754E2AA3430D7F4F2F3F3FDFEE202060606F8A593000AF00905F35FE00FFBF500F7878007667669E6039807F009F653F6F9000A96A3F5E5EFE05CE005F60FE00B4B5808080818181EF601083838386868600BEBF878787888888BE794A8989898A8A8A8B8B8BFE57648C8C8C8D8D8D8E8E8E8F8F8FC97F4EE0802000FE00FF9128BFBE0000FEFFFE9F60F89F81C0C0C0C0C0CFA4C8EFA5CAEFFEBA8FCFCFCFD3D0C8C0DBC0EFD0CFFFFE00FEE9DFFEFBFFFCFEFEFDFEFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002C00000000210019000007FF800082002983868788888587298B898F898D86295D92909782948E8D9597069F97949D82A38F06172A2A06A19D17A85C2A1789A7A83B3B9FB186AE2AB0B2002A3B89A917B43BAAA9B787C086C02A87A7C6C4A8AEBBAA83B5CC3BA883C3AE88B4C0ABA8CBD7CEDBB5BE8FBBA7E6CE89D2E7001728F428F200B406EE9EF082F3F5F4EEE92386095F2A71F200A2D870AF5A4157C61A02DC506310B85590C0994BB8B0460D86BEAA619C45CD9B3C8A1E378094A76F58C64FE00479FCA8F29EBF5D90D0C97266C102CC53D70CDA32C5CE9BAA9E3E61061D178C24D05D2FA2224DEA4F5EAC7DCFC6FD3A15552A5250B26811340452C50663B19AA86DD2F5C5D79BB62C460250B9E1025D5506D6AA6D8BD45FB3742A69FECCABB7B05471E30CD0ADF129294C0B85234BBD6997E28640003B",
        "47494638396121001900E6FF000000000B0B0B2F00002E000700007F0000835F000F291F0F202028102E0F7F0000053F0020206E5222060004E62E2F360000FE7F007F49391A38490000595A401FAF8F201040404F543E200772005E3F20205F206D3D106F3E11703F10007F00FD0000BE00BF6E4A26A7380F6030CE754E2AA3430D7F4F2F3F3FDFEE202060606F8A593000AF00905F35FE00FFBF500F7878007667669E6039807F009F653F6F9000A96A3F5E5EFE05CE005F60FE00B4B5808080818181EF601083838386868600BEBF878787888888BE794A8989898A8A8A8B8B8BFE57648C8C8C8D8D8D8E8E8E8F8F8FC97F4EE0802000FE00FF9128BFBE0000FEFFFE9F60F89F81C0C0C0C0C0CFA4C8EFA5CAEFFEBA8FCFCFCFD3D0C8C0DBC0EFD0CFFFFE00FEE9DFFEFBFFFCFEFEFDFEFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002C00000000210019000007FF80008283848586878229858A888D87298C83908E94925D9129979186069D94999300A08D06172A2A068EA317A65C2A1787A5A63B3B9DAF84AC2AAEB0002A3B87A717B23BA8A7B585BE84BE2A85A5C4C2A6ACB9A883B3CA3BA683C1AC9CB9C7A6C9D5CCD9B3BC88B9A5E3CC87D0E4001728F128EF00B206EB8EA5B282F0F2F1F4F78455BA470D563F791BE84DABC48A98427F1B6A0C92458DD44283F122D648C86B5A2A44B2A4F1D3B891E33B82B74076A228A886CB0D30E9F1CBD5A81C2C66162CAC2C55AD9EAF5FB1D271439553E7CA9EE08076E399EB85D3A246F9BD7B85AF19B85EA59C3E2DEA0956C88F8338AAD840EC5593B34DB4BEE03A931658003028375C888BCA00DAB36A8BF25B660E66C99D76EF0A7E9ACA63DC1A9D8CAEB420B8F1D39973236E0804003B",
        "47494638396121001900E6FF000000000B0B0B2F00002E000700007F0000835F000F291F0F202028102E0F7F0000053F0020206E5222060004E62E2F360000FE7F007F49391A38490000595A401FAF8F201040404F543E200772005E3F20205F206D3D106F3E11703F10007F00FD0000BE00BF6E4A26A7380F6030CE754E2AA3430D7F4F2F3F3FDFEE202060606F8A593000AF00905F35FE00FFBF500F7878007667669E6039807F009F653F6F9000A96A3F5E5EFE05CE005F60FE00B4B5808080818181EF601083838386868600BEBF878787888888BE794A8989898A8A8A8B8B8BFE57648C8C8C8D8D8D8E8E8E8F8F8FC97F4EE0802000FE00FF9128BFBE0000FEFFFE9F60F89F81C0C0C0C0C0CFA4C8EFA5CAEFFEBA8FCFCFCFD3D0C8C0DBC0EFD0CFFFFE00FEE9DFFEFBFFFCFEFEFDFEFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002C00000000210019000007FF800082298285868788878484838C898F8F299285295D8E90980092969496978706A1989597A49006172A2A06989C0017A95C2A1789A8A93B3BA1B386B02AB2B4002A3B89AA17B63BABAAB987C286C22AA017C8C6A9B0BDAB85B7CE3BA985C5B088B6C2ACA9CDD9D0DDB7C08FBDA8E8D089D4E9AF28F528AF00B606F098A8B68217ECD9C3B7CF58A67CAAC8D113B801DFB583B090396458A3903856A71ED20A8862438D1A0D815DC358CB1AB8571E3F6E08F96A5FB153A1C409FA0872253E80BD20A9A305CD828598A8B221C4F52854359E067CFE8C29B4DCB092417BBD98AA7429C057B3F84553150CD554AA4A45D1B265D05048151B90CD6AC2B6C9D717612F71E2220960E5860B76571968CBF6AD5280CFD6ADAC09742FDFC354C9953360B746A8A5312D1C9E4C15275E8F1B0201003B",
        ];
        private const _menuData:String = "89504E470D0A1A0A0000000D49484452000001A0000000300403000000A509B39D000000017352474200AECE1CE900000030504C5445657300000000200000300000411010511F10C50000721F20512FF7834030935041E7500000B100E7C200D6D3D6F7F300F6A1A7540000000174524E530040E6D86600000001624B47440088051D48000000097048597300000B1300000B1301009A9C180000000774494D4507DA0912010A3AB55033830000001974455874436F6D6D656E74004372656174656420776974682047494D5057810E17000006E94944415468DEE59ACF8B1BC915C7FD2F34DEC1648E9DA025F1C9744F76B22C066F774749587CB0BBB62361E6A0C4BD10A1C3D8EA3CAA2173B1173A3E18B28CD254B11806AF68BA607DD88320113A9B80D8A3C24AB42124CBCC886CFD0B9B57FD43D228D9D31210520D9A99CFBC1FD5DFE9EAAAF73473AD2E3EFF8A55C3E3F3CDE39409C153A1C6E77FE0EBFCEDDAB8B675824CD67C23ABF14336DD3CE629678022D233169FCD4D96C69432C1628038A5F36FAF5D195B28C860E132C101E51BC73D104CA4C058FA52D0FED460714C05573F8BD132DD0541FCD5228145A79BC784312EF600B4BDF0586B1AAC7F4F6FB5FCCE60D669F344EC80201E2E13FC8889CDE394048CBFCBCE34ED5D4DDB37985EABD506EDC16C948D665F4D774010152B0F21CC379003C2C49F34AE5DE767B8E41EE9ADDAB03D1C65C3D92C1BCD774090B7F2101EC074F398C504B8A6FD40100893B971531FD486FE30C325379BCC764110597D083DB1794CE3C08333AD6EDDD2DE2253E3C39BED2FDA83CEA093659DD168BA038282D504788B378E29AE392FECDFD27038C2085CCBD075DCB627BF310D4F6CBF203368A4AA40178271C052E2FFC1217C9F782C7D18699C293DDA3BC2E43DE25AFACDF6E8B71E30D805418C34450C0150DEF3C0133933673C1ECF97BC6E17B81C8458F0EFE247BAFEB089EC57FE94F215FF380048174C42CCE775C3851DA4BC9A7F7DBE9ED72C04D5B1E11394F5DEAFF9036CEFC264BAFD820C06A49932081A5C7DE6059B4AD00A3338B95CDACB475654FC614BD7F596FE63E657FEF060FC5A2CE3930FC6ABECA50D0F7F404B76E77BDEDAFC6BD7A3B1E0A5D2F3567089ED454FC7FA148B9FB688E3CBED176486D0F740A401213C8D039E73920BAA38494052D93F9917DC95E3F22367FF235D9FB4F49AAFEB7EAB8C473DB9822A5F773C96AF29172513DA570ECDD27EE46A3752F06039FFDAF5340F44FAF8B1A65DAF07733308F49BADD6A03DCB8659CAE7DB2FC8E1E2CA30296E982C17543088CFC6529E9C83E42205E4BE4B5C3BB26DC72BD8F7F5CEC4EF4C5AFE44D795BF10DDF750C1D79859D9B1FCB73183A4C7FBB9BFE8E3F70FC6AFA4A3E21D488E88ADDDF874FCBACC2FFA04F02280147C2684B687ED5DD8543C371975BF180E6AA3D170F47711EE80A003B5432FC697C2E83EB8CA94BBE32F65149D9C3798C09698420C9E1BA92553F027BEEF67932CF333DC1B94FFD19C5863797ED0783157F6B88B0ED1D33A6869EECF4FA58C8DBFC9D33CDF018D4940EE48CC478B7C3C0EC8A7F98A958A5F625BA73535ED46A0FCA7D892F75CEB7DBD3D711D0174BAFD820C7B5DD0076B8262171750F45C620DC26335610241A43685719A336E06D91BF9E69B6CE2EB6F23F76EE3FABAC00029E7CA1EFF1CF5C8F3E078BF8CFFCCF819DAA27E952F066249FCA57DBDC8DF55731FC9BAE23BD87CEFD1338D90C29F0B16F7700F1AFD45847120B65F9069AE09BABF26086B44FBBD71144504081683C802BAB6BCC08335508C2B2ECBDFD6508A3E42FBA981E3307A829F4DE5DFFDA9FF50C9FB4752C5DB96713B8A5E9D2B36553ECFBD7D21FFB5C89F1CFD1BA7964ECE9AB62F5CBB1E423EFFD45065EBBD5ACD6FCF705727D3ED17645C19BF14C663F555A9ECDAB68D0C90F48885829E414040319E8FE4EE45D44C727E84B7BFA31465B87F2B7BD776EC3AFA6378EE4F2CDF8DA2A7C7FB8BF89EADF2F5974C024B5E3C2BF24118E07A7C7E11395ECED87CDBB7B4EB1EF6E1C8538330D1C72987C3ECAFFDB0B10B8202D332CDFBD67D52EF7A2A01716CD7518284470264CAB046C4EB8F22BCC52543EF308AF091CF194BC54C666FB26FB0007ABBB4FF5AFD0258610F5CDB88A28F8F53B68CFF05DAFFB8C29E7BB8C87F2AFF89801134E730C99BEF03A0853F502C4E5B7EAE8887620704751DD72578D35980E75688015816BA79E9E3D1923D7025CE9856F63001B5A4EA25D73AEA60CDAB9F9F94FE8791113D13851D3CB5621B292CF27B2242FBC74B060850C3B38289655E444F0EA3E7A5BD68EDF68A78DC143E517A06A807AB9FFFF507AFAD134403203DF57643029CE1C1C5B0FFB573414B8EBB2EB92BCF2B06A956609414FC67BF55EBB4FC0C0F58DF2BFC6FCB39E0ABF2C773535EAEE4EFBE9086F542268BFC2C71554291331094E4B856BDF42F0555F1F7D49F53DAEDC16896610721764050032821F8C05181578AB798314A5CDCB96DBE6442C1735CA838C05AF5491495769F123DEFEE74FDF77E6EC7F0774ED5B15AF84360D9CE6A7ECB3019BE56F29F5C444F0FA3A4F4C72A47EDD8A53D29DE1EA9E231391ECCF8320DFBC0DB05410C52D6C3968A09DC575351B0ED74AF3001A0BCE2C4354DD39672C5FEF0112A5AB06B3B753C961B15C76BF9B13904DBFED54ABC2B65EFAEBC5C996FE91F2677949E8A0D1B3F5CF5721C0F7641902A7416A58F55DF4876DDEFB4FFD73F2F6D9BA0FF004263D21B416AC8460000000049454E44AE426082";
        private const _numberData:String = "89504E470D0A1A0A0000000D4948445200000064000000150203000000CDF2A3A3000000017352474200AECE1CE900000009504C54453E0002000000FEE9DFD4853A930000000174524E530040E6D86600000001624B47440088051D48000000097048597300000B1300000B1301009A9C180000000774494D4507DA0917010C36DD62281C000000B24944415428CF85D03B0EC3200C06E0DF912C4599CBDEB1EA29DCA13B03BE0FCA4932569CB2368DD4007D3020F087C118655D4AC9D7E263C371E415F394B719369D3B59EAF9C734E6D871E48B25E636A7BE834F39A4E0C80A8D0842112A21592CC456F4286C4B13D164418DE4F2DA36E257BC85852D5390E82E758193C562271A07095E06BB28C82BE8056990040FBADC84C462E1AFD8DF3BC14F51E1FDA7569BB389D6DBBECADE516F26D7BE81A4E9F5284FB5CB5D44109372E10000000049454E44AE426082";
        private const _graphicsData:Array = [
            Map.backgroundData,
            _enterData[0],_enterData[1],_enterData[2],_enterData[3],_enterData[4],_enterData[5],_enterData[6],
            _exitData[0],_exitData[1],_exitData[2],_exitData[3],
            _menuData,
            _numberData,
            _lemmingsSheetData
        ];

        private var _renderData:BitmapData = new BitmapData(_stageW,_stageW,true,0x00FFFFFF);
        private var _renderRect:Rectangle = new Rectangle(0,0,_stageW,_stageH);
        private var _terrainData:BitmapData;
        private var _terrainBitmap:Bitmap;
        private var _loader:Loader;
//        private var _assetsMemoryBank:Vector.<BitmapData> = new Vector.<BitmapData>;
        private var _assetsMemoryBank:Array = [];
        private var _assetsNum:uint = 0;
        private var _lemmings:Array = [];
        private var _lastAppear:int = int(Map.releaseRateMin/2)-20;
        private var _time:uint = 0;
        private var _lemmingSprite:LemmingSprite = new LemmingSprite();
        private var _appearLemmingsNum:uint = 0;
        private var _releaseRate:uint = Map.releaseRateMin;

        public function Main (){
            Wonderfl.capture_delay(2000);
            stage.quality = StageQuality.LOW;
            stage.scaleMode = StageScaleMode.NO_SCALE;
            stage.align = StageAlign.TOP_LEFT;
            prepareAsset(0);
        }
        
        private function prepareAsset(n:int):void{
            var bytes:ByteArray = new ByteArray();
            var data1:Array=_graphicsData[n].split("");
            var data2:Array=[];
            var d1l:int = data1.length;
            for (var i:int=0;i<d1l;i+=2){
                data2.push("0x"+data1[i]+data1[i+1]);
            }
            var d2l:int = data2.length;
            for (var j:int=0;j<d2l;j++){
                bytes[j] = data2[j];
            }
            _loader = new Loader();
            _loader.contentLoaderInfo.addEventListener(Event.COMPLETE,assetLoaded);
            _loader.loadBytes(bytes);
        }

        private function assetLoaded(event:Event):void {
            var t:BitmapData = new BitmapData(_loader.content.width,_loader.content.height,true,0x00FFFFFF);
            t.draw(_loader.content);
            _assetsMemoryBank.push(t);
            _assetsNum++;
            if (_assetsNum<_graphicsData.length) {prepareAsset(_assetsNum);}
            else {initAnimation();}
        }

        private function initAnimation():void {
            createBomData();
            //prepare terrain
            _terrainData = new BitmapData(_assetsMemoryBank[0].width, _assetsMemoryBank[0].height,true,0x00FFFFFF);
            _terrainData.draw(_assetsMemoryBank[0]);
            addChild(new Bitmap(_terrainData));
            //render will hold lemmings
            addChild(new Bitmap(_renderData));
            var t:BitmapData = new BitmapData( _assetsMemoryBank[_graphicsData.length-1].width, _assetsMemoryBank[_graphicsData.length-1].height,true,0x00FFFFFF );
            var matrix:Matrix = new Matrix(); matrix.scale(-1,1); matrix.translate( t.width, 0 );
            t.draw( _assetsMemoryBank[_graphicsData.length-1], matrix );
            _assetsMemoryBank.push(t);
//            addChild( new Stats() );
            addEventListener(Event.ENTER_FRAME, renderDisplay);
            stage.addEventListener( MouseEvent.CLICK, onClick );
            stage.addEventListener( MouseEvent.MOUSE_DOWN, onDown );
            stage.addEventListener( MouseEvent.MOUSE_UP, onUp );
            stage.doubleClickEnabled = true;
            stage.addEventListener( MouseEvent.DOUBLE_CLICK, onDoubleClick );
        }
        
        private var rateUp:Boolean = false;
        private var rateDown:Boolean = false;
        private function onDown( event:MouseEvent ):void {
            if( event.stageY > 384 ){
                if( int(event.stageX/32) == 0 ){
                    rateDown = true;
                }
                if( int(event.stageX/32) == 1 ){
                    rateUp = true;
                }
            }
        }
        private function onUp( event:MouseEvent ):void {
            rateDown = false;
            rateUp = false;
        }
        private var pause:Boolean = false;
        private function onClick( event:MouseEvent ):void {
            if( event.stageY > 384 ){
                if( int(event.stageX/32) >= 2 && int(event.stageX/32) < 10 ){
                    selectmenu = event.stageX/32;
                }
                if( int(event.stageX/32) == 10 ){
                    pause = !pause;
                }
            }else{
                var z:uint = _lemmings.length;
                if( Map.command[selectmenu-2] <= 0 ){
                    return;
                }
                for( var i:int = 0; i < z; i++ ){
                    var lemming:Lemming = _lemmings[i];
                    if( lemming.x+5 > event.stageX && lemming.x-5 < event.stageX && lemming.y+4 > event.stageY && lemming.y-8 < event.stageY ){
                        if( lemming.command(selectmenu-2) ){
                            Map.command[selectmenu-2]--;
                        }
                        return;
                    }
                }
            }
        }
        
        
        private function allBom():void{
            var z:uint = _lemmings.length;
            for( var i:int = 0; i < z; i++ ){
                var lemming:Lemming = _lemmings[i];
                if( lemming.command(2) ){
                    return;
                }
            }
        }
        
        private var nuke:Boolean = false;
        private function onDoubleClick( event:MouseEvent ):void{
            if( event.stageY > 384 ){
                if( int(event.stageX/32) == 11 ){
                    nuke = true;
                }
            }
        }
        
        private var selectmenu:int = 2;
        private function drawMenuNumber( posX:int, num:int ):void{
            //数字
            _renderData.copyPixels(_assetsMemoryBank[13],new Rectangle(int((num/10)%10)*10,5,10,16),new Point(posX*32+7+0,_stageH-48+2),null,null,true);
            _renderData.copyPixels(_assetsMemoryBank[13],new Rectangle(int(num%10)*10,5,10,16),new Point(posX*32+7+9,_stageH-48+2),null,null,true);
        }
        private function drawMenu():void{
            //menu
            _renderData.copyPixels(_assetsMemoryBank[12],new Rectangle(0,0,384,48),new Point(0,_stageH-48),null,null,true);
            if( selectmenu >= 0 ){
                _renderData.copyPixels(_assetsMemoryBank[12],new Rectangle(384,0,32,48),new Point(selectmenu*32,_stageH-48),null,null,true);
            }
            var num:Array = [];
            num[0] = Map.releaseRateMin;
            num[1] = _releaseRate;
            for( var i:int = 0; i < 8; i++ ){
                num[i+2] = Map.command[i];
            }
            for( i = 0; i < 10; i++ ){
                drawMenuNumber( i, num[i] );
            }
        }
        
        private function renderDisplay(e:Event):void {
            if( rateUp ){
                if( _releaseRate < 99 ){
                    _releaseRate++;
                }
            }
            if( rateDown ){
                if( _releaseRate > Map.releaseRateMin ){
                    _releaseRate--;
                }
            }
            if( pause ){
                return;
            }
            if( !nuke ){
                if( _lastAppear + 53-int(_releaseRate/2) < _time ){
                    addLemming();
                }
            }else{
                allBom();
            }

            _renderData.lock();
            _renderData.fillRect(_renderRect,0x00FFFFFF);
            
            //入り口
            if( _time < 20 ){
                _renderData.copyPixels(_assetsMemoryBank[1],new Rectangle(0,0,41,25),Map.enter,null,null,true );
            }else if( _time < 26 ){
                _renderData.copyPixels(_assetsMemoryBank[_time-20+1],new Rectangle(0,0,41,25),Map.enter,null,null,true );
            }else{
                _renderData.copyPixels(_assetsMemoryBank[7],new Rectangle(0,0,41,25),Map.enter,null,null,true );
            }
            //出口
            _renderData.copyPixels(_assetsMemoryBank[8+_time%4],new Rectangle(0,0,33,25),Map.exit,null,null,true );
            drawMenu();
            
            
            var z:uint=_lemmings.length;
            while(z--){
                var lemming:Lemming = _lemmings[z];

                drawLemming( lemming );

                lemming.toNextFrame();
                lemming.poll();
                if( lemming.mode == lemming.BOM_END ){
                    for( var i:int = 0; i < bomdata.length; i++ ){
                        var x:int = lemming.x + bomdata[i][0]*lemming.frame;
                        var y:int = lemming.y + bomdata[i][1]*lemming.frame;
                        for( var j:int = 0; j < lemming.frame; j++ ){
                            y += j;
                        }
                        _renderData.setPixel32( x, y, bomdata[i][2] );
                    }
                }
                if( lemming.erase ){
                    _lemmings.splice(z,1);
                }
            }
            _renderData.unlock();
            _time++;
        }
        
        private var bomdata:Array = [];
        private function createBomData():void{
            for( var i:int = 0; i < 30; i++ ){
                bomdata.push( new Array(Math.random()*10-Math.random()*10,-Math.random()*5-Math.random()*15,0xff5f60fe) );
                bomdata.push( new Array(Math.random()*10-Math.random()*10,-Math.random()*5-Math.random()*15,0xfffee9df) );
                bomdata.push( new Array(Math.random()*10-Math.random()*10,-Math.random()*5-Math.random()*15,0xff00af00) );
            }
        }
        
        private function getReverseRect(r:Rectangle): Rectangle{
            var ret:Rectangle = r.clone();
            ret.x = _assetsMemoryBank[_graphicsData.length].width-r.x - r.width;
            return ret;
        }
        
        private function drawLemming( lemming:Lemming ):void{
            var rect:Rectangle;
            var useBank:int;
            if( lemming.dir == 1 ){
                useBank = _graphicsData.length-1;
                rect = _lemmingSprite.getRect(lemming.mode,lemming.frame);
            }else{
                useBank = _graphicsData.length;
                rect = getReverseRect(_lemmingSprite.getRect(lemming.mode,lemming.frame));
            }
            _renderData.copyPixels(_assetsMemoryBank[useBank],rect,lemming.getDrawPoint(),null, null, true);//null, null, true for transparency
            if( lemming.bomCount/15 > 0 ){
                var numpos:Point = lemming.getDrawPoint();
                numpos.x+=2;
                numpos.y-=8;
                _renderData.copyPixels(_assetsMemoryBank[13], new Rectangle(int(lemming.bomCount/15+1)*5,0,5,5),numpos,null,null,true);
            }
        }

        private function addLemming():void {
            if( _appearLemmingsNum >= Map.maxLemmingsNum ){
                return;
            }
            _lemmings.push( new Lemming(90,80,_terrainData,checkBlocker) );
            _lastAppear = _time;
            _appearLemmingsNum++;
        }

        private function randomNumber(low:uint, high:uint):uint{
            return Math.round(Math.random() * (high - low) + low);
        }
        
        public function checkBlocker( x:int, y:int, dir:int ):Boolean{
            var z:uint = _lemmings.length;
            for( var i:int = 0; i < z; i++ ){
                if( _lemmings[i].mode != _lemmings[i].BLOCK ){
                    continue;
                }
                if( _lemmings[i].y+8 < y || _lemmings[i].y-8 > y ){
                    continue;
                }
                if( dir > 0 ){
                    if( _lemmings[i].x-5 >= x && _lemmings[i].x-5 <= x+dir ){
                        return true;
                    }
                }else{
                    if( _lemmings[i].x+5 <= x && _lemmings[i].x+5 >= x+dir ){
                        return true;
                    }
                }
            }
            return false;
        }
    }
}

class LemmingSprite{
    private static const sp:Array = [
        new Rectangle(0,0,10,10), 8,//WALK
        new Rectangle(0,10,10,10), 4,//FALL
        new Rectangle(0,20,20,10), 23,//DIG_SIDE
        new Rectangle(0,30,10,20), 16,//BUILD
        new Rectangle(0,50,10,10), 3,//BUILD_END
        new Rectangle(0,60,10,20), 3,//PARASOL_START
        new Rectangle(20,60,10,20), 6,//PARASOL
        new Rectangle(0,80,10,10), 10,//BOM
        new Rectangle(0,90,20,20), 21,//DIG_DIAGONAL
        new Rectangle(0,110,20,20), 16,//DIG_DOWN
        new Rectangle(0,130,10,20), 7,//CLIMB
        new Rectangle(0,150,10,20), 6,//CLIMB_END
        new Rectangle(0,170,10,20), 6,//EXIT
        new Rectangle(0,190,10,10), 10,//BLOCK
        new Rectangle(0,200,20,20), 10,//CRASH
        new Rectangle(0,0,0,0), 30,//BOM_END
    ];
    
    private var rect:Array = [];
    public function LemmingSprite(){
        for( var i:int = 0; i < Lemming.MODE_MAX; i++ ){
            rect.push( new Array() );
            for( var j:int = 0; j < sp[i*2+1]; j++ ){
                rect[i].push(sp[i*2].clone());
                rect[i][j].x += rect[i][j].width*j;
            }
        }
        rect[7][9] = new Rectangle(90,60,30,30);//BOMの最後だけサイズ違い
    }
    
    public function getRect(mode:uint, frame:uint):Rectangle{
        return rect[mode][frame];
    }
    
    public static function getReferencePoint(mode:uint):Point{
        return new Point( sp[mode*2].width/2, sp[mode*2].height );
    }
    
    public static function getMaxFrame(mode:uint):int{
        return sp[mode*2+1];
    }
};

import flash.display.BitmapData;

class Lemming{
    public var x:uint;//current x
    public var y:uint;//current y
    public var dir:int = 1; //1 for left, -1 for right
    public var frame:uint;//frames
    public var im:uint;//current frame counter
    public var fallRepeat:uint = 0; //Repeat falling counter
    public var bomCount:int = -1;
    public var mode:uint = FALL;
    private var nextmode:int = -1;
    private var floater:Boolean = false;
    private var climber:Boolean = false;
    
    private const WALK:uint = 0;
    private const FALL:uint = 1;
    private const DIG_SIDE:uint = 2;
    private const BUILD:uint = 3;
    private const BUILD_END:uint = 4;
    private const PARASOL_START:uint = 5;
    private const PARASOL:uint = 6;
    private const BOM:uint = 7;
    private const DIG_DIAGONAL:uint = 8;
    private const DIG_DOWN:uint = 9;
    private const CLIMB:uint = 10;
    private const CLIMB_END:uint = 11;
    private const EXIT:uint = 12;
    public const BLOCK:uint = 13;
    private const CRASH:uint = 14;
    public const BOM_END:uint = 15;
    public static const MODE_MAX:uint = 16;
    private var f:Array = [walk,fall,dig_side,build,build_end,parasol_start,parasol,bom,dig_diagonal,dig_down,climb,climb_end,exit,block,crash,bom_end];
    private var terrainData:BitmapData;
    
    public var erase:Boolean = false;
    public var checkFunction:Function;
    
    public function Lemming(_x:uint, _y:uint, _t:BitmapData, _f:Function){
        x = _x;
        y = _y;
//        chmod( DIG_SIDE );
//        chmod( BUILD );
//        chmod( PARASOL_START );
//        chmod( FALL );
//        chmod( BOM );
//        chmod( DIG_DIAGONAL );
//        chmod( DIG_DOWN );
//        chmod( CRASH );
//        chmod(EXIT);
//        chmod( CLIMB );
        dir = 1;
        terrainData = _t;
        checkFunction = _f;
    }
    
    public function command( i:int ):Boolean{
        switch( mode ){
            case BOM:
            case BOM_END:
            case EXIT:
            case CRASH:
            return false;
        }
        switch(i){
            case 0:
            if( climber ){
                return false;
            }
            climber = true;
//            chmod( CLIMB );
            break;
            case 1:
            if( floater ){
                return false;
            }
            floater = true;
//            chmod( PARASOL );
            break;
            case 2:
            if( bomCount >= 0 ){
                return false;
            }
            bomCount = 75;
            break;
            case 3:
            switch( mode ){
                case FALL:
                case PARASOL_START:
                case PARASOL:
                case CLIMB:
                case CLIMB_END:
                case BLOCK:
                return false;
            }
            chmod( BLOCK );
            break;
            case 4:
            switch( mode ){
                case BUILD:
                case FALL:
                case PARASOL_START:
                case PARASOL:
                case CLIMB:
                case CLIMB_END:
                case BLOCK:
                return false;
            }
            chmod( BUILD );
            break;
            case 5:
            switch( mode ){
                case DIG_SIDE:
                case FALL:
                case PARASOL_START:
                case PARASOL:
                case CLIMB:
                case CLIMB_END:
                case BLOCK:
                return false;
            }
            chmod( DIG_SIDE );
            break;
            case 6:
            switch( mode ){
                case DIG_DIAGONAL:
                case FALL:
                case PARASOL_START:
                case PARASOL:
                case CLIMB:
                case CLIMB_END:
                case BLOCK:
                return false;
            }
            chmod( DIG_DIAGONAL );
            break;
            case 7:
            switch( mode ){
                case DIG_DOWN:
                case FALL:
                case PARASOL_START:
                case PARASOL:
                case CLIMB:
                case CLIMB_END:
                case BLOCK:
                return false;
            }
            chmod( DIG_DOWN );
            break;
        }
        return true;
    }
    
    public function toNextFrame():void{
        if( bomCount > 0 ){
            bomCount--;
            if( bomCount == 0 ){
                chmod(BOM);
            }
        }
        if( nextmode != -1 ){
            mode = nextmode;
            frame = 0;
            if( mode == BUILD ){
                buildcount = 0;
            }
            if( mode == FALL ){
                fallcount = 0;
            }
            nextmode = -1;
        }else{
            if( frame >= LemmingSprite.getMaxFrame(mode)-1 ){
                frame = 0;
            }else{
                frame++;
            }
        }
    }
    
    public function poll():void{
        if( y > terrainData.height ){
            erase = true;
            return;
        }
        f[mode]();
        if( Map.exit.x+16-4 < x && Map.exit.x+16+5 > x && Map.exit.y+15 < y && Map.exit.y+15+15 > y ){
            if( mode != EXIT ){
                chmod( EXIT );
            }
        }
    }
    public function getDrawPoint():Point{
        var p:Point = LemmingSprite.getReferencePoint(mode);
        if( mode == BOM && frame == 9 ){
            p.x = 15;
            p.y = 15;
        }
        if( mode == DIG_DOWN ){
            p.y -= 3;
        }
        if( mode == CLIMB ){
            p.x += 3*dir;
            p.y -= 4;
        }
        return new Point( x-p.x, y-p.y );
    }
    
    public function chmod(m:int):void{
        nextmode = m;
    }
    
    private function walk():void{
        for( var i:int = 1; i < 6; i++ ){
            if( i == 5 ){
                chmod( FALL );
                return;
            }
            if( terrainData.getPixel(x,y) == 0 && terrainData.getPixel(x-dir,y) == 0 && terrainData.getPixel(x-dir*2,y) == 0 ){
                y++;
            }else{
                break;
            }
        }
        for( i = 0; i < 7; i++ ){
            if( i == 6 ){
                y+=6
                if( climber ){
                    chmod( CLIMB );
                    return;
                }
                dir = -dir;
                return;
            }
            if( terrainData.getPixel(x+dir,y-1) != 0 ){
                y--;
            }else{
                break;
            }
        }
        if( checkFunction( x, y, dir ) ){
            dir = -dir;
        }
        x+=dir;
    }
    private var fallcount:int;
    private function fall():void{
        for( var i:int = 1; i < 4; i++ ){
            if( terrainData.getPixel(x,y+1) == 0 ){
                y++;
            }else{
                if( fallcount > 20 ){
                    chmod( CRASH );
                }else{
                    chmod( WALK );
                }
                return;
            }
        }
        fallcount++;
        if( fallcount > 10 ){
            if( floater ){
                chmod( PARASOL_START );
            }
        }
    }
    private var buildcount:int;
    private function build():void{
        if( frame == 15 ){
            if( checkFunction( x, y, dir ) ){
                dir = -dir;
            }
            x+=dir*2;
            y-=1;
            buildcount++;
            for( var i:int = -2; i < 4; i++ ){
                terrainData.setPixel( x+i*dir, y, 0xffffff );
            }
            if( terrainData.getPixel( x+dir*4,y-10 ) != 0 ){
                chmod(WALK);
                dir = -dir;
            }
            if( buildcount >= 12 ){
                chmod(BUILD_END);
            }
        }
    }
    private function build_end():void{
        if( frame == 2 ){
            chmod(WALK);
        }
    }
    private function parasol_start():void{
        if( terrainData.getPixel(x,y+1) == 0 ){
            y++;
        }else{
            chmod( WALK );
            return;
        }
        if( frame == 2 ){
            chmod(PARASOL);
        }
    }
    private function parasol():void{
        for( var i:int = 1; i < 3; i++ ){
            y++;
            if( terrainData.getPixel(x,y+1) != 0 ){
                chmod( WALK );
                return;
            }
        }
    }
    private function bom():void{
        if( frame == 9 ){
            chmod( BOM_END );
        }
    }
    private function bom_end():void{
        if( frame == 0 ){
            blackCircle(10);
        }
        if( frame == 29 ){
            erase = true;
        }
    }
    private function crash():void{
        if( frame == 9 ){
            erase = true;
        }
    }
    private function block():void{
        if( terrainData.getPixel(x,y+1) == 0 && terrainData.getPixel(x-dir,y+1) == 0 && terrainData.getPixel(x-dir*2,y+1) == 0 ){
            chmod( WALK );
        }
    }
    private function exit():void{
        if( frame == 5 ){
            erase = true;
        }
    }
    private function climb():void{
        if( frame == 0 || frame == 1 || frame == 2 || frame == 6 ){
            y--;
            if( terrainData.getPixel(x+dir,y-7) == 0 ){
                x+=dir;
                chmod( CLIMB_END );
            }
            if( terrainData.getPixel(x-dir,y-7) != 0 ){
                dir = -dir;
                chmod( FALL );
            }
        }
    }
    private function climb_end():void{
        if( terrainData.getPixel(x,y) == 0 ){
            chmod( WALK );
        }
        if( frame == 5 ){
            y-=4
            chmod( WALK );
        }
    }
    private function dig_side():void{
        if( frame == 4 || frame == 16 ){
            y-=6;
            blackCircle(8,6);
            y+=6;
            for( var i:int = 0; i < 7; i++ ){
                if( terrainData.getPixel(x+dir*7,y-i) == 0 ){
                    chmod( WALK );
                    return;
                }
            }
        }
        if( (frame > 0 && frame < 6) || (frame > 11 && frame < 17) ){
            x+=dir;
        }
    }
    private function dig_diagonal():void{
        if( frame == 2 ){
            for( var i:int = 1; i < 2; i++ ){
                if( terrainData.getPixel(x,y+i) == 0 ){
                    chmod( WALK );
                }
            }
            x+=dir*4;
            y-=6;
            blackCircle(8);
            y+=8;
        }
    }
    private function dig_down():void{
        if( frame % 8 == 0 ){
            for( i = -4; i <= 4; i++ ){
                terrainData.setPixel( x+i, y, 0 );
            }
            var isDot:Boolean = false;
            for( var i:int = -4; i <= 4; i++ ){
                if( terrainData.getPixel( x+i, y+1 ) != 0 ){
                    isDot = true;
                }
            }
            if( !isDot ){
                chmod( FALL );
                return;
            }
            y++;
        }
    }

    private function blackCircle( size:Number, sizeY:Number=0 ): void{
        if( sizeY == 0 ){
            sizeY = size;
        }
        for( var i:int = -size; i < size; i++ ){
            if( x+i < 0 || x+i >= terrainData.width ){
                continue;
            }
            for( var j:int = -sizeY; j < sizeY; j++ ){
                if( y+j < 0 || y+j >= terrainData.height ){
                    continue;
                }
                if( i*i+j*j > (size-1)*(sizeY-1) ){
                    continue;
                }
                terrainData.setPixel(x+i,y+j,0);
            }
        }
    }
}



import flash.geom.Rectangle;
import flash.geom.Point;

///////////////////////////////////////////////////////
// stage data
class Map{
    public static const releaseRateMin:uint = 10;
    public static var command:Array = [10,10,10,10,10,10,10,10];
    public static var maxLemmingsNum:uint = 1000;
    public static const enter:Point = new Point(70,60);
    public static const exit:Point = new Point(326,295);
    public static const backgroundData:String = "89504E470D0A1A0A0000000D49484452000001D1000001A10803000000093F7E68000000017352474200AECE1CE900000072504C5445216321739C005001005002008132038484844F0100F5D6D63B3DF031B500F5D6D53C3DF0823203A253003C3EF063637531B600F6D7D6F6D6D663637482330462627432B600424253B485003B3DEF424254A35400A35300823303626374414153B38500CE7300AD52106300009C3110000000D5F9D25B00000001624B47440088051D48000000097048597300000B1300000B1301009A9C180000000774494D4507DA09170101227216822C000020004944415478DAED5D0982A33A0E35479823D856EE7FC589AD27791360C8D2A43E999EDFD51542B09FB56F2EF28BF42F0A443184FCCF409EBC0FFEF9FF40F1F9637EF7F97AFE2E3C7FC56FA6EB9F7FA75B3C7F99EF41149E6FF04D28FD4494EF9E3E1BF39FF49B7CB3F4FFC8BF48F74B9FE24F7BBE38DFF4798FE8C3237D63FEDEF48DE9A6E94128FDC9CFF8BC8442FE532D2ADF25A4BF279F32F203A6DBA4AF4F3FFBFC894058063FE7F395FEC15BA13B78F67BF3C5E99DBCD5E95B3DCD2D03DB9AD69DDE77FC316A1E283D7AC8A8A6EFCBA8A57B645C9FBFEDF77572C97A64A2FC3FFD367D267FE4790D9F1DC629BD883F16F8E03C9E2FC20531F253F147D273A5AB7D7AE090AE7BBC044CBB45F928F3D98B79F5783AF3ECBD762042E06F25E04E53B7C3B5F9B744AE1C2E2AC8F2E57CD6F3BEE5FD4D3FA525C56E5FE7968C9D8A38A5F8CA7C3EF05CE9EE01DF966ECB072843ED19D0C723FD9697968F59C05F9950D3B7309E0CEA6960DA2DCAEBCBD7523AD54F66E1199295B3F7D281E07BCA999C5B46068C5913F9E8789795EB320B0C91214DC7C8F396315FCB98867E5FA7963CCB908881D5A398FFF5A85EA083FCFBE777C5742D25FA7DDEAEBEEE711A98768BD20702AECC4C897F5E3F7BAF1D08DF2C766A198D1C744A2FC27049C98598ADE7EF1642CDE764D8D7A9254F71106CCDF3FEC4423161DE2D719437FD15B21567811955059C68A610C8F0B5B3F7CA8170CE9F58462D071D5415A1A0AC854092AAA0CACC21B1382849DDBE6E2CD93D5FD59277398888C14472CFAB9D4BBF1DA17ADEB7953726A28FF3C04CAB60E6D93BFFBDCFED3AB20C8BC765AE4B224045FFCCB7CFDB0E31953525707F4FB2AF90E31B4B766E793E645EB24B5FBFC7413A627B7EDC842ADD93488F707CACBCCE0333AD82E1ECC5589FBDF3DF6B21BA7A3B53E972242F564341DC49E3602ACDCB809501461F94FB85BCAF5B4B5E12A699DC9674F91E07E9D7B2B8C70AA48FA9D70C30E93B9E8FD9009338CBB40AF6704B5EE6C1EFE54F7607C23EC22BB733952EF708A11029B14624DA75008B608A8A898E6292A4FD11C292631C97BC3C1295160C7618D280E80A526E9943745F374E503CFFB72C7253F96F3A822CDAD3BA3655B0245B5A4427BEB7FB327C7C6561F6ED4CA5EB791F91692C4E6184E201D4BD90EEC6778A83D082D6992C9D61C9EEC16BD527DD66480372AF229AB67B5537E6A39669F4F91FB7D49B9CF658540558ECAB2A583AAE6E6027A64EFEBC2AEFCEF8656E6761C6ED4C2D29DF0746A28A52712A88BD52EC9B60092DD53AE3B8E40C665AB09B62481F401442F7A9460EBA31C4B4CB074F36F991FFE2B7A02A40D5C8DCCDFE0A530E983AF9FA97ED2D6CBC9DA9743931C661E5C33115D40A661D89A9972C2D24CB842DADB397325B0C691AA523883E892D6966CBF894FA544AACD864D9E3A4533F099A4405B395306723FA70830F68F3CB36E54CAD8ACAED4CA5CB35FE1516974F9D2550A84429DF0138F45F43A27526C7443449E40969FBA03623748F69441FC71075CF05C996D7B02C96B695C84748089B2D9F58D1AAD7107DAEF3A9E23B4B27B7BE6C7761212676536E672A5DB831545FF81249B55CCF124F5DE906A27AE023D11ADB5B96A55FEAD36E723D43728F8F20DA0AF255A6EE6AD1BFB4542C883E0E22EADCB2ACF1E9F1CBB6E48CDCCF52491BA5CB157E0277263BE80577AABC394CC6238D163FEAFA962EC6523B86E49603881EB8B417E487C4F45213E7AAE19B35A3B5C37C4C82B89DD3D9F91E5846665F1E47C132A291D4A79BEC1AB809B3514A506258B606E5B00DA43B803E46AECB4B6D9D046E711F43B43717F7C9BAFB1E20BACA319C5B79F86502D123CB5E7A252664D3819969263A575368F21884FC5F5C482156DA12A33B0AEC7C8BF5039CC5FFB2B9D4E37B7E081EEB484D9E1765BA7107D1953336714C8F1DCE41E8C1D00C428C2DA24CA49ED9A128EE88830718B5961246B4E58B4BC2C86D2ED530D1DF8BE904A96CBD18CEB8C584CE23FA7805D1A40007445098CB3AD65605B5285196E0996099E3B22B38C74883A956A7EB1EE711B54DF47722EA5E463463BA25A8D796FE5144B33F8BF5230E9945C7F137506744324AA6E280E4140D5B267DCAF49A44A2B8A9989A88EE9BE8EFDB87D7108D224B3774DDEF203A482F8ED9308932784CA3AC0D89BE2B1C18CE5C7892D8C56BD268D6ADB611DDFE9DFB2CA2A6203F41A26B9274E3D1DFBDA84133CA11C8806490849D4BB6A838FA384D04A94088BC89358A00FD181ED95174D710758F6F22EA5EDFDA784A5B7DF7A25C2FEF9026C02EA0A4CD66C7314535604271E106AFEF50CEF0E2748695F5C6832BFE3944CFF93B96CF22CA329393BF4077C81C43841441F5EC44274E3791984C64676F583DC2F1987EBECC99E8BF81E8F768747831D72DF978E48ABB28639685ACCF8929EC33A4924E96F9EE3AA2F1D0B2DCA489FE2E441F7F1351D18C40AAC97F2D9668C930614F211C81A218E5FCDDB02646F7887406D1C78DE81944D57AC9690ACF7F39D56B83E6A6F92C324932E9911A987D0F5BF1AE6390BA4913FD4D06E9E3AFBEC4C38034DC185C2CE628FF52436D99E5723543CEF6A63E71F68036B86B307E9646FF32A0F00246E01A5CAC5E01EA6C40CA350598AA0C6792B41F42D47D76DBFF2CA2C5539F3968AA4B72B1568D589072B89B72294D66BB397B8FF31F1EEFE2BAFF15AEF85945B78EA691E4D46B367D0CB05802A70221AE1639B905527613D17823FA6D4449E82FD36A929CEE2135864C8E89178BC61B91A42270AEFB17C074CF13E972A373CE76C90964EA3D8812F1465236E2DD0124991355494D9AD558DA3B10BD69F41C8D66CAE4F0A854A42AA260B2CC8F457F22649C79C90CDC11A3F146F4CB342A458301515046943873932400836B82D6794A16D9BEA61B6F44BF4AA28859FB801CEBE77F9846115B43D618219BBE8EAE79B65A3F62BBDCAFB314AA699D124779FE4310D5BAFD20116F645E76D1B57B1FAF44A2A85C4C462940631A6DB23B294766129E9EACE8DABD9157B25DC47B105178F884CB3D0AA40189275C11A8E1962EBA76EFE4958C17F2E8E68102FD2829FC52BDC2DE8718B81383195DBB37F25292944BE78A808CAE821BAA1367ECE652522BBA76EFE3D5606D33535C312783B8E8B52583155DBB77F0826E0666A96C77BACAB6E168B89706186674EDDEC00BEA475C9294FB3154883E2046B9043CD04A74EDDEC1CB219A8014D3F38993ABB04E0E061475B317C988AEDD3B783DA61BA51034348812AAEE51D54F319AD1B57B07AFC774D1823372AA5165BD64C919193C24658FD1B57B0B2FF6624AE386280D8D964CEBF49EE68CF5D1B57B07AF67928A8B818AA79EE56BEE341824BA9DA5ED105DBB37F09A8E236E0F9721AD3C0CC8ABF7AADFC621BA766FDF3521459B05E6B03DD745D36B929AD136BA766FDF3589942D51EE55D468465CB386DA5F2BBA766FDF2511F53168C79481EB2A4592155DBB21BD26A29E3BCDA77C862AF622DDCC83F6E01FA26BB724BD24A2413AFFE5562895A75EF3EA493C105D74ED76025E13D0DC0045BB31D488523D9B808B9B9AE8DAED33BAA8414A3E924E19297EDD2AD988592EC536BA964DD47B07AFE862F0E85C448DA7FEA1997FB91A91BB9A37D1358A37DBBDDE4B5AC473856115F1864D2A4E2392EC6B8DAEE177F7165E8D46B9533C26038506D107226CE8493644D7D02AFF7E5D50350AE8A65C47BC61946AA913C69B55D1B5783B19AEEA34CA831CA8F1D40BD7CD430DD0877588AEDD11EF4B0A5264A460F6876B291486A8CEA76BA26BF106F49A241AE1D8CD854DB5F5A2EDC538F9D388AEDD885E94E992669BB488E61AE1C0CDE3E2185DBB9375AF69BDB03B2FFBDF2BBFAE54A8511935D047D7EEF4EB6B1A2F7D17B95A0B965986DE93155DA3DB537F41121DBAC8758073064AE95B5F45D732E7BDB7F06A4274E82237201A9A613E547CC09E6E73F4824C77E822D7BD6F36D9C518BCDBC1704D8F51D745AE7730984D766570C8EDA9BF1EA04317B98A3C379BEC626CF3BD875763BA4317B98ADB6E34D94574ED06F4628AAED545AE169FEB4D76214CEF3DBC1AA25617B987A62FAC37D90DC84CB9C5E8D56C17BB8BDC23EE34D9855BF7F6D45F8E4657BAC855ED6FEC326089AEDD885ECFBF607691AB6CD19526BB3CB03DDC79465723D1952E7215A076935D763A849DE968F7EBEB14BAD6450E6F6F35D9E5D877AA94B837F24224BADA450E1EA3D526BB01399F7735D3C535231F9A2A89B526BB9CE079571C5EDF7A09A14674B5C9AE6715EAAE0ABEBC87813D078D666437D9E5BFEECAFD4B226A4F66AF745DAB0C98670ADFDD352EC976CDC9EC35A4461930E984ADBB03CE0521B526B3B7901A65C0E238BABB545D12D271327B8DE9D86437E703DE9DE42ECC76C7C9EC8D32DC37D9E5FE8177B7C7EBDA2FC664F616F1AEC9EEDD91F5E2246A4D666F7C104393DDFF50D7E4C49F7E4E8A1A93D99B57DF64F73FD3D95C7AB1FD18A65DFFEB4003A24393DDFFC6F401494CCEABFD359F51D5FFDA873E03DB68B2FB1F981082E8120AF17E69757DFFEB32EFA53AAA7D19F09F9FE2531C2B59E4D02FB1A0BEFF7508431F06A30CF88F4FDAE225A3043370778A5F8174E87F9DF2705D4BC4631970550643BBD3F07E95E592D068C822E7579638F4BF8E038D1A4D7603295B62C7E05F33598A3F3B9FE47CD67FC8BDD0F4BF6E7B8E3DCC26BB329C5DA5EF5F4334768866F6443FC460EAFED743B5A151060C4703426C89B4FF2CA014BCEABBBFA40554FDAF63EF33B29BEC4ACD1AF23EFF2AA0B0D3B2AC09BF8368D3FFBAE9C65AD68726BB120157877D64EFEEDF44543C463F8768D3FF7A88A69526BB439DB7ACF98FB591AB8AF2448E66D6FB3B82B4E97F3D70DD47C17130421952F27F2B63B72E0F512AFD2544DBFED76D564AA5EDAED679670FC51F44942A44F9453F0268DBFFDAC861D8AAF3E634ECBFA5ECB6345A83FA13FA42DFFF9AE250C9B459E78D42893F0A2843EA7F8A4AFBFED7A14674BFCE3BD3AFF77F17516151BF8368DFFF7A4074B3CE3B8A43E52FD3280AA37F8646BBFED754774CDEABF31607C35FA6513021E428FF8C6A54FA5F27BA73E6EA8C3A6F84F8FF30A2CA713373FA112F43DBFFBA9DE3AD2BB4EBBC9145F6B7D86E8FA77A197E4690B6FDAFBBE920DB75DE940B60D8DBF4376D172AF11778497F81449BFED75D57F347DCACF3962441FF774CD29EE78A97C1FF8C01D3F5BF0E2D8D52DCA8F3E62638289BF92B9EC0418AC618C22F398EFAFED7E43B5D77B3CE5B78B5FF81441C67FCB4AF18959C5D4E4FB9FC3287FED7B5F522EE4DBBCE5B9C0C62C05C9BED3AB738F758E4C7A3AA2EB3A5F00389C943FFEB8AEB167FB55DE72D8EC0B4587F59A7E792F07BFE7F79BE5C7E2DE94F06D5ED7B8C88EAF0CBF5D9EED8FFBAAA92884D307FACF356673DFFCB7F8D47D6EF6DF35207E24C7F0069C296FF6312EBE8035412F53F81E8D0FF3A940E55B10E718F75DE08A845284C26A293B2AB7A9F311A796421A9EEBD2D5ECAF4E99266C760BA2CF685602D62653F684BA4920F28C2F4EA1EA3B6FF753D374D3C802B75DE1CF4AEE8B5C767557655407757828A9C12946C3B5359C28709AC7EAFFEB93924E957F08DB05421E995179FFF23BF947BC901F054326E6A615A6947E42E0D68DFFFBAEE22A7517CBBCEBB24A6006EDDC94E7675FBDD13597B651E52CCBF6082C2B6EB9D4071CD05CC52999716441797F482DCFF43A40629FB7CFE3EE56EC8F91106ED093D6973819746D278461C34C4C5B95735EA0F32DDBEFF75FA478568366C8259E74D546C70561D5C4129ED52DE7ADE6FE2B707F800CFA2F06C1154BA6E93E2968A483381B2F69EB36DB87807CA02E11EE9C7455EE98933DE1E81FFC0F97228AB2D49E7E40AA4AE653686B4F82AB056FF6BAA72EA35338CC63AEF9241C65947E92699723217747B5BBF0B8F4550FB14D7127F4F626A8189C5C63C94093EDF2BDF2E87A1B60E818368A800543634488BE59B985AFDAF9B994CA4AFA1CE3B462A354E381624AB99D8FA65FF9A7E2FE728AEEC27480C7D7D84D970A92C1C2B5EDB56126B7B49439494F4F543201CDE0270E9A480FB26A456FFEBD0E4D45354126DEBBCD5A322749C152BE1B1135B3F794D6C5C201314A75CBE7807725EBCB431A41CB1D79CF22019E501FE4D7400DA3E0460D5B5E60C19538B77D84B19F3AF7900C7FED7B1D1E5B21C552A6DEABCD9C3CFB87AB8EFB198A9AD9FBAA6DACB598A63822B3A2A47ACA10804863500C47C9CAB03853EED81760EC12028B6658CFB1AA456FFEB365F573D9B639D37B73F12A78AD438B58BD93CE713F094BD9CA6B8CA2902F7000B7B4E75936C1AB6A3338B60B31A9ACFF421A805C59442FD15D5D7EC7F9D96E6DA68B8B0D6B6CE3B2076085335DFC858CC3AB39B6188652FE7373B687A313C9B50F9109ACF4F253B2FA52152A077E0105482624EBC7F8342ADFED74127F8343EB1B1CE9BAB0E510785789A290CD799DD3E3C52527E60B3C14FA09073D2784A60E562490EA0A8A68EF6B3A70E41111453E27DF906895AFDAF75DE4B8DA855E75DED4B603FA2F0E76E31ABE77C86167C3CBAD9B9D2554E204FAA46B3D18245146741D0EF3C7C0828F39F3829DEBF224BABE43F6E6514A4C5423B995D523C873A6F2FAE06AC5A8B85DBC56C32BB095A38B4D9C48CBC9443227106FCC82BA08C6742C59F39045C5E209C765F7E7C47E32D09BA6869832CA9E8C658C450E78D13A91429808F8BD93BE733B430BBD9CA2BA26A29DC44A1344AD351525114875387202F9770D584FC58D441F9496AD5247AD2BAB39CA3D0F533D28C9BBACEDB0765573071F234D23561B879CEA768616AB3E554B0DB437A114801A87C8D402EBDF60F1F02560CF3D926B0AD5DF9B1403BE27891FB18E3859740DD793987CCF5A965469DB7AE15DDE718D115813973CE67AED9DD6CE634D9FD152003BC3C91AA00BCEA50D5BF1E3D042C6402529825756E577E70BC7DF9A82309FD004B7437EF445FB51F9B3A6F8C7BD69270E293102563C55CCCD4399FB96673B383A4B9C1C98E525766E8FC741034A45AC08943A0C7809F9705285BE17BF28363821F849442F11445516C9AF85F0DB8948D12F60F3B55A5AE6C2D66EE9CEF5FB3B2D9EAA0CC32007FB8D1000B4BB6B2105A61952C88A7E8D821A8732363F0909E25CF755B7E38F50F7E82F9B2091114D3984B49CBF7A801A8D9C8724AC1763DC2865CB326ED7FD615C3FD733E738DB1D95E8BCE59658B92622B2223432AA115749D3A790848EF174B5732A91799D3A53E862968A86E7E5223AA03D2A80AA1C9B8678F347399D19E3D61714A31DC3EE733B4D06FB658C9ACD988D60E135B3BA369684544DE8943103DCADB83B26C922FCD9A439CD4A53EC37DD9A35B126A62D38741FD6E753414E97F88C404B562028B90A9C5EC9DF3195A68361BE58F39E718DD82911397AFD4E668125A411BB1E3878025383BFB4420B1AB2CB0A721FD6A56979248DC5BB92EF6499B9FE4275444634DA211D5A24C218C185B809CD3C2677E5631DC39E753B480CDD622486A32A7D373812588B65E422BE70E814E472E0D29D800E0C4F4AC95B03C9AD5A5C07CDF98ADAB8952B5695AD12818E886331DA90D2452757A31DBE77C861678B3792B330310FD0D36723E725C44878F4731C14E1D827C16730082034F88DD851217CABC1BCC6B529782447D9B3D1AA4DF49ED3E7255524AFAD596338435FF6A11A362F84565461065F0A99A9101368AA0FE8943A036B02A7F814A9113043B9A36F843BAD43B59AF066F5B17AF534B546C935567084467B5D471315F54660AA06A63B173AE2935230D9DA865B67F08D43A0187A832014A045770C77CAB595DEA7D5E5F2991E8C23025035B7662C319E27DF1F4C594E63028865F5466AAC01B11A445D41EDF4454055A6395E0B77F08B81884EB2DB3AA4FEA722109BC50457BE4FD015DEA6D790EFAEC6DA8D49504EC186198D8CE10387172D1219BEB9662F85565068EE6AA8D3535D51E924A23B3ABE70F0103C391C2A0457B9E3B03493A07C1FCCAC7FD802EB5BC27CFA104AC9A7406D7C55D369C212526E925D63528865F54669A9494A8F9326DFD60507F7C95CFB8770802EA2B49BC6068B6063F576E0C0E40F352F9690FE852EFD18F542CC426E5A846549A00AE3843A4CB722C47DE500CEBC3287D0D8ECAB1C943101BC09923C70E9F58926A22CD1D0252AAC372446E7A1FE40319D998E9439A56B0983099F0A04B2DEFC8738042837EAC9A16E8BAD0E8BA33A409C028E9768A61771825BDF0981C9B3C042CDD847EE17FA4AAAB42A5A2A6EE6961F21064350FCD9C648839BC9CFC3D91591DF15456F1C3585082091BB6E0EBB2148A0D2CC892BAEB2A40B5B584E90CF1423A41CB6046C57050EC4FCAB19943A08846E9A0503590C537649EC8DD38498CDFBD43C05CA754F1C7A09DE033C292185A72673CADC953E55B832DF8AAC6EBC58923BA9CA4D7BBBA1E9879CE9A3324223949B633120D8AE1A0D89F9163F38720564F4E952B4C9B0197E709C896DA3F04483116D7472CFDD68250AD283FDADB74459E162B6FB40517F7A2312A21AC404D098C7BF48DA0D79C2148E980455676BD550C47C5FEB01C9B3E04D4F4D422251ACD5155BBC3774767F310800AF91725E51F473DE2576D1571274F15CA4A176D6DC1E723BDA21D112C8FC076623DFCD9959EBAE2CE5D718670C635C73E73E62EA72267EA2C8AA1A5D81F9463D3CA4CA85A1141E8C726D620D42C0184C943A021C5A0AD86A1E98692BCDD9281C853B1A4BDC20C7D7F882533DF3D8BA97422927627D5F067876169F59ED9CE102A798D31B769F59A385D298696627F508E4D2B33414DD950B18CAA5A9D5D86D5B8B8F943A0E2060D1123F3A708DDB2F07D497565EECBD695FA2660D01AB660BAC5B29CE6BCA19C1A30531DFEAC348A3CA47567084B00A2626EABDD5A144353B13F28C7669599926AC2DFCB4C3FB6C125A97283DD3F7F084883C95167A484209A6F75CCB83648923E7CE39B80416BD88209FB177CBC1EF50CE202AC863FBB880196AC0AD0BA3324AA82A78C87B4CFB0D6BF8F8A7D382AC72695196ADBA846D556888A9F38C229AC7A6C5A9B7D95DA2EC0ACE2F5410E6B23049A2BA3E6ACD7BE0918B4DD5BFC13B3E7D39A6E14158EB42498B3545C5928D51D4947E58D8A5701A94A92EE591D0843B18F12789B966373CA8C8F555F0C54A0EA8525E9975B0FE860345FA571B45721F17BF7D05251BE8BBB4F4F2447F97D71B5447103D76F79116B671195CC3DB004744CC942CFE942C9C3F0B29C2141FAA0AF9F7C2DAFE8147B51998EC9B18943A0536938BC96EDC68248C59263D0BCA95028B9BB4A0977EFD082274B958E3ADB602FF7BE09C8BA20A5209CD68F68C9E95E2C013907F01AB152C425CFAE5A28A1BAA9E399D0AA764E3E8D34E325B7974A8F74D16A3608A919EF80D17DA4334A8A421D4A1D2C82B2739FB4AE9A63D716A32F0D6608957B9D6F8293ED3CD71E7BD23ED4F91486F3FE05A0C269D5013F3EBFD66D6E515E2F94B7DD936FD04C0865EC462E3445C8739B904A973E695A825A1D24674674F16671809C8C10626191DB9F34AE9A62D76433FA5AB312279F400957053CA83E68DC2B1B91AF219A9D77818A671DD586FB5B04E5ED04CD108C19B0A82C8D688A9034B341370759F679AB9117C387543ABB5009E2EC7FB2BB6A965D5B8796BAFCCA20E3003293CE3A50CBA4D0D5237DFD799711D7EC92FAF2BC94483F11DDDB22F11F9CA519F861D4E13D4748125BD4CDC11372F6B0AA8AE065887BC0ED30F3C9F6AAF38C9E0F6DA81DE36CADE66F82886B9954169E2F0ECFCE7547ECC4025C881B87E0F6B7081ADA499A816B90DB7DA6FB6912CCE6ED44F3D1CD11AF07F212B5BE09412162F70985C94F7657BDC6E82B791AD46C652879FB1A26F596C6A73ADCAE4805DE7CEFF6B7288C67FA08CDB0A2373CD0DEED0829BFB239B6AAA83E07ECBE04E2263ED95F759ED187224FA5E18640C922B46652CEBDA7D7A00886AA4E99837D6E628B3C1291CED14CF0CE79E379F66EC779684137C7541589A72D0664AE2546E91E939FECAF7AE5D08A3C450A0AE69379D1F3D54C896F4BD845FB1371BB7871DA3F6974778B4AD2FD399A311731733B89E859AA22DC34DCE7EFE108619140A975DDE62755C9ECAF7AE5D08A3C95F45040098ED834137C27A2C5D74588743EE967459BAEB64873F2CFD1CCCA22266E67DBB3819F35ED557274E7269F9CE3A1BD0A978D4FA62A4088B2E1AAD387D6D7532059E9A49591316E7917A29AE6AD19B0F9A4BB356D1A5DD1DA98DCC4C9E7676E0E84BD88A9DB899FB25715D3DDB9F962CAAA03A28FFC97E3AF332C6156321B96D15E357F6889EA433B40BED5F0F34D88AA6B5162D5F0D706B7A64DA329789BF2BB71F2D34D5D4D2AA55FEACA22766F97B73C31D19015B85A558CEA3F73FC5D8AA8936F1B2DE160F0BDFEAAFD53269097433B42FE05444B330A0D10F106BA556D9ABBA9F6BCD23AF9CFABF28118989F733B8B5825A472BE526FD040A917AFA82E68A166C8A6F4004EB3EC464BD8DAD3F6AADD5336C9A796CFD3A8D75A794D28CA1A5BF219D9A6AE3305A079F23798DFCE225609A9426BE1D66CB53D5BD1A8D029FFED5C9536C996303F817E72789C7215DF7FFB944D31962D441F6F4254664E06B8943157F6C91FAAA5F6246AAA34CE3EF9ABCC6F67116B8454CBF3C718198E6B1E970E2E274D4B0E50C9F39439B771CA2618CB56C6FCBB108516A779913241CB3D627C1C41F4E192EBB04AF3DD637E3B8B084F13AD269111A2651C34B00A68FFC8FCD116C35DBE17B3C5954F99B34E5972B4EDB88136107D5B651A73FDA81959E812F644F47110D186B33DF699DFCE22766CEE41434BA8C738BB5FDC1CDF1DA392E7295B1CB474EB943D2D047A9EEA75C6B2B9A07795EC6BD97D2C4906C90B18374EBB7D9A57115DA583ED45B8DDB76B4411B69ADE3F83C497998FB9ADCEF3F9546F30962FBC548E5719B0C411EF557EBF9A7C3851B471C433B2C3053B5EC111AEE97B733BFDC3546271EBA3A7FAC32FA8DA556B4CE6C09B88AEAC7D2283ED086BD946B4E7FEF16018CAB9E100BAC724916EAC73F9E7884A598ACEF8407C6D15519E4D7516D1C7C7101577D10144CF9880A642F6B93D382748B51652BC233EE7D4C7AD43BAB29AC73F447443D15D83E638A226B7BE16A25556A72433673ADDD475BF83E88EA6326A68C75491277B3CC3200D6EFDC93D3845A448528FD2FB23625A653CAADBBC7B31DB1B6E6868C7103D5721BFC3AD2F8128B2B083A4ACD3D85FF7DF20EAF6107D0C88C6CF23BACD752F30214F2B25508BC3F5BCDE9DA09CE59B889A1ADA1710DDE1D6174054AB997C282355BAFEBA93CFFCD5D5D81ADA0148CFF2C7ED93B0FC7B444BC56190D284481B5CF73288DA1ADABF46F402345A55054314A8DB0000200049444154A33C35673CFD06A28F1710757F15D1AA721FC913B19ACC7EDD970DC801AE7B7685DBB47D897D2BDD356299907379446D8975C457FF1144AFF0E2947E5F8F600FFEFA346A23121FF1DF30870BBD8C812FF41334FACF10BD3CA0C650264F3F8A68E2B9F1BF8DE8CAE0B4763AC8EFBCE23175F72FBEECE186D4CE4DFB3144FFDBAFD501A4EEDE9B9F25526348F08DE88FBEECB9205C267C23FA8BE469CF0589B939C38DE82F226ACF05E172AA1BD15F64BAF65C1056776F447FF0B5321784FB55DD88FE22A2F65C90E06FAEFBB3889A7341B891DC8DE86FD2A8351784FB58DE88FE26A2D65C1096A837A2BFC974ADB920DC40E946F4F7005D9B0BC253416F447FD0185D990B12FCEDA9FFC1D7C65C1076F0DE88FE1AA2EB73417266CAAD19FD24D3B5E782C4DCCDF846F4E7F4A2D5B9209C3A7623FA7388AECE05C9BD26FD8DE8EFD1A874C8E7505A9EB614B8077BBC23DE3FA9EA96CA6E0E77F350ECC883976E5DF7FAAFD47256734D9BEE0B9866227341580BBE11FD2010C34FA7EEC30D9DF24D16D77548893A38945DBCFE8E784F03E28EC1C653EEA48BA97B05D0056DD772F796AE8B51AC667AE690DAAD19AD60D400A2B008B6CEBAAABCEFB8B9F0C250B8DC46E7546F156EC797A0635C97C5E83486590711E3246E1AED5E4B464601599A3F0B18A05BB9AA7A9F451D5F9A0868598E53EAF3D39CE1977A182FF9DB8C6E8011030FD0CFE8A6D161139764ABF3FEB9EC684BB0E55F3AFE6DFE25E05CB0D3CDFB89AE8626B380FC805CCD80A6E17A3CE23D8FA0353A76461ECF8621E37FDB0B680B39F3B7CA457968958C6DE1CC00F397B9B5AEA78C77F7FE73E3C746D019CFDCE7BD91ABCE7A2A6E32F904541C093C3634489FEBB6AB2E432B834CFE8CF552EFC8B690B3341670D11CCCF032BA8D676FE62C1EEB9701B3CBC60F39BBF77B421E12719166497886EEA99873CB94886C76729B9B6875BE263667729034FE7E568A89D396901B7EFB00D9E40DE786F339D32EE87060F397DABE6DFCD04EDFF36511C5B53CD9F054CBA27318B9F514667919DDE9397F8C079AC59FF7193124907CCE41F26D09B92C199DBC997F9B0EC392B69024C74E1CA7D2DB60FC25CF9F0ED1FAD0EE6C0279B2328EA23C2B9E4AA7EF06991A4E9244DF4F90C8962814A65FD775DD9AE4DB1072C3FB0EE451E68F8580715B3225A7FF25FB68F2B04AEB43732363D2412B2363E4A83979641DB218C429C4E322C6292F31281FF8AD9CFA4A521656BB26F9D6855CFB7EA6DD04A9E4EC608E3CCFD8D24F079D2D9CB1F2CC59C9FC503839D6A9396A3C1C94C79104380FB24037263105990BC2DFD80C5D3A3FB3F6DB921222714DF26D08B9E6FDF4A3CB0C175C0DBA253E289F66E68BCE7BC2F7A2FDA13C21FDCCE8354EA5D6A3989F92A7C7719FA2C0676C9C96E623B4254CF0C1BE453D3A17333A56F59C0DC9B725E4EAF7193557A6C94AAFDA885A212F329407E38A26E2AB7AB0EE43798EF7E9999E54B7CBE541689E13FD3877DE5B130D8128C69C7A998C431836FB0F215D313A18BC62F643E23CAFB225DF8E90ABDECFC4265E51A2D2E42981E1CBA729CABDD858E069BCE68750A9706684297378398A307E022B3D940735EB396AA78E7A990BC2D39F1DE8536FE189FE0D9C1BC4682A372B428C76849CBEAFBA63D4F9DF916752A742AFFAD38198070A53A5B50FB1240BE7C60C6388573E6AC2CF211C0982C29B93816516AE174465767CBE8247F6FD13EF9BAB6C8E5A91B7959B0D21B627E4E4FD74DFCC43051C1CFF10BABB4716B9CCC10297E35A1FD224BD53A3C065742924BE88419034D3EBCAF46ED2686942B4D83AD0BAFD3F8054420B0B4CCBA538556DE5665D88F91D21A77BCED9E8104AB1B05174D9EB3E4D114442F0C0C99E8FFEBEA8B3DE395544C2985099439041EE199FD88D17E643CB44972761B2FB8F1D43AC3561AA741017AF3C24BAC881EF08D7654AFFBA51090C47EE6A29379B426C4FC8E51457743050F6DCD826F6A735134400A1D5B179128E86C7A96291B97037EA4B12869A11E0EADFE38766CA8DACD5325716AB45F4682406F2478223BD3F1549FC657EBB40CF19B9ABA1DCEC09B10921178A62C154D6D826E6A7334F85AA2B14B83BE7901F194A0AB87FC193981DEB0D03D86D8C12FF24E6CF18B95E342B76E3721C868F81344E8E986D58239AA1A76FF25BA14F83BB1ACACD9E10DB7D3F94FB821042686D13EBD3D9A727663D633E337E36F2D5B1F8FB94FA8557C758E93A51BC7B5E5833B1D1C2A7394B4E4275217A30882722F920629EB25569465EF5DD2F8623D9B36A705753B9B1251F0CBD2C7428EFBCC545D9B80F7A5F902A9274D43659BBBB678A8D81319F1F11CDB529E2EFD3D4037CBB7E17E815AE838849C4F94E5085353B2CFF13D64F9094142461D7344A62E27E4B358275C2DEBC8EBBAE283796E40B5EC6F7CAFB3617CDEFE3BE150F0DD5688DD5BBAB74D48EF02F8C71AFA8124A6A84E22401720F4D2BFD950406D37D107B45852A17188A0E9D12EC81A8F07A85F44B88C2F61CB9EB9A7263483EE9EA0DDD4F234F23170D4569AA79283C006A9B987797E095189A115AEB497F9F3620C26D5915872B3E86D2D7DA272F327E1933FF0AEA79E20324A650649D8F5C11D204F7C4D710E54956AE1C2953DF6C941B43F2A90DC85520F97D9B8B16826D782877A62DB68979773C45455524C1E653FE3E9C103D8AA2D9F0923D54A8C06416D9AAE4839ACFA597635345D5B226E68338356551DF439495DCE254B53965ABDC8C922FE27807B67CF0BECD458560033201107B547B6FEBEE11C0A3CD17DC34AFF8FBD82095A3287DE13864C6479C4B59909A823E1A691710E39681039104BD0CA02BCA16ACAAFC945F722A2C1531AEE99B05F2967A19B3CC74D815544B46938B0A4F67ABBD32248856E46AB97BA5FE420246D827A7FC7D016417A0EEE6AFF77C3A4415C0774197150E81F46BA17B5FB2EB617B3A5D94387EBF8328271CF4C69FA96F069B7A0533ACBA958C2617855ECAF787AD077B7E55AECA9ED6A2A13CDB597FDF982A183CDA37B2C6006F7239BC4A8C6DD845ECA7AA72DF156B57E8369F836F50684B8C2BFA2627171BD40B2F0CEC815632DA5C34FF14D438A2E2B95991AB7A77362615D9A8CF77DADFD7BB0E3DB1B3005EBBC4963D2917C986AC16BA00728F53D056EEFBC67A11FFC21710CD7EDB86186D4E89B366502F0915F131647DC4C3116472D17274D51DDFEAD43007E145A804A7B0D6504805B4DC5F257E67AA9D43F80A214998A2C812D2E9847AECA80883D6988A2500016BD70F95FB35A2C569449F8EA8E5ACF391182D4E09356EA45E4E47409C37DBF6621EAE7151C9CDC9742EDF49E588886DC259B0ADE0149D4642E6A806EBC52B1C05543B6F7522CB263CA2D697FD108E1C6273383213559537F495FB36A21F8E9172E4AC37FE6C4E896A57CB5A94FE959287E373983A8AB361E4A2BC9DD9AD1443B18CA8B34DA822DD6287B22EAD8D8A71D8FAABC021C58B10451EEEC1C3CFA24C3C0AFC419CA17A3CA00D14BF4557B90FBF2ED551F34F7B8D506D351A7F16A784E960516FE08885661411529381FAC845C5B9409AAAB3CE3C3BC119A327752968EB691AAE1277AAA45F06D8CA102ADB9F0C7BE40F570A7C1E0495B7ADDC8FAE13A3E2CCA60F6BB9CB60FCADE89B3EAC516FF6E94349A93962245AE3A2890542FEEEED5E23380B1B64690E2E4ED65511CF4D6C94B0DB61E693EAE85925FFECE48D3A9F32AAAD5A55EE174425E02691BC0F6BB9A3F167734A664816F59238917CE188CACD4C2E0A0A2B8EE2CDDDAB8F09FBEB911C2BF980BE3F4CA492591C4DEA6798FAE42E1113347DD52982F2E262A8BA0A50367381EAA78894B313D8A94595F33B6C704A937A2D6FB7E80236173DC4025BC189004CE4241080D41C2604ADB3622428AA2360F79373E41F4A4218F89A3C69A9DC571AE58FEAE090CFE9460B6BB9FA38B176F799FAE68AB56847A4A07E985CF4080BF4ADE0942816E7FC8869EF87ABF867E44257BEFADD4FEE1231A76CF248473E2C51D5ACBA725FE2A320080D79FBF0494483A2501BEA26A7548D7FA45E336A5C3C8523179D6681257796294D92DBF96284B368B82A0455CCA18686C94FEE1371B78B1E092A95B3109A58D4C807D5E6CB07D318A0E516D2A918A7C129257FDCD473C6CC0EF6E9059B8BCEB34049F7800B8D8DF9A8BDA649596A7DD5C305CEDACB616F1EB333F7C90922EEB7D13B0733402D23AEDCA74A33A216D24F210A4344D5527178DB9C52430EA3B568645FC558FBE97A2E3ACF0211EF82FFFF094EF6FD22EC8CC87A7F554A37A6804CD0D49D2F6767A8B5B3F1C90922362943545EAA2BF7A9F102D626E9A71085FFDB4BD65E1594B23825CF4A35AD45C3635A4964838BCE32CFC6DE23DE882746CE83C80CAB9072923FD73F42B6244F677277B29DB1F1C919F2B710853C6507A356EEC7C66744A5D2E363CA2EB1218290701538B6392561FAAD612D1A518DDAE16270D12916D8DA7B0D51D083E77E0E56214399CB749687222A05F891159BE1932E7D7286FCEDCAD97C4BCF4659A9DC6F108D556DC0C710AD6D6FB0542477ACE89BE457F41C23F2A8F2D4E4A26166F75A7BAF230AA656B2AFCA90025114E36BD15FEC3EE9D2188FA78E885FD326F93F56114DF411395D4E2AF7A9A351156C9F43940D114DAD2A095836A78CF9185A7A8E911DD067334B9E5E3A4124DDFA3777AFB5F7C62D4C2D8B7BABB068F1F9FF0DFE3804B1FDA473DC3DA52A0CDC22FF2D44D9295A2AF71B44C5DDC152E553CA2E8353D21F3549D2E4945E131E7BEAB53278BA8A0389C2209C9E8FFBD6EE45552AD9DE7B588866AB10FBD95E9545E9D8FC446954EDC9476E2F3036AD5A25FF55441FC83EAA2AF79DC171913FF62944A182718A72661C1E95D306A7F49ED6AC4523CBAEAF0A827081BB6F63F79E4413C35ECB879E050FEDE1D67A50C141D0BA420B3D17E4D7C8DF7A9C52C6DD56EEBB064FCD63F870F825914BE23C7CCCFA62832113D6A45E3313B6ADDC1377357FA7B57B2EBF9F2D81BD49D2EDFEE7C6443D95AD768A1B21CD1D17DC78DA0B9348ED8C1E13887695FBAD1CD5BE209F4FC34E0DD62A849B82A03E5B7D4DCF61977DC9561F929F377BF1E5DD638D31A598EEB2A4A507CFE8E0E8D6BFECD1B809D0BE71C715335309DF57EE53AFEB1640FDC7F3186AA2ED326FF62B4A04F25251321628EC7757B4B9E70CA236916D1D1FAA0895ABD7E7F767EBD61C5ED690B7EB8C97E0BF93C79016353C9766C7ED567D4D403EA2B0C64BE71A6BBAFE83B91CE088F6503376E7F6FA03CE1E97AC1449989D62AFEB6AC8DB7F19D107275F96136D5666B27E190DD9DB436ED1D50A254CF6BF756354F008893E1A1A6544DD9B10951E2AD93E7703CF657EBCE27BFA1CA2A3F6F43C6EAE4D81ECDEDF827C47AE9DE59E0D8D1E41541C47EF4794B47C92D3FD87EC4E2F7F7D3AC5730FD1C488D91D9DA47D36473AC8DD90F5FA98D5544E73CFF673F380F6EAEE1B6954F2229169D522CAE308509BFBE9A4DD5D961862B2C419FC684494A27BEA01E4AACCF4933915EED4D32FCB34893E1EFDE3EF6B46F3770F287D679FA6ABCD5158EFD2FEEA5F23AA3ACBDADAB9D1776FCA7D907B36E4EF8E213A3CFACEE7A7EFFE8008C5D82DC3678484E68F1706CFE8978E75D18DF79757CFD539317A0CD1F1B86585ECD5ED518F2521D29EC8B189786BDC057514FF1C5126D20D1A5A5E47F471EE1607103500CD1F5FDC5B109532301E5F19EA7CDD2A310536CCE35FBFD0597883C2DCCBE7CA2D679F6D9AE98E02C1BD3834A463BA6C77660F5A83A8F692F3DF70044EF9957219F8E3E7113529D0BD05517438E4CC63F2D422DA7976FF39A2E88EF3BA8AFF114467CD8BC7C356DADE826869448ACCD63ECF88AA02B58B20EA3E8AE8E334A293922E3E3E8A2817485439B2AE4F61A80AD42E81E836D7758FCB23FA188DD1C3F6C9B60F30E884C33E87A1EAC98AB196FF1ED1A4897E1AD18F7776B704E99B1EBE141A72265EEFD7AD996E4E3DFEF7902E6E6BE5CB5BF8C00F23FA9062E088065CC1D9807AB465BD3AA2EE17105D538DDE42A352B01F81AB9967A43E231FFE13887E1ED0C7237EE8DEDA5423A2C179B0B9AE34AABA06A28FDF46F4F139449BC637689CE3CCA4144FFE3710FD8FBFD0C8DBC35D946B25FAAC146D9B2C46E9BD6D57A6FCDCBA008DB0B920A0CF1C2B1DEB2537EB26912BD3288FD5C8617FE970E674F449DFB31875638BBB31BD308D06696984DE46313AE98A1DB51C864AFB9C988650DD905E9744795413DA39713EA40BB5E93276208C27D370EED7372854535AA5242BA43C9D9DE1259E47C6DFFB7745124501416E272D9D291DED0C2FE1898EEE7163FA039A91CFDD6FF6869724C9BADCC2F417AC97ACD6BAB9898EAFE7F3DCAF8F7B18B8ECD24D4C74F4B91EF9A6D22B22DAB4BFCECDB6DCDE44C78059E7B7C67B49B65BB7BF666A7468ACB636F1911BE4FBC476B5C3C00DED8520ADDA5FB3D07465A0DA38D111E349B23E25D504E88E7BEFE56520D5F6D7EC54705E5ED644C7C81D55A03A39CC21E4F1BDF7665E84ED6A2D30B78B71D07FB9F17933D151C7ECA1C17F52A77472DD0DE955EC97D2FE9AE5A4E32E14DA324F09B21AB327BFF3998A6534B3BB99EF1548B46A7FCD66A79359CF548DCDEBC7ECB1F72137A841F7B71BD3AB48D1AAFD35B35787EECDE8159EA2A6E398BDD24ACAA333CDF37737F7BD8241CA5389B8FD3503E5A4E729F778CAD27318B38709DF3936A333DE3CFBF06F48FFB5CF48DB5FB389E2AAC1DF79BC370F5EEDC6EC91CEA8E2194FAA4B81F9DE7BFB8F1095A9D2322538853F49A721F2B8A718B4AD6619B3272DDC3020A1D6A52051EFDDFD374C57C703220493E42863C30DE4D060D70F63F6303091A4116DAD4B99ACD7193FDDAFF733DDC885C0E8D19E28D0497F7C34A3965EDFA11FB34751E70B0FBA54E5F5C57F33C68BFC7863FB9917139BB6BFCE69D888BD784C3D28B497DDBC5EA712938E192CFDE32B5D4A2D992507C71719D0BDE0CF32DFACED7E1D732FC4D2FE1A3DC7B8C7B81494B25BDEC3F7276E41C2285B9D533BEA5262CAA4C6CEA91B70867441DCC615786F50DF0B290B41386BB3C6E3BCCE492EF3A102CF4104078EDECB0823B40DB77429B87B313446260521E930B738CEA86FB593B865EF094863697FCD75C1CEEBDC369E8E980B2822BA6B482F779D4D5EFA340CBAD413D2C833C7751C0BE61371A54DF6FEB357B8838D45F0287B6F0D7A8648ABF6D7B98BA7F3181C2883C5532FD3C0935A3100CC435A4ACACA9A2EB548B332E248AB0C7D25994C987EE4D9A38BAB005461DBCBDEDB2A9A40D457EDAF23E2A31123A7A2FA72B98D3406C0FB3C4E0573A4E10FB475A9C98C256065009829187FB93B683787A8D7F6D7DCA5DD7111BF7698A6AA31B8C78C29566CC57209ABBAD454C612013276393180AC4BE59FD513C572F97648ED201A88B4FD35F7BF716821CD53C29BA243CC3A27098F32CB26BFAA4B4D652C0D4AD3A62E75E74BEC00DAF6BFCE5CB70CA1AFC6C34B83C06CC170B17710B9E957752961B4DB194B8DD2B4AF4BDDD9DFDB0669D3FF9A72C41B13B1311749373F723434D3588CA512864BC34D5DAA9ABEBB95B1D4284DFBBAD4AD1F6DBB18EAFED789761CE64D511F6EE927DB63749C3891A0023731B7A8A359F632968AD2F4E7B3BF3F6A64F7FDAF19D128E39EDB704B37D95E83DF015D058D4340182B19682263894475FE43D9DF357AB683FBCDEBE8FB5FA70D73EC28C8E9264DB8A59B6C1F65D40AFB86D70E41640E1DA73296E8AF647F9BE8AD38B8DD5B1D275DFFEBA4AEBA1C234B024E46BB32FDF593ED030F24F3015135FB10442219623E9BB1F407B2BF193D9860D915AAEEECA518D979164BFEF99D6B69FB5F279DC491F4A76707100BC071B2BDA82A1A28ED0F41F4A2EA781D323F99B1F4DBD9DFD9FDB56D822DEDFB6F5C4BD7FF1AD341901DA88AA739D9DEA39F60C4ACDEEE10203CB3AF3DD9194B3F93FD5D49CAC26AF74CB0FEFD37AEA5EB7FCD5DCD4174111C34F0D666F7011207E19CE729CD11EEFEFA1014C2DAD79ED63296AE9DFD6D4A4A08CA3D136C78FF8D6BE9FA5FF36C43C935A18021D7F984355D77439E85EC758876770834E636A13D6D642C5D2AFBBB353A56F59C1470DA31C1C6F7DFB796BEFF35318D822912222E2CE074923DCBD3ECDCCF26079CBF7A0854642298B3A33D6D662C5D20FB7BC5E860F046FFB3737B2698F1FEDBD632F4BF26CC7B910EF51A2753E7518418AD5C8732FA5C0E81D217CEE18EF6B493B1F46FB3BFDD16319ACA4F698F699B60E6FB6F5BCBD0FF5A26CA0A9320F53E3480CA645E19995D8F2960AE8998DB8CF6B497B1F42FB3BF1D82B78DD1C1913D5BF989D5B6AD9960C6FBEF5ACBD8FFBA4C7D269D612FF3B24B07155677496DD47A94488134104D694FFB194BFF2CFB1B79524B952925413F5BF9293B64BAB357DF7FD75AC6FED7A19AC9C44982B0282348888568AC28B81E28AC89BF12739BD29EF63396FE45F6B7E3A11519C391BB5ACA8F1EEDB8E2CE5E7FFF6D6B19FA5F5773D398CFB1C42A716F3D6511DF5DE9C011F25FB2069198B4AF3DED672CBD9AFD7D8EDF2ED07346EE6A2937AC8C63AB4677F6E6FBEF5ACBD8FF1A73D364728F6C72F454B10C052F6F77EC8994B8251D815427B4A7898CA593D9DFAFF05BA14F83BB1ACA4D3E7E8298E5CEDE7EFF3D6B31FA5FA77FC0C3C0B16B4E5791AE1B11670B5E236E5E5F4DE42265A8C29027B4A7B98CA5E3D9DFAF1128CC7D83BB9ACA0D31B8350B6BDCD9FC7E543AAF79B447A8F9E5B558FDAF893523D07F28A492931214519D1A122B407108C4648E11877B577B9ACA583A9EFD7D3E4E05EB84BD791D775D516E547BAB306BDCD9450580265178B08AD857D762F5BFE6994CDAA51394E33B15882F88B2862A6B05E674A0A223EF6A4F73194B67B2BF4F230A3D73E4AE6BCACD5E3200DE2F81E59A07E7D4AA77ACC5EA7F1DCA041F52E2127BBE16A39C95220B8BF52150BE8413B2AB3D4D652C49F6F70A13B6B2BF97176468A24F952506A7EC949BBD6400BC2F81E596478777ADC5EA7F9D96E06249E512E20340A11A6309474EACFC49E510A8F538A13DCD652CD10A9460C24660FCA42C6525D7557AA0C5295BE5662F1940DE0F6AA5D73C3ADB2EEF588BD5FF3AE7EB0ECC94B90A7FB7524F61AB726CEB43C05226CE684F010C1F9C6A2DFB7B4D9E3213B602E3A7345E76F255C46873CADA8E6BA9B74F0668920534B05CF368D6085F5F8BD9FF3A475F8BC72E22C2AD48A49B8B9FB6BD4AA98FAF557ADCD79EB2AA4D3A13732DFB7B459E7A99743106C6FDE24E69B96E301D474EC9BD822CEAED9201DA6401ACB7E5D1597F787D2D76FFEB9027F85446133FB64482D0F70872B3B90AABAF6C0A15B33BDA532CE628B45C33FB7BA59A0A06AD11187FEEE461ED2853684B8C36A78CACDF19D4DB2603B4C90230FA3A1E1D7400CB4B6BB1FB5FF3BC97A2F044F439020752B3010B2B5729E1563A283FF6AEF6045F0634DDD5ECEF956A2A18B456609C79953BA8E5BA8E186D4E193571B1A75E121AD55C81A8656292F3DA266C413ABDBA962AF98F5DA68A9646D38278863CBE34AAE257912142370623CE884E684F65459ED6B3BF57AAA960D01A81F1748B6539C47973F5F2488C16A764C662502FC73C3C80F1D25A9CCFB699B09577F70D6B2909BA7810F08408C79730512F6AA77807CAF060BDCA66C44CA2BBDA93B0022AF1D818AB802C07D9C34A3595D0C318184FD81FF28B72E4AC372D6D4E2961A4917AC5F320C06665A5A45F18095B91DEB4164DA227D95166190E1A3393284FA8E4E394BD868822507595CD88430C53DA93E60C87F25B3919F5957635150CDAEE2DFE89D9F3B1D0991B4D4B8B53C2536B512F5B6D51338AD8C88E11A82B2F53CFB9F0A8D7D7A277964DE336554EA062751420F2CAE4D6E2B1E2AB2C465CD8F59EF6A4448FA432A576A68ADA5830AAA9C4A0EDDFF2E2E3F787B4DC65302D6D4EC98463522F217E288A47C3A384FDA812AFCAFC5BD6827E8045A7CCA7CC118C07CA004AF883F343345A19EBAB0C462CC7785F7B92982B574AA88B4DA6CC94E3B2564DC5760D57C0B281CDAC85CBB3E890963BE699DB9C92799345BD244E24CF7E18893CC5C62D4E9561CB07E72D6BA12A4F228A229EBAC8892C5FBF35517755C788C1AE67B4A7C6D8A5768638C765882A796AF826889DA3819F891589ECACC83C6C320B9EB55CD3DEB639E50AF56E490C59B826F6B093357DE77BD6C2E665504C633E1F0EE4455BB75659A257B58C18EC7A4A7BAA8CDD644855AE6392B02CD5FF6DCE0DBE2C225DDF0735B38945DC34A22E486147FBA02B9C926845CFD99018D5E2CB8E10A4D83BD6029BAED2501851F11E6DDEBABFAA63C41ED1A47DEDA93576C58316D98B966D14EA9EB13E37F8B261CA10E74E5098D58B16D6720D7BDBE4946AAF8CD4BB25312AE77FB91B4790DFB2168F9419B5F6B90FC3B23A8C29DDDA39DC7AB88A46763DAB3D89B14B52C69F81D332E5106B50A93E37F8B27E12185BDCF190FB2FC6CAAAAFDD5E06A714D5DDD4735625464490B03E9E7CF2DFB416B8A024DA89AFC8368F39302DDDBA715CB45705835D4F684F8DB18B5C154E3BF7858955BB13D46CE5E5F397B5D3FA4E845C60880CF6B6CD2935403B50EFA6C480ABBBF846931685D4BD37AC857CB1172AD3D401AC61A86153AFF330AFEAD9F58CF6D41BBB9E6BD350524108D1EAEE484A9E2C1F0A4A3551F3C9458E230A0164D9DB16A764A5C3A2DE2D89D1D833C4BB849C80B7AC8524D2DCBA8F5C5559DA0C1E15D7E7507FAA578D8C78427B1A8C5DD1C610E0E613EF657790B621E746BE4C55FB782E2C8AFC99D1DEB63925A94FA6A7DE2D8951EC19B07339BC6F5A8B369E695DBC4EE94F6EED96F4400F0BD1EA2AAE18EFD8F584F63418BB485785E104979B97DD91442D2C1F5FD68AC4C7191AF59AE9D6DADB26A74C126345CFD992189C9E8050212F192AE15BD6E2D505D984615C1D8A7043373EB79320F1DC75E78411CF684F86B1ABB567882E31A2EAD9E5D58FCB9F7CC215BD1F036F067BDBE694E948DA7ACE418981CC8DB7AC45F32EDB50A96B1D29FD5D77BF23E6248A0C9A9BD29E0C6317091CFCAFC8E7A3857CE3F09E4294EB2EA3616F9B9CD26B64A4A7DEA312231B106F5A8B168FB5E90C2D418E7D1F76BF23C4E421D5C7D9D39E4663572027C4BF8301F9FB11858F68B0B74D4EC9746A51EF518911C376C0F6208D8A8BA14E39725D04B86F693CF11D2DB7DED19E7A3B7ACABFB1F518EE74B3A383F6B649BD47254678BC1551CE2C8E4D5AA0EB72CBFB9B4EC8EA8E5BEF684F9D1DBD0BF9EEC17AA17DD5117B7B4DCF794562BCB4162F4A09A75B6AEAAE1BEA3F0E23FAD8E9D2D3684F861DBD0DF9EE63BCD490EC90BDFD7689F1CA5ABC54A04AE6B8A4D7BBA160E05456FAE654815A7BAA8D7A44BB330000027D494441545DDD49B7E2DF983A582F55311DB2B7DF2E315E584BE95C2172404A605C0FCD72E29CEF7DAED69E2A63B7ECA44BC3A1DCE0DF78F32EEC4BAE6F4B8CD36B61D91ED837974E4F19FEDCE941CB29266670EB4DEDC93E14D54E3EBEF53A646FBF5F629CD70082A4483293AF863F77889EABF1DAE7D696ADDB9F89C73F781DB2B7DF2F314EBF42C97885DF4B873FBF07D17D6EBDD7E3F05FB55C3D646FBF5D629C7E213012C405580D7F7E0BA213DC7A4F7BFA57ADE10EDBDBD790185E8A80E1A6AF863F0F889EDB97BD93B0AB3DFD2B448FDBDB979018EC934645B93A457225EE9710DDD59EFED5F4AD37D8DBFF4262308F25F889D0CE8393F7DCBAC1FD7644DD05117D87BDFD0FF88BA40BB053034D6D79F8B37B8B5A3681C70ED7BD32A0179418DC0245324D850373B5E1B710DDD19EAEDDB5FC7212039D7BA56C0C3D4E733DBC7BD3925FE5CCCBC511BD9CC4F85FA86A81735F04047BDE84E8CBB2F6DA347A3589D1E560042D9B7E1F8DFE6D44AF27319A1C0CE9EBCA14FBBDA7D9E64D1747F46A12A3C9C178708FEB245943085741F4F1C388FEA38555391881D01A82BE89A8BB117DF74B7330087D6FE8AB34FACBE3EC2E2B31844CB243393F25DD88FEB4C4685470770F3FFF7D89D11A5539A27023FAD3FCA5CB974F01851BD1BF84E87644E17EFD8484EFE4FD7223FAB710BD4764FF3179B0B81BD13F87E8CD75FF180FBE11FD6B147BEBBA37A2F7EB46F47E7D15D31BD11BD1FB756D446F7BF4EF417AEFC18DE8FDBAB8BE7BBF6E44EFD78DE8FDBA11BD5F37A2F7EB46F446F47EDD88DEAF1BD1FB75237ABF6E446F44EFD78DE8FDBA11BD5F37A2F7EB46F446F47EDD88DEAF1BD1FB75237ABF6E446F44EFD78DE8FDBA11BD5F9F7AFD1F40AB84EDC07DDE460000000049454E44AE426082";
}
///////////////////////////////////////////////////////