ELF          >            @       `         @ 8  @                                                                                                                                                              X#      (&                                                                                                                            $       $              Std                                            Ptd                  \      \             Qtd                                                  Rtd                  P      P                      GNU                      GNU mG!	L&$@               $XK  @@H      v}dzX|C:q5T@k?                        H                                          O                     ?                     +                     3                     0                     y0                     :                     -                     "                     D2                     %                     1                     ?                                                                                                         XA                     7@                     (                     Y                     2                     #                                          ?                     #                     U                     .                                                                 ,                     q                     %                     *                     n=                     u1                                          U                                             L4                     L3                     2                     #                     3'                                          y                     3                                          '                     =                                          P                                          1                                          U<                     	                     5                     v"                                          ;                                          D!                                          F   "                   "                                          ,                     j4                     $                     9                     H                                           6                     R=                                          *                     Z-                     +*                     ,                     %                                          z                     A                     ~@                     *                     =                     G1                     |/                                                               `0                     n                                                               l3                                                               8                     V:                     (                     C(                                           B<                     4                     @                                                               [8                     2                     P"                     :                     :                     U5                     1                                          3                     h.                                            '                                          9                     E                     8#                                                                                                                              M;                                          6                     9                     1                     S                                          &                                          u5                                          J                     1                     4                                                               2                     X%                     :                                          R3                     M                     A                     #                                                               :                     8                                          ;                     .                     +6                                          ~                                          ;                     8                     6                     J7                     4                     3                     @                     B                                          8                                                                                    =                     }                                          _!                                          $                     +2                     .                                                               ~                                          /                                           8                     r                     +                     >                     V                     /:                     '                     "                     !                     '                                          7                                          A+                     {                     /                     4                     3	                     9                     H                     J                     2
                     6)                     f                                          43                                                                 <                                          	                     )                     g                     ],                     	                     !                     S&                     75                     7                                          +                     M                     '8                     p!                     $                     7                                          <                     _                     1                                          \@                                          /                     
                     R?                     )                     @                                          3                     k                     3                     ?                                                                                                         3                     4                                          "                     .                                                                k                                          ;                     0                     1                     <                                          A                                          P	                     #                     !                     l"                     =                     9                                          ^(                                          ;                     r                     9                     8/                     )                     =>                                          A                                                                                    qA                     .                     <                     {                     c                     =                     "                     i2                     0                     4                     5                                          @                                          v;                     (                                           ,                                          
                     B,                                          X/                     S  "                   8                                          h                     >                     %1                                                                                    -                                           5                     ?                     *                     :                     ~                                                               :                     %A                     w6                     0                     ,                       "
                     !                                          <                     >                     b                     	                     	                                          /                     5!                     %                     S                                          =                     "                     u                      0                                          ~%                     !5                     
                     !                     [)                     S.                      .                     C                     
                     z>                     80                     e	                     y                                                               8                     (                     f?                     *                     -                     >                     A                     A                                          v                     6=                     0                     g                     *%                     /                     u                     :                                          $                                          +"                     4                     8                                           .4                     -                     9.                     1                     !                                          61                     I$                                           7                     u                      n$                     [                                          $                     7                                                               +                     ?A                     \                     @                                                               1  !  ȑ              !              S  !                  `            u  !        )         "  p     F      S6    @              !  ؑ              !       &       	  !                 !                 "  0              "              __gmon_start__ _ITM_deregisterTMCloneTable _ITM_registerTMCloneTable __cxa_finalize _ZN4cppu11OWeakObject7releaseEv _ZN4cppu11OWeakObject7acquireEv _ZN4cppu20WeakImplHelper_queryERKN3com3sun4star3uno4TypeEPNS_10class_dataEPvPNS_11OWeakObjectE __cxa_guard_acquire __cxa_guard_release __stack_chk_fail rtl_uString_newFromLiteral uno_any_destruct __cxa_begin_catch __cxa_end_catch _Unwind_Resume __gxx_personality_v0 _ZN4cppu15supportsServiceEPN3com3sun4star4lang12XServiceInfoERKN3rtl8OUStringE typelib_static_type_init __cxa_allocate_exception _ZNSt9bad_allocD1Ev _ZTISt9bad_alloc _ZTVSt9bad_alloc __cxa_throw uno_type_sequence_construct rtl_uString_release typelib_static_type_getByTypeClass typelib_static_sequence_type_init typelib_typedescription_newStruct typelib_typedescription_register typelib_typedescription_release rtl_allocateMemory typelib_typedescriptionreference_new typelib_typedescription_newEnum _ZN4cppu23WeakImplHelper_getTypesEPNS_10class_dataE _ZdlPvm typelib_typedescription_newMIInterface typelib_typedescriptionreference_release osl_getGlobalMutex osl_acquireMutex osl_releaseMutex typelib_typedescription_newInterfaceMethod typelib_typedescription_new rtl_uString_new _ZN4cppu11OWeakObjectD2Ev filter_SVGFilter_get_implementation rtl_freeMemory __libc_single_threaded rtl_uString_acquire rtl_ustr_valueOfUInt64 strlen rtl_convertStringToUString rtl_uString_ensureCapacity rtl_uString_newConcatAsciiL memcpy rtl_uString_alloc _ZTIN3com3sun4star3uno19DeploymentExceptionE __cxa_free_exception __cxa_rethrow _ZN11SvxDrawPage14getUnoTunnelIdEv uno_type_sequence_realloc _ZN3utl15UcbStreamHelper12CreateStreamERKN3com3sun4star3uno9ReferenceINS3_2io12XInputStreamEEEb _ZN8SvStream13remainingSizeEv uno_type_sequence_reference2One _ZN8SvStream9ReadBytesEPvm _ZN6ZCodecC1Emm _ZN6ZCodec16BeginCompressionEib _ZN6ZCodec4ReadER8SvStreamPhj _ZN6ZCodec14EndCompressionEv _ZN6ZCodecD1Ev uno_type_sequence_destroy memset _Znwm _ZSt20__throw_length_errorPKc rtl_ustr_asciil_reverseEquals_WithLength uno_type_assignData cppu_unsatisfied_iset_msg _ZTIN3com3sun4star3uno16RuntimeExceptionE _ZSt28__throw_bad_array_new_lengthv _ZSt17__throw_bad_allocv rtl_ustr_reverseCompare_WithLength uno_any_construct _ZNKSt8__detail20_Prime_rehash_policy14_M_need_rehashEmmm _ZN3utl15MediaDescriptorC1ERKN3com3sun4star3uno8SequenceINS3_5beans13PropertyValueEEE rtl_ustr_hashCode_WithLength _ZN11GDIMetaFileD1Ev _ZN11Application13GetSolarMutexEv _ZN11Application14GetFocusWindowEv _ZN3vcl6Window9EnterWaitEv _ZN3vcl6Window9LeaveWaitEv _ZN10comphelper14LibreOfficeKit8isActiveEv _ZN13GraphicFilterC1Eb _ZN7GraphicC1Ev _ZN13GraphicFilter13ImportGraphicER7GraphicSt17basic_string_viewIDsSt11char_traitsIDsEER8SvStreamtPt24GraphicFilterImportFlags _ZN13GraphicFilterD1Ev _ZNK7Graphic11GetPrefSizeEv _ZNK7Graphic20getVectorGraphicDataEv _ZN10SdrGrafObjC1ER8SdrModelRK7Graphic _ZN9SdrObject7acquireEv _ZNK7Graphic14GetPrefMapModeEv _ZNK7MapMode10GetMapUnitEv _ZN12OutputDevice12LogicToLogicEl7MapUnitS0_ _ZNK7SdrPage7GetSizeEv _ZNK7SdrPage13GetLeftBorderEv _ZNK7SdrPage14GetRightBorderEv _ZNK7SdrPage14GetUpperBorderEv _ZNK7SdrPage14GetLowerBorderEv _ZN9SdrObject11SetSnapRectERKN5tools9RectangleE _ZN7MapModeD1Ev _ZN9SdrObject7releaseEv _ZNK17VectorGraphicData22getPrimitive2DSequenceEv _ZN12drawinglayer11primitive2d20Primitive2DContainerC1ERKSt5dequeIN3com3sun4star3uno9ReferenceINS5_7graphic12XPrimitive2DEEESaISA_EE _ZN12drawinglayer11primitive2d20Primitive2DContainerD1Ev cppu_unsatisfied_iquery_msg rtl_uString_assign _ZTVN10__cxxabiv117__class_type_infoE _ZTSN3com3sun4star3uno16RuntimeExceptionE _ZTVN10__cxxabiv120__si_class_type_infoE _ZTIN3com3sun4star3uno9ExceptionE _ZTSN3com3sun4star3uno9ExceptionE _ZTSN3com3sun4star3uno19DeploymentExceptionE _ZTVN10__cxxabiv121__vmi_class_type_infoE _ZTIN4cppu11OWeakObjectE _ZTSN3com3sun4star2io11IOExceptionE _ZTIN3com3sun4star2io11IOExceptionE _ZN4cppu11OWeakObject12queryAdapterEv __cxa_pure_virtual _ZNK8BitmapEx11GetChecksumEv _ZN8BitmapExC1ERK6Bitmap _ZN9AlphaMaskD1Ev _ZN6BitmapD1Ev _ZN11SvXMLExport12AddAttributeEtRKN3rtl8OUStringES3_ __dynamic_cast _ZSt18_Rb_tree_decrementPSt18_Rb_tree_node_base rtl_uStringbuffer_insert _ZN18SvXMLElementExportC1ER11SvXMLExporttPKcbb _ZN18SvXMLElementExportD1Ev _ZN11SvXMLExportD2Ev __cxa_guard_abort _ZN11GDIMetaFileC1ERKS_ _ZNK11GDIMetaFile13GetActionSizeEv _ZNK11GDIMetaFile9GetActionEm rtl_ustr_valueOfInt64 rtl_uString_newFromStr_WithLength _ZN8FractionC1Ell _ZNK8FractioncvdEv rtl_math_round rtl_math_approxEqual rtl_math_doubleToUString _ZSt18_Rb_tree_incrementPSt18_Rb_tree_node_base rtl_ustr_lastIndexOfAscii_WithLength _ZN11SvXMLExport30getInterfaceToIdentifierMapperEv _ZN10comphelper36UnoInterfaceToUniqueIdentifierMapper17registerReferenceERKN3com3sun4star3uno9ReferenceINS4_10XInterfaceEEE _ZNK10comphelper36UnoInterfaceToUniqueIdentifierMapper13getIdentifierERKN3com3sun4star3uno9ReferenceINS4_10XInterfaceEEE rtl_uString_newReplace _ZSt29_Rb_tree_insert_and_rebalancebPSt18_Rb_tree_node_baseS0_RS_ _ZN10comphelper26getProcessComponentContextEv rtl_uString_newFromAscii rtl_ustr_valueOfInt32 _ZN9salhelper21SimpleReferenceObjectnwEm _ZN6xmloff18AnimationsExporterC1ER11SvXMLExportRKN3com3sun4star3uno9ReferenceINS5_5beans12XPropertySetEEE _ZN6xmloff18AnimationsExporter7prepareERKN3com3sun4star3uno9ReferenceINS3_10animations14XAnimationNodeEEE _ZN6xmloff18AnimationsExporter16exportAnimationsERKN3com3sun4star3uno9ReferenceINS3_10animations14XAnimationNodeEEE _ZN9salhelper21SimpleReferenceObjectdlEPv _ZN7MapModeC1E7MapUnit _ZN12OutputDevice12LogicToLogicERK4SizeRK7MapModeS5_ _ZNK7MapMode9GetOriginEv _ZN12OutputDevice12LogicToLogicERK5PointRK7MapModeS5_ _ZNSt8_Rb_treeIDsDsSt9_IdentityIDsESt4lessIDsESaIDsEE16_M_insert_uniqueIRKDsEESt4pairISt17_Rb_tree_iteratorIDsEbEOT_ _ZN11SvXMLExportC2ERKN3com3sun4star3uno9ReferenceINS3_17XComponentContextEEEN3rtl8OUStringEsN6xmloff5token12XMLTokenEnumE16SvXMLExportFlags _ZN11SvXMLExport13SetDocHandlerERKN3com3sun4star3uno9ReferenceINS2_3xml3sax16XDocumentHandlerEEE _ZN10comphelper17SequenceAsHashMapC1ERKN3com3sun4star3uno8SequenceINS3_5beans13PropertyValueEEE _ZN6xmloff5token11GetXMLTokenENS0_12XMLTokenEnumE _ZN17SvXMLNamespaceMap3AddERKN3rtl8OUStringES3_t rtl_bootstrap_get rtl_uString_newTrim rtl_uString_new_WithLength _ZN13INetURLObject12setAbsURIRefESt17basic_string_viewIDsSt11char_traitsIDsEENS_15EncodeMechanismEtb9FSysStyle _ZN18SvXMLElementExportC1ER11SvXMLExporttRKN3rtl8OUStringEbb _ZN12SvtSysLocaleC1Ev _ZNK12SvtSysLocale16GetUILanguageTagEv _ZN9Translate6CreateESt17basic_string_viewIcSt11char_traitsIcEERK11LanguageTag _ZN9Translate3getE11TranslateIdRKSt6locale _ZNSt6localeD1Ev _ZN12SvtSysLocaleD1Ev _ZNSt10_HashtableIjSt4pairIKjSt10unique_ptrI11GDIMetaFileSt14default_deleteIS3_EEESaIS7_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENS9_18_Mod_range_hashingENS9_20_Default_ranged_hashENS9_20_Prime_rehash_policyENS9_17_Hashtable_traitsILb0ELb0ELb1EEEE9_M_rehashEmRKm _ZNSt8__detail9_Map_baseIjSt4pairIKjSt10unique_ptrI11GDIMetaFileSt14default_deleteIS4_EEESaIS8_ENS_10_Select1stESt8equal_toIjESt4hashIjENS_18_Mod_range_hashingENS_20_Default_ranged_hashENS_20_Prime_rehash_policyENS_17_Hashtable_traitsILb0ELb0ELb1EEELb1EEixERS2_ rtl_ustr_compare_WithLength _ZN9SdrObject22getSdrObjectFromXShapeERKN3com3sun4star3uno9ReferenceINS3_10XInterfaceEEE _ZN15SdrExchangeView13GetObjGraphicERK9SdrObjectb _ZNK7Graphic7GetTypeEv _ZNK7Graphic14GetGDIMetaFileEv _ZN11GDIMetaFileC1Ev _ZNK7Graphic11GetBitmapExERK27GraphicConversionParameters _ZN20MetaBmpExScaleActionC1ERK5PointRK4SizeRK8BitmapEx _ZN11GDIMetaFile9AddActionERKN3rtl9ReferenceI10MetaActionEE _ZN7MapModeaSERKS_ _ZN7GraphicC1ERKN3com3sun4star3uno9ReferenceINS2_7graphic8XGraphicEEE _ZN7GraphicaSEOS_ rtl_uString_newConcat rtl_str_compareIgnoreAsciiCase_WithLength rtl_uStringbuffer_newFromStr_WithLength rtl_uStringBuffer_makeStringAndClear rtl_uStringbuffer_insert_ascii __cxa_atexit _ZNK8Outliner11GetLanguageEii _ZN17SvNumberFormatterC1ERKN3com3sun4star3uno9ReferenceINS3_17XComponentContextEEEN4o3tl10strong_intIt15LanguageTypeTagEE _ZN4Date14setDateFromDMYEtts _ZN12SvxDateField12GetFormattedERK4Date13SvxDateFormatR17SvNumberFormatterN4o3tl10strong_intIt15LanguageTypeTagEE _ZN4Date6SetDayEt _ZN4Date8SetMonthEt _ZN3utl12TempFileFastC1Ev _ZN3utl12TempFileFast9GetStreamE10StreamMode uno_type_any_construct _ZN3utl20OOutputStreamWrapperC1ER8SvStream _ZN8SvStream4SeekEm _ZN9SvmReaderC1ER8SvStream _ZN9SvmReader4ReadER11GDIMetaFileP16ImplMetaReadData _ZN3utl12TempFileFastD1Ev rtl_string_new rtl_convertUStringToString rtl_string_alloc rtl_string_release rtl_string_acquire _ZN17MetaCommentActionC1EN3rtl7OStringEiPKhj _ZN18MetaBmpScaleActionC1ERK5PointRK4SizeRK6Bitmap _ZNK6Bitmap12GetSizePixelEv _ZN14SvMemoryStreamC1Emm _ZN3utl14OStreamWrapperC1ER8SvStream _ZN8SvStream11FlushBufferEv rtl_crc32 _ZN6ZCodec22SetCompressionMetadataERKN3rtl7OStringEjj _ZN6ZCodec8CompressER8SvStreamS1_ _ZN14SvMemoryStreamD1Ev _ZNK8SdrModel15GetDrawOutlinerEPK10SdrTextObj _ZNK8SdrModel18GetActiveOutlinersEv _ZN3utl15UcbStreamHelper12CreateStreamERKN3rtl8OUStringE10StreamModeN3com3sun4star3uno9ReferenceINS8_3awt7XWindowEEE _ZNK7GraphiceqERKS_ _ZN7GraphicC1ERKS_ _ZNK8SdrModel13IsUndoEnabledEv _ZN8SdrModel10EnableUndoEb _ZN10SdrGrafObjC1ER8SdrModelRK7GraphicRKN5tools9RectangleE _Z21GetXShapeForSdrObjectP9SdrObject _ZNK7Graphic11GetChecksumEv _ZTI11SvXMLExport _ZN11SvXMLExport17SetBodyAttributesEv _ZN11SvXMLExport11ExportMeta_Ev _ZN11SvXMLExport14ExportScripts_Ev _ZN11SvXMLExport16ExportFontDecls_Ev _ZN11SvXMLExport25CreateTextParagraphExportEv _ZN11SvXMLExport17CreateShapeExportEv _ZN11SvXMLExport19CreateAutoStylePoolEv _ZN11SvXMLExport16CreatePageExportEv _ZN11SvXMLExport23CreateFontAutoStylePoolEv _ZN11SvXMLExport15GetViewSettingsERN3com3sun4star3uno8SequenceINS2_5beans13PropertyValueEEE _ZN11SvXMLExport24GetConfigurationSettingsERN3com3sun4star3uno8SequenceINS2_5beans13PropertyValueEEE _ZN11SvXMLExport27GetDocumentSpecificSettingsERSt6vectorINS_13SettingsGroupESaIS1_EE _ZN11SvXMLExport17collectAutoStylesEv _ZN11SvXMLExport17setSourceDocumentERKN3com3sun4star3uno9ReferenceINS2_4lang10XComponentEEE _ZN11SvXMLExport6filterERKN3com3sun4star3uno8SequenceINS2_5beans13PropertyValueEEE _ZN11SvXMLExport6cancelEv _ZN11SvXMLExport10initializeERKN3com3sun4star3uno8SequenceINS3_3AnyEEE _ZN11SvXMLExport7getNameEv _ZN11SvXMLExport7setNameERKN3rtl8OUStringE _ZN11SvXMLExport21getImplementationNameEv _ZN11SvXMLExport15supportsServiceERKN3rtl8OUStringE _ZN11SvXMLExport24getSupportedServiceNamesEv _ZN11SvXMLExport12addDataStyleEib _ZN11SvXMLExport16exportDataStylesEv _ZN11SvXMLExport20exportAutoDataStylesEv _ZNK11SvXMLExport16getDataStyleNameEib _ZN11SvXMLExport20exportAnnotationMetaERKN3com3sun4star3uno9ReferenceINS2_7drawing6XShapeEEE _ZN11SvXMLExport14DisposingModelEv _ZThn40_N11SvXMLExport6filterERKN3com3sun4star3uno8SequenceINS2_5beans13PropertyValueEEE _ZThn40_N11SvXMLExport6cancelEv _ZThn48_N11SvXMLExport21getImplementationNameEv _ZThn48_N11SvXMLExport15supportsServiceERKN3rtl8OUStringE _ZThn48_N11SvXMLExport24getSupportedServiceNamesEv _ZThn56_N11SvXMLExport17setSourceDocumentERKN3com3sun4star3uno9ReferenceINS2_4lang10XComponentEEE _ZThn64_N11SvXMLExport10initializeERKN3com3sun4star3uno8SequenceINS3_3AnyEEE _ZThn72_N11SvXMLExport7getNameEv _ZThn72_N11SvXMLExport7setNameERKN3rtl8OUStringE _ZN5tools11PolyPolygonC1Et _ZNK12OutputDevice14GetTextOutlineERN5tools11PolyPolygonERKN3rtl8OUStringE _ZN5tools11PolyPolygon5ScaleEdd _ZNK12OutputDevice16GetTextBoundRectERN5tools9RectangleERKN3rtl8OUStringEiiim13KernArraySpanSt4spanIKhLm18446744073709551615EEPK15SalLayoutGlyphs _ZNK12OutputDevice12GetTextWidthERKN3rtl8OUStringEiiPKN3vcl4text15TextLayoutCacheEPK15SalLayoutGlyphs _ZN5tools11PolyPolygonD1Ev _ZN16VclReferenceBase11disposeOnceEv _ZNK3vcl4Font13GetFamilyNameEv _ZNK3vcl4Font9GetWeightEv _ZNK3vcl4Font9GetItalicEv rtl_uString_getToken _ZN13VirtualDeviceC1EPK12OutputDevice12DeviceFormat10OutDevType _ZN12OutputDevice12EnableOutputEb _ZN12OutputDevice4PushEN3vcl9PushFlagsE rtl_uString_newFromSubString _ZN3vcl9unohelper19CreateBreakIteratorEv _ZN11Application11GetSettingsEv _ZNK11AllSettings14GetLanguageTagEv _ZNK11LanguageTag9getLocaleEb _ZN12OutputDevice3PopEv _ZN3vcl4FontC1ERKS0_ _ZN3vcl4Font11SetFontSizeERK4Size _ZN3vcl4Font12SetAlignmentE9TextAlign _ZN12OutputDevice10SetMapModeERK7MapMode _ZN12OutputDevice7SetFontERKN3vcl4FontE _ZN3vcl4Font9GetWeightEv _ZN3vcl4Font9GetItalicEv _ZNK12OutputDevice13GetFontMetricEv _ZN10FontMetricD1Ev _ZN5tools11PolyPolygonC1ERKNS_9RectangleE _ZSt18_Rb_tree_incrementPKSt18_Rb_tree_node_base _ZN3vcl4FontD1Ev _ZN3vcl4FontC1Ev _ZN3vcl4Font13SetFamilyNameERKN3rtl8OUStringE _ZN3vcl4Font9SetWeightE10FontWeight _ZN3vcl4Font9SetItalicE10FontItalic _ZN8GradientD1Ev memmove _ZNK8Gradient8GetStyleEv _ZNK8Gradient13GetStartColorEv _ZNK8Gradient11GetEndColorEv _ZNK8Gradient8GetAngleEv _ZN5tools7PolygonC1ERKNS_9RectangleE _ZN5tools7Polygon6RotateERK5PointN4o3tl10strong_intIs11FractionTagILi10EEEE _ZNK5tools7Polygon12GetBoundRectEv _ZNK8Gradient17GetStartIntensityEv _ZNK8Gradient15GetEndIntensityEv _ZNK8Gradient7GetOfsXEv _ZNK8Gradient7GetOfsYEv hypot _ZNK8Gradient9GetBorderEv _ZN5tools7PolygonC1Et _ZN5tools7PolygonixEt _ZN5tools7PolygonD1Ev _ZN3vcl4Font8GetPitchEv _ZN3vcl4Font13GetFamilyTypeEv _ZNK3vcl4FonteqERKS0_ _ZN3vcl4FontaSERKS0_ _ZNK3vcl4Font13GetFontHeightEv _ZNK3vcl4Font12GetUnderlineEv _ZNK3vcl4Font12GetStrikeoutEv _ZN3vcl4Font13SetFontHeightEl _ZNK5tools7Polygon7GetSizeEv _ZN5tools7PolygonaSEOS0_ _ZNK5tools7Polygon8GetPointEt _ZNK5tools7Polygon8GetFlagsEt _ZN5tools7Polygon8SetFlagsEt9PolyFlags _ZN5tools7PolygonC1Ev _ZN5tools11PolyPolygonaSEOS0_ _ZNK5tools11PolyPolygon5CountEv _ZNK5tools11PolyPolygon9GetObjectEt _ZN5tools11PolyPolygon6InsertERKNS_7PolygonEt _ZN9SvmWriter11GetChecksumERK11GDIMetaFile _ZNK8LineInfo9IsDefaultEv _ZN5tools11PolyPolygonaSERKS0_ _ZNK5tools11PolyPolygon12GetBoundRectEv filter_SVGWriter_get_implementation _ZNK8Gradient12GetBoundRectERKN5tools9RectangleERS1_R5Point _ZNK8Gradient8GetStepsEv _ZN7basegfx9BGradientC1ERKNS_11BColorStopsEN3com3sun4star3awt13GradientStyleEN4o3tl10strong_intIs11FractionTagILi10EEEEtttttt _ZN7basegfx9BGradient27tryToApplyStartEndIntensityEv _ZN7basegfx9BGradient16tryToApplyBorderEv _ZN7basegfx9BGradient15tryToApplyAxialEv _ZN7basegfx9BGradient15tryToApplyStepsEv lround rtl_ustr_shortenedCompare_WithLength rtl_ustr_shortenedCompareIgnoreAsciiCase_WithLength _ZN11SvXMLExport20GetRelativeReferenceERKN3rtl8OUStringE _ZN3vcl4FontC1EOS0_ _ZN3vcl4FontaSEOS0_ _ZNK3vcl4Font14GetOrientationEv _ZN7MapModeC1Ev _ZN7MapModeaSEOS_ _ZNK3vcl4Font12GetAlignmentEv _ZNK12OutputDevice12GetTextArrayERKN3rtl8OUStringEP9KernArrayiibPKN3vcl4text15TextLayoutCacheEPK15SalLayoutGlyphs _ZN5tools11PolyPolygonC1ERKNS_7PolygonE _ZNK3vcl4Font8IsShadowEv _ZNK3vcl4Font9IsOutlineEv _ZNK3vcl4Font9GetReliefEv _ZNK8BitmapEx7IsEmptyEv _ZN8BitmapExC1ERKS_ _ZN8BitmapEx4CropERKN5tools9RectangleE _ZN10comphelper6Base646encodeERN3rtl14OUStringBufferERKN3com3sun4star3uno8SequenceIaEE _ZTI11SdrMediaObj _ZTI9SdrObject _ZNK11SdrMediaObj10getTempURLEv _ZN7GraphicC1ERK8BitmapEx _ZN16GraphicConverter6ExportER8SvStreamRK7Graphic17ConvertDataFormat _ZN8BitmapEx5ScaleERK4Size12BmpScaleFlag _ZNK7Graphic14GetBitmapExRefEv _ZNK8BitmapExeqERKS_ _ZNK7Graphic10GetGfxLinkEv _ZNK19BinaryDataContainer7getSizeEv _ZNK7GfxLink7GetDataEv _ZN8SvStream10WriteBytesEPKvm _ZNK3vcl6Region16GetAsPolyPolygonEv _ZN3vcl6RegionD1Ev _ZN5tools7PolygonC1ERKNS_9RectangleERK5PointS6_9PolyStyleb _ZNK12OutputDevice12PixelToLogicERK4Size rtl_str_shortenedCompareIgnoreAsciiCase_WithLength _ZN14SvMemoryStreamC1EPvm10StreamMode _ZN17VersionCompatReadC1ER8SvStream _ZN8SvStream10ReadUInt16ERt _ZN8SvStream10ReadDoubleERd _ZN5tools7PolygonaSERKS0_ _ZN17VersionCompatReadD1Ev _ZN14SvtGraphicFillC1Ev _Z18ReadSvtGraphicFillR8SvStreamR14SvtGraphicFill _ZN16SvtGraphicStrokeC1Ev _Z20ReadSvtGraphicStrokeR8SvStreamR16SvtGraphicStroke _ZNK16SvtGraphicStroke13getStartArrowERN5tools11PolyPolygonE _ZNK16SvtGraphicStroke11getEndArrowERN5tools11PolyPolygonE _ZNK16SvtGraphicStroke7getPathERN5tools7PolygonE _ZNK16SvtGraphicStroke12getDashArrayERSt6vectorIdSaIdEE _ZNK14SvtGraphicFill7getPathERN5tools11PolyPolygonE _ZN8GradientC1ERKS_ _ZN5tools11PolyPolygonixEt _ZNK5tools7Polygon7IsEqualERKS0_ _ZN12OutputDevice15AddHatchActionsERKN5tools11PolyPolygonERK5HatchR11GDIMetaFile _ZN8Gradient18AddGradientActionsERKN5tools9RectangleER11GDIMetaFile _ZN8Gradient13SetStartColorERK5Color _ZN8Gradient17SetStartIntensityEt _ZN8Gradient11SetEndColorERK5Color _ZN8Gradient15SetEndIntensityEt _ZN7basegfx11BColorStops17reverseColorStopsEv _ZN7MapModeC1ERKS_ _ZN12OutputDevice13EnableMapModeEb _ZN11GDIMetaFile5ScaleEdd _ZN11GDIMetaFile4MoveEll _ZNK7MapMode9GetScaleXEv _ZNK7MapMode9GetScaleYEv _ZN8FractionmLERKS_ _ZN7MapMode9SetScaleXERK8Fraction _ZN7MapMode9SetScaleYERK8Fraction _ZN7MapMode9SetOriginERK5Point libi18nlangtag.so libuno_salhelpergcc3.so.3 libuno_cppuhelpergcc3.so.3 libuno_cppu.so.3 libuno_sal.so.3 libmergedlo.so libstdc++.so.6 libm.so.6 libgcc_s.so.1 libc.so.6 GCC_3.0 UDK_3_0_0 GLIBC_2.2.5 GLIBC_2.35 LIBO_UDK_3.9 GLIBC_2.32 GLIBC_2.4 GLIBC_2.14 GLIBCXX_3.4.18 GLIBCXX_3.4.29 CXXABI_1.3.9 GLIBCXX_3.4 CXXABI_1.3 LIBO_UDK_5.1 LIBO_UDK_4.0 UDK_3.8 LIBO_UDK_5.3 UDK_3.1 LIBO_UDK_3.6 LIBO_UDK_4.1 UDK_3.3 LIBO_UDK_4.4 $ORIGIN                                           	   
                                                                                                 	                                            	                                                                               	                                                                                                	                      	                            	                                   B         P&y   B        B         })   B        B     0   ui	   B       
 B        -B     0   YQ   B     })  	 B        B     P      B     ii   B     ui	   B        B        xB     `   h   B     y   C     yѯ   C     t)   *C     ӯk   6C       
 YB        QS   AC     PT   NC     H&	   [C     SS   cC     F&	   }C     A&	   pC     VQ   xC     QT   C     C&	   C     })   B        HB         TT   C     A&	   pC     C&	   C     })   B                  i                 `i     ȋ            ؖ     Ћ            p	     ؋                             PK                                                   0                                  p                                   0K     (                 0            `     8                 H                  P            	     X            P     `            G     h                 p                  x                             @                                                                       `                                                                     @     Ȍ                 Ќ                 ،                              @                                                      `                                        (                 0                  8             u     @            g     H            Y     P             N     X             C     `            3     h            "     p                 x                             @                                                     n                 `                 L                 1                 `                 @     ȍ                 Ѝ            
     ؍            @
                 @
                 
                 
                  
                  
                  u
                  b
                 V
                  @M
     (            @
     0            3
     8            %
     @            
     H            @	
     P            	     X            @	     `             	     h            	     p            	     x             	                  z	                 `j	                  Y	                 `E	                 @2	                  &	                 	                 
	                      Ȏ                  Ў                  ؎            @                                   `                                   @                                   @u                 d                 V                   F     (            9     0            '     8                 @            `     H            @     P                 X                 `            `     h                 p            `     x            `                                   s                 c                 R                 >                  /                                                          ȏ                  Џ            `     ؏            `                 @                                                                                                         `y                 @k                   [     (            @L     0            >     8            ,     @                 H            @     P                  X            @     `                 h            `     p                 x                             P                                                                     `                                                                          Ȑ            @     А            `     ؐ                                                                                                  0                 P                 `                 p                       (                 0                 8                 @                 H                 P                 X                 `                  h                  p            @     x            `                                                                                                      `                                                         (                 0                 @                  H                 X            `     `                 p                 x                                                                    Ȓ                  ؒ            8                 P                 h                 x                      @                 H                 P            `     X                 x                                                                                                                                    @     ȓ                 Г                 ؓ                                                                P                                       0                 8                 @                 H                 `                 h            p     p                 x                                                               p                      Д                 ؔ                             `                                                                                                        P                  i     (            p     0            0q     8            0     @             j     H            i     P            j     `                 h                 p                 x                                              @                                                                                     0                 0p     Е                 ؕ            P                                                   q                                                                                       @p     0                 8            p     @                 H                 P                 `                 h                 p            p     x                             p                 p                  k                                       Ȗ                 Ж                                                                P                                                         (                 0                 @                 H                 `            
                                                                                          ȗ                 З                 ؗ                                              @                 @                  М     (            P     0            `     8                 @            p     ؘ                                                    (            0     0            P     8            Н     @            `     P                 X            p     `                  h            @                                  К                                  0     ș                 Й                 ؙ            P                                                     P                 @                      (                 0            0     8                  @                  `                 h                 x                                              X                 h     К                 ؚ            p                 p                 ~                 P                  ~                       (            P     8            p     @                 H            p     P            ~     X            P     `                 p            p     x            p                                  ~                 p                                  `                 ~                 Ț                 ~                 P                 ~                                                                     P     (            @}     0                 8            @     @                 P            Ț     X                 `            p     h            ~     p            P     x                             Ț                 p                                  ~                 ~                 Ț                      Ȝ            `     М            ~     ؜            `                                  P                      ث                              P                                                   P     (                 @            p     H                 `            p     h            P                                  H                                  H                 p     Ȭ                                   (            P     8                 H            `     X                 h                             p                 `                                  h                      ȭ            h                 0                                   0                                   H     (                 @            H     H                 `            p     h                                              P                      Ю            p     خ            `                 p                              n          ȑ        n                  n                           ؑ                                                                     8                 P                 h                                                                                      ؖ                                                                     X                 Ț                                                     0                                    Б                                                                                                  N          p        N                                                (                  `        }                  }                  }                  }                   }                  @                  @                   @          P        @                  @                  @                  @                  @          P        @          X        @                  @                  @                  @          ț        @          Л        @                                                                                             S           H                  P                   X        j          `        #           h        b          p                   x                                                                 .                   z                   3                                      h                                     8          Ș        z          И                                                                 n                  "                                      |          p        Q           x        $                   M                  X                                                                   H                   P        !           p                   x        )                   C                   r                   s                   y                   }                                                        &          ȟ        V          ج                                                                                                                                      (                   0                   8        	           @        
           H                   P                   X                   `                   h                   p                   x                                                                                                                                                                                              Ƞ                   Р                   ؠ                            "                   %                   &                   '                    (                   *                   +                   ,                    -           (        /           0        0           8        1           @        2           H        4           P        5           X        6           `        7           h        8           p        9           x        :                   ;                   <                   =                   >                   ?                   @                   A                   B                   D           ȡ        E           С        F           ء        G                   H                   I                   J                   K                    L                   M                   O                   P                    R           (        T           0        U           8        V           @        W           H        Y           P        Z           X        [           `        \           h        ]           p        ^           x        _                   `                   a                   b                   c                   d                   e                   f                   g                   i           Ȣ        j           Т        k           آ        l                   m                   o                   p                   q                    t                   u                   v                   w                    x           (        {           0        |           8        ~           @                   H                   P                   X                   `                   h                   p                   x                                                                                                                                                                                              ȣ                   У                   أ                                                                                                                                                                                                (                   0                   8                   @                   H                   P                   X                   `                   h                   p                   x                                                                                                                                                                                              Ȥ                   Ф                   ؤ                                                                                                                                                                                                (                   0                   8                   @                   H                   P                   X                   `                   h                   p                   x                                                                                                                                                                                              ȥ                   Х                   إ                                                                                                                                                                                                (                   0                   8                   @                   H                   P                   X                   `                   h                   p                   x                                                                                                                                                                                              Ȧ                   Ц                   ئ                                                                                                                                                         	                   
          (                  0                  8                  @                  H                  P                  X                  `                  h                  p                  x                                                                                                                                                                                     ȧ        !          Ч        #          ا        $                  %                  '                  (                  )                   *                  +                  ,                  -                   .          (        /          0        0          8        1          @        2          H        3          P        4          X        5          `        6          h        7          p        9          x        :                  ;                  <                  =                  >                  ?                  A                  B                  C                  D          Ȩ        E          Ш        F          ب        G                  H                  I                  J                  K                   L                  N                  O                  P                   Q          (        R          0        S          8        T          @        U          H        W          P        X          X        Y          `        Z          h        [          p        \          x        ]                  ^                  _                  `                  a                  c                  d                  e                  f                  g          ȩ        h          Щ        i          ة        k                  l                  m                  o                  p                   q                  r                  s                  t                   u          (        v          0        w          8        x          @        y          H        {          P        ~          X                  `                  h                  p                  x                                                                                                                                                                                    Ȫ                  Ъ                  ت                                                                                                                                                                                      (                  0                  8                  @                  H                  P                  X                  `                  h                  p                  x                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            HH HtH     5 % @ h    fh   fh   fh   fh   fh   fh   fh   rfh   bfh	   Rfh
   Bfh   2fh   "fh   fh   fh   fh   fh   fh   fh   fh   fh   fh   fh   rfh   bfh   Rfh   Bfh   2fh   "fh   fh   fh   fh    fh!   fh"   fh#   fh$   fh%   fh&   fh'   rfh(   bfh)   Rfh*   Bfh+   2fh,   "fh-   fh.   fh/   fh0   fh1   fh2   fh3   fh4   fh5   fh6   fh7   rfh8   bfh9   Rfh:   Bfh;   2fh<   "fh=   fh>   fh?   fh@   fhA   fhB   fhC   fhD   fhE   fhF   fhG   rfhH   bfhI   RfhJ   BfhK   2fhL   "fhM   fhN   fhO   fhP   fhQ   fhR   fhS   fhT   fhU   fhV   fhW   rfhX   bfhY   RfhZ   Bfh[   2fh\   "fh]   fh^   fh_   fh`   fha   fhb   fhc   fhd   fhe   fhf   fhg   rfhh   bfhi   Rfhj   Bfhk   2fhl   "fhm   fhn   fho   fhp   fhq   fhr   fhs   fht   fhu   fhv   fhw   rfhx   bfhy   Rfhz   Bfh{   2fh|   "fh}   fh~   fh   fh   fh   fh   fh   fh   fh   fh   fh   rfh   bfh   Rfh   Bfh   2fh   "fh   fh   fh   fh   fh   fh   fh   fh   fh   fh   fh   rfh   bfh   Rfh   Bfh   2fh   "fh   fh   fh   fh   fh   fh   fh   fh   fh   fh   fh   rfh   bfh   Rfh   Bfh   2fh   "fh   fh   fh   fh   fh   fh   fh   fh   fh   fh   fh   rfh   bfh   Rfh   Bfh   2fh   "fh   fh   fh   fh   fh   fh   fh   fh   fh   fh   fh   rfh   bfh   Rfh   Bfh   2fh   "fh   fh   fh   fh   fh   fh   fh   fh   fh   fh   fh   rfh   bfh   Rfh   Bfh   2fh   "fh   fh   fh   fh   fh   fh   fh   fh   fh   fh   fh   rfh   bfh   Rfh   Bfh   2fh   "fh   fh   fh   fh   fh   fh   fh   fh   fh   fh   fh   rfh   bfh   Rfh   Bfh   2fh   "fh   fh   fh   fh   fh  fh  fh  fh  fh  fh  fh  rfh  bfh	  Rfh
  Bfh  2fh  "fh  fh  fh  fh  fh  fh  fh  fh  fh  fh  fh  rfh  bfh  Rfh  Bfh  2fh  "fh  fh  fh  fh   fh!  fh"  fh#  fh$  fh%  fh&  fh'  rfh(  bfh)  Rfh*  Bfh+  2fh,  "fh-  fh.  fh/  fh0  fh1  fh2  fh3  fh4  fh5  fh6  fh7  rfh8  bfh9  Rfh:  Bfh;  2fh<  "fh=  fh>  fh?  fh@  fhA  fhB  fhC  fhD  fhE  fhF  fhG  rfhH  bfhI  RfhJ  BfhK  2fhL  "fhM  fhN  fhO  fhP  fhQ  fhR  fhS  fhT  fhU  fhV  fhW  rfhX  bfhY  RfhZ  Bfh[  2fh\  "fh]  fh^  fh_  fh`  fha  fhb  fhc  fhd  fhe  fhf  fhg  rfhh  bfhi  Rfhj  Bfhk  2fhl  "fhm  fhn  fho  fhp  f%6 fD  % fD  % fD  % fD  % fD  % fD  %~ fD  %v fD  %n fD  %f fD  %^ fD  %V fD  %N fD  %F fD  %> fD  %6 fD  %. fD  %& fD  % fD  % fD  % fD  % fD  % fD  % fD  % fD  % fD  %޷ fD  %ַ fD  %η fD  %Ʒ fD  % fD  % fD  % fD  % fD  % fD  % fD  % fD  % fD  %~ fD  %v fD  %n fD  %f fD  %^ fD  %V fD  %N fD  %F fD  %> fD  %6 fD  %. fD  %& fD  % fD  % fD  % fD  % fD  % fD  % fD  % fD  % fD  %޶ fD  %ֶ fD  %ζ fD  %ƶ fD  % fD  % fD  % fD  % fD  % fD  % fD  % fD  % fD  %~ fD  %v fD  %n fD  %f fD  %^ fD  %V fD  %N fD  %F fD  %> fD  %6 fD  %. fD  %& fD  % fD  % fD  % fD  % fD  % fD  % fD  % fD  % fD  %޵ fD  %ֵ fD  %ε fD  %Ƶ fD  % fD  % fD  % fD  % fD  % fD  % fD  % fD  % fD  %~ fD  %v fD  %n fD  %f fD  %^ fD  %V fD  %N fD  %F fD  %> fD  %6 fD  %. fD  %& fD  % fD  % fD  % fD  % fD  % fD  % fD  % fD  % fD  %޴ fD  %ִ fD  %δ fD  %ƴ fD  % fD  % fD  % fD  % fD  % fD  % fD  % fD  % fD  %~ fD  %v fD  %n fD  %f fD  %^ fD  %V fD  %N fD  %F fD  %> fD  %6 fD  %. fD  %& fD  % fD  % fD  % fD  % fD  % fD  % fD  % fD  % fD  %޳ fD  %ֳ fD  %γ fD  %Ƴ fD  % fD  % fD  % fD  % fD  % fD  % fD  % fD  % fD  %~ fD  %v fD  %n fD  %f fD  %^ fD  %V fD  %N fD  %F fD  %> fD  %6 fD  %. fD  %& fD  % fD  % fD  % fD  % fD  % fD  % fD  % fD  % fD  %޲ fD  %ֲ fD  %β fD  %Ʋ fD  % fD  % fD  % fD  % fD  % fD  % fD  % fD  % fD  %~ fD  %v fD  %n fD  %f fD  %^ fD  %V fD  %N fD  %F fD  %> fD  %6 fD  %. fD  %& fD  % fD  % fD  % fD  % fD  % fD  % fD  % fD  % fD  %ޱ fD  %ֱ fD  %α fD  %Ʊ fD  % fD  % fD  % fD  % fD  % fD  % fD  % fD  % fD  %~ fD  %v fD  %n fD  %f fD  %^ fD  %V fD  %N fD  %F fD  %> fD  %6 fD  %. fD  %& fD  % fD  % fD  % fD  % fD  % fD  % fD  % fD  % fD  %ް fD  %ְ fD  %ΰ fD  %ư fD  % fD  % fD  % fD  % fD  % fD  % fD  % fD  % fD  %~ fD  %v fD  %n fD  %f fD  %^ fD  %V fD  %N fD  %F fD  %> fD  %6 fD  %. fD  %& fD  % fD  % fD  % fD  % fD  % fD  % fD  % fD  % fD  %ޯ fD  %֯ fD  %ί fD  %Ư fD  % fD  % fD  % fD  % fD  % fD  % fD  % fD  % fD  %~ fD  %v fD  %n fD  %f fD  %^ fD  %V fD  %N fD  %F fD  %> fD  %6 fD  %. fD  %& fD  % fD  % fD  % fD  % fD  % fD  % fD  % fD  % fD  %ޮ fD  %֮ fD  %ή fD  %Ʈ fD  % fD  % fD  % fD  % fD  % fD  % fD  % fD  % fD  %~ fD  %v fD  %n fD  %f fD  %^ fD  %V fD  %N fD  %F fD  %> fD  %6 fD  %. fD  %& fD  % fD  % fD  % fD  % fD  % fD  % fD  % fD  % fD  %ޭ fD  %֭ fD  %έ fD  %ƭ fD  % fD  % fD  % fD  % fD  % fD  % fD  % fD  % fD  %~ fD  %v fD  %n fD  %f fD  %^ fD  %V fD  %N fD  %F fD  %> fD  %6 fD  %. fD  %& fD  U   HH H54 HH" HHN   HH HHHEdH+%(   uH H5 <IH]H{HtL9uHEdH+%(   uLHH3 HHpL(HHPLHEdH+%(   uL HEdH+%(   urHEdH+%(   u+HL  HEdH+%(   u@HgHEdH+%(   uH8HP94/   1H=:  HuI   H=& HXHuLH< HEI    L#HEdH+%(      H51 H  LzH5  LHpHHH(  HxU  HH  Hh  H0  HEdH+%(   uXHzH¼    H=G LHYLH8E  HH8y  G   *1H=  HMI   H=Ԯ HXHuLHª HEI    LHEdH+%(   uTH5۝ H  L$HH8  H}  HL    H=H cLHRL
H`<L4L|  L  HEdH+%(   ujHHh(u=H=ج  u   H=Ŭ H0}H5 HhH  IuL ֘  VIH;LL  SLNHH   HbHF  HH  L  H  H0  Lr  L  Hh1HP HEdH+%(   u4HH(MaLwT  ZsHpH  HH(H   H(  H)  HH  H  I$LPH[  H8_   MuHw  HLHH0H0  HH`  HHH  H  H(   LLH  HH  H0  HHtHPH  U  HH5B  -   CHpHIHPH= THH0LH\ H0I    LH  HEdH+%(   uH5 H  L/ZH=j  u   VH=W H0'H5H HLHq  HH`  IE LPH  HpHPHxH9H!   LHEdH+%(   u@HL   HpHIHPH=X HH0LH H0I\  g  LoH#  HEdH+%(   u1H5u HV  LI~     LLHH  LH  H  HHH  LIuH陨  LHHM  LEHHPH   mE1H=*  LpHteH= HH0HH H0I    LHEdH+%(   u0H5 H  HaH    H= YrLIHLhH  H   E1H=I  LpHt}H=6 HH0HHI H0I  %  L-HEdH+%(   uKH5? H   HHH  H(    H= hf~LIHLtH0LLHpLLeHHpSHLHHH0L=  Hp!H  H}HEdH+%(   uHH}1LHEdH+%(   uHmH}H}HEdH+%(   uH>U   HH H5 HH HHUHm   H HHAI\$Ht$H{L+HtHPH߾   LID$I<$1H    1ID$ID$MtI<$It$I0L9uHHHvUH HAUATSHVHH@tHU LcHMt&I|$M,$HtHPL   MHCH{H8H    11HKH{HsHKH9tZH[A\A]]X[A\A]]L<HEdH+%(   u1HH}H}HEdH+%(   uHWRI$   LHuH}{H}rHEdH+%(   uHHKH}RH}IH}@H}7HEdH+%(   uHHx
HHEdH+%(   uLLX   HHH HEdH+%(   uCHHHHHEdH+%(   uHVHUH BH 6HEdH+%(   uOHH H HHX?HEdH+%(   uH~HHHHEdH+%(   uDHEdH+%(   uLHqH ^H PHDxH 3H'HH 
HHBHH HH HH HH {H yjH5m  HUHEdH+%(   uL>H;@HEdH+%(   uLH;I$LPHEdH+%(   uLX   LH  LX   LL  HH}q  HLHu1	ZP HEdH+%(   up+UHAWAVAUATSHxdH%(   HE1 S  L% L<  E11ɺ#   1H}L]E1E1H5՚    H]H]W1H}H 4   H5Κ )ELmLmHEHU   L 1H}0   H5Κ LueHUH}   HEAWHuAUE1E11j1HPjj H0HH}YH}PH}   HU   H1HHH}H}H}	LHo ZHc =  Hh\  H8H_=О  7  Þ   H=  uH    H= $H=l  uHs    H=W LUL 11LL޺!   HEL`L}LuHxLmLxHE11HUH5+    LHE1ɺ4   LHMH5ݘ 1AULM1jHMA   Lj    j H L=H}H}H}11H}Hu-   H5 E11ɺ(   H}H5a H}(E11ɺ!   L H`LELHUE11~EH5 LLMHU   E)EE11ɺ0   H5! LLUAULM1jHMA   Lj    j  H LDH}H}H}H}H}HxH;HEdH+%(   tHhHe[A\A]A^A_]ÐL  H8 HEdH+%(   uL!H}#H}J  HEdH+%(   uHH}L  H}  HEdH+%(   uUHH}H}H}H}H}H}H}+HnH  HVHHEdH+%(   uH#H'H H HEdH+%(   uHH yH}H}HEdH+%(   u=HH}H}_ HpHEdH+%(   uHl'"HEdH+%(      HNHBLH~H"H֥ HEdH+%(   u5HHHHEdH+%(     }HHHeHHPH~HrL+HYHMH?H3H"HHHHHHHHgHHJ   L_LHnHb/HQHEHEdH+%(   VHHHEdH+%(   uSdHpHH HEdH+%(   uHHpTOHEdH+%(   u'HHEdH+%(   uH߾   L4uHCHp7XH(&H;   1HMIH8H(HLH  HEI    LHEdH+%(      H5Մ H  LHH k GLHzL2H F H` HX HP" HH H8HH輣 ILPH7  HKHEdH+%(   N  HH5Է  H   IILuLPH=s H HLH HhIc  n  LvH.  HEdH+%(     H5| H]  LH5>  H&   <LuLIIPI} SH(HLH HEI    LH  HEdH+%(      H5 H  L5H}H8HH}H(  LHsL+H}]H}THEdH+%(   uH-LI$HL  LH8HHHH8HH}H}H8HHhH}H8HHH(H5|  g$LzHLLIIHL  LHH5!  H	   HIHH}PI>3H(HLHߏ HEI    LH~  HEdH+%(   u4H5Ѐ H  L   IH=&LIgHL  LHHHL    01HUIH8H(HLH HEI    LHEdH+%(   u#H5 Hн  L8L0 AVH EHH0|HpH$ HXHEdH+%(   uCH1H5H LLB LJ LbHHH{HEdH+%(   u"IHH0JeH]HEdH+%(   uLAHEdH+%(   ubHLLH8]LUH`GH0;HEdH+%(   uHH`HH`널H}L3HEdH+%(   u1HH}H}HEdH+%(   uHNIH}HxL  H}HEHuH9t	HAH    HMHEdH+%(   u(L&H}-HEdH+%(   uHH}H}HEdH+%(   uOHH}  HIu7[ HHXHEdH+%(   uHGBLJ  H}H}vH hH`\HXPHPDHHh  HEdH+%(   uEHLiHxHpHh赙 H9|H HH(H(艐 XLH =H 8LnH oHcH R@H A#H 0HT  HL  H H H H(!H OH H 9LY  HH(H zH nHH(H OH CaLHH %L8~ HEdH+%(   uHH}HpH0 t3L0L   LH}HxLHhHEdH+%(   uHo*H}qH}hH} H}TH}KLH}6H}-HxLgH0   RH}H}H}H}H}H}H}H@H`HEdH+%(   uHnH}uH}lHhYH}PHPHh6H}-HhH}HhH}HhH}L讌 ,HhH}oH}H H@HHHEdH+%(   uHH^H}eH}ZH}QH}FH}=HEdH+%(   tH(mHHH UH@H=L赋 OHHH}H H(HpH}L8H}H}L8mcHH\H}L8L6H}L87H}  LIuA;/ MtI~     LֿHEdH+%(   u!HHEdH+%(   uvqH   L蓿HpMLH   H:b LH0HHHHA  H{L+HtHPH߾   LӾH   LtH(HpLHl HXH(H(H(_ tH H  Hl ILHH0HwLL9p   I<$HtHP(IHpBH(L/Hl HHH1H    1HHH HHhH9t	H謽H5` LLHHH   HHHtHPHHPHHH)HuXHIH=H聽HuHEdH+%(   u6HH0bHռHEdH+%(      苿H0HH(EH01HHpHH0sHg1HHpHH(?H   LuLHH0IHi HHH0HHpHH0iHH0LH(qH(`HH5M  8H(IL2HH Hi HtHt LHH  HpHPHHtƺ  HEdH+%(   uHHSLHHtt L!t L7  HyL`H P[L HEdH+%(   ugHLs H<L軹HHtxs E1H}<LEtLA   xH HHH貌 H  HH}r sLs HEdH+%(   uLhs HEdH+%(   uH!ܻHH}H}H}	HEdH+%(   uHHEdH+%(   t$莻Hp肋 Hh  衸,L   荸HL   wHH5  LoHPsH  H  HIr H0HHs HEdH+%(   uxLH起H詷LHq HPHtPq HPBLʼHL/H@裿LH@萿H8Htp HqH@^`X   L,NHK=HPH-p #H    HH?m HHHEdH+%(   ubHl H5#m NLH0A   H(IA0襾H I薾I9AI0Lqp *H}IA   Tp H`Hp H@p H@DH88H nHHHPLo H}H}  H}  H}
  HEdH+%(   uH賾nH}H5  螳H}襽H}j H}_ HEdH+%(   uHh#   LEL荈 H}  HEdH+%(   u$H-H}4H}[  LCo ̷H}봾X   LLL L蚇 HEdH+%(   uHýLw HkֳLcXMu1HCXE1KG L   Le֐E1H藳LcXMuc1HCXӿE1N H?w H L+LsH׆ HEdH+%(   uH 軶LS   LֳH   E1aE1YHHL苿{H0(uH=y  u   UH=ny H0&H5_y H0Hq  輿L2H F H(ŽHcE1   2HH`i HHHEdH+%(   uHi H5Di o蚵HEdH+%(   uaHL螾H}MºMt
IE LP0H}z HEdH+%(   uH胻H}HtHPM*%HHEHEHLIH%    HHCHL(L`  LHl H    H HxHt  HhHt  H HXH   HɄ H  HHtHPH H|HEdH+%(   uDLeH1װSH&H0H'>  tH؃ HpH H?H}IHpH(HLHsLkH0HLPHDH0HrH tHhLЮHEdH+%(   uH9H =H *HH 릿   Hf H5Ff HH4f HH`H;طLH}ǷHEdH+%(   uH蠸[H}a H}X HEdH+%(   uAHqH}xH}HtHPH}`H}G HEdH+%(   tHP   HEdH+%(   tH}H 
HLfHH޶H0"HXFH H讶Hx袶H8HEdH+%(      HkL3 H' HEdH+%(     H<H@H 49H#HL菿H '   Ḽ-L菭腰H ɵH 踵H 觵H蛵H 芵HyHmLjH TYL¼HEdH+%(   uH֯U   H(H!c H5Zc HHHc HHtUHSHP6ZH߾   []鶬UHATSH dH%(   HE1r    L%r L   11H5l !   H}HEH]61ҿ   HU&HUE1E1H   HHĵH}諳   葪1HUؾ   HHHxH}HXr HEdH+%(   uH L[A\]IHEdH+%(   t腮H [A\]ÿ   үHH b HHHEdH+%(   uHa H5a :H}HzHEdH+%(   uHSUHAWAVAUATSHxdH%(   HE1r S  L%r L葮<  E11ɺ#   1H}L]E1E1H5m 賺   H]H]衶W1H}H 4   H5m )ELmLmHEtHU   L1H}0   H5m LuHHUH}   ִHEAWHuAUE1E11j1HPjj 葫H0HųH}<H}3H}蚱   耨HU   H1HHgH}H}H}LHRq =HFq =q  Hh\  H8HB=q  7  q H=q  uHl    H=q H=Op  uHVc    H=:p LULi 11LL޺!   HEL`L}LuHxLmLxѸHE11HUH5~    LHE譸1ɺ4   LHMH5k 1葸AULM1jHMA   Lj    j ܹH L H}藰H}莰H}腰11H}Hu-   H5k (11ɺ(   H}H5Db H}E11ɺ!   Lzh H`LELHUE11~EH5k LLMHU   E)E起E11ɺ0   H5k LLU蘷AULM1jHMA   Lj    j H L'H}螯H}蕯H}茯H}胯H}zHxޮH;薮HEdH+%(   tHhHe[A\A]A^A_]Hx0HثHEdH+%(   uL輩HEdH+%(   u裩H}HH}ڮHEdH+%(   uH賯nHEdH+%(   uiH螮H蒮Hp uGHh謤H`HEdH+%(   uHIHEdH+%(      HpAHHEdH+%(   uH 
1Hp^HHAHHEdH+%(   uHp   茥HEdH+%(   QlH 膭Hz1HpHEdH+%(   .HEdH+%(   H&HEdH+%(   Hp   ۤ1HpH 1HpH}ɬHEdH+%(   u1H袭H}詬H}蠬HEdH+%(   u;Hy4H}{H}rHEdH+%(   uHKL   #H+H}1HEdH+%(   u(H
H}HEdH+%(   uH襦蠦H8H0ثHEdH+%(   u$H豬H8赫H8觫PH}藫HEdH+%(   uHp+H8nHEdH+%(   uHGH0FH8:HEdH+%(   u$H   LHEdH+%(   t貥H8HEdH+%(   tސH}۪H}ҪHEdH+%(   u0H諫H}貪LHEdH+%(   uH胫>9L谠HEdH+%(   uHYHEdH+%(   u*HEdH+%(   uHEdH+%(   u
ΤɤHHHEdH+%(   uHߪ蚤H}HtouHPL蜮HEdH+%(   uH襪`H褩H蘩HEdH+%(      HmHqHpeH8詡HEdH+%(   uH2H1Hx%H`iHHHH3L苬q聣H ĨHEdH+%(   u+H蝩H 表HEdH+%(   uXHz5H yHEdH+%(   u+HRH VHEdH+%(   uH/H $HEdH+%(   u+HH HEdH+%(   uHڨ蕢萢H ԧHEdH+%(   u+H譨H 豧HEdH+%(   uXH芨EH 艧HEdH+%(   u+HbH fHEdH+%(   uH?H 4HEdH+%(   u+HH HEdH+%(   uXH襡H HEdH+%(   u+H§H ƦHEdH+%(   uH蟧ZUPHp蔦HEdH+%(   u+HmHpqHEdH+%(   uHJ HpDHEdH+%(   u+HHp!HEdH+%(   uXH赠HpHEdH+%(   u+HҦHp֥HEdH+%(   uH详je`H}觥H}螥LHEdH+%(   uHo*HPnH қHEdH+%(   uH;HP?HP,HPHPH8H@HPwH8ؤH`̤LH0踤HEdH+%(   uH葥LBHx膤HpzHEdH+%(   uHS   L6HEdH+%(   u5H}H*H}!HEdH+%(   uH赞谞HEdH+%(   u藞H}ޣHEdH+%(   uH跤rHKM HHL蘤HHPLgHEdH+%(   uLp+HnL薙H誛H`NH 蒛HEdH+%(   uH֝HJ7 H(>7 H0RHLp H}p HEdH+%(      H趣H  LL蟘   赞HILuLPHEH8ɭHuLHH` HEIL  L_L  HEdH+%(   tI   IHL  HEdH+%(   KϿ   H1HEjH5 P H  HiLIڡL蒚  H芧HEdH+%(   oL蟢IԿ   謝1HUI0H8HuLLH^ HEII  L\HEdH+%(   H5jO HK  L賡LH$LܦLn %HH}H}HtHPLn H}n H8  Hp  Hhw5 H`+5 HEdH+%(   uH脡H}苠4H}{H}pHXLO   eLmLIIE PI?|HPLLH] HEI  ALLǘ  HEdH+%(      H5N H  L^   L豗H}h4 HXL褕   躛LmLIIE PH=` ͪHPLLH	] HEIM  L`L  HEdH+%(   uTH5jM HK  L賟ޙLHLח  LϤGHH2蠙LHL虗  L葤HH H}讞H}襞H}藞HHH_l    耚1HMIH8HPLLH[ HEH  _H-HEdH+%(      H5;L H  L脞HXL   LmLHIE PI>HPLHHN[ HEI蒖  L襝L]  HEdH+%(   uH5K H  H#LIdL  HLqIH\IH#LLآHH  LHHX   IILuLPH=8] HuLLHJZ HEI莕  L衜LY  HEdH+%(   uH5J H  LH}fLHRL
  HC~  HXLHXHPHEdH+%(   uHHH}  HX螖HP"N H}ٛHXL赑   ˗LmLIIE PI?HPLLHY HEIb  LuL-  HEdH+%(   u"H5I H`  LțH B]Lݓ  a   I"LLH跓  H}H  Hp֚Hh(tmH`}/ HX/ HPդ  L=/ H  H8赤  HEdH+%(   u\H^H}LH^H=X  u   H=X H0٘H(H5W HhoQŔH}H}H'  HxLH  H}֙H   LHH H5{  蛏HEdH+%(   uH脚?H(H lH}sH}hWH}YH}PH}GHEdH+%(   uZH    LHEdH+%(   u1HH}H}HEdH+%(   uHә莓艓脓   L觐HEdH+%(   u+H蠙H@褘HEdH+%(   u&H}8HEdH+%(   uNH^HRHEdH+%(   uH+H讟HEdH+%(   uLHpHHEdH+%(      HϘHӗHǗH軗H 诗H裗HHEdH+%(   u"HpHptHhHPH蔏lH3HwHH(H LiĐLMkH  L   ؖH  ̖H   H   贖H   訖L; L4 H   茖H{xHtH{pHt|H{hHtnH{P* H{H0d H{@* H{8d H{05H{(* H{ LH0  L   臝H   {H  H  H   וH   ˕H   迕L: L3 H   裕H{xHtH{pHtH{hHtH{P* H{HGc H{@) H{85c H{0LH{() H{ L"LM: H{HtI H{HtHEdH+%(   usLHEdH+%(   u\;L背L}LwH  { H}肃 H   HtLLMN: b4/   LRIԗL|HC0H{(H4    '1HK(HK0HEdH+%(   u艘ԎI舗H}ɯ H   譋H  豯 H   赂 H   HtH{xKH{(9 H{Ht H{HtHEdH+%(   uL:} tH}E HEdH+%(   uHPLҚHEdH+%(   uH+L~H0rL蚜HEdH+%(   u.HHPHpHHߒ舍Hp̒L肋  HP贒Hp訒LwHp荒HP聒ZHXH5nt  YH}`Hx脜  HpHHEdH+%(   uH!܌H}' LhHH PHXHhH)HtŉHHYHEdH+%(   uH貒HEdH+%(   t[^H0袑H 薑HHzHPoLÉLهHx荇L-HGBΫ H0-H0H0LNH0FLPrH ϐH0ÐH0貐H0衐LHEdH+%(   uHm(H0lHp`HTH(u=H=N  u   H=N H0ĎH5M HHr  ZMtI(LL褓`   LǇHHu;HHHgHEdH+%(   uH萐蛇  DHEdH+%(   u)ZL! HxH\a  RHHH8HEdH+%(   H  H`   L$HEdH+%(   h  H0HpێHHh^H0貎Hp覎տ   誊HH< HHHEdH+%(   uH< H5< HQH0JLr  HHtHPHT  8H0HpH0IHL興Hp̍HH词Hp裍HP蕍@;H߾P   LZH@ރH0  L蚓HEdH+%(   u3H3H@跇LoLW! HEdH+%(   tÇL{H@/HEdH+%(   tH߾P   L辄H0H(6H8*H8HHH)HtHHH@諂H@H^HEdH+%(    .L讂.L  HEdH+%(   H@荓HxOL觏HEdH+%(   LWH ˋHEdH+%(   mL{HEdH+%(   M{LHEdH+%(   -[H@ׁL߆HEdH+%(   /L迒HEdH+%(   LLL^HH0FH8:HxފH@"HEdH+%(   uH請fH0誊HP蜊HP莊HP耊HPrwHPaH0UZHPDIHEdH+%(   upLR HLLHSHGHH ߉HEdH+%(   u*H踊HjHEdH+%(   u
QLHX萉H@4HEdH+%(   uH]H81
H}QMtLP} tL6HEdH+%(   uH   L軃L貀L誀HEdH+%(   uHӉL苀脃H蜌LL葍LHEdH+%(   uH蒉MHH#k  HH@H9urf.     fH=F H
F H9tHn6 Ht	        H=E H5E H)HH?HHHtH}6 HtfD      =E  u+UH=
6  HtH=B }duE ]     w    Ðf.     U1ɺ    H5-6 HSHHH    6HH]Ðff.     HHӀfU1ɺ"   H56 HAUIATLeSLH(dH%(   HE1HE    ˎH}1ɺ"   H55 HE    謎H}1ɺ+   H55 HE    荎H5D HtYLh     LLzԓH]H{H葆L9uHEdH+%(   u7H(L[A\A]]       H=D H0H5D HHfU1ɺ    H5i5 HAWAVHAUATSH  dH%(   HE1Hǅ    訍H1ɺ   H5R Hǅ    胍H1ɺ   H5R Hǅ    ^H1ɺ   H5OQ Hǅ    9H1ɺ   H5/Q Hǅ    H1ɺ   H5[ Hǅ    H 1ɺ   H5,Q Hǅ     ʌ;C   Ld4 LL H(L@L1ɺ    LHǅ    {1ɺ   LH5P Hǅ     Z1HH1ҹ   HE    MHǅD    H   Hǅ@   ǅ`   ~HE   E   Hǅ(    H~h~ E~ E~HVH(:    zH   H     HHH 薃H芃H ~HrHfHZHNHBH6HEdH+%(     H  H[A\A]A^A_]fD  L=9A Li~LZ2 H1ɺ    LLLL H(L@Hǅ    f1ɺ   LH5gN Hǅ    Hǅ    :1ɺ   LHH5AN Hǅ     H@1ɺ   HH H5 N Hǅ(    HH܉M   1H(HL0HHHPH!b ǅ8   H0H?H#   	xH   H     HHH({H oHcHWHLH? 血L]{ff.     UHATL&SHMt
I$LPH{PLcPHtH[A\]H@fD  [A\]ff.     Gz    U1ɺ    H5M/ HSHHH    VHH]Ðff.     UHATL&SHMt
I$LPH   L   HtH[A\]H@[A\]Ðf.     UHATL&SHMt
I$LPH   L   HtH[A\]H@[A\]ff.     UHATL&SHMt
I$LPH{`Lc`HtH[A\]H@fD  [A\]Ðf.     UHAWAVAUATSH8H}H  HEH@HEH  HEH@HEH  HEH@HEHP  HEHXH   LkMt|MeM   Mt$M   M~Mt0I\MMIx LE~H}`   vMuI~ M~~`   LvM   MH{ Lc~`   HcvMt5LTfD  I} Mec~`   L6vMtM0LuI~ I^8~`   LvHtCH]D  ID$I|$ HE~`   LuHEH{IL}I I_}`   LuHt	H]oLuI~ I^}`   LyuHt	H].L}I I_z}`   LMuHt	H]H8[A\A]A^A_]HcOI1   LWHcMHI4IBH<L9   HH)HHH~sAH' :P   :P   :P   HH9t<8uH9tcHH9tZLHfHH9tOHH9t>DD8t HH)H(  H   HuA8t     1    HHH~{AIL-f     :P   :P   :P   HH9t=8uH9@    H'    H    HHH)H   HtgHOA18CHHH9@+HH9@A8H:HAA8>H82HAff.      UHAWAVAUATSHH  dH%(   HE18 tB=d9  H8 v  HEdH+%(     HeH[A\A]A^A_]f     H8 H!vt1ɺ   LmHǅ    H5(* HD   Hǅ    L(~f1ɺ3   H H)EH5 * )E)EHPHE    Hǅ    H   Lm|1H 1   H5) Hǅ     訁H H}   3|1H(1   H5) Hǅ(    nH(H}   {1H0:   H5) Hǅ0    4H0H}   {1H8=   H5) Hǅ8    H8H}   {H@1ɺ:   HH5) Hǅ@    轀H@H}   H{HH1ɺ=   HH5) HǅH    耀HHH}   {HP11HE1E1LAUHjPjj qH0LyH}iH}`H}WH}NH}EH}<H}3Hw   }nH   H     HI_zHHwH@wH8wH0wH(wH wHwHwHL%5 v=5  H5 @ sH8I{=5  tI?vdf5 5   H@HHHHHW/ HH=x5    H=r5    H=5  L5(   H=5  a  H8H1ɺ!   HHLHǅ    Hǅ8    P~H81H#   H5( Hǅ@    HE ~H1ɺ3   H5& HǅH    }HM1Ҿ   HL@A   LQHHjj j 6H LzwHHuH@uH8uH1ɺ   H5A Hǅ    q}H 1ɺ   H5B Hǅ     L}H1~ D-U IH5zA    LLEE   fDmHǅ    |HK 1LHLߺ   LHǅ    |H1~IҺ+   fDmH5<& LLEE   Hǅ    p|H 1H50& Hǅ     IӺ(   LL>|H(1LIк*   Hǅ(    LPLL	|H01H5)& Hǅ0    IѺ(   LL{H1HHǅ8    !   {H81~(~HH5? Hǅ@    0Hp    )`)PS{H1ɺ1   H5n# HǅH    .{AVL@1jHHE1L   jr|H LtHH*sH@sH8sH0sH(rH rHrHrHrH rHrH1ɺ   H5> Hǅ    MzH1ɺ   H5? Hǅ     (zH1~ +   H5# fDmE   EHǅ(    yH1ɺ(   H5# Hǅ0    yH1HHǅ8    !   yH8H%H 1~(HHHǅ@    H`   0)PNyH1ɺ1   H5! HǅH    )yAVL@1jA      LHHjjzH LrHH"qH@qH8
qH0pH(pH pHpH1ɺ   H5< Hǅ    uxH1ɺ   H5= Hǅ    PxH1~	   H5< fDmE   EHǅ    xH" 1HHƺ*   Hǅ     wH1~ +   H5g! fDmE   EHǅ(    wH1ɺ(   H5! Hǅ0    {wH1HHǅ8    !   VwH81~(HH5; Hǅ@    0H`   )PwH1ɺ:   H5 HǅH    vAVL@1jHHE1L   j,xH LppHHnH@nH8nH0nH(nH nHnHnHnH1ɺ   H5r: Hǅ    vH1ɺ   H5d; Hǅ    uH1~	   H5D: fDmE   EHǅ    uH7  1HHƺ*   Hǅ     uH1~ +   H5 fDmE   EHǅ(    JuH1ɺ(   H5e Hǅ0    %uH1HHǅ8    !    uH81~(H   H549 Hǅ@    0H`)PtH1ɺ=   H5 HǅH    tAVL@1jHHE1L   juH LnHHlH@lH8vlH0jlH(^lH RlHFlH:lH.lH1ɺ   H58 Hǅ    sH1ɺ   H59 Hǅ    sH1~	   H57 fDmE   EHǅ    `sH 1HHƺ*   Hǅ     8sH1~ +   H5 fDmE   EHǅ(    rH1ɺ(   H5 Hǅ0    rH1HHǅ8    !   rH81~(HH56 Hǅ@    0H`   )ParH1ɺ:   H5l HǅH    <rAVL@1jHHE1L   jsH LkHH8jH@,jH8 jH0jH(jH iHiHiHiH1ɺ   H55 Hǅ    sqH1ɺ   H56 Hǅ    NqH1~	   H55 fDmE   EHǅ    
qH 1HHƺ*   Hǅ     pH1~ +   H5e fDmE   EHǅ(    pH1ɺ(   H5 Hǅ0    ypH1HHǅ8    !   TpH81~(H   H54 Hǅ@    0H`)PpH1ɺ=   H5V HǅH    oAVL@1jHHE1L	   j*qH LniHHgH@gH8gH0gH(gH gHgHgHgHfL%% LbH@HHHHH~ HH1ɺ!   H5Z Hǅ@    n   HǅH    jE1E1   LHH@LeLIhHH-f   ]H@   H     HIhH@fLL-$ eeD  HY    H==% b L   H=$ bX    H    H=$ b Hi    H=m$ b`ff.      UHL	 fH   HATSHHH   GfHnfHnHH8flHhH   G    G fHnfHnH`flfHnG0fHnflG@H>H{PHtHPH5"# fCx C|ƃ    CXCh      H  H   LF  11m1fHǃ       f   H   ǃ       ƃ    Hǃ       ƃ    ǃ       ǃ       ƃ    ǃ       Hǃ             	bH8  f^E H  Hx  HH  H  H  H  H  H   H  H0  Hǃ     Hǃ      Hǃ       Hǃ0      HǃP     HǃX      Hǃ`      Hǃp      Hǃx      Hǃ     Hǃ      Hǃ      Hǃ      Hǃ      Hǃ     Hǃ      Hǃ      Hǃ      Hǃ      Hǃ     Hǃ       (  8  h      Hǃ      Hǃ      Hǃ       ǃ0      Hǃ8      H@  HH  HǃP      Hǃh      Hǃp      Hǃx      Hǃ      Hǃ        X  [A\]       t%H  H=/  H0`H5   . L%a  L]tLHN  yaIoff.     UHAUATSH  HdH%(   HE13XH]IHtGHHPHuLLkHHPHEdH+%(   u(HL[A\A]]@ HuHLj\I!oIoIoUHAWAVAUATSH   dH%(   HE1 uHGHH8 tWu(HEdH+%(     HĨ   [A\A]A^A_] H5 Hh  LcL-B  LB  LL_nHC@9CuH3LH   L lHHHp;YLHAW8x?tILP0FfD  HcSH5 H9HFH8H  HB  LLLiMnHCH8LHpdLHCAG8x?|HCx   { uJLe   HE<svgLQCu(HDOCTYPE    LHHEE svg%CMd@    8cH=) H0]H5 8gx	cHP      HH8IRf      L0dH5 D{H   H@  LL
hlHCDL8HHHPL`CLUCH8x6CkLH   -bH=F H0\H57 4kLHX   aH= H0\H5 ;ol'l@ UHAWAVL5* AUATISHH   dH%(   HEHLhHc@H@HM| u4fI0M9t)I} uH   L|TtIExt.1HEdH+%(     He؉[A\A]A^A_]     IE8 tH`HsPHH0^  L`HEHǅh    HXHIGMoLP@H}H  HPHELH8HIGP@LuMIkILPH}LuHtHPIH8L   LmMglIE LPH}LhHtHPILL5 PH=    IE HXLLHExt0HXH5">  R1IE LPILP LuHXH5=  HE    QLpMtH=  L   e  Mt7IHXH LHEx{  HXH5=  tQHǅ@    H@H}H(HHxPHuLu1LHP0HExg  HǅP    HPLH5=  HEQH   L   HL)tTHttIFH9tkHHIH H H;HtHRHI9uHHH H   HpH      HH{g  L   HPHtHHpHHPI>HPIHtHHpHHPHpHpHXL   HHHP H5 H  HH;  HMLPHUL;  LA  +eHXH5;  AOXZEuq    uK1HPHtHPH}HtHPH@HPHpHZHPOHpHHHH tHpLHHH zH=  t21HEHXH5
;  HE    H@NxH    H= 1gUH=  HM   H~HHXH HHExtrHXH5:  tNF   H$ H=| TH5p VHD    H=H T~H
    LTHEHXH5:  HE    HPMH    H= HPkTHPzRHHpHHfHfHcgHfHHpHHfHHpHHfgHgff.     UHHAWAVL5:7 AUL`ATLeSHLH   dH%(   HE1)VLQLL`QH`wHWLL牅hf  H`IVLVIx  E1H    HLXTHX    H5< LXL`H%  HhL'8  11^1LHǅp @  fxy    Hh.u#H5 H  HhH7  %ZHXHtHPL`  H}HEHuH9t	HMHEdH+%(     HĈ   H[A\A]A^A_]f     H)5 H;H^ULy HhDHctEoHxmlns:ooHE#HFHHH)HHH  H1fD  xx  xx  xx  HH9E  8xuH9HH9L}HLELfHH9D
D8	lHL9uL5y HhcHooo:metaHctHEHa_slidesHE8HFHHH)HH	  H1fD  xo#  xo"  xo!  HH9  8ouH9HH9HLLEfD  HH9DD8oHL9uH2 H;HSyfD  H=  Mw   MIH LLH`xtFH575  LIf.        VH= H0QH5  H54  LLpHǅp    HKf   VH= H0WQH5  H    H=  O% HH)HtZHtGHn8xefD  H    Hw    Hg8x^H8xQHHHH)HtEHt6H:oHHHH:otH:otH_LH[bIIbHTb     H@CfUH H   fHnHpHAVAUATSL`  HHH   LX  fHnHhflfHnH`G fHnH`fHnflG0fHnflG@M9t%fD  I<$HtHPIM9uLX  MtHh  LL)HL8  Mt-I|$M	I} Md$P`   L^HMuL   Mt<D  MM$$MnMtL UX   L#H   LHMuH  H  1H    KH  H   Hǃ      Hǃ       H  H9t	HGL  Mt_    MMm Mt$MtLTX   LGI|$HtHPI|$HtHP(   LUGMuH  H  1H    CJH  H  Hǃ      Hǃ      H  H9t	HFL  MtLfD  MM$$MuMtLSX   LFI}HtHP    LFMuH  H  1H    IH  H  Hǃ      Hǃ      H  H9t	HLFLX  Mt1MM$$I}PNI}HtHP    LFMuHP  HH  1H    IHH  Hx  Hǃ`      HǃX      HP  H9t	HEH@  HtHPL  MtS MMm I|$c  I|$ID$@It$H9t	HjEI|$HtHPP   LMEMuH  H  1H    ;HH  H8  Hǃ       Hǃ      H  H9t	HDH   ML   L   M9t" I<$HtHPIM9uL   MtH   LL)DH   HtHPH   HtHPH   (u#H5Z
 H   H   Hk.  PH   HtHPH   HtHPH   HtHPH{`HtHH.  H@H9udCH{PHtHPH HH[A\A]A^]I
 t/H
 H=	 H0eJH5	 @f     L%	 LGtdLH	 J먐fUHSHHHH].Off.      UHAWAVAUATSHH  HHpdH%(   HE1CU   HHhH HP(SHxH&  HLH      L0HpLIH* Hǅ    H`EHHpQEHpwHKLxHpHHZ  HpIPJHHJI$x
  H=    HHǅ    H  HPHH  HH=  H     Ht:HHH HHpx
  HH5+  ?E1HHtHPLS  H0H`H8H9t	H@AHx tHxZKHh1HP HEdH+%(   #  HeD[A\A]A^A_]fD  E1H    tQHpǅPƅX H LhHc@H@HMt tjL%   I0M9tNI} GuH   L?	  IE1ۃxuIE8 XI0M9ufD  HHH8HpPJ  LHpHǅ    HHID$Ml$LP@HpHN  ;  HPID$HLHP@HH:_HHPHHHtHPHHH   HH^HHPHHHtHPH=Q  L%J 1  HHLHHpxZL}L5)  HHE    LL@<M#  H@H=  L% H  HHLHHpx[LeHLHE    <Mq%  I$LHLPHHHP`HLL0HLL` Hǅp    CLLHHA   Hǅ0    H0HAH0HtHPHpEHHtHPHHHHXHc@HL,uh       EHI9N  H3HHPHp!uH!   H5 L<HpAMEEtHHHHP8H=  L\
  Mt7I$HH LHpx  HL:HH5HP*D  HH    E1H    K(uH5P HS  HLHLLU:HHtHPHHtHPHH   H9   !  H(uH5 H
  HLIHHHtHPHHtHPHHtHPHHtHPHH   H9   
  X i  HHEHǅx   HPHpH   H   HE    HE    E  ?HE    HE    HXH9  HH0+H5	%  H8HHH9X=  HH=  L   MtI$H LHH0xuL@H5$  HHǅ@    w8MtH LH`HIE PH} L   L1HxIH`HLLT  HtMH8 tGL Mt	ILPIE LPfD  L 1LHxH} Iu   :H H     IHxHtHPHEHUH}   HxH0IHք  HpMfJHH  H IHL0HE/L}MuD  fH59#  H!7MAMILPEM?MMgL M9   DHMt+ILHH0x   H5"  H6E1   L^DHMaI$LHH0x5H@H5g"  HHǅ@    H=6HI9AHt	HHRM H5"  HL@Hǅ@    5Kf.     H    H= h< H   H5S 6IEIU@  )         P@ H=  I\$j  H(HHH HHpx}  HH5!  
5D  H]HL5   HE    L4HH>HLHLPHH+  HP(H  HH1HHHHP0Hxt  HLW4HE1D  HtHPHHHHP    E1H=  H  HyHHH HHpx  HH5  3:P   HH5  H]HE    3HHHiqD  LeHLHE    E3LMeI$LLP H0DHEl  LL	3I$LP*f.     HHQ  L1HxI[D  HELuIHtH@1HxL4HEHP HHuL`  HX  LH)HHH9i  H9s<L,M9t3L     H;HtHPHL9uHL`   H]E1L52 H   HLX  HCMH=    Ht5HL0LHLH0x   H5  L11I} IE HtHPHIHuHpH HAI  HpHPHxH9t	H=3HHt	HHPHHHPD  H@H5  LHǅ@    H0H3@ H    LHe7Hf     Ha    H=m 87 E1@     E1K     I} G@    PfH9    H== 6T H    H=u 6 H)HHX  F     P+LeHL5  HE    L/L0M'HHLL   I$P H5 H	  HHpLL\  AVHxL,!  DHLA5/XI$LZPEHH   HP(E1H5 H  H= 7H5 H=  L   m	  M	  I$HH LHpx  HH5  {.HL%} H   MD	  E1HHHHP HHpx  HH5,  .Hǅ    M}I$LPnH      HD  H@HHP H   H;HtHPHpHH5y HZ
  HL  11HHHW@H5H H
  HHHH0L.  AVH8L>  BH_AXPHcE1H(HHH   @ HL,Hǅ    HHǅ    H   H   H9x  HH     HH       H(IHI9H=  J\j  H  HHHh HHpx:H]HLHE    ,HHH&HHHHpx   HL+Hǅ    E1f.     HH   H   H9  HHHHHHPHH   Mt
I$LPHHP@ LeHLHE    =+LM`HHI$H LH`HPH H7HHH5 1H LB(   Hǅp    L<HH LAHptz4I$   1HH5x H@(Hǅ    H1<HHLHHpx  HL'*H+4H HKHP@H!    H= 0yHb     H=8 k0yHǅ    薸L1HxIH   HHH>  Mt
I$LPHH1L`  HX  LH)HHE11H   L% H    L/GHL    L/H=  H 	  HnHHH HHpx  HL(3HxHL z(H~2DH HtHPI$LPHHPH    H= .H]HL5  HE    L'HM  I$HHLHHHPHHHHHPHH  HP(H  H  HP(H  HP( d  HPǅ`    L0H0HH   H   `LH0x  LLHǅ    &贵HHǅ     H   H   H9  HH     HH   ``9    H`HH@09PN ALH0x  LLHǅp     &HH   H;   3  HH;  [HHtHPHHtHPHHPHH5  LeHE    %HH=  H   tkH*_   H H= +H5w H    H=? +vHH=6  H   H    H= +xHLH]HE    $HLH$HkHHHHH06  IH-  H      HH   HHH09H    L   Ll1H HH`H6j L1Hj A  HD
 Ln/[A^   E1HHt=HKHSH      H9o  H2 8   CPSi  H7HHtHP0HHt	HHPH E1   )1H=* H0+H5    1H= H0+H5 H`4H@H8HpHHHH`6H8Ht    0  I     #H`H   HI%L1ƅX LH`LL(-H   1H   HPL`D.A`D8t5H8DT3`H@DH73HpH(*HH`I&'ffHH*`*`^P6PfH*^`X`2ffHI**P^X``!fHpff*H^PX`Yv HH*Yj Yf/  f/\ sX,H   HHcLpHIIHH@HxHLpЀX upfH)pMtHD LHHEHHtHD HHHLHE.HHLHP(H(!MtL1A   H=  L@  MIE HH LHpx  HLHǅ@    HE1H0H(4  H@HtHPMIE LPH~    H=b %c   H H= %H5 0   ,H= H0'H5 HhHHPZ"H    HHH   "H=  L@  M`IE HH LHpxp  HL_$HH@
  HC    HPH9  HPHP
  HH9  PuHLmLHE    LLLʬHM
IE HLHpx   HLHǅ     1H@HH   H   H9  L(H0LIE H(PHH@H   HHPHEHLHE    H@H@H H[H@H0HHHH(PHH+HHH5 1HLB(   Hǅp    L([.HHL(AHptxs&   L1H@H5G H H@(Hǅ0    H(-H@HLH(HpxtBHLH0%HHAHP6H   *HxHL H0%uHHtHPH@HPIE LPH    H=e !OH  HH f/E  \,H1LmHuLLLLpHH   H;      L.MIE LPHH   "Y#HHHEH]HPH9trHELuHXH9Pt8H;HtHP =uGHH9XuI^IH   HXHI   E1ƅXoH%H    H= k '   HHH   .  (H5H5H5H5H5H+6H&6H5H6H26H466H7H=6HI6H7H7H8H7H4II8HHH5H94H
5H47a:H:H:H5H5H5H:H3H3Hy:H4HHH(B4HW:7HHH0Z3HHH0H38HHH013I9HI7H3H9H4H4K6fD  UHAWAVAUIATISHdH%(   HE1H    Ǉ       t2HEdH+%(   |  HLL[A\A]A^A_]VfD  H      HL5# HXHc@H@HL<uH0I9t,H;	uH	   L=tHCx  IE HXHc@H@HL<KL5 @ H0I91H;
uH
   LtLuHE    LaHCx)  H}GtW        f1HEdH+%(   8  H[A\A]A^A_]f.     H   H5  ;toAƄ$   LLH}(fD  HC8 A$   H   H5    AƄ$   LLH}GH   H5 tXAƄ$   LLgHCLH0H   H5[ at	AƄ$   H}H}GH}GH"7fH( f.     H`fD  H`fD  H`fD      HH H@ H8 H0 H(s H c W    HHC H@3 H8# H0 H( H  g&    HHS& H C& H@3& H8#& H0& H(& UHAVAUIATISHHdH%(   HE1 t:H IHLLb(HEdH+%(   u>HL[A\A]A^] L5 LtHf LH WUHAVAUIATISH^HdH%(   HE1m t9Hj IHLL'HEdH+%(   u=HL[A\A]A^]fL5) LtH LH  UHAVAUIATISH^HdH%(   HE1 t9H IHLL!'HEdH+%(   u=HL[A\A]A^]fL5 LAtH& LHt `UHAVAUIATISH^HdH%(   HE1- t9H* IHLL&HEdH+%(   u=HL[A\A]A^]fL5 LtH LH wUHAVAUIATISH^HdH%(   HE1 t9H IHLL%HEdH+%(   u=HL[A\A]A^]fL5I LtH LH4  UHAVAUIATISH^HdH%(   HE1 t9H IHLLA%HEdH+%(   u=HL[A\A]A^]fL5 LatHF LH 7UHAVAUIATISH^HdH%(   HE1M t9HJ IHLL$HEdH+%(   u=HL[A\A]A^]fL5	 LtH LH UHATSH0HudH%(   HE1Ht,HH]HHUHHEЃxt4H5HE1HEdH+%(   uEH0L[A\]    H5HLeHE    Ht HEdH+%(   t1HHT@ H=  H tf.     UHH    HH ]f.     D  H=  H tf.     UHH-    HhHa ]f.     D  H=<  H5 tf.     UHH    HH	 ]f.     D  H=  H tf.     UHH    HH ]f.     D  UHSHHH5 Ht$HL11HH]        H= H0gH5 ff.      UHSHHH5y Ht$HLz11QHH]        &H=? H0H50 f.     @ UHATSHHdH%(   HE1 t4H5 HHEdH+%(   uAHH[A\]f.     L% LAtH& LHt `UHATSHHdH%(   HE18 t4H55 HuHEdH+%(   uAHH[A\]f.     L% LtH LH UHSHHHHtHPH;H]@ UHSHHHHtHPH;H]@ UHAWAVAUATSHxdH%(   HE1 tA=2  H   HEdH+%(   R  HeH[A\A]A^A_]     HQ Ht1H}Lu   HE    H5 Lm   LeHE    f1LH )   )ELuH5 HE    HEHU   L1ɺ4   LH5 HE    `HUH}   HHEE1AVHuE11j1LPjj H0LH}RH}IH}   HU   H     HI{H}H}	H} HL% Q=  H `D  H8IX=i  tI<$4Q    LuLmL L]L1ɺ!   LLhL}LpHE    HE    HE1L   H54 HE    HE1L)   H5 HE    HELM1PHMA      HxLjj j H LTH}H}H}Hh1Hp!   HE    WHU1LH5 HE    HU   11L4   H5h HE    LMHM1HxA      LPjj j XH LH}H}
H}H}h4 L=1 LuLLmIL ?L1ɺ!   LLpHE    i   HE    WHUE1E1H   L-LH}   HU   H     HHxH}:HxLHy Lp	 UHAWAVAUATSH   dH%(   HE1 t>=?  L5 
  HEdH+%(     HeL[A\A]A^A_]D  H H
t1LuLm   H5 HpHǅp        LeHǅx    f1H}H 5   )EH5 HE    HEHE    HUL   `1ɺ/   LH5 HE    HUH}   01L8   H5 HE    LxkHUH}   HHEE1AVHpE11j1LPjj H0LH}ZH}QH}HHx   Hp   H     HItH}H}H}HpHL% >=?  L5  f.     H8I@=  tI?f.         H LmHXLeHEHX1ɺ!   HHPHhHǅh    HE    HE1L   HE    HEH" H1L5   H5w HE    LULM1ARHMA   HLH   jj j H H&H}H}H}Hp1ɺ   H5z Hǅp    &Hy 1HxHƺ   Hǅx    HXHP1~x   !   E   fEpHE    EHU1LH5 HE    HU   1L/   H5 HE    uHULMHRLHA   1jHM   ARjH HH}q
H}h
H}_
HxS
HpG
HX1HP!   HE    HU1LH5- HE    HU   1L8   H5 HE    LMHM1LHA      HARjj j H H)H}	H}	H}	HhD  H LmHLeH HX1ɺ!   LHE    H5r    HE    HUE1E1H   LLy
H}`   FHU   H     HHP'H}HPHH ?Nf.     @ UHdHHHH@H9uQHʶ 8 t5GPWtD  HHVHPH9u-H@fD  G@ H}H}@ f.      H      HWH9t9HB 8 tGPWtOfD  HOf     HHHG    HPH9uHPHH9u=`f UHHH}H}HoHHPH9uH@@  H?HtH`fD      UHAVAUIATISHH   H>dH%(   HE1H;I} H{HtHPH3~6  MJ  At$LP
   L M$$ELHHǅH    LLLL   A  	HHHcUHcGLdEu*EHEdH+%(   5  HĠ   [A\A]A^]fHHD`DnHHHHcJHDJDJa t     fHHHHcFL4 H   J1LcuԺ:   fHHK6M   1HHfBqHD`Pf.        Ha HLMLP
   1LL% EfD  HHLH\HLuHiH{H;HEdH+%(   tIILf.     @ UHAUATSH8dH%(   HE1 t0    HEdH+%(   g  H8[A\A]] H Ht1H}Leк!   H5 HE       HE    HUE1E1H   LLH}m   SHUȾ   H     HI8H}HL%    H HH}1ɺ$   HE    H5 :HE        HULeE1E1H    LHLH}   HU   H     HIhH}L% HEdH+%(      H8H[A\A]]3 L% L1V1H}Lmк!   H5 HE    V
   HE    DHUE1E1H   LLH}   HUȾ   H     HIH}+LL-q |fUHATSH dH%(   HE13 t'HEdH+%(      H H [A\]@ H H!t1H}Le!   H5׹ HE    J	   HE    8HUE1E1H   L LH}    HUؾ   H     HIH}HL%e p $fD  H?HtH`fD      H?HtH`fD      UHAWAVAUATISHH(HH H H H H HcPHFH Hc@LlADHEuH([A\A]A^A_]I$HxIL$HLzHLpHLBLHH H0HcFL$ H   J'1D  fA4f4BHHu1ffA4 ftB4HH	u1f     fA4ftBFHHufAH1H   fB~LcffAGf   K$MuNHDh1fBgH([A\A]A^A_]ÐHLLMLEHMLMLEHMH1@ HHfUHAWAVAUIATISHHH H H X?|IE uH[A\A]A^A_]D  I$HHHMd$HLrLxH H0HcFH HurH1D  fAfBHHu1ffAfLB4HH	u1f     fAfLBFHHu1_fB~H[A\A]A^A_] HHHUI} HUHnUHAWAVAUATISHH   H6dH%(   HE1HhH    H8HHP LhLm1ɺ   LILxH HE    HHPhHELLH@LHAH=N  HE   Ht3HLuH1 HLHEx   H5LL4E1H;HtHPH}L;HtHPH}HhHtHPH;   HEdH+%(     H   H[A\A]A^A_]@ H5LL}HE    oH    H=e H !H 	H@9H}pHhH  LLH3 HMfInfHnHz fHnfHnHpH L`fHnfHnfInflflflPHh  H{  )) )@)P   I1ɺ*   LIH5 1H`YL8foHEfo fo@HuHEfoPLLm)p)U)M)ELLLHw bHh&H`HEdH+%(        Lp11H5> HpL*   IfInH HuPfHnH )EfInfHnLmflL)E~@fl)E:LLLH H}\HpPHEdH+%(   6H5 HLIIIII*H HLmHHPIH}HpLyHHEdH+%(   LHP+HEdH+%(   lIIEH5 H2LIHh/H`#LXH?HtH`fD      H?HtH`fD      H?HtH`fD      H?HtH`fD      H?HtH`fD      H?HtH`fD      H?HtH`fD      UHATSH HdH%(   HE1H=g     Ht/HLeHN HLHEЃxt4H5LE1HEdH+%(      H L[A\] H]H5LHE    }HtHL`HHAIHHPD  H    H= BHHPHEdH+%(   tILD  H?HtH`0fD      H?HtH`fD      H?HtH`fD      H?HtH`fD      H(u3UHSHHH5@ Ht#H;H]H]        H5 HtH= H5        H H=Ŵ H5 f.     D  H?HtH`fD      H?HtH`fD      UHAVIAUATSH_Ht<L-fD  ILHI|$eI|$k8   L>HuIFI>1H    3IF    IF    [A\A]A^]f.     HHwH0H9tHHf.     D  UHHHAWAVAUATSH(LwHLH)HH9P  IIH)L9   H< H}H9   H  E1H9I7HEH8HtHPLI9t(LHLH)LD  H2HHHpH9uHM9tM)HLLrHLHtIuHHMH)HMHEM} IMIIEH([A\A]A^A_]D  HHUHMHumHuHMI(D  HrHH9HFHUH<    HH9HFHEH<    H= hHlMuH}HuLH	HH HtWUHAWAVAUATISHH(HOHGL?H)HH9r1H1HHHI\$H([A\A]A^A_]Ð    HHL)HHH)H9   ILM9MFH9rL, HI9LGILELHMHuHuH    IH<01HMLEI9t#L)LLL H2HHHpH9uMtIt$LLEL)LEM4$KMID$Mt$H([A\A]A^A_]H=F     UHAUIATSHH_Ht+ IHI|$HtHP   L=HuIEI} 1H    1IE    IE    H[A\A]]fD  UHAVAUATISHH   HIH<   L4    LL1HIMT$0It$ID$    HtaE1ML$    HHH HHt?H1H6HA0HID H8HuI|$H9IL$LH9 tKL IHuI<$It$L9t	H!I\$M,$[A\A]A^]    LW0HG0    MH@ H=tuHIE ID$(FHJHfU1HAWAVAUIATSHH(LcfdH%(   HE1LHwH    HEHL<M}   M7IIN0!I6HthHN01MHHsI9uSII9uAFA9EuIE IVp;ruLEH9tHHxLEuM?Mt	I   8   LIH     IE IE     M~IF`AE11HLAF%HC(HSH{ Hs   HEHքuPHLmMf0IIE HtaH IIE L0HCHEdH+%(      H(L[A\A]A^A_]fHUHL1HsH    HED  HCLsIHtH@01HsL4HCIE H5LI~8   LHEdH+%(   tgHHfD  UHAWAVAUATSHXHUdH%(   HEHL,MR  I] HEIIHEIHK0    H3H$  HN1IHIt$I9
  HL9uH}HCH7HEH9Hu      HuHHt'HH}HEx   H}H5HE    HE   HEgHuHH   HH}HEx   H}H5u`H} H}HtHEREf.     HEdH+%(      HXL[A\A]A^A_] E1 HEH}H5HE    HE2 HEH}H5HE    HEHEHtHHEHRHEH9E:fH} +H}JHELHt-HEdH+%(   t-HUIHHk,f.     fUHAVAUATISHH   HIH<   L4    LL1HIMT$0It$ID$    HtaE1ML$    HHH HHt?H1H6HAHID H8HuI|$H9IL$LH9 tKL IHuI<$It$L9t	H1I\$M,$[A\A]A^]    LW0HG0    MH@ H=tH$IE ID$(VHZHfUHAVIAUATSLoM   MMm I\$ Ht    HH   xHuID$I|$1H    jI|$ID$@ID$(    ID$     It$H9t	H+I|$AP   LMkIFI>1H    IF    IF    [A\A]A^]f.     fU1ɺ   H5 HSHHH    HH]Ðff.     U1ɺ	   H5 HSHHH    FHH]Ðff.     U1ɺ   H5 HSHHH    HH]Ðff.     U1ɺ   H5 HSHHH    HH]Ðff.     U1ɺ   H5 HSHHH    HH]Ðff.     U1ɺ   H5 HSHHH    FHH]ff.     fUHATSHpdH%(   HE1HtGutIxt$1HEdH+%(   u`Hp[A\]     HEdH+%(   u>HpH[A\]pLeHwLLXH}-L~HfUHAUATLmLeSHHH(dH%(   HE1HL1ɺ   H5 LHE    ,LL  HH}PH}GHEdH+%(   uH([A\A]]H`ff.     UHċ 1HSHHH5A Hx1Ht	@@9C@H]UHATASH_HuC HS HCfA9HBCHuHބu!1fD9HCHBHH[A\]@ H_H9_tH6HP Hf.     H1HH[A\]U1ɺ    H5y HAWAVHAUATSH  dH%(   HE1Hǅ    H1ɺ   H5 Hǅ    H1ɺ   H5ɱ Hǅ    nH1ɺ   H5_ Hǅ    IH1ɺ   H5? Hǅ    $H1ɺ   H5 Hǅ    H 1ɺ   H5< Hǅ     K   Lt LL H(L@L1ɺ    LHǅ    1ɺ   LH5 Hǅ     j1HH1ҹ   HE    MHǅD    H   Hǅ@   ǅ`   ~HE   E   Hǅ(    H~h~ E~ EHfH(J   0H   H     HHH HH HHvHjH^HRHFHEdH+%(     H  H[A\A]A^A_]fD  L=I LyLj H1ɺ    LLLL H(L@Hǅ    v1ɺ   LH5w Hǅ    Hǅ    J1ɺ   LHH5Q Hǅ     H@1ɺ   HH H50 Hǅ(    HHM   1H(HL0HHHPH1 ǅ8   H0+HOH3   H   H     HHH(H HsHgHLH L]HHыPHIHwff.      HIHALMt6IHH!fH0Ht(HNI1HHI9uHI9ufD9XuLÐE1LÐ     H u)HOHufD  H	Ht9quH    LO1IHHIHtHx9t"L Mt!AxH1҉II9uL9uH	H1뤐ff.      UHATI   SI<$H     HHxHtHPH[A\]Hf.     U1H" HSHHH5 H81HtH{@HP@w;rtH]f        H9tHHGH]Ʌf.     UHAVE1AUATISH? H   H[HttH{ HHC1It$HAIt$I$IL$H4@ HHt;H{IIE HHC1HAIt$I$HH8 uL(HHu[A\A]A^]@ HWHt2HH<u7L,    L5L1HIeM4$:HG0    Lw0H=tHfUH HAUIATSHH_HHt1f     IHI|$HtHP   LHuIEI}1I8H    I}IuIE    IE    L9tHH[A\A]]}D  H[A\A]]Ðff.     UH\ HAUIATSHH_HHt1f     IHI|$HtHP   LHuIEI}1H    I}IE8IE     IE    IuH9t	HHLH   [A\A]]UH HAUIATSHHH@I]H IE Ht-D  IHI|$HtHP   LMHuIEI}1I8H    =I}IuIE    IE    L9tHH[A\A]]D  H[A\A]]Ðff.     UH HAUIATSHHH@I]H IE Ht-D  IHI|$HtHP   L}HuIEI}1I8H    mI}IuIE    IE    L9tHH[A\A]]-D  H[A\A]]Ðff.     UHL HAUIATSHHH@	I]H IE Ht-D  IHI|$HtHP   LHuIEI}1H    I}IE8IE     IE    IuH9t	HgHLH   [A\A]]PUH HAUIATSHHH@II]H& IE Ht-D  IHI|$HtHP   LHuIEI}1H    I}IE8IE     IE    IuH9t	HHLH   [A\A]]UHAVAULuLmATIHSHH0dH%(   HE1HL1ɺ   H5q LHE    LL  LH};H}2LL  A   A   H3 oI|$pHs@HP8LHHEdH+%(   uH0[A\A]A^]HHff.      UHAWAVAUATSH(H}H  HEH@HEHd  HEH@HEH/  HELxM   I_H   LkMtbMeMtxIT$H   LrMt'I~HUdLMv(   HUMuLr(   HMtdLLc(   HMt'LwMe(   LMtMaI_(   LqHt3I-@ IT$(   LHUJHUHtI!H}(   H_'Ht	H]H}Ⱦ(   H_Ht	H]H}(   H_Ht	H]gH([A\A]A^A_]f.     UH<| HX  fHnH   HATISHH  fHnHH8HxflfHnH`G fHnfHnflG0fHnflG@HpHP I$  HtH{HH[(   !Hu[LA\]0H@ UHSHH+HH]ff.      UHAWAVIAUL@ATLIԺ
   SHH   dH%(   HE1EHL|DIEu,HEdH+%(      HĨ   L[A\A]A^A_]@ -   @b g HfHHHHu3Hc]H.   fHHHHu>IDx1fY    HLH8VH8Hf.     HL5Hf.     U1ɺ   HAWAVLuAUILATIH5 SH]HXdH%(   HE1HE    @1ɺ   HH5y HE    "LHھ  LH}L}BH}9LHE    HEHE    HHEAE@tLAE@   HEHcPHEHc@L|DHHEIE   H
 LHL  HEjH}  LHA   A   H HH}mH}dH}[HEdH+%(      HX[A\A]A^A_]f     H}-fHuHxHcFH Hu;HuH    fHyHcFH Hu:1E}fDf.     HHUHUHf.     HHMHULmHMHU<HH"H     UHAWAVAUATSH   dH%(   HE1~ tB=  Ht   HEdH+%(     HeH[A\A]A^A_]f     H1 HQtHx1ɺ)   Hǅx    H5u xHE     1  =r  L- m  IE L}1ɺ<   H5 LLmHE    HELeHE    HU   LHHEE1AUHxE11j1LPjj XH0LH}H}j   PHx   H     HI2H}HxHL% =_  H |f.     H8I=1  tI>Lf.       J  LeL}L{ LH}1ɺ!   HE    HE    HE1L#   H5É HE    LeHE1L<   H5] HE    HELM1PHMA      jLj j H LH}H}H}H} L- L1H}Le%   HE    H5# Lu   L}HE    f1LH 5   )EH5 HE    LeHEHUL   :1L2   H5 HE    |HUH}   
HHEE1AVHuE11j1LPjj H0LH}nH}eH}   HU   H     HIH}.H}%H}LL%r mg     L-A LeLL}YL" L1ɺ!   LL`HE    y   HE    gHUE1E1H   L=LH}   HU   H     HHhH}JHhLH L`     [H8I=  tI>/mf.      *   LeL}L LUL1ɺ!   LLPLXHE    HE    WHE1L   H5c HE    HE11L5   H5p HE    HELM1PHMA      H`H}jj j HhLHhH H}H}H}HP1HX!   HE    HU1LH5ϗ HE    HU   i1L2   H5 HE    KLMHM1H`A      LhPLjj j H LH}DH};H}2H}H=e LeL}LI 6L1ɺ!   LL`HE       HE    HUE1E1H   LdL,H}   HU   H     HHhH}qHhH= H L`I$f.     UHAWAVAUATSH   dH%(   HE1 tB=c  L5   HEdH+%(     HeL[A\A]A^A_]f     H H!t1LuLm   H5 HpHǅp    @   LeHǅx    'f1H}H 5   )EH5Ҁ HE    HEHE    HUL   1ɺ/   LH5π HE    HUH}   P1L8   H5π HE    LxHUH}   HHEE1AVHpE11j1LPjj H0LH}zH}qH}hHx   貽Hp   H     HIH}+H}"H}HpHL% ^=_  L5 f.     H8I`=1  tI?f.         H~ LmHXLeHEHX1ɺ!   HHPHhHǅh    HE    	HE1L   HE    HEHB H1L5   H5~ HE    LULM1ARHMA   HLH   jj j H HFH}H}H}Hp1ɺ   H5 Hǅp    FH 1HxHƺ   Hǅx    HXHP1~x   !   E   fEpHE    EHU1LH5 HE    HU   1L/   H5} HE    HULMHRLHA   1jHM   ARjH HH}H}H}HxsHpgHX1HP!   HE    HU1LH5M HE    HU   1L8   H5| HE    LMHM1LHA      HARjj j H HIH}H}H}HhD  Hف LmHLeH{ HX1ɺ!   LHE    H5{    HE    HUE1E1H   LLH}   fHU   H     HHPGH}HPHH (?nff.      UHAWAVAUATSHH  dH%(   HE1~ tB=  Ht v  HEdH+%(     HeH[A\A]A^A_]f     H1 H衽t1ɺ   LmHǅ    H5q H   Hǅ    Lf1ɺ3   H H)EH5q )E)EHPHE    Hǅ    aH   L1H 1   H5hq Hǅ     (H H}   1H(1   H5fq Hǅ(    H(H}   y1H0:   H5dq Hǅ0    H0H}   ?1H8=   H5jq Hǅ8    zH8H}   H@1ɺ:   HH5mq Hǅ@    =H@H}   HH1ɺ=   HH5pq HǅH     HHH}   HP11HE1E1LAUHjPjj >H0LrH}H}H}H}H}H}H}H   H   H     HIHHsH@gH8[H0OH(CH 7H+HHL%} p=r}  H} @ 3H8Ix=J}  tI?df2} 
}   H@HHHHHv HH=|    H=|    H=}  L5%p   H=7}  a  H8H1ɺ!   HHLHǅ    Hǅ8    H81H#   H5p Hǅ@    HEH1ɺ3   H5m HǅH    {HM1Ҿ   HL@A   LQHHjj j H LHHnH@bH8VH1ɺ   H5D Hǅ    H 1ɺ   H56 Hǅ     H1~ D-7 IH5    LLEE   fDmHǅ    sH 1LHLߺ   LHǅ    AH1~IҺ+   fDmH5m LLEE   Hǅ    H 1H5m Hǅ     IӺ(   LLH(1LIк*   Hǅ(    LPLLH01H5m Hǅ0    IѺ(   LLWH1HHǅ8    !   2H81~(~HH5c Hǅ@    0Hp    )`)PH1ɺ1   H5j HǅH    AVL@1jHHE1L   jH L6HH誺H@螺H8蒺H0膺H(zH nHbHVHJH >H2H1ɺ   H5! Hǅ    H1ɺ   H5 Hǅ     H1~ +   H5+k fDmE   EHǅ(    dH1ɺ(   H5k Hǅ0    ?H1HHǅ8    !   H8H 1~(HHHǅ@    H`   0)PH1ɺ1   H5!i HǅH    AVL@1jA      LHHjH L.HH袸H@薸H8芸H0~H(rH fHZH1ɺ   H5H Hǅ    H1ɺ   H5: Hǅ    пH1~	   H5 fDmE   EHǅ    茿Hj 1HHƺ*   Hǅ     dH1~ +   H5h fDmE   EHǅ(     H1ɺ(   H5;i Hǅ0    H1HHǅ8    !   ־H81~(HH5 Hǅ@    0H`   )P荾H1ɺ:   H5g HǅH    hAVL@1jHHE1L   j謿H LHHdH@XH8LH0@H(4H (HHHH1ɺ   H5 Hǅ    蟽H1ɺ   H5 Hǅ    zH1~	   H5ā fDmE   EHǅ    6Hg 1HHƺ*   Hǅ     H1~ +   H5f fDmE   EHǅ(    ʼH1ɺ(   H5f Hǅ0    襼H1HHǅ8    !   耼H81~(H   H5 Hǅ@    0H`)P7H1ɺ=   H5e HǅH    AVL@1jHHE1L   jVH L蚵HHH@H8H0H(޳H ҳHƳH躳H讳H1ɺ   H5 Hǅ    IH1ɺ   H5 Hǅ    $H1~	   H5n fDmE   EHǅ    He 1HHƺ*   Hǅ     踺H1~ +   H5;d fDmE   EHǅ(    tH1ɺ(   H5d Hǅ0    OH1HHǅ8    !   *H81~(HH5c~ Hǅ@    0H`   )PH1ɺ:   H5b HǅH    輹AVL@1jHHE1L   j H LDHH踱H@謱H8蠱H0蔱H(舱H |HpHdHXH1ɺ   H5G} Hǅ    H1ɺ   H58~ Hǅ    θH1~	   H5} fDmE   EHǅ    芸H;c 1HHƺ*   Hǅ     bH1~ +   H5a fDmE   EHǅ(    H1ɺ(   H59b Hǅ0    H1HHǅ8    !   ԷH81~(H   H5| Hǅ@    0H`)P苷H1ɺ=   H5` HǅH    fAVL@1jHHE1L	   j誸H LHHbH@VH8JH0>H(2H &HHHHfL%1m LQH@HHHHHf HH1ɺ!   H5f Hǅ@    J   HǅH    5E1E1   LHH@LLɯHH譭   蓤H@   H     HIuH@	LL-Ol ZeD  H_    H=l h L   H=al LX    H9_    H=l ( H^    H=k ff.      f@ UHAUATSHHH9tlL.IMt
IE LPH;L+HtHPMl$MtX   譥It$HImLcLkMtL許X   L諤HH[A\A]]HUHSHH^H7H1HtH]fD  H1HH]ɉfD  UHATSH^LbHHt1[A\]     LȮHu1H訸H1L蔸H9븐@ UHAWAVAUATSH  dH%(   HE1H   u'HEdH+%(     He[A\A]A^A_]D  L H_`1IL   LHǅ     H5wy L1ɺ   LH5Ty LHǅ    LL  HHH Iv`LA   A   Hy   DHHǅ    L=x HHLI   H@HH     f     HL}Mn`1ɺ   HH5Q{ Hǅ    H  LHH-LAoL$(fLMnpLHǅ    ) )j ALj LLH HU2 HXZ跩HH   Lc1DkL)HtHD
   DhEDIEHHHw f.     fHHfAL9uHcEIHH HuBH1)   fEhfp    HH@, HHLHLHHcHHHH"fUHAWAVAUATSH  dH%(   HE1HP   u'HEdH+%(   Q  He[A\A]A^A_]D  H Lg`1I   HH59v Hǅ     蹯H 1ɺ   IHH5u Hǅ     H臯HL  LtH 訧H 蜧HIu`Hu HA   A     HXʤM@  I0  I  HxHpI9
  fD  At$(HpwIH
  MD$ H@
   HHExL`EHILHHHLHC  M}`1ɺ   HH5w Hǅ     VHھ  LH?H sIt$0H
   M}`	HHHǅ     E蚦H1ɺ   H5| Hǅ     խHپ  LH辰H H It$8H
   M}`|HHHǅ     EH1ɺ   H5 Hǅ     HHپ  LH1H eH YIt$@H
   M}`HHHǅ     E耥H1ɺ   H5(v Hǅ     軬Hپ  LH褯H ؤH ̤It$HH
   M}`bHHHǅ     EH1ɺ   H5r Hǅ     .Hپ  LHH KH ?1ɺ   HH5r M}`Hǅ     ګH1ɺ   H5jr Hǅ     赫Hپ  LH螮H ңH ƣIu`  HA   A   Hr MvLHǅ    LHIV(It$@HHQHIV0It$HHH2H   1芨HfI~٥1   mm hfInstO hZt  H膥HA.   11A      HHǅ     jj j L H M	  H4HA   11A.      HHǅ     jj j 袛L H MIcPIcFHD
   HLL`BƉhXHL`H5]p HcPHLP1     ffAHHuIc@HH H   HHyIcFH H   DHhHLfL^HD@EtDMu`1ɺ	   HH5o Hǅ     LHھ  L֫H 
At$(H
   dDp	EDUHIE  M}`1ɺ
   HH5Io LHǅ     fLHھ  LSH 臠Iu`HA   A   Ho   ÝH諘HOHCH臘IT$ AL$(LrH.M}`1ɺ   H5p HHǅ     蹧LHھ  L親H ڟIu`  HA   A   Hl HDxADHIEP  L5n 1HM}`   LHǅ      H1ɺ   H5v Hǅ    Hپ  LHHH L1ɺ   HM}`Hǅ     諦L1ɺ   H5y Hǅ    L胦HL  LLiH蝞H 葞LIt$P
   Mu`L$LHLEHǅ     貞L1ɺ   H5Zo Hǅ    LHL  LרHH It$XH
   Mu`蕝HHHǅ     E&1ɺ   LH5l Hǅ    eHL  LRH膝H zMu`1ɺ   H5l HHǅ     1ɺ   LH5k Hǅ    HL  LHH 	Mu`1ɺ   H5k HHǅ     褤Hھ  LH荧H Iu`HA   A   HUk   HH艜H͔HqHeLIH9xHX葔@ 1H1x     ffATFHHuHINHcFH Hg  H)   1fE~fHT@ Hi HHHrf     fHHfAH9uHcEIOH H.  H)   1f0Ewfx 1H=i     f4ftPHHuHxK?M+  Lc}HA.   fDHxK?M   HE1ɉHfFNf     IvHHLPH`2HHLPH`@     IpHLPH`LPH`HHHHh͑HhHwfD  HHHh袑HhH HH}HHfD  IpHHQHHH薔H錶H黶H飶H闶H鋶H闶HsHg鳶˶HHHH H HH+H9HGHUHfHնff.      UHAVI1AUIHzATI1SHH dH%(   HE1I} LHP(t`I6LmLLHP(foEHEHKHSoHCHsHUfH~HU)MH9tEH9t0H5)zLHEdH+%(   u-H H[A\A]A^]fHUf.     HKH9u萒I`@ UHATISHHdH%(   HE1H    0I4$H}HPH}   H5f wHVtA1ɺ   H5!k HH}RHEdH+%(     HH[A\] H}   He wHt1ɺ   H5k H蹞    H}   He wH贐t1ɺ   H5e HyY@ H}   He wHtt1ɺ	   H5e H9@ HE   Hje pHx4t1ɺ   H5de HHE   HNe pHxt1ɺ   H5He H轝HE   H2e pHx輏t1ɺ   H5.e H聝aHE   He pHx耏t 1ɺ
   H5e HE%+HE   He pHx?t1ɺ	   H5d HHE   Hd pHxt1ɺ   H5d HȜHuHGI鞳fD  H> t&UHSHHH`葖HH]HÐff.      UHSHHH`WHH]H'fD  UHAUATSHH8L&dH%(   HE1H=ZT     M  I$LmH<T LLHExtBLH5vH    H脑HEdH+%(      H8H[A\A]] LH5uLeHE    襉H    H6MtI$H}LPHu_       LHE    襍HEH;HfH}]I$LPZfD  Hoi    H=MS M    H    H衐跍Iױf.     UHAWAVAUAATSHHp  HHt=IA   Lx  Ht?(   ULLDfDh HH  H[A\A]A^A_]     L9tE1fD;j A뮐ff.     H  ALx  Ht6L	HHtHPHHfD9@ rHHHuI9tf;w Ð1Ðff.     UHAUIATSHHH>H;HtHPX   nLHI0LcH[A\A]]I鬰I铰     UHAUIATSHHH>I} HtHPLcMtX   HsHI赐MeH[A\A]]HOH6ff.      UHAVAUATSH0dH%(   HE1H9   I   H艔HMt-I$LmLLHEx   H5rL脆E1   LeCHH   HLmHLHExt~H5WrL?MMt
I$LPHEdH+%(      H0[A\A]A^]     H5	rLLeHE    _   f     LuH5qLHE    赅M9MmILP_     ML@HIǮHHǮfUHAUATSHH(dH%(   HE1H    H> tNLmILH}LL H;HtHPH}HEH;HtHHRH;HLPHEdH+%(   uH(H[A\A]]耉IlIh     UHAWAVAUATISHXdH%(   HEH   H+   H    Et
x   AD$|    1HE1LmHEEyF   LLHIHExtSH5pLAT$|H9]   A߃   I$   L4MuH9]   A LuH5oLHE    蝃LuMtIH}   1H5{] HE    H@(HE:HUHELLHEH5_oLxtVAH}HILHPAT$|9]3D  HUdH+%(   u;HX[A\A]A^A_]@ HE8 tH}E|$|fW|胇H雰fD  UHAWAVAUIATSHXHuL&dH%(   HE1   Ƈ   f   Ǉ    Ǉ      Ǉ      Mt,HI$H]LHHExt:H53nHHEdH+%(     HX[A\A]A^A_]f     L}H5mHHE    ՁL}MtILuLLPH} =  Le1ɺ   HE    H5[ L_HELLHHHEHExx  H5qmHYH}`1ɺ   LH5C[ HE    HULLH`HEx
  H5mHH}
1ɺ   LH5[ HE    謒HULLH
HEx,  H5lH譀H}贊1ɺ   LH5Z HE    VHULLHHEx  H5olHWH}^1ɺ   LH5Z HE     HULLH^HExP  H5lHH}1ɺ   LH5:Z HE    誑HULLHHEx  H5kHH}貉1ɺ   LH5Y HE    THULLHHExD  H5mkHUH}\1ɺ   LH5Y HE    HULLH\HEHU@  w     D"fD     D"H5jH~H}шE   A    t-H}臐HtH   H   H   A   H}HtHPHEdH+%(     ILH@HX[A\A]A^A_]    HH5Fj1~H}8i HE8 A   @ HE8 A   @ HE8 A   t@ HE8 A   
@ HE8 A   @ HE8 A   .@ HE8 A   @ D"    D"HiHHEHE]H@HeHdHcHbHaH`H_f.     UHAWAVAUATSHX  HdH%(   HE1H   u(HEdH+%(     He[A\A]A^A_]fD  L H_`1IL    LHǅ     H5V L1ɺ   LH5<T LHǅ     ۍLL  HȐH H Iw`LA   A   HS   ,HHǅ    HH;M  M   I_HH%H   1HHH   HL@ƺ
   L~DhED}IE  HLL1H   H5U Hǅ     L``L覌HL  L菏H ÄMg
HMt,I$LLH xt9HH5fvzHzH|f     HL0H5KfHǅ0    +zfL)MtI$L	   1H5T LLh(Hǅ    贋HLLAH5C H  HHeH LePH(L|kHHH5eAzyH~Y^E  HcHcf)H(CH uP  x'  LkpHCxHHLHHHHP HLHǅ    LLH@pHpj LLj HAHHB HXZ褂HLHHP I$LPM?MfD  HHHP D  fHHfAHxP H9uHcEINH Hu{H)   E1f8EnfD@fD  Hǅ    11E1f     Lk8HC@    HfR H=A X~H5A @ HLHxHHdI$LP3|H	H8H?H٥HHOf.     U1ɺ   H5Q HAWAVLuAULmATSHHhLg`LdH%(   HE1HE    蟈1ɺ   LH5Z HE    LpzLL  LgH}螀H}蕀Hs`LA   A   H1Q   }HC`H=M@  HXp   Ht+HH4@ HLHExt=H53bLvHpoxHEdH+%(      Hh[A\A]A^A_]LeH5aLHE    uLeMtHEHn HxLx  I$H3LLxxHE    EHUHxLHUAH}HI9uI$LPDH:    H=D? {yHgH鄤H銤     UHAWAVAUATISHh  DdH%(   HEHG`H=>  H@pH"  HHB  HHH> HHxS  H5`HltMl$`Hǅ    Hǅ    1ɺ   HHǅ    H5O L1ɺ   LH5N Hǅ    ؅HL  LňH}H}Ml$`Af   tm1ɺ   H5N HHǅ    }1ɺ   LH5zN Hǅ    \HL  LIH}}Hq}LHǅ    LzA$      A$      HE
   L0HHD
   LE.HcUĉtHHLHOuHI  HL|H
   Ӂ
   LE轁HcUĉtHHDl  M|$`1ɺ   HH5=M Hǅ    LHھ  LH/|Ml$`1Hߺ   H5 M Hǅ    Ƀ1ɺ   LH5L Hǅ    訃HL  L蕆H{H{Ml$`1Hߺ   H5L Hǅ    W1ɺ	   LH5L Hǅ    6HL  L#HW{HK{HMl$`1A.      1H[ A   Hǅ    jj j ltHH H1ɺ   HHH5K Hǅ    萂LHھ  L}HzHzMl$`1Hߺ   H5M Hǅ    ?1ɺ   LH5K Hǅ    HL  LH?zH3zMl$`1Hߺ   H5PK Hǅ    ́Hھ  LH; 趄HyMl$`1Hߺ$   H55 Hǅ    脁1ɺ	   LH5J Hǅ    cHL  LPHyHxyMl$`1Hߺ   H5J Hǅ    1ɺ   LH5J Hǅ    HL  LރHyHyMl$`1Hߺ,   H54 Hǅ    蠀1ɺ   LH5;J Hǅ    HL  LlHxHxMl$`1Hߺ   H54 Hǅ    .1ɺ
   LH5I Hǅ    HL  LH.xH"xMl$`1Hߺ3   H5<4 Hǅ    1ɺ
   LH5uI Hǅ    HL  L舂HwHwMl$`1Hߺ8   H54 Hǅ    J1ɺ	   LH5I Hǅ    )HL  LHJwH>wMl$`1Hߺ   H5H Hǅ    ~1ɺ	   LH5H Hǅ    ~HL  L褁HvHv   roIt$`  HIA   A   HnQ sA$    Ml$X  Ml$`1ɺ   HH5"H Hǅ     ~1ɺ   LH5YD Hǅ    }HL  LH vHvIt$`  HA   A   HHHD AsM$   1ɺ   H5G L}Ml$`1Hߺ   H5F Hǅ    ]}LHھ  LJH~uMl$`1Hߺ   H5C Hǅ    }1ɺ   LH5G Hǅ    |HL  LHuHuIt$`LA   A   HF   Gr
   Ml$`LLyLLH߉ELHǅ    t1ɺ   LH5QK Hǅ    >|HL  L+H_tHSt
   HMl$`gyHHHǅ    Ext1ɺ   LH5 O Hǅ    {HL  L~HsHs
   HMl$`xHHHǅ    Es1ɺ   LH5D Hǅ    0{HL  L~HQsHEs
   HMl$`YxHHHǅ    Ejs1ɺ   LH5HA Hǅ    zHL  L}HrHrIt$`HA   A   HQA   oHjLjMl$`1Hߺ   H5aD Hǅ    #z1ɺ   LH5?C Hǅ    zHL  L|H#rHrMl$`1Hߺ   H5W@ Hǅ    y1ɺ   LH5C Hǅ    yHL  L}|HqHqIt$`LA   A   HoC   nHcLcDMD$`HHiMbLHIiMbLxIH&I%H%)EADA)A)ʺ
   DpD6vHHHǅ    EGq1ɺ   LH5G Hǅ    xHL  Hxo{HpHpMD$`IiMbDL
   LH&L)DuLHHǅ    ELp1ɺ   LH5=K Hǅ    wHL  HzHoHoMl$`DpHD)ډֺ
   tHHHǅ    Eo1ɺ   LH5@ Hǅ    =wHL  L*zH^oHRo
   DHMl$`D)щZtHHHǅ    Eko1ɺ   LH5I= Hǅ    vHL  LyHnHnIt$`HA   A   HR=   kHfLfHfHrnHHtHPHEdH+%(     He[A\A]A^A_]fD  1ɺ   LH5? L0uHEHQ HLBƉNzHHcPHLPHctH  HcEL<    fAIH H\  1fADHH    H|mH HEdH+%(     HHH@He[A\A]A^A_]D  L H5*OHHǅ     L cLMl$`MAf   HH5 HPxMl$`n    fHA.   1A      1H*YM Hǅ    jj j eLH M3AGD@DDdDHEt  HH1lL)lM|$`1Hߺ   H50= Hǅ    sLHھ  LvHkfH1A.      1H*Y*L Hǅ    A   jj j dLH MAGD@DDcDHEX  HHMkLEkM|$`1Hߺ   H5~9 Hǅ    rLHھ  LuH k HxHctH H  HA    fDHxHcEH H  H    1f0AHfxf   H& H=u* gHH     Hǅ    Ml$`H@ HHxaHxHHLHxkaHxH>@ HxIcGH H   E1m m DAfDTzf.     HxIcGH H   E1m m DAfD\^fHHpLxH`HpLxHHfLHpLxH`HpLxHHFIwHxDHX`HxDHHIwHxDH`HxDHH[cHeH頎H锎H!H|H韎H鰎HَHڎHHH
HHHHH靍HHH鼍HH雍H雍H郍HHHԍH0HGH;H/H#HHHێff.      UHAWAVL AULpATfInILSH0Hh  DdH%(   HE1HEHHH HM7 fHnH`HHfHnHPfHnH@ fHnH0)fHnflH)fHnflHfl))))Hǅ     Oc1ɺ   HH5k6 M|$`Hǅ    YmH(1ɺ   H5E6 HHǅ(    H*mHپ  LHpH(GeH;efH1A.      1H*YE Hǅ    A   jj j U^LH M_AGD@DD:]DHEg  H H dLdM|$`1Hߺ   H55 Hǅ    6lLHھ  L#oHWdfH1A.      1H*YD Hǅ    A   jj j q]LH M^AGD@DDV\DHE  H H cLcM|$`1Hߺ   H51 Hǅ    RkLHھ  L?nHsc
   H h
   HErh
   HtUh
   H$8hfoHfofofo)0foH)`)@fo)p)P)y. H H(H bM|$`1Hߺ   H5H3 Hǅ    jLHھ  LmH:bMt$`1Hߺ   H53 Hǅ    i1ɺ   LH52 Hǅp    iHL  LlHpaHaMt$`1Hߺ   H52 Hǅ    bi1ɺ	   LH52 Hǅp    AiHL  L.lHpbaHVaHMt$`1A.      1HA A   Hǅ    jj j wZHH H1ɺ   HHpH52 Hǅ    hLHھ  LkH`Hp`Mt$`1Hߺ   H53 Hǅ    Jh1ɺ   LH51 Hǅp    )hHL  LkHpJ`H>`Mt$`1Hߺ   H5[1 Hǅ    gHھ  LHF
 jH_Mt$`1Hߺ$   H5 Hǅ    g1ɺ	   LH50 Hǅp    ngHL  L[jHp_H_Mt$`1Hߺ   H50 Hǅ    g1ɺ   LH50 Hǅp    fHL  LiHp_H_Mt$`1Hߺ0   H5 Hǅ    f1ɺ   LH50 Hǅp    fHL  LwiHp^H^Mt$`1Hߺ9   H5i Hǅ    9f1ɺ
   LH5/ Hǅp    fHL  LiHp9^H-^Mt$`1Hߺ   H5/ Hǅ    e1ɺ	   LH5/ Hǅp    eHL  LhHp]H]   aVIt$`  HHA   A   H]8 ZI\$XH x]HEdH+%(      He[A\A]A^A_]fD  HxIcGH HuO1m m DAftq     HxIcGH Hu_1m m DAfD%     IwHpD|H"THpD|HHvD  IwHpD|HSHpD|HHf WH~H顄HZH鉄鰄HtHhH\H!HH8HH IgHpH遄fU1ɺ   H5- HAWIAVAUATSH]H   HLg`HdH%(   HE1HE    cHE1ɺ   IH51, HHE    H(bHL  LeH}[H}[HpIw`A   HA   H	)   H6XI   M   H I9u,      H5<HPIL9   M,$חHMtIE LHHExuLmH5^<HHE    >PL8MtIE H(LPLmH5W, H1ɺ   IE Lp(HE    aHLAH}AYH}HtHPL8E   L(I   1H5+ LLh(HE    gaLLHAHEHU@  E1wD*H5q;HYOH}`YH=  M4$  Mt+IH LHHExtmH5&;HOL8MmILIPL9 dH8QHEdH+%(     H   [A\A]A^A_] L}H5:HHE    NM~H@LHHIPL@M  fE  HHx`(ZHLSH8LhHhRLLH
   I~`bHh   LH'* L bMn`1ɺ   HH5( HE    _Hھ  LH }bH}W1ɺ
   HH5) Mn`HE    R_H(1ɺ   H5% HE    0_Hپ  LH(bH}PWH}GWIv`HA   A   HO%   T   	dIv`H8HIHMMuAEHLbHLtXA.i  HOHhVH@HtHPILPwD  fD*fD  IILHLHExHEH5Q8HHE    H*LH 
  HHhH HHHP(LhM~IE LPHhLPHtHPIE LPIE   H(LP HEHo xtQH     QI1HEH    H=- Q IE LPLuH  MtIH LHHExCHEH57HHE    HJH   HH(HXH56JhHIHLHHEx}HEH56HHE    HsJH 4  HH HH`P(LhM ILPHhLuHtHPILPufIE LP ILPHHPHHPIE LPHHP  W    ƅ     LPHHPH    H=E PH    H=( ON|H|IHf~Hv~HW~I?H|HH8HH_~HH8H|H|H~H~IH8HHH8H7|Y~#I|H{UHAWIAVAUATISHHHh  H   dH%(   HE1hQLIw HH(HHHTHLII?ILHǅ    OH=\  ID$p  H  HH> HHHx=  H563HGHǅ    Hǅ         H@
   LHHPHEĉωOII  HLP1ɺ   HH5! Hǅ    ZXLHھ  LG[H{PH
   LPHEĉωHI+  HL0P1ɺ   HH5n Hǅ    WLHھ  LZHOKD 
   HH4LH{O
   LEKH4H_OHcUĉ4HHLH HHIƅ  HLkO1ɺ   HH59  Hǅ    
WLHھ  LYHL0$O1ɺ   HH5^! Hǅ    V1ɺ   LH5 Hǅ0    VHL  LYH0NHNA$f   tm1ɺ   H5g HHǅ    KV1ɺ   LH5H Hǅ0    *VHL  LYH0KNH?N1ɺ   H5d HHǅ    UHھ  LHL
 XHM1ɺ   HH5- Hǅ    U1ɺ   LH5# Hǅ0    yUHL  LfXH0MHMH   1Hǅ    - A.   1jA   Hj j FHH HU|1ɺ   HH0H5> Hǅ    TLHھ  LWHLH0L1ɺ   HH5  Hǅ    T1ɺ   LH5 Hǅ0    kTHL  LXWH0LHL1ɺ   HH5 Hǅ    T1ɺ	   LH5 Hǅ0    SHL  LVH0LLHL  LLA   A   H& IILfH1HLHǅ     Hǅ    )] LLL_L 1H5KHYQHHHUHHHC1HJHHH!NHHHBLLH; LHǅ    LHj MA   j HHHHi HXZJH= LK LHI9tD     LcMtL_OX   LbBH;HtHPHI9uHHtH HH)-BLBHHtHPH'JHEdH+%(     He[A\A]A^A_]D  HH5+HHǅ    H?HHHA$g   HH5
 HPxf     1H5a     ffATFHHuHc4I~H HS  HcEL,    fAu I}H H   AN1fAL    HxHcEH H   E1m m AHfDLf.     HxHcEH H   E1m m AHfDTfH1    H= H!EHH!Hǅ    MHLpxH?LpxHH1@ HHxHf?HxH LHxH:?HxHH@ HLpxH ?LpxHH?BHuI6vI[vI^vI&vH%vKvHuHuHuHuHzuHnuHvHVuHVuHJuIvf.     UHAWAVAUAATISH]HH   H
   dH%(   HE1KDpED>H0Ei  Mt$`H`1ɺ   H5 HHǅ`    MHھ  LH0PH`EH   1Hǅ`    [& A.   1jA   Hj j ?L`H MuIcFL| 	D
>1H5 H8ffLPHHuIcVH  @, - HHH)   1HfH8H5 DzM|$`	   fH1Hǅ`    LHھ  LH8OH`L@DIt$`LA   A   H   ,BID$`1ɺ   HH5 Hǅ`    H_LHHH  DOH`xDIt$`HA   A   H   AI|$`H.fD.Hp   H{<Ls<H8DLDH0DHEdH+%(      He[A\A]A^A_]ÐI1H @ ffADWHHuHcEI2H H   1EwfAt2LD  LHHLHIvLH:LIc~J H? , - HHHtIHHH:HH@ HHa:H_D  1=IlrHrHrHrHOrH;rff.     U1ɺ   H5 HAVAULmATISH]H0Lw`LdH%(   HE1HE    J1ɺ   HH5J HE    ILHھ  LLH}BH}BIt$`LA   A   H   I?-   H1H5P HE    IHھ  L(   H5W H1eIHھ
  LT   H5a H1?IHھ'  LY   H5 H1IHھ'  L  H5 H1HHھ'  Ls5  H5o H1HHھ'  LM   H5 H1HHھ%  L'   H53 H1HHھ"   L,   H5 H1[HHھ   L   H5 H15HHھl  LH}\@L8HEdH+%(   uH0[A\A]A^]:H3pHOpf.     UHAWIAVIAULmATISHLHxdH%(   HE1HE    \=A  E11LLHJH}?H
 LHHX  HH  fHnfHnHpHxflfHnH`ǃx      C fHnfHnHpflHx  Hǃ      C0fHnH  flH  Hǃ      C@<H{pHPLLH9L51# LM~9LLu9   L?H} EA  LeMu  D  M$$M  E;D$uIT$zuL9t(H      LDlG9DluLT>LL>ID$xw  1f  LL5K" M~">L8LLu8	   L!?H} EA  LeMu:  fM$$M+  E;D$uIT$z	uL9t(H	   	   LDl8DluL=L=ID$xU     g  LL5`! M~W=L8LLu8
   LV>H} EAu  LeMu      M$$M  E;D$uIT$z
uL9t(H
   
   LDl7DluL<L<L<ID$xM  ƃh   f     ƃj   L5  LM~/7LLu#7   Lv=H} EA  LeMuw      M$$Mc  E;D$uIT$zuL9t(H      LDl6DluL;L;ID$x     i  LL5 M~;L_6LLuS6   L<H} EA  LeMu      M$$M{  E;D$uIT$zuL9t(H      LDl5DluL;L;ID$x  1k  L:  L   t>0   Ig>Hƹ   LLt?!   L   C>    I6>Hƹ
   LLC?  L   >
  I>Hƹ   LL?
  L   =
  I=Hƹ   LL>LiDH}HEHuH9t	H1HEdH+%(   8  Hx[A\A]A^A_]D  L9L9 L9L9 L9L9 L9L9> L}Ll9Ld9L\9LxHǅx    L6   L1H5 HE    @H}1LF?H}h  9Hx8f   bL5 LM~3LLu3   L9H} EA  LeMu  M$$M  E;D$uIT$zuL9t(H      LDl?3DluLL8LD8ID$x     j  L"8D  Hc1L}LHHuHL: HaL L7L7MID$xID$ 8 {fD  Hc1L}LHHuHL
 HLL ~7Lv7Ln7M	Hc1H}HHuHHL
 HaL L.7L&7M(     Hc1L}LHHuHL2
 HAL L6L6MXD     Hc1H}HHuHHL	 HL L6L6M     ID$ 8 mID$ 8  ID$ 8 h  @ ID$ 8 h     ID$ 8 L6L 6 Hc1H}HHuHHL	 HtL L5L5Mp_0IBfHafIeIeff.      UHAWAVAUATSH   dH%(   HE1    t(HEdH+%(   F  HĈ   [A\A]A^A_] LmH_`L}1ɺ   H5| ILHE    <1ɺ   LH5 HE    LX<LL  Hs?H}4H}4It$`LA   A   H   1M$   I$   L)H  1HII$`   HhI$H  H`  @ M$X  M  HxLp   @    7HMt)I$LLHEx  H5L)E1   Let7HH  HHLHEx  H5Lp)MMt
I$LPuM?M  I_M&L9KHxLpH`Ln HE    H0L+)HEM6   HE6HMt(ILLHExe  H5L(E1I|$`Lu4HLj.H}IHtHPIH}PtG/  2HhH9   M$   HII$`   4I1H`HI$P  HL HtH8 f     H5LLeHE    '>H]H5LHE    'Ht	HHPI9R@ MCD  HxHhLpH9 HX)If     H5yLLuHE    U'I|$`L  H
 <I|$`HML  HO
 HE;H}1It$`LA   A   H!   X.L@)H}X+HaHIaHIaHaHbHbH	b     UHAWAVAUATISHH  8L.dH%(   HE1mMt2HIE L LLH xt=H5L%1HEdH+%(     He؉[A\A]A^A_]     L0H5LHǅ0    %LHMtH3HPHPE$   E  HXHHH0託8   HP   H wH,)tHH=O
  L36  Mt2IH7
 LLH x.  H5L$I$   H H  I$   fH) H@L 	   1H5: LH IE H@(Hǅ     H8I6LLLH8H5@
 H  HH\H L>PH(LH9H5,L$H .HcHcH HHcHHcHHXZr0HY            IE    H55  1Lp(H Hǅ     HH0A5H0LLAH E1x   H5VL>#H B-HXHHH0Y8 u8E1HX	-HP,IE LPfD  HXG	t)uH   H5 #uf     H	   H5S #uHXG H(8 AD  H`Hǅ`    HH )A$    t<HX1ɋP
  ~  /    	  @ ID$`1ɺ   LH5 Hǅ     H83H0LH8  6H +It$`  HA   A   HHH (ID$`H=\
  HHpQ  Ht2HHC
 HLH x  H5;L#!Hǅ0    H0Hǅp    HhHpHH((IE    1H5 LH@(Hǅ     H82LLLH8H x  H5L H *HpDXEtAIt$`A   LA   H<   'H0H(HP8L"HxHǅx    HH('IE    1H5 LH@(Hǅ     H81LLLH8H x  H5LH )HxDPEtAIt$`A   LA   Hn   &H0H(HP8L!H3   H8-H8HHt(HLH x  H5L1I|$`H *HL$H IHtH8HPL8I L8DHEtTID$`1ɺ   LH5 Hǅ     H(N0H8LH(  33H g(I$  HHH8 HHtH8HR H@HHHǅ    HH%HLHHIE PHH5 L1HH(LB(   Hǅ     L8n/H(L8LAH 8'8tnIE    L1H5[ H@(Hǅ     H8/LLLH8H x  LH5 	H 'It$`HA   A   H   HH(<$ID$`1ɺ   LH5 Hǅ     H8o.1ɺ   LH5 Hǅ     N.LL  H871H k&H _&ID$`1L   H5 Hǅ     H8-1ɺ   LH5 Hǅ     -LL  H80H %H %ID$`1L   H5i Hǅ     H8u-1ɺ   LH5M Hǅ     T-LL  H8=0H q%H e%ID$`
   HHEHH8k*H8LHǅ     E|%1ɺ   LH5 Hǅ     ,LL  H/H $H $IL$`
   H8H)H8LHǅ     E$1ɺ   LH5 Hǅ     ),LL  H/H F$H :$IL$`
   H8HG)H8LHǅ     EX$1ɺ   LH5 Hǅ     +LL  H.H #H #IL$`
   H8H(H8LHǅ     E#1ɺ   LH5 Hǅ     +LL  H-H "#H #It$`LA   A   H   Q L9HP  HLHH8HƉ(Hǅ     (HE1Lfo
 H AL      HH8Hp)0)@)P)`j Z*p_AX      M|$`1ɺ
   LH5 Hǅ     )L  LH,H !It$`LA   A   H   "I|$pHHL SAH  YL^H y!H(HHtHPHO!HxC!Hp7!H0HtHPHiH`!?     HR    H=
 x L0H5LHǅ0    LMID$`1ɺ   LH5W Hǅ     H(B(H 1ɺ   H5w HHǅ     H (H LH(  *H , H   H3   H(#H(HHt(HLH x,  H5L1I|$`H !HLgH IHtH(HPL(IID$`L(JtT1ɺ   LH H5S Hǅ     'H(LH   )H /ID$`A     HLA   H+ gH8LHH(  L8)ILP8@ H0H5 LHǅ0    H(H(@    H H==
 H51
 @ I|$pHHL SAH 赦 XZH H5P
 [ID$`1L   H5 Hǅ     H8%1ɺ
   LH5{ Hǅ     }%LL  H8f(H H HHǅ    HH(IE 
   1H5 LH@(Hǅ     H8$LLLH8H H(@    H5L8H 8f  f  f  I|$`H(L  H	
 H W'H HrH0H5lLHǅ0    H0B%H0H5?LHǅ0    H8H8H    H=
 H8H8Hx   H5C 88HXPD  HxH5 88	HXPOHxH5 UHXP"LH5G2H 6H(1ɺ   H5 "YfH(H(H0HMH(H(H0-H(1ɺ   H5 ~"H(1ɺ   H5t _"H(HH0UHxH5t _ZHKHPLHHH(fLHkLH4LH]LHKHKHKHKH{KH&LH8LHLH=LHKH6LH;LHXLHYLHJH^LHlLHqLHLHLH.LHLHLHLHLHtLHhLH\LH{KHaLHbLHKHWKHzKff.      UHAWAVL}IAUATSHXH}H>UdH%(   HE1HHE    P(E   EE 1LeL-EV     H}    UH}LQMEȈMH}HE    HtHP9]   I6LHP0H5
 Ht@HHMLLfAUHUL9"ZLYLd?D     HD H=5
 H5)
     E @ H}HtHPHEdH+%(   uEHe[A\A]A^A_]HJfD  UHAWAVAUIATLhSHLH   HPHH8LHD\dH%(   HE1    Ls`tHhDPE  H=4
  Mvp7  Mt3ILeH
 LLHEx1  H5LL}Hs`A   LA   H   BH   Ls  Ht+H   L  H@HH@LH  \ v  HPL`DHxEc  Lk`Le1ɺ   H5J LHE    L  LHxH}Lm)    Ls`u      1ɺ   LHE    H5< 1ɺ   LH5 HE    LL  LH}H}Hs`LA   A   H   HH   HLHx`LHhLHEdH+%(     He؉[A\A]A^A_]     HH1H \ +  Hǅ0    LeHPLhDIHpE  Lk`1ɺ   LH5 HE    gL  LHpPH}Lm   Ls`t\ t       1ɺ
   LHE    H5 1ɺ   LH5; HE    LL  LH}H}Hs`LA   A   H   ;LxfLspHǅx    LL()E>H@j A   j L(LLHQ( ^_HxyL
HpeL0ML
   L 
 LHv
   LLs`H=
  MvpH    H=
 fD  LuH5LHE    LuML}HE    L<1ɀ\ ty   H5 LMHC`1ɺ   LH5 HE    H@$LL  H@H}DH};ILP'D     H5M LfHP-   @b o fHHHH6H  D`HP1fA_fLeLs`1ɺ   H5 LLmHE    f1ɺ   LH5 HE    HLL  L5H}lH}c   		Hs`A   HA   Ha   H0=f     1ɺ   LHE    H5 1ɺ
   LH5 HE    LL  LH}H}Ls`fD  HPA-   @b g HHfDHH6H   DhHPE1fDAfD  H8HHHxbf.     1ɺ   LHE    H5 1ɺ
   LH5 HE    LL  LH}H}Ls`vfD  H8HHHp,]	HBHBHCH CHBHBHCHBHCH
CH6BH8CHBH7CHOBHBff.     UHAWAAVIAUATSH`H   H    HXdH%(   HE1    Hǅ`         H5 H.HpIv`A   A   Hٺ  HH@0A      HA9  ƅO IcHD  HXL II<$    I~`HLLmMf`1ɺ   H5 LHPHE    wL  LHP`H}HXHHL!LeMtI$LPHXHHHPA   MLHrHuOE@OMt
I$LPAHD9HH@RH`HEdH+%(     OHĘ   [A\A]A^A_]f.        H5 Hl9    Lm1ɺ   Mf`H LHE    H7HE1ɺ   H5R HHE    HPL  LHPH}.H}%Mf`1ɺ   HLHE    L  LH=
 H}
1ɺ   LH5 I^`HE    LP1ɺ   H5 HE    L`LL  HMH}
H}{
Iv`LA   A   H   LPI^`1ɺ   LH5 LhHE    1ɺ   LH5 Hǅh    LL  HHh	H}	I^`1ɺ
   H5 LHE    |1ɺ   LH5 Hǅh    [LL  HHHh|	H}s	I^`1ɺ   H5 LHE    1ɺ
   LH5 Hǅh    LL  HHh	H}	Iv`LA   A   H   DL,I^`1ɺ   H57 LHE    z1ɺ   LH5 Hǅh    YLL  HFHhzH}qI^`1ɺ   H5 LHE    1ɺ   LH5H Hǅh    LL  HHhH}I^`1ɺ   H5 LHE    1ɺ
   LH5 Hǅh    LL  HpHhH}Iv`LA   A   H   LHPHA91ƅO :H<H<Hi<H<Hf<H=HB<H~<H<H<H<H<H<H<f.     UHAWAVAUATSHH  HLo`dH%(   HE1         tgLLM&HLIHrHHEdH+%(   
  H  L   HE1[A\A]A^A_]    Lu1L}
   H5G LHE    L(c1ɺ   LH HE    HL H4LL  L!H}L%u QH}HHs`LHPA   A     HLvHpHs`A   HHA   L  HLc`1ɺ   LH5k HE    1ɺ   LH5 HE    hLL  LUH}H}1ɺ   LH5 Lc`HE    !1ɺ   LHHE    LL  LH}'H}H   DhADwH@IE]  L(Lc`1ɺ	   H5 HE    LL  LH@tH}L Hs`A   HA     L Lc`1ɺ
   LH5 HE    L  LH
 H}LH71ɺ   LH5W Lc`HE    
1ɺ   LHHǅH    
LL  LHHH}Hs`  HA   A   L LLH@HHLk`    ,L}1Lu
   H5 LHE    L(	1ɺ   LH/ HE    HH	LL  LL H}H}H Hs`HPA   A   H  HH	L   M  I$LLh)DpLH H   H< THpH H5 H HH	H =	L5HDLAHp 9  L   HcHǅ     HH  fD  H(1ɺ	   H5G L{`HE    RLL(  LL8H}o Hs`  HA   A   LIU HE1HL8HrHHMJLbHH H JH@H2I$LPH H H   HI9  MtI$ LP0HHHL L8MtI$LP    Lk`tsL(1ɺ   H5 HE    LL 1ɺ
   H5 HE    LLL  L	H}H}Lk`HpH  A   A   LHHHH{`LL(g HL<IH DpA
DH@IE  L(Ls`1ɺ   H57 HE    LL  LH@H}Hs`  HH A   A   RLs`1ɺ   LH5 HE    LL  LL(vH}LH1ɺ   L{`H(H5 HE    @1ɺ   LHHǅH    L  LH(HH<H}3H   HωHHIǅI1    H5 ffATGHHuH   IHcFH H   H)   fAO1fHD  9fD  HHEdH+%(   A  H  [A\A]A^A_]    HPH Hp
fHHfJH9uIu IHcFH Huf1EwfAtH   fD  HgHP \@ HHHHD  HHH1H fD  ffATDHHuH   IL$HcBL4 HuJ1)   E1f8El$fD@HHrHL}HHY1Hb1H1H1H1HJ1H1HL81H0H1H1H=1H1H1H?1H0HL8P1H1HL8%1H1H1H1HL80H!1fD  UHAWAVAUATSHHHHudH%(   HEHH    1IHwIHN<M   M7IN,     I6H   HN1MHHsI9uoII9uHEIvH8GhtI? tMD  HEdH+%(   Z  HH[A\A]A^A_]fD  LgM.  1IHwI    H}HSHsH{ IHC(   HE Hք  H3MfJHH  H IHL0HCVfD     >HMt,ILuLLHEx   H5RL:E1   L}HM   IE LuLLHEx   H5LMAMt	ILPEM$$M   HEMl$L8M98 H5LL}HE    Q     LmH5LHE    eMt
IE LPM9Aaf.     MAK@ HE1L LHsH{ I2|D  HUHL1HsI@ HCILsIHtH@1HsL4HCH3vII.HI.H.ff.     UHAWAVAUATSH  H   H+   dH%(   HE1Hu#HEdH+%(   6.  He[A\A]A^A_]ÐH0Hw`IA   HA   H.   L0HTMo`1ɺ   Hb	 LH5 Hǅ0    HL  LHHH` H0HHE
   HIMo`LLHǅ0    ELL  LHz	 HHHH0LAw|
   Mg`L#LLHǅ0    E8L  LLH	 HLpHH0Mg`A$k   tZ1ɺ   H5b LHǅ0    (LL  H	 LHH;H0/I   H>$  H   H   H   XAA      HHǅ    bfA]$  %  fE$$  fAu(H1ɺ   H5 VǅX   @ HGt9I`HL  H	 H0H0HH<HPIw`A   A   H=   HHjHC	 HH	 HHA      *  ~5
 CHǅ    HHhHPHǅ    Hǅp    PHǅ    )0V@ H5iLQHHH)Hxf     HHHAH9  HHI   H=
  HAL+`  MtIE Hа
 LLH0x_L@H5LHǅ@    LM=HHHHPHD
   D`EDHIEm  Mg`1ɺ   LH5% Hǅ0    L  LHH0Mg`LHHHHd
   LMg`LHHlHH*
   LeHHA   H)ш_Hxt;H-HHt+HHLH0x   H5HL0Iw`A   LA   HE   |LdHHHtHPHHP@ fo8	 Hx&@fo8	 @HcUĸ_   fAE$H}  E1EefE\&N Hy    H=m
  L@H5jLHǅ@    GL MHHǅ    HIE    1H5= L`(H(Hǅ(    HHHpHLHHAHHx~
 ~ҍ
 HhHH`Hphx`)@)  HH5jUH(YfofLHǅ   L)Hǅ    Hǅ    ǅ  ?Hǅ    Hc
 ffo@fo0HHpHH())0hHǅ   Hǅ    Hǅ     ǅ  ?Hǅ    Hǅ    ǅ     Hǅ@   HǅH    HǅP    ǅX  ?Hǅ`    HՇ
 1HH0IE 
   H5@ Hǅ    HX(Hǅ(    HHL*HH0HHH LLtHQHpHxHH5jH(nHAYAZH   HH	   1H5t H@(Hǅ(    HHHHHH5
 H  HHHpLPHxLH HH5H(_AXt [  IE H   1H5Z HX(Hǅ(    &HHLHpx  HH54H(#IE H   1H5 HX(Hǅ(    HHLHpx  HH5H(IE H   1H5 HX(Hǅ(    FHHLHpx
  HH5T?H(CIE H   1H5 HX(Hǅ(    HHLHpxB  HH5H(IE H   1H5 HX(Hǅ(    fHHLHpxN  HH5t_H(cHH  LIE    1H5{ LHX(Hǅ(    LLLLHpx  LH5H(LIE 
   1H5 LHX(Hǅ(    sHLLHpx  HH5pH(tHpDPEz  HpHH)HHH(  1H@HH f     H@HCH9<  HHLLH<HPtʿ   @:foB	 Hp@fo?	 @   @$_   @Hc@HHH<HHb
 HHH
   EątBHpHBƉHpLceHcPHLPM  E1fF!XI`H  HO
 HpLIE    1H5  LHX(Hǅ(    vLLLLHpx  LH5tH(xHLHHIE PHH H5 1HHHLb(   Hǅ     HHAԄ
  H E1HH  HPIE HPE   HLHH5 H1HH@LB(   Hǅ     LLH@LHAЄP  H dHH(  HPIE HLPHH5` H1HHLb(   Hǅ     HHAԄ  H HHtHPHHtHPHpH܊
 H0LHH
 HH0Mt/    LM$$H{HtHP   H=MuH@H81H    +H8HPHǅP    HǅH    H@H9t	HHLHMt0     LM$$H{HtHP   HMuHH1H    HHhHǅ     Hǅ    HH9t	HBHH|
 HHHHHHt.fD  IHI|$HtHP   LHuHH1H    HH`Hǅ    Hǅ    HH9t	HHIE LPO    H2HLH5oLWH([I`HLH*   HpHp-fZ9     HH5H(H HHtHPE   HMg`A.   1HA   1Hǅp       jj j HpH HHH  LH(H HpHp8H(,IE  Mg`H	 1L   H5 HHǅ0    L  LHH0HMg`1ɺ   H5D LHǅ0    YL  LH|
 BH0vMg`1ɺ   H5 LHǅ0    L  LH{
 H0L%Ӳ 'Mo`1ɺ   LLHǅ0    L  LHd{
 H0Mo`1ɺ   LLHǅ0    L  LH{
 kH0Mg`1ɺ   H5 LHǅ0    :L  LHz
 #H0WIw`LA   A   H\   L{SA    tsHǅx    Hǅ    Hǅp    Hǅ    D  IG`h     HH9pL  H tHxHH=	 H=	 HHA    tHpHH)HaDh1zMg`1ɺ   LH5 Hǅ0    L  LHH0HIw`H<HPHHCL9HH
   D`EDHHERfo
	 A_   Hx&fD@$@fo	 @HcUHV  1Daft&fD  LIE    1H5` LHX(Hǅ(    HLLHpHH5@H(H HHtHPLIE    1H5 LHX(Hǅ(    ALLLLHpH5a@  L:H(>I_`1ɺ   H5 LHǅp    L  HHWw
 HpIE H   1H53 L`(Hǅ(    HHLAHpHx@  '
    E1u
AHH5fQH(UH IHHMN@ HHHjHafD  HHHH;HHz     HxHH5H(LI_`1ɺ   H5- Hǅp    L3L  HHu
 HpP HxHH53H(HI_`1ɺ   H5 Hǅp    H  HHHu
 Hpfk   HHpH9M  D  H;LHPHH9puHLpf     H;HtHP(HI9u@ H$H((O IE H   1H5j H@(Hǅ(    HHHLHHpHx@
  Hι HcH>!fA	H1ɺ   H5 7ǅX           H H=
 H5
 ?@ HI_`1ɺ   H5 Hǅp    H  HHH H(H(Hp6f     C   @fo%	 Hp@fo"	 @   @$_   @Ha}
 H   HIHF}
 oXH8HI|$I$H@ID$    ID$HPID$    ID$ ID$8    A|$(HpH}
 I$I|$@Hq
 HI$HpH9	  L HHpHxHH5H(LIE    1H5˦ LHX(Hǅ(    HLLHpHx@  +    u f     HH5H(HpHH)HHH Y
  1ۉH@HH@ HCH9@  HHLHH<HPtɿ   @fo	 Hp@fo	 @   @$_   @Hc@HHH<HHz
 HH	H
   EątBHpHBƉHpLceHcPHLPM  E1fF!XI`H  Ho
 1Hpe   @fo	 Hp@fo	 @   @$_   @Hy
 H   HIHy
 oHHI|$I$HID$    ID$H ID$    ID$ ID$8    A|$(KHn
 HI$ AD$@HpH91  L HHp? HxHH5C+H(/XHI_`1ɺ   H5= Hǅp    H  HHH	 H(H(Hph LHxH5LxH(|I_`1ɺ   LH5 Hǅp    L  HHHv	 H(H(HpD  LHxH5LH(I_`1ɺ   LH5f Hǅp    oL  HHH	 H(JH(~HprD  E1HpHH)H HHS  1LHfHHCH9  HHLH<HPtѿ   @AfoI	 Hp@foF	 @   @$_   @Hc@HHH<HHiv
 HHH
   EątAHpHBƉHpLceHcPHLPMO  1fB!XI`H  H_k
  HHǅ    UǅX   .3HxH(H0 H1ɺ   H5j 9ǅX    H1ɺ   H5Y ǅX    3 %fH*f*9f*f*f*Hǅ    E19|HMHLHHpHMHLHHp+C   @fo	 Hp@fo	 @   @$_   @Hs
 H   HIHs
 oHHI|$I$HID$    ID$HID$    ID$ ID$8    A|$(5HHs
 I$I|$@)Hg
 HI$HpH9  L HHpHxLH0rHH9(  HH9p  H(HH9  H  HE111Hǅ    L HHp HHHHJH9uHpHH)HDHpHHtHxL8LLxHHH9 !  HH9p  H H	H9  HH  HE111Hǅ    L HHp HHHHJH9uHpHH)HDHpHHtHxLXLLxHA   fo˾	 ǅ@    Hp@fo	 @   @$_   @   }fo	 ǅ@    Hp@fox	 @   @$_   @QHMHLHHpHH9HGH    H<HHIHHHHL$H9pHBHpH HsHH(H<  HH9HGH    HHHIHHHHL$H9pHBHpDHH9  HH9p  HHH9_  H   H 11Hǅ    L E1HHpHHHHSH9uHH)IHHtHxHHHCHxHpL?H   :foB	 ǅ@    Hp@fo5	 @   @$_   @HHrdHH9HGHHH	HHHHHH L$IH9pHHHEdH+%(   uH=o HEdH+%(   uH=T HEdH+%(   uH=9 IIIW I] I Iw H H H I Hc HHIIHI/H!HH9HHHHII%HI=I
 IIIH H IIHHIHHH0H  HIhI\H IHHnIHIHHIIIfD  UHAWAVAUIATL`SLHH  HH2dH%(   HE1HPH`   H9 wHZH`AkA   H=i
  Hp  Ht.HHQ
 HLH`xt<H5%LE1HEdH+%(     HeD[A\A]A^A_]D  HpH5LHǅp    迹H`HtHLLQ  AHHP HIHoH   LHHIA    tL  HE1u~HHHWHOH      H93  Hlq
 8   GPW\    H2    H=݁
 Xs HD  HߺH7HtHH=
  L;  Mt2IHj
 LLH`x  H5RL:H~HHL@0I   HA  HLHhHtHX   HչH`HtHPA        H3LHPH`'  Xf     H HHJIfL)   HP1HtH+HJHrHHHP1HtH+PHBHJHHȿ   HHHfLIHƅ )蓸HHLL*LAGHHjHHtouHPH}L@fo1L(H L8LHHL^.I   H_  HLHhHtHX   HH`HtHPHfHHHG    HPH9  HPHơH9  PD  H'   H5 {H`A|E"L;HMt+ILLH`x   H5@L(E1I   H5 1LHǅ    L@(H HHLHǅ     HLLLAH5`~
 H_  HHLH`HLLaARHhL|LLaH eH Y^  HL&HL7HhHtDHWHOH      H9  Hil
 8   GPW  LHHtHPM{ILPmLpH5LHǅp    Lp膳IE`k  M Ј_  L;HMt+ILLH`x  H5AL)HpHPH5 LLpHǅp    HHH!H~    H=|
 ZDILPHHHKHSH      H9  Hj
 8 ?  CPSRH׳Ef   Hِ H={
 ظH5{
 }LpH5.LHǅp    LMA      H; n  I}`躽HHL;   蒿HMt+ILLH`x  H5L菱E1I}`L`\HL1H`IHtHPI@   IH  HHH聛  ILHHǅ`    H0聶H`HHUH`HH&  H0Hǹ   H H HHyIL   Hǅh    HPHtH+HJHrHIHhHǅ`    HPHtH+PHHRHHHIH`H聲HHҼHxE1ƅ Hu<      u   x   _IL9x  HLaIǋ@=   t uƅ IGP  uHx      HZ uD  L0LAGHLHHHHtouHPHhH1HEH`HE譸HH}͵H衰HLH&HI  L  HHtHP脽HPX   胰HHtHPLAGHH!HHtouHPL MHh1LH(H`H0ŷH LL辯HHL&I  H  HL
LhMtL螼X   L衯H`HtHPHsLMZILPL   ;I   H5 1L@(H Hǅ     HHLHLLLAH`x   LH5H H5ܘLLpHǅp    責!Hx      Hc IGPHHeHG    HPH9   HPHuH9uiPLj輭YHhH5(L H iLHHHaH1HHSHPH9u5HPHHH9uPHp EQfHHH]HHQHHHHHH H!HHHHHHHHtHHHH     UHAWIAVLuAUATSHXH}H:HudH%(   HE1HHE    P(E   E 1LeL- UfD  H}    ةHuH}LMEȈMH}HE    HtHP9]   I7LHP0H5s
 Ht?HHMLLmAUHUL@軾ZLYLcF@    HL H==s
 ȯH51s
     E @ H}HtHPHEdH+%(   uEHe[A\A]A^A_]蚭Hff.      UHAWAVAUATISHH   dH%(   HE1Ht	    uEHp  H5  HUdH+%(   @  Hx  HĈ   L[A\A]A^A_]D  HG`h   tk   tL}   H5r	 HE    LE#   sH@  H  H  H    L@  HE  L  Mu  fMm M  H@  Iu tp
 :  H}L  HEID$LpIL  IL  ILt(ILH}  >f     Mg  H}H<L
 H蔉  IH  HH]H虋  L-p
 HILH]`  HtH}Lo  Hx H]  Mt?MvMt6LmfD  HEA   LHLPAFfETM6MuHL葩HI|$(H豭HYH}PHEdH+%(     HĈ   [A\A]A^A_] 9o
    ID$HE    E1LpH1HH}H  HL  HtL(n
   M"H];   W        H]A   H LH袭H~n
 HHEʪ9E1   赧foݢ	 1Hi e l d HJn
 H5
 @foǢ	 @HH&ffLP.HH	u1@   H+i
 H5n
 fH@H=U  tH}+H}H5I
 6  H7H}H5I
 =  IH]H}H5I
   H5I
 HH}  Hwm
 HHEéHWm
 HHE裩`L-?m
 H}L蓆  HJH}L螈  Hx 3H}L臈  HPH     BƃK  B  HHuډMHEH]A   LH HދP蹫ULm1   E   LHE耳AT$4At$0I<$荧  ffHMHhHHpHpHh1ͭHpw  HU     IѺ   LLxDfHh   HxHp襸HELpHPbH}虬El  l   E   uHx虬DfHhUHxHp4HELpHPH}(EEuHEE   HXuHx˳DfHhUHxHpƷHED@HHHEPEHXL{H}被EEuHELpHPCH}zf  HfH  Jx΃w;f}Hf   HlzȉxvHH   J΃릃uBH]A   H LHGH]A   H LHר&H]A
   H LH趨H]A   Hs LH蕨HHtzzHCEݤE   uE|HHHHHHff.     fD  UHAWAVAUATSH(H}Huh
   HEHXH   Hh
 HE<fD  EIw1I?LMHHU!HtkH8 teHH   H}Hsm  HuH衃  IHEI Dp@DuIGHt f;HtH HuE1LIwHU   gHuLLH     A   HIfDpК  HHjH([A\A]A^A_]D  Hg
 Hѣ   迠fo	 Hi e l d H} H_g
 Hz	@foϛ	 @HH&HH.f2HHfqH9u1@   H=.N  fP@Hg
 Hb
 HtH,SHf.     UHAWAVAUATSH8HUHMHHcRHuHwHHQHuHUH    HEHLeHEEfD  A\$Hp1I?HHIHIHtjH8 tdHEII9   HuH}d  HuH蘁  Hx IuH@A\$Ht    f;XtH HuH1IwIֿ   dHLLIH     AD$A   LfAEȘ  HEII9fHEH HEHH8[A\A]A^A_]HUH
HMHHfHW@HYA
 lff.     HW@HaA
 Lff.     UHAWAVAUATSHx  HHHwPdH%(   HE1HHHq[  HpHHKHHHH   H5L 1ɺ   HH5z LHǅ     LH(
   H5q HH1HHǅ(    L@責   訨HLLHH(H0脟HHLHǅ8    H5LǅX    x8   ޚHHIID$(LH0ȭH81ɺ   H5y HHǅ8    HHJd
 HA  H0HLHH=H8H`語HHHHpǅh    H5LE    蝙H@1ɺ   H5y HHHǅ@    >   ƅ-HLHHPHH莯1H1L诟foPH`HfoHH`fH~H`)P)H9M  H@H}蝝HHH}HE    H5LE    薘HH5胘H5d`
 Hs
  HH0   LYHHH'DLeI0H5@I|$&I<$-I9uH@H8H0HtHPH(H LID$HID$H@HHH H3a
   =a
  L5%a
   HHt+HLLHxg  H5`LH1HHLHHHtHPI$HLPH1HHHL譢H1L輧HH-HH!	  HHLHxt)H5L蚖Hǅ(    1       HH5LHǅ    _H(HtLH
   1H5s Hǅ@    LL`(HǅP    LHLAhHH0H
HPHLLH1H5ځLHPƟL@Y^M   I$	   L1H5s Lh(HǅP    KLLLAH5(_
 H  HHdHHPHL7L苪H54LAHPEXL@Z  MtI$LP@ LHLLHLH     HLnLMtLzX   L}HHtHPHt	HHPH(u#H5A\
 H
  HHR蝢H1HHHtHPHEdH+%(   &  He[A\A]A^A_]ÐH5LHHǅ    ϓf.     H8HL=]
    HH8М H=]
 H1ɺ   H5r Hǅ0       Hǅ8    
f1ɺ%   H HH5a )0Hǅ@    H(Hǅ@    ŤH@H߾   QH1ɺ.   H5a HǅP    茤HP   H81L1   H5a Hǅ    SHL   ߞH(11HLE1E1SH0jLPjj 茕H0LH04H8(H@H8耛   fH0   H     HIHHܛHPЛH@ěH0踛H=9[
 L5:[
 HHD  8pLI$   1H5
q LHX(HǅP    LLLHE1x  H5%}LHPH@1L   H5p HLLh(HǅP    蛢LHLAHH@~  G  ]  1ۃuH5|L}HP聚L@1H   H5.p IE Lp(HǅP    HLLAHH@      u	H5|LHPH@D   H	  HPL}HQHH   HE1E1H  HOD  Eu2HHƉ诹H	   I  EHII9t~HL跥HË@uAăxAu=   t tHPCHL蔟HPHtouHIPHI9u    LLHLHHLH   虀  HHHXHtH*X   H-HPHtHPLH(HHP     1V
   H*V
 H=U
 H0苖H5U
 \    H)m    H=W
 PHW
 @ Hǅ(    1fD  W
 U
 
  HO HxHxH1ɺ!   Hǅ(    Hǅ@    H@1H   H5@c HǅP    H0ў1L%   H5[ Hǅ    谞SLPE1jH1Ҿ   j Hj HH 5H詖HP蝖H@葖H1ɺ	   H5b Hǅ0    ,L[ 1HL޺    Hǅ8    Dv Hx1~8!   Hǅ0   fDH0Hǅ@    8话H@1H   H5a HǅP    H(|1L.   H5cZ Hǅ    [H(E11PLP   HpHjHSj蓞HH ӖHGHP;H@/H8#H0H1ɺ	   H5)a Hǅ0    貜LZ 1HL޺    Hǅ8    芜Du Hx1~8!   Hǅ0   fDH0Hǅ@    85H@1HH5v` HǅP    H(   1L1   H5Y Hǅ    E11Ҿ   HpLPHPjSHjHH HaHՓHPɓH@轓H8豓H0襓H(	@ Q
   HQ
 H=KQ
 H0H5<Q
        HW H=R
 ЏH5R
 HUQ
 H蕎حHH>Q
 i@ HHx`HH葎HCun  x  HCpH`HCxHpH   HxH   HhH(H   1H5Rh HLp(Hǅ@     HHHAHPHX@      E1uL2HH5	tH@H   1HH5g H@(Hǅ@    H腙HHHHHPHX@      1ۃuHHH5isTH@XHHH(  辀  H`Lp(HX0HHPHpHPHxHPHhHP HHrHHHǅP    HH@HA   L   VHHPDpADSHE  HP(   aHIHPH11E1LHP轒LPAFHLіHPHtouHPH耒H@L视H{HH* H@ Hf
   Ds)@)P1H1#Au  Axuoc`)PLHHL*HHPHXL؆Cu%  x   HHHKHH8X   莇HI蓅HH8@HLaH8HtouHPfoPH1A^(HI~ =HHHy  H8L0HHHX   D  Hǅ`    Hǅp    Hǅh    Hǅx    T    fo	 @ Hx@HPHcPH  DsD #f.     1ۃHcf.     E1ZLc2Rf     HC8H`HC@HpHCHHxHCPHh    L2    D2    HX   ݙHHHKHH謘H{~HPHXDHpHHH=J
 HD HxH1ɺ!   H5D HǅP       Hǅ    E1E1   HHPLƊL莍Hr   XHP   H     HHp6HPʋHpH=J
 HJ
 7HI
 HOHHI
 e^1ۃ	?	-H8 AHHLˁH蟍HHN?蕅HZHNHIHIHHHIHHHHHHHHHI'IIHRH7H:HHIaH"     UHAWIAVAUATSHhdH%(   HE1    tPH   H;     H> tH      HUdH+%(   *  He[A\A]A^A_] HX  H`  H)H   DpHEE1HEIfD  IX  ILL+Mt]IE LPI@  M@  HtHPHLL+Mt'IE LLmPHUHLIE LPM9uI   I   H)H	E1HHxHEHEf.     LL+M   LH}LHIE HEx~   H}H5i}HE    E1 L+LmM  IE LPHUHL7IE LPMt	ILPL9xHI   IRfLuH}H5QiHE    4}LuMqHEHE    LHEHIPLmH}1ɺ
   H5@Z IE H@(HE    Hp詎HuHpLH}A͆H}HtHPE   LmMIE H}	   1H5Z H@(HE    Hp:HUH}LHpH5F
 H6  HHMHGhL0hPHULnH}{H}H5 hA|H}ZYEtE  H}H0HPL+LmM*HUHLk9fD  IH}
   1H5X Lh(HE    ZHUH}LAHH0HMH}HqgLZgPHUL.m詐H}H5Ng9{H}@^_f     1f        H\I H=D
 蘁H5D
 @ HLHHHHHHHHfUHAWAVAUATSHH   L   dH%(   HEH   G|LxH+   HGx<oMN
  HIL}LLHEx  H5eLy{x HE       ƃ    Hǅx    11ǅ@    ǅD        D@HߋDu      Ht8    t    	  H   HHAƄ  E1HxHtHPHEdH+%(     HeD[A\A]A^A_]fH   Hǅx    HHP(Hx    ;  L}LxLm   1H5X LIL`(HE    RLLLAHEHU@b	  |  s    L%PdLDL/xH}6Hx   L1H5W H Lp(HE    ʉHxLLAHEHU@f     O    LL@wH}豁     5*b H+b E1HhHp`X   D  HH]cHMLmPHULL6cLi芌YL^H5.ct@H} t9wLueHMt(ILLHEH5bLx
  vH}HtHPAH   HP(A9  H   L}LmDHE    LHP0H5@
 H!   HS H=v@
 }H5j@
 D  LuH5UbLHE    Lx.v{x LutH   H?Hx ƃ    M<f.      vfD       LuH5aHE    ufLu)EMI	   H5,P 1HE    L@(HEHHPLH<HPLLLHAH5.?
 H  HHMHFaL/aPHULgH}zH5#aLAuH}XZEuILPf.     UEffpf.=j_ **z  f(]p_Xphf.._ z  f(]h_`hUffE*pf.^ *`Xz  Xf(_]pXphf.%^ z  `f(_]h`h    pf.H^ z   hf.0^ z   pff/z  f/%]   hff/!  f/-] |  X\pff/  f/p] ǅD/  `\hff/  f/:] ǅ@'X] ,@ 11    p h Xpg `hS    HL H=<
 xH5	<
 @ H   L`LH;  fHE    )EM  ILtIHEfLLeH)t HL9tD   H @L9uH   LeL`HEE1HpMt/fD  DIt$LpAHH} M$$Mu׿X   L}	tHs`LHI|  Lch   sHShHs`HIk HC`Lcph   i  k         tHCpƀ      u.H`  HX  H9tH)HX  1HHHl<H   1Ht    t      LcXMtLr   LNrHCX    LmH]I9tBf     LcMtLX   LrH;HtHPHI9uH]HHuHH)qf.     wx   D  {x HE    H   HHH<      L%i[LLNoH}UyǅD    fD  LL%oH},y   ǅ@    lfD       HE    HE    : HpCH86HHH{pH   H0 H{h/  HC`fD  X f//  \X ,D_    X f/   \X ,@    X hf/   \^X ,D  XX pf/sx\52X ,rX!X ,D
X X,oW X,1H`ǅ@    ǅD           ǅ@   ǅD   8qHEdH+%(   uH=m< 0wH颹H˹HѹHԹHӹH{HgH餹UHAVAULmATISHLH dH%(   HE1lI<$ 1  LuLLLeM  ID$I|$H}PI$LPH}   8   LunHP0H@     HH@    H@    @   ?H@(    H@0    H   JlH   LLHI5I$HWo  LH9Br  %H{`Lc`HtHH.XH@H9a  |mH   L Mt
I$LPH   L   HtHPHALkpMtL.h    LmH{`HCp    HC`    HtHHWH@H9   lLkhMtLv  X   LlL   HCh    Mt/LB  I} IE0IuH9t	Hl8   L{lHǃ       H}HtHPH}HtHPHEdH+%(   u:H D[A\A]A^] E1 m  fD  5nH&H9H2H0f.     UHAWAVIAULATSHH  HdH%(   HE1H HHo@      LwI>   H   H9        iLHI~L|I   I   H0PH0H0HHHL0M  ID$I|$H(PI$LPH0HtHPH(   H=M2
  L     MtII$H(LHH H2
 H0x  HH5WTBhƃ    H(8   H jHP0H@     HH@    H@    @   ?H@(    H@0    H   LhHH   IH(HLH 1I$HGk  LH9B  {H{`Lc`HtHHTH@H9  liL   L   M9t-f     I<$ tH{` sHLu}IM9uL`  LX  M9t-f     I<$ tH{`rHL5}IM9uH   L M  I$LPH   L   H  HPH      E1L{pMtLc    LshH{`HCp    HC`    HtHH SH@H9  NhL{hMtLmq  X   L hL   HCh    Mt.L$>  I?IG0IwH9t	Hg8   LgH(ƃ    Hǃ       HtHPLgE)  LkHLHkL@      HEs      LVkLHkH1Xt      LLv1Lss      LatH 1LH^	 H(hH(tqHLLBxL:fh  ?  Ht{Ht     E1LtH HtHPHEdH+%(   !  H  D[A\A]A^A_] L@HH5CPHǅ@    #dM   I$LP@ H   uH+  H   1L   H   L|nH%o   HH  H  o  p     !AMHLfrH0H8HH9u[   HH9K  HH   H9  uH   H9  uop         Les Hǅ(    +H   Hǃ       H,A9HhHEHHhHD}dyH5}*
 H   HHLoNDGuCHHH8HPH0(u#H5$*
 H   H0H-NxpH\rz    HVH@H)cB Hi1    H=}+
 hh3 HHAKe  fD  Kf        OoH=h)
 H0 jH5Y)
    *oH=C)
 H0iH54)
 e鿮HڮHsHѮ#"%H鲮HwYH	HoHo黮HPH`fUHAWAVAUATSHXH}HH5E(
 LccdH%(   HE1H   HE    HEH  H}1L1LHLh3E  HEO$dHE1HEIHEL=KHEI2f        
  m  D  H0L9tiH;GuH   H5? `  H5)
 H  HHKHSH0AWH}L2QLKKt_AXL9uHEHuH}    u      gMt
IE LP0H}HtHPHEdH+%(   H  He؉[A\A]A^A_] H   H5> _  H}HE    BfHCx  HuH}HM
   HE    dLuHE    MtIE LP0H}HtHP0H}HtHPMt78   ^LHIsLI(qH}LmHtHPH}Mh@   HL= H=(
 xdH5	(
 ]@ H
   H5= ^k  H5%
 H   HHKHSLIAWH}L[OrY^    H;GD  7fD  H   H5D= 3^{HEH5 '
 L   H   HHSHKLH
ILHPLNFrXZ/    H;GD  HCH}H0d $
    H$
 H={$
 H0;eH5l$
     $
    H$
 H=C$
 H0eH54$
     H;GwD  HEE1HE   H+ H=&
 bH5&
 L5-$
 LmaD谀LH$
 Ae+L-#
 L=aL耀LH#
 e3W`HHͪH鵪H顪fD  UHAWAVAUATSHXGH(  HH6dH%(   HE1HEH HHP Hǅ    HH0HMHSHULLLF:pL_AXM  I$L}1ɺ#   H5* LLh HE    mlLLAH}  dLסHMt%I$LLHEx  HLJZE1ILp   1H58 LLHǅ     Lh(Hǅp    kLLLAH5#
 H2  HHMH LESHULKHHLPoHLYHpcY^LHzZIHHǅ(    H@(        Hǅp    H     H5]9 L	kHLLLH5"
 H7  HHMH(LESHULJHHFnHLXHpbH( XZ  L`HLYLL`v  LLYHH8H0HtHP1LbLHLLLcL@LLcLhHLLkLHHYLYLY1LaLL9cLhHULLLHELdLHIrYHfYHH   siH
  H   H  H   HHYtH1X  WfoHHH)EHtfH~HDAHHEHMtITFHHLLLHEHLZLL8EeLLlL8HMII$LLHEx$LeHLHE    aVH 
 I$L@H@ HHuH4    H=
 \H
 H0HBLHHPlH   1H54 HǅH    gHLLHHH_LHUHlHL3%  HH   HtHPH}LHHI   HtHHRI   HLP8I$LPH8HtHPHf   A       _A   HHtHPH HTHEdH+%(     HeD[A\A]A^A_]    A   뽺   H54 L\fHNE1H0HtHPHxHt=HWHOH      H9T  H
 8 4  GPW  HhHt=HWHOH      H9K  Hd
 8   GPW  H(HtHPHXHt=HWHOH      H98  H	
 8    GPW  H HtHPHHgHP\HLLuHE    9S@ E1a     LxiLji9hLLCTHc       Hi1 H=u
 hYH5i
 @    HA1 H=M
 @YH5A
 @ fH1S_D  HHN>HG    HPH9uHPHb>H9u%PD  HHH  ffHH=HG    HPH9   HPH=H9usPf     HH=HG    HPH9umHPH=H9uVPD  RfD  R<fD  Ru%HHH^OHHH{UIIH0HŠI釡I驡I陠II鵡II~I钠I铡I鮡I隡IšI鱡IlIOIH0HIXf.     f.     f.     f.     f.     1f     H?Y@ UHAVAUIATISHHdH%(   HE1
 t:H
 IHLLeHEdH+%(   u>HL[A\A]A^] L5q
 LTtH
 LH\
 wXSUHAVAUIATISH^HdH%(   HE1
 t9H
 IHLLdHEdH+%(   u=HL[A\A]A^]fL5
 LTtH&
 LH
 W SUHAVAUIATISH^HdH%(   HE1u
 t9Hr
 IHLLAdHEdH+%(   u=HL[A\A]A^]fL51
 LaStH
 LH
 7WRUHAVAUIATISH^HdH%(   HE1
 t9H
 IHLLcHEdH+%(   u=HL[A\A]A^]fL5
 LRtH
 LH|
 VQUHAVAUIATISH^HdH%(   HE15
 t9H2
 IHLLcHEdH+%(   u=HL[A\A]A^]fL5
 L!RtHF
 LH
 U@QUHAVAUIATISH^HdH%(   HE1
 t9H
 IHLLabHEdH+%(   u=HL[A\A]A^]fL5Q
 LQtH
 LH<
 WUPUHAVAUIATISH^HdH%(   HE1
 t9H
 IHLLaHEdH+%(   u=HL[A\A]A^]fL5
 LPtH
 LH
 T PH=\
  HU
 tf.     UHHS+    HQH)
 ]f.     D  UHSHHH5
 Ht$HL611]HH]        vXH=
 H0GSH5
 ff.      UHSHHH5Y
 Ht$HLZ6111]HH]        XH=
 H0RH5
 f.     @ UHATSHHdH%(   HE10
 t4H5-
 HWHEdH+%(   uAHH[A\]f.     L%
 L!OtHF
 LH
 R@NUHATSHHdH%(   HE1
 t4H5
 HUWHEdH+%(   uAHH[A\]f.     L%a
 LNtH
 LHL
 gRMUHAWAVAUATSH   dH%(   HE1J
 t>=
  H@
 j  HEdH+%(   "  HeH[A\A]A^A_]D  H
 HMt1L}Le!   H5 HxHǅx    Z   LmHE    U1ɺ-   LH H5v HE    HE    HEYHUL   \THHEE1ATHxE11j1LPjj KH0LFSH}ZH}$Q   
HHx   H     HISH}QHxwQHL%
 P=
  H
 @ MH8IU=Y
  tI<$^Pof     9
 Z
   L}LmL5;	    TH`1ɺ
   H5(' HǅX    Hǅ`    XHh1ɺ   H5' Hǅh    \X   1~hHp   fEH5& `E   EHǅp    X1L!   HxHǅx    W1L   ~pH52 HE    LXx)EW1L-   H5: HE    WHELME1PHEHM1j   LPjXH L)QH}OH}OHxOHpOHhsOH`gOHXNfD  H=
 L}JLmL5u 21L!   LHE    V   HE    RHUE1E1H   LML_PH}FN   ,EHU   H     HHHQH}NHHH=
 H
 M0IouH`        UHATSLgHMtLSX   LFH;HtH[A\]H@    [A\] UH50HSHHHCH;H]M H?HtH`fD      H(u3UH5
 HATSHHt%H;H/[A\]Qf.         
 t%H
 H=7
 H0KH5(
 fD  L%i
 LHtgLHV
 Lf.     D  H?HtH`fD      H?HtH`fD      UHAWAVAUATISHH(HH H H H H HcPHFH Hc@Ll\DDHEuH([A\A]A^A_]I$HxIL$HLzHLpHLBLHH H0HcFL$ H   J'1D  fA4f4BHH(u1ffA4 ftBPHH	u1f     fA4ftBbHH)ufAH1H   f   LcffAGf   K$MuSHDh1fBgH([A\A]A^A_]fD  HLLMLEHMBLMLEHMH)@ HBHf.     UHAWAVAUIATISHHH H H XZ|CIE uH[A\A]A^A_]D  I$HHHMd$HLrLxH H0HcFH HurH1D  fAfBHH(u1ffAfLBPHH	u1f     fAfLBbHH)u1_f   H[A\A]A^A_]HHHUAI} HUHnUHAWAVAUATISHH   H6dH%(   HE1HhH    H8HHP LhLm1ɺ(   LILxH? HE    HHPhQHELLH@LHAH=.	
  HE   Ht3HLuH	
 HLHEx   H5L+L4?E1H;HtHPH}L;HtHPH}IHhHtHPH;   HEdH+%(     H   H[A\A]A^A_]@ H5*LL}HE    >oHY    H=E
 H !EH 	H@9ALH}H@fHH8jH@LH) HMfInfHnH fHnfHnHpHu L`fHnfHnfInflflflPHZ  Hm  )) )@)P>   IC1ɺ*   LIH5  1H`OOL8foHEfo fo@HuHEfoPLLm)p)U)M)EmLLLH
 XBHhGH`GHEdH+%(     A   LpB11H54  HpL*   INfInH HuPfHnHR )EfInfHnLmflL)E~@fl)E0LLLH 
 AH}RFHpFFHEdH+%(   6H5	 H2LFIII}I*Hn HLmHHPIH}EHpELrKHHEdH+%(   LF<HEdH+%(   zIIIEH5	 H61LEIHh3EH`'ELJHcD  H?HtH`fD      UHAWAVAUATISHH(HH H H H H HcPHFH Hc@LlBD=HEuH([A\A]A^A_]I$HxIL$HLzHLpHLBLHH H0HcFL$ H   J'1D  fA4f4BHHu1ffA4 ftB6HH	u1f     fA4ftBHHHufAH1H   f   LcffAGf   K$MuSHDh1fBgH([A\A]A^A_]fD  HLLMLEHM:LMLEHMH)@ H:Hf.     UHAWAVAUIATISHHH H H X@;IE uH[A\A]A^A_]D  I$HHHMd$HLrLxH H0HcFH HurH1D  fAfBHHu1ffAfLB6HH	u1f     fAfLBHHHu1_f   H[A\A]A^A_]HHHU9I} HUHnUHAWAVAUATISHH   H6dH%(   HE1HhH    H8HHP LhLm1ɺ   LILxHW HE    HHPIHELLH@LHAH=
  HE   Ht3HLuHi
 HLHEx   H5l#LT7E1H;HtHPH}L;HtHPH}8AHhHtHPH;   HEdH+%(     H   H[A\A]A^A_]@ H5"LL}HE    6oH]    H= 
 H A=H 	H@Y9LH}H@@H8H@LHI HMfInfHnH fHnfHnHpH L`fHnfHnfInflflflPHZ  Hm  )) )@)P6   I;1ɺ*   LIH5 1H`oGL8foHEfo fo@HuHEfoPLLm)p)U)M)EmLLLH	 x:Hh<?H`0?HEdH+%(     9   Lp;11H5T HpL*   IFfInH2 HuPfHnHV )EfInfHnLmflL)E~@fl)E0LLLH 	 9H}r>Hpf>HEdH+%(   6H5	 H%*L>III}I*H HLmHHPIH}=Hp=LCHHEdH+%(   L>4HEdH+%(   zAIIEH5	 HV)L=IHhS=H`G=LB@cD  H?HtH`fD      UHAWAVAUATISHH(HH H H H H HcPHFH Hc@LlKD75HEuH([A\A]A^A_]I$HxIL$HLzHLpHLBLHH H0HcFL$ H   J'1D  fA4f4BHH$u1ffA4 ftBHHH	u1f     fA4ftBZHHufAH1H   f   LcffAGf   K$MuSHDh1fBgH([A\A]A^A_]fD  HLLMLEHM 3LMLEHMH)@ H2Hf.     UHAWAVAUIATISHHH H H XI3IE uH[A\A]A^A_]D  I$HHHMd$HLrLxH H0HcFH HurH1D  fAfBHH$u1ffAfLBHHH	u1f     fAfLBZHHu1_f   H[A\A]A^A_]HHHU1I} HUHnUHAWAVAUATISHH   H6dH%(   HE1HhH    H8HHP LhLm1ɺ$   LILxH HE    HHPAHELLH@LHAH=	  HE   Ht3HLuH	 HLHEx   H5Lt/E1H;HtHPH}L;HtHPH}X9HhHtHPH;   HEdH+%(     H   H[A\A]A^A_]@ H5	LL}HE    .oHB    H=	 H a5H 	H@y1LH}H@8H8H@LHi HMfInfHnH fHnfHnHpH L`fHnfHnfInflflflPHZ  Hm  )) )@)P/   I41ɺ*   LIH55 1H`?L8foHEfo fo@HuHEfoPLLm)p)U)M)EmLLLH	 2Hh\7H`P7HEdH+%(     1   Lp7311H5t HpL*   I>fInHR HuPfHnH; )EfInfHnLmflL)E~@fl)E0LLLH	 1H}6Hp6HEdH+%(   6H5	 HE"L6III}I*H HLmHHPIH}6Hp5L;HHEdH+%(   L6,HEdH+%(   z:IIEH5	 Hv!L6IHhs5H`g5L;8cD  H?HtH`fD      H?HtH`fD      H?HtH`fD      H?HtH`fD      UHAVIAUATSLoHI9t:fLcMtLo9X   Lr,H;HtHPHI9uIHtIvHH)[A\A]A^]<,@ [A\A]A^]f.     D  H?HtH`fD      UHAWAVAUIATISH(HHNHHcIDHHRH HcRDH\HPH H HcRDHc@DHHÉ5,I$uH([A\A]A^A_]fD  HHIE MuHL@HLzHLHHLjH0LPHcFDH Hu|HfAHHfIcEDH H   HfALhfIcGDH Hu~fA II}fAE IcFDL< HuPI$X1fCD=H([A\A]A^A_]fHLULMLEHU(*LULMLEHUHTLL* LLLEHU)LEHUbHLLMLEHU)LMLEHUHD  H?HtH`fD      H?HtH`fD      H?HtH`fD      UHAVAUIATSLgMtZD  LM$$LsMtL6X   L)H{HtHPH{HtHP(   Hp)MuIEI} 1H    d,IE    IE    [A\A]A^]f.     UHAWAVAUATISH8LwHH}LHUH)HHH9  IIHHHuH)L9`  H4 HuH9'  H  HE    HELLHHHEŞHMI9@  LmI
    ILL
IIEM9uI MM9t'MfD  HLݞHII9uL9utFH]fD  LkMtL4X   L(H;HtHPHL9uH} tHEH}H@HHEH)'HEHUHMHHHLaHAH8[A\A]A^A_]@ HHUHMQ(HMHE@ HrHH9HFHHUH@ HELhML9uCHH9HFHEHHH= 4/HH;HN$&H} uH}H} tHuH}H&73%H]I9t)HH]%LI9tHHB2H2H1H%uH1HL/1Ho%H]I9NHH@ UHAWIAVAUATSHHD6D9HHtdE   IHKHta(   HM&HM}LIALfAE 7HC(   HL[A\A]A^A_]fD  I1f     H9t1fD;r Ef.     fUHATSLgM   I\$ HtfD  HH   %HuID$I|$1H    
(I|$ID$@ID$(    ID$     It$H9t	H$I|$,[LP   A\]$[A\]f.     UHAWAVAUATSHHL,MtI] IIIIHK0*f     H3HtXHN01IHIt$I9uBHI9uڋCA9@uI HSp;ruLEH9tHHx
'LEȅtE1HL[A\A]A^A_]f.     UHAWAVAUATSHXHUdH%(   HEHL,MR  I] HEIIHEIHKH0    H3H$  HNH1IHIt$I9
  HL9uH}HCH7HEH9Hu      /HuHHt'HH}HEx   H}H5&!HE    HE   HE.HuHH   HH}HEx   H}H5 H} H}HtHEREf.     HEdH+%(      HXL[A\A]A^A_] E1 HEH}H5aHE    HE@ 2 HEH}H59HE    HE HEHtHHEHRHEH9E:fH} +H}"HELHt-HEdH+%(   t-y$HUIHH -*f.     fUHAVAUATISHH   HIH<   L4    L"L1HI1$MT$0It$ID$    HtaE1ML$    HHH HHt?H1H6HAHHID H8HuI|$H9IL$LH9 tKL IHuI<$It$L9t	H I\$M,$[A\A]A^]    LW0HG0    MH@ H=t%HIE ID$(,H+H2)fUHAWAVAUATSHHL,M   I] IIIIHKH&D  H3HthHNH1IHIt$I9uRHI9uI8HSw;ruLEH9tHH"LEȅuHL[A\A]A^A_]f     E1f.     UHATISH u[H_Hu-f1H[A\]fD  HH!"tHHtI<$HSw;ruH9uH[A\]     HHcH~H4HHHHHHH9uH1HwHLHHjHH[A\]f.      UHAVAUATISHH   HIH<   L4    L!L1HIQ!MT$0It$ID$    HtaE1ML$    HHH HHt?H1H6HAHHID H8HuI|$H9IL$LH9 tKL IHuI<$It$L9t	HI\$M,$[A\A]A^]    LW0HG0    MH@ H=t#HIE ID$()H(HR&fUHAWAVIAUATISH8dH%(   HEHHcX~%HXf     HHHXHH9u1HHLIt$ILLHt5H Ht-HHUdH+%(   *  H8[A\A]A^A_]    P   LeRI>H     IHxLfIE@IE@    IEIT$I|$    AE0ID$(It$IE   AE0  ?AE LmHEh,Hքu1I4$I]HJHHt=H IE HL(ID$IE(HULDH1It$ID  ID$Ml$IE HtH@H1It$L,ID$HH};HEdH+%(   tGHHv$fD  UHAWAVAUATSHXHUdH%(   HEHL,MR  I] HEIIHEIHK0    H3H$  HN1IHIt$I9
  HL9uH}HCH7HEH9Hu      &HuHHt'HH}HEx   H}H5HE    HE   HEG&HuHH   HH}HEx   H}H5U@H} H}HtHEREf.     HEdH+%(      HXL[A\A]A^A_] E1 HEH}H5HE    HE2 HEH}H5HE    HEHEHtHHEHRHEH9E:fH} +H}*HELHt-HEdH+%(   t-HUIHHK$"f.     fUHAVAUATISHH   HIH<   L4    LL1HIMT$0It$ID$    HtaE1ML$    HHH HHt?H1H6HAHID H8HuI|$H9IL$LH9 tKL IHuI<$It$L9t	HI\$M,$[A\A]A^]    LW0HG0    MH@ H=tepHIE ID$(6$H:#H fU1HAWAVAUATISHHL.dH%(   HE1LLHwIHLHt4H Ht,L`HEdH+%(      HL[A\A]A^A_]     I<$H     IHxHtHPIG    MgLHC(HSH{ Hs   HE'Hքu0H3MoJHHt=H IHL8HCO    HUHL1HsIfD  HCL{IHtH@1HsL<HCH!HEdH+%(   tk H	H&Y    LHEdH+%(   ux"II    LHEdH+%(   uHHmfD  UHAWAVAUATSHXHUdH%(   HEHL,MR  I] HEIIHEIHK 0    H3H$  HN 1IHIt$I9
  HL9uH}HCH7HEH9Hu       HuHHt'HH}HEx   H}H5HE    HE   HE HuHH   HH}HEx   H}H5H} H}HtHEREf.     HEdH+%(      HXL[A\A]A^A_] E1 HEH}H51HE    HE2 HEH}H5	HE    HEHEHtHHEHRHEH9E:fH} +H}zHELHt-HEdH+%(   t-IHUIHH\f.     fUHAWIAVAUATSH8dH%(   HE1H ~  H_H   \  @    HMt,ILmLLHEx   H5LE1   LuHM   I$LmLLHExtsH5LMAMt	ILPEuHH   LcM7M9FHEdH+%(      H8H[A\A]A^A_]f     LeH5%LHE    Mt
I$LPM9Amf.     H5LLuHE    MA7@ 1[f     H1HHwHLHH/H'H}<LIt,HEdH+%(   t,IIHIb# UHAVAUATISHH   HIH<   L4    LL1HIMT$0It$ID$    HtaE1ML$    HHH HHt?H1H6HA HID H8HuI|$H9IL$LH9 tKL IHuI<$It$L9t	H1I\$M,$[A\A]A^]    LW0HG0    MH@ H=tH$IE ID$(VHZHfU1HAWAVAUATISHHL.dH%(   HE1LLHwIHLHt4H Ht,L`HEdH+%(      HL[A\A]A^A_] (   I<$H     IHxHtHPHC(fHSH{ HsAG   MgHE>Hքu/H3Mo JHHt<H IHL8HCVfD  HUHL1HsIfD  HCL{IHtH@ 1HsL<HCHHEdH+%(   tj(H	H&(   L4HEdH+%(   uLI(   LHEdH+%(   uHHnf.     D  UHAVAUATISHH   HIH<   L4    LaL1HIMT$0It$ID$    Ht`E1ML$    HHH HHt>H1H6AHID H8HuI|$H9IL$LH9 tKL IHuI<$It$L9t	HI\$M,$[A\A]A^]LW0HG0    MP@ H=tMXHIE ID$(H"Hf.     U1HAWIAVAUATSHHD.LGdH%(   HE1LIHLL4    MtcI	MIҋqA9t#H9HtJG1IHII9u7HA9uIHBHt#HUdH+%(     H[A\A]A^A_]Ð   HSHsH{ H     IA   ID$    AD$HC(HEHքu.HIIHtKH I$IL HCID$i@ HUH|L1HHsL4    IIHuHCLcI$Ht@1HsL$HCIMl$MtLX   L
   L
HEdH+%(   tHHD  UHAUIATSHHLgMu    IIT$ I} JwHHIT$IHT$HuɄt]H[I9tLLL)II|$ IU wJHH1HILHHLH[A\A]] E1 L LgfUHGHAVAUIATISH9~   HV I} HJwHH0   ID$HH9t<HsIU Hx IƋJHwHya1I~ HEIDH[A\A]A^]fD  H( t9HG HHx JHwHy[IT$ 1A\A]A^]    [LLA\A]A^]=D  IU H{ JwHH]yYIT$ 1H9jHI} HP IƋwHJH#y1H{ IEIEH)     H1fD  UHAWIAVLwAUIATMSHH_Hud HHt1IH{ JwHHHSHKxIHHuM9t#IT$ I?JwHHg   `   LI?IHx 
fHLID$X    IT$ AD$(AD$8AD$HIHHtaI9t,Hu'HR ID$ JpHxH	@    LHLEIE(HID$([A\A]A^A_]@ I|$ .L`   Mf.     fUHAVAUATISHH   HIH<   L4    LL1HI	MT$0It$ID$    HtaE1ML$    HHH HHt?H1H6HAHID H8HuI|$H9IL$LH9 tKL IHuI<$It$L9t	HI\$M,$[A\A]A^]    LW0HG0    MH@ H=tepHIE ID$(6H:HfUHAVIAUIATILSHH HHWHwdH%(   HEHGHEuLH3Ml$JHHtXH I$HL HCHEdH+%(   ucHL[A\A]A^]    HHHU	L1HsI HCI$LcI$HtH@1HsL$HCH    UHAVAUATISHH   HIH<   L4    LAL1HIqMT$0It$ID$    HtaE1ML$    HHH HHt?H1H6HAHID H8HuI|$H9IL$LH9 tKL IHuI<$It$L9t	HI\$M,$[A\A]A^]    LW0HG0    MH@ H=t%	0HIE ID$(HHrfUHAWAVAUIATISH(dH%(   HE1H u7H_Hu,@ HHt HSLL^t1   fD  I]E1HHO  1LIt$I|$ II       LH     HH@HHE<yID$(IT$I|$    It$HEHք  I4$LsJHH  H HHHID$   HEdH+%(   ,  H(H[A\A]A^A_]     I$LM<IHK/fD  H3H!HN1IHIt$I9HI9uHSLLLMLEk]LMt3I1HU1H6H."AfD  LEw    HULL1It$IfID$I\$HHtH@1It$HID$HHEdH+%(   tvH	I&"     H HEdH+%(   uAH}x    H HEdH+%(   uL	HvH	U1HAWIAVAUATISHL.dH%(   HE1LLHwIHLYHt4H Ht,HHUdH+%(   T  H[A\A]A^A_]fD  P    I?H     HHxHtHPfL{@HC@    ID$(C0IT$It$I|$ L{   HC   C0  ?C HEHքu6I4$LkHJHHtBH HHHID$HC/    HULL1It$ID  ID$I\$HHtH@H1It$HID$HH{<H{HsI9t	HH{P   HHEdH+%(   tFH	IP   HHEdH+%(   uHL	HEdH+%(   uHg        HH H0 H( H  H@ H8s UHATASH_HuC HËS HCD9HOCHuHބu#1A9HNHOHH[A\]    H_H9_tHfHދP H H1HH[A\]     UHATASH_HuC HËS HCD9HOCHuHބu#1A9HNHOHH[A\]    H_H9_tHHދP H H1HH[A\]     UHAWAVAUATSH8H}H  HEH@HEH  HEH@HEH  HEH@HEHP  HEHXH   LkMt|MeM   Mt$M   M~Mt0I\MMIx LE(H}(   MuI~ M~(   LM   MH{ Lc(   HMt5LTfD  I} Me(   LMtM0LuI~ I^(   L[HtCH]D  ID$I|$ HEU(   L(HEH{IL}I I_"(   LHt	H]oLuI~ I^(   LHt	H].L}I I_(   LHt	H]H8[A\A]A^A_]Ht{UHAVAUIATSI}MI^8MmHt0@ H{II|$ H[V(   L)HuԾX   LMu[A\A]A^]f     Ðff.      UHAWAVAUATSH8H}H  HEH@HEH  HEH@HEH  HEH@HEHP  HEHXH   LkMt|MeM   Mt$M   M~Mt0I\MMIx8LEH}X   *MuI~8M~X   LM   MH{8LcpX   HMt5LTfD  I}8MeCX   LMtM0LuI~8I^X   LHtCH]D  ID$I|$8HEX   LXHEH{IL}I8I_X   L%Ht	H]oLuI~8I^X   LHt	H].L}I8I_ZX   LHt	H]H8[A\A]A^A_]Ht{UHAVAUIATSI}MI^8MmHt0@ H{II|$8H[X   LYHuI~ kX   L>Mu[A\A]A^]Ðff.      HGo
fH7HG HG(HBG    HG    HG0    HGHHB    O8GP    Ðff.      UHAVIAUATSLo@H_8I9t:LcMtLX   LH;HtHPHI9uI^8HtIvHHH)SI~[A\A]A^]fUHAWI   AVIAULATLSHH   dH%(   HE1,HLL U  f L) fo )0A dHH E11AHLHǅ    Hǅ    fo Hǅ    j j j HHD$    $j QH@uLE1E11HLqHHtHTPH0fHǅ8) IL 1ɺ   H5 LHǅ     HHL  HH HHfx   I1HH0H=tH+ HPHpHHL@
   L!LLHǅ     E1ɺ   HH5 Hǅ    LHھ  HHH 1LH  HM>@uhA     LLA   H %LHLHEdH+%(      He[A\A]A^A_]    1ɺ   H5 LHǅ     HL  LH @M>P     xs    HLHǅ     f   _E1E11LLHHtHTPH fH0Hǅ8) MHBH<BHCBHEBHAHA@ UHATIHSH~wBHTAH HH9tf8;uH)HHH9AH    HSAD$Pu
H[A\]fH3	   H HH[A\]1IAUHAWAVIHAUATSHHHdH%(   HE1^HISH߃EE1AI7H}A;   HE    A1E1HUM~EIFHUHEM  HfD  HUII JHwHZIGIIGIIHuH9]  HS H}JwHH_  L{0HC8MHu  fIHHtHHHPD;` ~HHuM9  E;f   IF8Mf0LHu:f.     HHHtHHHPD9h }HHuI9t
D9k    IF(X   HEDh IH@0     H@    IG@IGHIGP    I9  D;k   I9^@tHD;h 2  Hx q     HLLLyIFPH}{HC(HUdH+%(   >  HH[A\A]A^A_]D  H]@ IFX   H]HEHHEH}HE    L{0HC C0    HuHS HC8    H}L{@L{HHCP    B  IH   H9U  H  HR HC LEJpHxHLE   fD  HC(X   HE.D` IH@0     H@    I@@I@HI@P    M9   E;f    L9s@t%LLE LED;` j  Hx      LLLLEHCPLufH{8HEH{ H߾X   H]@    HMLHIF0f   L9sHt`LLE8LED;`    I~ t?IƸ   $f     H{P    LsHE9f    1M9%1E;f @D     I9^HtHHD;h    H{ t/Hø   I~P tqI^HD9k }g1L95-1D;k @#D  DH{(LE8LEIHuJ1LEH}X   c"fD  DI~(lHHu X   L7HIHHYIHGHE<@ UHAWAVAUATSH   HH   dH%(   HE1   11HHPH1HH]/HHHuLmHuHPHP8H@@Hp  HhH8H@H9u(      HhHhH98  HhH@H`HtHP  H`HXE1H  D  H}HE    wH`LhHǋ@r!    pB  q!  Hw GdW`N9OLHE    H}HEHE~H}w  H@HHH}HE_H} 4  HgHǾ   HxHE1HpHEH   fD  D9   H}E   A܉HA   A   HpHxHuPHuXLZDHE    D)LuHEH}LHEH  H}HE;XrH}HtHPH}ZIL9XQHP]     s   Hw0H}jD  H}GtH_LuLdG
D  LL   HE    fE1H}L  H}HI9u<fD  Hw G0W,N9OHHPP fD  Hw G,W(N9OHPHE    HHUHPHHPHHPHjtdH}Ht=HHxou/HEdH+%(   uFHH@He[A\A]A^A_]f     HEdH+%(   uHe[A\A]A^A_]HPeH7H=8HN8H8HX8H7H7UHAWAVAUATSH  dH%(   HEHh   u/HEdH+%(     Hĸ  [A\A]A^A_]f.     HIEHx( HPtHH3A   A   HH   H8LxL@1ɺ   LH5f Hǅx    G
   L   L`LHǅ    EHHHH      11HIWHLLHHXfo L HXL) HX   1LgLLLdHXLCPH`
   psPE`  H1ɺ   LH5Y Hǅ     HhLL  HhH 2L31ɺ   H5 LHǅ     L  LHHH HH3A   A   H   HH0HLHǅ    HH@"LHǅ    HXC1Ƀ  H@   H57 HX1ɺ     H5 LHLH(HHHHIŋQH1ɺ   H5 LHǅ     LL  H(LhvH HL+1ɺ   H5 LHǅ     :L  LHH#H WL+1ɺ   H5T LHǅ     L  LH@H L+1ɺ
   H5 LHǅ     LL  LH LLL3/L`
   LHhLL`ELHǅ    1ɺ   LH5 Hǅ    L  LHh H4H(LLLL3H`
   +H`HhHǅ    E81ɺ   LH5 Hǅ    wL  LHh`HHL H3  LA   A   H LH`
   L3   H`LHǅ     E}Hh1ɺ   H5 Hǅ    L  LHhHH fLL) fo )Hh1LL3n  1ɺ   H5 LHǅ     /L  LHhH LH@H3  LA   A   H` }LeL}HPLhLpM9t(f     IU LHL9II9uHHH0HX!IL Hǅ    HxL0IHxLouHPHHtHHxouHPH=Hx1H8uHxLBƉhfHxHcUDhHcHHHLHuN1f4D@W    H@   H5 xc H5 Lav@ H`HHD@HhD@HhHHxuH4/H@/H/H0/H/H/H/H0/H/H$/H/H/H/H/H/H 0H0H0ff.      UHAWAVAUATSHHHH}dH%(   HE10HK HHHMHEH9   LeHELh@H0HEL9tz I]@Mu0I9tYHELx  LLLmAu Ls LH}LZL2H
HI9uLIH9EuH}8HEH9EZHEdH+%(   uHH[A\A]A^A_]H/f.     H?HtHHxouH`f.     D  UHATSHHdH%(   HE1H    H]Ht_HIHxH}HHXkt_I<$Ht6HHxou(HEdH+%(   udHH@H[A\]     HEdH+%(   u<H[A\]     HHPH}LHEdH+%(   tHHf.     D  UHAUIATSHHLgMu    IIT$ I} JwHH9IT$HIOD$HuɄt]H[I9tLLLiII|$ IU wJHH1HNLOHLH[A\A]] E1 L LgfUHAWAVAUATISHHHtkE   IMt$Htg(   HH    HIHP t}LLLID$(   HL@[A\A]A^A_]fI1f     L9tHR H;JwHHEjUHAUIATSHHLgMu    IIT$ I} JwHHIT$IHT$HuɄt]H[I9tLLLII|$ IU wJHHJ1HILHHLH[A\A]] E1 L LgfUHGHAVAUIATISH9~   HV I} HJwHH   ID$HH9t<HIU Hx IƋJHwHya1I~ HEIDH[A\A]A^]fD  H( t9HG HHx JHwHKy[IT$ 1A\A]A^]    [LLA\A]A^]=D  IU H{ JwHHyYIT$ 1H9jH!I} HP IƋwHJHy1H{ IEIEH)     H1fD  U1ɺ    H5 HSHHH    HH]Ðff.     H0SfUHSHHH@{8 u5H{HtHs(H)HHH]P   ffD  C8 H{0C뼐U1ɺ    H5 HAWAVHAUATSH  dH%(   HE1Hǅ    H1ɺ   H5- Hǅ    H1ɺ   H5 Hǅ    H1ɺ   H5 Hǅ    yH1ɺ   H5o Hǅ    TH1ɺ   H5س Hǅ    /H 1ɺ   H5l Hǅ     
{	   L LL H(L@L1ɺ    LHǅ    1ɺ   LH5 Hǅ     1HH1ҹ   HE    MHǅD    H   Hǅ@   ǅ`   ~HE   E   Hǅ(    H~h~ E~ EHH(z   `H   H     HHBH HH HHHHHHvHEdH+%(     H  H[A\A]A^A_]fD  L=y	 LL H1ɺ    LLLL H(L@Hǅ    1ɺ   LH5 Hǅ    Hǅ    z1ɺ   LHH5 Hǅ     H@K1ɺ   HH H5` Hǅ(    HHM   1H(HL0HHHPHa ǅ8   H0[HHc   IH   H     HH'H(H HHHLHƗ	 L] 9Wt1     UHHC]ff.     H9t{UHAWAVIAUATISHL~HH?ID$MI)H)L9   IL$HH)L9r;I    LHM,$Ml$H[A\A]A^A_]fD      H    HfIL$I<$M~IHH)HIL9tI)1ooLLH L9u뇐HL9   L1II9t" oAo\A\H L9uI<$HtIt$H)MM4$Ml$fuo#'okoIfD  :o37o{% UHAWAVAUIATISHH_HOH9t4oH HBC[HCH_H[A\A]A^A_]@ L?HHL)HHH9;  L9   H< H9   H  ID$Ao,$E1E1HB1jLo
H H HoRPH9uL)I\ MtL)LHMe I]MuH[A\A]A^A_]@ HrrHH9HFIILHuHUHuHUAo$$IMIIt$HIbHrL9>HX ^     IHH9HGHIH=s ff.      WfD  UH5, 1ɺ   HATSLeHLHdH%(   HE1HE    MH5F	 HtILj   LH:!H}YHEdH+%(   u4HH[A\]fD     H=	 H0H5ؒ	 H03 U1ɺ    H5 HSHHH    HH]Ðff.     UH<	 HHpfHnHATSHHH   fHnH0HG0flHG@G (uH5K	 Ht>H{@HcH{8HtHPH}	 HH[A\]if     Q	 t%HN	 H=	 H0H5	 fD  L%!	 LatxLH	 9벐fD  UHSHHHH]~ff.      U
   HAWIAVLAUL0ATSHH  7dH%(   HE1HEHH~s
   LEjs
   LtSHcMHct$HLDM$ DoHEu7I?IHEdH+%(      H  [A\A]A^A_]    1H:     ffTCHHuHc$HKH HuXH,   f8HHHctL4 HuxJ1,   f0HHHcEL, Hu;J))   1fDcfH9HLHnHHfHHLNHf     HLL2HrD  UHAWAVAUATSH   dH%(   HE1	 tB=S	  H	   HEdH+%(     HeH[A\A]A^A_]f     H	 HtHx1ɺ)   Hǅx    H5 HE    q	 1  =	  L-c	 m  IE L}1ɺ<   H5g LLmHE    HELeHE    HU   LHHEE1AUHxE11j1LPjj H0LH}sH}   Hx   H     HIH}9Hx-HL%s	 ~=Ϗ	  H`	 |f.     ;H8I=	  tI>Lf.     	 
	 J  LeL}L LH}1ɺ!   HE    HE    HHE1L#   H53 HE    LeHE1L<   H5͉ HE     HELM1PHMA      jLj j HH LH}H}H}H}X L-1	 LA1H}Le%   HE    H5 Lub   L}HE    Lf1LH 5   )EH5 HE    LeHEHUL   1L2   H5 HE    HUH}   zHHEE1AVHuE11j1LPjj 3H0LgH}H}H}<   "HU   H     HIH}H}H}LL%	 g     L-	 LeLL}L L1ɺ!   LL`HE       HE    HUE1E1H   LLuH}\   BHU   H     HHh#H}HhLH	 L`     H8I=Q	  tI>mf.     1	 	   LeL}L{ LUL1ɺ!   LLPLXHE    HE    HE1L   H5ӥ HE    HE1L5   H5 HE    HELM1PHMA      H`H}jj j HhHhH H}sH}jH}aHP1HX!   HE    HU1LH5? HE    HU   1L2   H5P HE    LMHM1H`A      LhPLjj j H L=H}H}H}H}	H=Ո	 LeL}L 6L1ɺ!   LL`HE       HE    HUE1E1H   LLH}   iHU   H     HHhJH}HhH=	 H	 'L`fInf.     UHAWAVAUATSH   dH%(   HE1^	 tB=Ӈ	  L5T	   HEdH+%(     HeL[A\A]A^A_]f     H	 Ht1LuLm   H5o HpHǅp       LeHǅx    f1H}H 5   )EH5B HE    HEHE    aHUL   1ɺ/   LH5? HE    2HUH}   1L8   H5? HE    LxHUH}   HHEE1AVHpE11j1LPjj ?H0LsH}H}H}Hx<   "Hp   H     HIH}H}H}Hp}HL%c	 =υ	  L5P	 f.     H8I=	  tI?_f.     	 Z	   HC LmHXLeHEHX1ɺ!   HHPHhHǅh    HE    yHE1L   HE    HEH HP1L5   H5 HE    2LULM1ARHMA   HLH   jj j rH HH}-H}$H}Hp1ɺ   H5
 Hǅp    H	 1HxHƺ   Hǅx    HXHP1~x   !   E   fEpHE    EIHU1LH5 HE    HU   #1L/   H5~ HE    HULMHRLHA   1jHM   ARjFH HH}H}H}HxHpHX1HP!   HE    uHU1LH5 HE    HU   O1L8   H5n} HE    1LMHM1LHA      HARjj j uH HH}0H}'H}HhD  HI	 LmHLeaH*| HX1ɺ!   LHE    H5| }   HE    kHUE1E1H   LAL	H}   ֹHU   H     HHPH}NHPHH	 ?޽ff.      UHAWAVAUATSHH  dH%(   HE1	 tB=T	  H	 v  HEdH+%(     HeH[A\A]A^A_]f     H	 Ht1ɺ   LmHǅ    H5r H4   Hǅ    Lf1ɺ3   H H)EH5q )E)EHPHE    Hǅ    H   L]1H 1   H5q Hǅ     H H}   #1H(1   H5q Hǅ(    ^H(H}   1H0:   H5q Hǅ0    $H0H}   1H8=   H5q Hǅ8    H8H}   uH@1ɺ:   HH5q Hǅ@    H@H}   8HH1ɺ=   HH5q HǅH    pHHH}   HP11HE1E1LAUHjPjj 讹H0LH}YH}PH}GH}>H}5H},H}#H臿   mH   H     HIOHHH@׿H8˿H0迿H(賿H 觿H蛿H菿HL%}	 =}	  Hr}	 @ 裻H8I=}	  tI?wdf}	 z}	   H@HHHHHGw HH=h}	    H=b}	    H=|}	  L5p   H=}	  a  H8H1ɺ!   HHLHǅ    Hǅ8    @H81H#   H5p Hǅ@    HEH1ɺ3   H5m HǅH    HM1Ҿ   HL@A   LQHHjj j &H LjHH޽H@ҽH8ƽH1ɺ   H5 Hǅ    aH 1ɺ   H5 Hǅ     <H1~ D- IH5j    LLEE   fDmHǅ    Hu 1LHLߺ   LHǅ    H1~IҺ+   fDmH5,n LLEE   Hǅ    `H 1H5 n Hǅ     IӺ(   LL.H(1LIк*   Hǅ(    LPLLH01H5n Hǅ0    IѺ(   LLH1HHǅ8    !   H81~(~HH5Ӈ Hǅ@    0Hp    )`)PCH1ɺ1   H5^k HǅH    AVL@1jHHE1L   jbH L覼HHH@H8H0H(H ޺HҺHƺH躺H 论H袺H1ɺ   H5 Hǅ    =H1ɺ   H5 Hǅ     H1~ +   H5k fDmE   EHǅ(    H1ɺ(   H5k Hǅ0    H1HHǅ8    !   H8H 1~(HHHǅ@    H`   0)P>H1ɺ1   H5i HǅH    AVL@1jA      LHHjZH L螺HHH@H8H0H(H ָHʸH1ɺ   H5 Hǅ    eH1ɺ   H5 Hǅ    @H1~	   H5 fDmE   EHǅ    H}j 1HHƺ*   Hǅ     ԿH1~ +   H5Wi fDmE   EHǅ(    萿H1ɺ(   H5i Hǅ0    kH1HHǅ8    !   FH81~(HH5 Hǅ@    0H`   )PH1ɺ:   H5g HǅH    ؾAVL@1jHHE1L   jH L`HHԶH@ȶH8輶H0谶H(褶H 蘶H茶H耶HtH1ɺ   H5b Hǅ    H1ɺ   H5T Hǅ    H1~	   H54 fDmE   EHǅ    覽H'h 1HHƺ*   Hǅ     ~H1~ +   H5g fDmE   EHǅ(    :H1ɺ(   H5Ug Hǅ0    H1HHǅ8    !   H81~(H   H5$ Hǅ@    0H`)P觼H1ɺ=   H5re HǅH    肼AVL@1jHHE1L   jƽH L
HH~H@rH8fH0ZH(NH BH6H*HH1ɺ   H5 Hǅ    蹻H1ɺ   H5 Hǅ    蔻H1~	   H5 fDmE   EHǅ    PHf 1HHƺ*   Hǅ     (H1~ +   H5d fDmE   EHǅ(    H1ɺ(   H5d Hǅ0    迺H1HHǅ8    !   蚺H81~(HH5~ Hǅ@    0H`   )PQH1ɺ:   H5\c HǅH    ,AVL@1jHHE1L   jpH L贳HH(H@H8H0H(H HHԱHȱH1ɺ   H5} Hǅ    cH1ɺ   H5~ Hǅ    >H1~	   H5} fDmE   EHǅ    Hc 1HHƺ*   Hǅ     ҸH1~ +   H5Ub fDmE   EHǅ(    莸H1ɺ(   H5b Hǅ0    iH1HHǅ8    !   DH81~(H   H5x| Hǅ@    0H`)PH1ɺ=   H5Fa HǅH    ַAVL@1jHHE1L	   jH L^HHүH@ƯH8躯H0讯H(袯H 薯H芯H~HrH֮L%m	 LH@HHHHHng HH1ɺ!   H5Jg Hǅ@    躶   HǅH    襲E1E1   LHH@LqL9HH   H@   H     HIH@yLL-l	 ʭeD  HI`    H=-m	 ت L   H=l	 輪X    H_    H=l	 蘪 HY_    H=]l	 x莨ff.      HG0H9Gt"HWHH;G8t@@ HBH  @f1Ðff.     HGPÐfD  H7HWHOHG         UHSHH_HtH蒥HH]   H]f.       % YXH f(fTf.v3H,f-A fUH*f(fT\fVf(^fHtfD  1ɺ   H5'{ HBfUHAWAVLuL}AUIATILSHH8HUdH%(   HE1HE    ǩLHE    跩{   LHrCP   I<$LL  讶H}GtI$i   u6ѫH}ȫHEdH+%(   5  He[A\A]A^A_]fD  HUL  HLH}fD     1H5z L*CPX fD % *^M YXq f(fTf.w[^HH}1HE    A.   A   1j   j j ?HEH HH}HE@ H,f- fUH*f(fT\fVf(m+fUHAWAVAUIATSH  dH%(   HE1H~(
  H~I
  HHI蹠tL譠	  HH3A   A   HHJ	   H`éL˦ Lk L{HLLHiųLLhH )ȉI$i  )ID$fIL$H=HDHHH?HIT$HHHDHHHH?HHH蝟HLHHx=H L认H(LDHLADHiQH%ȟLADHiQH%蠟LADHiQH%hLADHiQH%@LADHiQH%5e	 
   AL@LHiQH%Fd	 H	EωI  I} ME 茧H;L  HrG	 5HHǅ    HHLd  LܝS  I$fID$E1H*H=tH)HPLhLHLWIT$ffIE1H*H*Y> ID$XfI~H=tH)HPLhLHL%ffIH*Y ID$XH=tI+D$  HfH*ID$fH=tI+$A  HfH*'L+1ɺ   YU L H5Mt Hǅ     L蜭L  LHE	 腰H 蹥5Y L+fIn I YXՅ f(fTf.v3H,f%΅ fUH*f(fT\fVf(HA.   11^A      LHǅ     jj j jH H HLHD	   LLH葯HŤYX  %M L+f(fTf.v3H,f% fUH*f(fT\fVf(HA.   11^A      LHǅ     jj j H H HLHC	   LH譮HYX  =i L+f(fTf.v3H,f% fUH*f(fT\fVf(HA.   11^A      LHǅ     jj j 蛜H H H}1ɺ   LHH5$| Hǅ     迪LL  L謭H HԢ   zH3A   HA   HCz   Hp 3
  HHHL+A.   1A      1LHǅ     fjj j 觛H H H]HHmA	 LLH¾  HˬHH8A	 H;HH¾  Hx蚬L-A	 H3  A   A   LL褡L_	  HHHLHZfӁ 5 *Yǁ f(\Y? X f(fTf.v+H,ffUH*f(fT\fVf(HA.   11^A      LHǅ     jj j $H H HHHL  HNH肠H;  HHx'H3A   LLA     8L萘   LЖ#L迖fD  HEdH+%(   d  HeL[A\A]A^A_]w    H   HH՚L1LL轞HfInľ   LfHnfl H8LH=HDHyfInHxH 营L+L 1ɺ   H5~m LHǅ     զL  LHS>	 辩H H1L+H0
   L聞LLHǅ     EL  LH>	 _H 蓞H1L+蒝Hp
   L!LLHǅ     E趞L  LH>	 H 3H   L+/H0
   L违LLHǅ     ETL  LH=	 蝨H ѝH   L+͜Hp
   L\LLHǅ     EL  LHG=	 :H n   H3A   HA   Hc=	   Hp*LfL*跓} 6  YL莓HHHD  H!HL+A.   1A      1LHǅ     jj j H H HLHLH;	 LLH¾  HH5Hn;	 H;HH¾  HxЦL-<	 H3  A   A   LLڛL2Lz  LitHǅ    <  HH{ -1|  %)| f(\L;YX{ f(fTf.v+H,ffUH*f(fT\fVf(HA.   11^A      LHǅ     jj j CH H HvHL  LHqH襚H;  HHxJH3A   LLA     [L賒H臐HKHpH茒   HHhSH`gHEdH+%(   k  He[A\A]A^A_]D  H1ɺ   H5xh 薡z  1H5?q     ffADPHH	uHcEIxH Hf  1AHfA|D  H1ɺ   H5g   HHHHA.   1A      1LHXRy Hǅ     jj j LH H HHHXL  HvH誘H;  HHxOH3A   LLA     `L踐 H1ɺ   H5f H1ɺ   H5f LLpHTLpHe HfH*fD  HfH*zfD  H1ɺ   H5@f ^iDHPHiHkHHH0HHHlH HHH)HH<H<H0HHHHHHsHuH[H]HCHEH+H-HHfUHAWAVIAUIATSHH8dH%(   HE1H   MM   LuIHE    L7LLLH&H}LeGtDDxDHEIE   LeH;  H4	 LH}GH}>H@ Le1ɺ   HE    H5l L֜LLHH54	 H}Lu1ɺ   LHE    H5l 薜1ɺ   LH5gc HE    xLLLH'H}螔H}蕔HEdH+%(      H8[A\A]A^A_] 1Hip     ffATDHHuHuIL$HcFH Hu%H)   1fE|$fHf     HHHUPHUH袎HH1HJHfUHAUATSHHLgHG    MtL   LfH   k   t] H3A   A   H3	   HI:LkLcMt]L腋HL   [A\A]]fD  ËH3A   A   H3	   HIݒLkLcMuH[A\A]]HyHmff.     UHSHH_HG    Ht"HڊHH]   X     H]f.     UHAVAUATSHH L/LgdH%(   HE1Ak   tjLwLH]HHLQH赗Hپ  LHs1	 讜H}HEdH+%(      H [A\A]A^]D  L蘛H}E11H0;   HE    jHELHEjtEL݉LeȃtTtoH;L  H0	 H}Oef.     LeHuȹ   Hh LfHuȹ   Hh L؛fD  Huȹ   Hh L踛t莋HHfD  UHAWAVAUATISHH   LoLdH%(   HE1Lt(HEdH+%(     H   [A\A]A^A_] L0Hǅ0    L΍LLSHHLH()L@Hƺ
   L貏DhEDcH8HE   L8H(  H>/	 L~H8貏Ljt.L^1Ƀk     H5uf L?D  1ɺ   H5Qf L"H;L  H.	 L#  	w
H 4
   LL;LLLHǅ8    EaL  LHW.	 誙H8ގHj   tbHǅ8    LOLWtcLK   L蛆   H;L  H-	 <H8pHH0\    LHu1ɺ   H5\ L@    H5e Lԕ    1ɺ
   H5e L貕JD  H8   He L蝘5     HxHcEH Hu1p x DifD     LHH ʄHH HHfHfH}HfH> t&UHSHHH?HH]H2fÐff.      UHSHHH?討HH]Hx     HHHpHt5UHSHHHP`HtHƠ  lHHSH]    ÐfD  HHHpHt5UHSHHHP`HtHƠ  ̕HHSH]    ÐfD  UHATSH HwdH%(   HE1HtyL   Hp  HL LHE    1HEHCHtHS`HtH  H}舎HHEdH+%(   u.H L[A\]&fD  HEdH+%(   u	H [A\]fH~01f u oF   f.     UHAWIAVIHIAUATSHH覍I9snI  p   I4fJ   HHL      s   IM9s+LHCP   (qpt^qu҃xd~H[A\A]A^A_]@    uHx	uH	   	   HXb ĊuH[A\A]A^A_]Ðx,oH[A\A]A^A_]    H@0xKH[A\A]A^A_] x0c*HIvHRff.      UHATL   SHLH dH%(   HE1耓H}E11H0;   HE    RHELHERtULŁLe؃   tcH;L  H(	 H}3HEdH+%(   uqH [A\] LeHuع   H` L̓f.     Huع   H` L訓 Huع   H` L舓`^HfUHAWAVAUATSHL0  L   H   ,dH%(   HE1=LLҋt.HEdH+%(     H   [A\A]A^A_]f     LLHLIN~L L牅(LHLI~L牅节HHH9Hw;r  H9tHH`  M9tnHL@L
   LHDpEDH8HE  HH8  H&	 ёH8D A9tfL8Hǅ8    Li1E>  A     H5] LpH;L  H&	 YH8荆(9tx  	   HL@
   L8LH wLLHǅ8    E茆H LH%	   ѐH8Hj      , HEdH+%(   i  H   LL[A\A]A^A_]فf     H+ Hy{ 4%   H5k\ L<    HxHcEH H  p x Dq1fL@ LL8ѐL(#}LA踐L牅 
}LHǅ8    聂 (9      H8FA9   FHE   t   HzU LeH8H   H\ LGH8@u1ɺ   H5R LH;L  H#	 H806 tfH8GHA9HtfD     H5[ L褋/    H5[ 1ɺ	   L肋H8A9V8I@ LH HzH HH~HHHHfD  UHATSHHPHtHHCP    PLcxHCx    MtLB{   LzLcp1ƃ    f   HCp    MtL{[L   A\]z [A\]ÐfUHAWAVAAUAATSHH   LgxdH%(   HE1HGx    MtLz   L*zHǃ       HL81ɺ   H5GZ LHǅ8    L0H(Ɖ1ɺ   LH5O Hǅ0    襉LL  H(莌H0H8趁E   Et\H   L@
   L+L:LLHǅ8    EρL  LHE!	 H8L   yH3E1E1HR!	   HILkxLcxMt=L]yHEdH+%(      Hĸ   L   [A\A]A^A_]x@ HEdH+%(   uzHĸ   [A\A]A^A_]    H   L@
   L3LBLLHǅ8    E׀L  LHU 	  H8TzHHH$Hf.     UHSHH_xHGx    Ht"H:xHH]   w     H]f.     H   @ff.     H   @ UHAWAVAUATSH8dH%(   HEH   @u(HEdH+%(      H8[A\A]A^A_]fD  LeL71ɺ   H5PW LmHLHE    ̆1ɺ   LH5M HE    讆LL  L蛉H}~H}~H3E1ɺ  A   HQ L	|HH   LLppILx8HE    tHEHuLHEAH}i~H   {LvxH[HxfUH   HH dH%(   HE1HcH  H}fHnflHƠ  )EǀHHEHH}HEdH+%(   uHpxUHHHSHH   HH  HƠ   HHHSH]UHHHSHH   HH  HƠ  0HHHSH]U1HAUATISHHHodH%(   HE1HF)EH=tfH~H)HPHHHHHF1H=tfH~H)HpHPHHI$  M$   HUH}LHMH  I$  H}HULHƠ  HEHEHEHUfoEHfo)EHtHTPfH~HHMHHtHDAfH~HHSHCHEdH+%(   uHH[A\A]]v@ UHAWIHAVAUIATISH]H(dH%(   HE1HvHLHqLftr1ۉEI   HEf     LvzLIvHUHI  H  τLIVI螁Lx9]uHEdH+%(   uH(L[A\A]A^A_]u@ UHAWAVL}IAUIATSH]H8H}LdH%(   HE1R   H赁HL|HqLzvft>D1    LwH}HLoHƺ  L/D9uLopHEdH+%(   uH8L[A\A]A^A_]tHff.     UHAWAVAUATSHHx  H`Hh   dH%(   HE1HHǅ    HHǅ   HzuHǅx    HpHu$+   HxHxH9p  xHhzvHI}ffv1LtHHpH@
   HHx
   HމEHHHxH4HHcZHcULDMtp)HL9kLH1ɉLXHY HDXHxHc4H H  H߹,   fHcUH\   ƅ  E1   L   @ ALt&HA   LHH4P PvDLnsHpL0
   HvwH
   LE_wH4HLcrHcULDMt_D)HL90H1DL7HJ|pHc4L4 H  L,   fHcUH  AL   f;  HA   LHHm PƂDLDW}<AV9ACt&HA   LHHN PtE1LrHpL0
   H'vH
   LEvH4HLcrHcULDMt_D)HL9H1DLHJ|pHc4L4 H  ,   LfHcUH   AAtfHA   LHHhl P老 HHHlaHLlH2f     AC   f;AD      HpHxHH9HA   LHHk PڀD  HHH=l     HL!lHf     HA   LHHL PrJD  Lpp1LHoƅ HH9+HKH9H    HHMmH`HHtHEdH+%(   uOH`Hx  [A\A]A^A_]    HHH%kHHkH]dnf.     UHATSLeHLHpdH%(   HE13jH]HtCHuL	zH}Htot1LAlLxHEdH+%(   uHp[A\]D  HPmHHfUHAWAVAUATSHH  HXdH%(   HE1Ht
XuHu+HEdH+%(   7  HĨ  [A\A]A^A_]fD  L1ɺ   L+H5B LHǅ    zH1ɺ   IHH5L@ Hǅ    H`yLL  L|HrH rHH3A   HA   H	   H8qHCXf)HHH)JtH@Hǅh    ǅT    H    xu,I}rAo]pTAo   ))LL@ƺ
   LjHS0EHHcRLlDiHpE  L+1ɺ   LH5A Hǅ    xL  LHp{Hp1ɺ   LH5I L+Hǅ    \xL`1ɺ   H5> Hǅ    L4xLL  L!{HUpHIpH3  LA   A   Hc	 pT
   LiDh	EDthHxIE  HsHX  HS`H  HƠ  HTyHsHXIHtHS`HtHƠ  Hur
   LLL+2oLLHǅ    EoL  LHE	 zHDo
   LL3HXnLLHǅ    EroL  LH	 yHnH;  HxH1	 yH3A   LA   HR=   lLfHxnH`fHpnHhHhH9@  HhHHzIŋ@uIuL;qLoHTqpLqAoM8AoUH))f.     HHH< D  fHHfAH; H9uHcEINH H   HsH)   1fEnfHHHǅX    E1f     1fD  HE ffLPHHuHs0HH(HcFL4 H   J1A.   fD HHHcEL4 Hu}HpJ1)   1f0Djfx HǅX    E1HD  H8e    HLHXcHXH    HLLcHmfHHLcH5gHHHHH+HHHH	     HtH  Ðff.      UHAWAVAUIATIHSM$   LH   dH%(   HE1I$  H  uLL@HI$  ILH  tHLM|$ H
   H HjLHHǅ     EukHپ  LH
	 uH j
   LLM|$ jLHHǅ     E"kHپ  LH
	 kuH jH
   LMt$ 6jLHHǅ     EjHپ  LH)
	 uH HjH
   LMt$ iLHHǅ     EtjHپ  LH		 tH iIt$ HA   A   HA   ,gHbHEdH+%(   uH   [A\A]A^A_]NdHHHHff.      UfHAWAVIAUL@ATISH H   HH dH%(   HE1) fo\ )0L ID$ L
   LHhLHHǅ     EiHHH	   _sH hID$ 
   LHH(HHhLHHǅ     EhHHH%	   rH 'hID$ 1HH0H=tL)HPHpHH
   LgLHHǅ     E3hHHHb	   xrH gH8M|$ 1H=tHH)HPHpHH
   L#gLHHǅ     EgHپ  LH	 rH 5gH    M|$ M   IcHI$   fHnI$  flH  ) iLHHƺ
   H yfLHHǅ     EgHپ  LHD	 WqH fM|$ HA   LA   H5   cH^HEdH+%(      H   [A\A]A^A_]fD  HcHM|$ I$   fHnI$  flH  ) hLHHƺ
   H eLHHǅ     EfHپ  LHZ	 epH em?`HSHjH鋽H颽H龽HսfD  UHAWAVIAUL@ATIHSM$   H LH   HdH%(   HE1I$  H  lnLHID$ H
   HidLHHǅ     EdHHHM	   CoH wdID$ 
   LHHdLHHǅ     EdHHH	   nH dIcID$ HfHnI$  LflHHƠ  ) fLH(Hƺ
   H ncLHHǅ     EdHHHB	   HnH |cHLMt$ HcfHnI$  flH  ) &fLH(Hƺ
   H bLHHǅ     EmcHپ  LH	 mH bIt$ HA   A   H5;   %`H[HEdH+%(   uH   [A\A]A^A_]G]HKHbH~H镻fD  UHAWAVAUATIHSHHhdH%(   HE1ht*HEdH+%(   i  Hh[A\A]A^A_]     HLpI$   LL}, HfHnI$  flH  )pdLMt$ HxHƺ
   HpfLLHǅp    EaL  LH 	 (lHp\aHP         uLMt$ 1ɺ   LH59 Hǅp    hL  LH: 	 kHp`H@$   I\$ 1ɺ   LH5=9 Hǅp    shL  HH \kHp`a Mt$ 1ɺ   LH58 Hǅp    "hL  LH kIfD  IMt$ 1ɺ   LH5a3 Hǅp    gL  LH7 jD  I\$ 1ɺ   LH53 Hǅp    gL  HH sjYZHHH5HLHhHUHAWAAVI   AULmATILSH8dH%(   HE10fE   LLLLuLM|$ LH]1ɺ   HE    H5: HfLHھ  L}iH}^H}^It$ HA   A   H92   [HVLTHEdH+%(   u'H8[A\A]A^A_]     LL5X7XHH酸fUHAWAVIAUATI   SH   dH%(   HE1H0HHH dHLLA|$ƅ+ uAD$8+H`H H#\E1A|$8 I   tMD$0IT$It$HjID$@@  IcD$  AD$H    AD$L8  w  ID$I9D$   H@   1Hǅ@    HHǅH   bI   IT$HHPHI;T$   ,  @ f.`= z	HtX< H,HfHnI  HHflH  )P5_HPIH@LHHXPHt#HA   H6 LBZH@HM@
   DHH ,aH ,LHAgIT$ID$ HH)HH9s>ff/\; H,H    LHf     HLI^ }TLP1ɺ   H8H53 LHǅP    bL  HH8eHP[H8ZH@ZH +1LHxH@QHEdH+%(   4  H   [A\A]A^A_] HPI^ 1ɺ   IHH53 HǅP    9bL  HH "eHPVZ2HPI^ 1ɺ   IHH5q- HǅP    aL  HHG dHPYAD$LHPI^ 1ɺ   IHH5- HǅP    aL  HH jdCD  HPI^ 1ɺ   IHH51 HǅP    1aL  HH dKD  fHnI  I   H@flH  )@[LmHHHƺ
   LI^ H@)^LHǅP    EHPIH4YL  HHR }cHPX_@ I~ IL$@  H Nc/4SHH!H(H*HڲH8HH.@ U
   HAWAVLuAUATSHH   H(wdH%(   HE1FGL]D`
ED6PH0EF  L@Hs A   A   H   L{WH{ H0  Hl /bL`L{ 1ɺ   H5% LL8Hǅ`    ^1ɺ   LH5) Hǅ8    ^LL  LaH8VH`VHs LA   A   H(   ,TH(   1HVLNLNH0VHEdH+%(   ucHĸ   [A\A]A^A_]f     foxJ @h _ IHx@LcmMu1EgfCD/@ MLLzMPH3H?H^H/fUHAWAVAUATSHhdH%(   HE1u(HEdH+%(     Hh[A\A]A^A_]fD  Lm
   HLZD`EDMHpIE   Lk Lx1ɺ	   H5( LHǅx    \L  LHp_HxU   MHs A   HIA   H,   TLkLcMtL%M   LLHpT    1H0     ffADVHHufoH AF"h _ IN&AFLc}Mu!J9)   1fEffHfD  MHLLKHNH鏯H鏯H馯     UHSHH_Ht*HG    H*LHH]   K     H]f.     UHAUATISHHLoMtHG    LK   LSKL[OfuH[A\A]] LH-CHߍpH   pH[A\A]];f.     UA.   A   1ҹ   HAWAVI1AUATLeSHH@Lo LdH%(   HE1HE    jj j #LHEH HL}  LHELH S]H}LmRLHE    PLHE    OHu   LH* ]A~   LL~HuHULHE    MHuHŭL[OH}RH{ LH   \Hs A   LA   H   QLJH}QH}QHEdH+%(   u0He[A\A]A^A_]fD  1ɺ   H5  L2Y5L)HlfWI(\(HHHIHWHHHIH	HHHIH	     UH\ fHHpHAUATISHHHH   GfHnH0fHnflG    HG0G H:H{8HtHPH5K	 H@Htz11LO2H'YM$$A|$tHe[A\A]]H5	 H   HH%2IT$HIL$PL 2L7T[XZHe[A\A]]    	 t%H	 H=	 H0oNH5	 Y L-	 L!Kt8qLH	 N    	 t%H	 H=O	 H0NH5@	 3 L-	 LJtpLHn	 NIiff.     UHAUIATSHH   HdH%(   HE1PEH]IHtLHHPHULLL4XHHPHEdH+%(   u-HL[A\A]]fD  HULHLW*IIƪIêI鷪fD  UHAWAVIHAUATSH  H8HPHXdH%(   HE1Ifu$HEdH+%(     He[A\A]A^A_]fHIv A   A   H HǺ  H MA6
   H@HߍFARD`EDEH`IEw  HIv A   A   H   HH-MI~ H`  H Wfo@ LH8fL)))) )p)eKL@LLPLpLLLLUHLLL0HH(EI  I   LH  ULHH"LDHLh   HiųDLH D)i  A)$G1LKH   LHKH1LHJL   LLhJHHLH=LEHHHHLjDQ1LMf JH0
   H%KL@HHǅ    ELKL  LH! UH0K1LMf 2JHp
   HJHLHǅ    EVKL  LH UHJ   LMf IH0
   HbJHLHǅ    EJL  LHU @UHtJ   LMf sIHp
   HJHLHǅ    EJL  LH THJI^ 1ɺ   H5X LHǅ    QL  HH- THIL?Iv   H0A   A   H IHXfHǅ     )HtHAH+H )  LPLZFfH-g= @Hǅ    *L@fnLHH(fnXfbLLHf^= )^ .qLFHfL@Hfn*L^XfnH)  fbHf^< )pHPHIEHD}@HD?HHPDFHPIHPXzKHPȉGHPf>AWDXDAUATH(SH@HFH HFH:JHrHHILL M9   5; X XAYT$A$$Pf(SXAY\$IEf(SXAY\$Hf(SPHHL	D	뉝I M9eLMtH(LL)>HHtH H)|>H0>H>H`D`AD>HHE   I~ H@  HC PH8   1LHFH`FH T>    HPH Hpf     fHHfJH9uHcEI}L< H   1EefCt=6D  1H>     ffTCHH
uH`HKHcPL,HuTJ))   1fDcfHf     H(Hk@ LHm<b     HHpLQ<H?H鑡HyHeHMHAH5H)HHqHYHsfUHAWAVAUATSHXLg(dH%(   HE1MW  H   LmGLLHI$HExQ  L=
&LE1L9H;LeEHL?H0H{0)AH}HtHPLs(qHEHMILLHExޠLeLLHE    q9M   I$L}LeLLP(LuMILPH}LuHtHPILPH{8Ls8HtHPILPHEdH+%(   uiI$LH@HX[A\A]A^A_] HEdH+%(   u<HX[A\A]A^A_]f.     L=$LLeHE    L8H=H隟;H>H|fD  UHAWAVAUATSHH   HHdH%(   HE1HtHHCH    PH{@HtHHC@    PH{8ƃ    ƃ    HtaHPtWHs8HEHPHHP HExteH=%	  G     Le=E1L]Iäf.     1HEdH+%(     He؉[A\A]A^A_]f.     H=	  LuF  MtILeH	 LLHExLmH#LHE    HHX6M	  HXHPL`68wIIE LLLHExLuHXLHE    6M  IH5< L1ɺ   LhLx HE    (HLLAH}AS@E  IE LPH{@Lk@HtHP}IIE LLLHExLuHXLHE    5MQ  HxLpLH8HIPHxL= L1LHH@LB(   HE    LHFGH@LHLAH}Hc?H$  ILLP1ɺ   H@(LHE    HHFLLLHHHEHU@    D:HXL4H}>HxL1ƃ   H5 HHE    H@LB(   HE    LHNFH@LHLAH}Hk>H  H}Ht#HP(A9,  H}HtHPD  [lIIE LLLHExL}HXLHE    3M	  HEL}LHHHIP(LuMEILPH}LuHtHPILPI]  LPILPHxHtHPHpHtHPLhMtRG@ IH5U L1ɺ   Lx HE    DLLAH}A=E   ILP   @LLHIE HExtyHXLE12H;Lu>HL`8H}IHtHPIPuTL`   MIE LPIL1P HXLLuHE    52yH=  L= S  IE LLLHExKL}HXLHE    1Mt  IL}LLP0H}G  ;H莸1ɺ   LL+H5 HE    ]CHP1ɺ   H5	 HE    ;CL  LHP$FH}[;H}R;L+1ɺ   H5. LHE    BLL  LEH};   3H3E1E1H   HI:LkpLcpMt`L&3   L2I    :H1ɺ   H5 LHE    ZBLL  HGEH}~:ILPH    H= 6 HXL10H}8: LPH{HLsHHtHPI    H1    H=] 6 D:    H     LT6    IHP   1H5} H@(HE    HHHAHPLLHHH5 H  HHMXL=HUL!H}DHXL/H}!9AYAZHEH5 1ɺ   HHHHE    @HxHHHP(tEIHHLLP(HEx  HXL.ƃ    H}8Nƃ   H5\ H#  HP1L[14AHuDLHP0H5% HI  LXHHMLHPLAWHUeCLLA-_HMAXE   HcA  H@Ly   HLHAH@M4LA     
   H0I9tEHPuHxH5 s.  HCHS@   wD*DH@DLHf   ff   HMufEtfAwf   )fH5 H,  HXH}6;AfD*0HxH5 -LHE    ?4HCx  H}wtD6   H H= 2H5 HPy    Hr H= H04H5 HEHXLD0 ,E   `p    H H= H0v4H5     H H= H0E4H5v HCLH0200L5 L0 VLH 4L5q L0MVLHZ 44fǃ    ƃ    L5, Ll09VLH @4 HɓHדH#H'H&Hē/H鱔Hy齔ڕH~HlH鍕H阕H錕2H鬗H-H黖HɘјڗڔH\ff.     UHAWAVAUATSHH   HPdH%(   HE1HtHHCP    PH{Hƃ    H+  HP  HsHHEƃ   H HHP HEx@  HH(E1H(H L8(H@LHHIE PH=B  L5; =  IE LeLLLHEx  H(L(L@HǅH    MtPIH5 L1ɺ   Lp(HE    :LLAH}upC2LHMt	ILPL8H@HtHPMt
IE LP   HUdH+%(   	  H   [A\A]A^A_]@ 1H   W/H  K/H  HH5/LHMnILPH{PLsPHtHPLHMnHMt)IE LLHEx   H(L,'LH1(f     H(LLuHE    &L@LHMpf     LmmHMIE LeLLHExe  HLHH(&}    H	    L-    LmH(LHE    =&LPMIE H LPLuL=	 L1L	   IH@(HE    H7HLLH}A/H}HtHPIE EuIE LP{    Lp(HEL	   IH1HE    HD7H LLAHExtRH H(G%H}N/@ HALLmHE    HH(%fD  H=`  Lu[  MtIHG LLHExt/H(LH$H H$H}.L(L}LHE    LL $H LLXk$H}r.MdH HLHHEx  H(LE1"$IE L`HhLP(LhHpHHEuM}Hǅp    z+E   AFL5$ Ml9    I?A$   $   H{$ wH8  IM9tVI?A      LwH/uI7   FHE    HLw1HpHEHp@-HHp}*HpG   8  
z     H5 S      ƃ  Hp,Hh(u#H5 H  H(Hh0H`HtHPHXHtHPLPM0@ H(LLmHE    ="     L=  H   L#t0hH HLHHExtnH(L!HpGH   L"HpGf     I7$   FHE    H6LmH(LHE    j!LxMvHELHHIE PHEHtaHHH5 1HLr(   HE    2HHAք   H}*H}HtHPIE LPH   H5  !HpGH   H5  !HpGlD  IE L    1H5 H@(LHE    H2LLLHHExtBH(L	 H}*   -H= H0(H5 .HEH(LD0H})H})EHEHH51 1HHLr(   HE    @1HHAքgIE L    1H5 H@(LHE    H0LLLHHExHEH(LD0H}(H}(EHq H5B  HE1H}Lg5HEH  H  (H    H= #%H
   H5
  iHp]#Hp	   H5 Nt2H 1LHP@HEH   H   H}(1Hp   H5 N   dH HLHHExt&H(L1HMH11LuLHuH(|LuMtH 1LHHU$ILLHP(HUHEztH(L*H}1'vL H0Lj$H(LH3LL"HEH   H   H}&H   x tHH tH;(HL2LH   g*HMt/ILHLLHEx   H(L`E1LHLmnILIE @
H   H   BA2H   HcPHHLIU LcjMu/Bi    D`H(1LLmHEdKD- HrHHHH   H韊H颊HH銋HLH鱊H郋H阋H逋HLH钊H鎊H鎊H鄋HLHHߊHlHЊHLH HLH饊UHAVAUATSHH0dH%(   HE1VH      LmHE    L!   f  f  1ɺ   H5  L+L3Le1ɺ   H5  LHE    +LL  L.H}Lm#L31ɺ   H5  LHE    +1ɺ   LH5  HE    h+LL  LU.H}#H}#H}z#t     LeL31ɺ   H5  LLmHE    +1ɺ   LH5@  HE    *LL  L-H}#H}#L.LH0  -#Le*   H3E1E1H   HI"LkpLcpMtL   Ly    uƃ   HEdH+%(   uMH0[A\A]A^]D  1ɺ   H5   L*!D  1ɺ   H5  L)H麈H鷈HԈH     UHAWAVAULATLSHH  dH%(   HE1G L-LH0  !L)L31ɺ   H5s  LHǅ    1)1ɺ   LH5j  Hǅ    )LL  L+H1!H%!HCLp  Lb f  H@H   
   L   HH0 
   LEHHH o L4 fInH1A.   A   LH  HHǅ    fHnHpfHnfHnH=  HPfHnfHnH`flflfHnHHH+  f) *flfHn   fHn0 1Y  fl)))) )0jj j !HH H%fo0fo L@Lfofo LHHfofo)P)`)p))):  HH.H;L  H$ )H@   H3E1ɺ  A   H HILkhLchMtL   LHEdH+%(   uHeH[A\A]A^A_]BH鲅HʅHff.      UHATISHH dH%(   HEH  Hp  +H3I$  H}HEI$   HE    HƠ   HHHEdH+%(   uH H[A\]|I銅UHAWAVAUATSHH  dH%(   HE1H    u/HEdH+%(   T	  HH  [A\A]A^A_]f.     LL'1H   LH5  Hǅ    $Hp1ɺ   IHH5!  Hǅp    H$LL  L'HpHH3  H0A   A   HHH HHǅ    HHH Hǅ     HHHHǅ    HHHHǅ    HHL   M     Mt$LHHƺ
   LEHHƺ
   xHcUĉ4HHLHHIƅ  HLL+1ɺ	   H5  LHǅ     #L  LH	&H=At$8
   HV DhEDIE  HLH;  HH: %H3A   LA   H[    LHHM$$M  ID$DpADIE  HLYL+1ɺ   H55  LHǅ    !L  LH$H1ɺ
   LH5  L+Hǅ    !L1ɺ   H5  Hǅp    L!LL  Ls$HpHHPH3A   A   H   HHZH@It$0
   HHIt$(
   EHHHHcUĉ4HLlD~IE  H L L31ɺ	   H5`  LHǅ     L  LHt#HH{IT$ 1E1H5' 莂H3HA   A   H   WAt$8H;	IL   LMAD$8L L   Hǅ     LfnH{   H{It$"H{LL   L(1LLǝH1ɺ   LH5  Hǅ    H\LL  HE"HyH3  LA   A   H  LH(BH{YH -LnHPH  D  fHHfJH	  H9uHc4INH H  HA,   fDHHHcEH H  H)   E1f8EnfD@@ 1fD  H  ffATEHHuIt$IM LcFK M  E1EufFAf     1HU      ffATFHHuHcMI~4H	H^  1EnfO    1H5b      ffATFHHuHc4I~H H[  H,   f0HxHcEL, H  J/)   fAN1fH    H   褺  HXHLH @H4Hx HHHZHHB HHH2HH HHLLHTfD  HHHHfD  HLHHH HHHHHHuH|H,|H|H |H|H|H|H|H|H|H|ff.      UHATSHMH{(HtHHC(    PH{8HtHHC8    PH{@HtHHC@    PLchHCh    MtLo   L
H   C  HjH2H[A\]fD  UfHAUATSHH0L   HHwHOHWHG    G G,fH   C8CHCXChCx11ƃ    f   fH   H   H   f   ǃ       Hǃ       ǃ       Hǃ      Hǃ       Hǃ       ǃ     ?Hǃ       Hǃ       Hǃ          _H   Hǃ       HH   Hǃ       1H  Hǃ      H  Hǃ      ƃ   LdH0  XH[A\A]]IVzI?z@ UHAUATSHHH0  H   H  H  H   H   H   H     H   H   H   H9t	HtH   LcxMtL   LJLcpMtL   L,LchMtL   LH{PHtHPH{HHtHPH{@HtHPH{8HtHPH{0H{(HtHPH{Ht!HHxouHH@H[A\A]]H[A\A]]Iy     U   HAWIAVIAUATLg(SHH(fo dH%(   HE1Hw fGLHHC0   @   HS0HC(  HHL,IE fHnH  fInfHnflLkxflK8LCHKXChǃ       HLH   L   H   HL   L   L   Hǃ       HE   !   11HI
L  L   L'1ƃ   H  1f  Hǃ      L}1LLLE	LH  HtHHRDH   H   HtHHxot+L  HEdH+%(   uH([A\A]A^A_]fD  HP;IMxHxIxIxIxI|xI|xHEOxIwff.      UHATSHHL  dH%(   HE1HǇ      LeMt%I$HxLtI$L`Al$   H   SH  HtHHxo   H   IL   MtL   L8H{xH{(  LcMtBI|$@3A|$8    I|$HtIt$(H)LxP   LH[HtRH:HEdH+%(   u~HH߾   [A\]fD  I$LPHP D  HEdH+%(   u4H[A\]     AD$8 I|$0@I|$HEMI:wff.     UHATASHH0dH%(   HE1uE E       A tC`EHC@Lc0H(I9   EUAD$ A$Lu<UH(E    E    AT$ HC0} uXHEdH+%(   ujH0[A\]HuI|$AD$HC0fD  HwPH}cEUf.     H}E 뙐HuHt  Hvff.      UHAVAUATSHH H0dH%(   HE1H9{t@HC8HSHIH9   El$A   A u8H9t@HG؀ HC0   HEdH+%(     H [A\A]A^]ÐAT$S`H9u  IHCHHxHPHSHH     H{8HC@H  HC0tƇ   HEdH+%(      H  j LuLA|$ LuiH{PLhH{0HC8 LbI       G HEdH+%(   u$H H [A\A]A^]     It$4Hu     UHAWAVLuAUIATISHH   <HwLdH%(   HE1HCLp  LgtL[HsHt2HS`Ht)HƠ  Lz    tƃ    E     11    uH9   tG    uH   H   H9j  ƃ    H         HH   ӄ    Lpt#A   f   fD   Lp   L{P   
HMt+ILLHpx  H5LE1H;LpHLHpIHtHRIDRE%        HP1ɺ   HǅP    HH5  H0AH  @  H  @  L;1ɺ   LH5S  Hǅp    L  LH0HpHP
1H`}H   HtGL;1ɺ   LH5  Hǅp    L  LH   wHpH{H<E11H5( o   L;u#    tH   PX       H   @  1ɺ	   H5  LHǅp    HP1ɺ   H5"  HHǅP    H0L  LH0HPHpH3E1E1Hߤ   LHH   HxpHP8LH{E1E11LH   LHEdH+%(     Hĸ   [A\A]A^A_]f     H59LL}HE    $H{@   H;HHs@1Hs@   LpH0H0HHt(HLHpx%  H5L1H;HpmHLBH8HHCHpHtHPHHD_E]  X 1ɺ   H5  LHǅp    
HP1ɺ   H5  HHǅP    H0
L  LH0HPHpH3E1E1H   LHLHxpHP8    H1ɺ   LH5q  Hǅp    H0-
LL  H0HpJD     H   1Hߺ   zD  1ɺ   H5]  LHǅp    	HP1ɺ   H5  HHǅP    H0	L  LH0iHPL   HpH;L  HР 3H3H0E1E1H|   BH;L  H H3E1E1H%    L~HLHxpHP8LVH0J_D  HPH0BA,HPH  A    HcPHLPHcVfD	HyHuh1ftDx1fD  "HPH0BAHPH  A    HcPHLPHcVfDHyHtHHH H(lHPH H(dfHHH   H  HI
H   LL09  LHI<1ɺ   Lo   H5  AE   AEfAE(L+Hǅp    4L  LH0
HpLPJL;1ɺ   H5r  LHǅp    1ɺ   LH5  HǅP    LL  L	HPHpH3E1E1H   LLHHL!.@ HEH5LHE    H0fH0H#kHJkHikHJkH_kHikHQkH_kHjH-kHkHkH#kH	kHjHk@ UHAWAVAUATSH   HhdH%(   HEH@V    ƅg HIg      ƃ    t       HpLmHǅp           B  HsPH5  HLP0HpHEH}Hp       HpWAA)DHI4$N)ȉ   tF  D)LNIcAȉH|GLbHpfHCHhLHߋ  g t1HEdH+%(   J  HĈ   H[A\A]A^A_]D  HEdH+%(     HĈ   [A\A]A^A_]     ƅgƃ     H>HsPLHP0HpHEH}Hp    Hp_  WtUI4$E1N)ȉ   HH5  08  I4$Hpƃ   NW LsP7HMt(ILLHEx>  H5LE1ILu	   1H5D  LLxH@(HE    HPeHELLHXHHPHEx   H5sE1HXLuPH}WI1LLP@HpHEH}Hp.ILPILPHpGE1V     HpW   H   H5T  tƃ   I4$HpNW!    H5LL}HE    H=ع  LutuMIH LLHExt"H5VLHP7HPH54LLuHE    HP	HPHp     H=J nI4$NNHWfHsfHRfHfff.      UHAWIAVAUATISHH  HhLvDdH%(   HEHLp@xHH  H@HpHHH H  Hp  HHZ  HcILpH  H   LHH  ]Lm fHHH  HǅP   Hǅh    XMj  E1E11LH`ELeHXPH;`tH`LH=G  HhH`N4    HH)HL9  K44H7    D(LhL`HII9   H`HhE,$H9uHXHH)HIHPHII9|  H9  K6L9  E1E1H5  HPE,MlH  H   LXL`Lh6     j HPE11j ALH`Y^LL:f   HL@
   LLoHL
   EXL4HfInޘ1H  fHnfInHfHnH HHǅ0    flfHnH%  A.   fHnflH) fHnHfHn1fHnHfl) flfHnH  )0flffHn)P*fl)L0Y  )   LjA   j j H0H HbfofoLLfoPfo0LHfo fo )))) ))0  HH{ LH   HHH   E11H5[ ]HHs E1A   Hߓ   HH 	   	  DxA  HXAEffH*P*H    H^KIAEL  HD,L0DBL   Hǅ0    f H HHxMcGE1E11LLH0IIH`HhI9M!H
  HHHǾ   HE10HHHA   DLHHǅ   A   HPAI7XDZD)D;f   P  HHtHPHC j   z  HuHIV  H    HHxff*Y>  f/	  f.  zItX  L,M   LNH)  ff*Y  f/W
  f.  zHtX1  H,LxLp1LI)H@1LHL   LHI)LpH`H@LHT   H1LIsH@   LIF^   LINH    LI;1LI.HH   LLHHIF1LIH    LI   LIH@LLIF|   1LHJLH67  LxHp1LN4`H@1LHnL   LHI)LpTH`H@LHT   H11LI$H@   LIF   LIH    LI1LIL`   LIMf1LIH    LI$   LIH@LLID$1   1LHLHx{H HXHhHtH)HHHEdH+%(   
  He[A\A]A^A_]fD  HL@
   Lc LL0zLLHǅ0    EL  LH XH0HLLc 
   $LLHǅ0    EL  LH/ H06Hs E1LA   HG   HC LHxpHP8LL!     ƅh DLHǅ0    L@H0
   L0H HC HPLLHǅ0    EHPLH\   "H0VHC 
   LHHPLLHǅ0    E|HPLH   H0Hs E1LA   H   HC HxHxpHP8Lh u&H D  ƅh@ HXAD$ffH*P*^lHL,HfHnH  flH  )0	H EH0H8ȉ0f     H4HHpD  HLHPjHPIHLPH)HgLP9 I?A      H wHLHǅ    L^   I7U L0N9  Ls 1ɺ   LH5A  L Hǅ0    1ɺ   LH5ط  Hǅ     ~LL  LkH L@H0HLL{ 
   $LLHǅ0    EL  LH7 H06HLL{ 
   LLHǅ0    EcL  LHو H0Hs E1LA   H   HC LHxpHP8LHD  I   HI9LGILHhII    H)LHHXH`ILhH)H2  HP  HKL5 LXHhLH`     \(  L,fD  IHf     ffLXHH*hH*`Nd0^8D  f.(  ztX  H,AIAFM9gDPffA*A*^+f,f*Yf/w\E  H,fD  HHLPHHLPLHH)fD  \  H,L- LY    LBHǅ0    L)sHH0H9)HH9HGL4    HEdH+%(   uH=  HEdH+%(   uH=Y  HSHSH	TH	TH$TH*TH4THBTHGTHcSH@THETHFTHKTHSHRHRHSHTH-TH2Tff.      UHAWAVIAUIATLeSHHhHxH  LdH%(   HE1LuL  L  H  ǅt D  A    E   AoM L)MMfoEo  fW oUH )ELHuH$HE HD$DtHx0o]E$HE HD$HxLLHH LHEdH+%(   B  He[A\A]A^A_]     ǅt    A , Lp  ELLcMi*I"A)AMcIGLEH  E1fInD  flE  AH    H)HDHi   HDHHHHH=  \  Aoe H LHomHuf)E,$HE HD$HxH Lu2oeH ELLH$$HE HD$HxH L~AoE H LHH  ouL}f8 LD  )E4$HE HD$Hx1H  LLHAoE o}f D  )E<$HE HD$HxIE ouLLHHfHnH  AED  )E4$HE HD$HxH  LLHAoE o}f| D  )E<$HE HD$HxXIEA~E LLomHHfHnH  flD  )E,$HE HD$HxIEA~E LLo}HHfHnH  flD  )E<$HE HD$HxH  LLHAoE oef D  )E$$HE HD$HxqIE omLLHHfHnH  AED  )E,$HE HD$Hx&ouA 4$HE HD$f     f  LH  o}H D  <$HE HD$    A HN@ UHAWAVIHAUMATMSHHx  HEHHHdH%(   HE1  I  HtHx   HHHHdHCPHHtHtPHCXIHtLDPAoe I$H)PfI~HXHtHDBLI|$H`HHtHTWHL	HhH9uL9tHHPrHAĄt?HHgHEdH+%(     He[A\A]A^A_]D  H    HHHHHH t^HL8!HMt2ILpLLHpx  H5LH  A   D  ƅ ƅ okPHCPff)pH*H*xf(^  f(^  _f/  F  E1   H<h=H56 HH  LL(LMH   Hǅ    HHǅ   H PHHp  A   HM  HHHLI  M   HLH  II  HHLH  CH@LMf HxHϺ
   HLpHHLHǅp    EmL  LHz HpHH
   Mf HHLHǅp    EHL  LHz VHpLH
   I^ LLLLEL%y Hǅp    LL  HHp#HxH
   I^ HLHǅp    EHL  HHny HpH '  HHH  Hȇ H5ɇ 1HH
  HH I^ @
  1ɺ   H5  LHǅp    H01ɺ   H5Y  HHǅ0    HL  HHH0Hp1ɺ   LH5  I^ Hǅp    xH1ɺ   H5|  Hǅ0    SL  HH<H0pHpdHIv A   A   H(    HHh1ɺ   LI^ H5  Hǅp    H1ɺ   H5+  Hǅ0    L  HHH0HHpIv HA   A   H    HHH
   I^ HLHǅp    ELL  HHp-LHx
   I^ LLLHǅp    ESL  HHyv HpL%  L1ɺ   LI^ Hǅp    hL1ɺ   LHǅ0    LDLL  HL*H0L%w  WHpKL1ɺ   LI^ Hǅp    L1ɺ   LHǅ0    LLL  HLH0L%  HpL1ɺ   LI^ Hǅp    lL1ɺ   LHǅ0    LHLL  H5H0iHp]I^ 1ɺ   H5t  LHǅp    1ɺ   LH5U  Hǅ0    LL  HH0HpHpHI^ 1ɺ   LH0H5  Hǅp    mLL  HZHpH0Iv LA   A   H    LHMf H1ɺ   LH5v  Hǅp    HL  LHpLI^ 1ɺ	   H52  LHǅp    1ɺ   LH5  Hǅ    wLL  HdHHpIv LA   A   Hî    LHHHh      HI  AHy k  HAHuHD  H H7D;xuHI   Hǅ    HHVI  HHH  9IHHL	ttH@
   HH0L
   EHHHHcUĉ4HLlDIEB  HL'I  HHH  H0
   HHHIH~HLLLpHHHLLHHLLLL   1LfH~31   Ǳ  fI~fHn  HHH11HA.   A   HHǅ       jj j \HH HX  LHH11Hǅ    A.   A      jj j 
LH MAIcUHcCLd
E  LxHpHD@E  H@D
   HHX	EĉHPIą/	  I~ HP  H`o HIv A   A   H|    HH5HHPHeH@ ƅ E1LpHLH   L@Hx  HHWHOH      H96
  H} 8 	  GPW%  EMtI(TL`   LHHt=HWHOH      H9  H!} 8 p  GPW
  HD  I^ 1ɺ   LHǅp    H5  L0$1ɺ   LH5C  Hǅ0    LL  HH0$HpHpHI^ !LHOm   HHpHpIv LA   A   H    LHH(u#H5k H  HHtMtI(L	`   L,HHt@HWHOH      H95  H~{ 8   GPWurfH4H8H     HA   H]  H    Hy1HHLIMIHA9t*H0HNI1҉HI9HA9uI9 ]fD  ^ӿ`   ^H,HpH,HxHHILp1LL qLP    I~ H  Hk |[      fIn&IA   H)j@ HHD`DHHcPH|PH  HHpfHHfJH9uIcEHH H  LcCH ,   HHK M  HBA)   D`_    HHH1LpHLp    ƅ ƅ HLMt?IWIOH      H97  Hx 8   AGPAWI  A   <E1 nD  HPH  Hp
f     fHHfJH9uHc4IHH H  H ,   HHHcEH H.  HA)   E1fDEhfDP;D  VfLH5RLHǅ    /LM(ILLHǅ    PHpH5  1HHxH0HHLB(   Hǅ0    LHHxLAH0HpHtHP    HHHLGHLXHxH8  HWHOH      H9a  Hv 8 m  GPW  LHHtHPMf     ILPfIH   1H5S  H@(Hǅ0    H]HLLHH5 H  HHHeHLGL HQHpHxH52LH0ZY    HH HPD  HPH  HpfHHfJH9uHcEIL$L, H  J))   1f0A\$fxzf     Lp@    H/H=H H0 H59 HD  f.     HHHG    HPH9k  HPHH9P  POD  HHƧHG    HPH9J  HPH֧H9/  PD  fnf   FH=_ H0H5P  HHsL襼LHOfD  IuH耼HHHHL_HRHHݦHG    HPH9  HPHH9  PHHHG    HPH9[  HPHH99  PL   H  H= H5 HHLH虻LHHHHLHfLHHMkPaWƅ Hx?LAHHLr6 HHH}HHHLNHHHHHH3IHIG    HPH9u4HPHLH9uPL?uLIH<2H$2H22H2H2H2H2HJ2H&3H2H3H,3Hr4H3H,3H13Hw1Hk1H_1HS1HS1G3H1H<3Hg33H12H3H3H3HE2H92HE2H-2H2H2Hx0Hl0@ UHAWAVAUATSH  tHhHxHPL`LHdH%(   HEHPƇ	   M  ƅs HxE1Hǅ    L%ڴ ǅX    IHtz HxLDpHA     Ac~7AF1w.IcL>@ HhHH  HPf     HLxLM9rHEdH+%(   +  He[A\A]A^A_]    LhHHLPI  LPI  LL H   LLL@LHkL谵ƃ  L豺HLxLt3H HH@Al  z  HK@HS0E1HsLPAju  A   L蟷H@L LشH@HftYLhE11I  I   Hl  Hh  g(LPHL   1LL^L諴H@_HLxJ    t+HhE1H  H   1Hl  Hh  'HC(LCH=(  HH{ L)HNHVHHHHHHS1Ht5II)IrMJIHMIHHHH?HHH=IDHPJ HhHH?HHHHXHPHWHLxJ    t+HH   HSp`HsL   L          tHh    F  H   HW  HLx     tHhL{`fLsL)PH  
HMLHH HSpH LP`HhH_AXLx6 tLPHsLHHKHL`HhHS8LKhLCXAYHxAZLWHLx    tHh      H   HS  HLx{tcLsLfLH Hh)L  HHLLPHHLLHH˽HHS8L`HhHL Li@ tHC0HHhL{0H@ k      LhLLLߛI   LLhi)H L{0H 1HǅP   LHǅ`    oKHǅX    ) foPHD$    $HhH L;HhoSLHPH   )PHLxftHs S0HPF9ЋS,HǅP    NhHPGH   LhIG k     L LL襚I   LL@/(H K(HsLHǅP   LHǅX    foPLHǅ`    HD$    $H@H H耸HLxtHs SdLPLF9ЋS`HǅP    NUHPWH tLhIF k     LL蝙I   L.'HS0HC8H HsK(LH)HH H1foHHD$$LH H fD  tHs S,HPF9ЋS(HǅP    NhHPwHLhIG k   H  L LL襘I   LL@/&H L1LHǅP   HsLHǅX    foPHǅ`    HD$    $     tHHgfLhE11I  I   Hl  Hh  A L   1HVHLxJ    t+LsLfLhH| E1I  I   Hh  H@1HsLLSSLPLLa   LHߺ   ,VLHLx@ tDtHSHs1Hh#  HLxafD  tCL HsLLPL@蒫LL跮tHS0E1LHh+  LCLHLx tLhE11I  I   Hl  Hh  ~K4S0HsLKHLx@ tkLhE11I  I   Hl  Hh  LHs11JHLx)fD  tLhE1I  I   Hh  H@1HHS(Hs1LGHLxf     HLxtLhE1I  I   Hh  H@1HHHs1LHgG]fHLxtCHhLs 1E1LLH   HsHhLHG ttHSHsE1Hh~)  HLxfD  tLPHsL1    tH   HHKxHShLPDtL   Hh6  XLZHLxMft3LsPE1L褴H@LID  HLmxuB  HI9uD  tLsL藭fHhffH  h   l  PC*YI  7  f/x  f.  z3    f(XH,XH,HhHPE11H SH      1LHwQHLx    LhHHI  LPI(A腦HA LxHH[HtH@    H质   H7HhH   pQZg@ LhHHDsI  PI(DѤHLx,A   H@p  |    HhHQ k   ut  HxA      HB EAƅHSJHZ  HB	Ht

1    HH9  x Hu  HD     uCHd H9tHx      HR uHhƀ	  qfD  ƅsfLsLPL艸fLLHH )襱HHKHL`HhHS8L LFfHsHSpH)PH   LK``LPHx   H  蘮t  1H@LxL5q  H@ L舺P     HHHpHL9rH H  H@SHs f   LP)Hǅ    L肳H LHH@1HLfL*LHHHH9s	f1f8HH(fuI  H fCf(fCHf88f;  H(LL触HL蘦HL艦HLzHH HH9,HHH)H0HHHH9Q  H0H9  H H9U  H  H1E1f f@1H0o2H H pozxH9uH0H)I\ H0Ht'HHH0H).H0    LHHMHhLHsLH   eHtHhH HsH   ;H JHhLHsLH   HCpHx   H     HCpH@Hs#Hx   H  蹪ut%    HCpK'  LV  	s  M~%f.     tdLx1"     LXP   L  HHHpHL9rHLpLPH@L7fLLHH )SHL`HhH   H   L LZ   e  HH LtHhMHPHp  H@NLHHHH)臠H{ HS1HL1CELhIwHtZL>JMwIG    Mt>I~@DA~8   I~HtIv(H)L茞P   LCHs LP¹   LH@HH0H)HLެ\*  ƅ8 `  8 u 5D  Hx$x   K  HHpHL9rH]Ht=HKHSH      H9  HU 8   CPS  H0莝LVHLx1Hx   H  aut%  tHCp CtHs LPH L   詬HH@L   LL8菭H   HH(tHLLHޫH(HOHHH0IƯLH苭HhH{H  H[f  HhHGHhHXH@    H]  H{@{8 z  H{HtHs(H)聝H	P   HlHhH@H   YfHhH  f/h  Pw	  f.  ztz  XH, fɈPf/&	  f.  zt?  XH,ЉPH@HpcHh,Hx   t1(GH   t
1GLxf	  HhHsHtYHGFHH[H@    Ht=H{@J{8   H{HtHs(H)H蓚P   H   HHXu*  D  HxHyx   P  HHL9rH0H($H8H8HtHHH)mHHH@虙LL{蝩A   L*LPHK@E1A   HS0HsL]f/y  f.ʃ  z  J  Hc  HH9HGHHHLlHIHHffHBH0H9HX      Hf     H    HH@HBH0H賥Hf$  P   踚   HHHCfH{@C    HC(    C8 HC@    CTHhHCH   LpHXMt>I~@蟡A~8   I~HtIv(H)_LP   LJs   HhH@H{6^ fHCYPHPf/  f.Ӂ  ztR  XH,Ѐ8 P{  ƅ8H@F!  f(\H,\H,HxH   L   o   1LPHǅP    LDH޹L   A  LzHPHDqD蔘H HE   LPLHh  H H@? H{ 蟪Hs A   LA   H\n    LH 觟HLxHAA)HHLPHx
#   fCIcHH	H-  E1DsfDO2H@xHx      Hz  脟8VƅHx   Hs  PtHCpH`HtOH=^  H  Ht9HLPH^ HLHPx   H5}LeHhLMH   HYDt@ HxDLH  yHL9rIFL9HxLHIH |H`H5LHǅ`    躓HPHEHHPHhH   H   HtHPHhHHHH  HP@88sHLp)HhHYS8=   tZ}tlI{8 =LM9-HxL藩I@=   uI@x  HhHXH{0IpuC8H{0Ip0tC8 H H(uH H(}ƅ84ƅ8 |  \H,iX
   FXHHH(hHP4HHHcRH\膔Iƅ  HhH@Hx@Lp@ƅ8  *|  \H,|  \H,HRp     H=[ .{  H@xHGw  Hx      ԛIH@xHx      Hv  袛D  IpH8L@YH8L@HH8זfuH(ƖfNHhHw<HhH@PHHPHPH;P tHP H8H@H   Hnft0HhHHxVs   HhHw)<H(-HhHYfN  HhH@    HH9AF8 I~0Ɯ]Hx   Hu     L(@L(A@iwHH{HC    HPH9  HPH{HH9  PBP      HHbHCfH{@C    HC(    C8 HC@    C讖HhHCH   HxHXHt-s L  H0L蚒HhLH{L/HC>Hx   Hxm  tHCpHhM~H   1HH0HHhHXPHpC8 H{0tHHHPH HcPLH$  Hc4Lf_ HyH H  A^fD  H(H輑s y  HhHsH9H[zAF8 I~0eWHx	   	   Hzo     HCx	]Hx	   	   H/s  趗;HxIw辣x     L/HhtLHxH   H  v  L9rLHxIwTx   tnH*HhtHHxL   L<  yL9rLHxLLI*LqxH@xuHx      H k  虖fHH9HGHH,XH@
   HHX^HLEHPHHEm  HHfHnX)O,  HhHH@Hx@HP@pX|C8 H{0(H軌XL@
   L^YfInLHEHPLHHl  HHfHnfl)+  HhHH@Hx@HP@蹔XYHEdH+%(   uH=b  L藔VHHL      HItH@x	Hx	   	   H%l  葔H(HH JHH LHHpL !L HXL@
   L^՘fInLHEHPLHHk  HHfHnfl)*  HhHH@Hx@HP@5XHHHHHHIHHTHlHmHHHHHHHLIH(HLH	H1HIHHHHVH-HHaH5HH@ UHAWAVAUATSHHH  HhH`HHD\dH%(   HE1"fu-HEdH+%(   B  Hĸ  [A\A]A^A_]     HHs A   A   H1 HǺ  H@辐s
   L@LFCD`EDHxIE  HHs A   A   H0   HH8MH{ Hx  H>0 fLPHh)fo L) 衎HLHL
   LLs L蔏LLHǅP    E)L  LH/ rHP規HLLs 
   HHP4LLHǅP    EɏL  LH?/ HPFH Ls 1H=tL)HPHpHH
   LŎLLHǅP    EZL  LH. 裙HP׎H(Ls 1H=tHPH)HPHpHH
   LOLLHǅP    EL  LH
. -HPL0ZHC 1ɺ   H5\  LHǅ0    H01ɺ   LH5\  HǅP    ͕LL  H0趘HPH0ލHHs A   A   H2\    HH0HP
   LHEL
   EHHHHP!HcUĉ4HL|DȅHE  H{ H  H9- LHs A   A   HF-   LL蹃H`H	  H  HhLHǅ0    LPE1E1L\LHH0蚌LbLڄH~H0H8趄HxDhAD迄HPIE   H{ L  H), Hh   1H,HPHxH@:D  HHHLLHhLBLLL蔓Ll    HPH,d  Hp
fHHfJH9uHxINHcFL< H   J9)   1fEnfH@ 1H=-e      ffLPHH
uHxHc4H H   HA,   fD HxHcEH H   HH)   1f0Dzfxg    HY  HHHrf     fHHfAH9uHcEI~L< H~   E1EffGL>@ HHL葁Hf     LHPqHPHAfHPH(MH(HfD  LL-r胄HHHHHHmHHHHHHHfD  UHAWAAVMAUIATIHSHHtHu#HLHL[LA\A]A^A_]:@ HEHL[L1A\A]A^A_]/ff.      UHAWIAVAUIATISH  HLuDLdH%(   HE1H Hǅ     HHƅLޅLH#9  At$H]
   HߍFAD$+DpED\HHE	  It$ H A   A   H'   HH薇I|$ H  H' IIt$ H@A   A   Hbc    HH趄HIo H)`HtHDBfH~HIWHpHH  L`LHxLLבHLHH̓ H߉}HAbHH}H~H脉HHAHHfHǅp    )`HtHLLLLHLL狍H`HtHpH)}HψLg|H;~H/~H@DhD9~HE   H H 誅H螅I|$ H  H% AH uHEdH+%(     He[A\A]A^A_] HTBfH~H.D  1H$a      ffTCHH
uHHKHcFL4 H  J1)   1fDkfHD  1H5`      ffDQHHuHcEHyH HO  1Dqft    Lxd  fH`H    H)HH@Hǅ`    Hiɗ   HHHHH*^;x \MtZHA.   11jA      j j N}H`H H I>IσH ÃIfD  HA.   11jA      j j |L`H MBAFX	{IŅukH L XLP HHHzHH    HHLYzHHPH^  Hp	fHHfJH9uIcFI}L< Hu1A]fC|=NIvLyV}HHwHHsI7I3@ UfHAWIAVAUATSHHH   HHH(0dH%(   HE1)`蜄IHCH  HPHH@H{  7ILpH8M9  E1HHL+Iċ@=   o~Yp#wQHv HcH>=   u9I|$G	  u#H      HV  詁tD  IM9yƅH A   E1H{H   H8H  HS`H    fD  HpIt$HH8E0H8HXHHǅX    NuiE1H{H   A$    tM$   HIT$xIt$hD0PI$   H8XE1E1ZƅH "D  H8IM9mfI$HsLPIAM9G@ I$HsLPIM9#     I$HsLPIAM9y@ AoT$pH{)`H   H   H8HS`H   ƅH E1E1H  H`҈H8HHQE  H(L0Es   H@vHEdH+%(   @  He؉[A\A]A^A_]AoL$8H{)`HH1 E~ ~H{AuH@t7H{=   s ID$0fx @Aod$)`{fA|$0 #Aot$H{)`H1qfA|$d Aol$H{)`H1AfA|$, Ao\$)`H{H   H8H[1 HS`H   H(ƅH L0fHfH	   	   H_Y  }tKI|$G		H	   	   HKU  }tZI|$GfD  H{gƅH A   A   H   ƅH E1E1H8A   HXLpHǅX    [z HIAĄtcHsPLHP0HpHXHXHp|HXBtuHzH5V     Sstƃ   H9LpuCHXA   1|ƅHHxH5V  stƃ   f.     HHHtHsPLHP0HpHXHXHp{HXPtu\vHHH     UHAWAVAUIATISHH~ HHHEHMLEDMHEdH%(   HE1IT$(L8LpID$0H\  H  Iu IUL)L)HH	  D   L8  E  E E1H8  H   HLHj LMDEHMHUX   ZKsHs A   HIA   H   dzH    SHMHE    HHMwHMUE1E1LHSH}*zH  >zMtLar   LqE  HEdH+%(   *  He[A\A]A^A_]f     E1T     HMffH*H*^Ht1HMffH*H*I^Y  f.z[uYG@ Y  f.zIf(9fD  HMffH*H*I^Y  f.zf(f(LMUWfUMI*Yff/  f.Y  zItXY  L,fI*Yff/   f.\Y  zIwXX  L,e     Lj LsHLHH8  PLMDEHMHU^_ELfD  H8  LauHEdH+%(   uDHeL[A\A]A^A_]w@ \0X  L,fD  \X  L,irHSH]HvH8H?ff.     UHAWIAVIAUATLeSHLH   HEHhHq DdHPHELXHHdH%(   HE1%vIF(IN0LHpHxmHLHU@E|HH    HU@E|Lm1LFvLLLxyLH@I6nHpLLdtL}LLetLLpHxH@L4tL}LL5tLL{L}1LuHhLLLHEHUmL{o fELL)EzH  LlLkHC    Mt>I}@uA}8   I}HtIu(H)qmLkP   L\mLHLPLHHXdvH   LkMtHC    Lm   LmHsHtWHLkHC    Mt>I}@tA}8    I}HtIu(H)lLAkP   LlH  tL`lHEdH+%(   uTHĘ   [A\A]A^A_]    AE8 I}0JwI}H     AE8 I}0"w_nH2HMH"@ U   HAWIAVL0AULATILSH  H2dH%(   HE1HcVHyLjHLHcu1LHvz  iIL$@It$8LHHt3H|LHa!HHUHH@H9u;FkLxLyHEdH+%(   uH  [A\A]A^A_]D  mHJI+IVI    H( j    H0j H(j H j UHAVAUIATISHHdH%(   HE12 t:H2 IHLLb~HEdH+%(   u>HL[A\A]A^] L5Y2 LmtH&/ LHD2 WqlUHAVAUIATISH^HdH%(   HE11 t9H1 IHLL}HEdH+%(   u=HL[A\A]A^]fL51 LltH. LH1 p lUHAVAUIATISH^HdH%(   HE1]1 t9HZ1 IHLL!}HEdH+%(   u=HL[A\A]A^]fL51 LAltH- LH1 p`kUHAVAUIATISH^HdH%(   HE10 t9H0 IHLL|HEdH+%(   u=HL[A\A]A^]fL5y0 LktHF- LHd0 wojwy    H0cy H Sy H(Cy H=$0  H0 tf.     UHHF     H(lH/ ]f.     D  UHSHHH5I- Ht$HLJQ11!xHH]        rH=- H0mH5 - ff.      UHSHHH5, Ht$HLP11wHH]        rH=, H0WmH5, f.     @ UHATSHHdH%(   HE1. t4H5. HerHEdH+%(   uAHH[A\]f.     L%y. LitHF+ LHd. wmhUHATSHHdH%(   HE1(. t4H5%. HqHEdH+%(   uAHH[A\]f.     L%- LitH* LH- l0hUHSHH HeH{Ht1HWHOH      H9t'H 8 t[GPWt]H]    HHNHG    HPH9uUHPH
OH9u5H@H]f.     D  H]6dfD  H]f     H}H}H뜐UHSHHHxHt1HWHOH      H9t0H 8 tTGPWtVHH]bf     HHNHG    HPH9u=HPH*NH9u%P뺸D  kcf     @ H}H}Hf     HHtHwHH)cD  f.     D  H?HtH`fD      H?HtH`fD      H?HtH`fD      H?HtH`fD      H?HtH`fD      UHAWAVAUIATISH(HHHRH Hc   HPH H Hc   H@H\
H Hc@HÉcI$uH([A\A]A^A_]    HIE M}HLhHLAHLpHLIH0Hx1     ffLBHHuH7HJHcFH HupfAHHJfIc   H H   HfAHHfIc   L4 Hu]fAJ1fI$Z1fPH([A\A]A^A_]D  HHLMLEHU`LMLEHUHd@ HLL`HD  HLLEHU`LEHUHHf.      UHAWAVAUATISHHHH H HcPHFHc@DLlDsaHEuH[A\A]A^A_]@ HHI$Mt$L`H H0HcFL< HuDfA$McfDJ9HHfK$Mu>HDh1fBaH[A\A]A^A_]f     HHL_H@ HL_H     UHAVAUATISHH   HwdH%(   HE1Ht(HW`HtHƠ  I|$8qH   H         HB    ƃ   tƃ    ƃ    LLP
   LaHS0EHHcRLlD_H ED  L+L01ɺ   H5Q8  LHǅ0    oL  LH qH0L('gL31ɺ   H52C  LHǅ0    n1ɺ   LH54  Hǅ(    nLL  LqH(fH0fH3E1E1H   LfL^LcxHCx    MtL^   LL^H `fHEdH+%(      H   [A\A]A^]D  H9B  HHHzf     f2HHfqH9uHs0HH.HcFL4 HuFJ1.   f0HHHcEL4 HuAJ1)   1fH DjfH;    HHL\H@ HLL\HH(yeH0meH aeHEdH+%(   t"_HHHHf     UHAVAUATISHH   HwdH%(   HE1Ht(HW`HtHƠ  I|$pbnH   H         H    ƃ   tƃ    ƃ    LLP
   L]HS0EHHcRLlD\H ED  L+L01ɺ   H5!5  LHǅ0    kL  LH nH0L(cL31ɺ   H5@  LHǅ0    k1ɺ   LH51  Hǅ(    rkLL  L_nH(cH0cH3E1E1H   LZcL[LcxHCx    MtL[   L[H 0cHEdH+%(      H   [A\A]A^]D  H	?  HHHzf     f2HHfqH9uHs0HH.HcFL4 HuFJ1.   f0HHHcEL4 HuAJ1)   1fH DjfH;    HHLYH@ HLLYHH(IbH0=bH 1bHEdH+%(   t"\HHHHb     HHwH0H9tHHYf.     D  UHAWAVAUATISHHLwHHw(HG0H+G8HMHI)HLHIHHHIHHC H+CHHHHfffffffH9I  HH{LH)IHI)I     YIFA$Lk0AE AD$AE /  AD$ HSHA$    AD$     AE HBHfHnfHnH  flC0fHnflC@H[A\A]A^A_]D  LzK?H9   H&  HL4?LH<!  HYHHELL)HL<HCHHs(HPH)H   LXHCH;H4    WHELsHIHCO4/H  HC IL{(H  fHnLsHfHnflC8fD  It$I}fAE     L)IVHH)L<I9sH~zL<XIs@ K|/H~FH)XITD     A   I=tA\D  HIHHGI	 HItVH=e*  ^     UHAVAUATISHH   HIH<   L4    LQWL1HIYMT$0It$ID$    HtaE1ML$    HHH HHt?H1H6HA@HID H8HuI|$H9IL$LH9 tKL IHuI<$It$L9t	HUI\$M,$[A\A]A^]    LW0HG0    MH@ H=t5[@UHTIE ID$(bH
aH^fUHAWIAVAUATISH(dH%(   HEHHcX~%HXf     HHHXHH9uH1It$I$LIL,    M   M0IN@.f     I6H   HN@1MHIt$I9uvIH9uI?IVw;ruLMH9tHHLEWLELMuI Ht/LxHEdH+%(   0  H(L[A\A]A^A_]fD  H   UI?H     IHxM~W1fLAF     fAF8AFAF(hID$(fIT$AF     It$AF(I|$    HEdHքu5I$I^@IIE HtAH IIE L0ID$&f     HULH1It$L,    ID$Mt$IHtH@@1It$L4ID$IE ^HEdH+%(   tvUH	H2I~0[HHRH   LRHEdH+%(   ug_LbI~ZH   LRHEdH+%(   uH[HbfD  UHAUIATSHH_Ht/ IHI|$bI|$ZH   LYRHuIEI} 1H    MUIE    IE    H[A\A]]fUHAWAVAUATSH8HO0HG(H}HWHLo8HMHO L`HUH_HMHEI9sJfD  M<$M   I(M9tA tAG II(>aM9uHEII9rHMH9M   HEH9u5 H(H9]t({ tC H{`AE I}`I(L9mtA} t    HEH8HtXHEHHHHX(LaHML9s  H;  HPL9rHEH8HEHpH8[A\HA]A^A_]PH8[A\A]A^A_]HEH9uf.     H(H9]j{ tC H{` HH                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               com.sun.star.comp.Draw.SVGFilter        com.sun.star.document.ImportFilter      com.sun.star.document.ExportFilter      com.sun.star.document.ExtendedTypeDetection     com.sun.star.beans.PropertyValue        com.sun.star.beans.PropertyState        com.sun.star.beans.XPropertySet com.sun.star.beans.XPropertySet::getPropertySetInfo     com.sun.star.beans.XPropertySet::setPropertyValue       com.sun.star.beans.XPropertySet::getPropertyValue       com.sun.star.beans.XPropertySet::addPropertyChangeListener      com.sun.star.beans.XPropertySet::removePropertyChangeListener   com.sun.star.beans.XPropertySet::addVetoableChangeListener      com.sun.star.beans.XPropertySet::removeVetoableChangeListener   com.sun.star.beans.UnknownPropertyException     com.sun.star.beans.PropertyVetoException        com.sun.star.lang.IllegalArgumentException      com.sun.star.lang.WrappedTargetException        com.sun.star.beans.XPropertySetInfo     com.sun.star.beans.XPropertyChangeListener      com.sun.star.beans.XVetoableChangeListener      com.sun.star.view.XSelectionSupplier    com.sun.star.frame.XController  com.sun.star.drawing.XDrawPagesSupplier com.sun.star.drawing.XDrawPage  com.sun.star.drawing.XDrawView  com.sun.star.drawing.framework.XControllerManager       private:resource/view/SlideSorter       com.sun.star.drawing.XMasterPagesSupplier       com.sun.star.drawing.XMasterPageTarget  ./include/com/sun/star/uno/Reference.hxx        static interface_type* com::sun::star::uno::Reference< <template-parameter-1-1> >::iset_throw(interface_type*) [with interface_type = com::sun::star::frame::XController]       static interface_type* com::sun::star::uno::Reference< <template-parameter-1-1> >::iset_throw(interface_type*) [with interface_type = com::sun::star::frame::XFrame]    ./workdir/UnoApiHeadersTarget/offapi/normal/com/sun/star/frame/Desktop.hpp      static com::sun::star::uno::Reference<com::sun::star::frame::XDesktop2> com::sun::star::frame::Desktop::create(const com::sun::star::uno::Reference<com::sun::star::uno::XComponentContext>&)   static com::sun::star::uno::XInterface* com::sun::star::uno::BaseReference::iquery_throw(com::sun::star::uno::XInterface*, const com::sun::star::uno::Type&)    com.sun.star.document.XImporter com.sun.star.document.XExporter com.sun.star.document.XExtendedFilterDetection  com.sun.star.lang.XTypeProvider com.sun.star.lang.XTypeProvider::getTypes       com.sun.star.lang.XTypeProvider::getImplementationId    com.sun.star.uno.RuntimeException       com.sun.star.lang.XServiceInfo  com.sun.star.lang.XServiceInfo::getImplementationName   com.sun.star.lang.XServiceInfo::supportsService com.sun.star.lang.XServiceInfo::getSupportedServiceNames        com.sun.star.uno.DeploymentException    component context fails to supply service       com.sun.star.drawing.framework.XResourceId      com.sun.star.container.XEnumerationAccess       com.sun.star.container.XElementAccess   com.sun.star.container.XElementAccess::getElementType   com.sun.star.container.XElementAccess::hasElements      com.sun.star.container.XEnumerationAccess::createEnumeration    com.sun.star.container.XEnumeration     com.sun.star.container.XEnumeration::hasMoreElements    com.sun.star.container.XEnumeration::nextElement        com.sun.star.container.NoSuchElementException   com.sun.star.xml.sax.XExtendedDocumentHandler   http://xml.openoffice.org/svg/export    http://sun.com/xmlns/staroffice/presentation    http://www.w3.org/2001/SMIL20/  urn:oasis:names:tc:opendocument:xmlns:animation:1.0     urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0        urn:oasis:names:tc:opendocument:xmlns:office:1.0        urn:oasis:names:tc:opendocument:xmlns:smil-compatible:1.0       com.sun.star.animations.XAnimationNodeSupplier  com.sun.star.animations.XAnimationNode  M 580,1141 L 1163,571 580,0 -4,571 580,1141 Z   M 8,1128 L 1137,1128 1137,0 8,0 8,1128 Z        M 174,0 L 602,739 174,1481 1456,739 174,0 Z M 1358,739 L 309,1346 659,739 1358,739 Z    M 2015,739 L 1276,0 717,0 1260,543 174,543 174,936 1260,936 717,1481 1274,1481 2015,739 Z       M 0,-2 C -7,14 -16,27 -25,37 L 356,567 C 262,823 215,952 215,954 215,979 228,992 255,992 264,992 276,990 289,987 310,991 331,999 354,1012 L 381,999 492,748 772,1049 836,1024 860,1049 C 881,1039 901,1025 922,1006 886,937 835,863 770,784 769,783 710,716 594,584 L 774,223 C 774,196 753,168 711,139 L 727,119 C 717,90 699,76 672,76 641,76 570,178 457,381 L 164,-76 C 142,-110 111,-127 72,-127 30,-127 9,-110 8,-76 1,-67 -2,-52 -2,-32 -2,-23 -1,-13 0,-2 Z     M 285,-33 C 182,-33 111,30 74,156 52,228 41,333 41,471 41,549 55,616 82,672 116,743 169,778 240,778 293,778 328,747 346,684 L 369,508 C 377,444 397,411 428,410 L 1163,1116 C 1174,1127 1196,1133 1229,1133 1271,1133 1292,1118 1292,1087 L 1292,965 C 1292,929 1282,901 1262,881 L 442,47 C 390,-6 338,-33 285,-33 Z   M 813,0 C 632,0 489,54 383,161 276,268 223,411 223,592 223,773 276,916 383,1023 489,1130 632,1184 813,1184 992,1184 1136,1130 1245,1023 1353,916 1407,772 1407,592 1407,412 1353,268 1245,161 1136,54 992,0 813,0 Z     M 346,457 C 273,457 209,483 155,535 101,586 74,649 74,723 74,796 101,859 155,911 209,963 273,989 346,989 419,989 480,963 531,910 582,859 608,796 608,723 608,648 583,586 532,535 482,483 420,457 346,457 Z      M -4,459 L 1135,459 1135,606 -4,606 -4,459 Z    M 173,740 C 173,903 231,1043 346,1159 462,1274 601,1332 765,1332 928,1332 1067,1274 1183,1159 1299,1043 1357,903 1357,740 1357,577 1299,437 1183,322 1067,206 928,148 765,148 601,148 462,206 346,322 231,437 173,577 173,740 Z com.sun.star.drawing.FillStyle  com.sun.star.drawing.GraphicObjectShape com.sun.star.lang.XComponent::dispose   com.sun.star.lang.XComponent::addEventListener  com.sun.star.lang.XComponent::removeEventListener       com.sun.star.lang.XEventListener        cannot create std::vector larger than max_size()        com.sun.star.presentation.XPresentationSupplier com.sun.star.task.XStatusIndicator      com.sun.star.text.TextGraphicObject     static interface_type* com::sun::star::uno::Reference< <template-parameter-1-1> >::iset_throw(interface_type*) [with interface_type = com::sun::star::container::XEnumeration]  ./workdir/UnoApiHeadersTarget/offapi/normal/com/sun/star/drawing/ShapeCollection.hpp    static com::sun::star::uno::Reference<com::sun::star::drawing::XShapes> com::sun::star::drawing::ShapeCollection::create(const com::sun::star::uno::Reference<com::sun::star::uno::XComponentContext>&) ./workdir/UnoApiHeadersTarget/offapi/normal/com/sun/star/xml/sax/Writer.hpp     static com::sun::star::uno::Reference<com::sun::star::xml::sax::XWriter> com::sun::star::xml::sax::Writer::create(const com::sun::star::uno::Reference<com::sun::star::uno::XComponentContext>&)        ./workdir/UnoApiHeadersTarget/offapi/normal/com/sun/star/drawing/GraphicExportFilter.hpp        static com::sun::star::uno::Reference<com::sun::star::drawing::XGraphicExportFilter> com::sun::star::drawing::GraphicExportFilter::create(const com::sun::star::uno::Reference<com::sun::star::uno::XComponentContext>&)        com.sun.star.lang.XInitialization       com.sun.star.lang.XInitialization::initialize   com.sun.star.drawing.GraphicExportFilter        com.sun.star.drawing.XGraphicExportFilter       com.sun.star.drawing.ShapeCollection    com.sun.star.comp.Draw.SVGWriter        com.sun.star.text.XTextContent  com.sun.star.container.XIndexReplace    cannot create std::deque larger than max_size() com.sun.star.document.XFilter long Handle DIRECT_VALUE DEFAULT_VALUE AMBIGUOUS_VALUE State aPropertyName aValue void xListener aListener SelectionOnly com.sun.star.frame.XFrame com.sun.star.drawing.XShapes com.sun.star.io.XInputStream PagePos IsPreview FilterName impress_svg_Export writer_svg_Export calc_svg_Export draw_svgz_Export []type []byte ServiceName boolean []string com.sun.star.frame.Desktop com.sun.star.frame.XDesktop2  of type  com.sun.star.lang.XUnoTunnel vector::_M_realloc_insert vector::_M_default_append FooterField FixedTextField VariableTextField FixedDateTimeField VariableDateTimeField class BackgroundBitmaps defs #bitmap( BackgroundPatterns bg-pattern. height userSpaceOnUse patternUnits pattern  scale( transform xlink:href use 0 none stroke fill rect drawing.GroupShape drawing.GraphicObjectShape drawing.OLE2Shape OLE2 drawing.TextShape presentation.HeaderShape Header presentation.FooterShape Footer presentation.DateTimeShape DateTime presentation.SlideNumberShape PageNumber presentation.TitleTextShape TitleText presentation.OutlinerShape Outline IsBackgroundVisible IsBackgroundObjectsVisible IsPageNumberVisible IsHeaderVisible IsFooterVisible IsDateTimeVisible IsDateTimeFixed DateTimeFormat TextEmbeddedBitmaps BoundRect com.sun.star.awt.Rectangle text/ecmascript 1.2 version tiny baseProfile 0 0  viewBox xMidYMid preserveAspectRatio evenodd fill-rule stroke-width stroke-linejoin xmlns xmlns:ooo http://www.w3.org/1999/xlink xmlns:xlink xmlns:presentation xmlns:smil xmlns:anim xmlns:svg preserve xml:space ClipPathGroup presentation_clip_path clipPathUnits clipPath presentation_clip_path_shrink xmlns:office presentation-animations TransitionType Animations 1.1 EmbeddedBulletChars SVG_DISABLE_FONT_EMBEDDING TextShapeIndex IsEmptyPresentationObject hidden visibility ParaAdjust left center right Title title Description desc Bookmark BoundingBox com.sun.star.drawing.XShape Master_Slide Page SlideBackground BackgroundObjects bg-dummy-master-page bo-dummy-master-page container- DummySlide dummy-slide clip-path dummy-page SlideGroup STR_FILTER_DOC_SAVING Saving:  flt true alpha-upper alpha-lower roman-upper roman-lower false LinkDisplayName FillStyle visible DateTimeText FooterText Change HighResDuration TransitionSubtype com.sun.star.graphic.XGraphic com.sun.star.text.XText XTEXT_PAINTSHAPE_BEGIN XTEXT_PAINTSHAPE_END -variable 0123456789.:/-APM QWERTYUIOPASDFGHJKLZXCVBNM qwertyuiopasdfghjklzxcvbnm IVXLCDM ivxlcdm 0123456789 SVM com.sun.star.io.XOutputStream ExportOnlyBackground com.sun.star.lang.XComponent FillBitmapTile FillBitmapOffsetX FillBitmapOffsetY Width Height FileName FilterData StatusIndicator GraphicPreview TransformedGraphic com.sun.star.container.XNamed aArguments []any com.sun.star.uno.Exception com.sun.star.xml.sax.Writer com.sun.star.xml.sax.XWriter unicode horiz-adv-x  embedded EmbeddedFont_ font bold normal italic font-family units-per-em font-weight font-style ascent descent font-face missing-glyph com.sun.star.svg.XSVGWriter com.sun.star.svg.SVGWriter rgb( Gradient_ radialGradient fill-opacity stroke-opacity , monospace , serif , sans-serif oblique underline  line-through  XTEXT_EOP underline line-through TextPosition HyperlinkIdList C  L   Z embedded-bitmap( EmbeddedBitmap ellipse miter bevel square stroke-dasharray stop-color: gradient fill:url(# com.sun.star.text.Paragraph NumberingLevel NumberingRules NumberingIsNumber NumberingType BulletChar com.sun.star.text.Table com.sun.star.text.XTextRange TextParagraph TextPortionType com.sun.star.text.XTextField IsFixed IsDate PageName PageCount URL bullet-style image-style number-style ooo:numbering-type ListItem SVGTextShape ) rotate( translate( bullet-char- #bullet-char-template- .bp BulletPlaceholder PlaceholderText UrlField white-space: pre 
 	 vector::reserve data:image/jpeg;base64, data:image/png;base64, http://www.w3.org/2000/svg image overflow foreignObject http://www.w3.org/1999/xhtml body autoplay controls loop auto preload poster video src video/mp4 source BGRAD_SEQ_BEGIN BGRAD_SEQ_END XGRAD_SEQ_BEGIN XGRAD_SEQ_END XPATHFILL_SEQ_BEGIN XPATHSTROKE_SEQ_BEGIN XPATHFILL_SEQ_END XPATHSTROKE_SEQ_END XTEXT_EOL opacity:  mask mask:url(# bitmap-placeholder( BitmapPlaceholder                   N3com3sun4star3uno10XInterfaceE N3com3sun4star3uno16RuntimeExceptionE           N3com3sun4star3uno9ExceptionE                   N3com3sun4star3uno19DeploymentExceptionE                        N3com3sun4star4lang13XTypeProviderE                             N3com3sun4star8document7XFilterE                                N3com3sun4star8document9XImporterE                              N3com3sun4star8document9XExporterE                              N3com3sun4star8document24XExtendedFilterDetectionE              N3com3sun4star4lang12XServiceInfoE                              N4cppu14WeakImplHelperIJN3com3sun4star8document7XFilterENS4_9XImporterENS4_9XExporterENS4_24XExtendedFilterDetectionENS3_4lang12XServiceInfoEEEE        9SVGFilter                              N3com3sun4star2io11IOExceptionE    @   s v g _ S c a l a b l e _ V e c t o r _ G r a p h i c s                                    @!   s v g _ S c a l a b l e _ V e c t o r _ G r a p h i c s _ D r a w                          @   I n p u t S t r e a m                ?      ?  A        ?{Gz?F8<@      @?                         @@      0C{Gzt?      C?p=
ף?      @     @ffffff@  ?,   )   M                           P POOO0P0P<CP            *N12_GLOBAL__N_19TextFieldE                     *N12_GLOBAL__N_114FixedTextFieldE                               *N12_GLOBAL__N_118FixedDateTimeFieldE           *N12_GLOBAL__N_111FooterFieldE                  *N12_GLOBAL__N_117VariableTextFieldE                            *N12_GLOBAL__N_121VariableDateTimeFieldE                           @   o o o : s l i d e - d u r a t i o n                        @   o o o : d i s p l a y - n a m e                            @   o o o : h a s - c u s t o m - b a c k g r o u n d          @   U s e P o s i t i o n e d C h a r a c t e r s              @   O p a c i t y              @   U s e N a t i v e T e x t D e c o r a t i o n              @
   E m b e d F o n t s        @	   D T D S t r i n g          @   T i n y M o d e         

ElapsedTime.prototype.getTimeBase = function()
{
return this.aTimeBase;
};

ElapsedTime.prototype.reset = function()
{
this.nLastQueriedTime = 0.0;
this.nStartTime = this.getCurrentTime();
this.nFrozenTime = 0.0;
this.bInPauseMode = false;
this.bInHoldMode = false;
};

ElapsedTime.prototype.getElapsedTime = function()
{
this.nLastQueriedTime = this.getElapsedTimeImpl();
return this.nLastQueriedTime;
};

ElapsedTime.prototype.pauseTimer = function()
{
this.nFrozenTime = this.getElapsedTimeImpl();
this.bInPauseMode = true;
};

ElapsedTime.prototype.continueTimer = function()
{
this.bInPauseMode = false;

var nPauseDuration = this.getElapsedTimeImpl() - this.nFrozenTime;

this.nStartTime += nPauseDuration;
};

ElapsedTime.prototype.adjustTimer = function( nOffset, bLimitToLastQueriedTime )
{
if( bLimitToLastQueriedTime == undefined )
bLimitToLastQueriedTime = true;

this.nStartTime -= nOffset;

if( this.bInHoldMode || this.bInPauseMode )
this.nFrozenTime += nOffset;
};

ElapsedTime.prototype.holdTimer = function()
{
this.nFrozenTime = this.getElapsedTimeImpl();
this.bInHoldMode = true;
};

ElapsedTime.prototype.releaseTimer = function()
{
this.bInHoldMode = false;
};

ElapsedTime.prototype.getSystemTime = function()
{
return ( getCurrentSystemTime() / 1000.0 );
};

ElapsedTime.prototype.getCurrentTime = function()
{
var nCurrentTime;
if ( !this.aTimeBase )
{
nCurrentTime = this.getSystemTime();
}
else
{
nCurrentTime = this.aTimeBase.getElapsedTimeImpl();
}

assert( ( typeof( nCurrentTime ) === typeof( 0 ) ) && isFinite( nCurrentTime ),
'ElapsedTime.getCurrentTime: assertion failed: nCurrentTime == ' + nCurrentTime );


return nCurrentTime;
};

ElapsedTime.prototype.getElapsedTimeImpl = function()
{
if( this.bInHoldMode || this.bInPauseMode )
{
return this.nFrozenTime;
}

var nCurTime = this.getCurrentTime();
return ( nCurTime - this.nStartTime );
};


/*****
* @libreofficeend
*
* Several parts of the above code are the result of the porting,
* started on August 2011, of the C++ code included in the source files
* placed under the folder '/slideshow/source' and subfolders.
* @source https://cgit.freedesktop.org/libreoffice/core/tree/slideshow/source
*
*/

]]>             }
else if ( aLhsEventEntry.nActivationTime < aRhsEventEntry.nActivationTime )
{
return 1;
}
else
{
return 0;
}
};


function ActivityQueue( aTimer )
{
this.aTimer = aTimer;
this.aCurrentActivityWaitingSet = [];
this.aCurrentActivityReinsertSet = [];
this.aDequeuedActivitySet = [];
}


ActivityQueue.prototype.dispose = function()
{
var nSize = this.aCurrentActivityWaitingSet.length;
var i;
for( i = 0; i < nSize; ++i )
this.aCurrentActivityWaitingSet[i].dispose();

nSize = this.aCurrentActivityReinsertSet.length;
for( i = 0; i < nSize; ++i )
this.aCurrentActivityReinsertSet[i].dispose();
};

ActivityQueue.prototype.addActivity = function( aActivity )
{
if( !aActivity )
{
log( 'ActivityQueue.addActivity: activity is not valid' );
return false;
}

this.aCurrentActivityWaitingSet.push( aActivity );
aActivityQueueDebugPrinter.print( 'ActivityQueue.addActivity: activity appended' );
return true;
};

ActivityQueue.prototype.process = function()
{
var nSize = this.aCurrentActivityWaitingSet.length;
var nLag = 0.0;
for( var i = 0; i < nSize; ++i )
{
nLag = Math.max( nLag,this.aCurrentActivityWaitingSet[i].calcTimeLag()  );
}

if( nLag > 0.0 )
this.aTimer.adjustTimer( -nLag, true );


while( this.aCurrentActivityWaitingSet.length != 0 )
{
var aActivity = this.aCurrentActivityWaitingSet.shift();
var bReinsert = false;

bReinsert = aActivity.perform();

if( bReinsert )
{
this.aCurrentActivityReinsertSet.push( aActivity );
}
else
{
this.aDequeuedActivitySet.push( aActivity );
}
}

if( this.aCurrentActivityReinsertSet.length != 0 )
{
this.aCurrentActivityWaitingSet = this.aCurrentActivityReinsertSet;
this.aCurrentActivityReinsertSet = [];
}
};

ActivityQueue.prototype.processDequeued = function()
{
var nSize = this.aDequeuedActivitySet.length;
for( var i = 0; i < nSize; ++i )
this.aDequeuedActivitySet[i].dequeued();

this.aDequeuedActivitySet = [];
};

ActivityQueue.prototype.isEmpty = function()
{
return ( ( this.aCurrentActivityWaitingSet.length == 0 ) &&
( this.aCurrentActivityReinsertSet.length == 0 ) );
};

ActivityQueue.prototype.clear = function()
{
aActivityQueueDebugPrinter.print( 'ActivityQueue.clear invoked' );
var nSize = this.aCurrentActivityWaitingSet.length;
var i;
for( i = 0; i < nSize; ++i )
this.aCurrentActivityWaitingSet[i].dequeued();
this.aCurrentActivityWaitingSet = [];

nSize = this.aCurrentActivityReinsertSet.length;
for( i = 0; i < nSize; ++i )
this.aCurrentActivityReinsertSet[i].dequeued();
this.aCurrentActivityReinsertSet = [];
};

ActivityQueue.prototype.endAll = function()
{
aActivityQueueDebugPrinter.print( 'ActivityQueue.endAll invoked' );
var nSize = this.aCurrentActivityWaitingSet.length;
var i;
for( i = 0; i < nSize; ++i )
this.aCurrentActivityWaitingSet[i].end();
this.aCurrentActivityWaitingSet = [];

nSize = this.aCurrentActivityReinsertSet.length;
for( i = 0; i < nSize; ++i )
this.aCurrentActivityReinsertSet[i].end();
this.aCurrentActivityReinsertSet = [];
};

ActivityQueue.prototype.getTimer = function()
{
return this.aTimer;
};

ActivityQueue.prototype.size = function()
{
return ( this.aCurrentActivityWaitingSet.length +
this.aCurrentActivityReinsertSet.length +
this.aDequeuedActivitySet.length );
};


function ElapsedTime( aTimeBase )
{
this.aTimeBase = aTimeBase;
this.nLastQueriedTime = 0.0;
this.nStartTime = this.getCurrentTime();
this.nFrozenTime = 0.0;
this.bInPauseMode = false;
this.bInHoldMode = false;
}
                           {
this.bIsActive = false;
};


function NextEffectEventArray()
{
this.aEventArray = [];
}


NextEffectEventArray.prototype.size = function()
{
return this.aEventArray.length;
};

NextEffectEventArray.prototype.at = function( nIndex )
{
return this.aEventArray[ nIndex ];
};

NextEffectEventArray.prototype.appendEvent = function( aEvent )
{
var nSize = this.size();
for( var i = 0; i < nSize; ++i )
{
if( this.aEventArray[i].getId() == aEvent.getId() )
{
aNextEffectEventArrayDebugPrinter.print( 'NextEffectEventArray.appendEvent: event(' + aEvent.getId() + ') already present' );
return false;
}
}
this.aEventArray.push( aEvent );
aNextEffectEventArrayDebugPrinter.print( 'NextEffectEventArray.appendEvent: event(' + aEvent.getId() + ') appended' );
return true;
};

NextEffectEventArray.prototype.clear = function( )
{
this.aEventArray = [];
};


function TimerEventQueue( aTimer )
{
this.aTimer = aTimer;
this.aEventSet = new PriorityQueue( EventEntry.compare );
}


TimerEventQueue.prototype.addEvent = function( aEvent )
{
this.DBG( 'TimerEventQueue.addEvent event(' + aEvent.getId() + ') appended.' );
if( !aEvent )
{
log( 'TimerEventQueue.addEvent: null event' );
return false;
}

var nTime = aEvent.getActivationTime( this.aTimer.getElapsedTime() );
var aEventEntry = new EventEntry( aEvent, nTime );
this.aEventSet.push( aEventEntry );

return true;
};

TimerEventQueue.prototype.forceEmpty = function()
{
this.process_(true);
};


TimerEventQueue.prototype.process = function()
{
this.process_(false);
};

TimerEventQueue.prototype.process_ = function( bFireAllEvents )
{
var nCurrentTime = this.aTimer.getElapsedTime();

while( !this.isEmpty() && ( bFireAllEvents || ( this.aEventSet.top().nActivationTime <= nCurrentTime ) ) )
{
var aEventEntry = this.aEventSet.top();
this.aEventSet.pop();

var aEvent = aEventEntry.aEvent;
if( aEvent.isCharged() )
aEvent.fire();
}
};

TimerEventQueue.prototype.isEmpty = function()
{
return this.aEventSet.isEmpty();
};

TimerEventQueue.prototype.nextTimeout = function()
{
var nTimeout = Number.MAX_VALUE;
var nCurrentTime = this.aTimer.getElapsedTime();
if( !this.isEmpty() )
nTimeout = this.aEventSet.top().nActivationTime - nCurrentTime;
return nTimeout;
};

TimerEventQueue.prototype.clear = function()
{
this.DBG( 'TimerEventQueue.clear invoked' );
this.aEventSet.clear();
};

TimerEventQueue.prototype.getTimer = function()
{
return this.aTimer;
};

TimerEventQueue.prototype.DBG = function( sMessage, nTime )
{
aTimerEventQueueDebugPrinter.print( sMessage, nTime );
};


TimerEventQueue.prototype.insert = function( aEventEntry )
{
var nHoleIndex = this.aEventSet.length;
var nParent = Math.floor( ( nHoleIndex - 1 ) / 2 );

while( ( nHoleIndex > 0 ) && this.aEventSet[ nParent ].compare( aEventEntry ) )
{
this.aEventSet[ nHoleIndex ] = this.aEventSet[ nParent ];
nHoleIndex = nParent;
nParent = Math.floor( ( nHoleIndex - 1 ) / 2 );
}
this.aEventSet[ nHoleIndex ] = aEventEntry;
};


function EventEntry( aEvent, nTime )
{
this.aEvent = aEvent;
this.nActivationTime = nTime;
}


EventEntry.compare = function( aLhsEventEntry, aRhsEventEntry )
{
if ( aLhsEventEntry.nActivationTime > aRhsEventEntry.nActivationTime )
{
return -1;
             if( nOldSlide > nNewSlide )
{
this.aSlideViewElement = document.createElementNS( NSS['svg'], 'use' );
setNSAttribute( 'xlink', this.aSlideViewElement, 'href', '#' + aOldMetaSlide.slideContainerId );
aNewMetaSlide.aVisibilityStatusElement.parentNode.insertBefore( this.aSlideViewElement, aNewMetaSlide.aVisibilityStatusElement );
aOldMetaSlide.hide();
}

var aLeavingSlide = aOldMetaSlide;
var aEnteringSlide = aNewMetaSlide;
var aTransitionEndEvent = makeEvent( bind2( this.notifyTransitionEnd, this, nNewSlide ) );

var aTransitionActivity =
this.createSlideTransition( aSlideTransitionHandler, aLeavingSlide,
aEnteringSlide, aTransitionEndEvent );

if( aTransitionActivity )
{
this.bIsTransitionRunning = true;
this.aActivityQueue.addActivity( aTransitionActivity );
this.update();
}
else
{
this.notifyTransitionEnd( nNewSlide );
}
}
else
{
this.notifyTransitionEnd( nNewSlide );
}
}
else
{
this.notifyTransitionEnd( nNewSlide );
}
}
else
{
this.notifyTransitionEnd( nNewSlide );
}

};

SlideShow.prototype.update = function()
{
this.aTimer.holdTimer();

this.aTimerEventQueue.process();
this.aActivityQueue.process();

this.aFrameSynchronization.synchronize();

this.aActivityQueue.processDequeued();

this.aTimer.releaseTimer();

var bActivitiesLeft = ( ! this.aActivityQueue.isEmpty() );
var bTimerEventsLeft = ( ! this.aTimerEventQueue.isEmpty() );
var bEventsLeft = ( bActivitiesLeft || bTimerEventsLeft );


if( bEventsLeft )
{
var nNextTimeout;
if( bActivitiesLeft )
{
nNextTimeout = MINIMUM_TIMEOUT;
this.aFrameSynchronization.activate();
}
else
{
nNextTimeout = this.aTimerEventQueue.nextTimeout();
if( nNextTimeout < MINIMUM_TIMEOUT )
nNextTimeout = MINIMUM_TIMEOUT;
else if( nNextTimeout > MAXIMUM_TIMEOUT )
nNextTimeout = MAXIMUM_TIMEOUT;
this.aFrameSynchronization.deactivate();
}

this.bIsIdle = false;
window.setTimeout( 'aSlideShow.update()', nNextTimeout * 1000 );
}
else
{
this.bIsIdle = true;
}
};

SlideShow.prototype.dispose = function()
{
this.aTimerEventQueue.clear();
this.aActivityQueue.clear();
this.aNextEffectEventArray = null;
this.aEventMultiplexer = null;
};

SlideShow.prototype.getContext = function()
{
return this.aContext;
};

var aSlideShow = null;


function SlideShowContext( aTimerEventQueue, aEventMultiplexer, aNextEffectEventArray, aInteractiveAnimationSequenceMap, aActivityQueue)
{
this.aTimerEventQueue = aTimerEventQueue;
this.aEventMultiplexer = aEventMultiplexer;
this.aNextEffectEventArray = aNextEffectEventArray;
this.aInteractiveAnimationSequenceMap = aInteractiveAnimationSequenceMap;
this.aActivityQueue = aActivityQueue;
this.bIsSkipping = false;
}


function FrameSynchronization( nFrameDuration )
{
this.nFrameDuration = nFrameDuration;
this.aTimer = new ElapsedTime();
this.nNextFrameTargetTime = 0.0;
this.bIsActive = false;

this.markCurrentFrame();
}


FrameSynchronization.prototype.markCurrentFrame = function()
{
this.nNextFrameTargetTime = this.aTimer.getElapsedTime() + this.nFrameDuration;
};

FrameSynchronization.prototype.synchronize = function()
{
if( this.bIsActive )
{
while( this.aTimer.getElapsedTime() < this.nNextFrameTargetTime )
;
}

this.markCurrentFrame();

};

FrameSynchronization.prototype.activate = function()
{
this.bIsActive = true;
};

FrameSynchronization.prototype.deactivate = function()
             if( this.nCurrentEffect > 0 )
--this.nCurrentEffect;
}
else
{
this.aEventMultiplexer.notifyRewindEndedInteractiveEffectEvent( aEffect.getId() );
}
}
}
this.update();

i = this.aStartedEffectList.length - 1;
for( ; i >= nFirstPlayingEffectIndex; --i )
{
aEffect = this.aStartedEffectList.pop();
if( !aEffect.isMainEffect() )
delete this.aStartedEffectIndexMap[ aEffect.getId() ];
}
}
else  // there is no playing effect
{
aEffect = this.aStartedEffectList.pop();
if( !aEffect.isMainEffect() )
delete this.aStartedEffectIndexMap[ aEffect.getId() ];
if( aEffect.isEnded() )  // Well that is almost an assertion.
{
if( aEffect.isMainEffect() )
{
this.aEventMultiplexer.notifyRewindLastEffectEvent();
if( this.nCurrentEffect > 0 )
--this.nCurrentEffect;
}
else
{
this.aEventMultiplexer.notifyRewindEndedInteractiveEffectEvent( aEffect.getId() );
}
}
this.update();
}

this.bIsRewinding = false;
};

SlideShow.prototype.rewindToPreviousSlide = function()
{
if( this.isTransitionPlaying() )
{
this.rewindTransition();
return;
}
if( this.isAnyEffectPlaying() )
return;
var nNewSlide = nCurSlide - 1;
this.displaySlide( nNewSlide, true );
this.skipAllEffects();
};

SlideShow.prototype.rewindAllEffects = function()
{
if( !this.hasAnyEffectStarted() )
{
this.rewindToPreviousSlide();
return;
}

while( this.hasAnyEffectStarted() )
{
this.rewindEffect();
}
};

SlideShow.prototype.exitSlideShowInApp = function()
{
if (window.webkit !== undefined &&
window.webkit.messageHandlers !== undefined &&
window.webkit.messageHandlers.lok !== undefined)
window.webkit.messageHandlers.lok.postMessage('EXITSLIDESHOW', '*');
}

SlideShow.prototype.displaySlide = function( nNewSlide, bSkipSlideTransition )
{
var aMetaDoc = theMetaDoc;
var nSlides = aMetaDoc.nNumberOfSlides;
if( nNewSlide < 0 && nSlides > 0 )
nNewSlide = nSlides - 1;
else if( nNewSlide >= nSlides ) {
nNewSlide = 0;
this.exitSlideShowInApp();
}

if( ( currentMode === INDEX_MODE ) && ( nNewSlide === nCurSlide ) )
{
aMetaDoc.getCurrentSlide().show();
return;
}

if( this.isTransitionPlaying() )
{
this.skipTransition();
}

var nOldSlide = nCurSlide;
if( nOldSlide !== undefined )
{
var oldMetaSlide = aMetaDoc.aMetaSlideSet[nOldSlide];
if( this.isEnabled() )
{
if( oldMetaSlide.aSlideAnimationsHandler.isAnimated() )
{
oldMetaSlide.aSlideAnimationsHandler.end( bSkipSlideTransition );

this.dispose();
}
}

if( this.automaticAdvanceTimeout !== null )
{
window.clearTimeout( this.automaticAdvanceTimeout );
this.automaticAdvanceTimeout = null;
}
}

this.notifySlideStart( nNewSlide, nOldSlide );

if( this.isEnabled() && !bSkipSlideTransition  )
{
if ( ( ( nOldSlide !== undefined ) &&
( ( nNewSlide > nOldSlide ) ||
( ( nNewSlide == 0) && ( nOldSlide == (aMetaDoc.nNumberOfSlides - 1) ) ) ) ) ||
(  ( nOldSlide === undefined ) &&  ( nNewSlide == 0) )  // for transition on first slide
)
{

var aOldMetaSlide = null;
if( nOldSlide === undefined ) // for transition on first slide
{
aOldMetaSlide = aMetaDoc.theMetaDummySlide;
}
else
{
aOldMetaSlide = aMetaDoc.aMetaSlideSet[nOldSlide];
}
var aNewMetaSlide = aMetaDoc.aMetaSlideSet[nNewSlide];

var aSlideTransitionHandler = aNewMetaSlide.aTransitionHandler;
if( aSlideTransitionHandler && aSlideTransitionHandler.isValid() )
{
var sRef = 'url(#' + aPresentationClipPathShrinkId + ')';
aOldMetaSlide.slideElement.setAttribute( 'clip-path', sRef );

              {
if( aEffect.isMainEffect() )
this.aEventMultiplexer.notifySkipEffectEvent();
else
this.aEventMultiplexer.notifySkipInteractiveEffectEvent( aEffect.getId() );
}
}
this.update();
this.bIsSkipping = false;
return true;
};

SlideShow.prototype.skipNextEffect = function()
{
if( this.bIsSkipping || this.bIsRewinding )
return true;

assert( !this.isAnyEffectPlaying(),
'SlideShow.skipNextEffect' );

if( !this.aNextEffectEventArray )
return false;

if( this.nCurrentEffect >= this.aNextEffectEventArray.size() )
return false;

this.notifyNextEffectStart();

this.bIsSkipping = true;
this.aNextEffectEventArray.at( this.nCurrentEffect ).fire();
this.aEventMultiplexer.notifySkipEffectEvent();
++this.nCurrentEffect;
this.update();
this.bIsSkipping = false;
return true;
};

SlideShow.prototype.skipPlayingOrNextEffect = function()
{
if( this.isTransitionPlaying() )
{
this.skipTransition();
return true;
}

if( this.isAnyEffectPlaying() )
return this.skipAllPlayingEffects();
else
return this.skipNextEffect();
};


SlideShow.prototype.skipAllEffects = function()
{
if( this.bIsSkippingAll )
return true;

this.bIsSkippingAll = true;

if( this.isTransitionPlaying() )
{
this.skipTransition();
}

if( this.isAnyEffectPlaying() )
{
this.skipAllPlayingEffects();
}
else if( !this.aNextEffectEventArray
|| ( this.nCurrentEffect >= this.aNextEffectEventArray.size() ) )
{
this.bIsSkippingAll = false;
return false;
}

while( this.nCurrentEffect < this.aNextEffectEventArray.size() )
{
this.skipNextEffect();
}
this.bIsSkippingAll = false;
return true;
};

SlideShow.prototype.rewindTransition = function()
{
if( this.bIsSkipping || this.bIsRewinding )
return;

this.bIsRewinding = true;
this.aActivityQueue.endAll();
this.update();
this.bIsRewinding = false;
};

SlideShow.prototype.rewindEffect = function()
{
if( this.bIsSkipping || this.bIsRewinding )
return;

if( this.automaticAdvanceTimeout !== null && !this.automaticAdvanceTimeout['rewindedEffect'] )
{
window.clearTimeout( this.automaticAdvanceTimeout );
this.automaticAdvanceTimeout = { 'rewindedEffect': this.nCurrentEffect };
}

if( !this.hasAnyEffectStarted() )
{
this.rewindToPreviousSlide();
return;
}

this.bIsRewinding = true;

var nFirstPlayingEffectIndex = undefined;

var i = 0;
for( ; i < this.aStartedEffectList.length; ++i )
{
var aEffect = this.aStartedEffectList[i];
if( aEffect.isPlaying() )
{
nFirstPlayingEffectIndex = i;
break;
}
}

if( nFirstPlayingEffectIndex !== undefined )
{
i = this.aStartedEffectList.length - 1;
for( ; i >= nFirstPlayingEffectIndex; --i )
{
aEffect = this.aStartedEffectList[i];
if( aEffect.isPlaying() )
{
if( aEffect.isMainEffect() )
{
this.aEventMultiplexer.notifyRewindCurrentEffectEvent();
if( this.nCurrentEffect > 0 )
--this.nCurrentEffect;
}
else
{
this.aEventMultiplexer.notifyRewindRunningInteractiveEffectEvent( aEffect.getId() );
}
}
else if( aEffect.isEnded() )
{
if( aEffect.isMainEffect() )
{
this.aEventMultiplexer.notifyRewindLastEffectEvent();
                   var nTimeout = Math.ceil(theMetaDoc.aMetaSlideSet[nCurSlide].fDuration * 1000);
if( nTimeout < 0 )
return;

this.automaticAdvanceTimeout = window.setTimeout('switchSlide(1, false)', nTimeout);
};

SlideShow.prototype.notifySlideStart = function( nNewSlideIndex, nOldSlideIndex )
{
this.nCurrentEffect = 0;
this.bIsRewinding = false;
this.bIsSkipping = false;
this.bIsSkippingAll = false;
this.nTotalInteractivePlayingEffects = 0;
this.aStartedEffectList = [];
this.aStartedEffectIndexMap = {};
this.aStartedEffectIndexMap[ -1 ] = undefined;

var aAnimatedElementMap;
var sId;
if( nOldSlideIndex !== undefined )
{
aAnimatedElementMap = theMetaDoc.aMetaSlideSet[nOldSlideIndex].aSlideAnimationsHandler.aAnimatedElementMap;
for( sId in aAnimatedElementMap )
aAnimatedElementMap[ sId ].notifySlideEnd();
}

aAnimatedElementMap = theMetaDoc.aMetaSlideSet[nNewSlideIndex].aSlideAnimationsHandler.aAnimatedElementMap;
for( sId in aAnimatedElementMap )
aAnimatedElementMap[ sId ].notifySlideStart( this.aContext );
};

SlideShow.prototype.notifyTransitionEnd = function( nSlideIndex )
{
if( theMetaDoc.getCurrentSlide() )
{
var sRef = 'url(#' + aPresentationClipPathId + ')';
theMetaDoc.getCurrentSlide().slideElement.setAttribute('clip-path', sRef);
}

this.bIsTransitionRunning = false;
if( this.bIsRewinding )
{
theMetaDoc.aMetaSlideSet[nSlideIndex].hide();
var nIndex = nCurSlide !== undefined ? nCurSlide : -1;
this.displaySlide( nIndex, true );
this.skipAllEffects();
this.bIsRewinding = false;
return;
}

theMetaDoc.setCurrentSlide(nSlideIndex);

if( this.aSlideViewElement )
{
theMetaDoc.getCurrentSlide().aVisibilityStatusElement.parentNode.removeChild( this.aSlideViewElement );
this.aSlideViewElement = null;
}
if( this.isEnabled() )
{
this.dispose();

var aCurrentSlide = theMetaDoc.getCurrentSlide();
if( aCurrentSlide.aSlideAnimationsHandler.elementsParsed() )
{
aCurrentSlide.aSlideAnimationsHandler.start();
this.aEventMultiplexer.registerAnimationsEndHandler( bind2( SlideShow.prototype.notifyAnimationsEnd, this ) );
}
else
this.notifyAnimationsEnd();

this.update();
}
else
this.notifyAnimationsEnd();
};

SlideShow.prototype.notifyInteractiveAnimationSequenceStart = function( nNodeId )
{
++this.nTotalInteractivePlayingEffects;
var aEffect = new Effect( nNodeId );
aEffect.start();
this.aStartedEffectIndexMap[ nNodeId ] = this.aStartedEffectList.length;
this.aStartedEffectList.push( aEffect );
};

SlideShow.prototype.notifyInteractiveAnimationSequenceEnd = function( nNodeId )
{
assert( this.isInteractiveEffectPlaying(),
'SlideShow.notifyInteractiveAnimationSequenceEnd: no interactive effect playing.' );

this.aStartedEffectList[ this.aStartedEffectIndexMap[ nNodeId ] ].end();
--this.nTotalInteractivePlayingEffects;
};

SlideShow.prototype.nextEffect = function()
{
if( !this.isEnabled() )
return false;

if( this.isTransitionPlaying() )
{
this.skipTransition();
return true;
}

if( this.isAnyEffectPlaying() )
{
this.skipAllPlayingEffects();
return true;
}

if( !this.aNextEffectEventArray )
return false;

if( this.nCurrentEffect >= this.aNextEffectEventArray.size() )
return false;

this.notifyNextEffectStart();

this.aNextEffectEventArray.at( this.nCurrentEffect ).fire();
++this.nCurrentEffect;
this.update();
return true;
};

SlideShow.prototype.skipTransition  = function()
{
if( this.bIsSkipping || this.bIsRewinding )
return;

this.bIsSkipping = true;

this.aActivityQueue.endAll();
this.aTimerEventQueue.forceEmpty();
this.aActivityQueue.endAll();
this.update();
this.bIsSkipping = false;
};

SlideShow.prototype.skipAllPlayingEffects  = function()
{
if( this.bIsSkipping || this.bIsRewinding )
return true;

this.bIsSkipping = true;
for( var i = 0; i < this.aStartedEffectList.length; ++i )
{
var aEffect = this.aStartedEffectList[i];
if( aEffect.isPlaying() )
              this.bIsNextEffectRunning = false;
this.bIsRewinding = false;
this.bIsSkipping = false;
this.bIsSkippingAll = false;
this.nTotalInteractivePlayingEffects = 0;
this.aStartedEffectList = [];
this.aStartedEffectIndexMap = {};
this.aStartedEffectIndexMap[ -1 ] = undefined;
this.automaticAdvanceTimeout = null;
}

SlideShow.prototype.setSlideEvents = function( aNextEffectEventArray,
aInteractiveAnimationSequenceMap,
aEventMultiplexer )
{
if( !aNextEffectEventArray )
log( 'SlideShow.setSlideEvents: aNextEffectEventArray is not valid' );

if( !aInteractiveAnimationSequenceMap )
log( 'SlideShow.setSlideEvents:aInteractiveAnimationSequenceMap  is not valid' );

if( !aEventMultiplexer )
log( 'SlideShow.setSlideEvents: aEventMultiplexer is not valid' );

this.aContext.aNextEffectEventArray = aNextEffectEventArray;
this.aNextEffectEventArray = aNextEffectEventArray;
this.aContext.aInteractiveAnimationSequenceMap = aInteractiveAnimationSequenceMap;
this.aInteractiveAnimationSequenceMap = aInteractiveAnimationSequenceMap;
this.aContext.aEventMultiplexer = aEventMultiplexer;
this.aEventMultiplexer = aEventMultiplexer;
this.nCurrentEffect = 0;
};

SlideShow.prototype.createSlideTransition = function( aSlideTransitionHandler, aLeavingSlide, aEnteringSlide, aTransitionEndEvent )
{
if( !aEnteringSlide )
{
log( 'SlideShow.createSlideTransition: entering slide element is not valid.' );
return null;
}

if( this.bNoSlideTransition ) return null;

var aAnimatedLeavingSlide = null;
if( aLeavingSlide )
aAnimatedLeavingSlide = new AnimatedSlide( aLeavingSlide );
var aAnimatedEnteringSlide = new AnimatedSlide( aEnteringSlide );

var aSlideTransition = aSlideTransitionHandler.createSlideTransition( aAnimatedLeavingSlide, aAnimatedEnteringSlide );
if( !aSlideTransition ) return null;

var nDuration = 0.001;
if( aSlideTransitionHandler.getDuration().isValue() )
{
nDuration = aSlideTransitionHandler.getDuration().getValue();
}
else
{
log( 'SlideShow.createSlideTransition: duration is not a number' );
}

var aCommonParameterSet = new ActivityParamSet();
aCommonParameterSet.aEndEvent = aTransitionEndEvent;
aCommonParameterSet.aTimerEventQueue = this.aTimerEventQueue;
aCommonParameterSet.aActivityQueue = this.aActivityQueue;
aCommonParameterSet.nMinDuration = nDuration;
aCommonParameterSet.nMinNumberOfFrames = aSlideTransitionHandler.getMinFrameCount();
aCommonParameterSet.nSlideWidth = WIDTH;
aCommonParameterSet.nSlideHeight = HEIGHT;

return new SimpleActivity( aCommonParameterSet, aSlideTransition, FORWARD );

};

SlideShow.prototype.isEnabled = function()
{
return this.bIsEnabled;
};

SlideShow.prototype.isRunning = function()
{
return !this.bIsIdle;
};

SlideShow.prototype.isTransitionPlaying = function()
{
return this.bIsTransitionRunning;
};

SlideShow.prototype.isMainEffectPlaying = function()
{
return this.bIsNextEffectRunning;
};

SlideShow.prototype.isInteractiveEffectPlaying = function()
{
return ( this.nTotalInteractivePlayingEffects > 0 );
};

SlideShow.prototype.isAnyEffectPlaying = function()
{
return ( this.isMainEffectPlaying() || this.isInteractiveEffectPlaying() );
};

SlideShow.prototype.hasAnyEffectStarted = function()
{
return ( this.aStartedEffectList.length > 0 );
};

SlideShow.prototype.notifyNextEffectStart = function()
{
assert( !this.bIsNextEffectRunning,
'SlideShow.notifyNextEffectStart: an effect is already started.' );
this.bIsNextEffectRunning = true;
this.aEventMultiplexer.registerNextEffectEndHandler( bind2( SlideShow.prototype.notifyNextEffectEnd, this ) );
var aEffect = new Effect();
aEffect.start();
this.aStartedEffectIndexMap[ -1 ] = this.aStartedEffectList.length;
this.aStartedEffectList.push( aEffect );

var aAnimatedElementMap = theMetaDoc.aMetaSlideSet[nCurSlide].aSlideAnimationsHandler.aAnimatedElementMap;
for( var sId in aAnimatedElementMap )
aAnimatedElementMap[ sId ].notifyNextEffectStart( this.nCurrentEffect );
};

SlideShow.prototype.notifyNextEffectEnd = function()
{
assert( this.bIsNextEffectRunning,
'SlideShow.notifyNextEffectEnd: effect already ended.' );
this.bIsNextEffectRunning = false;

this.aStartedEffectList[ this.aStartedEffectIndexMap[ -1 ] ].end();
if( this.automaticAdvanceTimeout !== null )
{
if( this.automaticAdvanceTimeout['rewindedEffect'] === this.nCurrentEffect )
{
this.automaticAdvanceTimeout = null;
this.notifyAnimationsEnd();
}
}
};

SlideShow.prototype.notifyAnimationsEnd = function()
{
if( nCurSlide + 1 === theMetaDoc.nNumberOfSlides )
return;

assert (this.automaticAdvanceTimeout === null,
'SlideShow.notifyAnimationsEnd: Timeout already set.')

         case NUMBER_PROPERTY :
evalValuesAttribute( aValueList, aValueSet, aBBox, nSlideWidth, nSlideHeight );
break;
case BOOL_PROPERTY :
for( i = 0; i < aValueSet.length; ++i )
{
var aValue = booleanParser( aValueSet[i] );
aValueList.push( aValue );
}
break;
case STRING_PROPERTY :
for( i = 0; i < aValueSet.length; ++i )
{
aValueList.push( aValueSet[i] );
}
break;
case ENUM_PROPERTY :
for( i = 0; i < aValueSet.length; ++i )
{
aValueList.push( aValueSet[i] );
}
break;
case COLOR_PROPERTY :
for( i = 0; i < aValueSet.length; ++i )
{
aValue = colorParser( aValueSet[i] );
aValueList.push( aValue );
}
break;
case TUPLE_NUMBER_PROPERTY :
for( i = 0; i < aValueSet.length; ++i )
{
if( typeof aValueSet[i] === 'string' )
{
var aTuple = aValueSet[i].split(',');
aValue = [];
evalValuesAttribute(aValue, aTuple, aBBox, nSlideWidth, nSlideHeight);
aValueList.push(aValue);
}
else
{
aValueList.push( undefined );
}
}
break;
default:
log( 'createValueListActivity: unexpected value type: ' + eValueType );
}

}


function evalValuesAttribute( aValueList, aValueSet, aBBox, nSlideWidth, nSlideHeight )
{
var width = aBBox.width / nSlideWidth;
var height = aBBox.height / nSlideHeight;
var x = ( aBBox.x + aBBox.width / 2 ) / nSlideWidth;
var y = ( aBBox.y + aBBox.height / 2 ) / nSlideHeight;

var reMath = /abs|sqrt|asin|acos|atan|sin|cos|tan|exp|log|min|max/g;

for( var i = 0; i < aValueSet.length; ++i )
{
var sValue = aValueSet[i];
if(sValue)
{
sValue = sValue.replace(reMath, 'Math.$&');
sValue = sValue.replace(/pi(?!\w)/g, 'Math.PI');
sValue = sValue.replace(/e(?!\w)/g, 'Math.E');
}
var aValue =  eval( sValue );
aValueList.push( aValue );
}
}


var BACKWARD    = 0;
var FORWARD     = 1;

var MAXIMUM_FRAME_COUNT                 = 60;
var MINIMUM_TIMEOUT                     = 1.0 / MAXIMUM_FRAME_COUNT;
var MAXIMUM_TIMEOUT                     = 4.0;
var MINIMUM_FRAMES_PER_SECONDS          = 10;
var PREFERRED_FRAMES_PER_SECONDS        = 50;
var PREFERRED_FRAME_RATE                = 1.0 / PREFERRED_FRAMES_PER_SECONDS;


function Effect( nId )
{
this.nId = ( typeof( nId ) === typeof( 1 ) ) ? nId : -1;
this.eState = Effect.NOT_STARTED;
}
Effect.NOT_STARTED = 0;
Effect.PLAYING = 1;
Effect.ENDED = 2;

Effect.prototype.getId = function()
{
return this.nId;
};

Effect.prototype.isMainEffect = function()
{
return ( this.nId === -1 );
};

Effect.prototype.isPlaying = function()
{
return ( this.eState === Effect.PLAYING );
};

Effect.prototype.isEnded = function()
{
return ( this.eState === Effect.ENDED );
};

Effect.prototype.start = function()
{
assert( this.eState === Effect.NOT_STARTED, 'Effect.start: wrong state.' );
this.eState = Effect.PLAYING;
};

Effect.prototype.end = function()
{
assert( this.eState === Effect.PLAYING, 'Effect.end: wrong state.' );
this.eState = Effect.ENDED;
};


function SlideShow()
{
this.aTimer = new ElapsedTime();
this.aFrameSynchronization = new FrameSynchronization( PREFERRED_FRAME_RATE );
this.aTimerEventQueue = new TimerEventQueue( this.aTimer );
this.aActivityQueue = new ActivityQueue( this.aTimer );
this.aNextEffectEventArray = null;
this.aInteractiveAnimationSequenceMap = null;
this.aEventMultiplexer = null;

this.aContext = new SlideShowContext( this.aTimerEventQueue,
this.aEventMultiplexer,
this.aNextEffectEventArray,
this.aInteractiveAnimationSequenceMap,
this.aActivityQueue );
this.bIsIdle = true;
this.bIsEnabled = true;
this.bNoSlideTransition = false;
this.bIsTransitionRunning = false;

this.nCurrentEffect = 0;
              }

aActivityParamSet.aDiscreteTimes = aAnimationNode.getKeyTimes();

var aValueSet = aAnimationNode.getValues();
var nValueSetSize = aValueSet.length;

if( nValueSetSize != 0 )
{

if( aActivityParamSet.aDiscreteTimes.length == 0 )
{
for( var i = 0; i < nValueSetSize; ++i )
aActivityParamSet.aDiscreteTimes[i].push( i / nValueSetSize );
}

switch( eCalcMode )
{
case CALC_MODE_DISCRETE:
aActivityParamSet.aWakeupEvent =
new WakeupEvent( aActivityParamSet.aTimerEventQueue.getTimer(),
aActivityParamSet.aActivityQueue );

return createValueListActivity( aActivityParamSet,
aAnimationNode,
aAnimation,
aInterpolator,
DiscreteValueListActivity,
bAccumulate,
eValueType );

default:
log( 'createActivity: unexpected calculation mode: ' + eCalcMode );
case CALC_MODE_PACED :
case CALC_MODE_SPLINE :
case CALC_MODE_LINEAR:
return createValueListActivity( aActivityParamSet,
aAnimationNode,
aAnimation,
aInterpolator,
LinearValueListActivity,
bAccumulate,
eValueType );
}
}
else
{
switch( eCalcMode )
{
case CALC_MODE_DISCRETE:
log( 'createActivity: discrete calculation case not yet implemented' );
aActivityParamSet.aWakeupEvent =
new WakeupEvent( aActivityParamSet.aTimerEventQueue.getTimer(),
aActivityParamSet.aActivityQueue );
return createFromToByActivity(  aActivityParamSet,
aAnimationNode,
aAnimation,
aInterpolator,
DiscreteFromToByActivity,
bAccumulate,
eValueType );

default:
log( 'createActivity: unexpected calculation mode: ' + eCalcMode );
case CALC_MODE_PACED :
case CALC_MODE_SPLINE :
case CALC_MODE_LINEAR:
return createFromToByActivity(  aActivityParamSet,
aAnimationNode,
aAnimation,
aInterpolator,
LinearFromToByActivity,
bAccumulate,
eValueType );
}
}
}


function createValueListActivity( aActivityParamSet, aAnimationNode, aAnimation,
aInterpolator, ClassTemplateInstance, bAccumulate, eValueType )
{
var aAnimatedElement = aAnimationNode.getAnimatedElement();
var aOperatorSet = aOperatorSetMap[ eValueType ];
assert( aOperatorSet, 'createValueListActivity: no operator set found' );

var aValueSet = aAnimationNode.getValues();

var aValueList = [];

extractAttributeValues( eValueType,
aValueList,
aValueSet,
aAnimatedElement.getBaseBBox(),
aActivityParamSet.nSlideWidth,
aActivityParamSet.nSlideHeight );

for( var i = 0; i < aValueList.length; ++i )
{
ANIMDBG.print( 'createValueListActivity: value[' + i + '] = ' + aValueList[i] );
}

return new ClassTemplateInstance( aValueList, aActivityParamSet, aAnimation,
aInterpolator, aOperatorSet, bAccumulate );
}


function createFromToByActivity( aActivityParamSet, aAnimationNode, aAnimation,
aInterpolator, ClassTemplateInstance, bAccumulate, eValueType )
{

var aAnimatedElement = aAnimationNode.getAnimatedElement();
var aOperatorSet = aOperatorSetMap[ eValueType ];
assert( aOperatorSet, 'createFromToByActivity: no operator set found' );

var aValueSet = [];
aValueSet[0] = aAnimationNode.getFromValue();
aValueSet[1] = aAnimationNode.getToValue();
aValueSet[2] = aAnimationNode.getByValue();

ANIMDBG.print( 'createFromToByActivity: value type: ' + aValueTypeOutMap[eValueType] +
', aFrom = ' + aValueSet[0] +
', aTo = ' + aValueSet[1] +
', aBy = ' + aValueSet[2] );

var aValueList = [];

extractAttributeValues( eValueType,
aValueList,
aValueSet,
aAnimatedElement.getBaseBBox(),
aActivityParamSet.nSlideWidth,
aActivityParamSet.nSlideHeight );

ANIMDBG.print( 'createFromToByActivity: ' +
', aFrom = ' + aValueList[0] +
', aTo = ' + aValueList[1] +
', aBy = ' + aValueList[2] );

return new ClassTemplateInstance( aValueList[0], aValueList[1], aValueList[2],
aActivityParamSet, aAnimation,
aInterpolator, aOperatorSet, bAccumulate );
}


function extractAttributeValues( eValueType, aValueList, aValueSet, aBBox, nSlideWidth, nSlideHeight )
{
var i;
switch( eValueType )
{
                      {
ValueListActivity.superclass.activate.call( this, aEndEvent );
for( var i = 0; i < this.aValueList.length; ++i )
{
ANIMDBG.print( 'createValueListActivity: value[' + i + '] = ' + this.aValueList[i] );
}
};

ValueListActivity.prototype.initAnimatedElement = function()
{
if( this.aAnimation )
{
var aValue = this.aValueList[0];
aValue = this.aFormula ? this.aFormula( aValue ) : aValue;
this.aAnimation.perform(aValue);
}
};

ValueListActivity.prototype.startAnimation = function()
{
if( this.isDisposed() || !this.aAnimation  )
{
log( 'ValueListActivity.startAnimation: activity disposed or not valid animation' );
return;
}

ValueListActivity.superclass.startAnimation.call( this );

this.aAnimation.start( this.getTargetElement() );
};

ValueListActivity.prototype.endAnimation = function()
{
if( this.aAnimation )
this.aAnimation.end();
};

ValueListActivity.prototype.performContinuousHook = function( nIndex, nFractionalIndex, nRepeatCount )
{
if( this.isDisposed() || !this.aAnimation  )
{
log( 'ValueListActivity.performContinuousHook: activity disposed or not valid animation' );
return;
}

assert( ( nIndex + 1 ) < this.aValueList.length,
'ValueListActivity.performContinuousHook: assertion (nIndex + 1 < this.aValueList.length) failed' );


var aValue = this.aInterpolator( this.aValueList[ nIndex ],
this.aValueList[ nIndex+1 ],
nFractionalIndex );

if( this.bCumulative )
{
aValue = this.add( aValue, this.scale( nRepeatCount, this.aLastValue ) );
}

aValue = this.aFormula ? this.aFormula( aValue ) : aValue;
this.aAnimation.perform( aValue );
};

ValueListActivity.prototype.performDiscreteHook = function( nFrame, nRepeatCount )
{
if( this.isDisposed() || !this.aAnimation  )
{
log( 'ValueListActivity.performDiscreteHook: activity disposed or not valid animation' );
return;
}

assert( nFrame < this.aValueList.length,
'ValueListActivity.performDiscreteHook: assertion ( nFrame < this.aValueList.length) failed' );

var aValue = this.aValueList[nFrame];

if( this.bCumulative )
{
aValue = this.add( aValue, this.scale( nRepeatCount, this.aLastValue ) );
}

aValue = this.aFormula ? this.aFormula( aValue ) : aValue;
this.aAnimation.perform( aValue );
};

ValueListActivity.prototype.performEnd = function()
{
if( this.aAnimation )
{
var aValue = this.aFormula ? this.aFormula( this.aLastValue ) : this.aLastValue;
this.aAnimation.perform( aValue );
}
};

ValueListActivity.prototype.dispose = function()
{
ValueListActivity.superclass.dispose.call( this );
};


return ValueListActivity;
}


var LinearValueListActivity = instantiate( ValueListActivityTemplate, ContinuousKeyTimeActivityBase );
var DiscreteValueListActivity = instantiate( ValueListActivityTemplate, DiscreteActivityBase );


function createActivity( aActivityParamSet, aAnimationNode, aAnimation, aInterpolator )
{
var eCalcMode = aAnimationNode.getCalcMode();

var sAttributeName = aAnimationNode.getAttributeName();
var aAttributeProp = aAttributeMap[ sAttributeName ];

var eValueType = aAttributeProp[ 'type' ];
var eValueSubtype = aAttributeProp[ 'subtype' ];

if( ! aInterpolator )
{
aInterpolator = aInterpolatorHandler.getInterpolator( eCalcMode,
eValueType,
eValueSubtype );
}

var bAccumulate = ( aAnimationNode.getAccumulate() === ACCUMULATE_MODE_SUM )
&& !( eValueType === BOOL_PROPERTY ||
eValueType === STRING_PROPERTY ||
eValueType === ENUM_PROPERTY );

if( aAnimationNode.getFormula() )
{
var sFormula =  aAnimationNode.getFormula();
var reMath = /abs|sqrt|asin|acos|atan|sin|cos|tan|exp|log|min|max/g;
sFormula = sFormula.replace(reMath, 'Math.$&');
sFormula = sFormula.replace(/pi(?!\w)/g, 'Math.PI');
sFormula = sFormula.replace(/e(?!\w)/g, 'Math.E');
sFormula = sFormula.replace(/\$/g, '__PARAM0__');

var aAnimatedElement = aAnimationNode.getAnimatedElement();
var aBBox = aAnimatedElement.getBaseBBox();

var width = aBBox.width / aActivityParamSet.nSlideWidth;
var height = aBBox.height / aActivityParamSet.nSlideHeight;
var x = ( aBBox.x + aBBox.width / 2 ) / aActivityParamSet.nSlideWidth;
var y = ( aBBox.y + aBBox.height / 2 ) / aActivityParamSet.nSlideHeight;

aActivityParamSet.aFormula = function( __PARAM0__ ) {

return eval(sFormula);
};
    }

FromToByActivity.superclass.startAnimation.call( this );

this.aAnimation.start( this.getTargetElement() );


var aAnimationStartValue = this.aAnimation.getUnderlyingValue();

if( this.aFrom )
{
if( this.aTo )
{
this.aStartValue = this.aFrom;
this.aEndValue = this.aTo;
}
else if( this.aBy )
{
this.aStartValue = this.aFrom;

this.aEndValue = this.add( this.aStartValue, this.aBy );
}
}
else
{
this.aStartValue = aAnimationStartValue;
this.aStartInterpolationValue = this.aStartValue;

if( this.aTo )
{

this.bDynamicStartValue = true;
this.aPreviousValue = this.aStartValue;
this.aEndValue = this.aTo;
}
else if( this.aBy )
{
this.aStartValue = aAnimationStartValue;

this.aEndValue = this.add( this.aStartValue, this.aBy );
}
}

ANIMDBG.print( 'FromToByActivity.startAnimation: aStartValue = ' + this.aStartValue + ', aEndValue = ' + this.aEndValue );
};

FromToByActivity.prototype.endAnimation = function()
{
if( this.aAnimation )
this.aAnimation.end();
};

FromToByActivity.prototype.performContinuousHook = function( nModifiedTime, nRepeatCount )
{
if( this.isDisposed() || !this.aAnimation  )
{
log( 'FromToByActivity.performContinuousHook: activity disposed or not valid animation' );
return;
}


if( this.bDynamicStartValue )
{
if( this.nIteration != nRepeatCount )
{
this.nIteration = nRepeatCount;
this.aStartInterpolationValue =  this.aStartValue;
}
else
{
var aActualValue = this.aAnimation.getUnderlyingValue();
if( !this.equal( aActualValue, this.aPreviousValue ) )
this.aStartInterpolationValue = aActualValue;
}
}

var aValue = this.aInterpolator( this.aStartInterpolationValue,
this.aEndValue, nModifiedTime );

if( this.bCumulative && !this.bDynamicStartValue )
{
aValue = this.add( this.scale( nRepeatCount, this.aEndValue ), aValue );
}

aValue = this.aFormula ? this.aFormula( aValue ) : aValue;
this.aAnimation.perform( aValue );

if( this.bDynamicStartValue )
{
this.aPreviousValue = this.aAnimation.getUnderlyingValue();
}

};

FromToByActivity.prototype.performDiscreteHook = function( /*nFrame, nRepeatCount*/ )
{
if (this.isDisposed() || !this.aAnimation) {
log('FromToByActivity.performDiscreteHook: activity disposed or not valid animation');
return;
}
};

FromToByActivity.prototype.performEnd = function()
{
if( this.aAnimation )
{
var aValue = this.isAutoReverse() ? this.aStartValue : this.aEndValue;
aValue = this.aFormula ? this.aFormula( aValue ) : aValue;
this.aAnimation.perform( aValue );
}
};

FromToByActivity.prototype.dispose = function()
{
FromToByActivity.superclass.dispose.call( this );
};


return FromToByActivity;
}


var LinearFromToByActivity = instantiate( FromToByActivityTemplate, ContinuousActivityBase );
var DiscreteFromToByActivity = instantiate( FromToByActivityTemplate, DiscreteActivityBase );


function  ValueListActivityTemplate( BaseType ) // template parameter
{

function ValueListActivity( aValueList, aActivityParamSet,
aAnimation, aInterpolator,
aOperatorSet, bAccumulate )
{
assert( aAnimation, 'ValueListActivity constructor: invalid animation object' );
assert( aValueList.length != 0, 'ValueListActivity: value list is empty' );

ValueListActivity.superclass.constructor.call( this, aActivityParamSet );

this.aValueList = aValueList;
this.aAnimation = aAnimation;
this.aInterpolator = aInterpolator;
this.add = aOperatorSet.add;
this.scale = aOperatorSet.scale;
this.bCumulative = bAccumulate;
this.aLastValue = this.aValueList[ this.aValueList.length - 1 ];
this.aFormula = aActivityParamSet.aFormula;
}
extend( ValueListActivity, BaseType );

ValueListActivity.prototype.activate = function( aEndEvent )
                              'ContinuousKeyTimeActivityBase constructor: assertion (aDiscreteTimes.front() == 0.0) failed' );

assert( aCommonParamSet.aDiscreteTimes[ nSize - 1 ] <= 1.0,
'ContinuousKeyTimeActivityBase constructor: assertion (aDiscreteTimes.back() <= 1.0) failed' );

ContinuousKeyTimeActivityBase.superclass.constructor.call( this, aCommonParamSet );

this.aLerper = new KeyStopLerp( aCommonParamSet.aDiscreteTimes );
}
extend( ContinuousKeyTimeActivityBase, SimpleContinuousActivityBase );


ContinuousKeyTimeActivityBase.prototype.activate = function( aEndElement )
{
ContinuousKeyTimeActivityBase.superclass.activate.call( this, aEndElement );

this.aLerper.reset();
};

ContinuousKeyTimeActivityBase.prototype.performContinuousHook = function( /*nIndex, nFractionalIndex, nRepeatCount*/ )
{
throw ( 'ContinuousKeyTimeActivityBase.performContinuousHook: abstract method invoked' );
};

ContinuousKeyTimeActivityBase.prototype.simplePerform = function( nSimpleTime, nRepeatCount )
{
var nAlpha = this.calcAcceleratedTime( nSimpleTime );

var aLerpResult = this.aLerper.lerp( nAlpha );

this.performContinuousHook( aLerpResult.nIndex, aLerpResult.nLerp, nRepeatCount );
};


function ContinuousActivityBase( aCommonParamSet )
{
ContinuousActivityBase.superclass.constructor.call( this, aCommonParamSet );

}
extend( ContinuousActivityBase, SimpleContinuousActivityBase );


ContinuousActivityBase.prototype.performContinuousHook = function( /*nModifiedTime, nRepeatCount*/ )
{
throw ( 'ContinuousActivityBase.performContinuousHook: abstract method invoked' );
};

ContinuousActivityBase.prototype.simplePerform = function( nSimpleTime, nRepeatCount )
{
this.performContinuousHook( this.calcAcceleratedTime( nSimpleTime ), nRepeatCount );
};


function SimpleActivity( aCommonParamSet, aNumberAnimation, eDirection )
{
assert( ( eDirection == BACKWARD ) || ( eDirection == FORWARD ),
'SimpleActivity constructor: animation direction is not valid' );

assert( aNumberAnimation, 'SimpleActivity constructor: animation object is not valid' );

SimpleActivity.superclass.constructor.call( this, aCommonParamSet );

this.aAnimation = aNumberAnimation;
this.nDirection = ( eDirection == FORWARD ) ? 1.0 : 0.0;
}
extend( SimpleActivity, ContinuousActivityBase );


SimpleActivity.prototype.startAnimation = function()
{
if( this.isDisposed() || !this.aAnimation )
return;

ANIMDBG.print( 'SimpleActivity.startAnimation invoked' );
SimpleActivity.superclass.startAnimation.call( this );

this.aAnimation.start( this.getTargetElement() );
};

SimpleActivity.prototype.endAnimation = function()
{
if( this.aAnimation )
this.aAnimation.end();

};

SimpleActivity.prototype.performContinuousHook = function( nModifiedTime /*, nRepeatCount*/ )
{

if( this.isDisposed() || !this.aAnimation )
return;

var nT = 1.0 - this.nDirection + nModifiedTime * ( 2.0*this.nDirection - 1.0 );
this.aAnimation.perform( nT );
};

SimpleActivity.prototype.performEnd = function()
{
if( this.aAnimation )
this.aAnimation.perform( this.nDirection );
};


function FromToByActivityTemplate( BaseType ) // template parameter
{

function FromToByActivity( aFromValue, aToValue, aByValue,
aActivityParamSet, aAnimation,
aInterpolator, aOperatorSet, bAccumulate )
{
assert( aAnimation, 'FromToByActivity constructor: invalid animation object' );
assert( ( aToValue != undefined ) || ( aByValue != undefined ),
'FromToByActivity constructor: one of aToValue or aByValue must be valid' );

FromToByActivity.superclass.constructor.call( this, aActivityParamSet );

this.aFrom = aFromValue;
this.aTo = aToValue;
this.aBy = aByValue;
this.aStartValue = null;
this.aEndValue = null;
this.aPreviousValue = null;
this.aStartInterpolationValue = null;
this.aAnimation = aAnimation;
this.aInterpolator = aInterpolator;
this.equal = aOperatorSet.equal;
this.add = aOperatorSet.add;
this.scale = aOperatorSet.scale;
this.bDynamicStartValue = false;
this.nIteration = 0;
this.bCumulative = bAccumulate;
this.aFormula = aActivityParamSet.aFormula;
}
extend( FromToByActivity, BaseType );

FromToByActivity.prototype.initAnimatedElement = function()
{
if( this.aAnimation && this.aFrom )
{
var aValue = this.aFormula ? this.aFormula( this.aFrom ) : this.aFrom;
this.aAnimation.perform(aValue);
}
};

FromToByActivity.prototype.startAnimation = function()
{
if( this.isDisposed() || !this.aAnimation  )
{
log( 'FromToByActivity.startAnimation: activity disposed or not valid animation' );
return;
               this.aWakeupEvent.setNextTimeout( nNextTimeout );

this.getEventQueue().addEvent( this.aWakeupEvent );
}
else
{
this.aWakeupEvent = null;

this.endActivity();
}

return false; // remove from queue, will be added back by the wakeup event.
};

DiscreteActivityBase.prototype.dispose = function()
{
if( this.aWakeupEvent )
this.aWakeupEvent.dispose();

this.aWakeupEvent = null;

DiscreteActivityBase.superclass.dispose.call(this);
};


function SimpleContinuousActivityBase( aCommonParamSet )
{
SimpleContinuousActivityBase.superclass.constructor.call( this, aCommonParamSet );

this.aTimer = new ElapsedTime( aCommonParamSet.aActivityQueue.getTimer() );
this.nMinSimpleDuration = aCommonParamSet.nMinDuration;
this.nMinNumberOfFrames = aCommonParamSet.nMinNumberOfFrames;
this.nCurrPerformCalls = 0;

}
extend( SimpleContinuousActivityBase, ActivityBase );


SimpleContinuousActivityBase.prototype.startAnimation = function()
{
this.aTimer.reset();
};

SimpleContinuousActivityBase.prototype.calcTimeLag = function()
{
SimpleContinuousActivityBase.superclass.calcTimeLag.call( this );

if( !this.isActive() )
return 0.0;

var nCurrElapsedTime = this.aTimer.getElapsedTime();


var nFractionElapsedTime = nCurrElapsedTime / this.nMinSimpleDuration;

var nFractionRequiredCalls = this.nCurrPerformCalls / this.nMinNumberOfFrames;


if( nFractionElapsedTime < nFractionRequiredCalls )
{
return 0.0;
}
else
{
return ( ( nFractionElapsedTime - nFractionRequiredCalls ) * this.nMinSimpleDuration );
}
};

SimpleContinuousActivityBase.prototype.perform = function()
{
if( !SimpleContinuousActivityBase.superclass.perform.call( this ) )
return false; // done, we're ended

var nCurrElapsedTime = this.aTimer.getElapsedTime();
var nT = nCurrElapsedTime / this.nMinSimpleDuration;


var bActivityEnding = false;

if( this.isRepeatCountValid() )
{

var nRepeatCount = this.getRepeatCount();
var nEffectiveRepeat = this.isAutoReverse() ? 2.0 * nRepeatCount : nRepeatCount;

if( nEffectiveRepeat <= nT )
{
bActivityEnding = true;

nT = nEffectiveRepeat;
}
}


var nRepeats;
var nRelativeSimpleTime;
if( this.isAutoReverse() )
{
nRepeats = Math.floor( nT );
var nFractionalActiveDuration =  nT - nRepeats;

if( nRepeats % 2 )
{
nRelativeSimpleTime = 1.0 - nFractionalActiveDuration;
}
else
{
nRelativeSimpleTime = nFractionalActiveDuration;
}

nRepeats /= 2;
}
else
{

nRepeats = Math.floor( nT );
nRelativeSimpleTime = nT - nRepeats;

if( this.isRepeatCountValid() && ( nRepeats >= this.getRepeatCount() ) )
{

nRelativeSimpleTime = 1.0;
nRepeats -= 1.0;
}
}


this.simplePerform( nRelativeSimpleTime, nRepeats );

if( bActivityEnding )
this.endActivity();

++this.nCurrPerformCalls;

return this.isActive();
};

SimpleContinuousActivityBase.prototype.simplePerform = function( /*nSimpleTime, nRepeatCount*/ )
{
throw ( 'SimpleContinuousActivityBase.simplePerform: abstract method invoked' );
};


function ContinuousKeyTimeActivityBase( aCommonParamSet )
{
var nSize = aCommonParamSet.aDiscreteTimes.length;
assert( nSize > 1,
'ContinuousKeyTimeActivityBase constructor: assertion (aDiscreteTimes.length > 1) failed' );

assert( aCommonParamSet.aDiscreteTimes[0] == 0.0,
          nTPrime += 1.0 - this.nAccelerationFraction - this.nDecelerationFraction; // full second interval

var nTRelative = nT - 1.0 + this.nDecelerationFraction;

nTPrime += nTRelative - 0.5*nTRelative*nTRelative / this.nDecelerationFraction;
}
}

nT = nTPrime / nC;

}
return nT;
};

ActivityBase.prototype.getEventQueue = function()
{
return this.aTimerEventQueue;
};

ActivityBase.prototype.getTargetElement = function()
{
return this.aTargetElement;
};

ActivityBase.prototype.isRepeatCountValid = function()
{
return !!this.nRepeats; // first ! convert to bool
};

ActivityBase.prototype.getRepeatCount = function()
{
return this.nRepeats;
};

ActivityBase.prototype.isAutoReverse = function()
{
return this.bAutoReverse;
};

ActivityBase.prototype.end = function()
{
if( !this.isActive() || this.isDisposed() )
return;

if( this.bFirstPerformCall )
{
this.bFirstPerformCall = false;
this.startAnimation();
}

this.performEnd();
this.endAnimation();
this.endActivity();
};

ActivityBase.prototype.performEnd = function()
{
throw ( 'ActivityBase.performEnd: abstract method invoked' );
};


function DiscreteActivityBase( aCommonParamSet )
{
DiscreteActivityBase.superclass.constructor.call( this, aCommonParamSet );

this.aOriginalWakeupEvent = aCommonParamSet.aWakeupEvent;
this.aOriginalWakeupEvent.setActivity( this );
this.aWakeupEvent = this.aOriginalWakeupEvent;
this.aWakeupEvent = aCommonParamSet.aWakeupEvent;
this.aDiscreteTimes = aCommonParamSet.aDiscreteTimes;
this.nMinSimpleDuration = aCommonParamSet.nMinDuration;
this.nCurrPerformCalls = 0;
}
extend( DiscreteActivityBase, ActivityBase );


DiscreteActivityBase.prototype.activate = function( aEndElement )
{
DiscreteActivityBase.superclass.activate.call( this, aEndElement );

this.aWakeupEvent = this.aOriginalWakeupEvent;
this.aWakeupEvent.setNextTimeout( 0 );
this.nCurrPerformCalls = 0;
};

DiscreteActivityBase.prototype.startAnimation = function()
{
this.aWakeupEvent.start();
};

DiscreteActivityBase.prototype.calcFrameIndex = function( nCurrCalls, nVectorSize )
{
if( this.isAutoReverse() )
{
var nFrameIndex = nCurrCalls % (2 * nVectorSize);

if( nFrameIndex >= nVectorSize )
nFrameIndex = 2*nVectorSize - nFrameIndex; // invert sweep

return nFrameIndex;
}
else
{
return nCurrCalls % nVectorSize;
}
};

DiscreteActivityBase.prototype.calcRepeatCount = function( nCurrCalls, nVectorSize )
{
if( this.isAutoReverse() )
{
return Math.floor( nCurrCalls / (2*nVectorSize) ); // we've got 2 cycles per repeat
}
else
{
return Math.floor( nCurrCalls / nVectorSize );
}
};

DiscreteActivityBase.prototype.performDiscreteHook = function( /*nFrame, nRepeatCount*/ )
{
throw ( 'DiscreteActivityBase.performDiscreteHook: abstract method invoked' );
};

DiscreteActivityBase.prototype.perform = function()
{
if( !SimpleContinuousActivityBase.superclass.perform.call( this ) )
return false; // done, we're ended

var nVectorSize = this.aDiscreteTimes.length;

var nFrameIndex = this.calcFrameIndex(this.nCurrPerformCalls, nVectorSize);
var nRepeatCount = this.calcRepeatCount( this.nCurrPerformCalls, nVectorSize );
this.performDiscreteHook( nFrameIndex, nRepeatCount );

++this.nCurrPerformCalls;

var nCurrRepeat = this.nCurrPerformCalls / nVectorSize;

if( this.isAutoReverse() )
nCurrRepeat /= 2;

if( !this.isRepeatCountValid() || nCurrRepeat < this.getRepeatCount() )
{


nFrameIndex = this.calcFrameIndex(this.nCurrPerformCalls, nVectorSize);
var nCurrentRepeatTime = this.aDiscreteTimes[nFrameIndex];
nRepeatCount = this.calcRepeatCount( this.nCurrPerformCalls, nVectorSize );
var nNextTimeout = this.nMinSimpleDuration * ( nRepeatCount + this.calcAcceleratedTime( nCurrentRepeatTime ) );
                      
SetActivity.prototype.isActive = function()
{
return this.bIsActive;
};

SetActivity.prototype.dequeued = function()
{
};

SetActivity.prototype.end = function()
{
this.perform();
};

SetActivity.prototype.setTargets = function( aTargetElement )
{
assert( aTargetElement, 'SetActivity.setTargets: target element is not valid' );
this.aTargetElement = aTargetElement;
};


function ActivityBase( aCommonParamSet )
{
ActivityBase.superclass.constructor.call( this );

this.aTargetElement = null;
this.aEndEvent = aCommonParamSet.aEndEvent;
this.aTimerEventQueue = aCommonParamSet.aTimerEventQueue;
this.nRepeats = aCommonParamSet.nRepeatCount;
this.nAccelerationFraction = aCommonParamSet.nAccelerationFraction;
this.nDecelerationFraction = aCommonParamSet.nDecelerationFraction;
this.bAutoReverse = aCommonParamSet.bAutoReverse;

this.bFirstPerformCall = true;
this.bIsActive = true;

}
extend( ActivityBase, AnimationActivity );


ActivityBase.prototype.activate = function( aEndEvent )
{
this.aEndEvent = aEndEvent;
this.bFirstPerformCall = true;
this.bIsActive = true;
};

ActivityBase.prototype.dispose = function()
{
this.bIsActive = false;

if( this.aEndEvent )
this.aEndEvent.dispose();

this.aEndEvent = null;
};

ActivityBase.prototype.perform = function()
{
if( !this.isActive() )
return false; // no, early exit.

assert( !this.bFirstPerformCall, 'ActivityBase.perform: assertion (!this.FirstPerformCall) failed' );

return true;
};

ActivityBase.prototype.calcTimeLag = function()
{
if( this.isActive() && this.bFirstPerformCall )
{
this.bFirstPerformCall = false;

this.startAnimation();
}
return 0.0;
};

ActivityBase.prototype.isActive = function()
{
return this.bIsActive;
};

ActivityBase.prototype.isDisposed = function()
{
return ( !this.bIsActive && !this.aEndEvent );
};

ActivityBase.prototype.dequeued = function()
{
if( !this.isActive() )
this.endAnimation();
};

ActivityBase.prototype.setTargets = function( aTargetElement )
{
assert( aTargetElement, 'ActivityBase.setTargets: target element is not valid' );

this.aTargetElement = aTargetElement;
};

ActivityBase.prototype.startAnimation = function()
{
throw ( 'ActivityBase.startAnimation: abstract method invoked' );
};

ActivityBase.prototype.endAnimation = function()
{
throw ( 'ActivityBase.endAnimation: abstract method invoked' );
};

ActivityBase.prototype.endActivity = function()
{
this.bIsActive = false;

if( this.aEndEvent )
this.aTimerEventQueue.addEvent( this.aEndEvent );

this.aEndEvent = null;

};

ActivityBase.prototype.calcAcceleratedTime = function( nT )
{


nT = clamp( nT, 0.0, 1.0 );

if( ( this.nAccelerationFraction > 0.0 || this.nDecelerationFraction > 0.0 ) &&
( this.nAccelerationFraction + this.nDecelerationFraction <= 1.0 ) )
{
var nC = 1.0 - 0.5*this.nAccelerationFraction - 0.5*this.nDecelerationFraction;

var nTPrime = 0.0;

if( nT < this.nAccelerationFraction )
{
nTPrime += 0.5 * nT * nT / this.nAccelerationFraction; // partial first interval
}
else
{
nTPrime += 0.5 * this.nAccelerationFraction; // full first interval

if( nT <= ( 1.0 - this.nDecelerationFraction ) )
{
nTPrime += nT - this.nAccelerationFraction; // partial second interval
}
else
{
                              return c;
};

aOperatorSetMap[ COLOR_PROPERTY ].scale = function( k, v )
{
var r = v.clone();
r.scale( k );
return r;
};

aOperatorSetMap[ ENUM_PROPERTY ] = {};

aOperatorSetMap[ ENUM_PROPERTY ].equal = function( a, b )
{
return ( a === b );
};

aOperatorSetMap[ ENUM_PROPERTY ].add = function( a )
{
return a;
};

aOperatorSetMap[ ENUM_PROPERTY ].scale = function( k, v )
{
return v;
};

aOperatorSetMap[ STRING_PROPERTY ] = aOperatorSetMap[ ENUM_PROPERTY ];

aOperatorSetMap[ BOOL_PROPERTY ] = aOperatorSetMap[ ENUM_PROPERTY ];

aOperatorSetMap[ TUPLE_NUMBER_PROPERTY ] = {};

aOperatorSetMap[ TUPLE_NUMBER_PROPERTY ].equal = function( a, b )
{
assert( a.length === b.length, 'Tuples length mismatch.' );
return ( a.toString() === b.toString() );
};

aOperatorSetMap[ TUPLE_NUMBER_PROPERTY ].add = function( a, b )
{
assert( a.length === b.length, 'Tuples length mismatch.' );
var r = [];
for( var i = 0; i < a.length; ++i )
{
r.push(a[i] + b[i]);
}
return r;
};

aOperatorSetMap[ TUPLE_NUMBER_PROPERTY ].scale = function( k, v )
{
var r = [];
for( var i = 0; i < v.length; ++i )
{
r.push(k * v[i]);
}
return r;
};


function ActivityParamSet()
{
this.aEndEvent = null;
this.aWakeupEvent = null;
this.aTimerEventQueue = null;
this.aActivityQueue = null;
this.nMinDuration = undefined;
this.nMinNumberOfFrames = MINIMUM_FRAMES_PER_SECONDS;
this.bAutoReverse = false;
this.nRepeatCount = 1.0;
this.nAccelerationFraction = 0.0;
this.nDecelerationFraction = 0.0;
this.nSlideWidth = undefined;
this.nSlideHeight = undefined;
this.aFormula = null;
this.aDiscreteTimes = [];
}


function AnimationActivity()
{
this.nId = AnimationActivity.getUniqueId();
}


AnimationActivity.CURR_UNIQUE_ID = 0;

AnimationActivity.getUniqueId = function()
{
++AnimationActivity.CURR_UNIQUE_ID;
return AnimationActivity.CURR_UNIQUE_ID;
};

AnimationActivity.prototype.getId = function()
{
return this.nId;
};


function SetActivity( aCommonParamSet, aAnimation, aToAttr  )
{
SetActivity.superclass.constructor.call( this );

this.aAnimation = aAnimation;
this.aTargetElement = null;
this.aEndEvent = aCommonParamSet.aEndEvent;
this.aTimerEventQueue = aCommonParamSet.aTimerEventQueue;
this.aToAttr = aToAttr;
this.bIsActive = true;
}
extend( SetActivity, AnimationActivity );


SetActivity.prototype.activate = function( aEndEvent )
{
this.aEndEvent = aEndEvent;
this.bIsActive = true;
};

SetActivity.prototype.dispose = function()
{
this.bIsActive = false;
if( this.aEndEvent && this.aEndEvent.isCharged() )
this.aEndEvent.dispose();
};

SetActivity.prototype.calcTimeLag = function()
{
return 0.0;
};

SetActivity.prototype.perform = function()
{
if( !this.isActive() )
return false;

this.bIsActive = false;

if( this.aAnimation && this.aTargetElement )
{
this.aAnimation.start( this.aTargetElement );
this.aAnimation.perform( this.aToAttr );
this.aAnimation.end();
}

if( this.aEndEvent )
this.aTimerEventQueue.addEvent( this.aEndEvent );

};
                  aInterpolatorHandler.aLerpFunctorMap[ CALC_MODE_LINEAR ][ COLOR_PROPERTY ][ COLOR_SPACE_RGB ] =
function ( nFrom, nTo, nT )
{
return RGBColor.interpolate( nFrom, nTo, nT );
};

aInterpolatorHandler.aLerpFunctorMap[ CALC_MODE_LINEAR ][ COLOR_PROPERTY ][ COLOR_SPACE_HSL ] =
function ( bCCW  )
{
return  function ( nFrom, nTo, nT )
{
return HSLColor.interpolate( nFrom, nTo, nT, bCCW );
};
};

aInterpolatorHandler.aLerpFunctorMap[ CALC_MODE_LINEAR ][ TUPLE_NUMBER_PROPERTY ] =
function ( aFrom, aTo, nT )
{
var aRes = [];
for( var i = 0; i < aFrom.length; ++i )
{
aRes.push( ( 1.0 - nT )* aFrom[i] + nT * aTo[i] );
}
return aRes;
};


function KeyStopLerp( aValueList )
{
KeyStopLerp.validateInput( aValueList );

this.aKeyStopList = [];
this.nLastIndex = 0;
this.nKeyStopDistance = aValueList[1] - aValueList[0];
if( this.nKeyStopDistance <= 0 )
this.nKeyStopDistance = 0.001;

for( var i = 0; i < aValueList.length; ++i )
this.aKeyStopList.push( aValueList[i] );

this.nUpperBoundIndex = this.aKeyStopList.length - 2;
}


KeyStopLerp.validateInput = function( aValueList )
{
var nSize = aValueList.length;
assert( nSize > 1, 'KeyStopLerp.validateInput: key stop vector must have two entries or more' );

for( var i = 1; i < nSize; ++i )
{
if( aValueList[i-1] > aValueList[i] )
log( 'KeyStopLerp.validateInput: time vector is not sorted in ascending order!' );
}
};

KeyStopLerp.prototype.reset = function()
{
KeyStopLerp.validateInput( this.aKeyStopList );
this.nLastIndex = 0;
this.nKeyStopDistance = this.aKeyStopList[1] - this.aKeyStopList[0];
if( this.nKeyStopDistance <= 0 )
this.nKeyStopDistance = 0.001;

};

KeyStopLerp.prototype.lerp = function( nAlpha )
{
if( nAlpha > this.aKeyStopList[ this.nLastIndex + 1 ] )
{
do
{
var nIndex = this.nLastIndex + 1;
this.nLastIndex = clamp( nIndex, 0, this.nUpperBoundIndex );
this.nKeyStopDistance = this.aKeyStopList[ this.nLastIndex + 1 ] - this.aKeyStopList[ this.nLastIndex ];
}
while( ( this.nKeyStopDistance <= 0 ) && ( this.nLastIndex < this.nUpperBoundIndex ) );
}

var nRawLerp = ( nAlpha - this.aKeyStopList[ this.nLastIndex ] ) / this.nKeyStopDistance;

nRawLerp = clamp( nRawLerp, 0.0, 1.0 );

var aResult = {};
aResult.nIndex = this.nLastIndex;
aResult.nLerp = nRawLerp;

return aResult;
};

KeyStopLerp.prototype.lerp_ported = function( nAlpha )
{
if( ( this.aKeyStopList[ this.nLastIndex ] < nAlpha ) ||
( this.aKeyStopList[ this.nLastIndex + 1 ] >= nAlpha ) )
{
var i = 0;
for( ; i < this.aKeyStopList.length; ++i )
{
if( this.aKeyStopList[i] >= nAlpha )
break;
}
if( this.aKeyStopList[i] > nAlpha )
--i;
var nIndex = i - 1;
this.nLastIndex = clamp( nIndex, 0, this.aKeyStopList.length - 2 );
}

var nRawLerp = ( nAlpha - this.aKeyStopList[ this.nLastIndex ] ) /
( this.aKeyStopList[ this.nLastIndex+1 ] - this.aKeyStopList[ this.nLastIndex ] );

nRawLerp = clamp( nRawLerp, 0.0, 1.0 );

var aResult = {};
aResult.nIndex = this.nLastIndex;
aResult.nLerp = nRawLerp;

return aResult;
};


var aOperatorSetMap = [];

aOperatorSetMap[ NUMBER_PROPERTY ] = {};

aOperatorSetMap[ NUMBER_PROPERTY ].equal = function( a, b )
{
return ( a === b );
};

aOperatorSetMap[ NUMBER_PROPERTY ].add = function( a, b )
{
return ( a + b );
};

aOperatorSetMap[ NUMBER_PROPERTY ].scale = function( k, v )
{
return ( k * v );
};

aOperatorSetMap[ COLOR_PROPERTY ] = {};

aOperatorSetMap[ COLOR_PROPERTY ].equal = function( a, b )
{
return a.equal( b );
};

aOperatorSetMap[ COLOR_PROPERTY ].add = function( a, b )
{
var c = a.clone();
c.add( b );
                             {
if( this.aSkipEffectEvent )
{
this.aTimerEventQueue.addEvent( this.aSkipEffectEvent );
this.aSkipEffectEvent = null;
}
};

EventMultiplexer.prototype.registerRewindCurrentEffectEvent = function( aEvent )
{
this.aRewindCurrentEffectEvent = aEvent;
};

EventMultiplexer.prototype.notifyRewindCurrentEffectEvent = function()
{
if( this.aRewindCurrentEffectEvent )
{
this.aTimerEventQueue.addEvent( this.aRewindCurrentEffectEvent );
this.aRewindCurrentEffectEvent = null;
}
};

EventMultiplexer.prototype.registerRewindLastEffectEvent = function( aEvent )
{
this.aRewindLastEffectEvent = aEvent;
};

EventMultiplexer.prototype.notifyRewindLastEffectEvent = function()
{
if( this.aRewindLastEffectEvent )
{
this.aTimerEventQueue.addEvent( this.aRewindLastEffectEvent );
this.aRewindLastEffectEvent = null;
}
};

EventMultiplexer.prototype.registerSkipInteractiveEffectEvent = function( nNotifierId, aEvent )
{
this.aSkipInteractiveEffectEventSet[ nNotifierId ] = aEvent;
};

EventMultiplexer.prototype.notifySkipInteractiveEffectEvent = function( nNotifierId )
{
if( this.aSkipInteractiveEffectEventSet[ nNotifierId ] )
{
this.aTimerEventQueue.addEvent( this.aSkipInteractiveEffectEventSet[ nNotifierId ] );
}
};

EventMultiplexer.prototype.registerRewindRunningInteractiveEffectEvent = function( nNotifierId, aEvent )
{
this.aRewindRunningInteractiveEffectEventSet[ nNotifierId ] = aEvent;
};

EventMultiplexer.prototype.notifyRewindRunningInteractiveEffectEvent = function( nNotifierId )
{
if( this.aRewindRunningInteractiveEffectEventSet[ nNotifierId ] )
{
this.aTimerEventQueue.addEvent( this.aRewindRunningInteractiveEffectEventSet[ nNotifierId ] );
}
};

EventMultiplexer.prototype.registerRewindEndedInteractiveEffectEvent = function( nNotifierId, aEvent )
{
this.aRewindEndedInteractiveEffectEventSet[ nNotifierId ] = aEvent;
};

EventMultiplexer.prototype.notifyRewindEndedInteractiveEffectEvent = function( nNotifierId )
{
if( this.aRewindEndedInteractiveEffectEventSet[ nNotifierId ] )
{
this.aTimerEventQueue.addEvent( this.aRewindEndedInteractiveEffectEventSet[ nNotifierId ] );
}
};

EventMultiplexer.prototype.registerRewindedEffectHandler = function( aNotifierId, aHandler )
{
this.aRewindedEffectHandlerSet[ aNotifierId ] = aHandler;
};

EventMultiplexer.prototype.notifyRewindedEffectEvent = function( aNotifierId )
{
if( this.aRewindedEffectHandlerSet[ aNotifierId ] )
{
(this.aRewindedEffectHandlerSet[ aNotifierId ])();
}
};

EventMultiplexer.prototype.registerElementChangedHandler = function( aNotifierId, aHandler )
{
this.aElementChangedHandlerSet[ aNotifierId ] = aHandler;
};

EventMultiplexer.prototype.notifyElementChangedEvent = function( aNotifierId, aElement )
{
if( this.aElementChangedHandlerSet[ aNotifierId ] )
{
(this.aElementChangedHandlerSet[ aNotifierId ])( aElement );
}
};

EventMultiplexer.DEBUG = aEventMultiplexerDebugPrinter.isEnabled();

EventMultiplexer.prototype.DBG = function( sMethodName, eEventType, aNotifierId, nTime )
{
if( EventMultiplexer.DEBUG )
{
var sInfo = 'EventMultiplexer.' + sMethodName;
sInfo += '( type: ' + aEventTriggerOutMap[ eEventType ];
sInfo += ', notifier: ' + aNotifierId + ' )';
aEventMultiplexerDebugPrinter.print( sInfo, nTime );
}
};


var aInterpolatorHandler = {};

aInterpolatorHandler.getInterpolator = function( eCalcMode, eValueType, eValueSubtype )
{
var bHasSubtype = ( typeof( eValueSubtype ) === typeof( 0 ) );

if( !bHasSubtype && aInterpolatorHandler.aLerpFunctorMap[ eCalcMode ][ eValueType ] )
{
return aInterpolatorHandler.aLerpFunctorMap[ eCalcMode ][ eValueType ];
}
else if( bHasSubtype && aInterpolatorHandler.aLerpFunctorMap[ eCalcMode ][ eValueType ][ eValueSubtype ] )
{
return aInterpolatorHandler.aLerpFunctorMap[ eCalcMode ][ eValueType ][ eValueSubtype ];
}
else
{
log( 'aInterpolatorHandler.getInterpolator: not found any valid interpolator for calc mode '
+ aCalcModeOutMap[eCalcMode]  + ' and value type ' + aValueTypeOutMap[eValueType]  );
return null;
}
};

aInterpolatorHandler.aLerpFunctorMap = [];
aInterpolatorHandler.aLerpFunctorMap[ CALC_MODE_DISCRETE ] = [];
aInterpolatorHandler.aLerpFunctorMap[ CALC_MODE_LINEAR ] = [];


aInterpolatorHandler.aLerpFunctorMap[ CALC_MODE_LINEAR ][ NUMBER_PROPERTY ] =
function ( nFrom, nTo, nT )
{
return ( ( 1.0 - nT )* nFrom + nT * nTo );
};

aInterpolatorHandler.aLerpFunctorMap[ CALC_MODE_LINEAR ][ COLOR_PROPERTY ] = [];

       };

InteractiveAnimationSequence.prototype.end = function()
{
aSlideShow.notifyInteractiveAnimationSequenceEnd( this.getId() );
this.bIsRunning = false;
};


function PriorityEntry( aValue, nPriority )
{
this.aValue = aValue;
this.nPriority = nPriority;
}

PriorityEntry.compare = function( aLhsEntry, aRhsEntry )
{
if ( aLhsEntry.nPriority < aRhsEntry.nPriority )
{
return -1;
}
else if (aLhsEntry.nPriority > aRhsEntry.nPriority)
{
return 1;
}
else
{
return 0;
}
};


function EventMultiplexer( aTimerEventQueue )
{
this.nId = EventMultiplexer.getUniqueId();
this.aTimerEventQueue = aTimerEventQueue;
this.aEventMap = {};
this.aAnimationsEndHandler = null;
this.aSkipEffectEndHandlerSet = [];
this.aMouseClickHandlerSet = new PriorityQueue( PriorityEntry.compare );
this.aSkipEffectEvent = null;
this.aRewindCurrentEffectEvent = null;
this.aRewindLastEffectEvent = null;
this.aSkipInteractiveEffectEventSet = {};
this.aRewindRunningInteractiveEffectEventSet = {};
this.aRewindEndedInteractiveEffectEventSet = {};
this.aRewindedEffectHandlerSet = {};
this.aElementChangedHandlerSet = {};
}

EventMultiplexer.CURR_UNIQUE_ID = 0;

EventMultiplexer.getUniqueId = function()
{
++EventMultiplexer.CURR_UNIQUE_ID;
return EventMultiplexer.CURR_UNIQUE_ID;
};

EventMultiplexer.prototype.getId = function()
{
return this.nId;
};

EventMultiplexer.prototype.hasRegisteredMouseClickHandlers = function()
{
return !this.aMouseClickHandlerSet.isEmpty();
};

EventMultiplexer.prototype.registerMouseClickHandler = function( aHandler, nPriority )
{
var aHandlerEntry = new PriorityEntry( aHandler, nPriority );
this.aMouseClickHandlerSet.push( aHandlerEntry );
};

EventMultiplexer.prototype.notifyMouseClick = function( aMouseEvent )
{
var aMouseClickHandlerSet = this.aMouseClickHandlerSet.clone();
while( !aMouseClickHandlerSet.isEmpty() )
{
var aHandlerEntry = aMouseClickHandlerSet.top();
aMouseClickHandlerSet.pop();
if( aHandlerEntry.aValue.handleClick( aMouseEvent ) )
break;
}
};

EventMultiplexer.prototype.registerEvent = function( eEventType, aNotifierId, aEvent )
{
this.DBG( 'registerEvent', eEventType, aNotifierId );
if( !this.aEventMap[ eEventType ] )
{
this.aEventMap[ eEventType ] = {};
}
if( !this.aEventMap[ eEventType ][ aNotifierId ] )
{
this.aEventMap[ eEventType ][ aNotifierId ] = [];
}
this.aEventMap[ eEventType ][ aNotifierId ].push( aEvent );
};


EventMultiplexer.prototype.notifyEvent = function( eEventType, aNotifierId )
{
this.DBG( 'notifyEvent', eEventType, aNotifierId );
if( this.aEventMap[ eEventType ] )
{
if( this.aEventMap[ eEventType ][ aNotifierId ] )
{
var aEventArray = this.aEventMap[ eEventType ][ aNotifierId ];
var nSize = aEventArray.length;
for( var i = 0; i < nSize; ++i )
{
this.aTimerEventQueue.addEvent( aEventArray[i] );
}
}
}
};

EventMultiplexer.prototype.registerAnimationsEndHandler = function( aHandler )
{
this.aAnimationsEndHandler = aHandler;
};

EventMultiplexer.prototype.notifyAnimationsEndEvent = function()
{
if( this.aAnimationsEndHandler )
this.aAnimationsEndHandler();
};

EventMultiplexer.prototype.registerNextEffectEndHandler = function( aHandler )
{
this.aSkipEffectEndHandlerSet.push( aHandler );
};

EventMultiplexer.prototype.notifyNextEffectEndEvent = function()
{
var nSize = this.aSkipEffectEndHandlerSet.length;
for( var i = 0; i < nSize; ++i )
{
(this.aSkipEffectEndHandlerSet[i])();
}
this.aSkipEffectEndHandlerSet = [];
};

EventMultiplexer.prototype.registerSkipEffectEvent = function( aEvent )
{
this.aSkipEffectEvent = aEvent;
};

EventMultiplexer.prototype.notifySkipEffectEvent = function()
               }

this.sId = sId;
this.aElement = aElement;
this.aEventMultiplexer = aEventMultiplexer;
this.nTargetSlideIndex = undefined;

this.sURL = getNSAttribute( 'xlink', this.aElement, 'href' );
if( this.sURL )
{
if( this.sURL[0] === '#' )
{
if( this.sURL.substr(1, 5) === 'Slide' )
{
var sSlideIndex = this.sURL.split( ' ' )[1];
this.nTargetSlideIndex = parseInt( sSlideIndex ) - 1;
}
}

this.aEventMultiplexer.registerElementChangedHandler( this.sId, bind2( HyperlinkElement.prototype.onElementChanged, this) );
this.aEventMultiplexer.registerMouseClickHandler( this, 1100 );

this.bIsPointerOver = false;
this.mouseEnterHandler = bind2( HyperlinkElement.prototype.onMouseEnter, this);
this.mouseLeaveHandler = bind2( HyperlinkElement.prototype.onMouseLeave, this);
this.aElement.addEventListener( 'mouseover', this.mouseEnterHandler, false );
this.aElement.addEventListener( 'mouseout', this.mouseLeaveHandler, false );
}
else
{
log( 'warning: HyperlinkElement(' + this.sId + '): url is empty' );
}
}

HyperlinkElement.prototype.onElementChanged = function( aElement )
{
if( !aElement )
{
log( 'error: HyperlinkElement: passed element is not valid' );
return;
}

if( this.sURL )
{
this.aElement.removeEventListener( 'mouseover', this.mouseEnterHandler, false );
this.aElement.removeEventListener( 'mouseout', this.mouseLeaveHandler, false );
this.aElement = aElement;
this.aElement.addEventListener( 'mouseover', this.mouseEnterHandler, false );
this.aElement.addEventListener( 'mouseout', this.mouseLeaveHandler, false );
}
};

HyperlinkElement.prototype.onMouseEnter = function()
{
this.bIsPointerOver = true;
this.setPointerCursor();
};

HyperlinkElement.prototype.onMouseLeave = function()
{
this.bIsPointerOver = false;
this.setDefaultCursor();
};

HyperlinkElement.prototype.handleClick = function( )
{
if( !this.bIsPointerOver ) return false;

if( this.nTargetSlideIndex !== undefined )
{
aSlideShow.displaySlide( this.nTargetSlideIndex, true );
}
else
{
var aWindowObject = document.defaultView;
if( aWindowObject )
{
aWindowObject.open( this.sURL, this.sId );
}
else
{
log( 'error: HyperlinkElement.handleClick: invalid window object.' );
}
}

return true;
};

HyperlinkElement.prototype.setPointerCursor = function()
{
if( this.bClickHandled )
return;

this.aElement.setAttribute( 'style', 'cursor: pointer' );
};

HyperlinkElement.prototype.setDefaultCursor = function()
{
this.aElement.setAttribute( 'style', 'cursor: default' );
};


function InteractiveAnimationSequence( nId )
{
this.nId = nId;
this.bIsRunning = false;
this.aStartEvent = null;
this.aEndEvent = null;
}

InteractiveAnimationSequence.prototype.getId = function()
{
return this.nId;
};

InteractiveAnimationSequence.prototype.getStartEvent = function()
{
if( !this.aStartEvent )
{
this.aStartEvent =
makeEvent( bind2( InteractiveAnimationSequence.prototype.start, this ) );
}
return this.aStartEvent;
};

InteractiveAnimationSequence.prototype.getEndEvent = function()
{
if( !this.aEndEvent )
{
this.aEndEvent =
makeEvent( bind2( InteractiveAnimationSequence.prototype.end, this ) );
}
return this.aEndEvent;
};

InteractiveAnimationSequence.prototype.chargeEvents = function()
{
if( this.aStartEvent )      this.aStartEvent.charge();
if( this.aEndEvent )        this.aEndEvent.charge();
};

InteractiveAnimationSequence.prototype.isRunning = function()
{
return this.bIsRunning;
};

InteractiveAnimationSequence.prototype.start = function()
{
aSlideShow.notifyInteractiveAnimationSequenceStart( this.getId() );
this.bIsRunning = true;
        }

var bEventRegistered = false;
switch( eEventType )
{
case EVENT_TRIGGER_ON_CLICK:
aEventMultiplexer.registerEvent( eEventType, aSourceEventElement.getId(), aEvent );
aEventMultiplexer.registerRewindedEffectHandler( aSourceEventElement.getId(),
bind2( aSourceEventElement.charge, aSourceEventElement ) );
bEventRegistered = true;
break;
default:
log( 'generateEvent: not handled event type: ' + eEventType );
}
if( bEventRegistered )
{
var aStartEvent = aInteractiveAnimationSequenceMap[ nNodeId ].getStartEvent();
var aEndEvent = aInteractiveAnimationSequenceMap[ nNodeId ].getEndEvent();
aEventMultiplexer.registerEvent( eEventType, aSourceEventElement.getId(), aStartEvent );
aEventMultiplexer.registerEvent( EVENT_TRIGGER_END_EVENT, nNodeId, aEndEvent );
aEventMultiplexer.registerRewindedEffectHandler(
nNodeId,
bind2( InteractiveAnimationSequence.prototype.chargeEvents,
aInteractiveAnimationSequenceMap[ nNodeId ] )
);
}
}
else  // no base event element present
{
switch( eEventType )
{
case EVENT_TRIGGER_ON_NEXT_EFFECT:
aNextEffectEventArray.appendEvent( aEvent );
break;
default:
log( 'generateEvent: not handled event type: ' + eEventType );
}
}
break;
case SYNCBASE_TIMING:
eEventType = aTiming.getEventType();
sEventBaseElemId = aTiming.getEventBaseElementId();
if( sEventBaseElemId )
{
var aAnimationNode = aNodeContext.aAnimationNodeMap[ sEventBaseElemId ];
if( !aAnimationNode )
{
log( 'generateEvent: SYNCBASE_TIMING: event base element not found: ' + sEventBaseElemId );
return;
}
aEventMultiplexer.registerEvent( eEventType, aAnimationNode.getId(), aEvent );
}
else
{
log( 'generateEvent: SYNCBASE_TIMING: event base element not specified' );
}
break;
default:
log( 'generateEvent: not handled timing type: ' + eTimingType );
}
}
}

registerEvent.DEBUG = aRegisterEventDebugPrinter.isEnabled();

registerEvent.DBG = function( aTiming, nTime )
{
if( registerEvent.DEBUG )
{
aRegisterEventDebugPrinter.print( 'registerEvent( timing: ' + aTiming.info() + ' )', nTime );
}
};


function SourceEventElement( sId, aElement, aEventMultiplexer )
{
this.sId = sId;
this.aElement = aElement;
this.aEventMultiplexer = aEventMultiplexer;

this.aEventMultiplexer.registerMouseClickHandler( this, 1000 );

this.bClickHandled = false;
this.bIsPointerOver = false;
this.aElement.addEventListener( 'mouseover', bind2( SourceEventElement.prototype.onMouseEnter, this), false );
this.aElement.addEventListener( 'mouseout', bind2( SourceEventElement.prototype.onMouseLeave, this), false );
}

SourceEventElement.prototype.getId = function()
{
return this.sId;
};

SourceEventElement.prototype.onMouseEnter = function()
{
this.bIsPointerOver = true;
this.setPointerCursor();
};

SourceEventElement.prototype.onMouseLeave = function()
{
this.bIsPointerOver = false;
this.setDefaultCursor();
};

SourceEventElement.prototype.charge = function()
{
this.bClickHandled = false;
this.setPointerCursor();
};

SourceEventElement.prototype.handleClick = function( /*aMouseEvent*/ )
{
if( !this.bIsPointerOver ) return false;

if( this.bClickHandled )
return false;

this.aEventMultiplexer.notifyEvent( EVENT_TRIGGER_ON_CLICK, this.getId() );
aSlideShow.update();
this.bClickHandled = true;
this.setDefaultCursor();
return true;
};

SourceEventElement.prototype.setPointerCursor = function()
{
if( this.bClickHandled )
return;

this.aElement.setAttribute( 'style', 'cursor: pointer' );
};

SourceEventElement.prototype.setDefaultCursor = function()
{
this.aElement.setAttribute( 'style', 'cursor: default' );
};


function HyperlinkElement( sId, aEventMultiplexer )
{
var aElement = document.getElementById( sId );
if( !aElement )
{
log( 'error: HyperlinkElement: no element with id: <' + sId + '> found' );
return;
}
if( !aEventMultiplexer )
{
log( 'AnimatedElement constructor: event multiplexer is not valid' );
   return true;
};

DelayEvent.prototype.isCharged = function()
{
return !this.bWasFired;
};

DelayEvent.prototype.getActivationTime = function( nCurrentTime )
{
return ( this.nTimeout + nCurrentTime );
};

DelayEvent.prototype.dispose = function()
{
if( this.isCharged() )
this.bWasFired = true;
};

DelayEvent.prototype.charge = function()
{
if( !this.isCharged() )
this.bWasFired = false;
};


function WakeupEvent( aTimer, aActivityQueue )
{
WakeupEvent.superclass.constructor.call( this );

this.aTimer = new ElapsedTime( aTimer );
this.nNextTime = 0.0;
this.aActivity = null;
this.aActivityQueue = aActivityQueue;
}
extend( WakeupEvent, Event );


WakeupEvent.prototype.clone = function()
{
var aWakeupEvent = new WakeupEvent( this.aTimer.getTimeBase(), this.aActivityQueue );
aWakeupEvent.nNextTime = this.nNextTime;
aWakeupEvent.aActivity = this.aActivity;
return aWakeupEvent;
};

WakeupEvent.prototype.dispose = function()
{
this.aActivity = null;
};

WakeupEvent.prototype.fire = function()
{
if( !this.aActivity )
return false;

return this.aActivityQueue.addActivity( this.aActivity );
};

WakeupEvent.prototype.isCharged = function()
{
return true;
};

WakeupEvent.prototype.getActivationTime = function( nCurrentTime )
{
var nElapsedTime = this.aTimer.getElapsedTime();

return Math.max( nCurrentTime, nCurrentTime - nElapsedTime + this.nNextTime );
};

WakeupEvent.prototype.start = function()
{
this.aTimer.reset();
};

WakeupEvent.prototype.setNextTimeout = function( nNextTime )
{
this.nNextTime = nNextTime;
};

WakeupEvent.prototype.setActivity = function( aActivity )
{
this.aActivity = aActivity;
};


function makeEvent( aFunctor )
{
return new DelayEvent( aFunctor, 0.0 );
}


function makeDelay( aFunctor, nTimeout )
{
return new DelayEvent( aFunctor, nTimeout );
}


function registerEvent( nNodeId, aTiming, aEvent, aNodeContext )
{
var aSlideShowContext = aNodeContext.aContext;
var eTimingType = aTiming.getType();

registerEvent.DBG( aTiming );

if( eTimingType == OFFSET_TIMING )
{
aSlideShowContext.aTimerEventQueue.addEvent( aEvent );
}
else if ( aNodeContext.bFirstRun )
{
var aEventMultiplexer = aSlideShowContext.aEventMultiplexer;
if( !aEventMultiplexer )
{
log( 'registerEvent: event multiplexer not initialized' );
return;
}
var aNextEffectEventArray = aSlideShowContext.aNextEffectEventArray;
if( !aNextEffectEventArray )
{
log( 'registerEvent: next effect event array not initialized' );
return;
}
var aInteractiveAnimationSequenceMap =
aSlideShowContext.aInteractiveAnimationSequenceMap;
if( !aInteractiveAnimationSequenceMap )
{
log( 'registerEvent: interactive animation sequence map not initialized' );
return;
}

switch( eTimingType )
{
case EVENT_TIMING:
var eEventType = aTiming.getEventType();
var sEventBaseElemId = aTiming.getEventBaseElementId();
if( sEventBaseElemId )
{
var aEventBaseElem = document.getElementById( sEventBaseElemId );
if( !aEventBaseElem )
{
log( 'generateEvent: EVENT_TIMING: event base element not found: ' + sEventBaseElemId );
return;
}
var aSourceEventElement = aNodeContext.makeSourceEventElement( sEventBaseElemId, aEventBaseElem );

if( !aInteractiveAnimationSequenceMap[ nNodeId ] )
{
aInteractiveAnimationSequenceMap[ nNodeId ] = new InteractiveAnimationSequence(nNodeId);
           if( !aAnimationRootElement )
return false;

this.aRootNode = createAnimationTree( aAnimationRootElement, this.aContext );

return ( this.aRootNode ? true : false );
};

SlideAnimations.prototype.parseElements = function()
{
if( !this.aRootNode )
return false;

if( !this.aRootNode.parseElement() )
return false;
else
this.bElementsParsed = true;
};

SlideAnimations.prototype.elementsParsed = function()
{
return this.bElementsParsed;
};

SlideAnimations.prototype.isFirstRun = function()
{
return this.aContext.bFirstRun;
};

SlideAnimations.prototype.isAnimated = function()
{
if( !this.bElementsParsed )
return false;

return this.aRootNode.hasPendingAnimation();
};

SlideAnimations.prototype.start = function()
{
if( !this.bElementsParsed )
return false;

this.chargeSourceEvents();
this.chargeInterAnimEvents();

aSlideShow.setSlideEvents( this.aNextEffectEventArray,
this.aInteractiveAnimationSequenceMap,
this.aEventMultiplexer );

if( this.aContext.bFirstRun == undefined )
this.aContext.bFirstRun = true;
else if( this.aContext.bFirstRun )
this.aContext.bFirstRun = false;

this.aContext.bIsInvalid = !this.aRootNode.init();
if( this.aContext.bIsInvalid )
return false;

return this.aRootNode.resolve();
};

SlideAnimations.prototype.end = function( bLeftEffectsSkipped )
{
if( !this.bElementsParsed )
return; // no animations there

this.aRootNode.deactivate();
this.aRootNode.end();

if( bLeftEffectsSkipped && this.isFirstRun() )
{
this.aContext.bFirstRun = undefined;
}
else if( this.isFirstRun() )
{
this.aContext.bFirstRun = false;
}

this.aContext.bIsInvalid = false;
};

SlideAnimations.prototype.dispose = function()
{
if( this.aRootNode )
{
this.aRootNode.dispose();
}
};

SlideAnimations.prototype.clearNextEffectEvents = function()
{
ANIMDBG.print( 'SlideAnimations.clearNextEffectEvents: current slide: ' + nCurSlide );
this.aNextEffectEventArray.clear();
this.aContext.bFirstRun = undefined;
};

SlideAnimations.prototype.chargeSourceEvents = function()
{
for( var id in this.aSourceEventElementMap )
{
this.aSourceEventElementMap[id].charge();
}
};

SlideAnimations.prototype.chargeInterAnimEvents = function()
{
for( var id in this.aInteractiveAnimationSequenceMap )
{
this.aInteractiveAnimationSequenceMap[id].chargeEvents();
}
};


function Event()
{
this.nId = Event.getUniqueId();
}


Event.CURR_UNIQUE_ID = 0;

Event.getUniqueId = function()
{
++Event.CURR_UNIQUE_ID;
return Event.CURR_UNIQUE_ID;
};

Event.prototype.getId = function()
{
return this.nId;
};


function DelayEvent( aFunctor, nTimeout )
{
DelayEvent.superclass.constructor.call( this );

this.aFunctor = aFunctor;
this.nTimeout = nTimeout;
this.bWasFired = false;
}
extend( DelayEvent, Event );


DelayEvent.prototype.fire = function()
{
assert( this.isCharged(), 'DelayEvent.fire: assertion isCharged failed' );

this.bWasFired = true;
this.aFunctor();
                              var sTypeAttr = aAnimElem.getAttributeNS( NSS['smil'], 'type' );
if( sTypeAttr && aTransitionTypeInMap[ sTypeAttr ] )
{
this.eTransitionType = aTransitionTypeInMap[ sTypeAttr ];
}
else
{
this.bIsValid = false;
log( 'SlideTransition.parseElement: transition type not valid: ' + sTypeAttr );
}

this.eTransitionSubType = undefined;
var sSubTypeAttr = aAnimElem.getAttributeNS( NSS['smil'], 'subtype' );
if( sSubTypeAttr === null )
sSubTypeAttr = 'default';
if( sSubTypeAttr && ( aTransitionSubtypeInMap[ sSubTypeAttr ] !== undefined ) )
{
this.eTransitionSubType = aTransitionSubtypeInMap[ sSubTypeAttr ];
}
else
{
this.bIsValid = false;
log( 'SlideTransition.parseElement: transition subtype not valid: ' + sSubTypeAttr );
}

if( this.bIsValid && aTransitionInfoTable[this.eTransitionType][this.eTransitionSubType] === undefined )
{
this.bIsValid = false;
log( 'SlideTransition.parseElement: transition not valid: type: ' + sTypeAttr + ' subtype: ' + sSubTypeAttr );
}

this.bReverseDirection = false;
var sDirectionAttr = aAnimElem.getAttributeNS( NSS['smil'], 'direction' );
if( sDirectionAttr == 'reverse' )
this.bReverseDirection = true;

this.sFadeColor = null;
if( this.eTransitionType == FADE_TRANSITION &&
( this.eTransitionSubType == FADEFROMCOLOR_TRANS_SUBTYPE ||
this.eTransitionSubType == FADEOVERCOLOR_TRANS_SUBTYPE ||
this.eTransitionSubType == FADETOCOLOR_TRANS_SUBTYPE ) )
{
var sColorAttr = aAnimElem.getAttributeNS( NSS['smil'], 'fadeColor' );
if( sColorAttr )
this.sFadeColor = sColorAttr;
else
this.sFadeColor='#000000';
}


this.aDuration = null;
var sDurAttr = aAnimElem.getAttributeNS( NSS['smil'], 'dur' );
this.aDuration = new Duration( sDurAttr );
if( !this.aDuration.isSet() )
{
this.aDuration = new Duration( null ); // duration == 0.0
}

this.nMinFrameCount = ( this.getDuration().isValue() )
? ( this.getDuration().getValue() * MINIMUM_FRAMES_PER_SECONDS )
: MINIMUM_FRAMES_PER_SECONDS;
if( this.nMinFrameCount < 1.0 )
this.nMinFrameCount = 1;
else if( this.nMinFrameCount > MINIMUM_FRAMES_PER_SECONDS )
this.nMinFrameCount = MINIMUM_FRAMES_PER_SECONDS;

};

SlideTransition.prototype.isValid = function()
{
return this.bIsValid;
};

SlideTransition.prototype.getTransitionType = function()
{
return this.eTransitionType;
};

SlideTransition.prototype.getTransitionSubType = function()
{
return this.eTransitionSubType;
};

SlideTransition.prototype.getTransitionMode = function()
{
return this.eTransitionMode;
};

SlideTransition.prototype.getFadeColor = function()
{
return this.sFadeColor;
};

SlideTransition.prototype.isDirectionForward = function()
{
return !this.bReverseDirection;
};

SlideTransition.prototype.getDuration = function()
{
return this.aDuration;
};

SlideTransition.prototype.getMinFrameCount = function()
{
return this.nMinFrameCount;
};

SlideTransition.prototype.info = function()
{

var sInfo ='slide transition <' + this.sSlideId + '>: ';
sInfo += ';  type: ' + getKeyByValue(aTransitionTypeInMap, this.getTransitionType());

sInfo += ';  subtype: ' + getKeyByValue(aTransitionSubtypeInMap, this.getTransitionSubType());

if( !this.isDirectionForward() )
sInfo += ';  direction: reverse';

sInfo += '; mode: ' + aTransitionModeOutMap[ this.getTransitionMode() ];

if( this.getDuration() )
sInfo += '; duration: ' + this.getDuration().info();

return sInfo;
};


function SlideAnimations( aSlideShowContext )
{
this.aContext = new NodeContext( aSlideShowContext );
this.aAnimationNodeMap = {};
this.aAnimatedElementMap = {};
this.aSourceEventElementMap = {};
this.aNextEffectEventArray = new NextEffectEventArray();
this.aInteractiveAnimationSequenceMap = {};
this.aEventMultiplexer = new EventMultiplexer( aSlideShowContext.aTimerEventQueue );
this.aRootNode = null;
this.bElementsParsed = false;

this.aContext.aAnimationNodeMap = this.aAnimationNodeMap;
this.aContext.aAnimatedElementMap = this.aAnimatedElementMap;
this.aContext.aSourceEventElementMap = this.aSourceEventElementMap;

this.aEventMultiplexer.registerMouseClickHandler( document, 100 );
}


SlideAnimations.prototype.importAnimations = function( aAnimationRootElement )
{
                               
function SlideTransition( aAnimationsRootElement, aSlideId )
{
this.sSlideId = aSlideId;
this.bIsValid = false;
this.eTransitionType = undefined;
this.eTransitionSubType = undefined;
this.bReverseDirection = false;
this.eTransitionMode = TRANSITION_MODE_IN;
this.sFadeColor = null;
this.aDuration = null;
this.nMinFrameCount = undefined;

if( aAnimationsRootElement )
{
if( aAnimationsRootElement.firstElementChild &&
( aAnimationsRootElement.firstElementChild.getAttributeNS( NSS['smil'], 'begin' ) === (this.sSlideId + '.begin') ) )
{
var aTransitionFilterElement = aAnimationsRootElement.firstElementChild.firstElementChild;
if( aTransitionFilterElement && ( aTransitionFilterElement.localName === 'transitionFilter' ) )
{
this.aElement = aTransitionFilterElement;
this.parseElement();
}
aAnimationsRootElement.removeChild( aAnimationsRootElement.firstElementChild );
}
}
}

SlideTransition.prototype.createSlideTransition = function( aLeavingSlide, aEnteringSlide )
{
if( !this.isValid() )
return null;
if( this.eTransitionType == 0 )
return null;

if( !aEnteringSlide )
{
log( 'SlideTransition.createSlideTransition: invalid entering slide.' );
return null;
}

var aTransitionInfo = aTransitionInfoTable[this.eTransitionType][this.eTransitionSubType];
var eTransitionClass = aTransitionInfo['class'];

switch( eTransitionClass )
{
default:
case TRANSITION_INVALID:
log( 'SlideTransition.createSlideTransition: transition class: TRANSITION_INVALID' );
return null;

case TRANSITION_CLIP_POLYPOLYGON:
var aParametricPolyPolygon
= createClipPolyPolygon( this.eTransitionType, this.eTransitionSubType );
return new ClippedSlideChange( aLeavingSlide, aEnteringSlide, aParametricPolyPolygon,
aTransitionInfo, this.isDirectionForward() );

case TRANSITION_SPECIAL:
switch( this.eTransitionType )
{
default:
log( 'SlideTransition.createSlideTransition: ' +
'transition class: TRANSITION_SPECIAL, ' +
'unknown transition type: ' + this.eTransitionType );
return null;

case PUSHWIPE_TRANSITION:
{
var aDirection = null;
switch( this.eTransitionSubType )
{
default:
log( 'SlideTransition.createSlideTransition: ' +
'transition type: PUSHWIPE_TRANSITION, ' +
'unknown transition subtype: ' + this.eTransitionSubType );
return null;
case FROMTOP_TRANS_SUBTYPE:
aDirection = { x: 0.0, y: 1.0 };
break;
case FROMBOTTOM_TRANS_SUBTYPE:
aDirection = { x: 0.0, y: -1.0 };
break;
case FROMLEFT_TRANS_SUBTYPE:
aDirection = { x: 1.0, y: 0.0 };
break;
case FROMRIGHT_TRANS_SUBTYPE:
aDirection = { x: -1.0, y: 0.0 };
break;
}
return new MovingSlideChange( aLeavingSlide, aEnteringSlide, aDirection, aDirection );
}

case SLIDEWIPE_TRANSITION:
{
var aInDirection = null;
switch( this.eTransitionSubType )
{
default:
log( 'SlideTransition.createSlideTransition: ' +
'transition type: SLIDEWIPE_TRANSITION, ' +
'unknown transition subtype: ' + this.eTransitionSubType );
return null;
case FROMTOP_TRANS_SUBTYPE:
aInDirection = { x: 0.0, y: 1.0 };
break;
case FROMBOTTOM_TRANS_SUBTYPE:
aInDirection = { x: 0.0, y: -1.0 };
break;
case FROMLEFT_TRANS_SUBTYPE:
aInDirection = { x: 1.0, y: 0.0 };
break;
case FROMRIGHT_TRANS_SUBTYPE:
aInDirection = { x: -1.0, y: 0.0 };
break;
}
var aNoDirection = { x: 0.0, y: 0.0 };
if( !this.bReverseDirection )
{
return new MovingSlideChange( aLeavingSlide, aEnteringSlide, aNoDirection, aInDirection );
}
else
{
return new MovingSlideChange( aLeavingSlide, aEnteringSlide, aInDirection, aNoDirection );
}
}

case FADE_TRANSITION:
switch( this.eTransitionSubType )
{
default:
log( 'SlideTransition.createSlideTransition: ' +
'transition type: FADE_TRANSITION, ' +
'unknown transition subtype: ' + this.eTransitionSubType );
return null;
case CROSSFADE_TRANS_SUBTYPE:
return new FadingSlideChange( aLeavingSlide, aEnteringSlide );
case FADEOVERCOLOR_TRANS_SUBTYPE:
return new FadingOverColorSlideChange( aLeavingSlide, aEnteringSlide, this.getFadeColor() );
}
}
}
};

SlideTransition.prototype.parseElement = function()
{
this.bIsValid = true;
var aAnimElem = this.aElement;

this.eTransitionType = undefined;
           if( !sVisibilityAttr )
sVisibilityAttr = 'inherit';
aAnimatableElement.setAttribute( 'visibility', sVisibilityAttr );
aParagraphElement.setAttribute( 'visibility', 'inherit' );
this.aGraphicGroupElement.setAttribute( 'visibility', 'inherit' );
if( aBulletCharElem )
aBulletCharElem.setAttribute( 'visibility', 'hidden' );
for( i = 0; i < aBitmapCloneSet.length; ++i )
{
if( aBitmapElemSet[i] )
aBitmapElemSet[i].setAttribute( 'visibility', 'hidden' );
}


aTextElement.appendChild( aParagraphElement );
aAnimatableElement.appendChild( aTextElement );

if( aBulletCharClone )
this.aGraphicGroupElement.appendChild( aBulletCharClone );
for( i = 0; i < aBitmapCloneSet.length; ++i )
{
if( aBitmapCloneSet[i] )
this.aGraphicGroupElement.appendChild( aBitmapCloneSet[i] );
}
aAnimatableElement.appendChild( this.aGraphicGroupElement );
aAnimatedElementGroup.appendChild( aAnimatableElement );

this.aParentTextElement = aElement.parentNode;
this.aParagraphElement = aElement;
this.aAnimatedElementGroup = aAnimatedElementGroup;
this.nRunningAnimations = 0;

this.aHyperlinkIdSet = [];
var aHyperlinkElementSet = getElementsByClassName( this.aParagraphElement, 'UrlField' );
var sHyperlinkId;
for( i = 0; i < aHyperlinkElementSet.length; ++i )
{
sHyperlinkId = aHyperlinkElementSet[i].getAttribute( 'id' );
if( sHyperlinkId )
this.aHyperlinkIdSet.push( sHyperlinkId );
else
log( 'error: AnimatedTextElement constructor: hyperlink element has no id' );
}

AnimatedTextElement.superclass.constructor.call( this, aAnimatableElement, aEventMultiplexer );

}
extend( AnimatedTextElement, AnimatedElement );


AnimatedTextElement.prototype.setToElement = function( aElement )
{
var bRet = AnimatedTextElement.superclass.setToElement.call( this, aElement );
if( bRet )
{
this.aGraphicGroupElement = getElementByClassName( this.aActiveElement, 'GraphicGroup' );
}
return ( bRet && this.aGraphicGroupElement );
};

AnimatedTextElement.prototype.notifySlideStart = function( aSlideShowContext )
{
DBGLOG( 'AnimatedTextElement.notifySlideStart' );
AnimatedTextElement.superclass.notifySlideStart.call( this, aSlideShowContext );
this.aGraphicGroupElement = getElementByClassName( this.aActiveElement, 'GraphicGroup' );
this.restoreBaseTextParagraph();
};

AnimatedTextElement.prototype.notifySlideEnd = function()
{
DBGLOG( 'AnimatedTextElement.notifySlideEnd' );
this.aGraphicGroupElement.setAttribute( 'visibility', 'inherit' );
};

AnimatedTextElement.prototype.restoreBaseTextParagraph = function()
{
var aActiveParagraphElement = this.aActiveElement.firstElementChild.firstElementChild;
if( aActiveParagraphElement )
{
var sVisibilityAttr = this.aActiveElement.getAttribute( 'visibility' );
if( !sVisibilityAttr || ( sVisibilityAttr === 'visible' ) )
sVisibilityAttr = 'inherit';
if( sVisibilityAttr === 'inherit' )
this.aGraphicGroupElement.setAttribute( 'visibility', 'visible' );
else
this.aGraphicGroupElement.setAttribute( 'visibility', 'hidden' );

var aParagraphClone = aActiveParagraphElement.cloneNode( true );
aParagraphClone.setAttribute( 'id', this.sParagraphId );
aParagraphClone.setAttribute( 'visibility', sVisibilityAttr );
this.aParentTextElement.replaceChild( aParagraphClone, this.aParagraphElement );
this.aParagraphElement = aParagraphClone;


var aEventMultiplexer = this.aSlideShowContext.aEventMultiplexer;
var aHyperlinkIdSet = this.aHyperlinkIdSet;
var aHyperlinkElementSet = getElementsByClassName( this.aParagraphElement, 'UrlField' );
var i = 0;
for( ; i < aHyperlinkIdSet.length; ++i )
{
aEventMultiplexer.notifyElementChangedEvent( aHyperlinkIdSet[i], aHyperlinkElementSet[i] );
}
}
this.aActiveElement.setAttribute( 'visibility', 'hidden' );
};

AnimatedTextElement.prototype.notifyAnimationStart = function()
{
DBGLOG( 'AnimatedTextElement.notifyAnimationStart' );
if( this.nRunningAnimations === 0 )
{
var sVisibilityAttr = this.aParagraphElement.getAttribute( 'visibility' );
if( !sVisibilityAttr )
sVisibilityAttr = 'inherit';
this.aActiveElement.setAttribute( 'visibility', sVisibilityAttr );
this.aGraphicGroupElement.setAttribute( 'visibility', 'inherit' );
this.aParagraphElement.setAttribute( 'visibility', 'hidden' );
}
++this.nRunningAnimations;
};

AnimatedTextElement.prototype.notifyAnimationEnd = function()
{
DBGLOG( 'AnimatedTextElement.notifyAnimationEnd' );
--this.nRunningAnimations;
if( this.nRunningAnimations === 0 )
{
this.restoreBaseTextParagraph();
}
};

AnimatedTextElement.prototype.saveState = function( nAnimationNodeId )
{
if( this.nRunningAnimations === 0 )
{
var sVisibilityAttr = this.aParagraphElement.getAttribute( 'visibility' );
this.aActiveElement.setAttribute( 'visibility', sVisibilityAttr );
this.aGraphicGroupElement.setAttribute( 'visibility', 'inherit' );
}
AnimatedTextElement.superclass.saveState.call( this, nAnimationNodeId );
};

AnimatedTextElement.prototype.restoreState = function( nAnimationNodeId )
{
var bRet = AnimatedTextElement.superclass.restoreState.call( this, nAnimationNodeId );
if( bRet )
this.restoreBaseTextParagraph();
return bRet;
};

                                for( var i = 0; i <  aChildSet.length; ++i )
{
sStrokeColorValue = aChildSet[i].getAttribute( 'stroke' );
if( sStrokeColorValue && ( sStrokeColorValue !== 'none' ) )
break;
}

return colorParser( sStrokeColorValue );
};

AnimatedElement.prototype.setStrokeColor = function( aRGBValue )
{
assert( aRGBValue instanceof RGBColor,
'AnimatedElement.setFillColor: value argument is not an instance of RGBColor' );

var sValue = aRGBValue.toString( true /* clamped values */ );
var aChildSet = getElementChildren( this.aActiveElement );

var sStrokeColorValue = '';
for( var i = 0; i <  aChildSet.length; ++i )
{
sStrokeColorValue = aChildSet[i].getAttribute( 'stroke' );
if( sStrokeColorValue && ( sStrokeColorValue !== 'none' ) )
{
aChildSet[i].setAttribute( 'stroke', sValue );
}
}
};

AnimatedElement.prototype.getFontColor = function()
{
return new RGBColor( 0, 0, 0 );
};

AnimatedElement.prototype.setFontColor = function( sValue )
{
ANIMDBG.print( 'AnimatedElement.setFontColor(' + sValue + ')' );
};

AnimatedElement.prototype.DBG = function( sMessage, nTime )
{
aAnimatedElementDebugPrinter.print( 'AnimatedElement(' + this.getId() + ')' + sMessage, nTime );
};


function AnimatedTextElement( aElement, aEventMultiplexer )
{
var theDocument = document;

var sTextType = aElement.getAttribute( 'class' );
var bIsListItem = ( sTextType === 'ListItem' );
if( ( sTextType !== 'TextParagraph' ) && !bIsListItem )
{
log( 'AnimatedTextElement: passed element is not a paragraph.' );
return;
}
var aTextShapeElement = aElement.parentNode;
sTextType = aTextShapeElement.getAttribute( 'class' );
if( sTextType !== 'SVGTextShape' )
{
log( 'AnimatedTextElement: element parent is not a text shape.' );
return;
}
var aTextShapeGroup = aTextShapeElement.parentNode;
var aAnimatedElementGroup = getElementByClassName( aTextShapeGroup, 'AnimatedElements' );
if( !aAnimatedElementGroup )
{
aAnimatedElementGroup = theDocument.createElementNS( NSS['svg'], 'g' );
aAnimatedElementGroup.setAttribute( 'class', 'AnimatedElements' );
aTextShapeGroup.appendChild( aAnimatedElementGroup );
}

var aAnimatableElement = theDocument.createElementNS( NSS['svg'], 'g' );
var aTextElement = theDocument.createElementNS( NSS['svg'], 'text' );
var aParagraphElement = aElement.cloneNode( true );

this.aGraphicGroupElement = theDocument.createElementNS( NSS['svg'], 'g' );
this.aGraphicGroupElement.setAttribute( 'class', 'GraphicGroup' );

var aBulletCharClone = null;
var aBulletCharElem = null;
var bIsBulletCharStyle =
( aElement.getAttributeNS( NSS['ooo'], aOOOAttrListItemNumberingType ) === 'bullet-style' );
if( bIsBulletCharStyle )
{
var aBulletCharGroupElem = getElementByClassName( aTextShapeGroup, 'BulletChars' );
if( aBulletCharGroupElem )
{
var aBulletPlaceholderElem = getElementByClassName( aElement, 'BulletPlaceholder' );
if( aBulletPlaceholderElem )
{
var sId = aBulletPlaceholderElem.getAttribute( 'id' );
sId = 'bullet-char-' + sId;
aBulletCharElem = theDocument.getElementById( sId );
if( aBulletCharElem )
{
aBulletCharClone = aBulletCharElem.cloneNode( true );
}
else
{
log( 'AnimatedTextElement: ' + sId + ' not found.' );
}
}
else
{
log( 'AnimatedTextElement: no bullet placeholder found' );
}
}
else
{
log( 'AnimatedTextElement: no bullet char group found' );
}
}

var aBitmapElemSet = [];
var aBitmapCloneSet = [];
var aBitmapPlaceholderSet = getElementsByClassName( aElement, 'BitmapPlaceholder' );
var i;
if( aBitmapPlaceholderSet )
{
for( i = 0; i < aBitmapPlaceholderSet.length; ++i )
{
sId = aBitmapPlaceholderSet[i].getAttribute( 'id' );
var sBitmapChecksum = sId.substring( 'bitmap-placeholder'.length + 1, sId.length - 1 );
sId = 'embedded-bitmap(' + sBitmapChecksum + ')';
aBitmapElemSet[i] = theDocument.getElementById( sId );
if( aBitmapElemSet[i] )
{
aBitmapCloneSet[i] = aBitmapElemSet[i].cloneNode( true );
}
else
{
log( 'AnimatedTextElement: ' + sId + ' not found.' );
}
}
}


this.sParagraphId = sId = aParagraphElement.getAttribute( 'id' );
aParagraphElement.removeAttribute( 'id' );
aAnimatableElement.setAttribute( 'id', sId +'.a' );
if( aBulletCharClone )
aBulletCharClone.removeAttribute( 'id' );
for( i = 0; i < aBitmapCloneSet.length; ++i )
{
if( aBitmapCloneSet[i] )
aBitmapCloneSet[i].removeAttribute( 'id' );
}

var sVisibilityAttr = aElement.getAttribute( 'visibility' );
                    if( nScaleFactorY == this.nScaleFactorY ) return;

this.aTMatrix = document.documentElement.createSVGMatrix()
.translate( this.nCenterX, this.nCenterY )
.rotate(this.nRotationAngle)
.scaleNonUniform( this.nScaleFactorX, nScaleFactorY )
.translate( -this.nBaseCenterX, -this.nBaseCenterY );
this.updateTransformAttribute();

this.nScaleFactorY = nScaleFactorY;
};

AnimatedElement.prototype.setSize= function( aNewSize )
{
var nNewWidth = aNewSize[0];
var nNewHeight = aNewSize[1];
ANIMDBG.print( 'AnimatedElement.setSize:  = [' + nNewWidth + ',' + nNewHeight + ']');
if( nNewWidth < 0 )
{
log('AnimatedElement(' + this.getId() + ').setSize: negative width!');
nNewWidth = 0;
}
if( nNewHeight < 0 )
{
log('AnimatedElement(' + this.getId() + ').setSize: negative height!');
nNewHeight = 0;
}

var nBaseWidth = this.getBaseBBox().width;
var nScaleFactorX = nNewWidth / nBaseWidth;
if( nScaleFactorX < 1e-5 ) nScaleFactorX = 1e-5;

var nBaseHeight = this.getBaseBBox().height;
var nScaleFactorY = nNewHeight / nBaseHeight;
if( nScaleFactorY < 1e-5 ) nScaleFactorY = 1e-5;

if( nScaleFactorX == this.nScaleFactorX && nScaleFactorY == this.nScaleFactorY ) return;

this.aTMatrix = document.documentElement.createSVGMatrix()
.translate( this.nCenterX, this.nCenterY )
.rotate(this.nRotationAngle)
.scaleNonUniform( nScaleFactorX, nScaleFactorY )
.translate( -this.nBaseCenterX, -this.nBaseCenterY );
this.updateTransformAttribute();

this.nScaleFactorX = nScaleFactorX;
this.nScaleFactorY = nScaleFactorY;
};

AnimatedElement.prototype.getOpacity = function()
{
return this.aActiveElement.getAttribute( 'opacity' );
};

AnimatedElement.prototype.setOpacity = function( nValue )
{
this.aActiveElement.setAttribute( 'opacity', nValue );
};

AnimatedElement.prototype.getRotationAngle = function()
{
return this.nRotationAngle;
};

AnimatedElement.prototype.setRotationAngle = function( nNewRotAngle )
{
this.aTMatrix = document.documentElement.createSVGMatrix()
.translate( this.nCenterX, this.nCenterY )
.rotate(nNewRotAngle)
.scaleNonUniform( this.nScaleFactorX, this.nScaleFactorY )
.translate( -this.nBaseCenterX, -this.nBaseCenterY );
this.updateTransformAttribute();

this.nRotationAngle = nNewRotAngle;
};

AnimatedElement.prototype.getVisibility = function()
{

var sVisibilityValue = this.aActiveElement.getAttribute( 'visibility' );
if( !sVisibilityValue || ( sVisibilityValue === 'inherit' ) )
return 'visible'; // TODO: look for parent visibility!
else
return sVisibilityValue;
};

AnimatedElement.prototype.setVisibility = function( sValue )
{
if( sValue == 'visible' )
sValue = 'inherit';
this.aActiveElement.setAttribute( 'visibility', sValue );
};

AnimatedElement.prototype.getStrokeStyle = function()
{
return 'solid';
};

AnimatedElement.prototype.setStrokeStyle = function( sValue )
{
ANIMDBG.print( 'AnimatedElement.setStrokeStyle(' + sValue + ')' );
};

AnimatedElement.prototype.getFillStyle = function()
{
return 'solid';
};

AnimatedElement.prototype.setFillStyle = function( sValue )
{
ANIMDBG.print( 'AnimatedElement.setFillStyle(' + sValue + ')' );
};

AnimatedElement.prototype.getFillColor = function()
{
var aChildSet = getElementChildren( this.aActiveElement );
var sFillColorValue = '';
for( var i = 0; i <  aChildSet.length; ++i )
{
sFillColorValue = aChildSet[i].getAttribute( 'fill' );
if( sFillColorValue && ( sFillColorValue !== 'none' ) )
break;
}

return colorParser( sFillColorValue );
};

AnimatedElement.prototype.setFillColor = function( aRGBValue )
{
assert( aRGBValue instanceof RGBColor,
'AnimatedElement.setFillColor: value argument is not an instance of RGBColor' );

var sValue = aRGBValue.toString( true /* clamped values */ );
var aChildSet = getElementChildren( this.aActiveElement );

var sFillColorValue = '';
for( var i = 0; i <  aChildSet.length; ++i )
{
sFillColorValue = aChildSet[i].getAttribute( 'fill' );
if( sFillColorValue && ( sFillColorValue !== 'none' ) )
{
aChildSet[i].setAttribute( 'fill', sValue );
}
}
};

AnimatedElement.prototype.getStrokeColor = function()
{
var aChildSet = getElementChildren( this.aActiveElement );
var sStrokeColorValue = '';
                nStrokeWidth = nSW;
}
}

if( nStrokeWidth == 0 )
{
sStrokeWidth = ROOT_NODE.getAttribute( 'stroke-width' );
nStrokeWidth = parseFloat( sStrokeWidth );
}
if( nStrokeWidth != 0 )
{
nStrokeWidth *= 1.1;
var nHalfStrokeWidth = nStrokeWidth / 2;
var nDoubleStrokeWidth = nStrokeWidth * 2;

var aEBBox = document.documentElement.createSVGRect();
aEBBox.x = aBBox.x - nHalfStrokeWidth;
aEBBox.y = aBBox.y - nHalfStrokeWidth;
aEBBox.width = aBBox.width + nDoubleStrokeWidth;
aEBBox.height = aBBox.height + nDoubleStrokeWidth;
aBBox = aEBBox;
}
return aBBox;
};

AnimatedElement.prototype.setClipPath = function( aClipPathContent )
{
if( this.aClipPathContent )
{
var aTranslation = SVGIdentityMatrix.translate( this.aClippingBBox.x,
this.aClippingBBox.y);
aClipPathContent.matrixTransform( aTranslation );
var sPathData = aClipPathContent.getAttribute( 'd' );
this.aClipPathContent.setAttribute( 'd', sPathData );
}
};


AnimatedElement.prototype.getX = function()
{
return this.nCenterX;
};

AnimatedElement.prototype.getY = function()
{
return this.nCenterY;
};

AnimatedElement.prototype.getPos = function()
{
return [this.getX(), this.getY()];
};

AnimatedElement.prototype.getWidth = function()
{
return this.nScaleFactorX * this.getBaseBBox().width;
};

AnimatedElement.prototype.getHeight = function()
{
return this.nScaleFactorY * this.getBaseBBox().height;
};

AnimatedElement.prototype.getSize = function()
{
return [this.getWidth(), this.getHeight()];
};

AnimatedElement.prototype.updateTransformAttribute = function()
{
this.aTransformAttrList = this.aActiveElement.transform.baseVal;
this.aTransformAttr = this.aTransformAttrList.getItem( 0 );
this.aTransformAttr.setMatrix( this.aTMatrix );
};

AnimatedElement.prototype.setX = function( nNewCenterX )
{
if( nNewCenterX === this.nCenterX ) return;

this.aTransformAttrList = this.aActiveElement.transform.baseVal;
this.aTransformAttr = this.aTransformAttrList.getItem( 0 );
this.aTMatrix = this.aTransformAttr.matrix.translate( nNewCenterX - this.nCenterX, 0 );
this.aTransformAttr.setMatrix( this.aTMatrix );
this.nCenterX = nNewCenterX;
};

AnimatedElement.prototype.setY = function( nNewCenterY )
{
if( nNewCenterY === this.nCenterY ) return;

this.aTransformAttrList = this.aActiveElement.transform.baseVal;
this.aTransformAttr = this.aTransformAttrList.getItem( 0 );
this.aTMatrix = this.aTransformAttr.matrix.translate( 0, nNewCenterY - this.nCenterY );
this.aTransformAttr.setMatrix( this.aTMatrix );
this.nCenterY = nNewCenterY;
};

AnimatedElement.prototype.setPos = function( aNewPos )
{
var nNewCenterX = aNewPos[0];
var nNewCenterY = aNewPos[1];

if( nNewCenterX === this.nCenterX && nNewCenterY === this.nCenterY ) return;

this.aTransformAttrList = this.aActiveElement.transform.baseVal;
this.aTransformAttr = this.aTransformAttrList.getItem( 0 );
this.aTMatrix = this.aTransformAttr.matrix.translate( nNewCenterX - this.nCenterX, nNewCenterY - this.nCenterY );
this.aTransformAttr.setMatrix( this.aTMatrix );
this.nCenterX = nNewCenterX;
this.nCenterY = nNewCenterY;
};

AnimatedElement.prototype.setWidth = function( nNewWidth )
{
ANIMDBG.print( 'AnimatedElement.setWidth: nNewWidth = ' + nNewWidth );
if( nNewWidth < 0 )
{
log('AnimatedElement(' + this.getId() + ').setWidth: negative width!');
nNewWidth = 0;
}

var nBaseWidth = this.getBaseBBox().width;
var nScaleFactorX = nNewWidth / nBaseWidth;

if( nScaleFactorX < 1e-5 ) nScaleFactorX = 1e-5;
if( nScaleFactorX == this.nScaleFactorX ) return;

this.aTMatrix = document.documentElement.createSVGMatrix()
.translate( this.nCenterX, this.nCenterY )
.rotate(this.nRotationAngle)
.scaleNonUniform( nScaleFactorX, this.nScaleFactorY )
.translate( -this.nBaseCenterX, -this.nBaseCenterY );
this.updateTransformAttribute();

this.nScaleFactorX = nScaleFactorX;
};

AnimatedElement.prototype.setHeight = function( nNewHeight )
{
ANIMDBG.print( 'AnimatedElement.setWidth: nNewHeight = ' + nNewHeight );
if( nNewHeight < 0 )
{
log('AnimatedElement(' + this.getId() + ').setWidth: negative height!');
nNewHeight = 0;
}

var nBaseHeight = this.getBaseBBox().height;
var nScaleFactorY = nNewHeight / nBaseHeight;

if( nScaleFactorY < 1e-5 ) nScaleFactorY = 1e-5;
            {
var aClipPathGroup = theMetaDoc.aClipPathGroup;
aClipPathGroup.removeChild( this.aClipPathElement );
this.aClipPathElement = null;
this.aClipPathContent = null;
}
};

AnimatedElement.prototype.getId = function()
{
return this.aActiveElement.getAttribute( 'id' );
};

AnimatedElement.prototype.getAdditiveMode = function()
{
return this.eAdditiveMode;
};

AnimatedElement.prototype.setAdditiveMode = function( eAdditiveMode )
{
this.eAdditiveMode = eAdditiveMode;
};

AnimatedElement.prototype.setToElement = function( aElement )
{
if( !aElement )
{
log( 'AnimatedElement(' + this.getId() + ').setToElement: element is not valid' );
return false;
}

var aClone = aElement.cloneNode( true );
this.aPreviousElement = this.aActiveElement.parentNode.replaceChild( aClone, this.aActiveElement );
this.aActiveElement = aClone;

return true;
};

AnimatedElement.prototype.notifySlideStart = function( aSlideShowContext )
{
if( !aSlideShowContext )
{
log( 'AnimatedElement.notifySlideStart: slideshow context is not valid' );
}
this.aSlideShowContext = aSlideShowContext;

var aClone = this.aBaseElement.cloneNode( true );
this.aActiveElement.parentNode.replaceChild( aClone, this.aActiveElement );
this.aActiveElement = aClone;

this.initElement();
this.DBG( '.notifySlideStart invoked' );
};

AnimatedElement.prototype.notifySlideEnd = function()
{
};

AnimatedElement.prototype.notifyAnimationStart = function()
{
};

AnimatedElement.prototype.notifyAnimationEnd = function()
{
};

AnimatedElement.prototype.notifyNextEffectStart = function( /*nEffectIndex*/ )
{
};

AnimatedElement.prototype.saveState = function( nAnimationNodeId )
{
ANIMDBG.print( 'AnimatedElement(' + this.getId() + ').saveState(' + nAnimationNodeId +')' );
if( !this.aStateSet[ nAnimationNodeId ] )
{
this.aStateSet[ nAnimationNodeId ] = {};
}
var aState = this.aStateSet[ nAnimationNodeId ];
aState.aElement = this.aActiveElement.cloneNode( true );
aState.nCenterX = this.nCenterX;
aState.nCenterY = this.nCenterY;
aState.nScaleFactorX = this.nScaleFactorX;
aState.nScaleFactorY = this.nScaleFactorY;
aState.nRotationAngle = this.nRotationAngle;

};

AnimatedElement.prototype.restoreState = function( nAnimationNodeId )
{
if( !this.aStateSet[ nAnimationNodeId ] )
{
log( 'AnimatedElement(' + this.getId() + ').restoreState: state '
+nAnimationNodeId  + ' is not valid' );
return false;
}

ANIMDBG.print( 'AnimatedElement(' + this.getId() + ').restoreState(' + nAnimationNodeId +')' );
var aState = this.aStateSet[ nAnimationNodeId ];
var bRet = this.setToElement( aState.aElement );
if( bRet )
{
this.nCenterX = aState.nCenterX;
this.nCenterY = aState.nCenterY;
this.nScaleFactorX = aState.nScaleFactorX;
this.nScaleFactorY = aState.nScaleFactorY;
this.nRotationAngle = aState.nRotationAngle;
}
return bRet;
};

AnimatedElement.prototype.getBaseBBox = function()
{
return this.aBaseBBox;
};

AnimatedElement.prototype.getBaseCenterX = function()
{
return this.nBaseCenterX;
};

AnimatedElement.prototype.getBaseCenterY = function()
{
return this.nBaseCenterY;
};

AnimatedElement.prototype.getBBox = function()
{
return this.aActiveElement.parentNode.getBBox();
};

AnimatedElement.prototype.getBBoxWithStroke = function()
{
var aBBox = this.aActiveElement.parentNode.getBBox();

var aChildrenSet = this.aActiveElement.childNodes;

var sStroke, sStrokeWidth;
var nStrokeWidth = 0;
var i;
for( i = 0; i < aChildrenSet.length; ++i )
{
if( ! aChildrenSet[i].getAttribute  )
continue;

sStroke = aChildrenSet[i].getAttribute( 'stroke' );
if( sStroke && sStroke != 'none' )
{
sStrokeWidth = aChildrenSet[i].getAttribute( 'stroke-width' );
var nSW = parseFloat( sStrokeWidth );
if( nSW > nStrokeWidth )
             
var aClipPathGroup = theMetaDoc.aClipPathGroup;
aClipPathGroup.appendChild( this.aClipPathElement );

var sRef = 'url(#' + sId + ')';
this.aSlideElement.parentNode.setAttribute( 'clip-path', sRef );
};

AnimatedSlide.prototype.cleanClipPath = function()
{
this.aSlideElement.parentNode.removeAttribute( 'clip-path' );

if( this.aClipPathElement )
{
var aClipPathGroup = theMetaDoc.aClipPathGroup;
aClipPathGroup.removeChild( this.aClipPathElement );
this.aClipPathElement = null;
this.aClipPathContent = null;
}
};

AnimatedSlide.prototype.insertBefore = function( aElement )
{
if( aElement )
{
this.aSlideElement.parentNode.insertBefore( aElement, this.aSlideElement );
}
};

AnimatedSlide.prototype.appendElement = function( aElement )
{
if( aElement )
{
this.aSlideElement.parentNode.appendChild( aElement );
}
};

AnimatedSlide.prototype.removeElement = function( aElement )
{
if( aElement )
{
this.aSlideElement.parentNode.removeChild( aElement );
}
};

AnimatedSlide.prototype.getWidth = function()
{
return WIDTH;
};

AnimatedSlide.prototype.getHeight = function()
{
return HEIGHT;
};

AnimatedSlide.prototype.setOpacity = function( nValue )
{
this.aSlideElement.setAttribute( 'opacity', nValue );
};

AnimatedSlide.prototype.translate = function( nDx, nDy )
{
var sTransformAttr = 'translate(' + nDx + ',' + nDy + ')';
this.aSlideElement.setAttribute( 'transform', sTransformAttr );
};

AnimatedSlide.prototype.setClipPath = function( aClipPathContent )
{
if( this.aClipPathContent )
{
var sPathData = aClipPathContent.getAttribute( 'd' );
this.aClipPathContent.setAttribute( 'd', sPathData );
}
};


function AnimatedElement( aElement )
{
if( !aElement )
{
log( 'AnimatedElement constructor: element is not valid' );
}

this.aSlideShowContext = null;

this.aBaseElement = aElement.cloneNode( true );
this.aActiveElement = aElement;
this.sElementId = this.aActiveElement.getAttribute( 'id' );

this.aBaseBBox = this.aActiveElement.getBBox();
this.nBaseCenterX = this.aBaseBBox.x + this.aBaseBBox.width / 2;
this.nBaseCenterY = this.aBaseBBox.y + this.aBaseBBox.height / 2;


this.aClipPathElement = null;
this.aClipPathContent = null;

this.aPreviousElement = null;
this.aStateSet = {};

this.eAdditiveMode = ADDITIVE_MODE_REPLACE;
this.bIsUpdated = true;

this.aTMatrix = document.documentElement.createSVGMatrix();
this.aCTM = document.documentElement.createSVGMatrix();
this.aICTM = document.documentElement.createSVGMatrix();

this.initElement();
}

AnimatedElement.prototype.initElement = function()
{
this.nCenterX = this.nBaseCenterX;
this.nCenterY = this.nBaseCenterY;
this.nScaleFactorX = 1.0;
this.nScaleFactorY = 1.0;
this.nRotationAngle = 0.0;

this.aActiveElement.setAttribute( 'transform', makeMatrixString( 1, 0, 0, 1, 0, 0 ) );
};

AnimatedElement.prototype.initClipPath = function()
{
this.aClipPathElement = document.createElementNS( NSS['svg'], 'clipPath' );

var sId = 'clip-path-' + this.sElementId;
this.aClipPathElement.setAttribute( 'id', sId );
this.aClipPathElement.setAttribute( 'clipPathUnits', 'userSpaceOnUse' );

this.aClipPathContent = document.createElementNS( NSS['svg'], 'path' );
this.aClippingBBox = this.getBBoxWithStroke();
var nWidth = this.aClippingBBox.width;
var nHeight = this.aClippingBBox.height;
var sPathData = 'M ' + this.aClippingBBox.x + ' ' + this.aClippingBBox.y +
' h ' + nWidth + ' v ' + nHeight + ' h -' + nWidth + ' z';
this.aClipPathContent.setAttribute( 'd', sPathData );
this.aClipPathElement.appendChild( this.aClipPathContent );

var aClipPathGroup = theMetaDoc.aClipPathGroup;
aClipPathGroup.appendChild( this.aClipPathElement );

var sRef = 'url(#' + sId + ')';
this.aActiveElement.setAttribute( 'clip-path', sRef );
};

AnimatedElement.prototype.cleanClipPath = function()
{
this.aActiveElement.removeAttribute( 'clip-path' );

if( this.aClipPathElement )
          var len   = Math.floor( (e - edge/2) * edge1 * 4);
var w     = Math.PI / 2;

while(len > 0) {
var alen = Math.min(len, edge1);
len -= alen;
poly = createUnitSquarePath();
aTransform = SVGIdentityMatrix.scale(
pruneScaleValue( alen / this.sqrtElements ),
pruneScaleValue( 1.0 / this.sqrtElements ));
aTransform = aTransform.translate(
- pruneScaleValue( (edge / 2) / this.sqrtElements ),
pruneScaleValue( (edge / 2) / this.sqrtElements ));
aTransform = aTransform.rotate( w );
w -= Math.PI / 2;
aTransform = aTransform.translate(0.5, 0.5);
poly.matrixTransform(aTransform);
res.appendPath(poly);
}
}

return res;
}

SpiralWipePath.prototype.perform = function( nT ) {
var res         = createUnitSquarePath();
var innerSpiral = this.calcNegSpiral( 1.0 - nT );
innerSpiral.changeOrientation();
res.appendPath(innerSpiral);

return this.bFlipOnYAxis ? flipOnYAxis(res) : res;
}

function BoxSnakesWipePath(nElements, bFourBox) {
SpiralWipePath.call(this, nElements);
this.bFourBox = bFourBox;
}

BoxSnakesWipePath.prototype = Object.create(SpiralWipePath);

BoxSnakesWipePath.prototype.perform = function( nT ) {
var res = createUnitSquarePath(), aTransform;
var innerSpiral = SpiralWipePath.prototype.calcNegSpiral.call(this, 1.0 - nT);
innerSpiral.changeOrientation();

if(this.bFourBox) {
aTransform = SVGIdentityMatrix.scale(0.5, 0.5);
innerSpiral.matrixTransform(aTransform);
res.appendPath(innerSpiral);
res.appendPath(flipOnXAxis(innerSpiral));
innerSpiral = flipOnYAxis(innerSpiral);
res.appendPath(innerSpiral);
res.appendPath(flipOnXAxis(innerSpiral));
}
else {
aTransform = SVGIdentityMatrix.scale(1.0, 0.5);
innerSpiral.matrixTransform(aTransform);
res.appendPath(innerSpiral);
res.appendPath(flipOnXAxis(innerSpiral));
}
return this.bFlipOnYAxis ? flipOnYAxis(res) : res;
}

function VeeWipePath() { }

VeeWipePath.prototype.perform = function( nT ) {
const d = pruneScaleValue(2.0 * nT);
var polyPath = 'M ' + 0.0 + ' ' + -1.0 + ' ';
polyPath += 'L ' + 0.0 + ' ' + (d - 1.0) + ' ';
polyPath += 'L ' + 0.5 + ' ' + d + ' ';
polyPath += 'L ' + 1.0 + ' ' + (d - 1.0) + ' ';
polyPath += 'L ' + 1.0 + ' ' + -1.0 + ' ';
polyPath += 'L ' + 0.0 + ' ' + -1.0 + ' ';

var aPolyPolyPath = document.createElementNS( NSS['svg'], 'path');
aPolyPolyPath.setAttribute('d', polyPath);
return aPolyPolyPath;
}


function AnimatedSlide( aMetaSlide )
{
if( !aMetaSlide )
{
log( 'AnimatedSlide constructor: meta slide is not valid' );
}

this.aMetaSlide = aMetaSlide;
this.aSlideElement = this.aMetaSlide.slideElement;
this.sSlideId = this.aMetaSlide.slideId;

this.aUsedAttributeSet = [];

this.aClipPathElement = null;
this.aClipPathContent = null;
this.bIsClipped = false;
}

AnimatedSlide.prototype.show = function()
{
this.aMetaSlide.show();
};

AnimatedSlide.prototype.hide = function()
{
this.aMetaSlide.hide();
};

AnimatedSlide.prototype.notifyUsedAttribute = function( sName )
{
if( sName == 'clip-path' )
{
this.initClipPath();
this.bIsClipped = true;
}
else
{
this.aUsedAttributeSet.push( sName );
}
};

AnimatedSlide.prototype.reset = function()
{
if( this.bIsClipped )
{
this.cleanClipPath();
this.bIsClipped = false;
}

var i;
for( i = 0; i < this.aUsedAttributeSet.length; ++i )
{
var sAttrName = this.aUsedAttributeSet[i];
this.aSlideElement.removeAttribute( sAttrName );
}
this.aUsedAttributeSet = [];
};

AnimatedSlide.prototype.initClipPath = function()
{
this.aClipPathElement = document.createElementNS( NSS['svg'], 'clipPath' );

var sId = 'clip-path-' + this.sSlideId;
this.aClipPathElement.setAttribute( 'id', sId );
this.aClipPathElement.setAttribute( 'clipPathUnits', 'userSpaceOnUse' );

this.aClipPathContent = document.createElementNS( NSS['svg'], 'path' );
var sPathData = 'M 0 0 h ' + WIDTH + ' v ' + HEIGHT + ' h -' + WIDTH + ' z';
this.aClipPathContent.setAttribute( 'd', sPathData );
this.aClipPathElement.appendChild( this.aClipPathContent );
    aPath += 'L ' + aPoint.x + ' ' + aPoint.y + ' ';
aPoint.x = 0.0;
aPath += 'L ' + aPoint.x + ' ' + aPoint.y + ' ';
const poly = document.createElementNS( NSS['svg'], 'path');
poly.setAttribute('d', aPath);
let aTransform;

if((Math.floor(sqrtArea2) & 1) == 1) {
aTransform = SVGIdentityMatrix.rotate((Math.PI)/2 + (Math.PI)/4);
aTransform.translate(edge + this.elementEdge, 0.0);
}
else {
aTransform = SVGIdentityMatrix.translate(-a, 0.0);
aTransform.rotate(-(Math.PI/4));
aTransform.translate(0.0, edge);
}

poly.matrixTransform(aTransform);
res.appendPath(poly);
}
else { //out
const sqrtArea2 = Math.sqrt(nT * this.sqrtElements * this.sqrtElements);
const edge = pruneScaleValue(Math.floor(sqrtArea2)/this.sqrtElements);

let aPath, aPoint = document.documentElement.createSVGPoint();
if(edge != 0) {
aPoint.y = 1.0;
aPath = 'M ' + aPoint.x + ' ' + aPoint.y + ' ';
aPoint.x = edge;
aPath += 'L ' + aPoint.x + ' ' + aPoint.y + ' ';
aPoint.x = 1.0;
aPoint.y = edge;
aPath += 'L ' + aPoint.x + ' ' + aPoint.y + ' ';
aPoint.y = 0.0;
aPath += 'L ' + aPoint.x + ' ' + aPoint.y + ' ';
aPoint.x = 0.0;
aPath += 'L ' + aPoint.x + ' ' + aPoint.y + ' ';
const poly = document.createElementNS( NSS['svg'], 'path');
poly.setAttribute('d', aPath);
res.appendPath(poly);
}
const a = (Math.SQRT1_2 / this.sqrtElements);
const d = (sqrtArea2 - Math.floor(sqrtArea2));
const len = ((1.0 - nT) * Math.SQRT2 * d);
const height = pruneScaleValue(Math.SQRT1_2 / this.sqrtElements);
aPath = 'M ' + aPoint.x + ' ' + aPoint.y + ' ';
aPoint.y = height;
aPath += 'L ' + aPoint.x + ' ' + aPoint.y + ' ';
aPoint.x = len + a;
aPath += 'L ' + aPoint.x + ' ' + aPoint.y + ' ';
aPoint.y = 0.0;
aPath += 'L ' + aPoint.x + ' ' + aPoint.y + ' ';
aPoint.x = 0.0;
aPath += 'L ' + aPoint.x + ' ' + aPoint.y + ' ';
const poly = document.createElementNS( NSS['svg'], 'path');
poly.setAttribute('d', aPath);
let aTransform;

if((Math.floor(sqrtArea2) & 1) == 1) {
aTransform = SVGIdentityMatrix.translate(0.0, -height);
aTransform.rotate(Math.PI/2 + Math.PI/4);
aTransform.translate(1.0, edge);
}
else {
aTransform = SVGIdentityMatrix.rotate(-(Math.PI/4));
aTransform = aTransform.translate(edge, 1.0);
}
poly.matrixTransform(aTransform);
res.appendPath(poly);
}
return res;
}

SnakeWipePath.prototype.perform = function(nT) {
var res = createEmptyPath();
if(this.diagonal) {
if(nT >= 0.5) {
res.appendPath(this.calcHalfDiagonalSnake(1.0, true));
res.appendPath(this.calcHalfDiagonalSnake(2.0*(nT-0.5), false));
}
else
res.appendPath(this.calcHalfDiagonalSnake(2.0*nT, true));
}
else
res = this.calcSnake(nT);

return this.flipOnYAxis ? flipOnYAxis(res) : res;
}

function ParallelSnakesWipePath(nElements, bDiagonal, bFlipOnYAxis, bOpposite) {
SnakeWipePath.call(this, nElements, bDiagonal, bFlipOnYAxis);
this.bOpposite = bOpposite;
}

ParallelSnakesWipePath.prototype = Object.create(SnakeWipePath);

ParallelSnakesWipePath.prototype.perform = function( nT ) {
var res = createEmptyPath(), half, aTransform;
if(this.diagonal) {
assert(this.bOpposite);
half = SnakeWipePath.prototype.calcHalfDiagonalSnake.call(this, nT, false);
aTransform = SVGIdentityMatrix.scale(1, -1);
aTransform.translate(-0.5, 0.5);
aTransform.rotate(Math.PI/2);
aTransform.translate(0.5, 0.5);
half.matrixTransform(aTransform);
half.changeOrientation();
res.appendPath(half);

aTransform = SVGIdentityMatrix.translate(-0.5, -0.5);
aTransform.rotate(Math.PI);
aTransform.translate(0.5, 0.5);
half.matrixTransform(aTransform);
res.appendPath(half);
}
else {
half = SnakeWipePath.prototype.calcSnake.call(this, nT / 2.0 );
aTransform = SVGIdentityMatrix.translate(-0.5, -0.5);
aTransform = aTransform.rotate(Math.PI/2);
aTransform = aTransform.translate(0.5, 0.5);
half.matrixTransform(aTransform);
res.appendPath(flipOnYAxis(half));
res.appendPath(this.bOpposite ? flipOnXAxis(half) : half);
}

return this.flipOnYAxis ? flipOnYAxis(res) : res;
}

function SpiralWipePath(nElements, bFlipOnYAxis) {
this.nElements    = nElements;
this.sqrtElements = Math.floor(Math.sqrt(nElements));
this.bFlipOnYAxis = bFlipOnYAxis;
}

SpiralWipePath.prototype.calcNegSpiral = function( nT ) {
var area  = nT * this.nElements;
var e     = (Math.sqrt(area) / 2.0);
var edge  = Math.floor(e) * 2;

var aTransform = SVGIdentityMatrix.translate(-0.5, -0.5);
var edge_ = pruneScaleValue(edge / this.sqrtElements);

aTransform = aTransform.scale(edge_, edge_);
aTransform = aTransform.translate(0.5, 0.5);
var poly = createUnitSquarePath();
poly.matrixTransform(aTransform);
var res = poly.cloneNode(true);

if(1.0 - nT != 0) {
var edge1 = edge + 1;
            this.nElements = nElements;
this.aBasePath = createUnitSquarePath();
this.aPositionArray = new Array( nElements );
this.aClipPath = createEmptyPath();
this.nAlreadyAppendedElements = 0;

var fEdgeLength, nPos, aTransform;

if( bRandomBars ) // random bar wipe
{
fEdgeLength = 1.0 / nElements;
for( nPos = 0; nPos < nElements; ++nPos )
{
this.aPositionArray[nPos] = { x: 0.0, y: pruneScaleValue( nPos * fEdgeLength ) }
}
aTransform = SVGIdentityMatrix.scaleNonUniform( 1.0, pruneScaleValue( fEdgeLength ) );
}
else // dissolve wipe
{
var nSqrtElements = Math.round( Math.sqrt( nElements ) );
fEdgeLength = 1.0 / nSqrtElements;
for( nPos = 0; nPos < nElements; ++nPos )
{
this.aPositionArray[nPos] = {
x: pruneScaleValue( ( nPos % nSqrtElements ) * fEdgeLength ),
y: pruneScaleValue( ( nPos / nSqrtElements ) * fEdgeLength ) }
}
aTransform = SVGIdentityMatrix.scale( pruneScaleValue( fEdgeLength ) );
}
this.aBasePath.matrixTransform( aTransform );

var nPos1, nPos2;
var tmp;
for( nPos1 = nElements - 1; nPos1 > 0; --nPos1 )
{
nPos2 = getRandomInt( nPos1 + 1 );
tmp = this.aPositionArray[nPos1];
this.aPositionArray[nPos1] = this.aPositionArray[nPos2];
this.aPositionArray[nPos2] = tmp;
}
}

RandomWipePath.prototype.perform = function( nT )
{
var aPolyPath = createEmptyPath();
var aPoint;
var aPath;
var aTransform;
var nElements = Math.round( nT * this.nElements );
if( nElements === 0 )
{
return aPolyPath;
}
if( this.nAlreadyAppendedElements >= nElements )
{
this.nAlreadyAppendedElements = 0;
this.aClipPath = createEmptyPath();
}
var nPos;
for( nPos = this.nAlreadyAppendedElements; nPos < nElements; ++nPos )
{
aPoint = this.aPositionArray[nPos];
aPath = this.aBasePath.cloneNode( true );
aTransform = SVGIdentityMatrix.translate( aPoint.x, aPoint.y );
aPath.matrixTransform( aTransform );
aPolyPath.appendPath( aPath );
}

this.nAlreadyAppendedElements = nElements;
this.aClipPath.appendPath( aPolyPath );

return this.aClipPath.cloneNode( true );
};

function SnakeWipePath(nElements, bDiagonal, bflipOnYAxis)
{
this.sqrtElements = Math.floor(Math.sqrt(nElements));
this.elementEdge  = (1.0 / this.sqrtElements);
this.diagonal     = bDiagonal;
this.flipOnYAxis  = bflipOnYAxis;
this.aBasePath    = createUnitSquarePath();
}

SnakeWipePath.prototype.calcSnake = function(t)
{
var aPolyPath = createEmptyPath();
const area   = (t * this.sqrtElements * this.sqrtElements);
const line_  = Math.floor(area) / this.sqrtElements;
const line   = pruneScaleValue(line_ / this.sqrtElements);
const col    = pruneScaleValue((area - (line_ * this.sqrtElements)) / this.sqrtElements);

if(line != 0) {
let aPath = 'M '+ 0.0 + ' ' + 0.0 + ' ';
aPath += 'L ' + 0.0 + ' ' + line + ' ';
aPath += 'L ' + 1.0 + ' ' + line + ' ';
aPath += 'L ' + 1.0 + ' ' + 0.0 + ' ';
aPath += 'L 0 0 ';
let poly = document.createElementNS( NSS['svg'], 'path');
poly.setAttribute('d', aPath);
aPolyPath.appendPath(poly);
}
if(col != 0) {
var offset = 0.0;
if((line_ & 1) == 1) {
offset = (1.0 - col);
}
let aPath = 'M ' + offset + ' ' + line + ' ';
aPath += 'L '+ offset + ' ' + (line + this.elementEdge) + ' ';
aPath += 'L ' + (offset+col) + ' ' + (line + this.elementEdge) + ' ';
aPath += 'L ' + (offset+col) + ' ' + line + ' ';
aPath += 'L ' + offset + ' ' + line + ' ';
let poly = document.createElementNS( NSS['svg'], 'path');
poly.setAttribute('d', aPath);
aPolyPath.appendPath(poly);
}

return aPolyPath;
}

SnakeWipePath.prototype.calcHalfDiagonalSnake = function(nT, bIn) {
var res = createEmptyPath();

if(bIn) {
const sqrtArea2 = Math.sqrt(nT * this.sqrtElements * this.sqrtElements);
const edge = pruneScaleValue(sqrtArea2 / this.sqrtElements);

var aPath, aPoint = document.documentElement.createSVGPoint();
if(edge) {
aPath = 'M ' + aPoint.x + ' ' + aPoint.y + ' ';
aPoint.y = edge;
aPath += 'L ' + aPoint.x + ' ' + aPoint.y + ' ';
aPoint.x = edge;
aPoint.y = 0.0;
aPath += 'L ' + aPoint.x + ' ' + aPoint.y + ' ';
aPoint.x = 0.0;
aPath += 'L ' + aPoint.x + ' ' + aPoint.y + ' ';
const poly = document.createElementNS( NSS['svg'], 'path');
poly.setAttribute('d', aPath);
res.appendPath(poly);
}
const a = (Math.SQRT1_2 / this.sqrtElements);
const d = (sqrtArea2 - Math.floor(sqrtArea2));
const len = (nT * Math.SQRT1_2 * d);
const height = pruneScaleValue(Math.SQRT1_2 / this.sqrtElements);
aPath = 'M ' + aPoint.x + ' ' + aPoint.y + ' ';
aPoint.y = height;
aPath += 'L ' + aPoint.x + ' ' + aPoint.y + ' ';
aPoint.x = len + a;
aPath += 'L ' + aPoint.x + ' ' + aPoint.y + ' ';
aPoint.y = 0.0;
  WaterfallWipePath.prototype.perform = function( nT ) {
var poly = this.aBasePath.cloneNode(true);
var aTransform = SVGIdentityMatrix.translate(0.0, pruneScaleValue(2.0 * nT));
poly.matrixTransform(aTransform);
var aHead = 'M ' + 0.0 + ' ' + -1.0 + ' ';
var aHeadPath= document.createElementNS( NSS['svg'], 'path');
aHeadPath.setAttribute('d', aHead);

var aTail = 'M ' + 1.0 + ' ' + -1.0 + ' ';
var aTailPath = document.createElementNS( NSS['svg'], 'path');
aTailPath.setAttribute('d', aTail);

poly.prependPath(aHeadPath);
poly.appendPath(aTailPath);

return this.bFlipOnYAxis ? flipOnYAxis(poly) : poly;
}

function DoubleDiamondWipePath() { }

DoubleDiamondWipePath.prototype.perform = function( nT ) {
var a = pruneScaleValue(0.25 + (nT * 0.75));
var aPath = 'M ' + (0.5 + a) + ' ' + 0.5 + ' ';
aPath += 'L ' + 0.5 + ' ' + (0.5 - a) + ' ';
aPath += 'L ' + (0.5 - a) + ' ' + 0.5 + ' ';
aPath += 'L ' + 0.5 + ' ' + (0.5 + a) + ' ';
aPath += 'L ' + (0.5 + a) + ' ' + 0.5 + ' ';
var poly = document.createElementNS( NSS['svg'], 'path');
poly.setAttribute('d', aPath);
var res = poly.cloneNode(true);

var b = pruneScaleValue( (1.0 - nT) * 0.25);
aPath = 'M ' + (0.5 + b) + ' ' + 0.5 + ' ';
aPath += 'L ' + 0.5 + ' ' + (0.5 + b) + ' ';
aPath += 'L ' + (0.5 - b) + ' ' + 0.5 + ' ';
aPath += 'L ' + 0.5 + ' ' + (0.5 - b) + ' ';
aPath += 'L ' + (0.5 + b) + ' ' + 0.5 + ' ';
poly = document.createElementNS( NSS['svg'], 'path');
poly.setAttribute('d', aPath);
res.appendPath(poly);

return res;
}

function IrisWipePath(unitRect) {
this.unitRect = unitRect;
this.aBasePath = createUnitSquarePath();
}


IrisWipePath.prototype.perform = function( nT ) {
var d = pruneScaleValue(nT);
var aTransform = SVGIdentityMatrix.translate(-0.5, -0.5);
aTransform = aTransform.multiply(SVGIdentityMatrix.scaleNonUniform(d, d).translate(0.5, 0.5));
var aPath = this.aBasePath.cloneNode(true);
aPath.matrixTransform(aTransform);
return aPath;
}

function ZigZagWipePath(nZigs) {
this.zigEdge = 1.0/nZigs;
const d = this.zigEdge;
const d2 = (d / 2.0);
this.aBasePath = 'M ' + (-1.0 - d) + ' ' + -d + ' ';
this.aBasePath += 'L ' + (-1.0 - d) + ' ' + (1.0 + d) + ' ';
this.aBasePath += 'L ' + -d + ' ' + (1.0 + d) + ' ';

for(var pos = (nZigs + 2); pos--; ) {
this.aBasePath += 'L ' + 0.0 + ' ' + ((pos - 1) * d + d2) + ' ';
this.aBasePath += 'L ' + -d + ' ' + (pos - 1) * d + ' ';
}
this.aBasePath += 'L ' + (-1.0 - d) + ' ' + -d + ' ';
}

ZigZagWipePath.prototype.perform = function( nT ) {
var res = document.createElementNS( NSS['svg'], 'path');
res.setAttribute('d', this.aBasePath);
res.matrixTransform(SVGIdentityMatrix.translate((1.0 + this.zigEdge) * nT, 0.0));
return res;
}

function BarnZigZagWipePath( nZigs ) { ZigZagWipePath.call(this, nZigs); }

BarnZigZagWipePath.prototype = Object.create(ZigZagWipePath);

BarnZigZagWipePath.prototype.perform = function( nT ) {
var res = createEmptyPath();
var poly = document.createElementNS( NSS['svg'], 'path');
var aTransform = SVGIdentityMatrix.translate(
((1.0 + this.zigEdge) * (1.0 - nT)) / 2.0, 0.0);
poly.setAttribute('d', this.aBasePath);
poly.changeOrientation();
poly.matrixTransform(aTransform);
res.appendPath(poly);

aTransform = SVGIdentityMatrix.scale(-1.0, 1.0);
aTransform.translate(1.0, this.zigEdge / 2.0);
poly = document.createElementNS( NSS['svg'], 'path');
poly.setAttribute('d', this.aBasePath);
poly.matrixTransform(aTransform);
res.appendPath(poly);

return res;
}

function CheckerBoardWipePath( unitsPerEdge )
{
this.unitsPerEdge = unitsPerEdge;
if( this.unitsPerEdge === undefined || this.unitsPerEdge < 1 )
this.unitsPerEdge = 10;
this.aBasePath = createUnitSquarePath();
}

CheckerBoardWipePath.prototype.perform = function( nT )
{
var d = pruneScaleValue(1.0 / this.unitsPerEdge);
var aMatrix = SVGIdentityMatrix.scaleNonUniform(pruneScaleValue( d*2.0*nT ),
pruneScaleValue( d ) );

var aPolyPath = null;
var i, j;
var aTransform;
var aPath;
for ( i = this.unitsPerEdge; i--; )
{
aTransform = SVGIdentityMatrix;

if ((i % 2) == 1) // odd line
aTransform = aTransform.translate( -d, 0.0 );

aTransform = aTransform.multiply( aMatrix );

for ( j = (this.unitsPerEdge / 2) + 1; j--;)
{
aPath = this.aBasePath.cloneNode( true );
aPath.matrixTransform( aTransform );
if (aPolyPath == null) aPolyPath = aPath;
else aPolyPath.appendPath( aPath );
aTransform = SVGIdentityMatrix.translate( d*2.0, 0.0 ).multiply( aTransform );
}

aMatrix = SVGIdentityMatrix.translate( 0.0, d ).multiply( aMatrix ); // next line
}

return aPolyPath;
};


function RandomWipePath( nElements, bRandomBars )
{
                             var aTransform = SVGIdentityMatrix.translate( 0.5, 0.5 ).scale( nT ).translate( -0.5, -0.5 );
var aEllipse = this.aBasePath.cloneNode( true );
aEllipse.matrixTransform( aTransform );

return aEllipse;
};

function FanWipePath(bIsCenter, bIsSingle, bIsFanIn) {
this.bCenter = bIsCenter;
this.bSingle = bIsSingle;
this.bFanIn  = bIsFanIn;
this.aBasePath = createUnitSquarePath();
}

FanWipePath.prototype.perform = function( nT ) {
var res = this.aBasePath.cloneNode(true);
var poly = PinWheelWipePath.calcCenteredClock(
nT / ((this.bCenter && this.bSingle) ? 2.0 : 4.0), 1.0);
res.appendPath(poly);
var aTransform = SVGIdentityMatrix.flipY();
aTransform = aTransform.scaleNonUniform(-1.0, 1.0);
poly.matrixTransform(aTransform);
res.appendPath(poly);

if(this.bCenter) {
aTransform = SVGIdentityMatrix.scaleNonUniform(0.5, 0.5).translate(0.5, 0.5);
res.matrixTransform(aTransform);

if(!this.bSingle)
res.appendPath(flipOnXAxis(res));
}
else {
aTransform = SVGIdentityMatrix.scaleNonUniform(0.5, 1.0).translate(0.5, 1.0);
res.matrixTransform(aTransform);
}
return res;
}

function ClockWipePath() { }

ClockWipePath.prototype.perform = function( nT ) {
const aTransform = SVGIdentityMatrix.scaleNonUniform(0.5, 0.5).translate(0.5, 0.5);
var aPolyPath = PinWheelWipePath.calcCenteredClock(nT, 1.0);
aPolyPath.matrixTransform( aTransform );

return aPolyPath;
}

function PinWheelWipePath( nBlades )
{
this.nBlades = nBlades;
if( !this.nBlades || this.nBlades < 1 )
this.nBlades = 1;
}

PinWheelWipePath.calcCenteredClock = function( nT, nE )
{
var nMAX_EDGE = 2;

var aTransform = SVGIdentityMatrix.rotate( nT * 360 );

var aPoint = document.documentElement.createSVGPoint();
aPoint.y = -nMAX_EDGE;
aPoint = aPoint.matrixTransform( aTransform );

var sPathData = 'M ' + aPoint.x + ' ' + aPoint.y + ' ';
if( nT >= 0.875 )
sPathData += 'L ' + '-' + nE + ' -' + nE + ' ';
if( nT >= 0.625 )
sPathData += 'L ' + '-' + nE + ' ' + nE + ' ';
if( nT >= 0.375 )
sPathData += 'L ' + nE + ' ' + nE + ' ';
if( nT >= 0.125 )
sPathData += 'L ' + nE + ' -' + nE + ' ';

sPathData += 'L 0 -' + nE + ' ';
sPathData += 'L 0 0 ';
sPathData += 'L '  + aPoint.x + ' ' + aPoint.y;

var aPath = document.createElementNS( NSS['svg'], 'path' );
aPath.setAttribute( 'd', sPathData );
return aPath;
};

PinWheelWipePath.prototype.perform = function( nT )
{
var aBasePath = PinWheelWipePath.calcCenteredClock( nT / this.nBlades,
2.0 /* max edge when rotating */  );

var aPolyPath = aBasePath.cloneNode( true );
var aPath;
var aRotation;
var i;
for( i = this.nBlades - 1; i > 0; --i )
{
aRotation = SVGIdentityMatrix.rotate( (i * 360) / this.nBlades );
aPath = aBasePath.cloneNode( true );
aPath.matrixTransform( aRotation );
aPolyPath.appendPath( aPath );
}

var aTransform = SVGIdentityMatrix.translate( 0.5, 0.5 ).scale( 0.5 );
aPolyPath.matrixTransform( aTransform );

return aPolyPath;
};

function BarnDoorWipePath(doubled) {
this.aBasePath = createUnitSquarePath();
this.doubled   = doubled;
}

BarnDoorWipePath.prototype.perform = function( nT ) {
if(this.doubled)
nT /= 2.0;
var aTransform = SVGIdentityMatrix.translate(-0.5, -0.5);
aTransform = aTransform.scaleNonUniform(pruneScaleValue(nT), 1.0).translate(0.5, 0.5);
var aPath = this.aBasePath.cloneNode(true);
aPath.matrixTransform(aTransform);
var res = aPath;

if(this.doubled) {
aTransform = SVGIdentityMatrix.translate(-0.5, -0.5);
aTransform = aTransform.rotate(Math.PI / 2).translate(0.5, 0.5);
aPath.matrixTransform(aTransform);
res.appendPath(aPath);
}
return res;
}

function WaterfallWipePath(nElements, bFlipOnYAxis) {
this.bFlipOnYAxis = bFlipOnYAxis;

var sqrtElements = Math.floor(Math.sqrt(nElements));
var elementEdge = 1.0/sqrtElements;

var aPath = 'M '+ 0.0 + ' ' + -1.0 + ' ';
for(var pos = sqrtElements; pos--; ) {
var xPos = sqrtElements - pos - 1;
var yPos = pruneScaleValue( ((pos+1) * elementEdge) - 1.0);

aPath += 'L ' + pruneScaleValue(xPos * elementEdge) + ' ' + yPos + ' ';
aPath += 'L ' + pruneScaleValue((xPos+1)*elementEdge) + ' ' + yPos + ' ';
}
aPath += 'L ' + 1.0 + ' ' + -1.0 + ' ';
aPath += 'L ' + 0.0 + ' ' + -1.0 + ' ';
this.aBasePath = document.createElementNS( NSS['svg'], 'path');
this.aBasePath.setAttribute('d', aPath);
}

                        {
var i;
var aTransform;
var aPath;
for( i = this.nBars - 1; i > 0; --i )
{
aTransform = SVGIdentityMatrix.translate( i / this.nBars, 0.0 );
aTransform = aTransform.multiply( aMatrix );
aPath = this.aBasePath.cloneNode( true );
aPath.matrixTransform( aTransform );
aPolyPath.appendPath( aPath );
}
}
return aPolyPath;
};


function BoxWipePath(bIsTopCentered) {
this.bIsTopCentered = bIsTopCentered;
this.aBasePath = createUnitSquarePath();
}

BoxWipePath.prototype.perform = function( nT ) {
var d = pruneScaleValue(nT);
var aTransform = SVGIdentityMatrix;
if(this.bIsTopCentered) {
aTransform = aTransform.translate(-0.5, 0.0).scale(d, d).translate(0.5, 0.0);
}
else {
aTransform = aTransform.scale(d, d);
}
var aPath = this.aBasePath.cloneNode(true);
aPath.matrixTransform(aTransform);
return aPath;
}

function SweepWipePath(bCenter, bSingle, bOppositeVertical, bFlipOnYAxis) {
this.bCenter = bCenter;
this.bSingle = bSingle;
this.bOppositeVertical = bOppositeVertical;
this.bFlipOnYAxis = bFlipOnYAxis;
this.aBasePath = createUnitSquarePath();
}

SweepWipePath.prototype.perform = function( nT ) {
nT /= 2.0;
if(!this.bCenter)
nT /= 2.0;
if(!this.bSingle && !this.bOppositeVertical)
nT /= 2.0;

var poly = PinWheelWipePath.calcCenteredClock( nT + 0.25, 1.0 );
var aTransform;

if(this.bCenter) {
aTransform = SVGIdentityMatrix.translate(0.5, 0.0);
poly.matrixTransform(aTransform);
}
var res = poly;

if(!this.bSingle) {
if(this.bOppositeVertical) {
aTransform = SVGIdentityMatrix.scale(1.0, -1.0);
aTransform.translate(0.0, 1.0);
poly.matrixTransform(aTransform);
poly.changeOrientation();
}
else {
aTransform = SVGIdentityMatrix.translate(-0.5, -0.5);
aTransform.rotate(Math.PI);
aTransform.translate(0.5, 0.5);
poly.matrixTransform(aTransform);
}
res.appendPath(poly);
}
return this.bFlipOnYAxis ? flipOnYAxis(res) : res;
}

function FourBoxWipePath( bCornersOut )
{
this.bCornersOut = bCornersOut;
this.aBasePath = createUnitSquarePath();
}

FourBoxWipePath.prototype.perform = function( nT )
{
var aMatrix;
var d = pruneScaleValue( nT / 2.0 );

if( this.bCornersOut )
{
aMatrix = SVGIdentityMatrix.translate( -0.25, -0.25 ).scale( d ).translate( -0.5, -0.5 );
}
else
{
aMatrix = SVGIdentityMatrix.translate( -0.5, -0.5 ).scale( d );
}


var aTransform = aMatrix;
var aSquare = this.aBasePath.cloneNode( true );
aSquare.matrixTransform( aTransform );
var aPolyPath = aSquare;
aMatrix = SVGIdentityMatrix.flipY();
aTransform = aMatrix.multiply( aTransform );
aSquare = this.aBasePath.cloneNode( true );
aSquare.matrixTransform( aTransform );
aSquare.changeOrientation();
aPolyPath.appendPath( aSquare );
aMatrix = SVGIdentityMatrix.flipX();
aTransform = aMatrix.multiply( aTransform );
aSquare = this.aBasePath.cloneNode( true );
aSquare.matrixTransform( aTransform );
aPolyPath.appendPath( aSquare );
aMatrix = SVGIdentityMatrix.flipY();
aTransform = aMatrix.multiply( aTransform );
aSquare = this.aBasePath.cloneNode( true );
aSquare.matrixTransform( aTransform );
aSquare.changeOrientation();
aPolyPath.appendPath( aSquare );

aMatrix = SVGIdentityMatrix.translate( 0.5, 0.5 );
aMatrix = aMatrix.scale( 1.1 );
aPolyPath.matrixTransform( aMatrix );

return aPolyPath;
};


function EllipseWipePath( eSubtype )
{
this.eSubtype = eSubtype;

var sPathData = 'M 0.5 -0.207107 ' +
'C 0.687536 -0.207107 0.867392 -0.132608 1 0 ' +
'C 1.13261 0.132608 1.20711 0.312464 1.20711 0.5 ' +
'C 1.20711 0.687536 1.13261 0.867392 1 1 ' +
'C 0.867392 1.13261 0.687536 1.20711 0.5 1.20711 ' +
'C 0.312464 1.20711 0.132608 1.13261 0 1 ' +
'C -0.132608 0.867392 -0.207107 0.687536 -0.207107 0.5 ' +
'C -0.207107 0.312464 -0.132608 0.132608 0 0 ' +
'C 0.132608 -0.132608 0.312464 -0.207107 0.5 -0.207107';

this.aBasePath = document.createElementNS( NSS['svg'], 'path' );
this.aBasePath.setAttribute( 'd', sPathData );
}

EllipseWipePath.prototype.perform = function( nT )
{

      case THREEBLADE_TRANS_SUBTYPE:
nBlades = 3;
break;
case FOURBLADE_TRANS_SUBTYPE:
nBlades = 4;
break;
case EIGHTBLADE_TRANS_SUBTYPE:
nBlades = 8;
break;
default:
log( 'createClipPolyPolygon: unknown subtype: ' + nSubtype );
return null;
}
return new PinWheelWipePath( nBlades );
case CLOCKWIPE_TRANSITION:
return new ClockWipePath();
case RANDOMBARWIPE_TRANSITION:
return new RandomWipePath( 128, true /* bars */ );
case CHECKERBOARDWIPE_TRANSITION:
return new CheckerBoardWipePath( 10 );
case ZIGZAGWIPE_TRANSITION:
return new ZigZagWipePath( 5 );
case BARNZIGZAGWIPE_TRANSITION:
return new BarnZigZagWipePath( 5 );
case IRISWIPE_TRANSITION:
switch(nSubtype)
{
case RECTANGLE_TRANS_SUBTYPE:
return new IrisWipePath(0);
case DIAMOND_TRANS_SUBTYPE:
return new IrisWipePath(1);
default:
log( 'createClipPolyPolygon: unknown subtype: ' + nSubtype );
return null;
}
case BARNDOORWIPE_TRANSITION:
return new BarnDoorWipePath(false);
case SINGLESWEEPWIPE_TRANSITION:
return new SweepWipePath(
nSubtype == CLOCKWISETOP_TRANS_SUBTYPE ||
nSubtype == CLOCKWISERIGHT_TRANS_SUBTYPE ||
nSubtype == CLOCKWISEBOTTOM_TRANS_SUBTYPE ||
nSubtype == CLOCKWISELEFT_TRANS_SUBTYPE,
true,
false,
nSubtype == COUNTERCLOCKWISEBOTTOMLEFT_TRANS_SUBTYPE ||
nSubtype == COUNTERCLOCKWISETOPRIGHT_TRANS_SUBTYPE );
case WATERFALLWIPE_TRANSITION:
return new WaterfallWipePath(128, // flipOnYAxis
nSubtype == VERTICALRIGHT_TRANS_SUBTYPE ||
nSubtype == HORIZONTALLEFT_TRANS_SUBTYPE);
case MISCDIAGONALWIPE_TRANSITION:
switch(nSubtype) {
case DOUBLEBARNDOOR_TRANS_SUBTYPE:
return new BarnDoorWipePath(true /* Doubled */);
case DOUBLEDIAMOND_TRANS_SUBTYPE:
return new DoubleDiamondWipePath();
default:
log( 'createClipPolyPolygon: unhandled subtype: ' + nSubtype );
return null;
}
case DISSOLVE_TRANSITION:
return new RandomWipePath( 16 * 16, false /* dissolve */ );
case VEEWIPE_TRANSITION:
return new VeeWipePath();
case SNAKEWIPE_TRANSITION:
return new SnakeWipePath( 8 * 8, // diagonal
nSubtype == TOPLEFTDIAGONAL_TRANS_SUBTYPE     ||
nSubtype == TOPRIGHTDIAGONAL_TRANS_SUBTYPE    ||
nSubtype == BOTTOMRIGHTDIAGONAL_TRANS_SUBTYPE ||
nSubtype == BOTTOMLEFTDIAGONAL_TRANS_SUBTYPE   ,
nSubtype == TOPLEFTVERTICAL_TRANS_SUBTYPE     ||
nSubtype == TOPRIGHTDIAGONAL_TRANS_SUBTYPE    ||
nSubtype == BOTTOMLEFTDIAGONAL_TRANS_SUBTYPE
);
case PARALLELSNAKESWIPE_TRANSITION:
return new ParallelSnakesWipePath(
8 * 8, // elements
nSubtype == DIAGONALBOTTOMLEFTOPPOSITE_TRANS_SUBTYPE ||
nSubtype == DIAGONALTOPLEFTOPPOSITE_TRANS_SUBTYPE,
nSubtype == VERTICALBOTTOMLEFTOPPOSITE_TRANS_SUBTYPE ||
nSubtype == HORIZONTALTOPLEFTOPPOSITE_TRANS_SUBTYPE  ||
nSubtype == DIAGONALTOPLEFTOPPOSITE_TRANS_SUBTYPE,
nSubtype == VERTICALTOPLEFTOPPOSITE_TRANS_SUBTYPE    ||
nSubtype == VERTICALBOTTOMLEFTOPPOSITE_TRANS_SUBTYPE ||
nSubtype == HORIZONTALTOPLEFTOPPOSITE_TRANS_SUBTYPE  ||
nSubtype == HORIZONTALTOPRIGHTOPPOSITE_TRANS_SUBTYPE ||
nSubtype == DIAGONALBOTTOMLEFTOPPOSITE_TRANS_SUBTYPE ||
nSubtype == DIAGONALTOPLEFTOPPOSITE_TRANS_SUBTYPE
);

case SPIRALWIPE_TRANSITION:
return new SpiralWipePath(
8 * 8, // elements
nSubtype == TOPLEFTCOUNTERCLOCKWISE_TRANS_SUBTYPE     ||
nSubtype == TOPRIGHTCOUNTERCLOCKWISE_TRANS_SUBTYPE    ||
nSubtype == BOTTOMRIGHTCOUNTERCLOCKWISE_TRANS_SUBTYPE ||
nSubtype == BOTTOMLEFTCOUNTERCLOCKWISE_TRANS_SUBTYPE );

case BOXSNAKESWIPE_TRANSITION:
return new BoxSnakesWipePath(
8 * 8,
nSubtype == FOURBOXVERTICAL_TRANS_SUBTYPE ||
nSubtype == FOURBOXHORIZONTAL_TRANS_SUBTYPE );
}
}


function createUnitSquarePath()
{
var aPath = document.createElementNS( NSS['svg'], 'path' );
var sD = 'M 0 0 L 1 0 L 1 1 L 0 1 L 0 0';
aPath.setAttribute( 'd', sD );
return aPath;
}

function createEmptyPath()
{
var aPath = document.createElementNS( NSS['svg'], 'path' );
var sD = 'M 0 0 L 0 0';
aPath.setAttribute( 'd', sD );
return aPath;
}

function pruneScaleValue( nVal )
{
if( nVal < 0.0 )
return (nVal < -0.00001 ? nVal : -0.00001);
else
return (nVal > 0.00001 ? nVal : 0.00001);
}


function BarWipePath( nBars /* nBars > 1: blinds effect */ )
{
this.nBars = nBars;
if( this.nBars === undefined || this.nBars < 1 )
this.nBars = 1;
this.aBasePath = createUnitSquarePath();
}

BarWipePath.prototype.perform = function( nT )
{

var aMatrix = SVGIdentityMatrix.scaleNonUniform( pruneScaleValue( nT / this.nBars ), 1.0 );

var aPolyPath = this.aBasePath.cloneNode( true );
aPolyPath.matrixTransform( aMatrix );

if( this.nBars > 1 )
                        this.aStaticTransformation = null;
this.bForwardParameterSweep = true;
this.bSubtractPolygon = false;
this.bScaleIsotropically = aTransitionInfo.scaleIsotropically;
this.bFlip = false;

assert( this.aParametricPolyPolygon,
'ClippingFunctor: parametric polygon is not valid' );

if( aTransitionInfo.rotationAngle != 0.0 ||
aTransitionInfo.scaleX != 1.0 ||  aTransitionInfo.scaleY != 1.0 )
{
this.aStaticTransformation = SVGIdentityMatrix.translate( 0.5, 0.5 );
if( aTransitionInfo.scaleX != 1.0 ||  aTransitionInfo.scaleY != 1.0 )
this.aStaticTransformation
= this.aStaticTransformation.scaleNonUniform( aTransitionInfo.scaleX,
aTransitionInfo.scaleY );
if( aTransitionInfo.rotationAngle != 0.0 )
this.aStaticTransformation
= this.aStaticTransformation.rotate( aTransitionInfo.rotationAngle );
this.aStaticTransformation = this.aStaticTransformation.translate( -0.5, -0.5 );
}
else
{
this.aStaticTransformation = document.documentElement.createSVGMatrix();
}

if( !bIsDirectionForward )
{
var aMatrix = null;
switch( aTransitionInfo.reverseMethod )
{
default:
log( 'ClippingFunctor: unexpected reverse method.' );
break;
case REVERSEMETHOD_IGNORE:
break;
case REVERSEMETHOD_INVERT_SWEEP:
this.bForwardParameterSweep = !this.bForwardParameterSweep;
break;
case REVERSEMETHOD_SUBTRACT_POLYGON:
this.bSubtractPolygon = !this.bSubtractPolygon;
break;
case REVERSEMETHOD_SUBTRACT_AND_INVERT:
this.bForwardParameterSweep = !this.bForwardParameterSweep;
this.bSubtractPolygon = !this.bSubtractPolygon;
break;
case REVERSEMETHOD_ROTATE_180:
aMatrix = document.documentElement.createSVGMatrix();
aMatrix.setToRotationAroundPoint( 0.5, 0.5, 180 );
this.aStaticTransformation = aMatrix.multiply( this.aStaticTransformation );
break;
case REVERSEMETHOD_FLIP_X:
aMatrix = document.documentElement.createSVGMatrix();
aMatrix.a = -1; aMatrix.e = 1.0;
this.aStaticTransformation = aMatrix.multiply( this.aStaticTransformation );
this.bFlip = true;
break;
case REVERSEMETHOD_FLIP_Y:
aMatrix = document.documentElement.createSVGMatrix();
aMatrix.d = -1; aMatrix.f = 1.0;
this.aStaticTransformation = aMatrix.multiply( this.aStaticTransformation );
this.bFlip = true;
break;
}
}

if( !bIsModeIn )
{
if( aTransitionInfo.outInvertsSweep )
{
this.bForwardParameterSweep = !this.bForwardParameterSweep;
}
else
{
this.bSubtractPolygon = !this.bSubtractPolygon;
}
}
}

ClippingFunctor.aBoundingPath = document.createElementNS( NSS['svg'], 'path' );
ClippingFunctor.aBoundingPath.setAttribute( 'd', 'M -1 -1 L 2 -1 L 2 2 L -1 2 L -1 -1' );

ClippingFunctor.prototype.perform = function( nT, nWidth, nHeight )
{
var aClipPoly = this.aParametricPolyPolygon.perform( this.bForwardParameterSweep ? nT : (1 - nT) );


if( this.bSubtractPolygon )
{
aClipPoly.changeOrientation();
aClipPoly.prependPath( ClippingFunctor.aBoundingPath );
}

var aMatrix;
if( this.bScaleIsotropically )
{
var nScaleFactor = Math.max( nWidth, nHeight );
aMatrix = SVGIdentityMatrix.translate( -( nScaleFactor - nWidth ) / 2.0,
-( nScaleFactor - nHeight ) / 2.0 );
aMatrix = aMatrix.scale( nScaleFactor );
aMatrix = aMatrix.multiply( this.aStaticTransformation );
}
else
{
aMatrix = SVGIdentityMatrix.scaleNonUniform( nWidth, nHeight );
aMatrix = aMatrix.multiply( this.aStaticTransformation );
}

aClipPoly.matrixTransform( aMatrix );

return aClipPoly;
};


function createClipPolyPolygon( nType, nSubtype )
{
switch( nType )
{
default:
log( 'createClipPolyPolygon: unknown transition type: ' + nType );
return null;
case BARWIPE_TRANSITION:
return new BarWipePath( 1 );
case FOURBOXWIPE_TRANSITION:
return new FourBoxWipePath( nSubtype === CORNERSOUT_TRANS_SUBTYPE );
case BOXWIPE_TRANSITION:
return new BoxWipePath( nSubtype == LEFTCENTER_TRANS_SUBTYPE ||
nSubtype == TOPCENTER_TRANS_SUBTYPE ||
nSubtype == RIGHTCENTER_TRANS_SUBTYPE ||
nSubtype == BOTTOMCENTER_TRANS_SUBTYPE );
case ELLIPSEWIPE_TRANSITION:
return new EllipseWipePath( nSubtype );
case FANWIPE_TRANSITION:
return new FanWipePath(nSubtype == CENTERTOP_TRANS_SUBTYPE ||
nSubtype == CENTERRIGHT_TRANS_SUBTYPE, true, false);
case PINWHEELWIPE_TRANSITION:
var nBlades;
switch( nSubtype )
{
case ONEBLADE_TRANS_SUBTYPE:
nBlades = 1;
break;
case DEFAULT_TRANS_SUBTYPE:
case TWOBLADEVERTICAL_TRANS_SUBTYPE:
nBlades = 2;
break;
case TWOBLADEHORIZONTAL_TRANS_SUBTYPE:
nBlades = 2;
break;
                           };


function FadingSlideChange( aLeavingSlide, aEnteringSlide )
{
FadingSlideChange.superclass.constructor.call( this, aLeavingSlide, aEnteringSlide );
this.bFirstRun = true;
}
extend( FadingSlideChange, SlideChangeBase );

FadingSlideChange.prototype.start = function()
{
FadingSlideChange.superclass.start.call( this );
this.aEnteringSlide.notifyUsedAttribute( 'opacity' );
this.aLeavingSlide.notifyUsedAttribute( 'opacity' );
this.aEnteringSlide.setOpacity( 0.0 );
this.aEnteringSlide.show();
};

FadingSlideChange.prototype.performIn = function( nT )
{
this.aEnteringSlide.setOpacity( nT );
};

FadingSlideChange.prototype.performOut = function( nT )
{

this.aLeavingSlide.setOpacity( 1 - nT );
};


function FadingOverColorSlideChange( aLeavingSlide, aEnteringSlide, sFadeColor )
{
FadingSlideChange.superclass.constructor.call( this, aLeavingSlide, aEnteringSlide );
this.sFadeColor = sFadeColor;
if( !this.sFadeColor )
{
log( 'FadingOverColorSlideChange: sFadeColor not valid.' );
this.sFadeColor = '#000000';
}
this.aColorPlaneElement = this.createColorPlaneElement();
}
extend( FadingOverColorSlideChange, SlideChangeBase );

FadingOverColorSlideChange.prototype.start = function()
{
FadingOverColorSlideChange.superclass.start.call( this );
this.aEnteringSlide.notifyUsedAttribute( 'opacity' );
this.aLeavingSlide.notifyUsedAttribute( 'opacity' );
this.aLeavingSlide.insertBefore( this.aColorPlaneElement );
this.aEnteringSlide.setOpacity( 0.0 );
this.aEnteringSlide.show();
};

FadingOverColorSlideChange.prototype.end = function()
{
FadingOverColorSlideChange.superclass.end.call( this );
this.aLeavingSlide.removeElement( this.aColorPlaneElement );
};

FadingOverColorSlideChange.prototype.performIn = function( nT )
{
this.aEnteringSlide.setOpacity( (nT > 0.55) ? 2.0*(nT-0.55) : 0.0 );
};

FadingOverColorSlideChange.prototype.performOut = function( nT )
{
this.aLeavingSlide.setOpacity( (nT > 0.45) ? 0.0 : 2.0*(0.45-nT) );
};

FadingOverColorSlideChange.prototype.createColorPlaneElement = function()
{
var aColorPlaneElement = document.createElementNS( NSS['svg'], 'rect' );
aColorPlaneElement.setAttribute( 'width', String( this.aLeavingSlide.getWidth() ) );
aColorPlaneElement.setAttribute( 'height', String( this.aLeavingSlide.getHeight() ) );
aColorPlaneElement.setAttribute( 'fill', this.sFadeColor );
return aColorPlaneElement;
};


function MovingSlideChange( aLeavingSlide, aEnteringSlide,
aLeavingDirection, aEnteringDirection )
{
MovingSlideChange.superclass.constructor.call( this, aLeavingSlide, aEnteringSlide );
this.aLeavingDirection = aLeavingDirection;
this.aEnteringDirection = aEnteringDirection;
}
extend( MovingSlideChange, SlideChangeBase );

MovingSlideChange.prototype.start = function()
{
MovingSlideChange.superclass.start.call( this );
this.aEnteringSlide.notifyUsedAttribute( 'transform' );
this.aLeavingSlide.notifyUsedAttribute( 'transform' );
this.performIn( 0 );
this.aEnteringSlide.show();
};

MovingSlideChange.prototype.performIn = function( nT )
{
var nS = nT - 1;
var dx = nS * this.aEnteringDirection.x * this.aEnteringSlide.getWidth();
var dy = nS * this.aEnteringDirection.y * this.aEnteringSlide.getHeight();
this.aEnteringSlide.translate( dx, dy );
};

MovingSlideChange.prototype.performOut = function( nT )
{
var dx = nT * this.aLeavingDirection.x * this.aLeavingSlide.getWidth();
var dy = nT * this.aLeavingDirection.y * this.aLeavingSlide.getHeight();
this.aLeavingSlide.translate( dx, dy );
};


function ClippedSlideChange( aLeavingSlide, aEnteringSlide, aParametricPolyPolygon,
aTransitionInfo, bIsDirectionForward )
{
ClippedSlideChange.superclass.constructor.call( this, aLeavingSlide, aEnteringSlide );

var bIsModeIn = true;
this.aClippingFunctor= new ClippingFunctor( aParametricPolyPolygon, aTransitionInfo,
bIsDirectionForward, bIsModeIn );
}
extend( ClippedSlideChange, SlideChangeBase );

ClippedSlideChange.prototype.start = function()
{
ClippedSlideChange.superclass.start.call( this );
this.aEnteringSlide.notifyUsedAttribute( 'clip-path' );
this.performIn( 0 );
this.aEnteringSlide.show();
};

ClippedSlideChange.prototype.performIn = function( nT )
{
var nWidth = this.aEnteringSlide.getWidth();
var nHeight = this.aEnteringSlide.getHeight();
var aPolyPolygonElement = this.aClippingFunctor.perform( nT, nWidth, nHeight );
this.aEnteringSlide.setClipPath( aPolyPolygonElement );
};

ClippedSlideChange.prototype.performOut = function( )
{
};


function ClippingFunctor( aParametricPolyPolygon, aTransitionInfo,
bIsDirectionForward, bIsModeIn)
{
this.aParametricPolyPolygon = aParametricPolyPolygon;
                           this.aAnimatableElement = aAnimatableElement;
this.aAnimatableElement.notifyAnimationStart();

if( !this.bAnimationStarted )
this.bAnimationStarted = true;
};

GenericAnimation.prototype.end = function()
{
if( this.bAnimationStarted )
{
this.bAnimationStarted = false;
this.aAnimatableElement.notifyAnimationEnd();
}
};

GenericAnimation.prototype.perform = function( aValue )
{
if( this.aSetModifier )
aValue = this.aSetModifier( aValue );

this.aSetValueFunc( aValue );
};

GenericAnimation.prototype.getUnderlyingValue = function()
{
var aValue = this.aGetValueFunc();
if( this.aGetModifier )
aValue = this.aGetModifier( aValue );
return aValue;
};


function TupleAnimation( aGetValueFunc, aSetValueFunc, aDefaultValue, aReferenceSize )
{
TupleAnimation.superclass.constructor.call( this, aGetValueFunc, aSetValueFunc );
assert( aDefaultValue && aReferenceSize,
'TupleAnimation constructor: default value functor and/or reference size are not valid' );

this.aDefaultValue = aDefaultValue;
this.aReferenceSize = aReferenceSize;
}
extend( TupleAnimation, GenericAnimation );

TupleAnimation.prototype.perform = function( aNormValue )
{
assert(aNormValue.length === this.aReferenceSize.length);

var aValue = [];
for( var i = 0; i < aNormValue.length; ++i )
{
aValue.push( aNormValue[i] * this.aReferenceSize[i] );
}

this.aSetValueFunc( aValue );
};

TupleAnimation.prototype.getUnderlyingValue = function()
{
var aValue = this.aGetValueFunc();
assert(aValue.length === this.aReferenceSize.length);

var aNormValue = [];
for( var i = 0; i < aValue.length; ++i )
{
aNormValue.push( aValue[i] / this.aReferenceSize[i] );
}

return aNormValue;
};


function HSLAnimationWrapper( aColorAnimation )
{
assert( aColorAnimation,
'HSLAnimationWrapper constructor: invalid color animation delegate' );

this.aAnimation = aColorAnimation;
}


HSLAnimationWrapper.prototype.start = function( aAnimatableElement )
{
this.aAnimation.start( aAnimatableElement );
};

HSLAnimationWrapper.prototype.end = function()
{
this.aAnimation.end();
};
HSLAnimationWrapper.prototype.perform = function( aHSLValue )
{
this.aAnimation.perform( aHSLValue.convertToRGB() );
};

HSLAnimationWrapper.prototype.getUnderlyingValue = function()
{
return this.aAnimation.getUnderlyingValue().convertToHSL();
};


function SlideChangeBase(aLeavingSlide, aEnteringSlide)
{
this.aLeavingSlide = aLeavingSlide;
this.aEnteringSlide = aEnteringSlide;
this.bIsFinished = false;
}

SlideChangeBase.prototype.start = function()
{
};

SlideChangeBase.prototype.end = function()
{
if( this.bIsFinished )
return;

this.aLeavingSlide.hide();
this.aEnteringSlide.reset();
this.aLeavingSlide.reset();

this.bIsFinished = true;
};

SlideChangeBase.prototype.perform = function( nValue )
{
if( this.bIsFinished ) return false;

if( this.aLeavingSlide )
this.performOut( nValue );

if( this.aEnteringSlide )
this.performIn( nValue );

return true;
};

SlideChangeBase.prototype.getUnderlyingValue = function()
{
return 0.0;
};

SlideChangeBase.prototype.performIn = function( )
{
log( 'SlideChangeBase.performIn: abstract method called' );
};

SlideChangeBase.prototype.performOut = function( )
{
log( 'SlideChangeBase.performOut: abstract method called' );
                         aGetModifier,
aSetModifier);
}


function createPairPropertyAnimation( sTransformType, aAnimatedElement, nWidth, nHeight )
{
var aFunctorSet = aAttributeMap[ sTransformType ];
var sGetValueMethod = aFunctorSet.get;
var sSetValueMethod = aFunctorSet.set;

var aDefaultValue = [];
var aSizeReference = [];
if( sTransformType === 'scale' )
{
aDefaultValue[0] = aSizeReference[0] = aAnimatedElement.getBaseBBox().width;
aDefaultValue[1] = aSizeReference[1] = aAnimatedElement.getBaseBBox().height;
}
else if( sTransformType === 'translate' )
{
aDefaultValue[0] = aAnimatedElement.getBaseCenterX();
aDefaultValue[1] = aAnimatedElement.getBaseCenterY();
aSizeReference[0] = nWidth;
aSizeReference[1] = nHeight;
}
else
{
log( 'createPairPropertyAnimation: transform type is not handled' );
return null;
}

return new TupleAnimation( bind( aAnimatedElement, aAnimatedElement[ sGetValueMethod ] ),
bind( aAnimatedElement, aAnimatedElement[ sSetValueMethod ] ),
aDefaultValue,
aSizeReference );
}


function createShapeTransition( aActivityParamSet, aAnimatedElement,
nSlideWidth, nSlideHeight,
aAnimatedTransitionFilterNode )
{
if( !aAnimatedTransitionFilterNode )
{
log( 'createShapeTransition: the animated transition filter node is not valid.' );
return null;
}
var eTransitionType = aAnimatedTransitionFilterNode.getTransitionType();
var eTransitionSubType = aAnimatedTransitionFilterNode.getTransitionSubType();
var bDirectionForward = ! aAnimatedTransitionFilterNode.getReverseDirection();
var bModeIn = ( aAnimatedTransitionFilterNode.getTransitionMode() == FORWARD );

var aTransitionInfo = aTransitionInfoTable[eTransitionType][eTransitionSubType];
var eTransitionClass = aTransitionInfo['class'];

switch( eTransitionClass )
{
default:
case TRANSITION_INVALID:
log( 'createShapeTransition: transition class: TRANSITION_INVALID' );
return null;

case TRANSITION_CLIP_POLYPOLYGON:
var aParametricPolyPolygon
= createClipPolyPolygon( eTransitionType, eTransitionSubType );
var aClippingAnimation
= new ClippingAnimation( aParametricPolyPolygon, aTransitionInfo,
bDirectionForward, bModeIn );
return new SimpleActivity( aActivityParamSet, aClippingAnimation, true );

case TRANSITION_SPECIAL:
switch( eTransitionType )
{
default:
var aAnimation
= createPropertyAnimation( 'opacity',
aAnimatedElement,
nSlideWidth,
nSlideHeight );
return new SimpleActivity( aActivityParamSet, aAnimation, bModeIn );
}
}

}


function ClippingAnimation( aParametricPolyPolygon, aTransitionInfo,
bDirectionForward, bModeIn )
{
this.aClippingFunctor = new ClippingFunctor( aParametricPolyPolygon,
aTransitionInfo,
bDirectionForward, bModeIn );
this.bAnimationStarted = false;
}

ClippingAnimation.prototype.start = function( aAnimatableElement )
{
assert( aAnimatableElement,
'ClippingAnimation.start: animatable element is not valid' );
this.aAnimatableElement = aAnimatableElement;
this.aAnimatableElement.initClipPath();
this.aAnimatableElement.notifyAnimationStart();

if( !this.bAnimationStarted )
this.bAnimationStarted = true;

};

ClippingAnimation.prototype.end = function()
{
if( this.bAnimationStarted )
{
this.aAnimatableElement.cleanClipPath();
this.bAnimationStarted = false;
this.aAnimatableElement.notifyAnimationEnd();
}
};

ClippingAnimation.prototype.perform = function( nValue )
{
var nWidth = this.aAnimatableElement.aClippingBBox.width;
var nHeight = this.aAnimatableElement.aClippingBBox.height;
var aPolyPolygonElement = this.aClippingFunctor.perform( nValue, nWidth, nHeight );
this.aAnimatableElement.setClipPath( aPolyPolygonElement );
};

ClippingAnimation.prototype.getUnderlyingValue = function()
{
return 0.0;
};


function GenericAnimation( aGetValueFunc, aSetValueFunc, aGetModifier, aSetModifier )
{
assert( aGetValueFunc && aSetValueFunc,
'GenericAnimation constructor: get value functor and/or set value functor are not valid' );

this.aGetValueFunc = aGetValueFunc;
this.aSetValueFunc = aSetValueFunc;
this.aGetModifier = aGetModifier;
this.aSetModifier = aSetModifier;
this.aAnimatableElement = null;
this.bAnimationStarted = false;
}


GenericAnimation.prototype.start = function( aAnimatableElement )
{
assert( aAnimatableElement, 'GenericAnimation.start: animatable element is not valid' );

              
return sInfo;
};


function createAnimationTree( aRootElement, aNodeContext )
{
return createAnimationNode( aRootElement, null, aNodeContext );
}


function createAnimationNode( aElement, aParentNode, aNodeContext )
{
assert( aElement, 'createAnimationNode: invalid animation element' );

var eAnimationNodeType = getAnimationElementType( aElement );

var aCreatedNode = null;
var aCreatedContainer = null;

switch( eAnimationNodeType )
{
case ANIMATION_NODE_PAR:
aCreatedNode = aCreatedContainer =
new ParallelTimeContainer( aElement, aParentNode, aNodeContext );
break;
case ANIMATION_NODE_ITERATE:
aCreatedNode = aCreatedContainer =
new ParallelTimeContainer( aElement, aParentNode, aNodeContext );
break;
case ANIMATION_NODE_SEQ:
aCreatedNode = aCreatedContainer =
new SequentialTimeContainer( aElement, aParentNode, aNodeContext );
break;
case ANIMATION_NODE_ANIMATE:
aCreatedNode = new PropertyAnimationNode( aElement, aParentNode, aNodeContext );
break;
case ANIMATION_NODE_SET:
aCreatedNode = new AnimationSetNode( aElement, aParentNode, aNodeContext );
break;
case ANIMATION_NODE_ANIMATEMOTION:
log( 'createAnimationNode: ANIMATEMOTION not implemented' );
return null;
case ANIMATION_NODE_ANIMATECOLOR:
aCreatedNode = new AnimationColorNode( aElement, aParentNode, aNodeContext );
break;
case ANIMATION_NODE_ANIMATETRANSFORM:
aCreatedNode = new AnimationTransformNode( aElement, aParentNode, aNodeContext );
break;
case ANIMATION_NODE_TRANSITIONFILTER:
aCreatedNode = new AnimationTransitionFilterNode( aElement, aParentNode, aNodeContext );
break;
case ANIMATION_NODE_AUDIO:
log( 'createAnimationNode: AUDIO not implemented' );
return null;
case ANIMATION_NODE_COMMAND:
log( 'createAnimationNode: COMMAND not implemented' );
return null;
default:
log( 'createAnimationNode: invalid Animation Node Type: ' + eAnimationNodeType );
return null;
}

if( aCreatedContainer )
{
if( eAnimationNodeType == ANIMATION_NODE_ITERATE )
{
createIteratedNodes( aElement, aCreatedContainer, aNodeContext );
}
else
{
var aChildrenArray = getElementChildren( aElement );
for( var i = 0; i < aChildrenArray.length; ++i )
{
if( !createChildNode( aChildrenArray[i], aCreatedContainer, aNodeContext ) )
{
aCreatedContainer.removeAllChildrenNodes();
break;
}
}
}
}

return aCreatedNode;
}


function createChildNode( aElement, aParentNode, aNodeContext )
{
var aChildNode = createAnimationNode( aElement, aParentNode, aNodeContext );

if( !aChildNode )
{
log( 'createChildNode: child node creation failed' );
return false;
}
else
{
aParentNode.appendChildNode( aChildNode );
return true;
}
}


function createIteratedNodes( /*aElement, aContainerNode, aNodeContext*/ )
{
}


function makeScaler( nScale )
{
if( ( typeof( nScale ) !== typeof( 0 ) ) || !isFinite( nScale ) )
{
log( 'makeScaler: not valid param passed: ' + nScale );
return null;
}

return  function( nValue )
{
return ( nScale * nValue );
};
}


function createPropertyAnimation( sAttrName, aAnimatedElement, nWidth, nHeight )
{
if( !aAttributeMap[ sAttrName ] )
{
log( 'createPropertyAnimation: attribute is unknown' );
return null;
}


var aFunctorSet = aAttributeMap[ sAttrName ];

var sGetValueMethod =   aFunctorSet.get;
var sSetValueMethod =   aFunctorSet.set;

if( !sGetValueMethod || !sSetValueMethod  )
{
log( 'createPropertyAnimation: attribute is not handled' );
return null;
}

var aGetModifier =  eval( aFunctorSet.getmod );
var aSetModifier =  eval( aFunctorSet.setmod );


return new GenericAnimation( bind( aAnimatedElement, aAnimatedElement[ sGetValueMethod ] ),
bind( aAnimatedElement, aAnimatedElement[ sSetValueMethod ] ),
                     COLOR_SPACE_HSL );
aInterpolator = aInterpolatorMaker( this.getColorInterpolationDirection() );
}
else
{
ANIMDBG.print( 'AnimationColorNode.createActivity: color space rgb'  );
aColorAnimation = aAnimation;
aInterpolator = aInterpolatorHandler.getInterpolator( this.getCalcMode(),
COLOR_PROPERTY,
COLOR_SPACE_RGB );
}

return createActivity( aActivityParamSet, this, aColorAnimation, aInterpolator );
};

AnimationColorNode.prototype.getColorInterpolation = function()
{
return this.eColorInterpolation;
};

AnimationColorNode.prototype.getColorInterpolationDirection = function()
{
return this.eColorInterpolationDirection;
};

AnimationColorNode.prototype.info = function( bVerbose )
{
var sInfo = AnimationColorNode.superclass.info.call( this, bVerbose );

if( bVerbose )
{
sInfo += ';  color-interpolation: ' + aColorSpaceOutMap[ this.getColorInterpolation() ];

sInfo += ';  color-interpolation-direction: ' + aClockDirectionOutMap[ this.getColorInterpolationDirection() ];
}
return sInfo;
};


function AnimationTransitionFilterNode(  aAnimElem, aParentNode, aNodeContext )
{
AnimationTransitionFilterNode.superclass.constructor.call( this, aAnimElem, aParentNode, aNodeContext );

this.sClassName = 'AnimationTransitionFilterNode';

this.eTransitionType = undefined;
this.eTransitionSubType = undefined;
this.bReverseDirection = undefined;
this.eTransitionMode = undefined;
}
extend( AnimationTransitionFilterNode, AnimationBaseNode );


AnimationTransitionFilterNode.prototype.createActivity = function()
{
var aActivityParamSet = this.fillActivityParams();

return createShapeTransition( aActivityParamSet,
this.getAnimatedElement(),
this.aNodeContext.aSlideWidth,
this.aNodeContext.aSlideHeight,
this );
};

AnimationTransitionFilterNode.prototype.parseElement = function()
{
var bRet = AnimationTransitionFilterNode.superclass.parseElement.call( this );
var bIsValidTransition = true;

var aAnimElem = this.aElement;

this.eTransitionType = undefined;
var sTypeAttr = aAnimElem.getAttributeNS( NSS['smil'], 'type' );
if( sTypeAttr && aTransitionTypeInMap[ sTypeAttr ] )
{
this.eTransitionType = aTransitionTypeInMap[ sTypeAttr ];
}
else
{
bIsValidTransition = false;
log( 'AnimationTransitionFilterNode.parseElement: transition type not valid: ' + sTypeAttr );
}

this.eTransitionSubType = undefined;
var sSubTypeAttr = aAnimElem.getAttributeNS( NSS['smil'], 'subtype' );
if( sSubTypeAttr === null )
sSubTypeAttr = 'default';
if( sSubTypeAttr && ( aTransitionSubtypeInMap[ sSubTypeAttr ] !== undefined  ) )
{
this.eTransitionSubType = aTransitionSubtypeInMap[ sSubTypeAttr ];
}
else
{
bIsValidTransition = false;
log( 'AnimationTransitionFilterNode.parseElement: transition subtype not valid: ' + sSubTypeAttr );
}

if( !bIsValidTransition )
{
this.eTransitionType = FADE_TRANSITION;
this.eTransitionSubType = CROSSFADE_TRANS_SUBTYPE;
log( 'AnimationTransitionFilterNode.parseElement: in place of the invalid transition a crossfade transition is used' );
}

this.bReverseDirection = false;
var sDirectionAttr = aAnimElem.getAttributeNS( NSS['smil'], 'direction' );
if( sDirectionAttr == 'reverse' )
this.bReverseDirection = true;

this.eTransitionMode = TRANSITION_MODE_IN;
var sModeAttr = aAnimElem.getAttributeNS( NSS['smil'], 'mode' );
if( sModeAttr === 'out' )
this.eTransitionMode = TRANSITION_MODE_OUT;

return bRet;
};

AnimationTransitionFilterNode.prototype.getTransitionType = function()
{
return this.eTransitionType;
};

AnimationTransitionFilterNode.prototype.getTransitionSubType = function()
{
return this.eTransitionSubType;
};

AnimationTransitionFilterNode.prototype.getTransitionMode = function()
{
return this.eTransitionMode;
};

AnimationTransitionFilterNode.prototype.getReverseDirection = function()
{
return this.bReverseDirection;
};

AnimationTransitionFilterNode.prototype.info = function( bVerbose )
{
var sInfo = AnimationTransitionFilterNode.superclass.info.call( this, bVerbose );

if( bVerbose )
{
sInfo += ';  type: ' + getKeyByValue(aTransitionTypeInMap, this.getTransitionType());

sInfo += ';  subtype: ' + getKeyByValue(aTransitionSubtypeInMap, this.getTransitionSubType());

if( this.getReverseDirection() )
sInfo += ';  direction: reverse';
}
                              this.sClassName = 'PropertyAnimationNode';
}
extend( PropertyAnimationNode, AnimationBaseNode3 );


PropertyAnimationNode.prototype.createActivity = function()
{
var aActivityParamSet = this.fillActivityParams();

var aAnimation = createPropertyAnimation( this.getAttributeName(),
this.getAnimatedElement(),
this.aNodeContext.aSlideWidth,
this.aNodeContext.aSlideHeight );

var aInterpolator = null;  // createActivity will compute it;
return createActivity( aActivityParamSet, this, aAnimation, aInterpolator );
};


function isValidTransformation( sType )
{
return ( sType === 'translate' || sType === 'scale' || sType === 'rotate'
|| sType === 'skewX' || sType === 'skewY' );
}

function AnimationTransformNode(  aAnimElem, aParentNode, aNodeContext )
{
AnimationTransformNode.superclass.constructor.call( this, aAnimElem, aParentNode, aNodeContext );

this.sClassName = 'AnimationTransformNode';
}
extend( AnimationTransformNode, AnimationBaseNode3 );


AnimationTransformNode.prototype.parseElement = function()
{
var bRet = AnimationTransformNode.superclass.parseElement.call(this);

var aAnimElem = this.aElement;

var sTransformType = aAnimElem.getAttribute( 'svg:type' );
if( !isValidTransformation( sTransformType ) )
{
this.eCurrentState = INVALID_NODE;
log( 'AnimationTransformNode.parseElement: transformation type not found: ' + sTransformType );
}
else
{
this.sAttributeName = sTransformType;
}

return bRet;
}

AnimationTransformNode.prototype.createActivity = function()
{
var aActivityParamSet = this.fillActivityParams();
var aAnimation;

if( this.getAttributeName() === 'scale' || this.getAttributeName() === 'translate' )
{
aAnimation = createPairPropertyAnimation( this.getAttributeName(),
this.getAnimatedElement(),
this.aNodeContext.aSlideWidth,
this.aNodeContext.aSlideHeight );

}
else
{
aAnimation = createPropertyAnimation( this.getAttributeName(),
this.getAnimatedElement(),
this.aNodeContext.aSlideWidth,
this.aNodeContext.aSlideHeight );
}

var aInterpolator = null;  // createActivity will compute it;
return createActivity( aActivityParamSet, this, aAnimation, aInterpolator );
};


function AnimationSetNode(  aAnimElem, aParentNode, aNodeContext )
{
AnimationSetNode.superclass.constructor.call( this, aAnimElem, aParentNode, aNodeContext );

this.sClassName = 'AnimationSetNode';
}
extend( AnimationSetNode, AnimationBaseNode2 );


AnimationSetNode.prototype.createActivity = function()
{
var aAnimation = createPropertyAnimation( this.getAttributeName(),
this.getAnimatedElement(),
this.aNodeContext.aSlideWidth,
this.aNodeContext.aSlideHeight );

var aActivityParamSet = this.fillActivityParams();

return new SetActivity( aActivityParamSet, aAnimation, this.getToValue() );
};


function AnimationColorNode(  aAnimElem, aParentNode, aNodeContext )
{
AnimationColorNode.superclass.constructor.call( this, aAnimElem, aParentNode, aNodeContext );

this.sClassName = 'AnimationColorNode';

this.eColorInterpolation = undefined;
this.eColorInterpolationDirection = undefined;
}
extend( AnimationColorNode, AnimationBaseNode3 );


AnimationColorNode.prototype.parseElement = function()
{
var bRet = AnimationColorNode.superclass.parseElement.call( this );

var aAnimElem = this.aElement;

this.eColorInterpolation = COLOR_SPACE_RGB;
var sColorInterpolationAttr = aAnimElem.getAttributeNS( NSS['anim'], 'color-interpolation' );
if( sColorInterpolationAttr && aColorSpaceInMap[ sColorInterpolationAttr ] )
this.eColorInterpolation = aColorSpaceInMap[ sColorInterpolationAttr ];

this.eColorInterpolationDirection = CLOCKWISE;
var sColorInterpolationDirectionAttr = aAnimElem.getAttributeNS( NSS['anim'], 'color-interpolation-direction' );
if( sColorInterpolationDirectionAttr && aClockDirectionInMap[ sColorInterpolationDirectionAttr ] )
this.eColorInterpolationDirection = aClockDirectionInMap[ sColorInterpolationDirectionAttr ];

return bRet;
};

AnimationColorNode.prototype.createActivity = function()
{
var aActivityParamSet = this.fillActivityParams();

var aAnimation = createPropertyAnimation( this.getAttributeName(),
this.getAnimatedElement(),
this.aNodeContext.aSlideWidth,
this.aNodeContext.aSlideHeight );

var aColorAnimation;
var aInterpolator;
if( this.getColorInterpolation() === COLOR_SPACE_HSL )
{
ANIMDBG.print( 'AnimationColorNode.createActivity: color space hsl'  );
aColorAnimation = new HSLAnimationWrapper( aAnimation );
var aInterpolatorMaker = aInterpolatorHandler.getInterpolator( this.getCalcMode(),
COLOR_PROPERTY,
   assert( this.nFinishedChildren < this.aChildrenArray.length,
'SequentialTimeContainer.notifyDeactivating: assertion (this.nFinishedChildren < this.aChildrenArray.length) failed' );

var aNextChild = this.aChildrenArray[ this.nFinishedChildren ];

assert( aNextChild.getState() == UNRESOLVED_NODE,
'SequentialTimeContainer.notifyDeactivating: assertion (aNextChild.getState == UNRESOLVED_NODE) failed' );

if( !this.resolveChild( aNextChild ) )
{
this.deactivate();
}
};

SequentialTimeContainer.prototype.skipEffect = function( aChildNode )
{
if( this.isChildNode( aChildNode ) )
{
this.getContext().aActivityQueue.endAll();
this.getContext().bIsSkipping = true;
this.getContext().aTimerEventQueue.forceEmpty();
this.getContext().bIsSkipping = false;
var aEvent = makeEvent( bind2( aChildNode.deactivate, aChildNode ) );
this.getContext().aTimerEventQueue.addEvent( aEvent );
}
else
{
log( 'SequentialTimeContainer.skipEffect: unknown child: '
+ aChildNode.getId() );
}
};

SequentialTimeContainer.prototype.rewindCurrentEffect = function( aChildNode )
{
if( this.isChildNode( aChildNode ) )
{
assert( !this.bIsRewinding,
'SequentialTimeContainer.rewindCurrentEffect: is already rewinding.' );

this.bIsRewinding = true;
this.getContext().aActivityQueue.endAll();
this.getContext().bIsSkipping = true;
this.getContext().aTimerEventQueue.forceEmpty();
this.getContext().bIsSkipping = false;
this.getContext().aActivityQueue.endAll();

aChildNode.end();
aChildNode.removeEffect();
aChildNode.init();
this.resolveChild( aChildNode );
this.notifyRewindedEvent( aChildNode );
this.bIsRewinding = false;
}
else
{
log( 'SequentialTimeContainer.rewindCurrentEffect: unknown child: '
+ aChildNode.getId() );
}
};

SequentialTimeContainer.prototype.rewindLastEffect = function( aChildNode )
{
if( this.isChildNode( aChildNode ) )
{
assert( !this.bIsRewinding,
'SequentialTimeContainer.rewindLastEffect: is already rewinding.' );

this.bIsRewinding = true;
this.getContext().aTimerEventQueue.forceEmpty();
this.getContext().aActivityQueue.clear();
aChildNode.end();

--this.nFinishedChildren;
var aPreviousChildNode = this.aChildrenArray[ this.nFinishedChildren ];

aPreviousChildNode.removeEffect();
aPreviousChildNode.init();
aChildNode.init();
this.resolveChild( aPreviousChildNode );
this.notifyRewindedEvent( aChildNode );
this.bIsRewinding = false;
}
else
{
log( 'SequentialTimeContainer.rewindLastEffect: unknown child: '
+ aChildNode.getId() );
}
};

SequentialTimeContainer.prototype.resolveChild = function( aChildNode )
{
var bResolved = aChildNode.resolve();

if( bResolved && ( this.isMainSequenceRootNode() || this.isInteractiveSequenceRootNode() ) )
{
if( this.aCurrentSkipEvent )
this.aCurrentSkipEvent.dispose();
this.aCurrentSkipEvent = makeEvent( bind2( SequentialTimeContainer.prototype.skipEffect, this, aChildNode ) );

if( this.aRewindCurrentEffectEvent )
this.aRewindCurrentEffectEvent.dispose();
this.aRewindCurrentEffectEvent = makeEvent( bind2( SequentialTimeContainer.prototype.rewindCurrentEffect, this, aChildNode ) );

if( this.aRewindLastEffectEvent )
this.aRewindLastEffectEvent.dispose();
this.aRewindLastEffectEvent = makeEvent( bind2( SequentialTimeContainer.prototype.rewindLastEffect, this, aChildNode ) );

if( this.isMainSequenceRootNode() )
{
this.aContext.aEventMultiplexer.registerSkipEffectEvent( this.aCurrentSkipEvent );
this.aContext.aEventMultiplexer.registerRewindCurrentEffectEvent( this.aRewindCurrentEffectEvent );
this.aContext.aEventMultiplexer.registerRewindLastEffectEvent( this.aRewindLastEffectEvent );
}
else if( this.isInteractiveSequenceRootNode() )
{
this.aContext.aEventMultiplexer.registerSkipInteractiveEffectEvent( aChildNode.getId(), this.aCurrentSkipEvent );
this.aContext.aEventMultiplexer.registerRewindRunningInteractiveEffectEvent( aChildNode.getId(), this.aRewindCurrentEffectEvent );
this.aContext.aEventMultiplexer.registerRewindEndedInteractiveEffectEvent( aChildNode.getId(), this.aRewindLastEffectEvent );
}
}
return bResolved;
};

SequentialTimeContainer.prototype.notifyRewindedEvent = function( aChildNode )
{
if( this.isInteractiveSequenceRootNode() )
{
this.aContext.aEventMultiplexer.notifyRewindedEffectEvent( aChildNode.getId() );

var sId = aChildNode.getBegin().getEventBaseElementId();
if( sId )
{
this.aContext.aEventMultiplexer.notifyRewindedEffectEvent( sId );
}
}
};

SequentialTimeContainer.prototype.dispose = function()
{
if( this.aCurrentSkipEvent )
this.aCurrentSkipEvent.dispose();

SequentialTimeContainer.superclass.dispose.call( this );
};


function PropertyAnimationNode(  aAnimElem, aParentNode, aNodeContext )
{
PropertyAnimationNode.superclass.constructor.call( this, aAnimElem, aParentNode, aNodeContext );

                               this.aChildrenArray[i].removeEffect();
}
};

BaseContainerNode.prototype.saveStateOfAnimatedElement = function()
{
var nChildrenCount = this.aChildrenArray.length;
for( var i = 0; i < nChildrenCount; ++i )
{
this.aChildrenArray[i].saveStateOfAnimatedElement();
}
};

BaseContainerNode.prototype.forEachChildNode = function( aFunction, eNodeStateMask )
{
if( !eNodeStateMask )
eNodeStateMask = -1;

var nChildrenCount = this.aChildrenArray.length;
for( var i = 0; i < nChildrenCount; ++i )
{
if( ( eNodeStateMask != -1 ) && ( ( this.aChildrenArray[i].getState() & eNodeStateMask ) == 0 ) )
continue;
aFunction( this.aChildrenArray[i] );
}
};

BaseContainerNode.prototype.dispose = function()
{
var nChildrenCount = this.aChildrenArray.length;
for( var i = 0; i < nChildrenCount; ++i )
{
this.aChildrenArray[i].dispose();
}

BaseContainerNode.superclass.dispose.call( this );
};

BaseContainerNode.prototype.getImpressNodeType = function()
{
return this.eImpressNodeType;
};

BaseContainerNode.prototype.info = function( bVerbose )
{
var sInfo = BaseContainerNode.superclass.info.call( this, bVerbose );

if( bVerbose )
{
if( this.getImpressNodeType() )
sInfo += ';  node-type: ' + aImpressNodeTypeOutMap[ this.getImpressNodeType() ];
}

var nChildrenCount = this.aChildrenArray.length;
for( var i = 0; i < nChildrenCount; ++i )
{
sInfo += '\n';
sInfo += this.aChildrenArray[i].info( bVerbose );
}

return sInfo;
};


function ParallelTimeContainer( aAnimElem, aParentNode, aNodeContext )
{
ParallelTimeContainer.superclass.constructor.call( this, aAnimElem, aParentNode, aNodeContext );

this.sClassName = 'ParallelTimeContainer';
}
extend( ParallelTimeContainer, BaseContainerNode );


ParallelTimeContainer.prototype.activate_st = function()
{
var nChildrenCount = this.aChildrenArray.length;
var nResolvedChildren = 0;
for( var i = 0; i < nChildrenCount; ++i )
{
if( this.aChildrenArray[i].resolve() )
{
++nResolvedChildren;
}
}

if( nChildrenCount != nResolvedChildren )
{
log( 'ParallelTimeContainer.activate_st: resolving all children failed' );
return;
}


if( this.isDurationIndefinite() && ( nChildrenCount == 0  ) )
{
this.scheduleDeactivationEvent( this.makeDeactivationEvent( 0.0 ) );
}
else
{
this.scheduleDeactivationEvent();
}
};

ParallelTimeContainer.prototype.notifyDeactivating = function( aAnimationNode )
{
this.notifyDeactivatedChild( aAnimationNode );
};


function SequentialTimeContainer( aAnimElem, aParentNode, aNodeContext )
{
SequentialTimeContainer.superclass.constructor.call( this, aAnimElem, aParentNode, aNodeContext );

this.sClassName = 'SequentialTimeContainer';
this.bIsRewinding = false;
this.aCurrentSkipEvent = null;
this.aRewindCurrentEffectEvent = null;
this.aRewindLastEffectEvent = null;
}
extend( SequentialTimeContainer, BaseContainerNode );


SequentialTimeContainer.prototype.activate_st = function()
{
var nChildrenCount = this.aChildrenArray.length;
for( ; this.nFinishedChildren < nChildrenCount; ++this.nFinishedChildren )
{
if( this.resolveChild( this.aChildrenArray[ this.nFinishedChildren ] ) )
break;
else
log( 'SequentialTimeContainer.activate_st: resolving child failed!' );
}

if( this.isDurationIndefinite() && ( ( nChildrenCount == 0 ) || ( this.nFinishedChildren >= nChildrenCount ) ) )
{
this.scheduleDeactivationEvent( this.makeDeactivationEvent( 0.0 ) );
}
else
{
this.scheduleDeactivationEvent();
}
};

SequentialTimeContainer.prototype.notifyDeactivating = function( aNotifier )
{
if( this.bIsRewinding )
return;

if( this.notifyDeactivatedChild( aNotifier ) )
return;

               };

BaseContainerNode.prototype.removeAllChildrenNodes = function()
{
this.aChildrenArray = [];
};

BaseContainerNode.prototype.init_st = function()
{
this.nLeftIterations = this.getRepeatCount();

return this.init_children();
};

BaseContainerNode.prototype.init_children = function()
{
this.nFinishedChildren = 0;
var nChildrenCount = this.aChildrenArray.length;
var nInitChildren = 0;
for( var i = 0; i < nChildrenCount; ++i )
{
if( this.aChildrenArray[i].init() )
{
++nInitChildren;
}
}
return ( nChildrenCount == nInitChildren );
};


BaseContainerNode.prototype.deactivate_st = function( eDestState )
{
this.nLeftIterations = 0;
if( eDestState == FROZEN_NODE )
{
this.forEachChildNode( mem_fn( 'deactivate' ), ~( FROZEN_NODE | ENDED_NODE ) );
}
else
{
this.forEachChildNode( mem_fn( 'end' ), ~ENDED_NODE );
if( this.getFillMode() == FILL_MODE_REMOVE )
this.removeEffect();
}
};

BaseContainerNode.prototype.hasPendingAnimation = function()
{
var nChildrenCount = this.aChildrenArray.length;
for( var i = 0; i < nChildrenCount; ++i )
{
if( this.aChildrenArray[i].hasPendingAnimation() )
return true;
}
return false;
};

BaseContainerNode.prototype.activate_st = function()
{
log( 'BaseContainerNode.activate_st: abstract method called' );
};

BaseContainerNode.prototype.notifyDeactivating = function( /*aAnimationNode*/ )
{
log( 'BaseContainerNode.notifyDeactivating: abstract method called' );
};

BaseContainerNode.prototype.isDurationIndefinite = function()
{
return this.bDurationIndefinite;
};

BaseContainerNode.prototype.isChildNode = function( aAnimationNode )
{
var nChildrenCount = this.aChildrenArray.length;
for( var i = 0; i < nChildrenCount; ++i )
{
if( this.aChildrenArray[i].getId() == aAnimationNode.getId() )
return true;
}
return false;
};

BaseContainerNode.prototype.notifyDeactivatedChild = function( aChildNode )
{
assert( ( aChildNode.getState() == FROZEN_NODE ) || ( aChildNode.getState() == ENDED_NODE ),
'BaseContainerNode.notifyDeactivatedChild: passed child node is neither in FROZEN nor in ENDED state' );

assert( this.getState() != INVALID_NODE,
'BaseContainerNode.notifyDeactivatedChild: this node is invalid' );

if( !this.isChildNode( aChildNode ) )
{
log( 'BaseContainerNode.notifyDeactivatedChild: unknown child notifier!' );
return false;
}

var nChildrenCount = this.aChildrenArray.length;

assert( ( this.nFinishedChildren < nChildrenCount ),
'BaseContainerNode.notifyDeactivatedChild: assert(this.nFinishedChildren < nChildrenCount) failed' );

++this.nFinishedChildren;
var bFinished = ( this.nFinishedChildren >= nChildrenCount );

if( bFinished && this.isDurationIndefinite() )
{
if( this.nLeftIterations >= 1.0 )
{
this.nLeftIterations -= 1.0;
}
if( this.nLeftIterations >= 1.0 )
{
bFinished = false;
var aRepetitionEvent = makeDelay( bind( this, this.repeat ), 0.0 );
this.aContext.aTimerEventQueue.addEvent( aRepetitionEvent );
}
else
{
this.deactivate();
}
}

return bFinished;
};

BaseContainerNode.prototype.repeat = function()
{
this.forEachChildNode( mem_fn( 'end' ), ~ENDED_NODE );
this.removeEffect();
var bInitialized = this.init_children();
if( bInitialized )
this.activate_st();
return bInitialized;
};

BaseContainerNode.prototype.removeEffect = function()
{
var nChildrenCount = this.aChildrenArray.length;
if( nChildrenCount == 0 )
return;
for( var i = nChildrenCount - 1; i >= 0; --i )
{
if( ( this.aChildrenArray[i].getState() & ( FROZEN_NODE | ENDED_NODE ) ) == 0 )
{
log( 'BaseContainerNode.removeEffect: child(id:'
+ this.aChildrenArray[i].getId() + ') is neither frozen nor ended;'
+ ' state: '
+ aTransitionModeOutMap[ this.aChildrenArray[i].getState() ] );
continue;
}
     {
var aKeyTimes = sKeyTimesAttr.split( ';' );
for( var i = 0; i < aKeyTimes.length; ++i )
this.aKeyTimes.push( parseFloat( aKeyTimes[i] ) );
}

var sValuesAttr = aAnimElem.getAttributeNS( NSS['smil'], 'values' );
if( sValuesAttr )
{
this.aValues = sValuesAttr.split( ';' );
}
else
{
this.aValues = [];
}

this.aFormula = aAnimElem.getAttributeNS( NSS['anim'], 'formula' );

return bRet;
};

AnimationBaseNode3.prototype.getAccumulate = function()
{
return this.eAccumulate;
};

AnimationBaseNode3.prototype.getCalcMode = function()
{
return this.eCalcMode;
};

AnimationBaseNode3.prototype.getFromValue = function()
{
return this.aFromValue;
};

AnimationBaseNode3.prototype.getByValue = function()
{
return this.aByValue;
};

AnimationBaseNode3.prototype.getKeyTimes = function()
{
return this.aKeyTimes;
};

AnimationBaseNode3.prototype.getValues = function()
{
return this.aValues;
};

AnimationBaseNode3.prototype.getFormula = function()
{
return this.aFormula;
};

AnimationBaseNode3.prototype.info = function( bVerbose )
{
var sInfo = AnimationBaseNode3.superclass.info.call( this, bVerbose );

if( bVerbose )
{
if( this.getAccumulate() )
sInfo += ';  accumulate: ' + aAccumulateModeOutMap[ this.getAccumulate() ];

sInfo += ';  calcMode: ' + aCalcModeOutMap[ this.getCalcMode() ];

if( this.getFromValue() )
sInfo += ';  from: ' + this.getFromValue();

if( this.getByValue() )
sInfo += ';  by: ' + this.getByValue();

if( this.getKeyTimes().length )
sInfo += ';  keyTimes: ' + this.getKeyTimes().join( ',' );

if( this.getValues().length )
sInfo += ';  values: ' + this.getValues().join( ',' );

if( this.getFormula() )
sInfo += ';  formula: ' + this.getFormula();
}

return sInfo;
};


function BaseContainerNode( aAnimElem, aParentNode, aNodeContext )
{
BaseContainerNode.superclass.constructor.call( this, aAnimElem, aParentNode, aNodeContext );

this.sClassName = 'BaseContainerNode';
this.bIsContainer = true;
this.aChildrenArray = [];
this.nFinishedChildren = 0;
this.bDurationIndefinite = false;
this.nLeftIterations = 1;

this.eImpressNodeType = undefined;
this.ePresetClass =  undefined;
this.ePresetId =  undefined;
}
extend( BaseContainerNode, BaseNode );


BaseContainerNode.prototype.parseElement= function()
{
var bRet = BaseContainerNode.superclass.parseElement.call( this );

var aAnimElem = this.aElement;

this.eImpressNodeType = IMPRESS_DEFAULT_NODE;
var sNodeTypeAttr = aAnimElem.getAttributeNS( NSS['presentation'], 'node-type' );
if( sNodeTypeAttr && aImpressNodeTypeInMap[ sNodeTypeAttr ] )
this.eImpressNodeType = aImpressNodeTypeInMap[ sNodeTypeAttr ];
this.bMainSequenceRootNode = ( this.eImpressNodeType == IMPRESS_MAIN_SEQUENCE_NODE );
this.bInteractiveSequenceRootNode = ( this.eImpressNodeType == IMPRESS_INTERACTIVE_SEQUENCE_NODE );

this.ePresetClass =  undefined;
var sPresetClassAttr = aAnimElem.getAttributeNS( NSS['presentation'], 'preset-class' );
if( sPresetClassAttr && aPresetClassInMap[ sPresetClassAttr ] )
this.ePresetClass = aPresetClassInMap[ sPresetClassAttr ];

this.ePresetId =  undefined;
var sPresetIdAttr = aAnimElem.getAttributeNS( NSS['presentation'], 'preset-id' );
if( sPresetIdAttr && aPresetIdInMap[ sPresetIdAttr ] )
this.ePresetId = aPresetIdInMap[ sPresetIdAttr ];


var nChildrenCount = this.aChildrenArray.length;
for( var i = 0; i < nChildrenCount; ++i )
{
this.aChildrenArray[i].parseElement();
}


this.bDurationIndefinite
= ( !this.getDuration() || this.getDuration().isIndefinite()  ) &&
( !this.getEnd() || ( this.getEnd().getType() != OFFSET_TIMING ) );

return bRet;
};

BaseContainerNode.prototype.appendChildNode = function( aAnimationNode )
{
if( ! this.checkValidNode() )
return ;

if( aAnimationNode.registerDeactivatingListener( this ) )
this.aChildrenArray.push( aAnimationNode );
           AnimationBaseNode.prototype.removeEffect = function()
{
this.getAnimatedElement().restoreState( this.getId() );
};

AnimationBaseNode.prototype.getTargetElement = function()
{
return this.aTargetElement;
};

AnimationBaseNode.prototype.getAnimatedElement = function()
{
return this.aAnimatedElement;
};

AnimationBaseNode.prototype.dispose= function()
{
if( this.aActivity )
this.aActivity.dispose();

AnimationBaseNode.superclass.dispose.call( this );
};

AnimationBaseNode.prototype.getMinFrameCount = function()
{
return this.nMinFrameCount;
};

AnimationBaseNode.prototype.getAdditiveMode = function()
{
return this.eAdditiveMode;
};

AnimationBaseNode.prototype.info = function( bVerbose )
{
var sInfo = AnimationBaseNode.superclass.info.call( this, bVerbose );

if( bVerbose )
{
if( this.getMinFrameCount() )
sInfo += ';  min frame count: ' + this.getMinFrameCount();

sInfo += ';  additive: ' + aAddittiveModeOutMap[ this.getAdditiveMode() ];

if( this.getTargetElement() )
{
var sElemId = this.getTargetElement().getAttribute( 'id' );
sInfo += ';  targetElement: ' +  sElemId;
}
}

return sInfo;
};


function AnimationBaseNode2( aAnimElem, aParentNode, aNodeContext )
{
AnimationBaseNode2.superclass.constructor.call( this, aAnimElem, aParentNode, aNodeContext );

this.sAttributeName = '';
this.aToValue = null;

}
extend( AnimationBaseNode2, AnimationBaseNode );


AnimationBaseNode2.prototype.parseElement = function()
{
var bRet = AnimationBaseNode2.superclass.parseElement.call( this );

var aAnimElem = this.aElement;

this.sAttributeName = aAnimElem.getAttributeNS( NSS['smil'], 'attributeName' );
if( !this.sAttributeName )
{
this.eCurrentState = INVALID_NODE;
log( 'AnimationBaseNode2.parseElement: target attribute name not found: ' + this.sAttributeName );
}

this.aToValue = aAnimElem.getAttributeNS( NSS['smil'], 'to' );

return bRet;
};

AnimationBaseNode2.prototype.getAttributeName = function()
{
return this.sAttributeName;
};

AnimationBaseNode2.prototype.getToValue = function()
{
return this.aToValue;
};

AnimationBaseNode2.prototype.info = function( bVerbose )
{
var sInfo = AnimationBaseNode2.superclass.info.call( this, bVerbose );

if( bVerbose )
{
if( this.getAttributeName() )
sInfo += ';  attributeName: ' + this.getAttributeName();

if( this.getToValue() )
sInfo += ';  to: ' + this.getToValue();
}

return sInfo;
};


function AnimationBaseNode3( aAnimElem, aParentNode, aNodeContext )
{
AnimationBaseNode3.superclass.constructor.call( this, aAnimElem, aParentNode, aNodeContext );

this.eAccumulate = undefined;
this.eCalcMode = undefined;
this.aFromValue = null;
this.aByValue = null;
this.aKeyTimes = null;
this.aValues = null;
this.aFormula= null;
}
extend( AnimationBaseNode3, AnimationBaseNode2 );


AnimationBaseNode3.prototype.parseElement = function()
{
var bRet = AnimationBaseNode3.superclass.parseElement.call( this );

var aAnimElem = this.aElement;

this.eAccumulate = ACCUMULATE_MODE_NONE;
var sAccumulateAttr = aAnimElem.getAttributeNS( NSS['smil'], 'accumulate' );
if( sAccumulateAttr == 'sum' )
this.eAccumulate = ACCUMULATE_MODE_SUM;

this.eCalcMode = CALC_MODE_LINEAR;
var sCalcModeAttr = aAnimElem.getAttributeNS( NSS['smil'], 'calcMode' );
if( sCalcModeAttr && aCalcModeInMap[ sCalcModeAttr ] )
this.eCalcMode = aCalcModeInMap[ sCalcModeAttr ];

this.aFromValue = aAnimElem.getAttributeNS( NSS['smil'], 'from' );

this.aByValue = aAnimElem.getAttributeNS( NSS['smil'], 'by' );

this.aKeyTimes = [];
var sKeyTimesAttr = aAnimElem.getAttributeNS( NSS['smil'], 'keyTimes' );
sKeyTimesAttr = removeWhiteSpaces( sKeyTimesAttr );
if( sKeyTimesAttr )
           if( !this.aTargetElement )
{
this.eCurrentState = INVALID_NODE;
log( 'AnimationBaseNode.parseElement: target element not found: ' + sTargetElementAttr );
}

var sSubItemAttr = aAnimElem.getAttributeNS( NSS['anim'], 'sub-item' );
this.bIsTargetTextElement = ( sSubItemAttr && ( sSubItemAttr === 'text' ) );

var sAdditiveAttr = aAnimElem.getAttributeNS( NSS['smil'], 'additive' );
if( sAdditiveAttr && aAddittiveModeInMap[sAdditiveAttr] )
this.eAdditiveMode = aAddittiveModeInMap[sAdditiveAttr];
else
this.eAdditiveMode = ADDITIVE_MODE_REPLACE;

this.nMinFrameCount = ( this.getDuration().isValue() )
? ( this.getDuration().getValue() * MINIMUM_FRAMES_PER_SECONDS )
: MINIMUM_FRAMES_PER_SECONDS;
if( this.nMinFrameCount < 1.0 )
this.nMinFrameCount = 1;
else if( this.nMinFrameCount > MINIMUM_FRAMES_PER_SECONDS )
this.nMinFrameCount = MINIMUM_FRAMES_PER_SECONDS;


if( this.aTargetElement )
{
if( aAnimElem.getAttributeNS( NSS['smil'], 'attributeName' ) === 'visibility' )
{
if( aAnimElem.getAttributeNS( NSS['smil'], 'to' ) === 'visible' )
this.aTargetElement.setAttribute( 'visibility', 'hidden' );
}

if( !this.aNodeContext.aAnimatedElementMap[ sTargetElementAttr ] )
{
if( this.bIsTargetTextElement )
{
this.aNodeContext.aAnimatedElementMap[ sTargetElementAttr ]
= new AnimatedTextElement( this.aTargetElement );
}
else
{
this.aNodeContext.aAnimatedElementMap[ sTargetElementAttr ]
= new AnimatedElement( this.aTargetElement );
}
}
this.aAnimatedElement = this.aNodeContext.aAnimatedElementMap[ sTargetElementAttr ];

this.aAnimatedElement.setAdditiveMode( this.eAdditiveMode );
}


return bRet;
};

AnimationBaseNode.prototype.init_st = function()
{
if( this.aActivity )
this.aActivity.activate( makeEvent( bind( this, this.deactivate ) ) );
else
this.aActivity = this.createActivity();
return true;
};

AnimationBaseNode.prototype.resolve_st = function()
{
return true;
};

AnimationBaseNode.prototype.activate_st = function()
{
if( this.aActivity )
{
this.saveStateOfAnimatedElement();
this.aActivity.setTargets( this.getAnimatedElement() );
if( this.getContext().bIsSkipping  )
{
this.aActivity.end();
}
else
{
this.getContext().aActivityQueue.addActivity( this.aActivity );
}
}
else
{
AnimationBaseNode.superclass.scheduleDeactivationEvent.call( this );
}
};

AnimationBaseNode.prototype.deactivate_st = function( eDestState )
{
if( eDestState == FROZEN_NODE )
{
if( this.aActivity )
this.aActivity.end();
}
if( eDestState == ENDED_NODE )
{
if( this.aActivity )
this.aActivity.dispose();
if( ( this.getFillMode() == FILL_MODE_REMOVE ) && this.getAnimatedElement()  )
this.removeEffect();
}
};

AnimationBaseNode.prototype.createActivity = function()
{
log( 'AnimationBaseNode.createActivity: abstract method called' );
};

AnimationBaseNode.prototype.fillActivityParams = function()
{

var nDuration = 0.001;
if( this.getDuration().isValue() )
{
nDuration = this.getDuration().getValue();
}
else
{
log( 'AnimationBaseNode.fillActivityParams: duration is not a number' );
}

var aActivityParamSet = new ActivityParamSet();

aActivityParamSet.aEndEvent             = makeEvent( bind( this, this.deactivate ) );
aActivityParamSet.aTimerEventQueue      = this.aContext.aTimerEventQueue;
aActivityParamSet.aActivityQueue        = this.aContext.aActivityQueue;
aActivityParamSet.nMinDuration          = nDuration;
aActivityParamSet.nMinNumberOfFrames    = this.getMinFrameCount();
aActivityParamSet.bAutoReverse          = this.isAutoReverseEnabled();
aActivityParamSet.nRepeatCount          = this.getRepeatCount();
aActivityParamSet.nAccelerationFraction = this.getAccelerateValue();
aActivityParamSet.nDecelerationFraction = this.getDecelerateValue();
aActivityParamSet.nSlideWidth           = this.aNodeContext.aSlideWidth;
aActivityParamSet.nSlideHeight          = this.aNodeContext.aSlideHeight;

return aActivityParamSet;
};

AnimationBaseNode.prototype.hasPendingAnimation = function()
{
return true;
};

AnimationBaseNode.prototype.saveStateOfAnimatedElement = function()
{
this.getAnimatedElement().saveState( this.getId() );
};

                      return this.aContext;
};

BaseNode.prototype.isTransition = function( eFromState, eToState )
{
return ( ( this.aStateTransTable[ eFromState ] & eToState ) != 0 );
};

BaseNode.prototype.inStateOrTransition = function( nMask )
{
return ( ( ( this.eCurrentState & nMask ) != 0 ) || ( ( this.nCurrentStateTransition & nMask ) != 0 ) );
};

BaseNode.prototype.isContainer = function()
{
return this.bIsContainer;
};

BaseNode.prototype.getBegin = function()
{
return this.aBegin;
};

BaseNode.prototype.getDuration = function()
{
return this.aDuration;
};

BaseNode.prototype.getEnd = function()
{
return this.aEnd;
};

BaseNode.prototype.getFillMode = function()
{
return this.eFillMode;
};

BaseNode.prototype.getRestartMode = function()
{
return this.eRestartMode;
};

BaseNode.prototype.getRepeatCount = function()
{
return this.nRepeatCount;
};

BaseNode.prototype.getAccelerateValue = function()
{
return this.nAccelerate;
};

BaseNode.prototype.getDecelerateValue = function()
{
return this.nDecelerate;
};

BaseNode.prototype.isAutoReverseEnabled = function()
{
return this.bAutoreverse;
};

BaseNode.prototype.info = function( bVerbose )
{
var sInfo = 'class name: ' + this.sClassName;
sInfo += ';  element name: ' + this.aElement.localName;
sInfo += ';  id: ' + this.getId();
sInfo += ';  state: ' + getNodeStateName( this.getState() );

if( bVerbose )
{
sInfo += ';  is container: ' + this.isContainer();

if( this.getBegin() )
sInfo += ';  begin: ' + this.getBegin().info();

if( this.getDuration() )
sInfo += ';  dur: ' + this.getDuration().info();

if( this.getEnd() )
sInfo += ';  end: ' + this.getEnd().info();

if( this.getFillMode() )
sInfo += ';  fill: ' + aFillModeOutMap[ this.getFillMode() ];

if( this.getRestartMode() )
sInfo += ';  restart: ' + aRestartModeOutMap[ this.getRestartMode() ];

if( this.getRepeatCount() && ( this.getRepeatCount() != 1.0 ) )
sInfo += ';  repeatCount: ' + this.getRepeatCount();

if( this.getAccelerateValue() )
sInfo += ';  accelerate: ' + this.getAccelerateValue();

if( this.getDecelerateValue() )
sInfo += ';  decelerate: ' + this.getDecelerateValue();

if( this.isAutoReverseEnabled() )
sInfo += ';  autoReverse: true';

}

return sInfo;
};

BaseNode.prototype.callInfo = function( sMethodName )
{
var sInfo = this.sClassName +
'( ' + this.getId() +
', ' + getNodeStateName( this.getState() ) +
' ).' + sMethodName;
return sInfo;
};

BaseNode.prototype.DBG = function( sMessage, nTime )
{
ANIMDBG.print( sMessage, nTime );
};


function AnimationBaseNode( aAnimElem, aParentNode, aNodeContext )
{
AnimationBaseNode.superclass.constructor.call( this, aAnimElem, aParentNode, aNodeContext );

this.sClassName = 'AnimationBaseNode';
this.bIsContainer = false;
this.aTargetElement = null;
this.bIsTargetTextElement = false;
this.aAnimatedElement = null;
this.aActivity = null;

this.nMinFrameCount = undefined;
this.eAdditiveMode = undefined;

}
extend( AnimationBaseNode, BaseNode );


AnimationBaseNode.prototype.parseElement = function()
{
var bRet = AnimationBaseNode.superclass.parseElement.call( this );

var aAnimElem = this.aElement;

this.aTargetElement = null;
var sTargetElementAttr = aAnimElem.getAttributeNS( NSS['smil'], 'targetElement' );
if( sTargetElementAttr )
this.aTargetElement = document.getElementById( sTargetElementAttr );

                            this.end();
}
};

BaseNode.prototype.end = function()
{
var bIsFrozenOrInTransitionToFrozen = this.inStateOrTransition( FROZEN_NODE );
if( this.inStateOrTransition( ENDED_NODE ) || !this.checkValidNode() )
return;

if( !(this.isTransition( this.eCurrentState, ENDED_NODE ) ) )
log( 'BaseNode.end: end state not reachable in transition table' );

this.DBG( this.callInfo( 'end' ), getCurrentSystemTime() );

var aStateTrans = new StateTransition( this );
if( aStateTrans.enter( ENDED_NODE, true /* FORCE */ ) )
{
this.deactivate_st( ENDED_NODE );
aStateTrans.commit();

if( !bIsFrozenOrInTransitionToFrozen )
this.notifyEndListeners();

if( this.aActivationEvent )
this.aActivationEvent.dispose();
if( this.aDeactivationEvent )
this.aDeactivationEvent.dispose();
}
};

BaseNode.prototype.dispose = function()
{
if( this.aActivationEvent )
this.aActivationEvent.dispose();
if( this.aDeactivationEvent )
this.aDeactivationEvent.dispose();
this.aDeactivatingListenerArray = [];
};

BaseNode.prototype.getState = function()
{
return this.eCurrentState;
};

BaseNode.prototype.registerDeactivatingListener = function( aNotifiee )
{
if (! this.checkValidNode())
return false;

if( !aNotifiee )
{
log( 'BaseNode.registerDeactivatingListener(): invalid notifiee' );
return false;
}
this.aDeactivatingListenerArray.push( aNotifiee );

return true;
};

BaseNode.prototype.notifyDeactivating = function( aNotifier )
{
assert( ( aNotifier.getState() == FROZEN_NODE ) || ( aNotifier.getState() == ENDED_NODE ),
'BaseNode.notifyDeactivating: Notifier node is neither in FROZEN nor in ENDED state' );
};

BaseNode.prototype.isMainSequenceRootNode = function()
{
return this.bMainSequenceRootNode;
};

BaseNode.prototype.isInteractiveSequenceRootNode = function()
{
return this.bInteractiveSequenceRootNode;
};

BaseNode.prototype.makeDeactivationEvent = function( nDelay )
{
if( this.aDeactivationEvent )
{
this.aDeactivationEvent.charge();
}
else
{
if( typeof( nDelay ) == typeof(0) )
this.aDeactivationEvent = makeDelay( bind( this, this.deactivate ), nDelay );
else
this.aDeactivationEvent = null;
}
return this.aDeactivationEvent;
};

BaseNode.prototype.scheduleDeactivationEvent = function( aEvent )
{
this.DBG( this.callInfo( 'scheduleDeactivationEvent' ) );

if( !aEvent )
{
if( this.getDuration() && this.getDuration().isValue() )
aEvent = this.makeDeactivationEvent( this.getDuration().getValue() );
}
if( aEvent )
{
this.aContext.aTimerEventQueue.addEvent( aEvent );
}
};

BaseNode.prototype.checkValidNode = function()
{
return ( this.eCurrentState != INVALID_NODE );
};

BaseNode.prototype.init_st = function()
{
return true;
};

BaseNode.prototype.resolve_st = function()
{
return true;
};

BaseNode.prototype.activate_st = function()
{
this.scheduleDeactivationEvent();
};

BaseNode.prototype.deactivate_st = function( /*aNodeState*/ )
{
};

BaseNode.prototype.notifyEndListeners = function()
{
var nDeactivatingListenerCount = this.aDeactivatingListenerArray.length;

for( var i = 0; i < nDeactivatingListenerCount; ++i )
{
this.aDeactivatingListenerArray[i].notifyDeactivating( this );
}

this.aContext.aEventMultiplexer.notifyEvent( EVENT_TRIGGER_END_EVENT, this.getId() );
if( this.getParentNode() && this.getParentNode().isMainSequenceRootNode() )
this.aContext.aEventMultiplexer.notifyNextEffectEndEvent();

if( this.isMainSequenceRootNode() )
this.aContext.aEventMultiplexer.notifyAnimationsEndEvent();
};

BaseNode.prototype.getContext = function()
{
                               this.nAccelerate = 0.0;

this.nDecelerate = 0.0;
var sDecelerateAttr = aAnimElem.getAttributeNS( NSS['smil'], 'decelerate' );
if( sDecelerateAttr )
this.nDecelerate = parseFloat( sDecelerateAttr );
if( isNaN(this.nDecelerate) )
this.nDecelerate = 0.0;

this.bAutoreverse = false;
var sAutoReverseAttr = aAnimElem.getAttributeNS( NSS['smil'], 'autoReverse' );
if( sAutoReverseAttr == 'true' )
this.bAutoreverse = true;


if( this.eFillMode == FILL_MODE_DEFAULT )
if( this.getParentNode() )
this.eFillMode = this.getParentNode().getFillMode();
else
this.eFillMode = FILL_MODE_AUTO;

if( this.eFillMode ==  FILL_MODE_AUTO ) // see SMIL recommendation document
{
this.eFillMode = ( this.aEnd ||
( this.nRepeatCount != 1) ||
( this.aDuration && !this.aDuration.isIndefinite() ) )
? FILL_MODE_REMOVE
: FILL_MODE_FREEZE;
}

if( this.eRestartMode == RESTART_MODE_DEFAULT )
if( this.getParentNode() )
this.eRestartMode = this.getParentNode().getRestartMode();
else
this.eRestartMode = RESTART_MODE_ALWAYS;

if( ( this.nAccelerate + this.nDecelerate ) > 1.0 )
{
this.nAccelerate = 0.0;
this.nDecelerate = 0.0;
}

this.aStateTransTable = getTransitionTable( this.getRestartMode(), this.getFillMode() );

return true;
};

BaseNode.prototype.getParentNode = function()
{
return this.aParentNode;
};

BaseNode.prototype.init = function()
{
this.DBG( this.callInfo( 'init' ) );
if( ! this.checkValidNode() )
return false;
if( this.aActivationEvent )
this.aActivationEvent.dispose();
if( this.aDeactivationEvent )
this.aDeactivationEvent.dispose();

this.eCurrentState = UNRESOLVED_NODE;

return this.init_st();
};

BaseNode.prototype.resolve = function()
{
if( this.aNodeContext.bIsInvalid || ! this.checkValidNode() )
return false;

this.DBG( this.callInfo( 'resolve' ) );

if( this.eCurrentState == RESOLVED_NODE )
log( 'BaseNode.resolve: already in RESOLVED state' );

var aStateTrans = new StateTransition( this );

if( aStateTrans.enter( RESOLVED_NODE ) &&
this.isTransition( RESOLVED_NODE, ACTIVE_NODE ) &&
this.resolve_st() )
{
aStateTrans.commit();

if( this.aActivationEvent )
{
this.aActivationEvent.charge();
}
else
{
this.aActivationEvent = makeDelay( bind( this, this.activate ), this.getBegin().getOffset() + this.nStartDelay );
}
registerEvent( this.getId(), this.getBegin(), this.aActivationEvent, this.aNodeContext );

return true;
}

return false;
};

BaseNode.prototype.activate = function()
{
if( ! this.checkValidNode() )
return false;

if( this.eCurrentState == ACTIVE_NODE )
log( 'BaseNode.activate: already in ACTIVE state' );

this.DBG( this.callInfo( 'activate' ), getCurrentSystemTime() );

var aStateTrans = new StateTransition( this );

if( aStateTrans.enter( ACTIVE_NODE ) )
{
this.activate_st();
aStateTrans.commit();
if( !this.aContext.aEventMultiplexer )
log( 'BaseNode.activate: this.aContext.aEventMultiplexer is not valid' );
this.aContext.aEventMultiplexer.notifyEvent( EVENT_TRIGGER_BEGIN_EVENT, this.getId() );
return true;
}
return false;
};

BaseNode.prototype.deactivate = function()
{
if( this.inStateOrTransition( ENDED_NODE | FROZEN_NODE ) || !this.checkValidNode() )
return;

if( this.isTransition( this.eCurrentState, FROZEN_NODE ) )
{
this.DBG( this.callInfo( 'deactivate' ), getCurrentSystemTime() );

var aStateTrans = new StateTransition( this );
if( aStateTrans.enter( FROZEN_NODE, true /* FORCE */ ) )
{
this.deactivate_st( FROZEN_NODE );
aStateTrans.commit();

this.notifyEndListeners();

if( this.aActivationEvent )
this.aActivationEvent.dispose();
if( this.aDeactivationEvent )
this.aDeactivationEvent.dispose();
}
}
else
{
                   function StateTransition( aBaseNode )
{
this.aNode = aBaseNode;
this.eToState = INVALID_NODE;
}

StateTransition.prototype.enter = function( eNodeState, bForce )
{
if( !bForce ) bForce = false;

if( this.eToState != INVALID_NODE )
{
log( 'StateTransition.enter: commit() before enter()ing again!' );
return false;
}
if( !bForce && !this.aNode.isTransition( this.aNode.getState(), eNodeState  ) )
return false;

if( ( this.aNode.nCurrentStateTransition & eNodeState ) != 0 )
return false; // already in wanted transition

this.aNode.nCurrentStateTransition |= eNodeState;
this.eToState = eNodeState;
return true;
};

StateTransition.prototype.commit = function()
{
if( this.eToState != INVALID_NODE )
{
this.aNode.eCurrentState = this.eToState;
this.clear();
}
};

StateTransition.prototype.clear = function()
{
if( this.eToState != INVALID_NODE )
{
this.aNode.nCurrentStateTransition &= ~this.eToState;
this.eToState = INVALID_NODE;
}
};


function BaseNode( aAnimElem, aParentNode, aNodeContext )
{
this.nId = getUniqueId();
this.sClassName = 'BaseNode';

if( !aAnimElem )
log( 'BaseNode(id:' + this.nId + ') constructor: aAnimElem is not valid' );

if( !aNodeContext )
log( 'BaseNode(id:' + this.nId + ') constructor: aNodeContext is not valid' );

if( !aNodeContext.aContext )
log( 'BaseNode(id:' + this.nId + ') constructor: aNodeContext.aContext is not valid' );


this.bIsContainer = false;
this.aElement = aAnimElem;
this.aParentNode = aParentNode;
this.aNodeContext = aNodeContext;
this.aContext = aNodeContext.aContext;
this.nStartDelay = aNodeContext.nStartDelay;
this.eCurrentState = UNRESOLVED_NODE;
this.nCurrentStateTransition = 0;
this.aDeactivatingListenerArray = [];
this.aActivationEvent = null;
this.aDeactivationEvent = null;

this.aBegin = null;
this.aDuration = null;
this.aEnd = null;
this.bMainSequenceRootNode = false;
this.bInteractiveSequenceRootNode = false;
this.eFillMode = FILL_MODE_FREEZE;
this.eRestartMode = RESTART_MODE_NEVER;
this.nRepeatCount = undefined;
this.nAccelerate = 0.0;
this.nDecelerate = 0.0;
this.bAutoReverse = false;

}
extend( BaseNode, AnimationNode );


BaseNode.prototype.getId = function()
{
return this.nId;
};

BaseNode.prototype.parseElement = function()
{
var aAnimElem = this.aElement;

var sIdAttr = aAnimElem.getAttributeNS( NSS['xml'], 'id' );
if( sIdAttr )
this.aNodeContext.aAnimationNodeMap[ sIdAttr ] = this;

this.aBegin = null;
var sBeginAttr = aAnimElem.getAttributeNS( NSS['smil'], 'begin' );
this.aBegin = new Timing( this, sBeginAttr );
this.aBegin.parse();

this.aEnd = null;
var sEndAttr = aAnimElem.getAttributeNS( NSS['smil'], 'end' );
if( sEndAttr )
{
this.aEnd = new Timing( this, sEndAttr );
this.aEnd.parse();
}

this.aDuration = null;
var sDurAttr = aAnimElem.getAttributeNS( NSS['smil'], 'dur' );
this.aDuration = new Duration( sDurAttr );
if( !this.aDuration.isSet() )
{
if( this.isContainer() )
this.aDuration = null;
else
this.aDuration = new Duration( 'indefinite' );
}

var sFillAttr = aAnimElem.getAttributeNS( NSS['smil'], 'fill' );
if( sFillAttr && aFillModeInMap[ sFillAttr ])
this.eFillMode = aFillModeInMap[ sFillAttr ];
else
this.eFillMode = FILL_MODE_DEFAULT;

var sRestartAttr = aAnimElem.getAttributeNS( NSS['smil'], 'restart' );
if( sRestartAttr && aRestartModeInMap[ sRestartAttr ] )
this.eRestartMode = aRestartModeInMap[ sRestartAttr ];
else
this.eRestartMode = RESTART_MODE_DEFAULT;

var sRepeatCount = aAnimElem.getAttributeNS( NSS['smil'], 'repeatCount' );
if( !sRepeatCount )
this.nRepeatCount = 1;
else
this.nRepeatCount = parseFloat( sRepeatCount );
if( ( isNaN(this.nRepeatCount) ) && ( sRepeatCount != 'indefinite' ) )
this.nRepeatCount = 1;

this.nAccelerate = 0.0;
var sAccelerateAttr = aAnimElem.getAttributeNS( NSS['smil'], 'accelerate' );
if( sAccelerateAttr )
this.nAccelerate = parseFloat( sAccelerateAttr );
if( isNaN(this.nAccelerate) )
               {
sInfo = 'description: ' + this.sTimingDescription + ', ';

sInfo += ', type: ' +  aTimingTypeOutMap[ this.getType() ];
sInfo += ', offset: ' + this.getOffset();
sInfo += ', event base element id: ' + this.getEventBaseElementId();
sInfo += ', timing event type: ' + aEventTriggerOutMap[ this.getEventType() ];
}
else
{
switch( this.getType() )
{
case INDEFINITE_TIMING:
sInfo += 'indefinite';
break;
case OFFSET_TIMING:
sInfo += this.getOffset();
break;
case EVENT_TIMING:
case SYNCBASE_TIMING:
if( this.getEventBaseElementId() )
sInfo += this.getEventBaseElementId() + '.';
sInfo += aEventTriggerOutMap[ this.getEventType() ];
if( this.getOffset() )
{
if( this.getOffset() > 0 )
sInfo += '+';
sInfo += this.getOffset();
}
}
}

return sInfo;
};


function Duration( sDurationAttribute )
{
this.bIndefinite = false;
this.bMedia = false;
this.nValue = undefined;
this.bDefined = false;

if( !sDurationAttribute )
return;

if( sDurationAttribute == 'indefinite' )
this.bIndefinite = true;
else if( sDurationAttribute == 'media' )
this.bMedia = true;
else
{
this.nValue = Timing.parseClockValue( sDurationAttribute );
if( this.nValue <= 0.0 )
this.nValue = 0.001;  // duration must be always greater than 0
}
this.bDefined = true;
}


Duration.prototype.isSet = function()
{
return this.bDefined;
};

Duration.prototype.isIndefinite = function()
{
return this.bIndefinite;
};

Duration.prototype.isMedia = function()
{
return this.bMedia;
};

Duration.prototype.isValue = function()
{
return this.nValue != undefined;
};

Duration.prototype.getValue= function()
{
return this.nValue;
};

Duration.prototype.info= function()
{
var sInfo;

if( this.isIndefinite() )
sInfo = 'indefinite';
else if( this.isMedia() )
sInfo = 'media';
else if( this.getValue() )
sInfo = this.getValue();

return sInfo;
};


function AnimationNode()
{
}

AnimationNode.prototype.init = function() {};
AnimationNode.prototype.resolve = function() {};
AnimationNode.prototype.activate = function() {};
AnimationNode.prototype.deactivate = function() {};
AnimationNode.prototype.end = function() {};
AnimationNode.prototype.getState = function() {};
AnimationNode.prototype.registerDeactivatingListener = function() {};
AnimationNode.prototype.notifyDeactivating = function() {};


function NodeContext( aSlideShowContext )
{
this.aContext = aSlideShowContext;
this.aAnimationNodeMap = null;
this.aAnimatedElementMap = null;
this.aSourceEventElementMap = null;
this.nStartDelay = 0.0;
this.bFirstRun = undefined;
this.bIsInvalid = false;
this.aSlideHeight = HEIGHT;
this.aSlideWidth = WIDTH;
}


NodeContext.prototype.makeSourceEventElement = function( sId, aEventBaseElem )
{
if( !aEventBaseElem )
{
log( 'NodeContext.makeSourceEventElement: event base element is not valid' );
return null;
}

if( !this.aContext.aEventMultiplexer )
{
log( 'NodeContext.makeSourceEventElement: event multiplexer not initialized' );
return null;
}

if( !this.aSourceEventElementMap[ sId ] )
{
this.aSourceEventElementMap[ sId ] = new SourceEventElement( sId, aEventBaseElem, this.aContext.aEventMultiplexer );
}
return this.aSourceEventElementMap[ sId ];
};


                       
var TimeInSec = Timing.parseClockValue( sClockValue );
if( TimeInSec != undefined )
{
this.eTimingType = OFFSET_TIMING;
this.nOffset = bPositiveOffset ? TimeInSec : -TimeInSec;
}
}
else
{
var aTimingSplit = [];
bPositiveOffset = true;
if( this.sTimingDescription.indexOf( '+' ) != -1 )
{
aTimingSplit = this.sTimingDescription.split( '+' );
}
else if( this.sTimingDescription.indexOf( '-' ) != -1 )
{
aTimingSplit = this.sTimingDescription.split( '-' );
bPositiveOffset = false;
}
else
{
aTimingSplit[0] = this.sTimingDescription;
aTimingSplit[1] = '';
}

if( aTimingSplit[0].indexOf( '.' ) != -1 )
{
var aEventSplit = aTimingSplit[0].split( '.' );
this.sEventBaseElementId = aEventSplit[0];
this.eEventType = getEventTriggerType( aEventSplit[1] );
}
else
{
this.eEventType = getEventTriggerType( aTimingSplit[0] );
}

if( this.eEventType == EVENT_TRIGGER_UNKNOWN )
return;

if( ( this.eEventType == EVENT_TRIGGER_BEGIN_EVENT ) ||
( this.eEventType == EVENT_TRIGGER_END_EVENT ) )
{
this.eTimingType = SYNCBASE_TIMING;
}
else
{
this.eTimingType = EVENT_TIMING;
}

if( aTimingSplit[1] )
{
sClockValue = aTimingSplit[1];
TimeInSec = Timing.parseClockValue( sClockValue );
if( TimeInSec != undefined )
{
this.nOffset = ( bPositiveOffset ) ? TimeInSec : -TimeInSec;
}
else
{
this.eTimingType = UNKNOWN_TIMING;
}

}
}
}

};

Timing.parseClockValue = function( sClockValue )
{
if( !sClockValue )
return 0.0;

var nTimeInSec = undefined;

var reFullClockValue = /^([0-9]+):([0-5][0-9]):([0-5][0-9])(.[0-9]+)?$/;
var rePartialClockValue = /^([0-5][0-9]):([0-5][0-9])(.[0-9]+)?$/;
var reTimeCountValue = /^([0-9]+)(.[0-9]+)?(h|min|s|ms)?$/;

if( reFullClockValue.test( sClockValue ) )
{
var aClockTimeParts = reFullClockValue.exec( sClockValue );

var nHours = parseInt( aClockTimeParts[1] );
var nMinutes = parseInt( aClockTimeParts[2] );
var nSeconds = parseInt( aClockTimeParts[3] );
if( aClockTimeParts[4] )
nSeconds += parseFloat( aClockTimeParts[4] );

nTimeInSec = ( ( nHours * 60 ) +  nMinutes ) * 60 + nSeconds;

}
else if( rePartialClockValue.test( sClockValue ) )
{
aClockTimeParts = rePartialClockValue.exec( sClockValue );

nMinutes = parseInt( aClockTimeParts[1] );
nSeconds = parseInt( aClockTimeParts[2] );
if( aClockTimeParts[3] )
nSeconds += parseFloat( aClockTimeParts[3] );

nTimeInSec = nMinutes * 60 + nSeconds;
}
else if( reTimeCountValue.test( sClockValue ) )
{
aClockTimeParts = reTimeCountValue.exec( sClockValue );

var nTimeCount = parseInt( aClockTimeParts[1] );
if( aClockTimeParts[2] )
nTimeCount += parseFloat( aClockTimeParts[2] );

if( aClockTimeParts[3] )
{
if( aClockTimeParts[3] == 'h' )
{
nTimeInSec = nTimeCount * 3600;
}
else if( aClockTimeParts[3] == 'min' )
{
nTimeInSec = nTimeCount * 60;
}
else if( aClockTimeParts[3] == 's' )
{
nTimeInSec = nTimeCount;
}
else if( aClockTimeParts[3] == 'ms' )
{
nTimeInSec = nTimeCount / 1000;
}
}
else
{
nTimeInSec = nTimeCount;
}

}

if( nTimeInSec )
nTimeInSec = parseFloat( nTimeInSec.toFixed( 3 ) );
return nTimeInSec;
};

Timing.prototype.info = function( bVerbose )
{

var sInfo = '';

if( bVerbose )
                           aTable[UNRESOLVED_NODE]     = RESOLVED_NODE | ENDED_NODE;
aTable[RESOLVED_NODE]       = ACTIVE_NODE | ENDED_NODE;
aTable[ACTIVE_NODE]         = RESOLVED_NODE | ACTIVE_NODE | ENDED_NODE;  // restart is possible
aTable[FROZEN_NODE]         = INVALID_NODE;  // this state is unreachable here
aTable[ENDED_NODE]          = RESOLVED_NODE | ACTIVE_NODE | ENDED_NODE;  // restart is possible

aTable =
aSTT[RESTART_MODE_ALWAYS][FILL_MODE_FREEZE] =
aSTT[RESTART_MODE_ALWAYS][FILL_MODE_HOLD] =
aSTT[RESTART_MODE_ALWAYS][FILL_MODE_TRANSITION] = {};
aTable[INVALID_NODE]        = INVALID_NODE;
aTable[UNRESOLVED_NODE]     = RESOLVED_NODE | ENDED_NODE;
aTable[RESOLVED_NODE]       = ACTIVE_NODE | ENDED_NODE;
aTable[ACTIVE_NODE]         = RESOLVED_NODE | ACTIVE_NODE | FROZEN_NODE | ENDED_NODE;
aTable[FROZEN_NODE]         = RESOLVED_NODE | ACTIVE_NODE | ENDED_NODE;  // restart is possible
aTable[ENDED_NODE]          = RESOLVED_NODE | ACTIVE_NODE | ENDED_NODE;  // restart is possible

return aSTT;
}

var aStateTransitionTable = createStateTransitionTable();


function getTransitionTable( eRestartMode, eFillMode )
{
if( eRestartMode == RESTART_MODE_DEFAULT )
{
log( 'getTransitionTable: unexpected restart mode: ' + eRestartMode
+ '. Used NEVER instead.');
eRestartMode = RESTART_MODE_NEVER;
}

if( eFillMode == FILL_MODE_DEFAULT ||
eFillMode == FILL_MODE_AUTO )
{
eFillMode = FILL_MODE_REMOVE;
}

return aStateTransitionTable[eRestartMode][eFillMode];
}


var EVENT_TRIGGER_UNKNOWN               = 0;
var EVENT_TRIGGER_ON_SLIDE_BEGIN        = 1; // eslint-disable-line no-unused-vars
var EVENT_TRIGGER_ON_SLIDE_END          = 2; // eslint-disable-line no-unused-vars
var EVENT_TRIGGER_BEGIN_EVENT           = 3;
var EVENT_TRIGGER_END_EVENT             = 4;
var EVENT_TRIGGER_ON_CLICK              = 5;
var EVENT_TRIGGER_ON_DBL_CLICK          = 6; // eslint-disable-line no-unused-vars
var EVENT_TRIGGER_ON_MOUSE_ENTER        = 7; // eslint-disable-line no-unused-vars
var EVENT_TRIGGER_ON_MOUSE_LEAVE        = 8; // eslint-disable-line no-unused-vars
var EVENT_TRIGGER_ON_NEXT_EFFECT        = 9;
var EVENT_TRIGGER_ON_PREV_EFFECT        = 10;
var EVENT_TRIGGER_REPEAT                = 11; // eslint-disable-line no-unused-vars

var aEventTriggerOutMap = [ 'unknown', 'slideBegin', 'slideEnd', 'begin', 'end', 'click',
'doubleClick', 'mouseEnter', 'mouseLeave', 'next', 'previous', 'repeat' ];


function getEventTriggerType( sEventTrigger )
{
if( sEventTrigger == 'begin' )
return EVENT_TRIGGER_BEGIN_EVENT;
else if( sEventTrigger == 'end' )
return EVENT_TRIGGER_END_EVENT;
else if( sEventTrigger == 'next' )
return EVENT_TRIGGER_ON_NEXT_EFFECT;
else if( sEventTrigger == 'prev' )
return EVENT_TRIGGER_ON_PREV_EFFECT;
else if( sEventTrigger == 'click' )
return EVENT_TRIGGER_ON_CLICK;
else
return EVENT_TRIGGER_UNKNOWN;
}


var UNKNOWN_TIMING          = 0;
var OFFSET_TIMING           = 1;
var WALLCLOCK_TIMING        = 2; // eslint-disable-line no-unused-vars
var INDEFINITE_TIMING       = 3;
var EVENT_TIMING            = 4;
var SYNCBASE_TIMING         = 5;
var MEDIA_TIMING            = 6; // eslint-disable-line no-unused-vars

var aTimingTypeOutMap = [ 'unknown', 'offset', 'wallclock', 'indefinite', 'event', 'syncbase', 'media' ];


var CHARCODE_PLUS       = '+'.charCodeAt(0);
var CHARCODE_MINUS      = '-'.charCodeAt(0);
var CHARCODE_0          = '0'.charCodeAt(0);
var CHARCODE_9          = '9'.charCodeAt(0);


function Timing( aAnimationNode, sTimingAttribute )
{
this.aAnimationNode = aAnimationNode;     // the node, the timing attribute belongs to
this.sTimingDescription = removeWhiteSpaces( sTimingAttribute );
this.eTimingType = UNKNOWN_TIMING;
this.nOffset = 0.0;                       // in seconds
this.sEventBaseElementId = '';            // the element id for event based timing
this.eEventType = EVENT_TRIGGER_UNKNOWN;  // the event type
}

Timing.prototype.getAnimationNode = function()
{
return this.aAnimationNode;
};

Timing.prototype.getType = function()
{
return this.eTimingType;
};

Timing.prototype.getOffset = function()
{
return this.nOffset;
};

Timing.prototype.getEventBaseElementId = function()
{
return this.sEventBaseElementId;
};

Timing.prototype.getEventType = function()
{
return this.eEventType;
};

Timing.prototype.parse = function()
{
if( !this.sTimingDescription )
{
this.eTimingType = OFFSET_TIMING;
return;
}

if( this.sTimingDescription == 'indefinite' )
this.eTimingType = INDEFINITE_TIMING;
else
{
var nFirstCharCode = this.sTimingDescription.charCodeAt(0);
var bPositiveOffset = !( nFirstCharCode == CHARCODE_MINUS );
if ( ( nFirstCharCode == CHARCODE_PLUS ) ||
( nFirstCharCode == CHARCODE_MINUS ) ||
( ( nFirstCharCode >= CHARCODE_0 ) && ( nFirstCharCode <= CHARCODE_9 ) ) )
{
var sClockValue
= ( ( nFirstCharCode == CHARCODE_PLUS ) || ( nFirstCharCode == CHARCODE_MINUS ) )
? this.sTimingDescription.substr( 1 )
: this.sTimingDescription;
     aTransitionInfoTable[SINGLESWEEPWIPE_TRANSITION][COUNTERCLOCKWISETOPRIGHT_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle' : 0.0,
'scaleX' : 1.0,
'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_SUBTRACT_AND_INVERT,
'outInvertsSweep' : true,
'scaleIsotropically' : false
};

aTransitionInfoTable[SLIDEWIPE_TRANSITION] = {};
aTransitionInfoTable[SLIDEWIPE_TRANSITION][FROMLEFT_TRANS_SUBTYPE] =
aTransitionInfoTable[SLIDEWIPE_TRANSITION][FROMTOP_TRANS_SUBTYPE] =
aTransitionInfoTable[SLIDEWIPE_TRANSITION][FROMRIGHT_TRANS_SUBTYPE] =
aTransitionInfoTable[SLIDEWIPE_TRANSITION][FROMBOTTOM_TRANS_SUBTYPE] =
{
'class' : TRANSITION_SPECIAL,
'rotationAngle' : 0.0,
'scaleX' : 1.0,
'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_IGNORE,
'outInvertsSweep' : true,
'scaleIsotropically' : false
};

aTransitionInfoTable[FADE_TRANSITION] = {};
aTransitionInfoTable[FADE_TRANSITION][CROSSFADE_TRANS_SUBTYPE] =
aTransitionInfoTable[FADE_TRANSITION][FADETOCOLOR_TRANS_SUBTYPE] =
aTransitionInfoTable[FADE_TRANSITION][FADEFROMCOLOR_TRANS_SUBTYPE] =
aTransitionInfoTable[FADE_TRANSITION][FADEOVERCOLOR_TRANS_SUBTYPE] =
{
'class' : TRANSITION_SPECIAL,
'rotationAngle' : 0.0,
'scaleX' : 1.0,
'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_IGNORE,
'outInvertsSweep' : true,
'scaleIsotropically' : false
};


aTransitionInfoTable[RANDOMBARWIPE_TRANSITION] = {};
aTransitionInfoTable[RANDOMBARWIPE_TRANSITION][VERTICAL_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle' : 90.0,
'scaleX' : 1.0,
'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_IGNORE,
'outInvertsSweep' : true,
'scaleIsotropically' : false
};
aTransitionInfoTable[RANDOMBARWIPE_TRANSITION][HORIZONTAL_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle' : 0.0,
'scaleX' : 1.0,
'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_IGNORE,
'outInvertsSweep' : true,
'scaleIsotropically' : false
};

aTransitionInfoTable[CHECKERBOARDWIPE_TRANSITION] = {};
aTransitionInfoTable[CHECKERBOARDWIPE_TRANSITION][DOWN_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle' : 90.0,
'scaleX' : 1.0,
'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_FLIP_Y,
'outInvertsSweep' : true,
'scaleIsotropically' : false
};
aTransitionInfoTable[CHECKERBOARDWIPE_TRANSITION][ACROSS_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle' : 0.0,
'scaleX' : 1.0,
'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_FLIP_X,
'outInvertsSweep' : true,
'scaleIsotropically' : false
};

aTransitionInfoTable[DISSOLVE_TRANSITION] = {};
aTransitionInfoTable[DISSOLVE_TRANSITION][DEFAULT_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle' : 0.0,
'scaleX' : 1.0,
'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_IGNORE,
'outInvertsSweep' : true,
'scaleIsotropically' : true
};


function createStateTransitionTable()
{
var aSTT = {};

aSTT[RESTART_MODE_NEVER] = {};
aSTT[RESTART_MODE_WHEN_NOT_ACTIVE] = {};
aSTT[RESTART_MODE_ALWAYS] = {};

var aTable =
aSTT[RESTART_MODE_NEVER][FILL_MODE_REMOVE] = {};
aTable[INVALID_NODE]        = INVALID_NODE;
aTable[UNRESOLVED_NODE]     = RESOLVED_NODE | ENDED_NODE;
aTable[RESOLVED_NODE]       = ACTIVE_NODE | ENDED_NODE;
aTable[ACTIVE_NODE]         = ENDED_NODE;
aTable[FROZEN_NODE]         = INVALID_NODE;  // this state is unreachable here
aTable[ENDED_NODE]          = ENDED_NODE;    // this state is a sink here (cannot restart)

aTable =
aSTT[RESTART_MODE_NEVER][FILL_MODE_FREEZE] =
aSTT[RESTART_MODE_NEVER][FILL_MODE_HOLD] =
aSTT[RESTART_MODE_NEVER][FILL_MODE_TRANSITION] = {};
aTable[INVALID_NODE]        = INVALID_NODE;
aTable[UNRESOLVED_NODE]     = RESOLVED_NODE | ENDED_NODE;
aTable[RESOLVED_NODE]       = ACTIVE_NODE | ENDED_NODE;
aTable[ACTIVE_NODE]         = FROZEN_NODE | ENDED_NODE;
aTable[FROZEN_NODE]         = ENDED_NODE;
aTable[ENDED_NODE]          = ENDED_NODE;   // this state is a sink here (cannot restart)

aTable =
aSTT[RESTART_MODE_WHEN_NOT_ACTIVE][FILL_MODE_REMOVE] = {};
aTable[INVALID_NODE]        = INVALID_NODE;
aTable[UNRESOLVED_NODE]     = RESOLVED_NODE | ENDED_NODE;
aTable[RESOLVED_NODE]       = ACTIVE_NODE | ENDED_NODE;
aTable[ACTIVE_NODE]         = ENDED_NODE;
aTable[FROZEN_NODE]         = INVALID_NODE;  // this state is unreachable here
aTable[ENDED_NODE]          = RESOLVED_NODE | ACTIVE_NODE | ENDED_NODE;  // restart is possible

aTable =
aSTT[RESTART_MODE_WHEN_NOT_ACTIVE][FILL_MODE_FREEZE] =
aSTT[RESTART_MODE_WHEN_NOT_ACTIVE][FILL_MODE_HOLD] =
aSTT[RESTART_MODE_WHEN_NOT_ACTIVE][FILL_MODE_TRANSITION] = {};
aTable[INVALID_NODE]        = INVALID_NODE;
aTable[UNRESOLVED_NODE]     = RESOLVED_NODE | ENDED_NODE;
aTable[RESOLVED_NODE]       = ACTIVE_NODE | ENDED_NODE;
aTable[ACTIVE_NODE]         = FROZEN_NODE | ENDED_NODE;
aTable[FROZEN_NODE]         = RESOLVED_NODE | ACTIVE_NODE | ENDED_NODE;  // restart is possible
aTable[ENDED_NODE]          = RESOLVED_NODE | ACTIVE_NODE | ENDED_NODE;  // restart is possible

aTable =
aSTT[RESTART_MODE_ALWAYS][FILL_MODE_REMOVE] = {};
aTable[INVALID_NODE]        = INVALID_NODE;
                         'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_FLIP_Y,
'outInvertsSweep' : true,
'scaleIsotropically' : false
};
aTransitionInfoTable[FANWIPE_TRANSITION][RIGHT_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle' : -90.0,
'scaleX' : 1.0,
'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_FLIP_X,
'outInvertsSweep' : true,
'scaleIsotropically' : false
};
aTransitionInfoTable[FANWIPE_TRANSITION][BOTTOM_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle' : 180.0,
'scaleX' : 1.0,
'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_FLIP_Y,
'outInvertsSweep' : true,
'scaleIsotropically' : false
};
aTransitionInfoTable[FANWIPE_TRANSITION][LEFT_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle' : 90.0,
'scaleX' : 1.0,
'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_FLIP_X,
'outInvertsSweep' : true,
'scaleIsotropically' : false
};


aTransitionInfoTable[PINWHEELWIPE_TRANSITION] = {};
aTransitionInfoTable[PINWHEELWIPE_TRANSITION][ONEBLADE_TRANS_SUBTYPE] =
aTransitionInfoTable[PINWHEELWIPE_TRANSITION][TWOBLADEVERTICAL_TRANS_SUBTYPE] =
aTransitionInfoTable[PINWHEELWIPE_TRANSITION][THREEBLADE_TRANS_SUBTYPE] =
aTransitionInfoTable[PINWHEELWIPE_TRANSITION][FOURBLADE_TRANS_SUBTYPE] =
aTransitionInfoTable[PINWHEELWIPE_TRANSITION][EIGHTBLADE_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle' : 0.0,
'scaleX' : 1.0,
'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_FLIP_X,
'outInvertsSweep' : true,
'scaleIsotropically' : true
};
aTransitionInfoTable[PINWHEELWIPE_TRANSITION][TWOBLADEHORIZONTAL_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle' : -90.0,
'scaleX' : 1.0,
'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_FLIP_Y,
'outInvertsSweep' : true,
'scaleIsotropically' : true
};

aTransitionInfoTable[PUSHWIPE_TRANSITION] = {};
aTransitionInfoTable[PUSHWIPE_TRANSITION][FROMLEFT_TRANS_SUBTYPE] =
aTransitionInfoTable[PUSHWIPE_TRANSITION][FROMTOP_TRANS_SUBTYPE] =
aTransitionInfoTable[PUSHWIPE_TRANSITION][FROMRIGHT_TRANS_SUBTYPE] =
aTransitionInfoTable[PUSHWIPE_TRANSITION][FROMBOTTOM_TRANS_SUBTYPE] =
{
'class' : TRANSITION_SPECIAL,
'rotationAngle' : 0.0,
'scaleX' : 1.0,
'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_IGNORE,
'outInvertsSweep' : true,
'scaleIsotropically' : false
};


aTransitionInfoTable[SINGLESWEEPWIPE_TRANSITION] = {};
aTransitionInfoTable[SINGLESWEEPWIPE_TRANSITION][CLOCKWISETOP_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle' : 0.0,
'scaleX' : 1.0,
'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_SUBTRACT_AND_INVERT,
'outInvertsSweep' : true,
'scaleIsotropically' : false
};
aTransitionInfoTable[SINGLESWEEPWIPE_TRANSITION][CLOCKWISERIGHT_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle' : 90.0,
'scaleX' : 1.0,
'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_SUBTRACT_AND_INVERT,
'outInvertsSweep' : true,
'scaleIsotropically' : false
};
aTransitionInfoTable[SINGLESWEEPWIPE_TRANSITION][CLOCKWISEBOTTOM_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle' : 180.0,
'scaleX' : 1.0,
'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_SUBTRACT_AND_INVERT,
'outInvertsSweep' : true,
'scaleIsotropically' : false
};
aTransitionInfoTable[SINGLESWEEPWIPE_TRANSITION][CLOCKWISELEFT_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle' : 270.0,
'scaleX' : 1.0,
'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_SUBTRACT_AND_INVERT,
'outInvertsSweep' : true,
'scaleIsotropically' : false
};
aTransitionInfoTable[SINGLESWEEPWIPE_TRANSITION][CLOCKWISETOPLEFT_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle' : 0.0,
'scaleX' : 1.0,
'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_SUBTRACT_AND_INVERT,
'outInvertsSweep' : true,
'scaleIsotropically' : false
};
aTransitionInfoTable[SINGLESWEEPWIPE_TRANSITION][COUNTERCLOCKWISEBOTTOMLEFT_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle' : 180.0,
'scaleX' : 1.0,
'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_SUBTRACT_AND_INVERT,
'outInvertsSweep' : true,
'scaleIsotropically' : false
};
aTransitionInfoTable[SINGLESWEEPWIPE_TRANSITION][CLOCKWISEBOTTOMRIGHT_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle' : 180.0,
'scaleX' : 1.0,
'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_SUBTRACT_AND_INVERT,
'outInvertsSweep' : true,
'scaleIsotropically' : false
};
                  'rotationAngle' : 0.0,
'scaleX' : 1.0,
'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_SUBTRACT_AND_INVERT,
'outInvertsSweep' : true,
'scaleIsotropically' : false
};

aTransitionInfoTable[ELLIPSEWIPE_TRANSITION] = {};
aTransitionInfoTable[ELLIPSEWIPE_TRANSITION][CIRCLE_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle' : 0.0,
'scaleX' : 1.0,
'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_SUBTRACT_AND_INVERT,
'outInvertsSweep' : true,
'scaleIsotropically' : true
};
aTransitionInfoTable[ELLIPSEWIPE_TRANSITION][HORIZONTAL_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle' : 0.0,
'scaleX' : 1.0,
'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_SUBTRACT_AND_INVERT,
'outInvertsSweep' : true,
'scaleIsotropically' : false
};
aTransitionInfoTable[ELLIPSEWIPE_TRANSITION][VERTICAL_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle' : 90.0,
'scaleX' : 1.0,
'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_SUBTRACT_AND_INVERT,
'outInvertsSweep' : true,
'scaleIsotropically' : false
};

aTransitionInfoTable[CLOCKWIPE_TRANSITION] = {};
aTransitionInfoTable[CLOCKWIPE_TRANSITION][CLOCKWISETWELVE_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle' : 0.0,
'scaleX' : 1.0,
'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_FLIP_X,
'outInvertsSweep' : true,
'scaleIsotropically' : false
};
aTransitionInfoTable[CLOCKWIPE_TRANSITION][CLOCKWISETHREE_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle' : 90.0,
'scaleX' : 1.0,
'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_FLIP_Y,
'outInvertsSweep' : true,
'scaleIsotropically' : false
};
aTransitionInfoTable[CLOCKWIPE_TRANSITION][CLOCKWISESIX_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle' : 180.0,
'scaleX' : 1.0,
'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_FLIP_X,
'outInvertsSweep' : true,
'scaleIsotropically' : false
};
aTransitionInfoTable[CLOCKWIPE_TRANSITION][CLOCKWISENINE_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle' : 270.0,
'scaleX' : 1.0,
'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_FLIP_Y,
'outInvertsSweep' : true,
'scaleIsotropically' : false
};

aTransitionInfoTable[VEEWIPE_TRANSITION] = {};
aTransitionInfoTable[VEEWIPE_TRANSITION][DOWN_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle' : 0.0,
'scaleX' : 1.0,
'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_FLIP_Y,
'outInvertsSweep' : true,
'scaleIsotropically' : false
};
aTransitionInfoTable[VEEWIPE_TRANSITION][LEFT_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle' : 90.0,
'scaleX' : 1.0,
'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_FLIP_X,
'outInvertsSweep' : true,
'scaleIsotropically' : false
};
aTransitionInfoTable[VEEWIPE_TRANSITION][UP_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle' : 180.0,
'scaleX' : 1.0,
'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_FLIP_Y,
'outInvertsSweep' : true,
'scaleIsotropically' : false
};
aTransitionInfoTable[VEEWIPE_TRANSITION][RIGHT_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle' : -90.0,
'scaleX' : 1.0,
'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_FLIP_X,
'outInvertsSweep' : true,
'scaleIsotropically' : false
};

aTransitionInfoTable[FANWIPE_TRANSITION] = {};
aTransitionInfoTable[FANWIPE_TRANSITION][CENTERTOP_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle' : 0.0,
'scaleX' : 1.0,
'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_FLIP_Y,
'outInvertsSweep' : true,
'scaleIsotropically' : false
};
aTransitionInfoTable[FANWIPE_TRANSITION][CENTERRIGHT_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle' : 90.0,
'scaleX' : 1.0,
'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_FLIP_X,
'outInvertsSweep' : true,
'scaleIsotropically' : false
};
aTransitionInfoTable[FANWIPE_TRANSITION][TOP_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle' : 180.0,
'scaleX' : 1.0,
                    aTransitionInfoTable[BARWIPE_TRANSITION][LEFTTORIGHT_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle' : 0.0,
'scaleX' : 1.0,
'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_FLIP_X,
'outInvertsSweep' : false,
'scaleIsotropically' : false
};
aTransitionInfoTable[BARWIPE_TRANSITION][TOPTOBOTTOM_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle' : 90.0,
'scaleX' : 1.0,
'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_FLIP_Y,
'outInvertsSweep' : false,
'scaleIsotropically' : false
};

aTransitionInfoTable[WATERFALLWIPE_TRANSITION] = {};
aTransitionInfoTable[WATERFALLWIPE_TRANSITION][VERTICALLEFT_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle' : 0.0,
'scaleX' : 1.0,
'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_ROTATE_180,
'outInvertsSweep' : true,
'scaleIsotropically' : false
};
aTransitionInfoTable[WATERFALLWIPE_TRANSITION][VERTICALRIGHT_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle' : 0.0,
'scaleX' : 1.0,
'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_ROTATE_180,
'outInvertsSweep' : true,
'scaleIsotropically' : false
};
aTransitionInfoTable[WATERFALLWIPE_TRANSITION][HORIZONTALLEFT_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle' : -90.0,
'scaleX' : 1.0,
'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_ROTATE_180,
'outInvertsSweep' : true,
'scaleIsotropically' : false
};
aTransitionInfoTable[WATERFALLWIPE_TRANSITION][HORIZONTALRIGHT_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle' : 90.0,
'scaleX' : 1.0,
'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_ROTATE_180,
'outInvertsSweep' : true,
'scaleIsotropically' : false
};

aTransitionInfoTable[BOXWIPE_TRANSITION] = {};
aTransitionInfoTable[BOXWIPE_TRANSITION][TOPLEFT_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle' : 0.0,
'scaleX' : 1.0,
'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_IGNORE,
'outInvertsSweep' : true,
'scaleIsotropically' : false
};
aTransitionInfoTable[BOXWIPE_TRANSITION][TOPRIGHT_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle' : 90.0,
'scaleX' : 1.0,
'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_IGNORE,
'outInvertsSweep' : true,
'scaleIsotropically' : false
};
aTransitionInfoTable[BOXWIPE_TRANSITION][BOTTOMRIGHT_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle' : 180.0,
'scaleX' : 1.0,
'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_IGNORE,
'outInvertsSweep' : true,
'scaleIsotropically' : false
};
aTransitionInfoTable[BOXWIPE_TRANSITION][BOTTOMLEFT_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle' : -90.0,
'scaleX' : 1.0,
'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_IGNORE,
'outInvertsSweep' : true,
'scaleIsotropically' : false
};
aTransitionInfoTable[BOXWIPE_TRANSITION][TOPCENTER_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle' : 0.0,
'scaleX' : 1.0,
'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_FLIP_Y,
'outInvertsSweep' : true,
'scaleIsotropically' : false
};
aTransitionInfoTable[BOXWIPE_TRANSITION][RIGHTCENTER_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle' : 90.0,
'scaleX' : 1.0,
'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_FLIP_X,
'outInvertsSweep' : true,
'scaleIsotropically' : false
};
aTransitionInfoTable[BOXWIPE_TRANSITION][BOTTOMCENTER_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle' : 180.0,
'scaleX' : 1.0,
'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_FLIP_Y,
'outInvertsSweep' : true,
'scaleIsotropically' : false
};
aTransitionInfoTable[BOXWIPE_TRANSITION][LEFTCENTER_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle' : -90.0,
'scaleX' : 1.0,
'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_FLIP_X,
'outInvertsSweep' : true,
'scaleIsotropically' : false
};

aTransitionInfoTable[FOURBOXWIPE_TRANSITION] = {};
aTransitionInfoTable[FOURBOXWIPE_TRANSITION][CORNERSIN_TRANS_SUBTYPE] =
aTransitionInfoTable[FOURBOXWIPE_TRANSITION][CORNERSOUT_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
    'rotationAngle' : 90.0,
'scaleX' : 1.0,
'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_IGNORE,
'outInvertSweep' : true,
'scaleIsotropically' : false
};
aTransitionInfoTable[BOXSNAKESWIPE_TRANSITION][FOURBOXHORIZONTAL_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle' : 0.0,
'scaleX' : 1.0,
'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_IGNORE,
'outInvertSweep' : true,
'scaleIsotropically' : false
};

aTransitionInfoTable[BARNDOORWIPE_TRANSITION] = {};
aTransitionInfoTable[BARNDOORWIPE_TRANSITION][VERTICAL_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle': 0.0,
'scaleX': 1.0,
'scaleY': 1.0,
'reverseMethod': REVERSEMETHOD_SUBTRACT_AND_INVERT,
'outInvertsSweep': true,
'scaleIsotropically': false
};
aTransitionInfoTable[BARNDOORWIPE_TRANSITION][HORIZONTAL_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle': 90.0,
'scaleX': 1.0,
'scaleY': 1.0,
'reverseMethod': REVERSEMETHOD_SUBTRACT_AND_INVERT,
'outInvertsSweep': true,
'scaleIsotropically': false
};
aTransitionInfoTable[BARNDOORWIPE_TRANSITION][DIAGONALBOTTOMLEFT_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle': 45.0,
'scaleX': Math.SQRT2,
'scaleY': Math.SQRT2,
'reverseMethod': REVERSEMETHOD_SUBTRACT_AND_INVERT,
'outInvertsSweep': true,
'scaleIsotropically': false
};
aTransitionInfoTable[BARNDOORWIPE_TRANSITION][DIAGONALTOPLEFT_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle': -45.0,
'scaleX': Math.SQRT2,
'scaleY': Math.SQRT2,
'reverseMethod': REVERSEMETHOD_SUBTRACT_AND_INVERT,
'outInvertsSweep': true,
'scaleIsotropically': false
};

aTransitionInfoTable[MISCDIAGONALWIPE_TRANSITION] = {};
aTransitionInfoTable[MISCDIAGONALWIPE_TRANSITION][DOUBLEBARNDOOR_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle': 45.0,
'scaleX': Math.SQRT2,
'scaleY': Math.SQRT2,
'reverseMethod': REVERSEMETHOD_IGNORE,
'outInvertsSweep': true,
'scaleIsotropically': false
};
aTransitionInfoTable[MISCDIAGONALWIPE_TRANSITION][DOUBLEDIAMOND_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle': 0.0,
'scaleX': 1,
'scaleY': 1,
'reverseMethod': REVERSEMETHOD_IGNORE,
'outInvertsSweep': true,
'scaleIsotropically': false
};

aTransitionInfoTable[IRISWIPE_TRANSITION] = {};
aTransitionInfoTable[IRISWIPE_TRANSITION][RECTANGLE_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle': 0.0,
'scaleX': 1.0,
'scaleY': 1.0,
'reverseMethod': REVERSEMETHOD_SUBTRACT_AND_INVERT,
'outInvertsSweep': true,
'scaleIsotropically': false
};

aTransitionInfoTable[IRISWIPE_TRANSITION][DIAMOND_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle': 45.0,
'scaleX': Math.SQRT2,
'scaleY': Math.SQRT2,
'reverseMethod': REVERSEMETHOD_SUBTRACT_AND_INVERT,
'outInvertsSweep': true,
'scaleIsotropically': false
};

aTransitionInfoTable[ZIGZAGWIPE_TRANSITION] = {};
aTransitionInfoTable[ZIGZAGWIPE_TRANSITION][LEFTTORIGHT_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle' : 0.0,
'scaleX' : 1.0,
'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_FLIP_X,
'outInvertsSweep' : true,
'scaleIsotropically' : false
};
aTransitionInfoTable[ZIGZAGWIPE_TRANSITION][TOPTOBOTTOM_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle' : 90.0,
'scaleX' : 1.0,
'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_FLIP_Y,
'outInvertsSweep' : true,
'scaleIsotropically' : false
};

aTransitionInfoTable[BARNZIGZAGWIPE_TRANSITION] = {};
aTransitionInfoTable[BARNZIGZAGWIPE_TRANSITION][VERTICAL_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle' : 0.0,
'scaleX' : 1.0,
'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_IGNORE,
'outInvertsSweep' : true,
'scaleIsotropically' : false
};
aTransitionInfoTable[BARNZIGZAGWIPE_TRANSITION][HORIZONTAL_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle' : 90.0,
'scaleX' : 1.0,
'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_IGNORE,
'outInvertsSweep' : true,
'scaleIsotropically' : false
};

aTransitionInfoTable[BARWIPE_TRANSITION] = {};
  'outInvertSweep' : true,
'scaleIsotropically' : false
};
aTransitionInfoTable[PARALLELSNAKESWIPE_TRANSITION][DIAGONALTOPLEFTOPPOSITE_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle' : 0.0,
'scaleX' : 1.0,
'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_IGNORE,
'outInvertSweep' : true,
'scaleIsotropically' : false
};
aTransitionInfoTable[PARALLELSNAKESWIPE_TRANSITION][DIAGONALBOTTOMLEFTOPPOSITE_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle' : 0.0,
'scaleX' : 1.0,
'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_IGNORE,
'outInvertSweep' : true,
'scaleIsotropically' : false
};

aTransitionInfoTable[SPIRALWIPE_TRANSITION] = {};
aTransitionInfoTable[SPIRALWIPE_TRANSITION][TOPLEFTCLOCKWISE_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle' : 0.0,
'scaleX' : 1.0,
'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_SUBTRACT_AND_INVERT,
'outInvertSweep' : true,
'scaleIsotropically' : false
};
aTransitionInfoTable[SPIRALWIPE_TRANSITION][TOPRIGHTCLOCKWISE_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle' : 90.0,
'scaleX' : 1.0,
'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_SUBTRACT_AND_INVERT,
'outInvertSweep' : true,
'scaleIsotropically' : false
};
aTransitionInfoTable[SPIRALWIPE_TRANSITION][BOTTOMRIGHTCLOCKWISE_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle' : 180.0,
'scaleX' : 1.0,
'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_SUBTRACT_AND_INVERT,
'outInvertSweep' : true,
'scaleIsotropically' : false
};
aTransitionInfoTable[SPIRALWIPE_TRANSITION][BOTTOMLEFTCLOCKWISE_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle' : 270.0,
'scaleX' : 1.0,
'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_SUBTRACT_AND_INVERT,
'outInvertSweep' : true,
'scaleIsotropically' : false
};
aTransitionInfoTable[SPIRALWIPE_TRANSITION][TOPLEFTCOUNTERCLOCKWISE_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle' : 90.0,
'scaleX' : 1.0,
'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_SUBTRACT_AND_INVERT,
'outInvertSweep' : true,
'scaleIsotropically' : false
};
aTransitionInfoTable[SPIRALWIPE_TRANSITION][TOPRIGHTCOUNTERCLOCKWISE_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle' : 180.0,
'scaleX' : 1.0,
'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_SUBTRACT_AND_INVERT,
'outInvertSweep' : true,
'scaleIsotropically' : false
};
aTransitionInfoTable[SPIRALWIPE_TRANSITION][BOTTOMRIGHTCOUNTERCLOCKWISE_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle' : 270.0,
'scaleX' : 1.0,
'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_SUBTRACT_AND_INVERT,
'outInvertSweep' : true,
'scaleIsotropically' : false
};
aTransitionInfoTable[SPIRALWIPE_TRANSITION][BOTTOMLEFTCOUNTERCLOCKWISE_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle' : 0.0,
'scaleX' : 1.0,
'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_SUBTRACT_AND_INVERT,
'outInvertSweep' : true,
'scaleIsotropically' : false
};

aTransitionInfoTable[BOXSNAKESWIPE_TRANSITION] = {};
aTransitionInfoTable[BOXSNAKESWIPE_TRANSITION][TWOBOXTOP_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle' : 90.0,
'scaleX' : 1.0,
'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_IGNORE,
'outInvertSweep' : true,
'scaleIsotropically' : false
};
aTransitionInfoTable[BOXSNAKESWIPE_TRANSITION][TWOBOXBOTTOM_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle' : -90.0,
'scaleX' : 1.0,
'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_IGNORE,
'outInvertSweep' : true,
'scaleIsotropically' : false
};
aTransitionInfoTable[BOXSNAKESWIPE_TRANSITION][TWOBOXLEFT_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle' : 0.0,
'scaleX' : 1.0,
'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_IGNORE,
'outInvertSweep' : true,
'scaleIsotropically' : false
};
aTransitionInfoTable[BOXSNAKESWIPE_TRANSITION][TWOBOXRIGHT_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle' : 180.0,
'scaleX' : 1.0,
'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_IGNORE,
'outInvertSweep' : true,
'scaleIsotropically' : false
};
aTransitionInfoTable[BOXSNAKESWIPE_TRANSITION][FOURBOXVERTICAL_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
                         {
'class' : TRANSITION_INVALID,
'rotationAngle' : 0.0,
'scaleX' : 0.0,
'scaleY' : 0.0,
'reverseMethod' : REVERSEMETHOD_IGNORE,
'outInvertsSweep' : false,
'scaleIsotropically' : false
};

aTransitionInfoTable[SNAKEWIPE_TRANSITION] = {};
aTransitionInfoTable[SNAKEWIPE_TRANSITION][TOPLEFTVERTICAL_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle' : -90.0,
'scaleX' : 1.0,
'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_ROTATE_180,
'outInvertsSweep' : true,
'scaleIsotropically' : false
};
aTransitionInfoTable[SNAKEWIPE_TRANSITION][TOPLEFTHORIZONTAL_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle' : 0.0,
'scaleX' : 1.0,
'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_ROTATE_180,
'outInvertSweep' : true,
'scaleIsotropically' : false
};
aTransitionInfoTable[SNAKEWIPE_TRANSITION][TOPLEFTDIAGONAL_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle' : 0.0,
'scaleX' : 1.0,
'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_ROTATE_180,
'outInvertSweep' : true,
'scaleIsotropically' : false
};
aTransitionInfoTable[SNAKEWIPE_TRANSITION][TOPRIGHTDIAGONAL_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle' : 0.0,
'scaleX' : 1.0,
'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_ROTATE_180,
'outInvertSweep' : true,
'scaleIsotropically' : false
};
aTransitionInfoTable[SNAKEWIPE_TRANSITION][BOTTOMRIGHTDIAGONAL_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle' : 180.0,
'scaleX' : 1.0,
'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_ROTATE_180,
'outInvertSweep' : true,
'scaleIsotropically' : false
};
aTransitionInfoTable[SNAKEWIPE_TRANSITION][BOTTOMLEFTDIAGONAL_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle' : 180.0,
'scaleX' : 1.0,
'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_ROTATE_180,
'outInvertSweep' : true,
'scaleIsotropically' : false
}

aTransitionInfoTable[PARALLELSNAKESWIPE_TRANSITION] = {};
aTransitionInfoTable[PARALLELSNAKESWIPE_TRANSITION][VERTICALTOPSAME_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle' : 0.0,
'scaleX' : 1.0,
'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_IGNORE,
'outInvertSweep' : true,
'scaleIsotropically' : false
};
aTransitionInfoTable[PARALLELSNAKESWIPE_TRANSITION][VERTICALBOTTOMSAME_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle' : 180.0,
'scaleX' : 1.0,
'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_IGNORE,
'outInvertSweep' : true,
'scaleIsotropically' : false
};
aTransitionInfoTable[PARALLELSNAKESWIPE_TRANSITION][VERTICALTOPLEFTOPPOSITE_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle' : 0.0,
'scaleX' : 1.0,
'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_IGNORE,
'outInvertSweep' : true,
'scaleIsotropically' : false
};
aTransitionInfoTable[PARALLELSNAKESWIPE_TRANSITION][VERTICALBOTTOMLEFTOPPOSITE_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle' : 0.0,
'scaleX' : 1.0,
'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_IGNORE,
'outInvertSweep' : true,
'scaleIsotropically' : false
};
aTransitionInfoTable[PARALLELSNAKESWIPE_TRANSITION][HORIZONTALLEFTSAME_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle' : -90.0,
'scaleX' : 1.0,
'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_IGNORE,
'outInvertSweep' : true,
'scaleIsotropically' : false
};
aTransitionInfoTable[PARALLELSNAKESWIPE_TRANSITION][HORIZONTALRIGHTSAME_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle' : 90.0,
'scaleX' : 1.0,
'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_IGNORE,
'outInvertSweep' : true,
'scaleIsotropically' : false
};
aTransitionInfoTable[PARALLELSNAKESWIPE_TRANSITION][HORIZONTALTOPLEFTOPPOSITE_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle' : -90.0,
'scaleX' : 1.0,
'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_IGNORE,
'outInvertSweep' : true,
'scaleIsotropically' : false
};
aTransitionInfoTable[PARALLELSNAKESWIPE_TRANSITION][HORIZONTALTOPRIGHTOPPOSITE_TRANS_SUBTYPE] =
{
'class' : TRANSITION_CLIP_POLYPOLYGON,
'rotationAngle' : -90.0,
'scaleX' : 1.0,
'scaleY' : 1.0,
'reverseMethod' : REVERSEMETHOD_IGNORE,
                 var COUNTERCLOCKWISEBOTTOMLEFT_TRANS_SUBTYPE    = 58; // 45
var CLOCKWISEBOTTOMRIGHT_TRANS_SUBTYPE          = 59; // 46
var COUNTERCLOCKWISETOPRIGHT_TRANS_SUBTYPE      = 60; // 47
var VERTICALLEFT_TRANS_SUBTYPE                  = 61; // 93
var VERTICALRIGHT_TRANS_SUBTYPE                 = 62; // 94
var HORIZONTALLEFT_TRANS_SUBTYPE                = 63; // 95
var HORIZONTALRIGHT_TRANS_SUBTYPE               = 64; // 96
var TOPLEFTCLOCKWISE_TRANS_SUBTYPE              = 65; // 69
var TOPRIGHTCLOCKWISE_TRANS_SUBTYPE             = 66; // 70
var BOTTOMRIGHTCLOCKWISE_TRANS_SUBTYPE          = 67; // 71
var BOTTOMLEFTCLOCKWISE_TRANS_SUBTYPE           = 68; // 72
var TOPLEFTCOUNTERCLOCKWISE_TRANS_SUBTYPE       = 69; // 73
var TOPRIGHTCOUNTERCLOCKWISE_TRANS_SUBTYPE      = 70; // 74
var BOTTOMRIGHTCOUNTERCLOCKWISE_TRANS_SUBTYPE   = 71; // 75
var BOTTOMLEFTCOUNTERCLOCKWISE_TRANS_SUBTYPE    = 72; // 76
var DOUBLEBARNDOOR_TRANS_SUBTYPE                = 73; // 17
var DOUBLEDIAMOND_TRANS_SUBTYPE                 = 74; // 18
var VERTICALTOPSAME_TRANS_SUBTYPE               = 75; // 77
var VERTICALBOTTOMSAME_TRANS_SUBTYPE            = 76; // 78
var VERTICALTOPLEFTOPPOSITE_TRANS_SUBTYPE       = 77; // 79
var VERTICALBOTTOMLEFTOPPOSITE_TRANS_SUBTYPE    = 78; // 80
var HORIZONTALLEFTSAME_TRANS_SUBTYPE            = 79; // 81
var HORIZONTALRIGHTSAME_TRANS_SUBTYPE           = 80; // 82
var HORIZONTALTOPLEFTOPPOSITE_TRANS_SUBTYPE     = 81; // 83
var HORIZONTALTOPRIGHTOPPOSITE_TRANS_SUBTYPE    = 82; // 84
var DIAGONALBOTTOMLEFTOPPOSITE_TRANS_SUBTYPE    = 83; // 85
var DIAGONALTOPLEFTOPPOSITE_TRANS_SUBTYPE       = 84; // 86
var TWOBOXTOP_TRANS_SUBTYPE                     = 85; // 87
var TWOBOXBOTTOM_TRANS_SUBTYPE                  = 86; // 88
var TWOBOXLEFT_TRANS_SUBTYPE                    = 87; // 89
var TWOBOXRIGHT_TRANS_SUBTYPE                   = 88; // 90
var FOURBOXVERTICAL_TRANS_SUBTYPE               = 89; // 91
var FOURBOXHORIZONTAL_TRANS_SUBTYPE             = 90; // 92

var aTransitionSubtypeInMap = {
'default'                       : DEFAULT_TRANS_SUBTYPE,
'leftToRight'                   : LEFTTORIGHT_TRANS_SUBTYPE,
'topToBottom'                   : TOPTOBOTTOM_TRANS_SUBTYPE,
'cornersIn'                     : CORNERSIN_TRANS_SUBTYPE,
'cornersOut'                    : CORNERSOUT_TRANS_SUBTYPE,
'vertical'                      : VERTICAL_TRANS_SUBTYPE,
'centerTop'                     : CENTERTOP_TRANS_SUBTYPE,
'centerRight'                   : CENTERRIGHT_TRANS_SUBTYPE,
'top'                           : TOP_TRANS_SUBTYPE,
'right'                         : RIGHT_TRANS_SUBTYPE,
'bottom'                        : BOTTOM_TRANS_SUBTYPE,
'left'                          : LEFT_TRANS_SUBTYPE,
'horizontal'                    : HORIZONTAL_TRANS_SUBTYPE,
'down'                          : DOWN_TRANS_SUBTYPE,
'circle'                        : CIRCLE_TRANS_SUBTYPE,
'clockwiseTwelve'               : CLOCKWISETWELVE_TRANS_SUBTYPE,
'clockwiseThree'                : CLOCKWISETHREE_TRANS_SUBTYPE,
'clockwiseSix'                  : CLOCKWISESIX_TRANS_SUBTYPE,
'clockwiseNine'                 : CLOCKWISENINE_TRANS_SUBTYPE,
'clockwiseRight'                : CLOCKWISERIGHT_TRANS_SUBTYPE,
'clockwiseTop'                  : CLOCKWISETOP_TRANS_SUBTYPE,
'clockwiseBottom'               : CLOCKWISEBOTTOM_TRANS_SUBTYPE,
'clockwiseLeft'                 : CLOCKWISELEFT_TRANS_SUBTYPE,
'clockwiseTopLeft'              : CLOCKWISETOPLEFT_TRANS_SUBTYPE,
'counterClockwiseBottomLeft'    : COUNTERCLOCKWISEBOTTOMLEFT_TRANS_SUBTYPE,
'clockwiseBottomRight'          : CLOCKWISEBOTTOMRIGHT_TRANS_SUBTYPE,
'counterClockwiseTopRight'      : COUNTERCLOCKWISETOPRIGHT_TRANS_SUBTYPE,
'twoBladeVertical'              : TWOBLADEVERTICAL_TRANS_SUBTYPE,
'twoBladeHorizontal'            : TWOBLADEHORIZONTAL_TRANS_SUBTYPE,
'fourBlade'                     : FOURBLADE_TRANS_SUBTYPE,
'fromLeft'                      : FROMLEFT_TRANS_SUBTYPE,
'fromTop'                       : FROMTOP_TRANS_SUBTYPE,
'fromRight'                     : FROMRIGHT_TRANS_SUBTYPE,
'fromBottom'                    : FROMBOTTOM_TRANS_SUBTYPE,
'crossfade'                     : CROSSFADE_TRANS_SUBTYPE,
'fadeToColor'                   : FADETOCOLOR_TRANS_SUBTYPE,
'fadeFromColor'                 : FADEFROMCOLOR_TRANS_SUBTYPE,
'fadeOverColor'                 : FADEOVERCOLOR_TRANS_SUBTYPE,
'threeBlade'                    : THREEBLADE_TRANS_SUBTYPE,
'eightBlade'                    : EIGHTBLADE_TRANS_SUBTYPE,
'oneBlade'                      : ONEBLADE_TRANS_SUBTYPE,
'across'                        : ACROSS_TRANS_SUBTYPE,
'topLeftVertical'               : TOPLEFTVERTICAL_TRANS_SUBTYPE,
'topLeftHorizontal'             : TOPLEFTHORIZONTAL_TRANS_SUBTYPE,
'topLeftDiagonal'               : TOPLEFTDIAGONAL_TRANS_SUBTYPE,
'topRightDiagonal'              : TOPRIGHTDIAGONAL_TRANS_SUBTYPE,
'bottomRightDiagonal'           : BOTTOMRIGHTDIAGONAL_TRANS_SUBTYPE,
'topLeftClockwise'              : TOPLEFTCLOCKWISE_TRANS_SUBTYPE,
'topRightClockwise'             : TOPRIGHTCLOCKWISE_TRANS_SUBTYPE,
'bottomRightClockwise'          : BOTTOMRIGHTCLOCKWISE_TRANS_SUBTYPE,
'bottomLeftClockwise'           : BOTTOMLEFTCLOCKWISE_TRANS_SUBTYPE,
'topLeftCounterClockwise'       : TOPLEFTCOUNTERCLOCKWISE_TRANS_SUBTYPE,
'topRightCounterClockwise'      : TOPRIGHTCOUNTERCLOCKWISE_TRANS_SUBTYPE,
'bottomRightCounterClockwise'   : BOTTOMRIGHTCOUNTERCLOCKWISE_TRANS_SUBTYPE,
'bottomLeftCounterClockwise'    : BOTTOMLEFTCOUNTERCLOCKWISE_TRANS_SUBTYPE,
'bottomLeftDiagonal'            : BOTTOMLEFTDIAGONAL_TRANS_SUBTYPE,
'rectangle'                     : RECTANGLE_TRANS_SUBTYPE,
'diamond'                       : DIAMOND_TRANS_SUBTYPE,
'topLeft'                       : TOPLEFT_TRANS_SUBTYPE,
'topRight'                      : TOPRIGHT_TRANS_SUBTYPE,
'bottomRight'                   : BOTTOMRIGHT_TRANS_SUBTYPE,
'bottomLeft'                    : BOTTOMLEFT_TRANS_SUBTYPE,
'topCenter'                     : TOPCENTER_TRANS_SUBTYPE,
'rightCenter'                   : RIGHTCENTER_TRANS_SUBTYPE,
'bottomCenter'                  : BOTTOMCENTER_TRANS_SUBTYPE,
'leftCenter'                    : LEFTCENTER_TRANS_SUBTYPE,
'up'                            : UP_TRANS_SUBTYPE,
'diagonalBottomLeft'            : DIAGONALBOTTOMLEFT_TRANS_SUBTYPE,
'diagonalTopLeft'               : DIAGONALTOPLEFT_TRANS_SUBTYPE,
'verticalLeft'                  : VERTICALLEFT_TRANS_SUBTYPE,
'verticalRight'                 : VERTICALRIGHT_TRANS_SUBTYPE,
'horizontalLeft'                : HORIZONTALLEFT_TRANS_SUBTYPE,
'horizontalRight'               : HORIZONTALRIGHT_TRANS_SUBTYPE,
'doubleBarnDoor'                : DOUBLEBARNDOOR_TRANS_SUBTYPE,
'doubleDiamond'                 : DOUBLEDIAMOND_TRANS_SUBTYPE,
'verticalTopSame'               : VERTICALTOPSAME_TRANS_SUBTYPE,
'verticalBottomSame'            : VERTICALBOTTOMSAME_TRANS_SUBTYPE,
'verticalTopLeftOpposite'       : VERTICALTOPLEFTOPPOSITE_TRANS_SUBTYPE,
'verticalBottomLeftOpposite'    : VERTICALBOTTOMLEFTOPPOSITE_TRANS_SUBTYPE,
'horizontalLeftSame'            : HORIZONTALLEFTSAME_TRANS_SUBTYPE,
'horizontalRightSame'           : HORIZONTALRIGHTSAME_TRANS_SUBTYPE,
'horizontalTopLeftOpposite'     : HORIZONTALTOPLEFTOPPOSITE_TRANS_SUBTYPE,
'horizontalTopRightOpposite'    : HORIZONTALTOPRIGHTOPPOSITE_TRANS_SUBTYPE,
'diagonalBottomLeftOpposite'    : DIAGONALBOTTOMLEFTOPPOSITE_TRANS_SUBTYPE,
'diagonalTopLeftOpposite'       : DIAGONALTOPLEFTOPPOSITE_TRANS_SUBTYPE,
'twoBoxTop'                     : TWOBOXTOP_TRANS_SUBTYPE,
'twoBoxBottom'                  : TWOBOXBOTTOM_TRANS_SUBTYPE,
'twoBoxLeft'                    : TWOBOXLEFT_TRANS_SUBTYPE,
'twoBoxRight'                   : TWOBOXRIGHT_TRANS_SUBTYPE,
'fourBoxVertical'               : FOURBOXVERTICAL_TRANS_SUBTYPE,
'fourBoxHorizontal'             : FOURBOXHORIZONTAL_TRANS_SUBTYPE
};

var TRANSITION_MODE_IN  = 1;
var TRANSITION_MODE_OUT = 0;

var aTransitionModeOutMap = [ 'out', 'in' ];


var REVERSEMETHOD_IGNORE                    = 0;
var REVERSEMETHOD_INVERT_SWEEP              = 1;
var REVERSEMETHOD_SUBTRACT_POLYGON          = 2;
var REVERSEMETHOD_SUBTRACT_AND_INVERT       = 3;
var REVERSEMETHOD_ROTATE_180                = 4;
var REVERSEMETHOD_FLIP_X                    = 5;
var REVERSEMETHOD_FLIP_Y                    = 6;

var aReverseMethodOutMap = ['ignore', 'invert sweep', 'subtract polygon',
'subtract and invert', 'rotate 180', 'flip x', 'flip y'];


var aTransitionInfoTable = {};

aTransitionInfoTable[0] = {};
aTransitionInfoTable[0][0] =
                               'y':                {   'type':         NUMBER_PROPERTY,
'get':          'getY',
'set':          'setY',
'getmod':       'makeScaler( 1/nHeight )',
'setmod':       'makeScaler( nHeight)'          },

'fill':             {   'type':         ENUM_PROPERTY,
'get':          'getFillStyle',
'set':          'setFillStyle'                  },

'stroke':           {   'type':         ENUM_PROPERTY,
'get':          'getStrokeStyle',
'set':          'setStrokeStyle'                },

'visibility':       {   'type':         ENUM_PROPERTY,
'get':          'getVisibility',
'set':          'setVisibility'                 },

'fill-color':       {   'type':         COLOR_PROPERTY,
'get':          'getFillColor',
'set':          'setFillColor'                  },

'stroke-color':     {   'type':         COLOR_PROPERTY,
'get':          'getStrokeColor',
'set':          'setStrokeColor'                },

'color':            {   'type':         COLOR_PROPERTY,
'get':          'getFontColor',
'set':          'setFontColor'                  }

};


var TRANSITION_INVALID              = 0;    // Invalid type
var TRANSITION_CLIP_POLYPOLYGON     = 1;    // Transition expressed by parametric clip polygon
var TRANSITION_SPECIAL              = 2;    // Transition expressed by hand-crafted function


var BARWIPE_TRANSITION              = 1;
var BOXWIPE_TRANSITION              = 2;
var FOURBOXWIPE_TRANSITION          = 3;
var ELLIPSEWIPE_TRANSITION          = 4; // 17
var CLOCKWIPE_TRANSITION            = 5; // 22
var PINWHEELWIPE_TRANSITION         = 6; // 23
var PUSHWIPE_TRANSITION             = 7; // 35
var SLIDEWIPE_TRANSITION            = 8; // 36
var FADE_TRANSITION                 = 9; // 37
var RANDOMBARWIPE_TRANSITION        = 10; // 38
var CHECKERBOARDWIPE_TRANSITION     = 11; // 39
var DISSOLVE_TRANSITION             = 12; // 40
var SNAKEWIPE_TRANSITION            = 13; // 30
var PARALLELSNAKESWIPE_TRANSITION   = 14; // 32
var IRISWIPE_TRANSITION             = 15; // 12
var BARNDOORWIPE_TRANSITION         = 16; // 4
var VEEWIPE_TRANSITION              = 17; // 8
var ZIGZAGWIPE_TRANSITION           = 18; // 10
var BARNZIGZAGWIPE_TRANSITION       = 19; // 11
var FANWIPE_TRANSITION              = 20; // 25
var SINGLESWEEPWIPE_TRANSITION      = 21; // 24
var WATERFALLWIPE_TRANSITION        = 22; // 34
var SPIRALWIPE_TRANSITION           = 23; // 31
var MISCDIAGONALWIPE_TRANSITION     = 24; // 7
var BOXSNAKESWIPE_TRANSITION        = 25; // 33

var aTransitionTypeInMap = {
'barWipe'           : BARWIPE_TRANSITION,
'boxWipe'           : BOXWIPE_TRANSITION,
'barnDoorWipe'      : BARNDOORWIPE_TRANSITION,
'fourBoxWipe'       : FOURBOXWIPE_TRANSITION,
'ellipseWipe'       : ELLIPSEWIPE_TRANSITION,
'clockWipe'         : CLOCKWIPE_TRANSITION,
'pinWheelWipe'      : PINWHEELWIPE_TRANSITION,
'miscDiagonalWipe'  : MISCDIAGONALWIPE_TRANSITION,
'pushWipe'          : PUSHWIPE_TRANSITION,
'slideWipe'         : SLIDEWIPE_TRANSITION,
'fade'              : FADE_TRANSITION,
'fanWipe'           : FANWIPE_TRANSITION,
'randomBarWipe'     : RANDOMBARWIPE_TRANSITION,
'checkerBoardWipe'  : CHECKERBOARDWIPE_TRANSITION,
'dissolve'          : DISSOLVE_TRANSITION,
'singleSweepWipe'   : SINGLESWEEPWIPE_TRANSITION,
'snakeWipe'         : SNAKEWIPE_TRANSITION,
'parallelSnakesWipe': PARALLELSNAKESWIPE_TRANSITION,
'spiralWipe'        : SPIRALWIPE_TRANSITION,
'boxSnakesWipe'     : BOXSNAKESWIPE_TRANSITION,
'irisWipe'          : IRISWIPE_TRANSITION,
'veeWipe'           : VEEWIPE_TRANSITION,
'zigZagWipe'        : ZIGZAGWIPE_TRANSITION,
'barnZigZagWipe'    : BARNZIGZAGWIPE_TRANSITION,
'waterfallWipe'     : WATERFALLWIPE_TRANSITION
};

var DEFAULT_TRANS_SUBTYPE                       = 0;
var LEFTTORIGHT_TRANS_SUBTYPE                   = 1;
var TOPTOBOTTOM_TRANS_SUBTYPE                   = 2;
var CORNERSIN_TRANS_SUBTYPE                     = 3; // 11
var CORNERSOUT_TRANS_SUBTYPE                    = 4;
var VERTICAL_TRANS_SUBTYPE                      = 5;
var HORIZONTAL_TRANS_SUBTYPE                    = 6; // 14
var DOWN_TRANS_SUBTYPE                          = 7; // 19
var CIRCLE_TRANS_SUBTYPE                        = 8; // 27
var CLOCKWISETWELVE_TRANS_SUBTYPE               = 9; // 33
var CLOCKWISETHREE_TRANS_SUBTYPE                = 10;
var CLOCKWISESIX_TRANS_SUBTYPE                  = 11;
var CLOCKWISENINE_TRANS_SUBTYPE                 = 12;
var TWOBLADEVERTICAL_TRANS_SUBTYPE              = 13;
var TWOBLADEHORIZONTAL_TRANS_SUBTYPE            = 14;
var FOURBLADE_TRANS_SUBTYPE                     = 15; // 39
var FROMLEFT_TRANS_SUBTYPE                      = 16; // 97
var FROMTOP_TRANS_SUBTYPE                       = 17;
var FROMRIGHT_TRANS_SUBTYPE                     = 18;
var FROMBOTTOM_TRANS_SUBTYPE                    = 19;
var CROSSFADE_TRANS_SUBTYPE                     = 20;
var FADETOCOLOR_TRANS_SUBTYPE                   = 21;
var FADEFROMCOLOR_TRANS_SUBTYPE                 = 22;
var FADEOVERCOLOR_TRANS_SUBTYPE                 = 23;
var THREEBLADE_TRANS_SUBTYPE                    = 24;
var EIGHTBLADE_TRANS_SUBTYPE                    = 25;
var ONEBLADE_TRANS_SUBTYPE                      = 26; // 107
var ACROSS_TRANS_SUBTYPE                        = 27;
var TOPLEFTVERTICAL_TRANS_SUBTYPE               = 28; // 109
var TOPLEFTHORIZONTAL_TRANS_SUBTYPE             = 29; // 64
var TOPLEFTDIAGONAL_TRANS_SUBTYPE               = 30; // 65
var TOPRIGHTDIAGONAL_TRANS_SUBTYPE              = 31; // 66
var BOTTOMRIGHTDIAGONAL_TRANS_SUBTYPE           = 32; // 67
var BOTTOMLEFTDIAGONAL_TRANS_SUBTYPE            = 33; // 68
var RECTANGLE_TRANS_SUBTYPE                     = 34; // 101
var DIAMOND_TRANS_SUBTYPE                       = 35; // 102
var TOPLEFT_TRANS_SUBTYPE                       = 36; // 3
var TOPRIGHT_TRANS_SUBTYPE                      = 37; // 4
var BOTTOMRIGHT_TRANS_SUBTYPE                   = 38; // 5
var BOTTOMLEFT_TRANS_SUBTYPE                    = 39; // 6
var TOPCENTER_TRANS_SUBTYPE                     = 40; // 7
var RIGHTCENTER_TRANS_SUBTYPE                   = 41; // 8
var BOTTOMCENTER_TRANS_SUBTYPE                  = 42; // 9
var LEFTCENTER_TRANS_SUBTYPE                    = 43; // 10
var LEFT_TRANS_SUBTYPE                          = 44; // 20
var UP_TRANS_SUBTYPE                            = 45; // 21
var RIGHT_TRANS_SUBTYPE                         = 46; // 22
var DIAGONALBOTTOMLEFT_TRANS_SUBTYPE            = 47; // 15
var DIAGONALTOPLEFT_TRANS_SUBTYPE               = 48; // 16
var CENTERTOP_TRANS_SUBTYPE                     = 49; // 48
var CENTERRIGHT_TRANS_SUBTYPE                   = 50; // 49
var TOP_TRANS_SUBTYPE                           = 51; // 50
var BOTTOM_TRANS_SUBTYPE                        = 52; // 52
var CLOCKWISETOP_TRANS_SUBTYPE                  = 53; // 40
var CLOCKWISERIGHT_TRANS_SUBTYPE                = 54; // 41
var CLOCKWISEBOTTOM_TRANS_SUBTYPE               = 55; // 42
var CLOCKWISELEFT_TRANS_SUBTYPE                 = 56; // 43
var CLOCKWISETOPLEFT_TRANS_SUBTYPE              = 57; // 44
                    'interactive-sequence'      : IMPRESS_INTERACTIVE_SEQUENCE_NODE
};

var aImpressNodeTypeOutMap = [ 'default', 'on-click', 'with-previous', 'after-previous',
'main-sequence', 'timing-root', 'interactive-sequence' ];


var aPresetClassInMap = {};


var aPresetIdInMap = {};


var RESTART_MODE_DEFAULT            = 0;
var RESTART_MODE_INHERIT            = 0; // eslint-disable-line no-unused-vars
var RESTART_MODE_ALWAYS             = 1;
var RESTART_MODE_WHEN_NOT_ACTIVE    = 2;
var RESTART_MODE_NEVER              = 3;

var aRestartModeInMap = {
'inherit'       : RESTART_MODE_DEFAULT,
'always'        : RESTART_MODE_ALWAYS,
'whenNotActive' : RESTART_MODE_WHEN_NOT_ACTIVE,
'never'         : RESTART_MODE_NEVER
};

var aRestartModeOutMap = [ 'inherit','always', 'whenNotActive', 'never' ];


var FILL_MODE_DEFAULT           = 0;
var FILL_MODE_INHERIT           = 0; // eslint-disable-line no-unused-vars
var FILL_MODE_REMOVE            = 1;
var FILL_MODE_FREEZE            = 2;
var FILL_MODE_HOLD              = 3;
var FILL_MODE_TRANSITION        = 4;
var FILL_MODE_AUTO              = 5;

var aFillModeInMap = {
'inherit'       : FILL_MODE_DEFAULT,
'remove'        : FILL_MODE_REMOVE,
'freeze'        : FILL_MODE_FREEZE,
'hold'          : FILL_MODE_HOLD,
'transition'    : FILL_MODE_TRANSITION,
'auto'          : FILL_MODE_AUTO
};

var aFillModeOutMap = [ 'inherit', 'remove', 'freeze', 'hold', 'transition', 'auto' ];


var ADDITIVE_MODE_UNKNOWN       = 0; // eslint-disable-line no-unused-vars
var ADDITIVE_MODE_BASE          = 1;
var ADDITIVE_MODE_SUM           = 2;
var ADDITIVE_MODE_REPLACE       = 3;
var ADDITIVE_MODE_MULTIPLY      = 4;
var ADDITIVE_MODE_NONE          = 5;

var aAddittiveModeInMap = {
'base'          : ADDITIVE_MODE_BASE,
'sum'           : ADDITIVE_MODE_SUM,
'replace'       : ADDITIVE_MODE_REPLACE,
'multiply'      : ADDITIVE_MODE_MULTIPLY,
'none'          : ADDITIVE_MODE_NONE
};

var aAddittiveModeOutMap = [ 'unknown', 'base', 'sum', 'replace', 'multiply', 'none' ];


var ACCUMULATE_MODE_NONE        = 0;
var ACCUMULATE_MODE_SUM         = 1;

var aAccumulateModeOutMap = [ 'none', 'sum' ];

var CALC_MODE_DISCRETE          = 1;
var CALC_MODE_LINEAR            = 2;
var CALC_MODE_PACED             = 3;
var CALC_MODE_SPLINE            = 4;

var aCalcModeInMap = {
'discrete'      : CALC_MODE_DISCRETE,
'linear'        : CALC_MODE_LINEAR,
'paced'         : CALC_MODE_PACED,
'spline'        : CALC_MODE_SPLINE
};

var aCalcModeOutMap = [ 'unknown', 'discrete', 'linear', 'paced', 'spline' ];


var COLOR_SPACE_RGB = 0;
var COLOR_SPACE_HSL = 1;

var aColorSpaceInMap = { 'rgb': COLOR_SPACE_RGB, 'hsl': COLOR_SPACE_HSL };

var aColorSpaceOutMap = [ 'rgb', 'hsl' ];


var CLOCKWISE               = 0;
var COUNTERCLOCKWISE        = 1;

var aClockDirectionInMap = { 'clockwise': CLOCKWISE, 'counter-clockwise': COUNTERCLOCKWISE };

var aClockDirectionOutMap = [ 'clockwise', 'counter-clockwise' ];


var UNKNOWN_PROPERTY        = 0; // eslint-disable-line no-unused-vars
var NUMBER_PROPERTY         = 1;
var ENUM_PROPERTY           = 2;
var COLOR_PROPERTY          = 3;
var STRING_PROPERTY         = 4;
var BOOL_PROPERTY           = 5;
var TUPLE_NUMBER_PROPERTY   = 6;

var aValueTypeOutMap = [ 'unknown', 'number', 'enum', 'color', 'string', 'boolean' ];


var aAttributeMap =
{
'height':           {   'type':         NUMBER_PROPERTY,
'get':          'getHeight',
'set':          'setHeight',
'getmod':       'makeScaler( 1/nHeight )',
'setmod':       'makeScaler( nHeight)'          },

'opacity':          {   'type':         NUMBER_PROPERTY,
'get':          'getOpacity',
'set':          'setOpacity'                    },

'scale':           {   'type':          TUPLE_NUMBER_PROPERTY,
'get':          'getSize',
'set':          'setSize'                       },

'translate':       {   'type':          TUPLE_NUMBER_PROPERTY,
'get':          'getPos',
'set':          'setPos'                        },

'rotate':           {   'type':         NUMBER_PROPERTY,
'get':          'getRotationAngle',
'set':          'setRotationAngle'              },

'width':            {   'type':         NUMBER_PROPERTY,
'get':          'getWidth',
'set':          'setWidth',
'getmod':       'makeScaler( 1/nWidth )',
'setmod':       'makeScaler( nWidth)'           },

'x':                {   'type':         NUMBER_PROPERTY,
'get':          'getX',
'set':          'setX',
'getmod':       'makeScaler( 1/nWidth )',
'setmod':       'makeScaler( nWidth)'           },

                            default:
log( 'SVGPathSeg.changeOrientation: unexpected path segment type: '
+ this.pathSegTypeAsLetter );
return null;
}
}
}
else throw e;
}

function SVGPathMatrixTransform( aPath, aSVGMatrix )
{
var nX = aPath.x;
aPath.x = aSVGMatrix.a * nX + aSVGMatrix.c * aPath.y + aSVGMatrix.e;
aPath.y = aSVGMatrix.b * nX + aSVGMatrix.d * aPath.y + aSVGMatrix.f;
}


function PriorityQueue( aCompareFunc )
{
this.aSequence = [];
this.aCompareFunc = aCompareFunc;
}

PriorityQueue.prototype.clone = function()
{
var aCopy = new PriorityQueue( this.aCompareFunc );
var src = this.aSequence;
var dest = [];
var i, l;
for( i = 0, l = src.length; i < l; ++i )
{
if( i in src )
{
dest.push( src[i] );
}
}
aCopy.aSequence = dest;
return aCopy;
};

PriorityQueue.prototype.top = function()
{
return this.aSequence[this.aSequence.length - 1];
};

PriorityQueue.prototype.isEmpty = function()
{
return ( this.aSequence.length === 0 );
};

PriorityQueue.prototype.push = function( aValue )
{
this.aSequence.unshift( aValue );
this.aSequence.sort(this.aCompareFunc);
};

PriorityQueue.prototype.clear = function()
{
this.aSequence = [];
};

PriorityQueue.prototype.pop = function()
{
return this.aSequence.pop();
};


var ANIMATION_NODE_CUSTOM               = 0;
var ANIMATION_NODE_PAR                  = 1;
var ANIMATION_NODE_SEQ                  = 2;
var ANIMATION_NODE_ITERATE              = 3;
var ANIMATION_NODE_ANIMATE              = 4;
var ANIMATION_NODE_SET                  = 5;
var ANIMATION_NODE_ANIMATEMOTION        = 6;
var ANIMATION_NODE_ANIMATECOLOR         = 7;
var ANIMATION_NODE_ANIMATETRANSFORM     = 8;
var ANIMATION_NODE_TRANSITIONFILTER     = 9;
var ANIMATION_NODE_AUDIO                = 10;
var ANIMATION_NODE_COMMAND              = 11;

var aAnimationNodeTypeInMap = {
'par'               : ANIMATION_NODE_PAR,
'seq'               : ANIMATION_NODE_SEQ,
'iterate'           : ANIMATION_NODE_ITERATE,
'animate'           : ANIMATION_NODE_ANIMATE,
'set'               : ANIMATION_NODE_SET,
'animatemotion'     : ANIMATION_NODE_ANIMATEMOTION,
'animatecolor'      : ANIMATION_NODE_ANIMATECOLOR,
'animatetransform'  : ANIMATION_NODE_ANIMATETRANSFORM,
'transitionfilter'  : ANIMATION_NODE_TRANSITIONFILTER,
'audio'             : ANIMATION_NODE_AUDIO,
'command'           : ANIMATION_NODE_COMMAND
};


function getAnimationElementType( aElement )
{
var sName = aElement.localName.toLowerCase();

if( sName && aAnimationNodeTypeInMap[ sName ] )
return aAnimationNodeTypeInMap[ sName ];
else
return ANIMATION_NODE_CUSTOM;
}


var INVALID_NODE                = 0;
var UNRESOLVED_NODE             = 1;
var RESOLVED_NODE               = 2;
var ACTIVE_NODE                 = 4;
var FROZEN_NODE                 = 8;
var ENDED_NODE                  = 16;

function getNodeStateName( eNodeState )
{
switch( eNodeState )
{
case INVALID_NODE:
return 'INVALID';
case UNRESOLVED_NODE:
return 'UNRESOLVED';
case RESOLVED_NODE:
return 'RESOLVED';
case ACTIVE_NODE:
return 'ACTIVE';
case FROZEN_NODE:
return 'FROZEN';
case ENDED_NODE:
return 'ENDED';
default:
return 'UNKNOWN';
}
}


var IMPRESS_DEFAULT_NODE                    = 0;
var IMPRESS_ON_CLICK_NODE                   = 1;
var IMPRESS_WITH_PREVIOUS_NODE              = 2;
var IMPRESS_AFTER_PREVIOUS_NODE             = 3;
var IMPRESS_MAIN_SEQUENCE_NODE              = 4;
var IMPRESS_TIMING_ROOT_NODE                = 5;
var IMPRESS_INTERACTIVE_SEQUENCE_NODE       = 6;

var aImpressNodeTypeInMap = {
'on-click'                  : IMPRESS_ON_CLICK_NODE,
'with-previous'             : IMPRESS_WITH_PREVIOUS_NODE,
'after-previous'            : IMPRESS_AFTER_PREVIOUS_NODE,
'main-sequence'             : IMPRESS_MAIN_SEQUENCE_NODE,
'timing-root'               : IMPRESS_TIMING_ROOT_NODE,
                       
var aPathSeg = aPathSegList.getItem( 0 );
if( aPathSeg.pathSegTypeAsLetter == 'M' )
{
nCurrentX = aPathSeg.x;
nCurrentY = aPathSeg.y;
aPathSegList.removeItem( 0 );
--nLength;
}

var i;
for( i = 0; i < nLength; ++i )
{
aPathSeg = aPathSegList.getItem( i );
var aPoint = aPathSeg.changeOrientation( nCurrentX, nCurrentY );
nCurrentX = aPoint.x;
nCurrentY = aPoint.y;
}


for( i = nLength - 2; i >= 0; --i )
{
aPathSeg = aPathSegList.removeItem( i );
aPathSegList.appendItem( aPathSeg );
}

var aMovePathSeg = this.createSVGPathSegMovetoAbs( nCurrentX, nCurrentY );
aPathSegList.insertItemBefore( aMovePathSeg, 0 );

};


try
{   // Firefox, Google Chrome, Internet Explorer, Safari.

SVGPathSegMovetoAbs.prototype.matrixTransform = function( aSVGMatrix )
{
SVGPathMatrixTransform( this, aSVGMatrix );
};

SVGPathSegLinetoAbs.prototype.matrixTransform = function( aSVGMatrix )
{
SVGPathMatrixTransform( this, aSVGMatrix );
};

SVGPathSegCurvetoQuadraticAbs.prototype.matrixTransform = function( aSVGMatrix )
{
SVGPathMatrixTransform( this, aSVGMatrix );
var nX = this.x1;
this.x1 = aSVGMatrix.a * nX + aSVGMatrix.c * this.y1 + aSVGMatrix.e;
this.y1 = aSVGMatrix.b * nX + aSVGMatrix.d * this.y1 + aSVGMatrix.f;
};

SVGPathSegCurvetoCubicAbs.prototype.matrixTransform = function( aSVGMatrix )
{
SVGPathMatrixTransform( this, aSVGMatrix );
var nX = this.x1;
this.x1 = aSVGMatrix.a * nX + aSVGMatrix.c * this.y1 + aSVGMatrix.e;
this.y1 = aSVGMatrix.b * nX + aSVGMatrix.d * this.y1 + aSVGMatrix.f;
nX = this.x2;
this.x2 = aSVGMatrix.a * nX + aSVGMatrix.c * this.y2 + aSVGMatrix.e;
this.y2 = aSVGMatrix.b * nX + aSVGMatrix.d * this.y2 + aSVGMatrix.f;
};


SVGPathSegMovetoAbs.prototype.changeOrientation = function( nCurrentX, nCurrentY )
{
var aPoint = { x: this.x, y: this.y };
this.x = nCurrentX;
this.y = nCurrentY;
return aPoint;
};

SVGPathSegLinetoAbs.prototype.changeOrientation = function( nCurrentX, nCurrentY )
{
var aPoint = { x: this.x, y: this.y };
this.x = nCurrentX;
this.y = nCurrentY;
return aPoint;
};

SVGPathSegCurvetoQuadraticAbs.prototype.changeOrientation = function( nCurrentX, nCurrentY )
{
var aPoint = { x: this.x, y: this.y };
this.x = nCurrentX;
this.y = nCurrentY;
return aPoint;
};

SVGPathSegCurvetoCubicAbs.prototype.changeOrientation = function( nCurrentX, nCurrentY )
{
var aPoint = { x: this.x, y: this.y };
this.x = nCurrentX;
this.y = nCurrentY;
var nX = this.x1;
this.x1 = this.x2;
this.x2 = nX;
var nY = this.y1;
this.y1 = this.y2;
this.y2 = nY;
return aPoint;
};

}
catch( e )
{   // Opera

if( e.name == 'ReferenceError' )
{
SVGPathSeg.prototype.matrixTransform = function( aSVGMatrix )
{
var nX;
switch( this.pathSegTypeAsLetter )
{
case 'C':
nX = this.x2;
this.x2 = aSVGMatrix.a * nX + aSVGMatrix.c * this.y2 + aSVGMatrix.e;
this.y2 = aSVGMatrix.b * nX + aSVGMatrix.d * this.y2 + aSVGMatrix.f;
case 'Q':
nX = this.x1;
this.x1 = aSVGMatrix.a * nX + aSVGMatrix.c * this.y1 + aSVGMatrix.e;
this.y1 = aSVGMatrix.b * nX + aSVGMatrix.d * this.y1 + aSVGMatrix.f;
case 'M':
case 'L':
SVGPathMatrixTransform( this, aSVGMatrix );
break;
default:
log( 'SVGPathSeg.matrixTransform: unexpected path segment type: '
+ this.pathSegTypeAsLetter );
}
};

SVGPathSeg.prototype.changeOrientation = function( nCurrentX, nCurrentY )
{
switch( this.pathSegTypeAsLetter )
{
case 'C':
var nX = this.x1;
this.x1 = this.x2;
this.x2 = nX;
var nY = this.y1;
this.y1 = this.y2;
this.y2 = nY;
case 'M':
case 'L':
case 'Q':
var aPoint = { x: this.x, y: this.y };
this.x = nCurrentX;
this.y = nCurrentY;
return aPoint;
                            
var nHue = this.nHue % 360;
if( nHue < 0 ) nHue += 360;
var nSaturation =  clamp( this.nSaturation, 0.0, 1.0 );
var nLuminance = clamp( this.nLuminance, 0.0, 1.0 );


if( nSaturation === 0 )
{
return new RGBColor( nLuminance, nLuminance, nLuminance );
}

var nVal1 = ( nLuminance <= 0.5 ) ?
( nLuminance * (1.0 + nSaturation) ) :
( nLuminance + nSaturation - nLuminance * nSaturation );

var nVal2 = 2.0 * nLuminance - nVal1;

var nRed    = HSLColor.hsl2rgbHelper( nVal2, nVal1, nHue + 120 );
var nGreen  = HSLColor.hsl2rgbHelper( nVal2, nVal1, nHue );
var nBlue   = HSLColor.hsl2rgbHelper( nVal2, nVal1, nHue - 120 );

return new RGBColor( nRed, nGreen, nBlue );
};

HSLColor.hsl2rgbHelper = function( nValue1, nValue2, nHue )
{
nHue = nHue % 360;
if( nHue < 0 )
nHue += 360;

if( nHue < 60.0 )
return nValue1 + ( nValue2 - nValue1 ) * nHue / 60.0;
else if( nHue < 180.0 )
return nValue2;
else if( nHue < 240.0 )
return ( nValue1 + ( nValue2 - nValue1 ) * ( 240.0 - nHue ) / 60.0 );
else
return nValue1;
};

HSLColor.interpolate = function( aFrom, aTo, nT, bCCW )
{
var nS = 1.0 - nT;

var nHue = 0.0;
if( aFrom.nHue <= aTo.nHue && !bCCW )
{
nHue = nS * (aFrom.nHue + 360.0) + nT * aTo.nHue;
}
else if( aFrom.nHue > aTo.nHue && bCCW )
{
nHue = nS * aFrom.nHue + nT * (aTo.nHue + 360.0);
}
else
{
nHue = nS * aFrom.nHue + nT * aTo.nHue;
}

var nSaturation = nS * aFrom.nSaturation + nT * aTo.nSaturation;
var nLuminance = nS * aFrom.nLuminance + nT * aTo.nLuminance;

return new HSLColor( nHue, nSaturation, nLuminance );
};


var SVGIdentityMatrix = document.documentElement.createSVGMatrix();

SVGMatrix.prototype.setToIdentity = function()
{
this.a = this.d = 1;
this.b = this.c = this.d = this.e = 0;
};

SVGMatrix.prototype.setToRotationAroundPoint = function( nX, nY, nAngle )
{
nAngle = Math.PI * nAngle / 180;
var nSin = Math.sin( nAngle );
var nCos = Math.cos( nAngle );

this.a = nCos; this.c = -nSin; this.e = nX * (1 - nCos) + nY * nSin;
this.b = nSin; this.d =  nCos; this.f = nY * (1 - nCos) - nX * nSin;
};


SVGPathElement.prototype.prependPath = function( aPath )
{
var sPathData = aPath.getAttribute( 'd' );
sPathData += ( ' ' + this.getAttribute( 'd' ) );
this.setAttribute( 'd', sPathData );
};

SVGPathElement.prototype.appendPath = function( aPath )
{
var sPathData = this.getAttribute( 'd' );
sPathData += ( ' ' + aPath.getAttribute( 'd' ) );
this.setAttribute( 'd', sPathData );
};

function flipOnYAxis( aPath )
{
var aPolyPath = aPath.cloneNode(true);
var aTransform = document.documentElement.createSVGMatrix();
aTransform.a = -1;
aTransform.e = 1;
aPolyPath.matrixTransform(aTransform);
return aPolyPath;
}

function flipOnXAxis( aPath )
{
var aPolyPath = aPath.cloneNode(true);
var aTransform = document.documentElement.createSVGMatrix();
aTransform.d = -1;
aTransform.f = 1;
aPolyPath.matrixTransform(aTransform);
return aPolyPath;
}

SVGPathElement.prototype.matrixTransform = function( aSVGMatrix )
{
if( SVGPathSegList.prototype.matrixTransform )
{
this.pathSegList.matrixTransform( aSVGMatrix );
return;
}

var aPathSegList = this.pathSegList;
var nLength = aPathSegList.numberOfItems;
var i;
for( i = 0; i < nLength; ++i )
{
aPathSegList.getItem( i ).matrixTransform( aSVGMatrix );
}
};

SVGPathElement.prototype.changeOrientation = function()
{
var aPathSegList = this.pathSegList;
var nLength = aPathSegList.numberOfItems;
if( nLength == 0 ) return;

if( SVGPathSegList.prototype.changeOrientation )
{
aPathSegList.changeOrientation();
return;
}

var nCurrentX = 0;
var nCurrentY = 0;
                             this.nGreen *= aT;
this.nBlue *= aT;
return this;
};

RGBColor.clamp = function( aRGBColor )
{
var aClampedRGBColor = new RGBColor( 0, 0, 0 );

aClampedRGBColor.nRed   = clamp( aRGBColor.nRed, 0.0, 1.0 );
aClampedRGBColor.nGreen = clamp( aRGBColor.nGreen, 0.0, 1.0 );
aClampedRGBColor.nBlue  = clamp( aRGBColor.nBlue, 0.0, 1.0 );

return aClampedRGBColor;
};

RGBColor.prototype.convertToHSL = function()
{
var nRed   = clamp( this.nRed, 0.0, 1.0 );
var nGreen = clamp( this.nGreen, 0.0, 1.0 );
var nBlue  = clamp( this.nBlue, 0.0, 1.0 );

var nMax = Math.max( nRed, nGreen, nBlue );
var nMin = Math.min( nRed, nGreen, nBlue );
var nDelta = nMax - nMin;

var nLuminance  = ( nMax + nMin ) / 2.0;
var nSaturation = 0.0;
var nHue = 0.0;
if( nDelta !== 0 )
{
nSaturation = ( nLuminance > 0.5 ) ?
( nDelta / ( 2.0 - nMax - nMin) ) :
( nDelta / ( nMax + nMin ) );

if( nRed == nMax )
nHue = ( nGreen - nBlue ) / nDelta;
else if( nGreen == nMax )
nHue = 2.0 + ( nBlue - nRed ) / nDelta;
else if( nBlue == nMax )
nHue = 4.0 + ( nRed - nGreen ) / nDelta;

nHue *= 60.0;

if( nHue < 0.0 )
nHue += 360.0;
}

return new HSLColor( nHue, nSaturation, nLuminance );

};

RGBColor.prototype.toString = function( bClamped )
{
var aRGBColor;
if( bClamped )
{
aRGBColor = RGBColor.clamp( this );
}
else
{
aRGBColor = this;
}

var nRed = Math.round( aRGBColor.nRed * 255 );
var nGreen = Math.round( aRGBColor.nGreen * 255 );
var nBlue = Math.round( aRGBColor.nBlue * 255 );

return ( 'rgb(' + nRed + ',' + nGreen + ',' + nBlue + ')' );
};

RGBColor.interpolate = function( aStartRGB , aEndRGB, nT )
{
var aResult = aStartRGB.clone();
var aTEndRGB = aEndRGB.clone();
aResult.scale( 1.0 - nT );
aTEndRGB.scale( nT );
aResult.add( aTEndRGB );

return aResult;
};


function HSLColor( nHue, nSaturation, nLuminance )
{
this.eColorSpace = COLOR_SPACE_HSL;
this.nHue = nHue;
this.nSaturation = nSaturation;
this.nLuminance = nLuminance;

this.normalizeHue();
}


HSLColor.prototype.clone = function()
{
return new HSLColor( this.nHue, this.nSaturation, this.nLuminance );
};

HSLColor.prototype.equal = function( aHSLColor )
{
return ( this.nHue == aHSLColor.nHue ) &&
( this.nSaturation += aHSLColor.nSaturation ) &&
( this.nLuminance += aHSLColor.nLuminance );
};

HSLColor.prototype.add = function( aHSLColor )
{
this.nHue += aHSLColor.nHue;
this.nSaturation += aHSLColor.nSaturation;
this.nLuminance += aHSLColor.nLuminance;
this.normalizeHue();
return this;
};

HSLColor.prototype.scale = function( aT )
{
this.nHue *= aT;
this.nSaturation *= aT;
this.nLuminance *= aT;
this.normalizeHue();
return this;
};

HSLColor.clamp = function( aHSLColor )
{
var aClampedHSLColor = new HSLColor( 0, 0, 0 );

aClampedHSLColor.nHue = aHSLColor.nHue % 360;
if( aClampedHSLColor.nHue < 0 )
aClampedHSLColor.nHue += 360;
aClampedHSLColor.nSaturation = clamp( aHSLColor.nSaturation, 0.0, 1.0 );
aClampedHSLColor.nLuminance = clamp( aHSLColor.nLuminance, 0.0, 1.0 );
};

HSLColor.prototype.normalizeHue = function()
{
this.nHue = this.nHue % 360;
if( this.nHue < 0 ) this.nHue += 360;
};

HSLColor.prototype.toString = function()
{
return 'hsl(' + this.nHue.toFixed( 3 ) + ','
+ this.nSaturation.toFixed( 3 ) + ','
+ this.nLuminance.toFixed( 3 ) + ')';
};

HSLColor.prototype.convertToRGB = function()
{
                             s += e + ', ';
s += f + ')';

return s;
}

function matrixToString( aSVGMatrix )
{
return makeMatrixString( aSVGMatrix.a, aSVGMatrix.b, aSVGMatrix.c,
aSVGMatrix.d, aSVGMatrix.e, aSVGMatrix.f );
}


function numberParser( sValue )
{
if( typeof sValue !== 'string' )
return undefined;
if( sValue === '.' )
return undefined;
var reFloatNumber = /^[+-]?[0-9]*[.]?[0-9]*$/;

if( reFloatNumber.test( sValue ) )
return parseFloat( sValue );
else
return undefined;
}

function booleanParser( sValue )
{
if( typeof sValue !== 'string' )
return undefined;

sValue = sValue.toLowerCase();
if( sValue === 'true' )
return true;
else if( sValue === 'false' )
return false;
else
return undefined;
}

function colorParser( sValue )
{
if( typeof sValue !== 'string' )
return undefined;


function hsl( nHue, nSaturation, nLuminance )
{
return new HSLColor( nHue, nSaturation / 100, nLuminance / 100 );
}

function rgb( nRed, nGreen, nBlue )
{
return new RGBColor( nRed / 255, nGreen / 255, nBlue / 255 );
}

function prgb( nRed, nGreen, nBlue )
{
return new RGBColor( nRed / 100, nGreen / 100, nBlue / 100 );
}

var sCommaPattern = ' *[,] *';
var sIntegerPattern = '[+-]?[0-9]+';
var sHexDigitPattern = '[0-9A-Fa-f]';

var sHexColorPattern = '#(' + sHexDigitPattern + '{2})('
+ sHexDigitPattern + '{2})('
+ sHexDigitPattern + '{2})';

var sRGBIntegerPattern = 'rgb[(] *' + sIntegerPattern + sCommaPattern
+ sIntegerPattern + sCommaPattern
+ sIntegerPattern + ' *[)]';

var sRGBPercentPattern = 'rgb[(] *' + sIntegerPattern + '%' + sCommaPattern
+ sIntegerPattern + '%' + sCommaPattern
+ sIntegerPattern + '%' + ' *[)]';

var sHSLPercentPattern = 'hsl[(] *' + sIntegerPattern + sCommaPattern
+ sIntegerPattern + '%' + sCommaPattern
+ sIntegerPattern + '%' + ' *[)]';

var reHexColor = new RegExp( sHexColorPattern );
var reRGBInteger = new RegExp( sRGBIntegerPattern );
var reRGBPercent = new RegExp( sRGBPercentPattern );
var reHSLPercent = new RegExp( sHSLPercentPattern );

if( reHexColor.test( sValue ) )
{
var aRGBTriple = reHexColor.exec( sValue );

var nRed    = parseInt( aRGBTriple[1], 16 ) / 255;
var nGreen  = parseInt( aRGBTriple[2], 16 ) / 255;
var nBlue   = parseInt( aRGBTriple[3], 16 ) / 255;

return new RGBColor( nRed, nGreen, nBlue );
}
else if( reHSLPercent.test( sValue ) )
{
sValue = sValue.replace( '%', '' ).replace( '%', '' );
return eval( sValue );
}
else if( reRGBInteger.test( sValue ) )
{
return eval( sValue );
}
else if( reRGBPercent.test( sValue ) )
{
sValue = 'p' + sValue.replace( '%', '' ).replace( '%', '' ).replace( '%', '' );
return eval( sValue );
}
else
{
return null;
}
}


function RGBColor( nRed, nGreen, nBlue )
{
this.eColorSpace = COLOR_SPACE_RGB;
this.nRed = nRed;
this.nGreen = nGreen;
this.nBlue = nBlue;
}


RGBColor.prototype.clone = function()
{
return new RGBColor( this.nRed, this.nGreen, this.nBlue );
};

RGBColor.prototype.equal = function( aRGBColor )
{
return ( this.nRed == aRGBColor.nRed ) &&
( this.nGreen == aRGBColor.nGreen ) &&
( this.nBlue == aRGBColor.nBlue );
};

RGBColor.prototype.add = function( aRGBColor )
{
this.nRed += aRGBColor.nRed;
this.nGreen += aRGBColor.nGreen;
this.nBlue += aRGBColor.nBlue;
return this;
};

RGBColor.prototype.scale = function( aT )
{
this.nRed *= aT;
                              currentMode = SLIDE_MODE;
}
}

function abandonIndexMode()
{
theSlideIndexPage.selectedSlideIndex = nCurSlide;
toggleSlideIndex();
}


var CURR_UNIQUE_ID = 0;

function getUniqueId()
{
++CURR_UNIQUE_ID;
return CURR_UNIQUE_ID;
}

function mem_fn( sMethodName )
{
return  function( aObject )
{
var aMethod = aObject[ sMethodName ];
if( aMethod )
aMethod.call( aObject );
else
log( 'method sMethodName not found' );
};
}

function bind( aObject, aMethod )
{
return  function()
{
return aMethod.call( aObject, arguments[0] );
};
}

function bind2( aFunction )
{
if( !aFunction  )
log( 'bind2: passed function is not valid.' );

var aBoundArgList = arguments;

var aResultFunction = null;

switch( aBoundArgList.length )
{
case 1: aResultFunction = function()
{
return aFunction.call( arguments[0], arguments[1],
arguments[2], arguments[3],
arguments[4] );
};
break;
case 2: aResultFunction = function()
{
return aFunction.call( aBoundArgList[1], arguments[0],
arguments[1], arguments[2],
arguments[3] );
};
break;
case 3: aResultFunction = function()
{
return aFunction.call( aBoundArgList[1], aBoundArgList[2],
arguments[0], arguments[1],
arguments[2] );
};
break;
case 4: aResultFunction = function()
{
return aFunction.call( aBoundArgList[1], aBoundArgList[2],
aBoundArgList[3], arguments[0],
arguments[1] );
};
break;
case 5: aResultFunction = function()
{
return aFunction.call( aBoundArgList[1], aBoundArgList[2],
aBoundArgList[3], aBoundArgList[4],
arguments[0] );
};
break;
default:
log( 'bind2: arity not handled.' );
}

return aResultFunction;
}

function getCurrentSystemTime()
{
return ( new Date() ).getTime();
}

function getSlideAnimationsRoot( sSlideId )
{
return theMetaDoc.aSlideAnimationsMap[ sSlideId ];
}

function getElementChildren( aElement )
{
var aChildrenArray = [];

var nSize = aElement.childNodes.length;

for( var i = 0; i < nSize; ++i )
{
if( aElement.childNodes[i].nodeType == 1 )
aChildrenArray.push( aElement.childNodes[i] );
}

return aChildrenArray;
}

function removeWhiteSpaces( str )
{
if( !str )
return '';

var re = / */;
var aSplitString = str.split( re );
return aSplitString.join('');
}

function clamp( nValue, nMinimum, nMaximum )
{
if( nValue < nMinimum )
{
return nMinimum;
}
else if( nValue > nMaximum )
{
return nMaximum;
}
else
{
return nValue;
}
}

function makeMatrixString( a, b, c, d, e, f )
{
var s = 'matrix(';
s += a + ', ';
s += b + ', ';
s += c + ', ';
s += d + ', ';
       if( ( currentMode == INDEX_MODE ) && ( this.container.curThumbnailIndex !=  this.index ) )
{
this.container.setSelection( this.index );
}
};


function init()
{
var VIEWBOX = ROOT_NODE.getAttribute('viewBox');

if( VIEWBOX )
{
WIDTH = ROOT_NODE.viewBox.animVal.width;
HEIGHT = ROOT_NODE.viewBox.animVal.height;
}

aSlideShow = new SlideShow();
theMetaDoc =  new MetaDocument();
aSlideShow.bIsEnabled = theMetaDoc.bIsAnimated;
theSlideIndexPage = new SlideIndexPage();
aSlideShow.displaySlide( theMetaDoc.nStartSlideNumber, false );

var hammer = new Hammer(ROOT_NODE);
hammer.on('swipeleft', function() {
switchSlide(1, false);
});
hammer.on('swiperight', function() {
switchSlide(-1, false);
});
hammer.get('swipe').set({ direction: Hammer.DIRECTION_ALL });
hammer.on('swipeup', function() {
aSlideShow.exitSlideShowInApp();
});
hammer.on('swipedown', function() {
aSlideShow.exitSlideShowInApp();
});
}

function presentationEngineStop(message)
{
alert( message + '\nThe presentation engine will be stopped' );
document.onkeydown = null;
document.onkeypress = null;
document.onclick = null;
window.onmousewheel = null;
}

function assert( condition, message )
{
if (!condition)
{
presentationEngineStop( message );
if (typeof console == 'object')
console.trace();
throw new Error( message );
}
}

function dispatchEffects(dir)
{

if( dir == 1 )
{
var bRet = aSlideShow.nextEffect();

if( !bRet )
{
switchSlide( 1, false );
}
}
else
{
switchSlide( dir, false );
}
}

function skipAllEffects()
{
var bRet = aSlideShow.skipAllEffects();
if( !bRet )
{
switchSlide( 1, true );
}
}

function skipEffects(dir)
{
if( dir == 1 )
{
var bRet = aSlideShow.skipPlayingOrNextEffect();

if( !bRet )
{
switchSlide( 1, true );
}
}
else
{
switchSlide( dir, true );
}
}

function switchSlide( nOffset, bSkipTransition )
{
var nNextSlide = nCurSlide + nOffset;
aSlideShow.displaySlide( nNextSlide, bSkipTransition );
}

function displayIndex( offsetNumber )
{
var aMetaSlideSet = theMetaDoc.aMetaSlideSet;
offsetNumber = getSafeIndex( offsetNumber, 0, aMetaSlideSet.length - 1 );

var nTotalThumbnails = theSlideIndexPage.getTotalThumbnails();
var nEnd = Math.min( offsetNumber + nTotalThumbnails, aMetaSlideSet.length);

var aThumbnailSet = theSlideIndexPage.aThumbnailSet;
var j = 0;
for( var i = offsetNumber; i < nEnd; ++i, ++j )
{
aThumbnailSet[j].update( i );
aThumbnailSet[j].show();
}
for( ; j < nTotalThumbnails; ++j )
{
aThumbnailSet[j].hide();
}

if (INDEX_OFFSET != offsetNumber)
INDEX_OFFSET = offsetNumber;
}

function toggleSlideIndex()
{
if( currentMode == SLIDE_MODE )
{

theMetaDoc.getCurrentSlide().hide();
INDEX_OFFSET = -1;
indexSetPageSlide( nCurSlide );
theSlideIndexPage.show();
currentMode = INDEX_MODE;
}
else if( currentMode == INDEX_MODE )
{
theSlideIndexPage.hide();
var nNewSlide = theSlideIndexPage.selectedSlideIndex;

aSlideShow.displaySlide( nNewSlide, true );
   for( i = 0; i < this.totalThumbnails; ++i )
{
this.aThumbnailSet[i].updateView();
}

this.curThumbnailIndex = this.selectedSlideIndex % this.totalThumbnails;
this.aThumbnailSet[this.curThumbnailIndex].select();

INDEX_OFFSET = -1;
indexSetPageSlide( this.selectedSlideIndex );

ROOT_NODE.unsuspendRedraw( suspendHandle );
ROOT_NODE.forceRedraw();
};


function Thumbnail( aSlideIndexPage, nIndex )
{
this.container = aSlideIndexPage;
this.index = nIndex;//= getSafeIndex( nIndex, 0, this.container.getTotalThumbnails() );
this.pageElement = this.container.pageElement;
this.thumbnailId = 'thumbnail' + this.index;
this.thumbnailElement = this.createThumbnailElement();
this.slideElement = getElementByClassName( this.thumbnailElement, 'Slide' );
this.borderElement = getElementByClassName( this.thumbnailElement, 'Border' );
this.mouseAreaElement = getElementByClassName( this.thumbnailElement, 'MouseArea' );
this.aTransformSet = new Array( 3 );
this.visibility = VISIBLE;
this.isSelected = false;
}

Thumbnail.prototype.sNormalBorderColor = 'rgb(216,216,216)';
Thumbnail.prototype.sSelectionBorderColor = 'rgb(92,92,255)';

Thumbnail.prototype.removeElement = function()
{
if( this.thumbnailElement )
this.container.pageElement.removeChild( this.thumbnailElement );
};

Thumbnail.prototype.show = function()
{
if( this.visibility == HIDDEN )
{
this.thumbnailElement.setAttribute( 'display', 'inherit' );
this.visibility = VISIBLE;
}
};

Thumbnail.prototype.hide = function()
{
if( this.visibility == VISIBLE )
{
this.thumbnailElement.setAttribute( 'display', 'none' );
this.visibility = HIDDEN;
}
};

Thumbnail.prototype.select = function()
{
if( !this.isSelected )
{
this.borderElement.setAttribute( 'stroke', this.sSelectionBorderColor );
this.isSelected = true;
}
};

Thumbnail.prototype.unselect = function()
{
if( this.isSelected )
{
this.borderElement.setAttribute( 'stroke', this.sNormalBorderColor );
this.isSelected = false;
}
};

Thumbnail.prototype.updateView = function()
{
this.column = this.index % this.container.indexColumns;
this.row = ( this.index - this.column ) / this.container.indexColumns;
this.halfBorderWidth = this.container.halfBorderWidth;
this.borderWidth = this.container.borderWidth;
this.width = ( WIDTH + this.borderWidth ) * this.container.scaleFactor;
this.height = ( HEIGHT + this.borderWidth ) * this.container.scaleFactor;
this.aTransformSet[2] = 'translate(' + this.halfBorderWidth + ' ' + this.halfBorderWidth + ')';
this.aTransformSet[1] = 'scale(' + this.container.scaleFactor + ')';
var sTransformAttrValue = this.computeTransform();
this.thumbnailElement.setAttribute( 'transform', sTransformAttrValue );
this.mouseAreaElement.setAttribute( 'onmouseover', 'theSlideIndexPage.aThumbnailSet[' + this.index  + '].onMouseOver()' );
};

Thumbnail.prototype.update = function( nIndex )
{
if( this.slideIndex == nIndex )  return;

var aMetaSlide = theMetaDoc.aMetaSlideSet[nIndex];
aMetaSlide.updateMasterPageView();
setNSAttribute( 'xlink', this.slideElement, 'href', '#' + aMetaSlide.slideId );
this.slideIndex = nIndex;
};

Thumbnail.prototype.clear = function( )
{
setNSAttribute( 'xlink', this.slideElement, 'href', '' );
};

Thumbnail.prototype.createThumbnailElement = function()
{
var aThumbnailElement = document.createElementNS( NSS['svg'], 'g' );
aThumbnailElement.setAttribute( 'id', this.thumbnailId );
aThumbnailElement.setAttribute( 'display', 'inherit' );

var aSlideElement = document.createElementNS( NSS['svg'], 'use' );
setNSAttribute( 'xlink', aSlideElement, 'href', '' );
aSlideElement.setAttribute( 'class', 'Slide' );
aThumbnailElement.appendChild( aSlideElement );

var aMouseAreaElement = document.createElementNS( NSS['svg'], 'use' );
setNSAttribute( 'xlink', aMouseAreaElement, 'href', '#' + this.container.thumbnailMouseAreaTemplateId );
aMouseAreaElement.setAttribute( 'class', 'MouseArea' );
aMouseAreaElement.setAttribute( 'opacity', 0.0 );
aThumbnailElement.appendChild( aMouseAreaElement );

var aBorderElement = document.createElementNS( NSS['svg'], 'use' );
setNSAttribute( 'xlink', aBorderElement, 'href', '#' + this.container.thumbnailBorderTemplateId );
aBorderElement.setAttribute( 'stroke', this.sNormalBorderColor );
aBorderElement.setAttribute( 'class', 'Border' );
aThumbnailElement.appendChild( aBorderElement );

this.container.pageElement.appendChild( aThumbnailElement );
return( document.getElementById( this.thumbnailId ) );
};

Thumbnail.prototype.computeTransform = function()
{
var nXSpacing = this.container.xSpacing;
var nYSpacing = this.container.ySpacing;

var nXOffset = nXSpacing + ( this.width + nXSpacing ) * this.column;
var nYOffset = nYSpacing + ( this.height + nYSpacing ) * this.row;

this.aTransformSet[0] = 'translate(' + nXOffset + ' ' + nYOffset + ')';

var sTransform = this.aTransformSet.join( ' ' );

return sTransform;
};

Thumbnail.prototype.onMouseOver = function()
{
             ( this.indexColumns * ( 1 + 2 * this.halfBorderWidthFactor ) );

this.thumbnailMouseAreaTemplateId = 'thumbnail_mouse_area';
this.thumbnailMouseAreaTemplateElement = null;
this.thumbnailBorderTemplateId = 'thumbnail_border';
this.thumbnailBorderTemplateElement = null;
this.createTemplateElements();

this.aThumbnailSet = new Array( this.totalThumbnails );
for( var i = 0; i < this.totalThumbnails; ++i )
{
this.aThumbnailSet[i] = new Thumbnail( this, i );
this.aThumbnailSet[i].updateView();
}

this.curThumbnailIndex = 0;
}


SlideIndexPage.prototype.getTotalThumbnails = function()
{
return this.totalThumbnails;
};

SlideIndexPage.prototype.show = function()
{
this.pageElement.setAttribute( 'display', 'inherit' );
};

SlideIndexPage.prototype.hide = function()
{
this.pageElement.setAttribute( 'display', 'none' );
};

SlideIndexPage.prototype.setSelection = function( nIndex )
{
nIndex = getSafeIndex( nIndex, 0, this.getTotalThumbnails() - 1 );
if( this.curThumbnailIndex != nIndex )
{
this.aThumbnailSet[ this.curThumbnailIndex ].unselect();
this.aThumbnailSet[ nIndex ].select();
this.curThumbnailIndex = nIndex;
}
this.selectedSlideIndex = this.aThumbnailSet[ nIndex ].slideIndex;
};

SlideIndexPage.prototype.createPageElement = function()
{
var aPageElement = document.createElementNS( NSS['svg'], 'g' );
aPageElement.setAttribute( 'id', this.pageElementId );
aPageElement.setAttribute( 'display', 'none' );
aPageElement.setAttribute( 'visibility', 'visible' );

var sPageBgColor = this.pageBgColor + ';';
var aRectElement = document.createElementNS( NSS['svg'], 'rect' );
aRectElement.setAttribute( 'x', 0 );
aRectElement.setAttribute( 'y', 0 );
aRectElement.setAttribute( 'width', WIDTH );
aRectElement.setAttribute( 'height', HEIGHT );
aRectElement.setAttribute( 'style', 'stroke:none;fill:' + sPageBgColor );

aPageElement.appendChild( aRectElement );
ROOT_NODE.appendChild( aPageElement );
return( document.getElementById( this.pageElementId ) );
};

SlideIndexPage.prototype.createTemplateElements = function()
{
var aDefsElement = document.createElementNS( NSS['svg'], 'defs' );
var aRectElement = document.createElementNS( NSS['svg'], 'rect' );
aRectElement.setAttribute( 'id', this.thumbnailBorderTemplateId );
aRectElement.setAttribute( 'x', -this.halfBorderWidth );
aRectElement.setAttribute( 'y', -this.halfBorderWidth );
aRectElement.setAttribute( 'rx', this.halfBorderWidth );
aRectElement.setAttribute( 'ry', this.halfBorderWidth );
aRectElement.setAttribute( 'width', WIDTH + this.halfBorderWidth );
aRectElement.setAttribute( 'height', HEIGHT + this.halfBorderWidth );
aRectElement.setAttribute( 'stroke-width', this.borderWidth );
aRectElement.setAttribute( 'fill', 'none' );
aDefsElement.appendChild( aRectElement );

aRectElement = document.createElementNS( NSS['svg'], 'rect' );
aRectElement.setAttribute( 'id', this.thumbnailMouseAreaTemplateId );
aRectElement.setAttribute( 'x', 0 );
aRectElement.setAttribute( 'y', 0 );
aRectElement.setAttribute( 'width', WIDTH );
aRectElement.setAttribute( 'height', HEIGHT );
aRectElement.setAttribute( 'fill', this.pageBgColor );
aDefsElement.appendChild( aRectElement );

this.pageElement.appendChild( aDefsElement );

this.thumbnailMouseAreaTemplateElement = document.getElementById( this.thumbnailMouseAreaTemplateId );
this.thumbnailBorderTemplateElement = document.getElementById( this.thumbnailBorderTemplateId );
};

SlideIndexPage.prototype.decreaseNumberOfColumns  = function()
{
this.setNumberOfColumns( this.indexColumns - 1 );
};

SlideIndexPage.prototype.increaseNumberOfColumns  = function()
{
this.setNumberOfColumns( this.indexColumns + 1 );
};

SlideIndexPage.prototype.resetNumberOfColumns  = function()
{
this.setNumberOfColumns( INDEX_COLUMNS_DEFAULT );
};

SlideIndexPage.prototype.setNumberOfColumns  = function( nNumberOfColumns )
{
if( this.indexColumns == nNumberOfColumns )  return;
if( nNumberOfColumns < 2 || nNumberOfColumns > 6 ) return;

var suspendHandle = ROOT_NODE.suspendRedraw(500);

var nOldTotalThumbnails = this.totalThumbnails;
this.indexColumns = nNumberOfColumns;
this.totalThumbnails = nNumberOfColumns * nNumberOfColumns;

this.aThumbnailSet[this.curThumbnailIndex].unselect();

var i;
for( i = this.totalThumbnails; i < nOldTotalThumbnails; ++i )
{
this.aThumbnailSet[i].removeElement();
}

for( i = nOldTotalThumbnails; i < this.totalThumbnails; ++i )
{
this.aThumbnailSet[i] = new Thumbnail( this, i );
}

this.halfBorderWidthFactor = ( 300/28000 ) * ( this.indexColumns / 3 );
this.halfBorderWidth = WIDTH * this.halfBorderWidthFactor;
this.borderWidth = 2 * this.halfBorderWidth;
this.scaleFactor = ( 1 - ( this.indexColumns + 1 ) * this.xSpacingFactor ) /
( this.indexColumns * ( 1 + 2 * this.halfBorderWidthFactor ) );

var aRectElement = this.thumbnailBorderTemplateElement;
aRectElement.setAttribute( 'x', -this.halfBorderWidth );
aRectElement.setAttribute( 'y', -this.halfBorderWidth );
aRectElement.setAttribute( 'rx', this.halfBorderWidth );
aRectElement.setAttribute( 'ry', this.halfBorderWidth );
aRectElement.setAttribute( 'width', WIDTH + this.halfBorderWidth );
aRectElement.setAttribute( 'height', HEIGHT + this.halfBorderWidth );
aRectElement.setAttribute( 'stroke-width', this.borderWidth );

                 log( 'PlaceholderShape.setTextContent: text element is not valid in placeholder of type '
+ this.className + ' that belongs to master slide ' + this.masterPage.id );
return;
}
this.aTextPlaceholderElement.textContent = sText;
};

TextFieldHandler.prototype.update = function()
{
if( !this.aTextContentProvider )
log('TextFieldHandler.update: text content provider not defined.');
else
this.aTextContentProvider.update( this );
};

function SlideNumberFieldHandler( aPlaceholderShape, aTextContentProvider )
{
SlideNumberFieldHandler.superclass.constructor.call( this, aPlaceholderShape, aTextContentProvider );
}
extend( SlideNumberFieldHandler, TextFieldHandler );


SlideNumberFieldHandler.prototype.update = function( nPageNumber )
{
if( !this.aTextContentProvider )
log('TextFieldHandler.update: text content provider not defined.');
else
this.aTextContentProvider.update( this, nPageNumber );
};


function TextFieldContentProvider()
{
this.sId = TextFieldContentProvider.getUniqueId();
}


TextFieldContentProvider.CURR_UNIQUE_ID = 0;

TextFieldContentProvider.getUniqueId = function()
{
++TextFieldContentProvider.CURR_UNIQUE_ID;
return TextFieldContentProvider.CURR_UNIQUE_ID;
};

function FixedTextProvider( aText )
{
FixedTextProvider.superclass.constructor.call( this );
this.text = aText;
}
extend( FixedTextProvider, TextFieldContentProvider );


FixedTextProvider.prototype.update = function( aFixedTextField )
{
aFixedTextField.setTextContent( this.text );
};

function FixedTextByElementProvider( aTextFieldContentElement )
{
FixedTextByElementProvider.superclass.constructor.call( this, aTextFieldContentElement.textContent );
}
extend( FixedTextByElementProvider, FixedTextProvider );

function CurrentDateTimeProvider( aTextFieldContentElement, sDateTimeFormat )
{
CurrentDateTimeProvider.superclass.constructor.call( this, aTextFieldContentElement );
if( aTextFieldContentElement )
this.dateTimeFormat = getOOOAttribute( aTextFieldContentElement, aOOOAttrDateTimeFormat );
else
{
this.dateTimeFormat = sDateTimeFormat;
}
}
extend( CurrentDateTimeProvider, TextFieldContentProvider );


CurrentDateTimeProvider.prototype.update = function( aDateTimeField )
{
var sText = this.createDateTimeText();
aDateTimeField.setTextContent( sText );
};


CurrentDateTimeProvider.prototype.createDateTimeText = function()
{
var sDate;
if( this.dateTimeFormat === '<date>' )
sDate = new Date().toLocaleDateString();
else if( this.dateTimeFormat === '<time>' )
sDate = new Date().toLocaleTimeString();
else
sDate = new Date().toLocaleDateString();
return sDate;
};

function SlideNumberProvider( nInitialSlideNumber, sPageNumberingType )
{
SlideNumberProvider.superclass.constructor.call( this );
this.nInitialSlideNumber = nInitialSlideNumber;
this.pageNumberingType = sPageNumberingType;

}
extend( SlideNumberProvider, TextFieldContentProvider );


SlideNumberProvider.prototype.getNumberingType = function()
{
return this.pageNumberingType;
};


SlideNumberProvider.prototype.update = function( aSlideNumberField, nSlideNumber )
{
if( nSlideNumber === undefined )
{
if( nCurSlide === undefined )
nSlideNumber = this.nInitialSlideNumber;
else
nSlideNumber = nCurSlide + 1;
}
var sText = this.createSlideNumberText( nSlideNumber, this.getNumberingType() );
aSlideNumberField.setTextContent( sText );
};


SlideNumberProvider.prototype.createSlideNumberText = function( nSlideNumber /*, sNumberingType*/ )
{
return String( nSlideNumber );
};


function SlideIndexPage()
{
this.pageElementId = 'slide_index';
this.pageBgColor = 'rgb(252,252,252)';
this.pageElement = this.createPageElement();
assert( this.pageElement, 'SlideIndexPage: pageElement is not valid' );
this.indexColumns = INDEX_COLUMNS_DEFAULT;
this.totalThumbnails = this.indexColumns * this.indexColumns;
this.selectedSlideIndex = undefined;

this.xSpacingFactor = 600/28000;
this.ySpacingFactor = 450/21000;
this.xSpacing = WIDTH * this.xSpacingFactor;
this.ySpacing = HEIGHT * this.ySpacingFactor;
this.halfBorderWidthFactor = ( 300/28000 ) * ( this.indexColumns / 3 );
this.halfBorderWidth = WIDTH * this.halfBorderWidthFactor;
this.borderWidth = 2 * this.halfBorderWidth;
this.scaleFactor = ( 1 - ( this.indexColumns + 1 ) * this.xSpacingFactor ) /
  }
else if( sId === aFooterClassName + '.Default' )
{
if( this.aMetaSlide.nIsFooterVisible )
{
this.aFooterFieldHandler =
this.initTextFieldHandler( sId, aPlaceholderShapeSet,
aTextFieldContentProviderSet, aDefsElement,
aTextFieldHandlerSet, sMasterSlideId );
}
}
else if( sId === aHeaderClassName + '.Default' )
{
if( this.aMetaSlide.nIsHeaderVisible )
{
this.aHeaderFieldHandler =
this.initTextFieldHandler( sId, aPlaceholderShapeSet,
aTextFieldContentProviderSet, aDefsElement,
aTextFieldHandlerSet, sMasterSlideId );
}
}
else if( sId.indexOf( aDateTimeClassName ) == 0
|| sId.indexOf( aFooterClassName ) == 0
|| sId.indexOf( aHeaderClassName ) == 0
|| sId.indexOf( aDateClassName ) == 0
|| sId.indexOf( aTimeClassName ) == 0
|| sId.indexOf( aSlideNameClassName ) == 0 )
{
this.initTextFieldHandler( sId, aPlaceholderShapeSet,
aTextFieldContentProviderSet, aDefsElement,
aTextFieldHandlerSet, sMasterSlideId );
}
else
{
var aBackgroundSubGroupElement = theDocument.createElementNS( NSS['svg'], 'use' );
aBackgroundSubGroupElement.setAttribute( 'class', 'BackgroundObjectSubGroup' );
setNSAttribute( 'xlink', aBackgroundSubGroupElement,
'href', '#' + sId );
this.aBackgroundSubGroupElementSet.push( aBackgroundSubGroupElement );
this.aBackgroundObjectsElement.appendChild( aBackgroundSubGroupElement );
}

}
aMasterPageViewElement.appendChild( this.aBackgroundObjectsElement );
}

return aMasterPageViewElement;
};

MasterPageView.prototype.initTextFieldHandler =
function( sId, aPlaceholderShapeSet, aTextFieldContentProviderSet,
aDefsElement, aTextFieldHandlerSet, sMasterSlideId )
{
var sRefId = null;
var aTextFieldHandler = null;
var sClassName = sId.split('.')[0];
var aPlaceholderShape = aPlaceholderShapeSet[sId];
var aTextFieldContentProvider = aTextFieldContentProviderSet[sClassName];
if( aPlaceholderShape  && aPlaceholderShape.isValid()
&& aTextFieldContentProvider )
{
var sTextFiedHandlerKey = aTextFieldContentProvider.sId + '.' + sId;
if ( !aTextFieldHandlerSet[ sMasterSlideId ][ sTextFiedHandlerKey ] )
{
aTextFieldHandlerSet[ sMasterSlideId ][ sTextFiedHandlerKey ] =
new TextFieldHandler( aPlaceholderShape,
aTextFieldContentProvider );
aTextFieldHandler = aTextFieldHandlerSet[ sMasterSlideId ][ sTextFiedHandlerKey ];
aTextFieldHandler.update();
aTextFieldHandler.appendTo( aDefsElement );
}
else
{
aTextFieldHandler = aTextFieldHandlerSet[ sMasterSlideId ][ sTextFiedHandlerKey ];
}
sRefId = aTextFieldHandler.sId;
}
else if( aPlaceholderShape && aPlaceholderShape.element && aPlaceholderShape.element.firstElementChild
&& !aPlaceholderShape.textElement && !aTextFieldContentProvider )
{
sRefId = aPlaceholderShape.element.firstElementChild.getAttribute('id');
}

if( sRefId )
{
var aTextFieldElement = document.createElementNS(NSS['svg'], 'use');
aTextFieldElement.setAttribute('class', sClassName);
setNSAttribute('xlink', aTextFieldElement,
'href', '#' + sRefId);
this.aBackgroundObjectsElement.appendChild( aTextFieldElement );
}
return aTextFieldHandler;
};

function TextFieldHandler( aPlaceholderShape, aTextContentProvider )
{
this.aPlaceHolderShape = aPlaceholderShape;
this.aTextContentProvider = aTextContentProvider;
assert( this.aTextContentProvider,
'TextFieldHandler: text content provider not defined.' );
this.sId = 'tf' + String( TextFieldHandler.getUniqueId() );
this.aTextFieldElement = null;
this.aTextPlaceholderElement = null;
this.cloneElement();
}


TextFieldHandler.CURR_UNIQUE_ID = 0;

TextFieldHandler.getUniqueId = function()
{
++TextFieldHandler.CURR_UNIQUE_ID;
return TextFieldHandler.CURR_UNIQUE_ID;
};

TextFieldHandler.prototype.cloneElement = function()
{
assert( this.aPlaceHolderShape && this.aPlaceHolderShape.isValid(),
'TextFieldHandler.cloneElement: placeholder shape is not valid.' );
this.aTextFieldElement = this.aPlaceHolderShape.element.cloneNode( true /* deep clone */ );
assert( this.aTextFieldElement,
'TextFieldHandler.cloneElement: aTextFieldElement is not defined' );
this.aTextFieldElement.setAttribute( 'id', this.sId );
this.aTextFieldElement.removeAttribute( 'visibility' );
this.aTextPlaceholderElement = getElementByClassName( this.aTextFieldElement, 'PlaceholderText' );
assert( this.aTextPlaceholderElement,
'TextFieldHandler.cloneElement: aTextPlaceholderElement is not defined' );
};


TextFieldHandler.prototype.appendTo = function( aParentNode )
{
if( !this.aTextFieldElement )
{
log( 'TextFieldHandler.appendTo: aTextFieldElement is not defined' );
return;
}
if( !aParentNode )
{
log( 'TextFieldHandler.appendTo: parent node is not defined' );
return;
}

aParentNode.appendChild( this.aTextFieldElement );
};

TextFieldHandler.prototype.setTextContent = function( sText )
{
if( !this.aTextPlaceholderElement )
{
  {
var i = 0;
for( ; i < aTSpanElements.length; ++i )
{
var aTSpanElem = aTSpanElements[i];
aTSpanElem.removeAttribute( 'x' );
if( i !== 0 )
aTSpanElem.removeAttribute( 'y' );
}
}
}
}

if( this.masterPage.metaSlide.theMetaDoc.bIsUsePositionedChars )
{
var aTextLineGroupElem = aPlaceholderElement.parentNode.parentNode;
if( aTextLineGroupElem )
{
var sFontFamilyAttr = aTextLineGroupElem.getAttribute( 'font-family' );
if( sFontFamilyAttr )
{
var aChildSet = getElementChildren( aTextLineGroupElem );
if( aChildSet.length > 1 )
var i = 1;
for( ; i < aChildSet.length; ++i )
{
aTextLineGroupElem.removeChild( aChildSet[i] );
}
}
}
}
this.textElement = aPlaceholderElement;
}
}
this.element = aTextFieldElement;
}
};

function MasterPageView( aMetaSlide )
{
this.aMetaSlide = aMetaSlide;
this.aSlideElement = aMetaSlide.slideElement;
this.aPageElement = aMetaSlide.pageElement;
this.aMasterPage = aMetaSlide.masterPage;
this.aMPVElement = this.createElement();
this.bIsAttached = false;
}


MasterPageView.prototype.attachToSlide = function()
{
if( !this.bIsAttached )
{
var aInsertedElement = this.aSlideElement.insertBefore( this.aMPVElement, this.aPageElement );
assert( aInsertedElement === this.aMPVElement,
'MasterPageView.attachToSlide: aInsertedElement != this.aMPVElement' );

this.bIsAttached = true;
}
};

MasterPageView.prototype.detachFromSlide = function()
{
if( this.bIsAttached )
{
this.aSlideElement.removeChild( this.aMPVElement );
this.bIsAttached = false;
}
};

MasterPageView.prototype.update = function()
{
if( this.aDateTimeFieldHandler && this.aMetaSlide.bIsDateTimeVariable )
this.aDateTimeFieldHandler.update();
};


MasterPageView.prototype.createElement = function()
{
var theDocument = document;
var aMasterPageViewElement = theDocument.createElementNS( NSS['svg'], 'g' );
assert( aMasterPageViewElement,
'MasterPageView.createElement: failed to create a master page view element.' );
aMasterPageViewElement.setAttribute( 'class', 'MasterPageView' );

var aWhiteRect = theDocument.createElementNS( NSS['svg'], 'rect' );
var nWidthExt = WIDTH / 1000;
var nHeightExt = HEIGHT / 1000;
aWhiteRect.setAttribute( 'x', String( -nWidthExt / 2 ) );
aWhiteRect.setAttribute( 'y', String( -nHeightExt / 2 ) );
aWhiteRect.setAttribute( 'width', String( WIDTH + nWidthExt ) );
aWhiteRect.setAttribute( 'height', String( HEIGHT + nHeightExt ) );
aWhiteRect.setAttribute( 'fill', '#FFFFFF' );
aMasterPageViewElement.appendChild( aWhiteRect );

if( this.aMetaSlide.nIsBackgroundVisible )
{
var nBackgroundId = this.aMetaSlide.bHasCustomBackground ? this.aMetaSlide.backgroundId : this.aMasterPage.backgroundId;
this.aBackgroundElement = theDocument.createElementNS( NSS['svg'], 'use' );
this.aBackgroundElement.setAttribute( 'class', 'Background' );
setNSAttribute( 'xlink', this.aBackgroundElement,
'href', '#' + nBackgroundId );

aMasterPageViewElement.appendChild( this.aBackgroundElement );
}

if( this.aMetaSlide.nAreMasterObjectsVisible )
{
this.aBackgroundObjectsElement = theDocument.createElementNS( NSS['svg'], 'g' );
this.aBackgroundObjectsElement.setAttribute( 'class', 'BackgroundObjects' );

var aBackgroundObjectSubGroupIdList = this.aMasterPage.aBackgroundObjectSubGroupIdList;
this.aBackgroundSubGroupElementSet = [];
var aPlaceholderShapeSet = this.aMasterPage.aPlaceholderShapeSet;
var aTextFieldContentProviderSet = this.aMetaSlide.aTextFieldContentProviderSet;
var aDefsElement = this.aMetaSlide.element.parentNode;
var aTextFieldHandlerSet = this.aMetaSlide.theMetaDoc.aTextFieldHandlerSet;
var sMasterSlideId = this.aMasterPage.id;

var i = 0;
var sId;
for( ; i < aBackgroundObjectSubGroupIdList.length; ++i )
{
sId = aBackgroundObjectSubGroupIdList[i];
if( sId.indexOf( aSlideNumberClassName ) == 0 )
{
var nIsPageNumberVisible = sId === (aSlideNumberClassName + '.Default') ? this.aMetaSlide.nIsPageNumberVisible : true;
if( aPlaceholderShapeSet[sId] &&
aPlaceholderShapeSet[sId].isValid() &&
nIsPageNumberVisible &&
aTextFieldContentProviderSet[aSlideNumberClassName] )
{
var aSlideNumberFieldHandler =
new SlideNumberFieldHandler( aPlaceholderShapeSet[sId],
aTextFieldContentProviderSet[aSlideNumberClassName] );
aSlideNumberFieldHandler.update( this.aMetaSlide.nSlideNumber );
aSlideNumberFieldHandler.appendTo( this.aBackgroundObjectsElement );
if ( sId === aSlideNumberClassName + '.Default' )
this.aSlideNumberFieldHandler = aSlideNumberFieldHandler;
}
}
else if( sId === aDateTimeClassName + '.Default' )
{
if( this.aMetaSlide.nIsDateTimeVisible )
{
this.aDateTimeFieldHandler =
this.initTextFieldHandler( sId, aPlaceholderShapeSet,
aTextFieldContentProviderSet, aDefsElement,
aTextFieldHandlerSet, sMasterSlideId );
}
           {
this.backgroundObjectsId = this.backgroundObjects.getAttribute( 'id' );
this.backgroundObjectsVisibility = initVisibilityProperty( this.backgroundObjects );

if( this.backgroundObjectsVisibility != HIDDEN )
{
var aBackgroundObjectList = getElementChildren( this.backgroundObjects );
var nFrom = 0;
var nCount = 0;
var nSubGroupId = 1;
var sClass;
var sId = '';
var i = 0;
for( ; i < aBackgroundObjectList.length; ++i )
{
var aObject = aBackgroundObjectList[i];
removeRedundantParagraphFromTextFieldShape( aObject );
sClass = null;
var sFieldType = getTextFieldType( aObject );
if( sFieldType && aObject.firstElementChild )
{
var sObjId = aObject.firstElementChild.getAttribute( 'id' );
if( sObjId )
{
sClass = sFieldType + '.' + sObjId;
aObject.setAttribute('class', sClass);
}
}
if( !sClass )
{
sClass = aBackgroundObjectList[i].getAttribute('class');
if( sClass === aDateTimeClassName || sClass === aFooterClassName
|| sClass === aHeaderClassName || sClass === aSlideNumberClassName)
{
sClass += '.Default';
aObject.setAttribute('class', sClass);
}
}
if( !sClass || !isTextFieldByClassName( sClass ) )
{
if( nCount === 0 )
{
nFrom = i;
sId = this.backgroundObjectsId + '.' + nSubGroupId;
++nSubGroupId;
this.aBackgroundObjectSubGroupIdList.push( sId );
}
++nCount;
}
else
{
this.aBackgroundObjectSubGroupIdList.push( sClass );
if( nCount !== 0 )
{
createElementGroup( this.backgroundObjects, aBackgroundObjectList, nFrom, nCount, 'BackgroundObjectSubgroup', sId );
nCount = 0;
}
}
}
if( nCount !== 0 )
{
createElementGroup( this.backgroundObjects, aBackgroundObjectList, nFrom, nCount, 'BackgroundObjectSubgroup', sId );
}
}
}
else
{
this.backgroundObjectsId = '';
log( 'MasterPage: the background objects element is not valid.' );
}

this.aPlaceholderShapeSet = {};
this.initPlaceholderShapes();
}

MasterPage.prototype =
{

initPlaceholderShapes : function()
{
var sClassName;
var i = 0;
for( ; i < this.aBackgroundObjectSubGroupIdList.length; ++i )
{
sClassName = this.aBackgroundObjectSubGroupIdList[i];
if( isTextFieldByClassName( sClassName ) )
this.aPlaceholderShapeSet[ sClassName ] = new PlaceholderShape( this, sClassName );
}
}

}; // end MasterPage prototype

function PlaceholderShape( aMasterPage, sClassName )
{
this.masterPage = aMasterPage;
this.className = sClassName;

this.element = null;
this.textElement = null;
this.init();
}

PlaceholderShape.prototype.isValid = function()
{
return ( this.element && this.textElement );
};


PlaceholderShape.prototype.init = function()
{
var aTextFieldElement = getElementByClassName( this.masterPage.backgroundObjects, this.className );
if( aTextFieldElement )
{
var aTextElem = getElementByClassName( aTextFieldElement, 'SVGTextShape' );
if( aTextElem )
{
var aPlaceholderElement = getElementByClassName(aTextElem, 'PlaceholderText');
if( aPlaceholderElement )
{
var aSVGRectElem = getElementByClassName( aTextFieldElement, 'BoundingBox' );
if( aSVGRectElem )
{
var aRect = new Rectangle( aSVGRectElem );
var sTextAdjust = getOOOAttribute( aTextFieldElement, aOOOAttrTextAdjust );
var nMargin = 250; // 1000th mm
var sTextAnchor, sX;
if( sTextAdjust == 'left' )
{
sTextAnchor = 'start';
sX = String( Math.trunc( aRect.left + nMargin ) );
}
else if( sTextAdjust == 'right' )
{
sTextAnchor = 'end';
sX = String( Math.trunc( aRect.right - nMargin ) );
}
else if( sTextAdjust == 'center' )
{
sTextAnchor = 'middle';
var nMiddle = ( aRect.left + aRect.right ) / 2;
sX = String( parseInt( String( nMiddle ) ) );
}
if( sTextAnchor )
{
aTextElem.setAttribute( 'text-anchor', sTextAnchor );
if( sX )
aTextElem.setAttribute( 'x', sX );

var aTSpanElements = getElementsByClassName( aTextElem, 'TextPosition' );
if( aTSpanElements )
                         var aTextFieldElem = document.getElementById( sTextFieldId );
this.theMetaDoc.aTextFieldContentProviderSet[ nIndex ]
= new FixedTextByElementProvider( aTextFieldElem );
}
return this.theMetaDoc.aTextFieldContentProviderSet[ nIndex ];
},

collectTextShapes : function()
{
var aTextShapeSet = [];
var aTextShapeIndexElem = getElementByClassName( document, 'TextShapeIndex' );
if( aTextShapeIndexElem )
{
var aIndexEntryList = getElementChildren( aTextShapeIndexElem );
var i;
for( i = 0; i < aIndexEntryList.length; ++i )
{
var sSlideId = getOOOAttribute( aIndexEntryList[i], 'slide' );
if( sSlideId === this.slideId )
{
var sTextShapeIds = getOOOAttribute( aIndexEntryList[i], 'id-list' );
if( sTextShapeIds )
{
var aTextShapeIdSet =  sTextShapeIds.split( ' ' );
var j;
for( j = 0; j < aTextShapeIdSet.length; ++j )
{
var aTextShapeElem = document.getElementById( aTextShapeIdSet[j] );
if( aTextShapeElem )
{
aTextShapeSet.push( aTextShapeElem );
}
else
{
log( 'warning: MetaSlide.collectTextShapes: text shape with id <' + aTextShapeIdSet[j] + '> is not valid.'  );
}
}
}
break;
}
}
}
return aTextShapeSet;
},

initHyperlinks : function()
{
var aHyperlinkSet = {};
var i;
for( i = 0; i < this.aTextShapeSet.length; ++i )
{
if( this.aTextShapeSet[i] )
{
var aHyperlinkIdList = getElementByClassName( this.aTextShapeSet[i], 'HyperlinkIdList' );
if( aHyperlinkIdList )
{
var sHyperlinkIds = aHyperlinkIdList.textContent;
if( sHyperlinkIds )
{
var aHyperlinkIdSet = sHyperlinkIds.trim().split( ' ' );
var j;
for( j = 0; j < aHyperlinkIdSet.length; ++j )
{
var sId = aHyperlinkIdSet[j];
aHyperlinkSet[ sId ] = new HyperlinkElement( sId, this.aSlideAnimationsHandler.aEventMultiplexer );
}
}
}
}
}
return aHyperlinkSet;
},

getSlideAnimationsRoot : function()
{
return this.theMetaDoc.aSlideAnimationsMap[ this.slideId ];
}

}; // end MetaSlide prototype

function removeRedundantParagraphFromTextFieldShape( aObject )
{
var aTextElem = getElementByClassName( aObject, 'SVGTextShape' );
if( aTextElem )
{
var aPlaceholderElement = getElementsByClassName(aTextElem, 'PlaceholderText');
if( aPlaceholderElement )
{
var aTextParagraphSet = getElementsByClassName(aTextElem, 'TextParagraph');
if( aTextParagraphSet.length > 1 )
{
var i = aTextParagraphSet.length;
while( i > 1 )
{
aTextElem.removeChild(aTextParagraphSet[i - 1]);
--i;
}
}
}
}
}

function getTextFieldType ( elem ) {
var sFieldType = null;
var sClass = elem.getAttribute('class');
if( sClass === 'TextShape' )
{
var aPlaceholderElement = getElementByClassName(elem, 'PlaceholderText');
if( aPlaceholderElement )
{
var sClassAttr = aPlaceholderElement.getAttribute('class');
var classes = sClassAttr.split(' ');
sFieldType = classes[1];
}
}
return sFieldType;
}

function isTextFieldByClassName ( sClassName )
{
return sClassName.indexOf( aDateTimeClassName ) == 0 || sClassName.indexOf( aFooterClassName ) == 0
|| sClassName.indexOf( aHeaderClassName ) == 0 || sClassName.indexOf( aSlideNumberClassName ) == 0
|| sClassName.indexOf( aDateClassName ) == 0 || sClassName.indexOf( aTimeClassName ) == 0
|| sClassName.indexOf( aSlideNameClassName ) == 0;
}

function MasterPage( sMasterPageId, aMetaSlide )
{
this.id = sMasterPageId;
this.metaSlide = aMetaSlide;

this.element = document.getElementById( this.id );
assert( this.element,
'MasterPage: master page element <' + this.id + '> not found.' );

this.background = getElementByClassName( this.element, 'Background' );
if( this.background )
{
this.backgroundId = this.background.getAttribute( 'id' );
this.backgroundVisibility = initVisibilityProperty( this.background );
}
else
{
this.backgroundId = '';
log( 'MasterPage: the background element is not valid.' );
}

this.backgroundObjects = getElementByClassName( this.element, 'BackgroundObjects' );
this.aBackgroundObjectSubGroupIdList = [];
if( this.backgroundObjects )
        {
this.aTransitionHandler = new SlideTransition( this.getSlideAnimationsRoot(), this.slideId );
}

this.aSlideAnimationsHandler = new SlideAnimations( aSlideShow.getContext() );
this.aSlideAnimationsHandler.importAnimations( this.getSlideAnimationsRoot() );
this.aSlideAnimationsHandler.parseElements();

if( false && this.aSlideAnimationsHandler.aRootNode )
log( this.aSlideAnimationsHandler.aRootNode.info( true ) );

this.aTextShapeSet = this.collectTextShapes();

this.aHyperlinkSet = this.initHyperlinks();

}

MetaSlide.prototype =
{

show : function()
{
this.updateMasterPageView();
this.aVisibilityStatusElement.setAttribute( 'visibility', 'inherit' );
},

hide : function()
{
this.aVisibilityStatusElement.setAttribute( 'visibility', 'hidden' );
},

updateMasterPageView : function()
{
if( !this.aMasterPageView )
{
this.aMasterPageView = new MasterPageView( this );
this.aMasterPageView.attachToSlide();
}
this.aMasterPageView.update();
},


initPlaceholderElements : function()
{
var aPlaceholderList = getElementsByClassName(this.pageElement , 'PlaceholderText' );
var i = 0;
for( ; i < aPlaceholderList.length; ++i )
{
var aPlaceholderElem = aPlaceholderList[i];
var sClass = aPlaceholderElem.getAttribute('class');
var sFieldType = sClass.split(' ')[1];
if( sFieldType ===  aDateClassName)
aPlaceholderElem.textContent = new Date().toLocaleDateString();
else if( sFieldType === aTimeClassName )
aPlaceholderElem.textContent = new Date().toLocaleTimeString();
}
},

initMasterPage : function()
{
var sMasterPageId = this.element.getAttributeNS( NSS['ooo'], aOOOAttrMaster );

if( !this.theMetaDoc.aMasterPageSet.hasOwnProperty( sMasterPageId ) )
{
this.theMetaDoc.aMasterPageSet[ sMasterPageId ] = new MasterPage( sMasterPageId, this );

this.theMetaDoc.aTextFieldHandlerSet[ sMasterPageId ] = {};
}
return this.theMetaDoc.aMasterPageSet[ sMasterPageId ];
},

initSlideDuration : function()
{
var sSlideDuration = this.element.getAttributeNS( NSS['ooo'], aOOOAttrSlideDuration );
if( sSlideDuration && sSlideDuration.length > 0 )
return parseFloat( sSlideDuration );
else
return -1;
},

initHasTransition : function()
{
var sHasTransition = this.element.getAttributeNS( NSS['ooo'], aOOOAttrHasTransition );
return ( sHasTransition === 'true' );
},

initHasCustomBackground : function()
{
var sHasCustomBackground = this.element.getAttributeNS( NSS['ooo'], aOOOAttrHasCustomBackground );
return ( sHasCustomBackground === 'true' );
},

initVisibilityProperty : function( aVisibilityAttribute, nDefaultValue )
{
var nVisibility = nDefaultValue;
var sVisibility = getOOOAttribute( this.element, aVisibilityAttribute );
if( sVisibility )
nVisibility = aVisibilityValue[ sVisibility ];
return nVisibility;
},

initSlideNumberFieldContentProvider : function()
{
return this.theMetaDoc.aSlideNumberProvider;
},

initDateTimeFieldContentProvider : function( aOOOAttrDateTimeField )
{
var sTextFieldId = getOOOAttribute( this.element, aOOOAttrDateTimeField );
if( !sTextFieldId )  return null;

var nLength = aOOOElemTextField.length + 1;
var nIndex = parseInt(sTextFieldId.substring( nLength ) );
if( typeof nIndex != 'number') return null;

if( !this.theMetaDoc.aTextFieldContentProviderSet[ nIndex ] )
{
var aTextField;
var aTextFieldElem = document.getElementById( sTextFieldId );
var sClassName = getClassAttribute( aTextFieldElem );
if( sClassName == 'FixedDateTimeField' )
{
aTextField = new FixedTextByElementProvider( aTextFieldElem );
this.bIsDateTimeVariable = false;
}
else if( sClassName == 'VariableDateTimeField' )
{
aTextField = new CurrentDateTimeProvider( aTextFieldElem );
this.bIsDateTimeVariable = true;
}
else
{
aTextField = null;
}
this.theMetaDoc.aTextFieldContentProviderSet[ nIndex ] = aTextField;
}
return this.theMetaDoc.aTextFieldContentProviderSet[ nIndex ];
},

initFixedTextFieldContentProvider : function( aOOOAttribute )
{
var sTextFieldId = getOOOAttribute( this.element, aOOOAttribute );
if( !sTextFieldId ) return null;

var nLength = aOOOElemTextField.length + 1;
var nIndex = parseInt( sTextFieldId.substring( nLength ) );
if( typeof nIndex != 'number') return null;

if( !this.theMetaDoc.aTextFieldContentProviderSet[ nIndex ] )
{
                 if (aParmStartSlideNumber !== '')
{
this.nStartSlideNumber = parseInt(aParmStartSlideNumber);
}
this.sPageNumberingType = aMetaDocElem.getAttributeNS( NSS['ooo'], aOOOAttrNumberingType ) || 'arabic';
this.bIsUsePositionedChars = ( aMetaDocElem.getAttributeNS( NSS['ooo'], aOOOAttrUsePositionedChars ) === 'true' );

this.aClipPathGroup = getElementByClassName( ROOT_NODE, aClipPathGroupClassName );
assert( this.aClipPathGroup, 'MetaDocument: the clip path group element is not valid.');

this.aPresentationClipPath = document.getElementById( aPresentationClipPathId );
assert( this.aPresentationClipPath,
'MetaDocument: the presentation clip path element element is not valid.');

this.aMetaSlideSet = [];
this.aMasterPageSet = {};
this.aTextFieldHandlerSet = {};
this.aTextFieldContentProviderSet = [];
this.aSlideNumberProvider = new SlideNumberProvider( this.nStartSlideNumber + 1, this.sPageNumberingType );
this.aCurrentDateProvider = new CurrentDateTimeProvider( null, '<date>' );
this.aCurrentTimeProvider = new CurrentDateTimeProvider( null, '<time>' );

this.bIsAnimated = false;
this.aSlideAnimationsMap = {};
this.initSlideAnimationsMap();

this.theMetaDummySlide = new MetaSlide( 'ooo:meta_dummy_slide', this );

for( var i = 0; i < this.nNumberOfSlides; ++i )
{
var sMetaSlideId = aOOOElemMetaSlide + '_' + i;
this.aMetaSlideSet.push( new MetaSlide( sMetaSlideId, this ) );
}
assert( this.aMetaSlideSet.length == this.nNumberOfSlides,
'MetaDocument: aMetaSlideSet.length != nNumberOfSlides.' );
}

MetaDocument.prototype =
{

getCurrentSlide : function()
{
return this.aMetaSlideSet[nCurSlide];
},

setCurrentSlide : function( nSlideIndex )
{
if( nSlideIndex >= 0 &&  nSlideIndex < this.nNumberOfSlides )
{
if( nCurSlide !== undefined )
this.aMetaSlideSet[nCurSlide].hide();
this.aMetaSlideSet[nSlideIndex].show();
nCurSlide = nSlideIndex;
}
else
{
log('MetaDocument.setCurrentSlide: slide index out of range: ' + nSlideIndex );
}
},


initSlideAnimationsMap : function()
{
var aAnimationsSection = document.getElementById( 'presentation-animations' );
if( aAnimationsSection )
{
var aAnimationsDefSet = aAnimationsSection.getElementsByTagName( 'defs' );

this.bIsAnimated = ( typeof aAnimationsDefSet.length =='number' &&
aAnimationsDefSet.length > 0 );

for( var i = 0; i < aAnimationsDefSet.length; ++i )
{
var sSlideId = aAnimationsDefSet[i].getAttributeNS( NSS['ooo'], aOOOAttrSlide );
var aChildSet = getElementChildren( aAnimationsDefSet[i] );
if( sSlideId && ( aChildSet.length === 1 ) )
{
this.aSlideAnimationsMap[ sSlideId ] = aChildSet[0];
}
}
}
}

}; // end MetaDocument prototype

function MetaSlide( sMetaSlideId, aMetaDoc )
{
this.theDocument = document;
this.id = sMetaSlideId;
this.theMetaDoc = aMetaDoc;

this.element = this.theDocument.getElementById( this.id );
assert( this.element,
'MetaSlide: meta_slide element <' + this.id + '> not found.' );

this.slideId = this.element.getAttributeNS( NSS['ooo'], aOOOAttrSlide );
this.slideElement = this.theDocument.getElementById( this.slideId );
assert( this.slideElement,
'MetaSlide: slide element <' + this.slideId + '> not found.' );

if( this.slideId !== 'dummy_slide' )
this.nSlideNumber = parseInt( this.slideId.substr(2) );
else
this.nSlideNumber= -1;

this.slideName = this.element.getAttributeNS( NSS['ooo'], aOOOAttrDisplayName );

this.aContainerElement = this.slideElement.parentNode;
this.slideContainerId = this.aContainerElement.getAttribute( 'id' );
this.aVisibilityStatusElement = this.aContainerElement.parentNode;

this.pageElement = getElementByClassName( this.slideElement, aPageClassName );
assert( this.pageElement,
'MetaSlide: page element <' + this.slideId + '> not found.' );

this.backgroundElement = getElementByClassName( this.pageElement, 'Background' );
if( this.backgroundElement )
{
this.backgroundId = this.backgroundElement.getAttribute( 'id' );
}

this.initPlaceholderElements();

this.masterPage = this.initMasterPage();

this.bHasCustomBackground = this.initHasCustomBackground();

this.nAreMasterObjectsVisible     = this.initVisibilityProperty( aOOOAttrMasterObjectsVisibility,  VISIBLE );
this.nIsBackgroundVisible         = this.initVisibilityProperty( aOOOAttrBackgroundVisibility,     VISIBLE );
this.nIsPageNumberVisible         = this.initVisibilityProperty( aOOOAttrPageNumberVisibility,     HIDDEN );
this.nIsDateTimeVisible           = this.initVisibilityProperty( aOOOAttrDateTimeVisibility,       VISIBLE );
this.nIsFooterVisible             = this.initVisibilityProperty( aOOOAttrFooterVisibility,         VISIBLE );
this.nIsHeaderVisible             = this.initVisibilityProperty( aOOOAttrHeaderVisibility,         VISIBLE );

this.bIsDateTimeVariable = undefined;

this.aTextFieldContentProviderSet = {};
this.aTextFieldContentProviderSet[aSlideNumberClassName]   = this.initSlideNumberFieldContentProvider();
this.aTextFieldContentProviderSet[aDateTimeClassName]      = this.initDateTimeFieldContentProvider( aOOOAttrDateTimeField );
this.aTextFieldContentProviderSet[aFooterClassName]        = this.initFixedTextFieldContentProvider( aOOOAttrFooterField );
this.aTextFieldContentProviderSet[aHeaderClassName]        = this.initFixedTextFieldContentProvider( aOOOAttrHeaderField );
this.aTextFieldContentProviderSet[aDateClassName]          = this.theMetaDoc.aCurrentDateProvider;
this.aTextFieldContentProviderSet[aTimeClassName]          = this.theMetaDoc.aCurrentTimeProvider;
this.aTextFieldContentProviderSet[aSlideNameClassName]     = new FixedTextProvider( this.slideName );

this.fDuration = this.initSlideDuration();

this.aTransitionHandler = null;
this.bHasTransition = this.initHasTransition() || true;
if( this.bHasTransition )
                     }

function getElementByClassName( aElem, sClassName /*, sTagName */)
{
var aElementSet = getElementsByClassName( aElem, sClassName );
if ( aElementSet.length == 1 )
return aElementSet[0];
else
return null;
}

function getClassAttribute(  aElem )
{
if( aElem )
return aElem.getAttribute( 'class' );
return '';
}

function createElementGroup( aParentElement, aElementList, nFrom, nCount, sGroupClass, sGroupId )
{
var nTo = nFrom + nCount;
if( nCount < 1 || aElementList.length < nTo )
{
log( 'createElementGroup: not enough elements available.' );
return;
}
var firstElement = aElementList[nFrom];
if( !firstElement )
{
log( 'createElementGroup: element not found.' );
return;
}
var aGroupElement = document.createElementNS( NSS['svg'], 'g' );
if( sGroupId )
aGroupElement.setAttribute( 'id', sGroupId );
if( sGroupClass )
aGroupElement.setAttribute( 'class', sGroupClass );
aParentElement.insertBefore( aGroupElement, firstElement );
var i = nFrom;
for( ; i < nTo; ++i )
{
aParentElement.removeChild( aElementList[i] );
aGroupElement.appendChild( aElementList[i] );
}
}

function initVisibilityProperty( aElement )
{
var nVisibility = VISIBLE;
var sVisibility = aElement.getAttribute( 'visibility' );
if( sVisibility ) nVisibility = aVisibilityValue[ sVisibility ];
return nVisibility;
}

function getSafeIndex( nIndex, nMin, nMax )
{
if( nIndex < nMin )
return nMin;
else if( nIndex > nMax )
return nMax;
else
return nIndex;
}

function getUrlParameter(name)
{
name = name.replace(/[\[]/, '\\[').replace(/[\]]/, '\\]');
var regex = new RegExp('[\\?&]' + name + '=([^&#]*)');
var results = regex.exec(window.location.search);
return results === null ? '' : decodeURIComponent(results[1].replace(/\+/g, ' '));
}

function getRandomInt( nMax )
{
return Math.floor( Math.random() * nMax );
}


function DebugPrinter()
{
this.bEnabled = false;
}


DebugPrinter.prototype.on = function()
{
this.bEnabled = true;
};

DebugPrinter.prototype.off = function()
{
this.bEnabled = false;
};

DebugPrinter.prototype.isEnabled = function()
{
return this.bEnabled;
};

DebugPrinter.prototype.print = function( sMessage, nTime )
{
if( this.isEnabled() )
{
var sInfo = 'DBG: ' + sMessage;
if( nTime )
sInfo += ' (at: ' + String( nTime / 1000 ) + 's)';
log( sInfo );
}
};


var aGenericDebugPrinter = new DebugPrinter();
aGenericDebugPrinter.off();
var DBGLOG = bind2( DebugPrinter.prototype.print, aGenericDebugPrinter );

var NAVDBG = new DebugPrinter();
NAVDBG.off();

var ANIMDBG = new DebugPrinter();
ANIMDBG.off();

var aRegisterEventDebugPrinter = new DebugPrinter();
aRegisterEventDebugPrinter.off();

var aTimerEventQueueDebugPrinter = new DebugPrinter();
aTimerEventQueueDebugPrinter.off();

var aEventMultiplexerDebugPrinter = new DebugPrinter();
aEventMultiplexerDebugPrinter.off();

var aNextEffectEventArrayDebugPrinter = new DebugPrinter();
aNextEffectEventArrayDebugPrinter.off();

var aActivityQueueDebugPrinter = new DebugPrinter();
aActivityQueueDebugPrinter.off();

var aAnimatedElementDebugPrinter = new DebugPrinter();
aAnimatedElementDebugPrinter.off();


function MetaDocument()
{
var aMetaDocElem = document.getElementById( aOOOElemMetaSlides );
assert( aMetaDocElem, 'MetaDocument: the svg element with id:' + aOOOElemMetaSlides + 'is not valid.');

this.nNumberOfSlides = parseInt( aMetaDocElem.getAttributeNS( NSS['ooo'], aOOOAttrNumberOfSlides ) );
assert( typeof this.nNumberOfSlides == 'number' && this.nNumberOfSlides > 0,
'MetaDocument: number of slides is zero or undefined.' );
this.nStartSlideNumber = parseInt( aMetaDocElem.getAttributeNS( NSS['ooo'], aOOOAttrStartSlideNumber ) ) || 0;
var aParmStartSlideNumber = getUrlParameter('StartSlideNumber');
        
var charCodeDictionary = getDefaultCharCodeDictionary();
var keyCodeDictionary = getDefaultKeyCodeDictionary();

var mouseHandlerDictionary = getDefaultMouseHandlerDictionary();


function object( aObject )
{
var F = function() {};
F.prototype = aObject;
return new F();
}


function extend( aSubType, aSuperType )
{
if (!aSuperType || !aSubType)
{
alert('extend failed, verify dependencies');
}
var OP = Object.prototype;
var sp = aSuperType.prototype;
var rp = object( sp );
aSubType.prototype = rp;

rp.constructor = aSubType;
aSubType.superclass = sp;

if (aSuperType != Object && sp.constructor == OP.constructor)
{
sp.constructor = aSuperType;
}

return aSubType;
}


function instantiate( TemplateClass, BaseType )
{
if( !TemplateClass.instanceSet )
TemplateClass.instanceSet = [];

var nSize = TemplateClass.instanceSet.length;

for( var i = 0; i < nSize; ++i )
{
if( TemplateClass.instanceSet[i].base === BaseType )
return TemplateClass.instanceSet[i].instance;
}

TemplateClass.instanceSet[ nSize ] = {};
TemplateClass.instanceSet[ nSize ].base = BaseType;
TemplateClass.instanceSet[ nSize ].instance = TemplateClass( BaseType );

return TemplateClass.instanceSet[ nSize ].instance;
}


function Rectangle( aSVGRectElem )
{
var x = parseInt( aSVGRectElem.getAttribute( 'x' ) );
var y = parseInt( aSVGRectElem.getAttribute( 'y' ) );
var width = parseInt( aSVGRectElem.getAttribute( 'width' ) );
var height = parseInt( aSVGRectElem.getAttribute( 'height' ) );

this.left = x;
this.right = x + width;
this.top = y;
this.bottom = y + height;
}

function getKeyByValue(aObj, value) {
for(var key in aObj) {
if(aObj[key] == value)
return key;
}
return null;
}

function log( message )
{
if( typeof console == 'object' )
{
console.log( message );
}
else if( typeof opera == 'object' )
{
opera.postError( message );
}
else if( typeof java == 'object' && typeof java.lang == 'object' )
{
java.lang.System.out.println( message );
}
}

function getNSAttribute( sNSPrefix, aElem, sAttrName )
{
if( !aElem ) return null;
if( 'getAttributeNS' in aElem )
{
return aElem.getAttributeNS( NSS[sNSPrefix], sAttrName );
}
else
{
return aElem.getAttribute( sNSPrefix + ':' + sAttrName );
}
}

function getOOOAttribute( aElem, sAttrName )
{
return getNSAttribute( 'ooo', aElem, sAttrName );
}

function setNSAttribute( sNSPrefix, aElem, sAttrName, aValue )
{
if( !aElem ) return false;
if( 'setAttributeNS' in aElem )
{
aElem.setAttributeNS( NSS[sNSPrefix], sAttrName, aValue );
return true;
}
else
{
aElem.setAttribute(sNSPrefix + ':' + sAttrName, aValue );
return true;
}
}

function getElementsByClassName( aElem, sClassName )
{

var aElementSet = [];
if( 'getElementsByClassName' in aElem )
{
aElementSet = aElem.getElementsByClassName( sClassName );
}
else
{
var aElementSetByClassProperty = getElementsByProperty( aElem, 'class' );
for( var i = 0; i < aElementSetByClassProperty.length; ++i )
{
var sAttrClassName = aElementSetByClassProperty[i].getAttribute( 'class' );
if( sAttrClassName == sClassName )
{
aElementSet.push( aElementSetByClassProperty[i] );
}
}
}
return aElementSet;
                        /*****
* @licstart
*
* The following is the license notice for the part of JavaScript code  of
* this page included between the '@libreofficestart' and the '@libreofficeend'
* notes.
*/

/*****  ******************************************************************
*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
*   Licensed to the Apache Software Foundation (ASF) under one or more
*   contributor license agreements. See the NOTICE file distributed
*   with this work for additional information regarding copyright
*   ownership. The ASF licenses this file to you under the Apache
*   License, Version 2.0 (the 'License'); you may not use this file
*   except in compliance with the License. You may obtain a copy of
*   the License at http://www.apache.org/licenses/LICENSE-2.0 .
*
************************************************************************/

/*****
* @licend
*
* The above is the license notice for the part of JavaScript code  of
* this page included between the '@libreofficestart' and the '@libreofficeend'
* notes.
*/


/*****
* @libreofficestart
*
* Several parts of the following code are the result of the porting,
* started on August 2011, of the C++ code included in the source
* files placed under the folder '/slideshow/source' and
* sub-folders. This got later rebased onto the AL2-licensed versions
* of those files in early 2013.
* @source https://cgit.freedesktop.org/libreoffice/core/tree/slideshow/source
*
*/


window.onload = init;


var aOOOElemMetaSlides = 'ooo:meta_slides';
var aOOOElemMetaSlide = 'ooo:meta_slide';
var aOOOElemTextField = 'ooo:text_field';
var aPresentationClipPathId = 'presentation_clip_path';
var aPresentationClipPathShrinkId = 'presentation_clip_path_shrink';

var aOOOAttrNumberOfSlides = 'number-of-slides';
var aOOOAttrStartSlideNumber= 'start-slide-number';
var aOOOAttrNumberingType = 'page-numbering-type';
var aOOOAttrListItemNumberingType= 'numbering-type';
var aOOOAttrUsePositionedChars = 'use-positioned-chars';

var aOOOAttrSlide = 'slide';
var aOOOAttrMaster = 'master';
var aOOOAttrDisplayName = 'display-name';
var aOOOAttrSlideDuration = 'slide-duration';
var aOOOAttrHasTransition = 'has-transition';
var aOOOAttrHasCustomBackground = 'has-custom-background';
var aOOOAttrBackgroundVisibility = 'background-visibility';
var aOOOAttrMasterObjectsVisibility = 'master-objects-visibility';
var aOOOAttrPageNumberVisibility = 'page-number-visibility';
var aOOOAttrDateTimeVisibility = 'date-time-visibility';
var aOOOAttrFooterVisibility = 'footer-visibility';
var aOOOAttrHeaderVisibility = 'header-visibility';
var aOOOAttrDateTimeField = 'date-time-field';
var aOOOAttrFooterField = 'footer-field';
var aOOOAttrHeaderField = 'header-field';

var aOOOAttrDateTimeFormat = 'date-time-format';

var aOOOAttrTextAdjust = 'text-adjust';

var aClipPathGroupClassName = 'ClipPathGroup';
var aPageClassName = 'Page';
var aSlideNumberClassName = 'PageNumber';
var aDateTimeClassName = 'DateTime';
var aFooterClassName = 'Footer';
var aHeaderClassName = 'Header';
var aDateClassName = 'Date';
var aTimeClassName = 'Time';
var aSlideNameClassName='PageName';

var NSS = {};
NSS['svg']='http://www.w3.org/2000/svg';
NSS['rdf']='http://www.w3.org/1999/02/22-rdf-syntax-ns#';
NSS['xlink']='http://www.w3.org/1999/xlink';
NSS['xml']='http://www.w3.org/XML/1998/namespace';
NSS['ooo'] = 'http://xml.openoffice.org/svg/export';
NSS['presentation'] = 'http://sun.com/xmlns/staroffice/presentation';
NSS['smil'] = 'http://www.w3.org/2001/SMIL20/';
NSS['anim'] = 'urn:oasis:names:tc:opendocument:xmlns:animation:1.0';

var SLIDE_MODE = 1;
var INDEX_MODE = 2;

var MOUSE_UP = 1;
var MOUSE_DOWN = 2; // eslint-disable-line no-unused-vars
var MOUSE_MOVE = 3; // eslint-disable-line no-unused-vars
var MOUSE_WHEEL = 4;

var LEFT_KEY = 37;          // cursor left keycode
var UP_KEY = 38;            // cursor up keycode
var RIGHT_KEY = 39;         // cursor right keycode
var DOWN_KEY = 40;          // cursor down keycode
var PAGE_UP_KEY = 33;       // page up keycode
var PAGE_DOWN_KEY = 34;     // page down keycode
var HOME_KEY = 36;          // home keycode
var END_KEY = 35;           // end keycode
var ENTER_KEY = 13;
var SPACE_KEY = 32;
var ESCAPE_KEY = 27;
var B_KEY = 66;
var P_KEY = 80;
var Q_KEY = 81;
var W_KEY = 87;

var HIDDEN = 0;
var VISIBLE = 1;
var INHERIT = 2;
var aVisibilityAttributeValue = [ 'hidden', 'visible', 'inherit' ];  // eslint-disable-line no-unused-vars
var aVisibilityValue = { 'hidden' : HIDDEN, 'visible' : VISIBLE, 'inherit' : INHERIT };

var ROOT_NODE = document.getElementsByTagNameNS( NSS['svg'], 'svg' )[0];
var WIDTH = 0;
var HEIGHT = 0;
var INDEX_COLUMNS_DEFAULT = 3;
var INDEX_OFFSET = 0;

var Detect = configureDetectionTools();
var theMetaDoc;
var theSlideIndexPage;
var currentMode = SLIDE_MODE;
var processingEffect = false;
var nCurSlide = undefined;
var bTextHasBeenSelected = false;
var sLastSelectedText = '';

                   }

if (this._currentIndex != startIndex && this._currentIndex + 1 < this._endIndex && (this._string.charAt(this._currentIndex) == 'e' || this._string.charAt(this._currentIndex) == 'E') && (this._string.charAt(this._currentIndex + 1) != 'x' && this._string.charAt(this._currentIndex + 1) != 'm')) {
this._currentIndex++;

if (this._string.charAt(this._currentIndex) == '+') {
this._currentIndex++;
} else if (this._string.charAt(this._currentIndex) == '-') {
this._currentIndex++;
expsign = -1;
}

if (this._currentIndex >= this._endIndex || this._string.charAt(this._currentIndex) < '0' || this._string.charAt(this._currentIndex) > '9')
return undefined;

while (this._currentIndex < this._endIndex && this._string.charAt(this._currentIndex) >= '0' && this._string.charAt(this._currentIndex) <= '9') {
exponent *= 10;
exponent += (this._string.charAt(this._currentIndex) - '0');
this._currentIndex++;
}
}

var number = integer + decimal;
number *= sign;

if (exponent)
number *= Math.pow(10, expsign * exponent);

if (startIndex == this._currentIndex)
return undefined;

this._skipOptionalSpacesOrDelimiter();

return number;
}

Source.prototype._parseArcFlag = function() {
if (this._currentIndex >= this._endIndex)
return undefined;
var flag = false;
var flagChar = this._string.charAt(this._currentIndex++);
if (flagChar == '0')
flag = false;
else if (flagChar == '1')
flag = true;
else
return undefined;

this._skipOptionalSpacesOrDelimiter();
return flag;
}

Source.prototype.parseSegment = function() {
var lookahead = this._string[this._currentIndex];
var command = this._pathSegTypeFromChar(lookahead);
if (command == window.SVGPathSeg.PATHSEG_UNKNOWN) {
if (this._previousCommand == window.SVGPathSeg.PATHSEG_UNKNOWN)
return null;
command = this._nextCommandHelper(lookahead, this._previousCommand);
if (command == window.SVGPathSeg.PATHSEG_UNKNOWN)
return null;
} else {
this._currentIndex++;
}

this._previousCommand = command;

switch (command) {
case window.SVGPathSeg.PATHSEG_MOVETO_REL:
return new window.SVGPathSegMovetoRel(owningPathSegList, this._parseNumber(), this._parseNumber());
case window.SVGPathSeg.PATHSEG_MOVETO_ABS:
return new window.SVGPathSegMovetoAbs(owningPathSegList, this._parseNumber(), this._parseNumber());
case window.SVGPathSeg.PATHSEG_LINETO_REL:
return new window.SVGPathSegLinetoRel(owningPathSegList, this._parseNumber(), this._parseNumber());
case window.SVGPathSeg.PATHSEG_LINETO_ABS:
return new window.SVGPathSegLinetoAbs(owningPathSegList, this._parseNumber(), this._parseNumber());
case window.SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_REL:
return new window.SVGPathSegLinetoHorizontalRel(owningPathSegList, this._parseNumber());
case window.SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_ABS:
return new window.SVGPathSegLinetoHorizontalAbs(owningPathSegList, this._parseNumber());
case window.SVGPathSeg.PATHSEG_LINETO_VERTICAL_REL:
return new window.SVGPathSegLinetoVerticalRel(owningPathSegList, this._parseNumber());
case window.SVGPathSeg.PATHSEG_LINETO_VERTICAL_ABS:
return new window.SVGPathSegLinetoVerticalAbs(owningPathSegList, this._parseNumber());
case window.SVGPathSeg.PATHSEG_CLOSEPATH:
this._skipOptionalSpaces();
return new window.SVGPathSegClosePath(owningPathSegList);
case window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_REL:
var points = {x1: this._parseNumber(), y1: this._parseNumber(), x2: this._parseNumber(), y2: this._parseNumber(), x: this._parseNumber(), y: this._parseNumber()};
return new window.SVGPathSegCurvetoCubicRel(owningPathSegList, points.x, points.y, points.x1, points.y1, points.x2, points.y2);
case window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_ABS:
var points = {x1: this._parseNumber(), y1: this._parseNumber(), x2: this._parseNumber(), y2: this._parseNumber(), x: this._parseNumber(), y: this._parseNumber()};
return new window.SVGPathSegCurvetoCubicAbs(owningPathSegList, points.x, points.y, points.x1, points.y1, points.x2, points.y2);
case window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_REL:
var points = {x2: this._parseNumber(), y2: this._parseNumber(), x: this._parseNumber(), y: this._parseNumber()};
return new window.SVGPathSegCurvetoCubicSmoothRel(owningPathSegList, points.x, points.y, points.x2, points.y2);
case window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_ABS:
var points = {x2: this._parseNumber(), y2: this._parseNumber(), x: this._parseNumber(), y: this._parseNumber()};
return new window.SVGPathSegCurvetoCubicSmoothAbs(owningPathSegList, points.x, points.y, points.x2, points.y2);
case window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_REL:
var points = {x1: this._parseNumber(), y1: this._parseNumber(), x: this._parseNumber(), y: this._parseNumber()};
return new window.SVGPathSegCurvetoQuadraticRel(owningPathSegList, points.x, points.y, points.x1, points.y1);
case window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_ABS:
var points = {x1: this._parseNumber(), y1: this._parseNumber(), x: this._parseNumber(), y: this._parseNumber()};
return new window.SVGPathSegCurvetoQuadraticAbs(owningPathSegList, points.x, points.y, points.x1, points.y1);
case window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL:
return new window.SVGPathSegCurvetoQuadraticSmoothRel(owningPathSegList, this._parseNumber(), this._parseNumber());
case window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS:
return new window.SVGPathSegCurvetoQuadraticSmoothAbs(owningPathSegList, this._parseNumber(), this._parseNumber());
case window.SVGPathSeg.PATHSEG_ARC_REL:
var points = {x1: this._parseNumber(), y1: this._parseNumber(), arcAngle: this._parseNumber(), arcLarge: this._parseArcFlag(), arcSweep: this._parseArcFlag(), x: this._parseNumber(), y: this._parseNumber()};
return new window.SVGPathSegArcRel(owningPathSegList, points.x, points.y, points.x1, points.y1, points.arcAngle, points.arcLarge, points.arcSweep);
case window.SVGPathSeg.PATHSEG_ARC_ABS:
var points = {x1: this._parseNumber(), y1: this._parseNumber(), arcAngle: this._parseNumber(), arcLarge: this._parseArcFlag(), arcSweep: this._parseArcFlag(), x: this._parseNumber(), y: this._parseNumber()};
return new window.SVGPathSegArcAbs(owningPathSegList, points.x, points.y, points.x1, points.y1, points.arcAngle, points.arcLarge, points.arcSweep);
default:
throw 'Unknown path seg type.'
}
}

var builder = new Builder();
var source = new Source(string);

if (!source.initialCommandIsMoveTo())
return [];
while (source.hasMoreData()) {
var pathSeg = source.parseSegment();
if (!pathSeg)
return [];
builder.appendSegment(pathSeg);
}

return builder.pathSegList;
}
}
}());

/*****
* @svgpathend
*
*  The above code is a derivative work of some part of the SVGPathSeg API.
*
*  This API is a drop-in replacement for the SVGPathSeg and SVGPathSegList APIs that were removed from
*  SVG2 (https://lists.w3.org/Archives/Public/www-svg/2015Jun/0044.html), including the latest spec
*  changes which were implemented in Firefox 43 and Chrome 46.
*
*  @source https://github.com/progers/pathseg
*/


                                var Source = function(string) {
this._string = string;
this._currentIndex = 0;
this._endIndex = this._string.length;
this._previousCommand = window.SVGPathSeg.PATHSEG_UNKNOWN;

this._skipOptionalSpaces();
}

Source.prototype._isCurrentSpace = function() {
var character = this._string[this._currentIndex];
return character <= ' ' && (character == ' ' || character == '\n' || character == '\t' || character == '\r' || character == '\f');
}

Source.prototype._skipOptionalSpaces = function() {
while (this._currentIndex < this._endIndex && this._isCurrentSpace())
this._currentIndex++;
return this._currentIndex < this._endIndex;
}

Source.prototype._skipOptionalSpacesOrDelimiter = function() {
if (this._currentIndex < this._endIndex && !this._isCurrentSpace() && this._string.charAt(this._currentIndex) != ',')
return false;
if (this._skipOptionalSpaces()) {
if (this._currentIndex < this._endIndex && this._string.charAt(this._currentIndex) == ',') {
this._currentIndex++;
this._skipOptionalSpaces();
}
}
return this._currentIndex < this._endIndex;
}

Source.prototype.hasMoreData = function() {
return this._currentIndex < this._endIndex;
}

Source.prototype.peekSegmentType = function() {
var lookahead = this._string[this._currentIndex];
return this._pathSegTypeFromChar(lookahead);
}

Source.prototype._pathSegTypeFromChar = function(lookahead) {
switch (lookahead) {
case 'Z':
case 'z':
return window.SVGPathSeg.PATHSEG_CLOSEPATH;
case 'M':
return window.SVGPathSeg.PATHSEG_MOVETO_ABS;
case 'm':
return window.SVGPathSeg.PATHSEG_MOVETO_REL;
case 'L':
return window.SVGPathSeg.PATHSEG_LINETO_ABS;
case 'l':
return window.SVGPathSeg.PATHSEG_LINETO_REL;
case 'C':
return window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_ABS;
case 'c':
return window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_REL;
case 'Q':
return window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_ABS;
case 'q':
return window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_REL;
case 'A':
return window.SVGPathSeg.PATHSEG_ARC_ABS;
case 'a':
return window.SVGPathSeg.PATHSEG_ARC_REL;
case 'H':
return window.SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_ABS;
case 'h':
return window.SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_REL;
case 'V':
return window.SVGPathSeg.PATHSEG_LINETO_VERTICAL_ABS;
case 'v':
return window.SVGPathSeg.PATHSEG_LINETO_VERTICAL_REL;
case 'S':
return window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_ABS;
case 's':
return window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_REL;
case 'T':
return window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS;
case 't':
return window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL;
default:
return window.SVGPathSeg.PATHSEG_UNKNOWN;
}
}

Source.prototype._nextCommandHelper = function(lookahead, previousCommand) {
if ((lookahead == '+' || lookahead == '-' || lookahead == '.' || (lookahead >= '0' && lookahead <= '9')) && previousCommand != window.SVGPathSeg.PATHSEG_CLOSEPATH) {
if (previousCommand == window.SVGPathSeg.PATHSEG_MOVETO_ABS)
return window.SVGPathSeg.PATHSEG_LINETO_ABS;
if (previousCommand == window.SVGPathSeg.PATHSEG_MOVETO_REL)
return window.SVGPathSeg.PATHSEG_LINETO_REL;
return previousCommand;
}
return window.SVGPathSeg.PATHSEG_UNKNOWN;
}

Source.prototype.initialCommandIsMoveTo = function() {
if (!this.hasMoreData())
return true;
var command = this.peekSegmentType();
return command == window.SVGPathSeg.PATHSEG_MOVETO_ABS || command == window.SVGPathSeg.PATHSEG_MOVETO_REL;
}

Source.prototype._parseNumber = function() {
var exponent = 0;
var integer = 0;
var frac = 1;
var decimal = 0;
var sign = 1;
var expsign = 1;

var startIndex = this._currentIndex;

this._skipOptionalSpaces();

if (this._currentIndex < this._endIndex && this._string.charAt(this._currentIndex) == '+')
this._currentIndex++;
else if (this._currentIndex < this._endIndex && this._string.charAt(this._currentIndex) == '-') {
this._currentIndex++;
sign = -1;
}

if (this._currentIndex == this._endIndex || ((this._string.charAt(this._currentIndex) < '0' || this._string.charAt(this._currentIndex) > '9') && this._string.charAt(this._currentIndex) != '.'))
return undefined;

var startIntPartIndex = this._currentIndex;
while (this._currentIndex < this._endIndex && this._string.charAt(this._currentIndex) >= '0' && this._string.charAt(this._currentIndex) <= '9')
this._currentIndex++; // Advance to first non-digit.

if (this._currentIndex != startIntPartIndex) {
var scanIntPartIndex = this._currentIndex - 1;
var multiplier = 1;
while (scanIntPartIndex >= startIntPartIndex) {
integer += multiplier * (this._string.charAt(scanIntPartIndex--) - '0');
multiplier *= 10;
}
}

if (this._currentIndex < this._endIndex && this._string.charAt(this._currentIndex) == '.') {
this._currentIndex++;

if (this._currentIndex >= this._endIndex || this._string.charAt(this._currentIndex) < '0' || this._string.charAt(this._currentIndex) > '9')
return undefined;
while (this._currentIndex < this._endIndex && this._string.charAt(this._currentIndex) >= '0' && this._string.charAt(this._currentIndex) <= '9') {
frac *= 10;
decimal += (this._string.charAt(this._currentIndex) - '0') / frac;
this._currentIndex += 1;
}
       
if (newItem._owningPathSegList) {
newItem = newItem.clone();
}
this._checkValidIndex(index);
this._list[index] = newItem;
newItem._owningPathSegList = this;
this._writeListToPath();
return newItem;
}

window.SVGPathSegList.prototype.removeItem = function(index) {
this._checkPathSynchronizedToList();

this._checkValidIndex(index);
var item = this._list[index];
this._list.splice(index, 1);
this._writeListToPath();
return item;
}

window.SVGPathSegList.prototype.appendItem = function(newItem) {
this._checkPathSynchronizedToList();

if (newItem._owningPathSegList) {
newItem = newItem.clone();
}
this._list.push(newItem);
newItem._owningPathSegList = this;
this._writeListToPath();
return newItem;
};

window.SVGPathSegList.prototype.matrixTransform = function(aSVGMatrix) {
this._checkPathSynchronizedToList();

var nLength = this._list.length;
for( var i = 0; i < nLength; ++i )
{
var nX;
var aPathSeg = this._list[i];
switch( aPathSeg.pathSegTypeAsLetter )
{
case 'C':
nX = aPathSeg._x2;
aPathSeg._x2 = aSVGMatrix.a * nX + aSVGMatrix.c * aPathSeg._y2 + aSVGMatrix.e;
aPathSeg._y2 = aSVGMatrix.b * nX + aSVGMatrix.d * aPathSeg._y2 + aSVGMatrix.f;
case 'Q':
nX = aPathSeg._x1;
aPathSeg._x1 = aSVGMatrix.a * nX + aSVGMatrix.c * aPathSeg._y1 + aSVGMatrix.e;
aPathSeg._y1 = aSVGMatrix.b * nX + aSVGMatrix.d * aPathSeg._y1 + aSVGMatrix.f;
case 'M':
case 'L':
nX = aPathSeg._x;
aPathSeg._x = aSVGMatrix.a * nX + aSVGMatrix.c * aPathSeg._y + aSVGMatrix.e;
aPathSeg._y = aSVGMatrix.b * nX + aSVGMatrix.d * aPathSeg._y + aSVGMatrix.f;
break;
default:
log( 'SVGPathSeg.matrixTransform: unexpected path segment type: '
+ aPathSeg.pathSegTypeAsLetter );
}
}

this._writeListToPath();
};

window.SVGPathSegList.prototype.changeOrientation = function() {
this._checkPathSynchronizedToList();

var aPathSegList = this._list;
var nLength = aPathSegList.length;
if( nLength == 0 ) return;

var nCurrentX = 0;
var nCurrentY = 0;

var aPathSeg = aPathSegList[0];
if( aPathSeg.pathSegTypeAsLetter == 'M' )
{
nCurrentX = aPathSeg.x;
nCurrentY = aPathSeg.y;
aPathSegList.shift();
--nLength;
}

var i;
for( i = 0; i < nLength; ++i )
{
aPathSeg = aPathSegList[i];
switch( aPathSeg.pathSegTypeAsLetter )
{
case 'C':
var nX = aPathSeg._x1;
aPathSeg._x1 = aPathSeg._x2;
aPathSeg._x2 = nX;
var nY = aPathSeg._y1;
aPathSeg._y1 = aPathSeg._y2;
aPathSeg._y2 = nY;
case 'M':
case 'L':
case 'Q':
var aPoint = { x: aPathSeg._x, y: aPathSeg._y };
aPathSeg._x = nCurrentX;
aPathSeg._y = nCurrentY;
nCurrentX = aPoint.x;
nCurrentY = aPoint.y;
break;
default:
log( 'SVGPathSegList.changeOrientation: unexpected path segment type: '
+ aPathSeg.pathSegTypeAsLetter );
}

}

aPathSegList.reverse();

var aMovePathSeg = new window.SVGPathSegMovetoAbs( this, nCurrentX, nCurrentY );
aPathSegList.unshift( aMovePathSeg );

this._writeListToPath();
};

window.SVGPathSegList._pathSegArrayAsString = function(pathSegArray) {
var string = '';
var first = true;
pathSegArray.forEach(function(pathSeg) {
if (first) {
first = false;
string += pathSeg._asPathString();
} else {
string += ' ' + pathSeg._asPathString();
}
});
return string;
}

window.SVGPathSegList.prototype._parsePath = function(string) {
if (!string || string.length == 0)
return [];

var owningPathSegList = this;

var Builder = function() {
this.pathSegList = [];
}

Builder.prototype.appendSegment = function(pathSeg) {
this.pathSegList.push(pathSeg);
}

           window.SVGPathElement.prototype.createSVGPathSegCurvetoCubicRel = function(x, y, x1, y1, x2, y2) { return new window.SVGPathSegCurvetoCubicRel(undefined, x, y, x1, y1, x2, y2); }
window.SVGPathElement.prototype.createSVGPathSegCurvetoQuadraticAbs = function(x, y, x1, y1) { return new window.SVGPathSegCurvetoQuadraticAbs(undefined, x, y, x1, y1); }
window.SVGPathElement.prototype.createSVGPathSegCurvetoQuadraticRel = function(x, y, x1, y1) { return new window.SVGPathSegCurvetoQuadraticRel(undefined, x, y, x1, y1); }
window.SVGPathElement.prototype.createSVGPathSegArcAbs = function(x, y, r1, r2, angle, largeArcFlag, sweepFlag) { return new window.SVGPathSegArcAbs(undefined, x, y, r1, r2, angle, largeArcFlag, sweepFlag); }
window.SVGPathElement.prototype.createSVGPathSegArcRel = function(x, y, r1, r2, angle, largeArcFlag, sweepFlag) { return new window.SVGPathSegArcRel(undefined, x, y, r1, r2, angle, largeArcFlag, sweepFlag); }
window.SVGPathElement.prototype.createSVGPathSegLinetoHorizontalAbs = function(x) { return new window.SVGPathSegLinetoHorizontalAbs(undefined, x); }
window.SVGPathElement.prototype.createSVGPathSegLinetoHorizontalRel = function(x) { return new window.SVGPathSegLinetoHorizontalRel(undefined, x); }
window.SVGPathElement.prototype.createSVGPathSegLinetoVerticalAbs = function(y) { return new window.SVGPathSegLinetoVerticalAbs(undefined, y); }
window.SVGPathElement.prototype.createSVGPathSegLinetoVerticalRel = function(y) { return new window.SVGPathSegLinetoVerticalRel(undefined, y); }
window.SVGPathElement.prototype.createSVGPathSegCurvetoCubicSmoothAbs = function(x, y, x2, y2) { return new window.SVGPathSegCurvetoCubicSmoothAbs(undefined, x, y, x2, y2); }
window.SVGPathElement.prototype.createSVGPathSegCurvetoCubicSmoothRel = function(x, y, x2, y2) { return new window.SVGPathSegCurvetoCubicSmoothRel(undefined, x, y, x2, y2); }
window.SVGPathElement.prototype.createSVGPathSegCurvetoQuadraticSmoothAbs = function(x, y) { return new window.SVGPathSegCurvetoQuadraticSmoothAbs(undefined, x, y); }
window.SVGPathElement.prototype.createSVGPathSegCurvetoQuadraticSmoothRel = function(x, y) { return new window.SVGPathSegCurvetoQuadraticSmoothRel(undefined, x, y); }

if (!('getPathSegAtLength' in window.SVGPathElement.prototype)) {
window.SVGPathElement.prototype.getPathSegAtLength = function(distance) {
if (distance === undefined || !isFinite(distance))
throw 'Invalid arguments.';

var measurementElement = document.createElementNS('http://www.w3.org/2000/svg', 'path');
measurementElement.setAttribute('d', this.getAttribute('d'));
var lastPathSegment = measurementElement.pathSegList.numberOfItems - 1;

if (lastPathSegment <= 0)
return 0;

do {
measurementElement.pathSegList.removeItem(lastPathSegment);
if (distance > measurementElement.getTotalLength())
break;
lastPathSegment--;
} while (lastPathSegment > 0);
return lastPathSegment;
}
}
}

if (!('SVGPathSegList' in window) || !('appendItem' in window.SVGPathSegList.prototype)) {
window.SVGPathSegList = function(pathElement) {
this._pathElement = pathElement;
this._list = this._parsePath(this._pathElement.getAttribute('d'));

this._mutationObserverConfig = { 'attributes': true, 'attributeFilter': ['d'] };
this._pathElementMutationObserver = new MutationObserver(this._updateListFromPathMutations.bind(this));
this._pathElementMutationObserver.observe(this._pathElement, this._mutationObserverConfig);
}

window.SVGPathSegList.prototype.classname = 'SVGPathSegList';

Object.defineProperty(window.SVGPathSegList.prototype, 'numberOfItems', {
get: function() {
this._checkPathSynchronizedToList();
return this._list.length;
},
enumerable: true
});

Object.defineProperty(window.SVGPathSegList.prototype, 'length', {
get: function() {
this._checkPathSynchronizedToList();
return this._list.length;
},
enumerable: true
});

Object.defineProperty(window.SVGPathElement.prototype, 'pathSegList', {
get: function() {
if (!this._pathSegList)
this._pathSegList = new window.SVGPathSegList(this);
return this._pathSegList;
},
enumerable: true
});
Object.defineProperty(window.SVGPathElement.prototype, 'normalizedPathSegList', { get: function() { return this.pathSegList; }, enumerable: true });
Object.defineProperty(window.SVGPathElement.prototype, 'animatedPathSegList', { get: function() { return this.pathSegList; }, enumerable: true });
Object.defineProperty(window.SVGPathElement.prototype, 'animatedNormalizedPathSegList', { get: function() { return this.pathSegList; }, enumerable: true });

window.SVGPathSegList.prototype._checkPathSynchronizedToList = function() {
this._updateListFromPathMutations(this._pathElementMutationObserver.takeRecords());
}

window.SVGPathSegList.prototype._updateListFromPathMutations = function(mutationRecords) {
if (!this._pathElement)
return;
var hasPathMutations = false;
mutationRecords.forEach(function(record) {
if (record.attributeName == 'd')
hasPathMutations = true;
});
if (hasPathMutations)
this._list = this._parsePath(this._pathElement.getAttribute('d'));
}

window.SVGPathSegList.prototype._writeListToPath = function() {
this._pathElementMutationObserver.disconnect();
this._pathElement.setAttribute('d', window.SVGPathSegList._pathSegArrayAsString(this._list));
this._pathElementMutationObserver.observe(this._pathElement, this._mutationObserverConfig);
}

window.SVGPathSegList.prototype.segmentChanged = function(pathSeg) {
this._writeListToPath();
}

window.SVGPathSegList.prototype.clear = function() {
this._checkPathSynchronizedToList();

this._list.forEach(function(pathSeg) {
pathSeg._owningPathSegList = null;
});
this._list = [];
this._writeListToPath();
}

window.SVGPathSegList.prototype.initialize = function(newItem) {
this._checkPathSynchronizedToList();

this._list = [newItem];
newItem._owningPathSegList = this;
this._writeListToPath();
return newItem;
}

window.SVGPathSegList.prototype._checkValidIndex = function(index) {
if (isNaN(index) || index < 0 || index >= this.numberOfItems)
throw 'INDEX_SIZE_ERR';
}

window.SVGPathSegList.prototype.getItem = function(index) {
this._checkPathSynchronizedToList();

this._checkValidIndex(index);
return this._list[index];
}

window.SVGPathSegList.prototype.insertItemBefore = function(newItem, index) {
this._checkPathSynchronizedToList();

if (index > this.numberOfItems)
index = this.numberOfItems;
if (newItem._owningPathSegList) {
newItem = newItem.clone();
}
this._list.splice(index, 0, newItem);
newItem._owningPathSegList = this;
this._writeListToPath();
return newItem;
}

window.SVGPathSegList.prototype.replaceItem = function(newItem, index) {
this._checkPathSynchronizedToList();
       Object.defineProperty(window.SVGPathSegCurvetoQuadraticRel.prototype, 'y', { get: function() { return this._y; }, set: function(y) { this._y = y; this._segmentChanged(); }, enumerable: true });
Object.defineProperty(window.SVGPathSegCurvetoQuadraticRel.prototype, 'x1', { get: function() { return this._x1; }, set: function(x1) { this._x1 = x1; this._segmentChanged(); }, enumerable: true });
Object.defineProperty(window.SVGPathSegCurvetoQuadraticRel.prototype, 'y1', { get: function() { return this._y1; }, set: function(y1) { this._y1 = y1; this._segmentChanged(); }, enumerable: true });

window.SVGPathSegArcAbs = function(owningPathSegList, x, y, r1, r2, angle, largeArcFlag, sweepFlag) {
window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_ARC_ABS, 'A', owningPathSegList);
this._x = x;
this._y = y;
this._r1 = r1;
this._r2 = r2;
this._angle = angle;
this._largeArcFlag = largeArcFlag;
this._sweepFlag = sweepFlag;
}
window.SVGPathSegArcAbs.prototype = Object.create(window.SVGPathSeg.prototype);
window.SVGPathSegArcAbs.prototype.toString = function() { return '[object SVGPathSegArcAbs]'; }
window.SVGPathSegArcAbs.prototype._asPathString = function() { return this.pathSegTypeAsLetter + ' ' + this._r1 + ' ' + this._r2 + ' ' + this._angle + ' ' + (this._largeArcFlag ? '1' : '0') + ' ' + (this._sweepFlag ? '1' : '0') + ' ' + this._x + ' ' + this._y; }
window.SVGPathSegArcAbs.prototype.clone = function() { return new window.SVGPathSegArcAbs(undefined, this._x, this._y, this._r1, this._r2, this._angle, this._largeArcFlag, this._sweepFlag); }
Object.defineProperty(window.SVGPathSegArcAbs.prototype, 'x', { get: function() { return this._x; }, set: function(x) { this._x = x; this._segmentChanged(); }, enumerable: true });
Object.defineProperty(window.SVGPathSegArcAbs.prototype, 'y', { get: function() { return this._y; }, set: function(y) { this._y = y; this._segmentChanged(); }, enumerable: true });
Object.defineProperty(window.SVGPathSegArcAbs.prototype, 'r1', { get: function() { return this._r1; }, set: function(r1) { this._r1 = r1; this._segmentChanged(); }, enumerable: true });
Object.defineProperty(window.SVGPathSegArcAbs.prototype, 'r2', { get: function() { return this._r2; }, set: function(r2) { this._r2 = r2; this._segmentChanged(); }, enumerable: true });
Object.defineProperty(window.SVGPathSegArcAbs.prototype, 'angle', { get: function() { return this._angle; }, set: function(angle) { this._angle = angle; this._segmentChanged(); }, enumerable: true });
Object.defineProperty(window.SVGPathSegArcAbs.prototype, 'largeArcFlag', { get: function() { return this._largeArcFlag; }, set: function(largeArcFlag) { this._largeArcFlag = largeArcFlag; this._segmentChanged(); }, enumerable: true });
Object.defineProperty(window.SVGPathSegArcAbs.prototype, 'sweepFlag', { get: function() { return this._sweepFlag; }, set: function(sweepFlag) { this._sweepFlag = sweepFlag; this._segmentChanged(); }, enumerable: true });

window.SVGPathSegArcRel = function(owningPathSegList, x, y, r1, r2, angle, largeArcFlag, sweepFlag) {
window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_ARC_REL, 'a', owningPathSegList);
this._x = x;
this._y = y;
this._r1 = r1;
this._r2 = r2;
this._angle = angle;
this._largeArcFlag = largeArcFlag;
this._sweepFlag = sweepFlag;
}
window.SVGPathSegArcRel.prototype = Object.create(window.SVGPathSeg.prototype);
window.SVGPathSegArcRel.prototype.toString = function() { return '[object SVGPathSegArcRel]'; }
window.SVGPathSegArcRel.prototype._asPathString = function() { return this.pathSegTypeAsLetter + ' ' + this._r1 + ' ' + this._r2 + ' ' + this._angle + ' ' + (this._largeArcFlag ? '1' : '0') + ' ' + (this._sweepFlag ? '1' : '0') + ' ' + this._x + ' ' + this._y; }
window.SVGPathSegArcRel.prototype.clone = function() { return new window.SVGPathSegArcRel(undefined, this._x, this._y, this._r1, this._r2, this._angle, this._largeArcFlag, this._sweepFlag); }
Object.defineProperty(window.SVGPathSegArcRel.prototype, 'x', { get: function() { return this._x; }, set: function(x) { this._x = x; this._segmentChanged(); }, enumerable: true });
Object.defineProperty(window.SVGPathSegArcRel.prototype, 'y', { get: function() { return this._y; }, set: function(y) { this._y = y; this._segmentChanged(); }, enumerable: true });
Object.defineProperty(window.SVGPathSegArcRel.prototype, 'r1', { get: function() { return this._r1; }, set: function(r1) { this._r1 = r1; this._segmentChanged(); }, enumerable: true });
Object.defineProperty(window.SVGPathSegArcRel.prototype, 'r2', { get: function() { return this._r2; }, set: function(r2) { this._r2 = r2; this._segmentChanged(); }, enumerable: true });
Object.defineProperty(window.SVGPathSegArcRel.prototype, 'angle', { get: function() { return this._angle; }, set: function(angle) { this._angle = angle; this._segmentChanged(); }, enumerable: true });
Object.defineProperty(window.SVGPathSegArcRel.prototype, 'largeArcFlag', { get: function() { return this._largeArcFlag; }, set: function(largeArcFlag) { this._largeArcFlag = largeArcFlag; this._segmentChanged(); }, enumerable: true });
Object.defineProperty(window.SVGPathSegArcRel.prototype, 'sweepFlag', { get: function() { return this._sweepFlag; }, set: function(sweepFlag) { this._sweepFlag = sweepFlag; this._segmentChanged(); }, enumerable: true });

window.SVGPathSegLinetoHorizontalAbs = function(owningPathSegList, x) {
window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_ABS, 'H', owningPathSegList);
this._x = x;
}
window.SVGPathSegLinetoHorizontalAbs.prototype = Object.create(window.SVGPathSeg.prototype);
window.SVGPathSegLinetoHorizontalAbs.prototype.toString = function() { return '[object SVGPathSegLinetoHorizontalAbs]'; }
window.SVGPathSegLinetoHorizontalAbs.prototype._asPathString = function() { return this.pathSegTypeAsLetter + ' ' + this._x; }
window.SVGPathSegLinetoHorizontalAbs.prototype.clone = function() { return new window.SVGPathSegLinetoHorizontalAbs(undefined, this._x); }
Object.defineProperty(window.SVGPathSegLinetoHorizontalAbs.prototype, 'x', { get: function() { return this._x; }, set: function(x) { this._x = x; this._segmentChanged(); }, enumerable: true });

window.SVGPathSegLinetoHorizontalRel = function(owningPathSegList, x) {
window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_REL, 'h', owningPathSegList);
this._x = x;
}
window.SVGPathSegLinetoHorizontalRel.prototype = Object.create(window.SVGPathSeg.prototype);
window.SVGPathSegLinetoHorizontalRel.prototype.toString = function() { return '[object SVGPathSegLinetoHorizontalRel]'; }
window.SVGPathSegLinetoHorizontalRel.prototype._asPathString = function() { return this.pathSegTypeAsLetter + ' ' + this._x; }
window.SVGPathSegLinetoHorizontalRel.prototype.clone = function() { return new window.SVGPathSegLinetoHorizontalRel(undefined, this._x); }
Object.defineProperty(window.SVGPathSegLinetoHorizontalRel.prototype, 'x', { get: function() { return this._x; }, set: function(x) { this._x = x; this._segmentChanged(); }, enumerable: true });

window.SVGPathSegLinetoVerticalAbs = function(owningPathSegList, y) {
window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_LINETO_VERTICAL_ABS, 'V', owningPathSegList);
this._y = y;
}
window.SVGPathSegLinetoVerticalAbs.prototype = Object.create(window.SVGPathSeg.prototype);
window.SVGPathSegLinetoVerticalAbs.prototype.toString = function() { return '[object SVGPathSegLinetoVerticalAbs]'; }
window.SVGPathSegLinetoVerticalAbs.prototype._asPathString = function() { return this.pathSegTypeAsLetter + ' ' + this._y; }
window.SVGPathSegLinetoVerticalAbs.prototype.clone = function() { return new window.SVGPathSegLinetoVerticalAbs(undefined, this._y); }
Object.defineProperty(window.SVGPathSegLinetoVerticalAbs.prototype, 'y', { get: function() { return this._y; }, set: function(y) { this._y = y; this._segmentChanged(); }, enumerable: true });

window.SVGPathSegLinetoVerticalRel = function(owningPathSegList, y) {
window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_LINETO_VERTICAL_REL, 'v', owningPathSegList);
this._y = y;
}
window.SVGPathSegLinetoVerticalRel.prototype = Object.create(window.SVGPathSeg.prototype);
window.SVGPathSegLinetoVerticalRel.prototype.toString = function() { return '[object SVGPathSegLinetoVerticalRel]'; }
window.SVGPathSegLinetoVerticalRel.prototype._asPathString = function() { return this.pathSegTypeAsLetter + ' ' + this._y; }
window.SVGPathSegLinetoVerticalRel.prototype.clone = function() { return new window.SVGPathSegLinetoVerticalRel(undefined, this._y); }
Object.defineProperty(window.SVGPathSegLinetoVerticalRel.prototype, 'y', { get: function() { return this._y; }, set: function(y) { this._y = y; this._segmentChanged(); }, enumerable: true });

window.SVGPathSegCurvetoCubicSmoothAbs = function(owningPathSegList, x, y, x2, y2) {
window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_ABS, 'S', owningPathSegList);
this._x = x;
this._y = y;
this._x2 = x2;
this._y2 = y2;
}
window.SVGPathSegCurvetoCubicSmoothAbs.prototype = Object.create(window.SVGPathSeg.prototype);
window.SVGPathSegCurvetoCubicSmoothAbs.prototype.toString = function() { return '[object SVGPathSegCurvetoCubicSmoothAbs]'; }
window.SVGPathSegCurvetoCubicSmoothAbs.prototype._asPathString = function() { return this.pathSegTypeAsLetter + ' ' + this._x2 + ' ' + this._y2 + ' ' + this._x + ' ' + this._y; }
window.SVGPathSegCurvetoCubicSmoothAbs.prototype.clone = function() { return new window.SVGPathSegCurvetoCubicSmoothAbs(undefined, this._x, this._y, this._x2, this._y2); }
Object.defineProperty(window.SVGPathSegCurvetoCubicSmoothAbs.prototype, 'x', { get: function() { return this._x; }, set: function(x) { this._x = x; this._segmentChanged(); }, enumerable: true });
Object.defineProperty(window.SVGPathSegCurvetoCubicSmoothAbs.prototype, 'y', { get: function() { return this._y; }, set: function(y) { this._y = y; this._segmentChanged(); }, enumerable: true });
Object.defineProperty(window.SVGPathSegCurvetoCubicSmoothAbs.prototype, 'x2', { get: function() { return this._x2; }, set: function(x2) { this._x2 = x2; this._segmentChanged(); }, enumerable: true });
Object.defineProperty(window.SVGPathSegCurvetoCubicSmoothAbs.prototype, 'y2', { get: function() { return this._y2; }, set: function(y2) { this._y2 = y2; this._segmentChanged(); }, enumerable: true });

window.SVGPathSegCurvetoCubicSmoothRel = function(owningPathSegList, x, y, x2, y2) {
window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_REL, 's', owningPathSegList);
this._x = x;
this._y = y;
this._x2 = x2;
this._y2 = y2;
}
window.SVGPathSegCurvetoCubicSmoothRel.prototype = Object.create(window.SVGPathSeg.prototype);
window.SVGPathSegCurvetoCubicSmoothRel.prototype.toString = function() { return '[object SVGPathSegCurvetoCubicSmoothRel]'; }
window.SVGPathSegCurvetoCubicSmoothRel.prototype._asPathString = function() { return this.pathSegTypeAsLetter + ' ' + this._x2 + ' ' + this._y2 + ' ' + this._x + ' ' + this._y; }
window.SVGPathSegCurvetoCubicSmoothRel.prototype.clone = function() { return new window.SVGPathSegCurvetoCubicSmoothRel(undefined, this._x, this._y, this._x2, this._y2); }
Object.defineProperty(window.SVGPathSegCurvetoCubicSmoothRel.prototype, 'x', { get: function() { return this._x; }, set: function(x) { this._x = x; this._segmentChanged(); }, enumerable: true });
Object.defineProperty(window.SVGPathSegCurvetoCubicSmoothRel.prototype, 'y', { get: function() { return this._y; }, set: function(y) { this._y = y; this._segmentChanged(); }, enumerable: true });
Object.defineProperty(window.SVGPathSegCurvetoCubicSmoothRel.prototype, 'x2', { get: function() { return this._x2; }, set: function(x2) { this._x2 = x2; this._segmentChanged(); }, enumerable: true });
Object.defineProperty(window.SVGPathSegCurvetoCubicSmoothRel.prototype, 'y2', { get: function() { return this._y2; }, set: function(y2) { this._y2 = y2; this._segmentChanged(); }, enumerable: true });

window.SVGPathSegCurvetoQuadraticSmoothAbs = function(owningPathSegList, x, y) {
window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS, 'T', owningPathSegList);
this._x = x;
this._y = y;
}
window.SVGPathSegCurvetoQuadraticSmoothAbs.prototype = Object.create(window.SVGPathSeg.prototype);
window.SVGPathSegCurvetoQuadraticSmoothAbs.prototype.toString = function() { return '[object SVGPathSegCurvetoQuadraticSmoothAbs]'; }
window.SVGPathSegCurvetoQuadraticSmoothAbs.prototype._asPathString = function() { return this.pathSegTypeAsLetter + ' ' + this._x + ' ' + this._y; }
window.SVGPathSegCurvetoQuadraticSmoothAbs.prototype.clone = function() { return new window.SVGPathSegCurvetoQuadraticSmoothAbs(undefined, this._x, this._y); }
Object.defineProperty(window.SVGPathSegCurvetoQuadraticSmoothAbs.prototype, 'x', { get: function() { return this._x; }, set: function(x) { this._x = x; this._segmentChanged(); }, enumerable: true });
Object.defineProperty(window.SVGPathSegCurvetoQuadraticSmoothAbs.prototype, 'y', { get: function() { return this._y; }, set: function(y) { this._y = y; this._segmentChanged(); }, enumerable: true });

window.SVGPathSegCurvetoQuadraticSmoothRel = function(owningPathSegList, x, y) {
window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL, 't', owningPathSegList);
this._x = x;
this._y = y;
}
window.SVGPathSegCurvetoQuadraticSmoothRel.prototype = Object.create(window.SVGPathSeg.prototype);
window.SVGPathSegCurvetoQuadraticSmoothRel.prototype.toString = function() { return '[object SVGPathSegCurvetoQuadraticSmoothRel]'; }
window.SVGPathSegCurvetoQuadraticSmoothRel.prototype._asPathString = function() { return this.pathSegTypeAsLetter + ' ' + this._x + ' ' + this._y; }
window.SVGPathSegCurvetoQuadraticSmoothRel.prototype.clone = function() { return new window.SVGPathSegCurvetoQuadraticSmoothRel(undefined, this._x, this._y); }
Object.defineProperty(window.SVGPathSegCurvetoQuadraticSmoothRel.prototype, 'x', { get: function() { return this._x; }, set: function(x) { this._x = x; this._segmentChanged(); }, enumerable: true });
Object.defineProperty(window.SVGPathSegCurvetoQuadraticSmoothRel.prototype, 'y', { get: function() { return this._y; }, set: function(y) { this._y = y; this._segmentChanged(); }, enumerable: true });

window.SVGPathElement.prototype.createSVGPathSegClosePath = function() { return new window.SVGPathSegClosePath(undefined); }
window.SVGPathElement.prototype.createSVGPathSegMovetoAbs = function(x, y) { return new window.SVGPathSegMovetoAbs(undefined, x, y); }
window.SVGPathElement.prototype.createSVGPathSegMovetoRel = function(x, y) { return new window.SVGPathSegMovetoRel(undefined, x, y); }
window.SVGPathElement.prototype.createSVGPathSegLinetoAbs = function(x, y) { return new window.SVGPathSegLinetoAbs(undefined, x, y); }
window.SVGPathElement.prototype.createSVGPathSegLinetoRel = function(x, y) { return new window.SVGPathSegLinetoRel(undefined, x, y); }
window.SVGPathElement.prototype.createSVGPathSegCurvetoCubicAbs = function(x, y, x1, y1, x2, y2) { return new window.SVGPathSegCurvetoCubicAbs(undefined, x, y, x1, y1, x2, y2); }
                               window.SVGPathSeg.PATHSEG_UNKNOWN = 0;
window.SVGPathSeg.PATHSEG_CLOSEPATH = 1;
window.SVGPathSeg.PATHSEG_MOVETO_ABS = 2;
window.SVGPathSeg.PATHSEG_MOVETO_REL = 3;
window.SVGPathSeg.PATHSEG_LINETO_ABS = 4;
window.SVGPathSeg.PATHSEG_LINETO_REL = 5;
window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_ABS = 6;
window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_REL = 7;
window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_ABS = 8;
window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_REL = 9;
window.SVGPathSeg.PATHSEG_ARC_ABS = 10;
window.SVGPathSeg.PATHSEG_ARC_REL = 11;
window.SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_ABS = 12;
window.SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_REL = 13;
window.SVGPathSeg.PATHSEG_LINETO_VERTICAL_ABS = 14;
window.SVGPathSeg.PATHSEG_LINETO_VERTICAL_REL = 15;
window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_ABS = 16;
window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_REL = 17;
window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS = 18;
window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL = 19;

window.SVGPathSeg.prototype._segmentChanged = function() {
if (this._owningPathSegList)
this._owningPathSegList.segmentChanged(this);
}

window.SVGPathSegClosePath = function(owningPathSegList) {
window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_CLOSEPATH, 'z', owningPathSegList);
}
window.SVGPathSegClosePath.prototype = Object.create(window.SVGPathSeg.prototype);
window.SVGPathSegClosePath.prototype.toString = function() { return '[object SVGPathSegClosePath]'; }
window.SVGPathSegClosePath.prototype._asPathString = function() { return this.pathSegTypeAsLetter; }
window.SVGPathSegClosePath.prototype.clone = function() { return new window.SVGPathSegClosePath(undefined); }

window.SVGPathSegMovetoAbs = function(owningPathSegList, x, y) {
window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_MOVETO_ABS, 'M', owningPathSegList);
this._x = x;
this._y = y;
}
window.SVGPathSegMovetoAbs.prototype = Object.create(window.SVGPathSeg.prototype);
window.SVGPathSegMovetoAbs.prototype.toString = function() { return '[object SVGPathSegMovetoAbs]'; }
window.SVGPathSegMovetoAbs.prototype._asPathString = function() { return this.pathSegTypeAsLetter + ' ' + this._x + ' ' + this._y; }
window.SVGPathSegMovetoAbs.prototype.clone = function() { return new window.SVGPathSegMovetoAbs(undefined, this._x, this._y); }
Object.defineProperty(window.SVGPathSegMovetoAbs.prototype, 'x', { get: function() { return this._x; }, set: function(x) { this._x = x; this._segmentChanged(); }, enumerable: true });
Object.defineProperty(window.SVGPathSegMovetoAbs.prototype, 'y', { get: function() { return this._y; }, set: function(y) { this._y = y; this._segmentChanged(); }, enumerable: true });

window.SVGPathSegMovetoRel = function(owningPathSegList, x, y) {
window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_MOVETO_REL, 'm', owningPathSegList);
this._x = x;
this._y = y;
}
window.SVGPathSegMovetoRel.prototype = Object.create(window.SVGPathSeg.prototype);
window.SVGPathSegMovetoRel.prototype.toString = function() { return '[object SVGPathSegMovetoRel]'; }
window.SVGPathSegMovetoRel.prototype._asPathString = function() { return this.pathSegTypeAsLetter + ' ' + this._x + ' ' + this._y; }
window.SVGPathSegMovetoRel.prototype.clone = function() { return new window.SVGPathSegMovetoRel(undefined, this._x, this._y); }
Object.defineProperty(window.SVGPathSegMovetoRel.prototype, 'x', { get: function() { return this._x; }, set: function(x) { this._x = x; this._segmentChanged(); }, enumerable: true });
Object.defineProperty(window.SVGPathSegMovetoRel.prototype, 'y', { get: function() { return this._y; }, set: function(y) { this._y = y; this._segmentChanged(); }, enumerable: true });

window.SVGPathSegLinetoAbs = function(owningPathSegList, x, y) {
window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_LINETO_ABS, 'L', owningPathSegList);
this._x = x;
this._y = y;
}
window.SVGPathSegLinetoAbs.prototype = Object.create(window.SVGPathSeg.prototype);
window.SVGPathSegLinetoAbs.prototype.toString = function() { return '[object SVGPathSegLinetoAbs]'; }
window.SVGPathSegLinetoAbs.prototype._asPathString = function() { return this.pathSegTypeAsLetter + ' ' + this._x + ' ' + this._y; }
window.SVGPathSegLinetoAbs.prototype.clone = function() { return new window.SVGPathSegLinetoAbs(undefined, this._x, this._y); }
Object.defineProperty(window.SVGPathSegLinetoAbs.prototype, 'x', { get: function() { return this._x; }, set: function(x) { this._x = x; this._segmentChanged(); }, enumerable: true });
Object.defineProperty(window.SVGPathSegLinetoAbs.prototype, 'y', { get: function() { return this._y; }, set: function(y) { this._y = y; this._segmentChanged(); }, enumerable: true });

window.SVGPathSegLinetoRel = function(owningPathSegList, x, y) {
window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_LINETO_REL, 'l', owningPathSegList);
this._x = x;
this._y = y;
}
window.SVGPathSegLinetoRel.prototype = Object.create(window.SVGPathSeg.prototype);
window.SVGPathSegLinetoRel.prototype.toString = function() { return '[object SVGPathSegLinetoRel]'; }
window.SVGPathSegLinetoRel.prototype._asPathString = function() { return this.pathSegTypeAsLetter + ' ' + this._x + ' ' + this._y; }
window.SVGPathSegLinetoRel.prototype.clone = function() { return new window.SVGPathSegLinetoRel(undefined, this._x, this._y); }
Object.defineProperty(window.SVGPathSegLinetoRel.prototype, 'x', { get: function() { return this._x; }, set: function(x) { this._x = x; this._segmentChanged(); }, enumerable: true });
Object.defineProperty(window.SVGPathSegLinetoRel.prototype, 'y', { get: function() { return this._y; }, set: function(y) { this._y = y; this._segmentChanged(); }, enumerable: true });

window.SVGPathSegCurvetoCubicAbs = function(owningPathSegList, x, y, x1, y1, x2, y2) {
window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_ABS, 'C', owningPathSegList);
this._x = x;
this._y = y;
this._x1 = x1;
this._y1 = y1;
this._x2 = x2;
this._y2 = y2;
}
window.SVGPathSegCurvetoCubicAbs.prototype = Object.create(window.SVGPathSeg.prototype);
window.SVGPathSegCurvetoCubicAbs.prototype.toString = function() { return '[object SVGPathSegCurvetoCubicAbs]'; }
window.SVGPathSegCurvetoCubicAbs.prototype._asPathString = function() { return this.pathSegTypeAsLetter + ' ' + this._x1 + ' ' + this._y1 + ' ' + this._x2 + ' ' + this._y2 + ' ' + this._x + ' ' + this._y; }
window.SVGPathSegCurvetoCubicAbs.prototype.clone = function() { return new window.SVGPathSegCurvetoCubicAbs(undefined, this._x, this._y, this._x1, this._y1, this._x2, this._y2); }
Object.defineProperty(window.SVGPathSegCurvetoCubicAbs.prototype, 'x', { get: function() { return this._x; }, set: function(x) { this._x = x; this._segmentChanged(); }, enumerable: true });
Object.defineProperty(window.SVGPathSegCurvetoCubicAbs.prototype, 'y', { get: function() { return this._y; }, set: function(y) { this._y = y; this._segmentChanged(); }, enumerable: true });
Object.defineProperty(window.SVGPathSegCurvetoCubicAbs.prototype, 'x1', { get: function() { return this._x1; }, set: function(x1) { this._x1 = x1; this._segmentChanged(); }, enumerable: true });
Object.defineProperty(window.SVGPathSegCurvetoCubicAbs.prototype, 'y1', { get: function() { return this._y1; }, set: function(y1) { this._y1 = y1; this._segmentChanged(); }, enumerable: true });
Object.defineProperty(window.SVGPathSegCurvetoCubicAbs.prototype, 'x2', { get: function() { return this._x2; }, set: function(x2) { this._x2 = x2; this._segmentChanged(); }, enumerable: true });
Object.defineProperty(window.SVGPathSegCurvetoCubicAbs.prototype, 'y2', { get: function() { return this._y2; }, set: function(y2) { this._y2 = y2; this._segmentChanged(); }, enumerable: true });

window.SVGPathSegCurvetoCubicRel = function(owningPathSegList, x, y, x1, y1, x2, y2) {
window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_REL, 'c', owningPathSegList);
this._x = x;
this._y = y;
this._x1 = x1;
this._y1 = y1;
this._x2 = x2;
this._y2 = y2;
}
window.SVGPathSegCurvetoCubicRel.prototype = Object.create(window.SVGPathSeg.prototype);
window.SVGPathSegCurvetoCubicRel.prototype.toString = function() { return '[object SVGPathSegCurvetoCubicRel]'; }
window.SVGPathSegCurvetoCubicRel.prototype._asPathString = function() { return this.pathSegTypeAsLetter + ' ' + this._x1 + ' ' + this._y1 + ' ' + this._x2 + ' ' + this._y2 + ' ' + this._x + ' ' + this._y; }
window.SVGPathSegCurvetoCubicRel.prototype.clone = function() { return new window.SVGPathSegCurvetoCubicRel(undefined, this._x, this._y, this._x1, this._y1, this._x2, this._y2); }
Object.defineProperty(window.SVGPathSegCurvetoCubicRel.prototype, 'x', { get: function() { return this._x; }, set: function(x) { this._x = x; this._segmentChanged(); }, enumerable: true });
Object.defineProperty(window.SVGPathSegCurvetoCubicRel.prototype, 'y', { get: function() { return this._y; }, set: function(y) { this._y = y; this._segmentChanged(); }, enumerable: true });
Object.defineProperty(window.SVGPathSegCurvetoCubicRel.prototype, 'x1', { get: function() { return this._x1; }, set: function(x1) { this._x1 = x1; this._segmentChanged(); }, enumerable: true });
Object.defineProperty(window.SVGPathSegCurvetoCubicRel.prototype, 'y1', { get: function() { return this._y1; }, set: function(y1) { this._y1 = y1; this._segmentChanged(); }, enumerable: true });
Object.defineProperty(window.SVGPathSegCurvetoCubicRel.prototype, 'x2', { get: function() { return this._x2; }, set: function(x2) { this._x2 = x2; this._segmentChanged(); }, enumerable: true });
Object.defineProperty(window.SVGPathSegCurvetoCubicRel.prototype, 'y2', { get: function() { return this._y2; }, set: function(y2) { this._y2 = y2; this._segmentChanged(); }, enumerable: true });

window.SVGPathSegCurvetoQuadraticAbs = function(owningPathSegList, x, y, x1, y1) {
window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_ABS, 'Q', owningPathSegList);
this._x = x;
this._y = y;
this._x1 = x1;
this._y1 = y1;
}
window.SVGPathSegCurvetoQuadraticAbs.prototype = Object.create(window.SVGPathSeg.prototype);
window.SVGPathSegCurvetoQuadraticAbs.prototype.toString = function() { return '[object SVGPathSegCurvetoQuadraticAbs]'; }
window.SVGPathSegCurvetoQuadraticAbs.prototype._asPathString = function() { return this.pathSegTypeAsLetter + ' ' + this._x1 + ' ' + this._y1 + ' ' + this._x + ' ' + this._y; }
window.SVGPathSegCurvetoQuadraticAbs.prototype.clone = function() { return new window.SVGPathSegCurvetoQuadraticAbs(undefined, this._x, this._y, this._x1, this._y1); }
Object.defineProperty(window.SVGPathSegCurvetoQuadraticAbs.prototype, 'x', { get: function() { return this._x; }, set: function(x) { this._x = x; this._segmentChanged(); }, enumerable: true });
Object.defineProperty(window.SVGPathSegCurvetoQuadraticAbs.prototype, 'y', { get: function() { return this._y; }, set: function(y) { this._y = y; this._segmentChanged(); }, enumerable: true });
Object.defineProperty(window.SVGPathSegCurvetoQuadraticAbs.prototype, 'x1', { get: function() { return this._x1; }, set: function(x1) { this._x1 = x1; this._segmentChanged(); }, enumerable: true });
Object.defineProperty(window.SVGPathSegCurvetoQuadraticAbs.prototype, 'y1', { get: function() { return this._y1; }, set: function(y1) { this._y1 = y1; this._segmentChanged(); }, enumerable: true });

window.SVGPathSegCurvetoQuadraticRel = function(owningPathSegList, x, y, x1, y1) {
window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_REL, 'q', owningPathSegList);
this._x = x;
this._y = y;
this._x1 = x1;
this._y1 = y1;
}
window.SVGPathSegCurvetoQuadraticRel.prototype = Object.create(window.SVGPathSeg.prototype);
window.SVGPathSegCurvetoQuadraticRel.prototype.toString = function() { return '[object SVGPathSegCurvetoQuadraticRel]'; }
window.SVGPathSegCurvetoQuadraticRel.prototype._asPathString = function() { return this.pathSegTypeAsLetter + ' ' + this._x1 + ' ' + this._y1 + ' ' + this._x + ' ' + this._y; }
window.SVGPathSegCurvetoQuadraticRel.prototype.clone = function() { return new window.SVGPathSegCurvetoQuadraticRel(undefined, this._x, this._y, this._x1, this._y1); }
Object.defineProperty(window.SVGPathSegCurvetoQuadraticRel.prototype, 'x', { get: function() { return this._x; }, set: function(x) { this._x = x; this._segmentChanged(); }, enumerable: true });
              
has.add('air', dua.indexOf('AdobeAIR') >= 0);
has.add('khtml', dav.indexOf('Konqueror') >= 0 ? tv : undefined);
has.add('webkit', parseFloat(dua.split('WebKit/')[1]) || undefined);
has.add('chrome', parseFloat(dua.split('Chrome/')[1]) || undefined);
has.add('safari', dav.indexOf('Safari')>=0 && !has('chrome') ? parseFloat(dav.split('Version/')[1]) : undefined);
has.add('mac', dav.indexOf('Macintosh') >= 0);
has.add('quirks', document.compatMode == 'BackCompat');
has.add('ios', /iPhone|iPod|iPad/.test(dua));
has.add('android', parseFloat(dua.split('Android ')[1]) || undefined);

if(!has('webkit')){
if(dua.indexOf('Opera') >= 0){
has.add('opera', tv >= 9.8 ? parseFloat(dua.split('Version/')[1]) || tv : tv);
}

if(dua.indexOf('Gecko') >= 0 && !has('khtml') && !has('webkit')){
has.add('mozilla', tv);
}
if(has('mozilla')){
has.add('ff', parseFloat(dua.split('Firefox/')[1] || dua.split('Minefield/')[1]) || undefined);
}

if(document.all && !has('opera')){
var isIE = parseFloat(dav.split('MSIE ')[1]) || undefined;

var mode = document.documentMode;
if(mode && mode != 5 && Math.floor(isIE) != mode){
isIE = mode;
}

has.add('ie', isIE);
}

has.add('wii', typeof opera != 'undefined' && opera.wiiremote);
}

var detect =
{
isFF: has('ff'),

isIE: has('ie'),

isKhtml: has('khtml'),

isWebKit: has('webkit'),

isMozilla: has('mozilla'),
isMoz: has('mozilla'),

isOpera: has('opera'),

isSafari: has('safari'),

isChrome: has('chrome'),

isMac: has('mac'),

isIos: has('ios'),

isAndroid: has('android'),

isWii: has('wii'),

isQuirks: has('quirks'),

isAir: has('air')
};
return detect;
}

/*****
* @dojoend
*
*  The above code is a derivative work of some part of the dojox.gfx library.
*  @source http://svn.dojotoolkit.org/src/dojox/trunk/_base/sniff.js
*/

/*****
* @licstart
*
* The following is the license notice for the part of JavaScript code of this
* file included between the '@svgpathstart' and the '@svgpathend' notes.
*/

/*****  **********************************************************************
*
*   Copyright 2015 The Chromium Authors. All rights reserved.
*
*   The Chromium Authors can be found at
*   http://src.chromium.org/svn/trunk/src/AUTHORS
*
*   Redistribution and use in source and binary forms, with or without
*   modification, are permitted provided that the following conditions are
*   met:
*
*   * Redistributions of source code must retain the above copyright
*   notice, this list of conditions and the following disclaimer.
*   * Redistributions in binary form must reproduce the above
*   copyright notice, this list of conditions and the following disclaimer
*   in the documentation and/or other materials provided with the
*   distribution.
*   * Neither the name of Google Inc. nor the names of its
*   contributors may be used to endorse or promote products derived from
*   this software without specific prior written permission.
*
*   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
*   'AS IS' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
*   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
*   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
*   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
*   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
*   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
*   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
*   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
*   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
*   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
****************************************************************************/

/*****
* @licend
*
* The above is the license notice for the part of JavaScript code of this
* file included between the '@svgpathstart' and the '@svgpathend' notes.
*/


/*****
* @svgpathstart
*
*  The following code is a derivative work of some part of the SVGPathSeg API.
*
*  This API is a drop-in replacement for the SVGPathSeg and SVGPathSegList APIs that were removed from
*  SVG2 (https://lists.w3.org/Archives/Public/www-svg/2015Jun/0044.html), including the latest spec
*  changes which were implemented in Firefox 43 and Chrome 46.
*
*  @source https://github.com/progers/pathseg
*/

(function() { 'use strict';
if (!('SVGPathSeg' in window)) {
window.SVGPathSeg = function(type, typeAsLetter, owningPathSegList) {
this.pathSegType = type;
this.pathSegTypeAsLetter = typeAsLetter;
this._owningPathSegList = owningPathSegList;
}

window.SVGPathSeg.prototype.classname = 'SVGPathSeg';

      }
else
{
log( 'error: HyperlinkElement.handleClick: invalid window object.' );
}
}

var aSlideAnimationsHandler = theMetaDoc.aMetaSlideSet[nCurSlide].aSlideAnimationsHandler;
if( aSlideAnimationsHandler )
{
var aCurrentEventMultiplexer = aSlideAnimationsHandler.aEventMultiplexer;
if( aCurrentEventMultiplexer )
{
if( aCurrentEventMultiplexer.hasRegisteredMouseClickHandlers() )
{
return aCurrentEventMultiplexer.notifyMouseClick( aEvt );
}
}
}
return slideOnMouseUp( aEvt );
}


function getDefaultMouseHandlerDictionary()
{
var mouseHandlerDict = {};

mouseHandlerDict[SLIDE_MODE] = {};
mouseHandlerDict[INDEX_MODE] = {};

mouseHandlerDict[SLIDE_MODE][MOUSE_UP]
= mouseClickHelper;

mouseHandlerDict[SLIDE_MODE][MOUSE_WHEEL]
= function( aEvt ) { return slideOnMouseWheel( aEvt ); };

mouseHandlerDict[INDEX_MODE][MOUSE_UP]
= function( ) { return toggleSlideIndex(); };

return mouseHandlerDict;
}

function indexSetPageSlide( nIndex )
{
var aMetaSlideSet = theMetaDoc.aMetaSlideSet;
nIndex = getSafeIndex( nIndex, 0, aMetaSlideSet.length - 1 );

var nSelectedThumbnailIndex = nIndex % theSlideIndexPage.getTotalThumbnails();
var offset = nIndex - nSelectedThumbnailIndex;

if( offset < 0 )
offset = 0;

if( offset != INDEX_OFFSET )
{
INDEX_OFFSET = offset;
displayIndex( INDEX_OFFSET );
}

theSlideIndexPage.setSelection( nSelectedThumbnailIndex );
}


/*****
* @jessyinkend
*
*  The above code is a derivative work of some parts of the JessyInk project.
*  @source http://code.google.com/p/jessyink/
*/


/*****
* @licstart
*
* The following is the license notice for the part of JavaScript code of this
* page included between the '@dojostart' and the '@dojoend' notes.
*/

/*****  **********************************************************************
*
*  The 'New' BSD License:
*  **********************
*  Copyright (c) 2005-2012, The Dojo Foundation
*  All rights reserved.
*
*  Redistribution and use in source and binary forms, with or without
*  modification, are permitted provided that the following conditions are met:
*
*    * Redistributions of source code must retain the above copyright notice,
*      this list of conditions and the following disclaimer.
*    * Redistributions in binary form must reproduce the above copyright notice,
*      this list of conditions and the following disclaimer in the documentation
*      and/or other materials provided with the distribution.
*    * Neither the name of the Dojo Foundation nor the names of its contributors
*      may be used to endorse or promote products derived from this software
*      without specific prior written permission.
*
*  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' AND
*  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
*  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
*  DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
*  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
*  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
*  SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
*  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
*  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
*  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
****************************************************************************/


/*****
* @licend
*
* The above is the license notice for the part of JavaScript code of this
* page included between the '@dojostart' and the '@dojoend' notes.
*/


/*****
* @dojostart
*
*  The following code is a derivative work of some part of the dojox.gfx library.
*  @source http://svn.dojotoolkit.org/src/dojox/trunk/_base/sniff.js
*/

function has( name )
{
return has.cache[name];
}

has.cache = {};

has.add = function( name, test )
{
has.cache[name] = test;
};

function configureDetectionTools()
{
if( !navigator )
{
log( 'error: configureDetectionTools: configuration failed' );
return null;
}

var n = navigator,
dua = n.userAgent,
dav = n.appVersion,
tv = parseFloat(dav);
                            = function() { return indexSetPageSlide( theSlideIndexPage.selectedSlideIndex + theSlideIndexPage.getTotalThumbnails() ); };
keyCodeDict[INDEX_MODE][HOME_KEY]
= function() { return indexSetPageSlide( 0 ); };
keyCodeDict[INDEX_MODE][END_KEY]
= function() { return indexSetPageSlide( theMetaDoc.nNumberOfSlides - 1 ); };
keyCodeDict[INDEX_MODE][ENTER_KEY]
= function() { return toggleSlideIndex(); };
keyCodeDict[INDEX_MODE][SPACE_KEY]
= function() { return toggleSlideIndex(); };
keyCodeDict[INDEX_MODE][ESCAPE_KEY]
= function() { return abandonIndexMode(); };

return keyCodeDict;
}

function getDefaultCharCodeDictionary()
{
var charCodeDict = {};

charCodeDict[SLIDE_MODE] = {};
charCodeDict[INDEX_MODE] = {};

charCodeDict[SLIDE_MODE]['i']
= function () { return toggleSlideIndex(); };

charCodeDict[INDEX_MODE]['i']
= function () { return toggleSlideIndex(); };
charCodeDict[INDEX_MODE]['-']
= function () { return theSlideIndexPage.decreaseNumberOfColumns(); };
charCodeDict[INDEX_MODE]['=']
= function () { return theSlideIndexPage.increaseNumberOfColumns(); };
charCodeDict[INDEX_MODE]['+']
= function () { return theSlideIndexPage.increaseNumberOfColumns(); };
charCodeDict[INDEX_MODE]['0']
= function () { return theSlideIndexPage.resetNumberOfColumns(); };

return charCodeDict;
}


function slideOnMouseUp( aEvt )
{
if (!aEvt)
aEvt = window.event;

var nOffset = 0;

if( aEvt.button == 0 )
nOffset = 1;
else if( aEvt.button == 2 )
nOffset = -1;

if( 0 != nOffset )
dispatchEffects( nOffset );
return true; // the click has been handled
}

document.handleClick = slideOnMouseUp;


function slideOnMouseWheel(aEvt)
{
var delta = 0;

if (!aEvt)
aEvt = window.event;

if (aEvt.wheelDelta)
{ // IE Opera
delta = aEvt.wheelDelta/120;
}
else if (aEvt.detail)
{ // MOZ
delta = -aEvt.detail/3;
}

if (delta > 0)
skipEffects(-1);
else if (delta < 0)
skipEffects(1);

if (aEvt.preventDefault)
aEvt.preventDefault();

aEvt.returnValue = false;
}

if( window.addEventListener )
{
window.addEventListener( 'DOMMouseScroll', function( aEvt ) { return mouseHandlerDispatch( aEvt, MOUSE_WHEEL ); }, false );
}

window.onmousewheel
= function( aEvt ) { return mouseHandlerDispatch( aEvt, MOUSE_WHEEL ); };

function mouseHandlerDispatch( aEvt, anAction )
{
if( !aEvt )
aEvt = window.event;

var retVal = true;

if ( mouseHandlerDictionary[currentMode] && mouseHandlerDictionary[currentMode][anAction] )
{
var subRetVal = mouseHandlerDictionary[currentMode][anAction]( aEvt );

if( subRetVal != null && subRetVal != undefined )
retVal = subRetVal;
}

if( aEvt.preventDefault && !retVal )
aEvt.preventDefault();

aEvt.returnValue = retVal;

return retVal;
}

document.onmouseup = function( aEvt ) { return mouseHandlerDispatch( aEvt, MOUSE_UP ); };


function mouseClickHelper( aEvt )
{
if( !Detect.isMozilla )
{
var aWindowObject = document.defaultView;
if( aWindowObject )
{
var aTextSelection = aWindowObject.getSelection();
var sSelectedText =  aTextSelection.toString();
if( sSelectedText )
{
DBGLOG( 'text selection: ' + sSelectedText );
if( sLastSelectedText !== sSelectedText )
{
bTextHasBeenSelected = true;
sLastSelectedText = sSelectedText;
}
else
{
bTextHasBeenSelected = false;
}
return null;
}
else if( bTextHasBeenSelected )
{
bTextHasBeenSelected = false;
sLastSelectedText = '';
return null;
}
                          rootNodeInitialBackgroundColor = ROOT_NODE.style.backgroundColor;

if (color === 'initial')
ROOT_NODE.style.backgroundColor = rootNodeInitialBackgroundColor;
else
ROOT_NODE.style.backgroundColor = color;
}

var isContentHidden = false;
var contentInitialVisibilityValues = null;

function getInitialVisibilityValues() {
var list = ROOT_NODE.querySelectorAll('g');
contentInitialVisibilityValues = [];
for (var i = 0; i < list.length; i++) {
var temp = {};
temp.object = list[i];
temp.visibility = list[i].style.visibility;
contentInitialVisibilityValues.push(temp);
}
}

function hideShowContent(color) {
if (contentInitialVisibilityValues === null)
getInitialVisibilityValues();

if (isContentHidden) {
for (var i = 0; i < contentInitialVisibilityValues.length; i++)
contentInitialVisibilityValues[i].object.style.visibility = contentInitialVisibilityValues[i].visibility;

changeRootNodeBackgroundTo('initial');
isContentHidden = false;
}
else {
for (var i = 0; i < contentInitialVisibilityValues.length; i++)
contentInitialVisibilityValues[i].object.style.visibility = 'hidden';

changeRootNodeBackgroundTo(color);
isContentHidden = true;
}
}

function onKeyDown( aEvt )
{
if ( !aEvt )
aEvt = window.event;

var code = aEvt.keyCode || aEvt.charCode || aEvt.code;


if (code == 0 && aEvt.key != undefined) {
switch (aEvt.key) {
case 'UIKeyInputLeftArrow':
code = LEFT_KEY;
break;
case 'UIKeyInputUpArrow':
code = UP_KEY;
break;
case 'UIKeyInputRightArrow':
code = RIGHT_KEY;
break;
case 'UIKeyInputDownArrow':
code = DOWN_KEY;
break;
}

}
else if (code === P_KEY) {
aEvt.preventDefault();
if (ROOT_NODE.style.cursor === 'pointer')
ROOT_NODE.style.cursor = 'default';
else
ROOT_NODE.style.cursor = 'pointer';
}
else if (code === W_KEY) {
hideShowContent('white');
}
else if (code === B_KEY) {
hideShowContent('black');
}


if( !processingEffect && keyCodeDictionary[currentMode] && keyCodeDictionary[currentMode][code] )
{
return keyCodeDictionary[currentMode][code]();
}
else
{
document.onkeypress = onKeyPress;
return null;
}
}
document.onkeydown = onKeyDown;

function onKeyPress( aEvt )
{
document.onkeypress = null;

if ( !aEvt )
aEvt = window.event;

var str = String.fromCharCode( aEvt.keyCode || aEvt.charCode );

if ( !processingEffect && charCodeDictionary[currentMode] && charCodeDictionary[currentMode][str] )
return charCodeDictionary[currentMode][str]();

return null;
}

function getDefaultKeyCodeDictionary()
{
var keyCodeDict = {};

keyCodeDict[SLIDE_MODE] = {};
keyCodeDict[INDEX_MODE] = {};

keyCodeDict[SLIDE_MODE][LEFT_KEY]
= function() { return aSlideShow.rewindEffect(); };
keyCodeDict[SLIDE_MODE][RIGHT_KEY]
= function() { return dispatchEffects(1); };
keyCodeDict[SLIDE_MODE][UP_KEY]
= function() { return aSlideShow.rewindEffect(); };
keyCodeDict[SLIDE_MODE][DOWN_KEY]
= function() { return skipEffects(1); };
keyCodeDict[SLIDE_MODE][PAGE_UP_KEY]
= function() { return aSlideShow.rewindAllEffects(); };
keyCodeDict[SLIDE_MODE][PAGE_DOWN_KEY]
= function() { return skipAllEffects(); };
keyCodeDict[SLIDE_MODE][HOME_KEY]
= function() { return aSlideShow.displaySlide( 0, true ); };
keyCodeDict[SLIDE_MODE][END_KEY]
= function() { return aSlideShow.displaySlide( theMetaDoc.nNumberOfSlides - 1, true ); };
keyCodeDict[SLIDE_MODE][SPACE_KEY]
= function() { return dispatchEffects(1); };
keyCodeDict[SLIDE_MODE][ESCAPE_KEY]
= function() { return aSlideShow.exitSlideShowInApp(); };
keyCodeDict[SLIDE_MODE][Q_KEY]
= function() { return aSlideShow.exitSlideShowInApp(); };

keyCodeDict[INDEX_MODE][LEFT_KEY]
= function() { return indexSetPageSlide( theSlideIndexPage.selectedSlideIndex - 1 ); };
keyCodeDict[INDEX_MODE][RIGHT_KEY]
= function() { return indexSetPageSlide( theSlideIndexPage.selectedSlideIndex + 1 ); };
keyCodeDict[INDEX_MODE][UP_KEY]
= function() { return indexSetPageSlide( theSlideIndexPage.selectedSlideIndex - theSlideIndexPage.indexColumns ); };
keyCodeDict[INDEX_MODE][DOWN_KEY]
= function() { return indexSetPageSlide( theSlideIndexPage.selectedSlideIndex + theSlideIndexPage.indexColumns ); };
keyCodeDict[INDEX_MODE][PAGE_UP_KEY]
= function() { return indexSetPageSlide( theSlideIndexPage.selectedSlideIndex - theSlideIndexPage.getTotalThumbnails() ); };
keyCodeDict[INDEX_MODE][PAGE_DOWN_KEY]
                }

function triggerDomEvent(event, data) {
var gestureEvent = document.createEvent('Event');
gestureEvent.initEvent(event, true, true);
gestureEvent.gesture = data;
data.target.dispatchEvent(gestureEvent);
}

assign(Hammer, {
INPUT_START: INPUT_START,
INPUT_MOVE: INPUT_MOVE,
INPUT_END: INPUT_END,
INPUT_CANCEL: INPUT_CANCEL,

STATE_POSSIBLE: STATE_POSSIBLE,
STATE_BEGAN: STATE_BEGAN,
STATE_CHANGED: STATE_CHANGED,
STATE_ENDED: STATE_ENDED,
STATE_RECOGNIZED: STATE_RECOGNIZED,
STATE_CANCELLED: STATE_CANCELLED,
STATE_FAILED: STATE_FAILED,

DIRECTION_NONE: DIRECTION_NONE,
DIRECTION_LEFT: DIRECTION_LEFT,
DIRECTION_RIGHT: DIRECTION_RIGHT,
DIRECTION_UP: DIRECTION_UP,
DIRECTION_DOWN: DIRECTION_DOWN,
DIRECTION_HORIZONTAL: DIRECTION_HORIZONTAL,
DIRECTION_VERTICAL: DIRECTION_VERTICAL,
DIRECTION_ALL: DIRECTION_ALL,

Manager: Manager,
Input: Input,
TouchAction: TouchAction,

TouchInput: TouchInput,
MouseInput: MouseInput,
PointerEventInput: PointerEventInput,
TouchMouseInput: TouchMouseInput,
SingleTouchInput: SingleTouchInput,

Recognizer: Recognizer,
AttrRecognizer: AttrRecognizer,
Tap: TapRecognizer,
Pan: PanRecognizer,
Swipe: SwipeRecognizer,
Pinch: PinchRecognizer,
Rotate: RotateRecognizer,
Press: PressRecognizer,

on: addEventListeners,
off: removeEventListeners,
each: each,
merge: merge,
extend: extend,
assign: assign,
inherit: inherit,
bindFn: bindFn,
prefixed: prefixed
});

var freeGlobal = (typeof window !== 'undefined' ? window : (typeof self !== 'undefined' ? self : {})); // jshint ignore:line
freeGlobal.Hammer = Hammer;

if (typeof define === 'function' && define.amd) {
define(function() {
return Hammer;
});
} else if (typeof module != 'undefined' && module.exports) {
module.exports = Hammer;
} else {
window[exportName] = Hammer;
}

})(window, document, 'Hammer');

/*****
* @licstart
*
* The following is the license notice for the part of JavaScript code of this
* page included between the '@jessyinkstart' and the '@jessyinkend' notes.
*/

/*****  ******************************************************************
*
* Copyright 2008-2013 Hannes Hochreiner
*
* The JavaScript code included between the start note '@jessyinkstart'
* and the end note '@jessyinkend' is subject to the terms of the Mozilla
* Public License, v. 2.0. If a copy of the MPL was not distributed with
* this file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* Alternatively, you can redistribute and/or that part of this file
* under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program.  If not, see http://www.gnu.org/licenses/.
*/

/*****
*  You can find the complete source code of the JessyInk project at:
*  @source http://code.google.com/p/jessyink/
*/

/*****
* @licend
*
* The above is the license notice for the part of JavaScript code of this
* page included between the '@jessyinkstart' and the '@jessyinkend' notes.
*/


/*****
* @jessyinkstart
*
*  The following code is a derivative work of some parts of the JessyInk
*  project.
*  @source http://code.google.com/p/jessyink/
*/

function getElementsByProperty( node, name )
{
var elements = [];

if( node.getAttribute( name ) )
elements.push( node );

for( var counter = 0; counter < node.childNodes.length; ++counter )
{
if( node.childNodes[counter].nodeType == 1 )
{
var subElements = getElementsByProperty( node.childNodes[counter], name );
elements = elements.concat( subElements );
}
}
return elements;
}

var rootNodeInitialBackgroundColor = undefined;

function changeRootNodeBackgroundTo(color) {
if (rootNodeInitialBackgroundColor === undefined)
            recognizer = recognizers[i];

if (session.stopped !== FORCED_STOP && ( // 1
!curRecognizer || recognizer == curRecognizer || // 2
recognizer.canRecognizeWith(curRecognizer))) { // 3
recognizer.recognize(inputData);
} else {
recognizer.reset();
}

if (!curRecognizer && recognizer.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED)) {
curRecognizer = session.curRecognizer = recognizer;
}
i++;
}
},

get: function(recognizer) {
if (recognizer instanceof Recognizer) {
return recognizer;
}

var recognizers = this.recognizers;
for (var i = 0; i < recognizers.length; i++) {
if (recognizers[i].options.event == recognizer) {
return recognizers[i];
}
}
return null;
},

add: function(recognizer) {
if (invokeArrayArg(recognizer, 'add', this)) {
return this;
}

var existing = this.get(recognizer.options.event);
if (existing) {
this.remove(existing);
}

this.recognizers.push(recognizer);
recognizer.manager = this;

this.touchAction.update();
return recognizer;
},

remove: function(recognizer) {
if (invokeArrayArg(recognizer, 'remove', this)) {
return this;
}

recognizer = this.get(recognizer);

if (recognizer) {
var recognizers = this.recognizers;
var index = inArray(recognizers, recognizer);

if (index !== -1) {
recognizers.splice(index, 1);
this.touchAction.update();
}
}

return this;
},

on: function(events, handler) {
if (events === undefined) {
return;
}
if (handler === undefined) {
return;
}

var handlers = this.handlers;
each(splitStr(events), function(event) {
handlers[event] = handlers[event] || [];
handlers[event].push(handler);
});
return this;
},

off: function(events, handler) {
if (events === undefined) {
return;
}

var handlers = this.handlers;
each(splitStr(events), function(event) {
if (!handler) {
delete handlers[event];
} else {
handlers[event] && handlers[event].splice(inArray(handlers[event], handler), 1);
}
});
return this;
},

emit: function(event, data) {
if (this.options.domEvents) {
triggerDomEvent(event, data);
}

var handlers = this.handlers[event] && this.handlers[event].slice();
if (!handlers || !handlers.length) {
return;
}

data.type = event;
data.preventDefault = function() {
data.srcEvent.preventDefault();
};

var i = 0;
while (i < handlers.length) {
handlers[i](data);
i++;
}
},

destroy: function() {
this.element && toggleCssProps(this, false);

this.handlers = {};
this.session = {};
this.input.destroy();
this.element = null;
}
};

function toggleCssProps(manager, add) {
var element = manager.element;
if (!element.style) {
return;
}
var prop;
each(manager.options.cssProps, function(value, name) {
prop = prefixed(element.style, name);
if (add) {
manager.oldCssProps[prop] = element.style[prop];
element.style[prop] = value;
} else {
element.style[prop] = manager.oldCssProps[prop] || '';
}
});
if (!add) {
manager.oldCssProps = {};
}
                 this.count = 1;
} else {
this.count += 1;
}

this._input = input;

var tapCount = this.count % options.taps;
if (tapCount === 0) {
if (!this.hasRequireFailures()) {
return STATE_RECOGNIZED;
} else {
this._timer = setTimeoutContext(function() {
this.state = STATE_RECOGNIZED;
this.tryEmit();
}, options.interval, this);
return STATE_BEGAN;
}
}
}
return STATE_FAILED;
},

failTimeout: function() {
this._timer = setTimeoutContext(function() {
this.state = STATE_FAILED;
}, this.options.interval, this);
return STATE_FAILED;
},

reset: function() {
clearTimeout(this._timer);
},

emit: function() {
if (this.state == STATE_RECOGNIZED) {
this._input.tapCount = this.count;
this.manager.emit(this.options.event, this._input);
}
}
});

function Hammer(element, options) {
options = options || {};
options.recognizers = ifUndefined(options.recognizers, Hammer.defaults.preset);
return new Manager(element, options);
}

Hammer.VERSION = '2.0.7';

Hammer.defaults = {
domEvents: false,

touchAction: TOUCH_ACTION_COMPUTE,

enable: true,

inputTarget: null,

inputClass: null,

preset: [
[RotateRecognizer, {enable: false}],
[PinchRecognizer, {enable: false}, ['rotate']],
[SwipeRecognizer, {direction: DIRECTION_HORIZONTAL}],
[PanRecognizer, {direction: DIRECTION_HORIZONTAL}, ['swipe']],
[TapRecognizer],
[TapRecognizer, {event: 'doubletap', taps: 2}, ['tap']],
[PressRecognizer]
],

cssProps: {
userSelect: 'none',

touchSelect: 'none',

touchCallout: 'none',

contentZooming: 'none',

userDrag: 'none',

tapHighlightColor: 'rgba(0,0,0,0)'
}
};

var STOP = 1;
var FORCED_STOP = 2;

function Manager(element, options) {
this.options = assign({}, Hammer.defaults, options || {});

this.options.inputTarget = this.options.inputTarget || element;

this.handlers = {};
this.session = {};
this.recognizers = [];
this.oldCssProps = {};

this.element = element;
this.input = createInputInstance(this);
this.touchAction = new TouchAction(this, this.options.touchAction);

toggleCssProps(this, true);

each(this.options.recognizers, function(item) {
var recognizer = this.add(new (item[0])(item[1]));
item[2] && recognizer.recognizeWith(item[2]);
item[3] && recognizer.requireFailure(item[3]);
}, this);
}

Manager.prototype = {
set: function(options) {
assign(this.options, options);

if (options.touchAction) {
this.touchAction.update();
}
if (options.inputTarget) {
this.input.destroy();
this.input.target = options.inputTarget;
this.input.init();
}
return this;
},

stop: function(force) {
this.session.stopped = force ? FORCED_STOP : STOP;
},

recognize: function(inputData) {
var session = this.session;
if (session.stopped) {
return;
}

this.touchAction.preventDefaults(inputData);

var recognizer;
var recognizers = this.recognizers;

var curRecognizer = session.curRecognizer;

if (!curRecognizer || (curRecognizer && curRecognizer.state & STATE_RECOGNIZED)) {
curRecognizer = session.curRecognizer = null;
}

var i = 0;
while (i < recognizers.length) {
                              if (!validMovement || !validPointers || (input.eventType & (INPUT_END | INPUT_CANCEL) && !validTime)) {
this.reset();
} else if (input.eventType & INPUT_START) {
this.reset();
this._timer = setTimeoutContext(function() {
this.state = STATE_RECOGNIZED;
this.tryEmit();
}, options.time, this);
} else if (input.eventType & INPUT_END) {
return STATE_RECOGNIZED;
}
return STATE_FAILED;
},

reset: function() {
clearTimeout(this._timer);
},

emit: function(input) {
if (this.state !== STATE_RECOGNIZED) {
return;
}

if (input && (input.eventType & INPUT_END)) {
this.manager.emit(this.options.event + 'up', input);
} else {
this._input.timeStamp = now();
this.manager.emit(this.options.event, this._input);
}
}
});

function RotateRecognizer() {
AttrRecognizer.apply(this, arguments);
}

inherit(RotateRecognizer, AttrRecognizer, {
defaults: {
event: 'rotate',
threshold: 0,
pointers: 2
},

getTouchAction: function() {
return [TOUCH_ACTION_NONE];
},

attrTest: function(input) {
return this._super.attrTest.call(this, input) &&
(Math.abs(input.rotation) > this.options.threshold || this.state & STATE_BEGAN);
}
});

function SwipeRecognizer() {
AttrRecognizer.apply(this, arguments);
}

inherit(SwipeRecognizer, AttrRecognizer, {
defaults: {
event: 'swipe',
threshold: 10,
velocity: 0.3,
direction: DIRECTION_HORIZONTAL | DIRECTION_VERTICAL,
pointers: 1
},

getTouchAction: function() {
return PanRecognizer.prototype.getTouchAction.call(this);
},

attrTest: function(input) {
var direction = this.options.direction;
var velocity;

if (direction & (DIRECTION_HORIZONTAL | DIRECTION_VERTICAL)) {
velocity = input.overallVelocity;
} else if (direction & DIRECTION_HORIZONTAL) {
velocity = input.overallVelocityX;
} else if (direction & DIRECTION_VERTICAL) {
velocity = input.overallVelocityY;
}

return this._super.attrTest.call(this, input) &&
direction & input.offsetDirection &&
input.distance > this.options.threshold &&
input.maxPointers == this.options.pointers &&
abs(velocity) > this.options.velocity && input.eventType & INPUT_END;
},

emit: function(input) {
var direction = directionStr(input.offsetDirection);
if (direction) {
this.manager.emit(this.options.event + direction, input);
}

this.manager.emit(this.options.event, input);
}
});

function TapRecognizer() {
Recognizer.apply(this, arguments);

this.pTime = false;
this.pCenter = false;

this._timer = null;
this._input = null;
this.count = 0;
}

inherit(TapRecognizer, Recognizer, {
defaults: {
event: 'tap',
pointers: 1,
taps: 1,
interval: 300, // max time between the multi-tap taps
time: 250, // max time of the pointer to be down (like finger on the screen)
threshold: 9, // a minimal movement is ok, but keep it low
posThreshold: 10 // a multi-tap can be a bit off the initial position
},

getTouchAction: function() {
return [TOUCH_ACTION_MANIPULATION];
},

process: function(input) {
var options = this.options;

var validPointers = input.pointers.length === options.pointers;
var validMovement = input.distance < options.threshold;
var validTouchTime = input.deltaTime < options.time;

this.reset();

if ((input.eventType & INPUT_START) && (this.count === 0)) {
return this.failTimeout();
}

if (validMovement && validTouchTime && validPointers) {
if (input.eventType != INPUT_END) {
return this.failTimeout();
}

var validInterval = this.pTime ? (input.timeStamp - this.pTime < options.interval) : true;
var validMultiTap = !this.pCenter || getDistance(this.pCenter, input.center) < options.posThreshold;

this.pTime = input.timeStamp;
this.pCenter = input.center;

if (!validMultiTap || !validInterval) {
   var optionPointers = this.options.pointers;
return optionPointers === 0 || input.pointers.length === optionPointers;
},

process: function(input) {
var state = this.state;
var eventType = input.eventType;

var isRecognized = state & (STATE_BEGAN | STATE_CHANGED);
var isValid = this.attrTest(input);

if (isRecognized && (eventType & INPUT_CANCEL || !isValid)) {
return state | STATE_CANCELLED;
} else if (isRecognized || isValid) {
if (eventType & INPUT_END) {
return state | STATE_ENDED;
} else if (!(state & STATE_BEGAN)) {
return STATE_BEGAN;
}
return state | STATE_CHANGED;
}
return STATE_FAILED;
}
});

function PanRecognizer() {
AttrRecognizer.apply(this, arguments);

this.pX = null;
this.pY = null;
}

inherit(PanRecognizer, AttrRecognizer, {
defaults: {
event: 'pan',
threshold: 10,
pointers: 1,
direction: DIRECTION_ALL
},

getTouchAction: function() {
var direction = this.options.direction;
var actions = [];
if (direction & DIRECTION_HORIZONTAL) {
actions.push(TOUCH_ACTION_PAN_Y);
}
if (direction & DIRECTION_VERTICAL) {
actions.push(TOUCH_ACTION_PAN_X);
}
return actions;
},

directionTest: function(input) {
var options = this.options;
var hasMoved = true;
var distance = input.distance;
var direction = input.direction;
var x = input.deltaX;
var y = input.deltaY;

if (!(direction & options.direction)) {
if (options.direction & DIRECTION_HORIZONTAL) {
direction = (x === 0) ? DIRECTION_NONE : (x < 0) ? DIRECTION_LEFT : DIRECTION_RIGHT;
hasMoved = x != this.pX;
distance = Math.abs(input.deltaX);
} else {
direction = (y === 0) ? DIRECTION_NONE : (y < 0) ? DIRECTION_UP : DIRECTION_DOWN;
hasMoved = y != this.pY;
distance = Math.abs(input.deltaY);
}
}
input.direction = direction;
return hasMoved && distance > options.threshold && direction & options.direction;
},

attrTest: function(input) {
return AttrRecognizer.prototype.attrTest.call(this, input) &&
(this.state & STATE_BEGAN || (!(this.state & STATE_BEGAN) && this.directionTest(input)));
},

emit: function(input) {

this.pX = input.deltaX;
this.pY = input.deltaY;

var direction = directionStr(input.direction);

if (direction) {
input.additionalEvent = this.options.event + direction;
}
this._super.emit.call(this, input);
}
});

function PinchRecognizer() {
AttrRecognizer.apply(this, arguments);
}

inherit(PinchRecognizer, AttrRecognizer, {
defaults: {
event: 'pinch',
threshold: 0,
pointers: 2
},

getTouchAction: function() {
return [TOUCH_ACTION_NONE];
},

attrTest: function(input) {
return this._super.attrTest.call(this, input) &&
(Math.abs(input.scale - 1) > this.options.threshold || this.state & STATE_BEGAN);
},

emit: function(input) {
if (input.scale !== 1) {
var inOut = input.scale < 1 ? 'in' : 'out';
input.additionalEvent = this.options.event + inOut;
}
this._super.emit.call(this, input);
}
});

function PressRecognizer() {
Recognizer.apply(this, arguments);

this._timer = null;
this._input = null;
}

inherit(PressRecognizer, Recognizer, {
defaults: {
event: 'press',
pointers: 1,
time: 251, // minimal time of the pointer to be pressed
threshold: 9 // a minimal movement is ok, but keep it low
},

getTouchAction: function() {
return [TOUCH_ACTION_AUTO];
},

process: function(input) {
var options = this.options;
var validPointers = input.pointers.length === options.pointers;
var validMovement = input.distance < options.threshold;
var validTime = input.deltaTime > options.time;

this._input = input;

               return this;
},

requireFailure: function(otherRecognizer) {
if (invokeArrayArg(otherRecognizer, 'requireFailure', this)) {
return this;
}

var requireFail = this.requireFail;
otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);
if (inArray(requireFail, otherRecognizer) === -1) {
requireFail.push(otherRecognizer);
otherRecognizer.requireFailure(this);
}
return this;
},

dropRequireFailure: function(otherRecognizer) {
if (invokeArrayArg(otherRecognizer, 'dropRequireFailure', this)) {
return this;
}

otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);
var index = inArray(this.requireFail, otherRecognizer);
if (index > -1) {
this.requireFail.splice(index, 1);
}
return this;
},

hasRequireFailures: function() {
return this.requireFail.length > 0;
},

canRecognizeWith: function(otherRecognizer) {
return !!this.simultaneous[otherRecognizer.id];
},

emit: function(input) {
var self = this;
var state = this.state;

function emit(event) {
self.manager.emit(event, input);
}

if (state < STATE_ENDED) {
emit(self.options.event + stateStr(state));
}

emit(self.options.event); // simple 'eventName' events

if (input.additionalEvent) { // additional event(panleft, panright, pinchin, pinchout...)
emit(input.additionalEvent);
}

if (state >= STATE_ENDED) {
emit(self.options.event + stateStr(state));
}
},

tryEmit: function(input) {
if (this.canEmit()) {
return this.emit(input);
}
this.state = STATE_FAILED;
},

canEmit: function() {
var i = 0;
while (i < this.requireFail.length) {
if (!(this.requireFail[i].state & (STATE_FAILED | STATE_POSSIBLE))) {
return false;
}
i++;
}
return true;
},

recognize: function(inputData) {
var inputDataClone = assign({}, inputData);

if (!boolOrFn(this.options.enable, [this, inputDataClone])) {
this.reset();
this.state = STATE_FAILED;
return;
}

if (this.state & (STATE_RECOGNIZED | STATE_CANCELLED | STATE_FAILED)) {
this.state = STATE_POSSIBLE;
}

this.state = this.process(inputDataClone);

if (this.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED | STATE_CANCELLED)) {
this.tryEmit(inputDataClone);
}
},

process: function(inputData) { }, // jshint ignore:line

getTouchAction: function() { },

reset: function() { }
};

function stateStr(state) {
if (state & STATE_CANCELLED) {
return 'cancel';
} else if (state & STATE_ENDED) {
return 'end';
} else if (state & STATE_CHANGED) {
return 'move';
} else if (state & STATE_BEGAN) {
return 'start';
}
return '';
}

function directionStr(direction) {
if (direction == DIRECTION_DOWN) {
return 'down';
} else if (direction == DIRECTION_UP) {
return 'up';
} else if (direction == DIRECTION_LEFT) {
return 'left';
} else if (direction == DIRECTION_RIGHT) {
return 'right';
}
return '';
}

function getRecognizerByNameIfManager(otherRecognizer, recognizer) {
var manager = recognizer.manager;
if (manager) {
return manager.get(otherRecognizer);
}
return otherRecognizer;
}

function AttrRecognizer() {
Recognizer.apply(this, arguments);
}

inherit(AttrRecognizer, Recognizer, {
defaults: {
pointers: 1
},

attrTest: function(input) {
         }
this.actions = value.toLowerCase().trim();
},

update: function() {
this.set(this.manager.options.touchAction);
},

compute: function() {
var actions = [];
each(this.manager.recognizers, function(recognizer) {
if (boolOrFn(recognizer.options.enable, [recognizer])) {
actions = actions.concat(recognizer.getTouchAction());
}
});
return cleanTouchActions(actions.join(' '));
},

preventDefaults: function(input) {
var srcEvent = input.srcEvent;
var direction = input.offsetDirection;

if (this.manager.session.prevented) {
srcEvent.preventDefault();
return;
}

var actions = this.actions;
var hasNone = inStr(actions, TOUCH_ACTION_NONE) && !TOUCH_ACTION_MAP[TOUCH_ACTION_NONE];
var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_Y];
var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_X];

if (hasNone) {

var isTapPointer = input.pointers.length === 1;
var isTapMovement = input.distance < 2;
var isTapTouchTime = input.deltaTime < 250;

if (isTapPointer && isTapMovement && isTapTouchTime) {
return;
}
}

if (hasPanX && hasPanY) {
return;
}

if (hasNone ||
(hasPanY && direction & DIRECTION_HORIZONTAL) ||
(hasPanX && direction & DIRECTION_VERTICAL)) {
return this.preventSrc(srcEvent);
}
},

preventSrc: function(srcEvent) {
this.manager.session.prevented = true;
srcEvent.preventDefault();
}
};

function cleanTouchActions(actions) {
if (inStr(actions, TOUCH_ACTION_NONE)) {
return TOUCH_ACTION_NONE;
}

var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X);
var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y);

if (hasPanX && hasPanY) {
return TOUCH_ACTION_NONE;
}

if (hasPanX || hasPanY) {
return hasPanX ? TOUCH_ACTION_PAN_X : TOUCH_ACTION_PAN_Y;
}

if (inStr(actions, TOUCH_ACTION_MANIPULATION)) {
return TOUCH_ACTION_MANIPULATION;
}

return TOUCH_ACTION_AUTO;
}

function getTouchActionProps() {
if (!NATIVE_TOUCH_ACTION) {
return false;
}
var touchMap = {};
var cssSupports = window.CSS && window.CSS.supports;
['auto', 'manipulation', 'pan-y', 'pan-x', 'pan-x pan-y', 'none'].forEach(function(val) {

touchMap[val] = cssSupports ? window.CSS.supports('touch-action', val) : true;
});
return touchMap;
}

var STATE_POSSIBLE = 1;
var STATE_BEGAN = 2;
var STATE_CHANGED = 4;
var STATE_ENDED = 8;
var STATE_RECOGNIZED = STATE_ENDED;
var STATE_CANCELLED = 16;
var STATE_FAILED = 32;

function Recognizer(options) {
this.options = assign({}, this.defaults, options || {});

this.id = uniqueId();

this.manager = null;

this.options.enable = ifUndefined(this.options.enable, true);

this.state = STATE_POSSIBLE;

this.simultaneous = {};
this.requireFail = [];
}

Recognizer.prototype = {
defaults: {},

set: function(options) {
assign(this.options, options);

this.manager && this.manager.touchAction.update();
return this;
},

recognizeWith: function(otherRecognizer) {
if (invokeArrayArg(otherRecognizer, 'recognizeWith', this)) {
return this;
}

var simultaneous = this.simultaneous;
otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);
if (!simultaneous[otherRecognizer.id]) {
simultaneous[otherRecognizer.id] = otherRecognizer;
otherRecognizer.recognizeWith(this);
}
return this;
},

dropRecognizeWith: function(otherRecognizer) {
if (invokeArrayArg(otherRecognizer, 'dropRecognizeWith', this)) {
return this;
}

otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);
delete this.simultaneous[otherRecognizer.id];
  function getTouches(ev, type) {
var allTouches = toArray(ev.touches);
var targetIds = this.targetIds;

if (type & (INPUT_START | INPUT_MOVE) && allTouches.length === 1) {
targetIds[allTouches[0].identifier] = true;
return [allTouches, allTouches];
}

var i,
targetTouches,
changedTouches = toArray(ev.changedTouches),
changedTargetTouches = [],
target = this.target;

targetTouches = allTouches.filter(function(touch) {
return hasParent(touch.target, target);
});

if (type === INPUT_START) {
i = 0;
while (i < targetTouches.length) {
targetIds[targetTouches[i].identifier] = true;
i++;
}
}

i = 0;
while (i < changedTouches.length) {
if (targetIds[changedTouches[i].identifier]) {
changedTargetTouches.push(changedTouches[i]);
}

if (type & (INPUT_END | INPUT_CANCEL)) {
delete targetIds[changedTouches[i].identifier];
}
i++;
}

if (!changedTargetTouches.length) {
return;
}

return [
uniqueArray(targetTouches.concat(changedTargetTouches), 'identifier', true),
changedTargetTouches
];
}


var DEDUP_TIMEOUT = 2500;
var DEDUP_DISTANCE = 25;

function TouchMouseInput() {
Input.apply(this, arguments);

var handler = bindFn(this.handler, this);
this.touch = new TouchInput(this.manager, handler);
this.mouse = new MouseInput(this.manager, handler);

this.primaryTouch = null;
this.lastTouches = [];
}

inherit(TouchMouseInput, Input, {
handler: function TMEhandler(manager, inputEvent, inputData) {
var isTouch = (inputData.pointerType == INPUT_TYPE_TOUCH),
isMouse = (inputData.pointerType == INPUT_TYPE_MOUSE);

if (isMouse && inputData.sourceCapabilities && inputData.sourceCapabilities.firesTouchEvents) {
return;
}

if (isTouch) {
recordTouches.call(this, inputEvent, inputData);
} else if (isMouse && isSyntheticEvent.call(this, inputData)) {
return;
}

this.callback(manager, inputEvent, inputData);
},

destroy: function destroy() {
this.touch.destroy();
this.mouse.destroy();
}
});

function recordTouches(eventType, eventData) {
if (eventType & INPUT_START) {
this.primaryTouch = eventData.changedPointers[0].identifier;
setLastTouch.call(this, eventData);
} else if (eventType & (INPUT_END | INPUT_CANCEL)) {
setLastTouch.call(this, eventData);
}
}

function setLastTouch(eventData) {
var touch = eventData.changedPointers[0];

if (touch.identifier === this.primaryTouch) {
var lastTouch = {x: touch.clientX, y: touch.clientY};
this.lastTouches.push(lastTouch);
var lts = this.lastTouches;
var removeLastTouch = function() {
var i = lts.indexOf(lastTouch);
if (i > -1) {
lts.splice(i, 1);
}
};
setTimeout(removeLastTouch, DEDUP_TIMEOUT);
}
}

function isSyntheticEvent(eventData) {
var x = eventData.srcEvent.clientX, y = eventData.srcEvent.clientY;
for (var i = 0; i < this.lastTouches.length; i++) {
var t = this.lastTouches[i];
var dx = Math.abs(x - t.x), dy = Math.abs(y - t.y);
if (dx <= DEDUP_DISTANCE && dy <= DEDUP_DISTANCE) {
return true;
}
}
return false;
}

var PREFIXED_TOUCH_ACTION = prefixed(TEST_ELEMENT.style, 'touchAction');
var NATIVE_TOUCH_ACTION = PREFIXED_TOUCH_ACTION !== undefined;

var TOUCH_ACTION_COMPUTE = 'compute';
var TOUCH_ACTION_AUTO = 'auto';
var TOUCH_ACTION_MANIPULATION = 'manipulation'; // not implemented
var TOUCH_ACTION_NONE = 'none';
var TOUCH_ACTION_PAN_X = 'pan-x';
var TOUCH_ACTION_PAN_Y = 'pan-y';
var TOUCH_ACTION_MAP = getTouchActionProps();

function TouchAction(manager, value) {
this.manager = manager;
this.set(value);
}

TouchAction.prototype = {
set: function(value) {
if (value == TOUCH_ACTION_COMPUTE) {
value = this.compute();
}

if (NATIVE_TOUCH_ACTION && this.manager.element.style && TOUCH_ACTION_MAP[value]) {
this.manager.element.style[PREFIXED_TOUCH_ACTION] = value;
        5: INPUT_TYPE_KINECT // see https://twitter.com/jacobrossi/status/480596438489890816
};

var POINTER_ELEMENT_EVENTS = 'pointerdown';
var POINTER_WINDOW_EVENTS = 'pointermove pointerup pointercancel';

if (window.MSPointerEvent && !window.PointerEvent) {
POINTER_ELEMENT_EVENTS = 'MSPointerDown';
POINTER_WINDOW_EVENTS = 'MSPointerMove MSPointerUp MSPointerCancel';
}

function PointerEventInput() {
this.evEl = POINTER_ELEMENT_EVENTS;
this.evWin = POINTER_WINDOW_EVENTS;

Input.apply(this, arguments);

this.store = (this.manager.session.pointerEvents = []);
}

inherit(PointerEventInput, Input, {
handler: function PEhandler(ev) {
var store = this.store;
var removePointer = false;

var eventTypeNormalized = ev.type.toLowerCase().replace('ms', '');
var eventType = POINTER_INPUT_MAP[eventTypeNormalized];
var pointerType = IE10_POINTER_TYPE_ENUM[ev.pointerType] || ev.pointerType;

var isTouch = (pointerType == INPUT_TYPE_TOUCH);

var storeIndex = inArray(store, ev.pointerId, 'pointerId');

if (eventType & INPUT_START && (ev.button === 0 || isTouch)) {
if (storeIndex < 0) {
store.push(ev);
storeIndex = store.length - 1;
}
} else if (eventType & (INPUT_END | INPUT_CANCEL)) {
removePointer = true;
}

if (storeIndex < 0) {
return;
}

store[storeIndex] = ev;

this.callback(this.manager, eventType, {
pointers: store,
changedPointers: [ev],
pointerType: pointerType,
srcEvent: ev
});

if (removePointer) {
store.splice(storeIndex, 1);
}
}
});

var SINGLE_TOUCH_INPUT_MAP = {
touchstart: INPUT_START,
touchmove: INPUT_MOVE,
touchend: INPUT_END,
touchcancel: INPUT_CANCEL
};

var SINGLE_TOUCH_TARGET_EVENTS = 'touchstart';
var SINGLE_TOUCH_WINDOW_EVENTS = 'touchstart touchmove touchend touchcancel';

function SingleTouchInput() {
this.evTarget = SINGLE_TOUCH_TARGET_EVENTS;
this.evWin = SINGLE_TOUCH_WINDOW_EVENTS;
this.started = false;

Input.apply(this, arguments);
}

inherit(SingleTouchInput, Input, {
handler: function TEhandler(ev) {
var type = SINGLE_TOUCH_INPUT_MAP[ev.type];

if (type === INPUT_START) {
this.started = true;
}

if (!this.started) {
return;
}

var touches = normalizeSingleTouches.call(this, ev, type);

if (type & (INPUT_END | INPUT_CANCEL) && touches[0].length - touches[1].length === 0) {
this.started = false;
}

this.callback(this.manager, type, {
pointers: touches[0],
changedPointers: touches[1],
pointerType: INPUT_TYPE_TOUCH,
srcEvent: ev
});
}
});

function normalizeSingleTouches(ev, type) {
var all = toArray(ev.touches);
var changed = toArray(ev.changedTouches);

if (type & (INPUT_END | INPUT_CANCEL)) {
all = uniqueArray(all.concat(changed), 'identifier', true);
}

return [all, changed];
}

var TOUCH_INPUT_MAP = {
touchstart: INPUT_START,
touchmove: INPUT_MOVE,
touchend: INPUT_END,
touchcancel: INPUT_CANCEL
};

var TOUCH_TARGET_EVENTS = 'touchstart touchmove touchend touchcancel';

function TouchInput() {
this.evTarget = TOUCH_TARGET_EVENTS;
this.targetIds = {};

Input.apply(this, arguments);
}

inherit(TouchInput, Input, {
handler: function MTEhandler(ev) {
var type = TOUCH_INPUT_MAP[ev.type];
var touches = getTouches.call(this, ev, type);
if (!touches) {
return;
}

this.callback(this.manager, type, {
pointers: touches[0],
changedPointers: touches[1],
pointerType: INPUT_TYPE_TOUCH,
srcEvent: ev
});
}
});

                               input.direction = direction;
}

function simpleCloneInputData(input) {
var pointers = [];
var i = 0;
while (i < input.pointers.length) {
pointers[i] = {
clientX: round(input.pointers[i].clientX),
clientY: round(input.pointers[i].clientY)
};
i++;
}

return {
timeStamp: now(),
pointers: pointers,
center: getCenter(pointers),
deltaX: input.deltaX,
deltaY: input.deltaY
};
}

function getCenter(pointers) {
var pointersLength = pointers.length;

if (pointersLength === 1) {
return {
x: round(pointers[0].clientX),
y: round(pointers[0].clientY)
};
}

var x = 0, y = 0, i = 0;
while (i < pointersLength) {
x += pointers[i].clientX;
y += pointers[i].clientY;
i++;
}

return {
x: round(x / pointersLength),
y: round(y / pointersLength)
};
}

function getVelocity(deltaTime, x, y) {
return {
x: x / deltaTime || 0,
y: y / deltaTime || 0
};
}

function getDirection(x, y) {
if (x === y) {
return DIRECTION_NONE;
}

if (abs(x) >= abs(y)) {
return x < 0 ? DIRECTION_LEFT : DIRECTION_RIGHT;
}
return y < 0 ? DIRECTION_UP : DIRECTION_DOWN;
}

function getDistance(p1, p2, props) {
if (!props) {
props = PROPS_XY;
}
var x = p2[props[0]] - p1[props[0]],
y = p2[props[1]] - p1[props[1]];

return Math.hypot(x, y);
}

function getAngle(p1, p2, props) {
if (!props) {
props = PROPS_XY;
}
var x = p2[props[0]] - p1[props[0]],
y = p2[props[1]] - p1[props[1]];
return Math.atan2(y, x) * 180 / Math.PI;
}

function getRotation(start, end) {
return getAngle(end[1], end[0], PROPS_CLIENT_XY) + getAngle(start[1], start[0], PROPS_CLIENT_XY);
}

function getScale(start, end) {
return getDistance(end[0], end[1], PROPS_CLIENT_XY) / getDistance(start[0], start[1], PROPS_CLIENT_XY);
}

var MOUSE_INPUT_MAP = {
mousedown: INPUT_START,
mousemove: INPUT_MOVE,
mouseup: INPUT_END
};

var MOUSE_ELEMENT_EVENTS = 'mousedown';
var MOUSE_WINDOW_EVENTS = 'mousemove mouseup';

function MouseInput() {
this.evEl = MOUSE_ELEMENT_EVENTS;
this.evWin = MOUSE_WINDOW_EVENTS;

this.pressed = false; // mousedown state

Input.apply(this, arguments);
}

inherit(MouseInput, Input, {
handler: function MEhandler(ev) {
var eventType = MOUSE_INPUT_MAP[ev.type];

if (eventType & INPUT_START && ev.button === 0) {
this.pressed = true;
}

if (eventType & INPUT_MOVE && ev.which !== 1) {
eventType = INPUT_END;
}

if (!this.pressed) {
return;
}

if (eventType & INPUT_END) {
this.pressed = false;
}

this.callback(this.manager, eventType, {
pointers: [ev],
changedPointers: [ev],
pointerType: INPUT_TYPE_MOUSE,
srcEvent: ev
});
}
});

var POINTER_INPUT_MAP = {
pointerdown: INPUT_START,
pointermove: INPUT_MOVE,
pointerup: INPUT_END,
pointercancel: INPUT_CANCEL,
pointerout: INPUT_CANCEL
};

var IE10_POINTER_TYPE_ENUM = {
2: INPUT_TYPE_TOUCH,
3: INPUT_TYPE_PEN,
4: INPUT_TYPE_MOUSE,
                  this.evEl && addEventListeners(this.element, this.evEl, this.domHandler);
this.evTarget && addEventListeners(this.target, this.evTarget, this.domHandler);
this.evWin && addEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);
},

destroy: function() {
this.evEl && removeEventListeners(this.element, this.evEl, this.domHandler);
this.evTarget && removeEventListeners(this.target, this.evTarget, this.domHandler);
this.evWin && removeEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);
}
};

function createInputInstance(manager) {
var Type;
var inputClass = manager.options.inputClass;

if (inputClass) {
Type = inputClass;
} else if (!SUPPORT_TOUCH && SUPPORT_POINTER_EVENTS) {
Type = PointerEventInput;
} else if (SUPPORT_ONLY_TOUCH) {
Type = TouchInput;
} else if (!SUPPORT_TOUCH) {
Type = MouseInput;
} else {
Type = TouchMouseInput;
}
return new (Type)(manager, inputHandler);
}

function inputHandler(manager, eventType, input) {
var pointersLen = input.pointers.length;
var changedPointersLen = input.changedPointers.length;
var isFirst = (eventType & INPUT_START && (pointersLen - changedPointersLen === 0));
var isFinal = (eventType & (INPUT_END | INPUT_CANCEL) && (pointersLen - changedPointersLen === 0));

input.isFirst = !!isFirst;
input.isFinal = !!isFinal;

if (isFirst) {
manager.session = {};
}

input.eventType = eventType;

computeInputData(manager, input);

manager.emit('hammer.input', input);

manager.recognize(input);
manager.session.prevInput = input;
}

function computeInputData(manager, input) {
var session = manager.session;
var pointers = input.pointers;
var pointersLength = pointers.length;

if (!session.firstInput) {
session.firstInput = simpleCloneInputData(input);
}

if (pointersLength > 1 && !session.firstMultiple) {
session.firstMultiple = simpleCloneInputData(input);
} else if (pointersLength === 1) {
session.firstMultiple = false;
}

var firstInput = session.firstInput;
var firstMultiple = session.firstMultiple;
var offsetCenter = firstMultiple ? firstMultiple.center : firstInput.center;

var center = input.center = getCenter(pointers);
input.timeStamp = now();
input.deltaTime = input.timeStamp - firstInput.timeStamp;

input.angle = getAngle(offsetCenter, center);
input.distance = getDistance(offsetCenter, center);

computeDeltaXY(session, input);
input.offsetDirection = getDirection(input.deltaX, input.deltaY);

var overallVelocity = getVelocity(input.deltaTime, input.deltaX, input.deltaY);
input.overallVelocityX = overallVelocity.x;
input.overallVelocityY = overallVelocity.y;
input.overallVelocity = (abs(overallVelocity.x) > abs(overallVelocity.y)) ? overallVelocity.x : overallVelocity.y;

input.scale = firstMultiple ? getScale(firstMultiple.pointers, pointers) : 1;
input.rotation = firstMultiple ? getRotation(firstMultiple.pointers, pointers) : 0;

input.maxPointers = !session.prevInput ? input.pointers.length : ((input.pointers.length >
session.prevInput.maxPointers) ? input.pointers.length : session.prevInput.maxPointers);

computeIntervalInputData(session, input);

var target = manager.element;
if (hasParent(input.srcEvent.target, target)) {
target = input.srcEvent.target;
}
input.target = target;
}

function computeDeltaXY(session, input) {
var center = input.center;
var offset = session.offsetDelta || {};
var prevDelta = session.prevDelta || {};
var prevInput = session.prevInput || {};

if (input.eventType === INPUT_START || prevInput.eventType === INPUT_END) {
prevDelta = session.prevDelta = {
x: prevInput.deltaX || 0,
y: prevInput.deltaY || 0
};

offset = session.offsetDelta = {
x: center.x,
y: center.y
};
}

input.deltaX = prevDelta.x + (center.x - offset.x);
input.deltaY = prevDelta.y + (center.y - offset.y);
}

function computeIntervalInputData(session, input) {
var last = session.lastInterval || input,
deltaTime = input.timeStamp - last.timeStamp,
velocity, velocityX, velocityY, direction;

if (input.eventType != INPUT_CANCEL && (deltaTime > COMPUTE_INTERVAL || last.velocity === undefined)) {
var deltaX = input.deltaX - last.deltaX;
var deltaY = input.deltaY - last.deltaY;

var v = getVelocity(deltaTime, deltaX, deltaY);
velocityX = v.x;
velocityY = v.y;
velocity = (abs(v.x) > abs(v.y)) ? v.x : v.y;
direction = getDirection(deltaX, deltaY);

session.lastInterval = input;
} else {
velocity = last.velocity;
velocityX = last.velocityX;
velocityY = last.velocityY;
direction = last.direction;
}

input.velocity = velocity;
input.velocityX = velocityX;
input.velocityY = velocityY;
      });
}

function hasParent(node, parent) {
while (node) {
if (node == parent) {
return true;
}
node = node.parentNode;
}
return false;
}

function inStr(str, find) {
return str.indexOf(find) > -1;
}

function splitStr(str) {
return str.trim().split(/\s+/g);
}

function inArray(src, find, findByKey) {
if (src.indexOf && !findByKey) {
return src.indexOf(find);
} else {
var i = 0;
while (i < src.length) {
if ((findByKey && src[i][findByKey] == find) || (!findByKey && src[i] === find)) {
return i;
}
i++;
}
return -1;
}
}

function toArray(obj) {
return Array.prototype.slice.call(obj, 0);
}

function uniqueArray(src, key, sort) {
var results = [];
var values = [];
var i = 0;

while (i < src.length) {
var val = key ? src[i][key] : src[i];
if (inArray(values, val) < 0) {
results.push(src[i]);
}
values[i] = val;
i++;
}

if (sort) {
if (!key) {
results = results.sort();
} else {
results = results.sort(function sortUniqueArray(a, b) {
return a[key] > b[key];
});
}
}

return results;
}

function prefixed(obj, property) {
if (obj === undefined) {
return undefined;
}

var prefix, prop;
var camelProp = property[0].toUpperCase() + property.slice(1);

var i = 0;
while (i < VENDOR_PREFIXES.length) {
prefix = VENDOR_PREFIXES[i];
prop = (prefix) ? prefix + camelProp : property;

if (prop in obj) {
return prop;
}
i++;
}
return undefined;
}

var _uniqueId = 1;
function uniqueId() {
return _uniqueId++;
}

function getWindowForElement(element) {
var doc = element.ownerDocument || element;
return (doc.defaultView || doc.parentWindow || window);
}

var MOBILE_REGEX = /mobile|tablet|ip(ad|hone|od)|android/i;

var SUPPORT_TOUCH = ('ontouchstart' in window);
var SUPPORT_POINTER_EVENTS = prefixed(window, 'PointerEvent') !== undefined;
var SUPPORT_ONLY_TOUCH = SUPPORT_TOUCH && MOBILE_REGEX.test(navigator.userAgent);

var INPUT_TYPE_TOUCH = 'touch';
var INPUT_TYPE_PEN = 'pen';
var INPUT_TYPE_MOUSE = 'mouse';
var INPUT_TYPE_KINECT = 'kinect';

var COMPUTE_INTERVAL = 25;

var INPUT_START = 1;
var INPUT_MOVE = 2;
var INPUT_END = 4;
var INPUT_CANCEL = 8;

var DIRECTION_NONE = 1;
var DIRECTION_LEFT = 2;
var DIRECTION_RIGHT = 4;
var DIRECTION_UP = 8;
var DIRECTION_DOWN = 16;

var DIRECTION_HORIZONTAL = DIRECTION_LEFT | DIRECTION_RIGHT;
var DIRECTION_VERTICAL = DIRECTION_UP | DIRECTION_DOWN;
var DIRECTION_ALL = DIRECTION_HORIZONTAL | DIRECTION_VERTICAL;

var PROPS_XY = ['x', 'y'];
var PROPS_CLIENT_XY = ['clientX', 'clientY'];

function Input(manager, callback) {
var self = this;
this.manager = manager;
this.callback = callback;
this.element = manager.element;
this.target = manager.options.inputTarget;

this.domHandler = function(ev) {
if (boolOrFn(manager.options.enable, [manager])) {
self.handler(ev);
}
};

this.init();

}

Input.prototype = {
handler: function() { },

init: function() {
               <![CDATA[


(function(window, document, exportName, undefined) {
'use strict';

var VENDOR_PREFIXES = ['', 'webkit', 'Moz', 'MS', 'ms', 'o'];
var TEST_ELEMENT = document.createElement('div');

var TYPE_FUNCTION = 'function';

var round = Math.round;
var abs = Math.abs;
var now = Date.now;

if (!Math.trunc) {
Math.trunc = function (v) {
return v < 0 ? Math.ceil(v) : Math.floor(v);
};
}

function setTimeoutContext(fn, timeout, context) {
return setTimeout(bindFn(fn, context), timeout);
}

function invokeArrayArg(arg, fn, context) {
if (Array.isArray(arg)) {
each(arg, context[fn], context);
return true;
}
return false;
}

function each(obj, iterator, context) {
var i;

if (!obj) {
return;
}

if (obj.forEach) {
obj.forEach(iterator, context);
} else if (obj.length !== undefined) {
i = 0;
while (i < obj.length) {
iterator.call(context, obj[i], i, obj);
i++;
}
} else {
for (i in obj) {
obj.hasOwnProperty(i) && iterator.call(context, obj[i], i, obj);
}
}
}

function deprecate(method, name, message) {
var deprecationMessage = 'DEPRECATED METHOD: ' + name + '\n' + message + ' AT \n';
return function() {
var e = new Error('get-stack-trace');
var stack = e && e.stack ? e.stack.replace(/^[^\(]+?[\n$]/gm, '')
.replace(/^\s+at\s+/gm, '')
.replace(/^Object.<anonymous>\s*\(/gm, '{anonymous}()@') : 'Unknown Stack Trace';

var log = window.console && (window.console.warn || window.console.log);
if (log) {
log.call(window.console, deprecationMessage, stack);
}
return method.apply(this, arguments);
};
}

var assign;
if (typeof Object.assign !== 'function') {
assign = function assign(target) {
if (target === undefined || target === null) {
throw new TypeError('Cannot convert undefined or null to object');
}

var output = Object(target);
for (var index = 1; index < arguments.length; index++) {
var source = arguments[index];
if (source !== undefined && source !== null) {
for (var nextKey in source) {
if (source.hasOwnProperty(nextKey)) {
output[nextKey] = source[nextKey];
}
}
}
}
return output;
};
} else {
assign = Object.assign;
}

var extend = deprecate(function extend(dest, src, merge) {
var keys = Object.keys(src);
var i = 0;
while (i < keys.length) {
if (!merge || (merge && dest[keys[i]] === undefined)) {
dest[keys[i]] = src[keys[i]];
}
i++;
}
return dest;
}, 'extend', 'Use `assign`.');

var merge = deprecate(function merge(dest, src) {
return extend(dest, src, true);
}, 'merge', 'Use `assign`.');

function inherit(child, base, properties) {
var baseP = base.prototype,
childP;

childP = child.prototype = Object.create(baseP);
childP.constructor = child;
childP._super = baseP;

if (properties) {
assign(childP, properties);
}
}

function bindFn(fn, context) {
return function boundFn() {
return fn.apply(context, arguments);
};
}

function boolOrFn(val, args) {
if (typeof val == TYPE_FUNCTION) {
return val.apply(args ? args[0] || undefined : undefined, args);
}
return val;
}

function ifUndefined(val1, val2) {
return (val1 === undefined) ? val2 : val1;
}

function addEventListeners(target, types, handler) {
each(splitStr(types), function(type) {
target.addEventListener(type, handler, false);
});
}

function removeEventListeners(target, types, handler) {
each(splitStr(types), function(type) {
target.removeEventListener(type, handler, false);
 9SVGExport         @   o o o : h e a d e r - f i e l d                            @   o o o : t e x t - a d j u s t                              @   o o o : i d - l i s t      @   o o o : f o o t e r - v i s i b i l i t y                  @   o o o : d a t e - t i m e - v i s i b i l i t y            @   o o o : p a g e - n u m b e r - v i s i b i l i t y        @   o o o : m e t a _ d u m m y _ s l i d e                    @   o o o : m e t a _ s l i d e                                @   o o o : p a g e - n u m b e r i n g - t y p e              @   o o o : u s e - p o s i t i o n e d - c h a r s            @   o o o : s t a r t - s l i d e - n u m b e r                @   o o o : n u m b e r - o f - s l i d e s                    @   o o o : m e t a _ s l i d e s              @   inner      @   o o o : d a t e - t i m e - f o r m a t                    @   h t t p : / / w w w . w 3 . o r g / 2 0 0 0 / s v g        @   o o o : n a m e            @   o o o : h a s - t r a n s i t i o n                        @   o o o : f o o t e r - f i e l d                            @   o o o : d a t e - t i m e - f i e l d                      @   o o o : m a s t e r - o b j e c t s - v i s i b i l i t y                                  @   o o o : b a c k g r o u n d - v i s i b i l i t y          @
   o o o : m a s t e r        @	   o o o : s l i d e          @   o o o : t e x t _ f i e l d                                @   < [ : i s P l a c e h o l d e r : ] >                      @b   < ! D O C T Y P E   s v g   P U B L I C   " - / / W 3 C / / D T D   S V G   1 . 1 / / E N "   " h t t p : / / w w w . w 3 . o r g / G r a p h i c s / S V G / 1 . 1 / D T D / s v g 1 1 . d t d " >             o o o : m e t a t a _ s l i d e o o o : t e x t x t _ f i e l d o o o : d a t e - t i m e - f i SLIDE_BACKGROUND                                   c l i p _ p a t      o@     o@                                        PXWW(WVhM`L`L`LhU`LT TS RP0POxONNhNKKKPVVKKKKKKKKKKKKH[ZKY`YKKKXXKX8؋ Њ؉        d      ,        X                                 N3com3sun4star3svg10XSVGWriterE N4cppu14WeakImplHelperIJN3com3sun4star3svg10XSVGWriterENS3_4lang12XServiceInfoEEEE      9SVGWriter         @                      @$   c o m . s u n . s t a r . p r e s e n t a t i o n . T e x t F i e l d .                    @   c o m . s u n . s t a r . t e x t . t e x t f i e l d .                                    @   s t r o k e - l i n e c a p                                @   s t r o k e - l i n e j o i n                              @
   s t o p - c o l o r        @   o f f s e t                @   g r a d i e n t U n i t s                                  @
   x l i n k : h r e f        @   t e x t - d e c o r a t i o n                              @   f o n t - w e i g h t      @
   f o n t - s t y l e        @	   f o n t - s i z e          @   f o n t - f a m i l y      @   f i l l                    @   s t r o k e - w i d t h                    @   h e i g h t                @   w i d t h                  @   r y        @   r x        @   c y        @   c x        @   y 2        @   x 2        @   y 1        @   x 1        @   y          @   x          @   i d        @   s t y l e                  @	   t r a n s f o r m          @   s t o p                    @   l i n e a r G r a d i e n t                @   t s p a n                  @   t e x t                    @   d e f s            @   g              @   SLIDE_BACKGROUND    ;X  *  t  $  4  D  v     L  :,  D  (  t   4   Zt"  "  0#  #  ,$  \%  %  P'  h(  )  . `)  ^ \*  t +   X+  "+  "L,   #,  N#l-  l#-  #.  #0.  ' 1  (1  F(1  (X2  j)3  )h3  >,3  0-4  2H5  35  P4(6  46  858  5,:  $8:  H8:  9<;  :;  <<  <D=  4A`>  B>  CL?  C?  C@  C A  FFxA  FA  BG(B  GB  ZIB  I0C  KD  6L4E  tLF  LF  .MLG  NG  OTH  POH  nOH  xPJ  PJ  UL  8UN  UdN  rWN  WO  
XO  TXO  XHQ  XQ  X0R  `YR  YS  YDT  ZZT  ZT  t[PU  \U  ] V  ]XV  ^V  ^W  `_`W  _W  _dX  `X  `$Y  `Y  RaZ  >cZ  >i`[  j(]  pk]  l]  2lH^  Nm^  *n_  o_  2p_  p@`  p`  q`  qLa  $ra  s(b  sb  vc  yhc  zc  zTd  zd  :{e  p{pe  |  |  |  |  ~  ~  H  $L  tx    ă    d(    <    d  D     D    ĲL  Բ  ĸ   8   4      $  4  D  T  d0  t            D      0  D  $X  4l  DX  T\  dp  t    $  8  l  T  4  `  4    t      48  X  x  $    T  |  $  T  P  4|  l  D    $  t  4<  Dd  dx        40  TD  tX  l          4  TP  td  x    T  t    $  T  4  h  $  t  `    d  Tp!  !  !  !  T!  "  D"  "  4#  tL#  x#  $#  4$#  $#  $% $  t%%  %,%  '%  '%  t(&  D)4&  *d&  *&  +'  ,(  d.<(  $/(  T/(  t0(  20)  ;)  A)  V*  V0*  W|*  W*  TX*  [(+  tk|+  tl ,  dol,  o,  o,  Tq,  q,-  Tr@-  r-  Ds-  t0  uh1  w1  d} 2  2  $,3  T3  X4  45  5  5  46  8  9  P:  t:  d;  `;  d
<  =  d?,>  O>  tQ?  Zt?  Z?  \?  ^8@  4^L@  T^@  zDA  A  A  dLB  B  ԞB  4!  D !  T4!  dH!  t\!  0"  "  4&  ԫ&  t'  8'  d'  T'  L$  Dl$  $  $$  $  D)  ĵ*  +  4 ,  d\.  p.  4.  T.  t.  /  </  4p/  T/  /  /  (0  4<0  t0  0  0  @1  4T1  T|2  t2  2  $3  4  04  $D4  D4  4  l5  L6  x6  D 7  47  d7  7  7  7  (8  4\8  8  t9  H9  |9  d9  T;  ;  t$<  DP<  <  4h=  =  t=  =  >  `@  t@  @  @  @  $@  4@  DTC  C  dC  C  4D  t4D  dD  dxD  D  	 E  
`F  4F  G  pG   TE  4 hE  4!E  "E  "E  #$F  $%G  d%@H  t%H  % I  *0I  +PI  ,J  d.DJ  t.XJ  4/J  D/K  / L  t0HL  0hL  t2L  :L  $AM  tVDM  VXM  VlM  VM  $WM  WM  WM  Y(N  DnN  pN  q4O  q\O  sO  wP  Tw,P  wLP  wpP  $xP  xP  yP  tzQ  {hQ  Q  Q  4TR  |R  R  R  R  S  Ć<S  \S  TS  TS  DT  hT  TT  TU  tU  tU  U  $V  |V  $V  $,W  TW  DW   X  $0X  X  dX  $X  Y  ԿTZ  Z  ,[  \  TL]  ]  ^  l^  d^  ^  h_  4_  `  4``  `  a  pa  ta  %Lb  dCb  r8c  {c  {c  d  Ĉxd  Ԍd  $<e  de  tG  I  I  I   H  TK  K  K  4,H  DI  TI  dI  tpH  ĔJ  4xK  (K  4PK  ĖDY  Y  tY  Z  Ę,Z  @Z  Z  $[  D[  [  [  $ \  TP\  d\  d\  \  ]  4_         zR x  $          FJw ?9*3$"       D                 \   x             t   P             L
             H
             j             0
             ,	             	             	       (     @    ECDEDW
D   @  j3    EQA[       zPLR x	    (   $   4   R  ECGa
H       i            A    aRM        A    aRM         $A    aRM         TA    aRM      @  2    AH   ,      8i  Q  EQBEL
H     0  {   Q       i       ,     i    AQW
G        n                                  ,            @            T            h            |                          p            l            h            d       (     mE    ECBDf
LD        m	          4  m3    EQA[    T  pb    ECAn
I (   x  mE    ECBDl
FD  (     nE    ECBDl
FD  (     4nE    ECBDf
LD  $         ECCJ
K  $   $      ECCJ
K      L  b    ECAn
I    p  T,    ECA^     d,    ECA^(     D    ECDEDX
C(         ECDEDX
C(     ,    ECDEDX
C(   4      ECDEDX
C(   `      ECDEDX
C(         ECDEDX
C(     l@   ACM.       n      (     ,   ECMR
I(   $  r   ECPR
F(   P  dpB   ACPR
J(        L  EUCJ
I    L     L    (   l     L  ECEn
E     -   L  (     @    EJk
FX
Ha (   @      CfHA     l  8       ,   $  DB  L  ECDED
C0     d   ECIK
D
H   $     
   ECG|
E      	             	         4   4	  ~   ECHDK
A
B   4   l	  8   ECFEHo
F
D   0   H    K  ECHDG
E     	            	             
            
             (
  ,          <
  8          P
  D       (   	  P  J  ECGu
D     
  D       ,   H	   ;  nJ  ACPP
D    x	     TJ     
                                  (   4       NCAbT     `            t         $         ECBHs                                                                            (  !       ,   
    H  EPM
FH   l  hi   JCHDEBH
A   0   \  ,  H  ECDKD
I        z6  H  $     4z    ECBJe  ,     N  H  ECFD
H 0     *  H  EEFFw
C  0   @    H  EFDIIE
J    t     H       p       0     <d  _H  ECMo
D   ,     xN  KH  ECFD
H $   l      ECBH(        EZG_
E      "    ECAT8     9*  G  ECI(
G..         Bv  I  8       J  ECFEHJ
K5
K        X%   I                                                                                3    EQA[   8  3    EQA[   X  3    EQA[   x  <3    EQA[     \3    EQA[     |3    EQA[     L       ,        H  ACG|
I[
E     -   iH    (   <      ECDEDW
D,        ?H  ECDI}
A      <  .   H       @    ELAm     ~2    AH   (          ACBDI
Ew ,          AQW
G      P  T "          d  $	    AC        T W                    (   L  E   G  ACBIi
A     x  +   F         A    aRM         Њb    ECAn
I $   8      ECCJ
K  $   `      ECCJ
K        ̊b    ECAn
I $     h v    ELAt
J^ ,   x     F  ACBGD
E         E    ,   (  |    EJBJ
JJ   (   X      AJE
EG$         EJBJ  ,     h    EJBJ
JJ   ,         EJBJ
JJ   $         EJBJ  $   4  @    EJBJ  (   \  x    ECDEDX
C(         ECDEDX
C(     `    ECDEDX
C(     ԅ    ECDEDX
C(     H    ECDEDX
C(   8      ECDEDX
C,        C  ECDJG
A    8  \R   C    (     |   ACM  (         SC  E]BD
E      2   0C       0  "    ECAT,   P     ACDELIa
E 0   $  h  B  EJDFHKj
J    X  n   B  ,   |  	&  B  ACPR
J      0   lB  (   ,     ECPR
F(   X  \r   ACPR
J(     B   ACPR
J                 ,       (   |  ,   A  ECE
A        A  $   $  -J    ECE\
GW $   L  8-k    ECC\
I   4     -m  A  ECPz
F.l.      P  h   A  ,   t  0  @  ECPz
F         IA  0     ?   9A  ECBGLF
C         +   A    (   |  M    ECCp
MD        ,-    EJAX(   l  L@  @  ECBD
D      $   @          B1    KCAX     8  C)    ECAX(     Cu  '@  ECE
D   (  <.   @  ,     PD    ECFFc
I        DS       (     Eg   ?  ECBF~
A        ?  ,     0Er   ?  ECBFI
A           r?  ,   (  `E  [?  ACK
I      X  v?   K?    (     "   ACM               0         NJCSBAW      L            `         4   t     ECHDK
A
G   4        ECFEHo
F
A   0     Њ  />  ECHDG
E              4   ,  ȏ   ECHDK
A
G   4   d      ECFEHo
F
A   0   @    =  ECHDG
E              4        ECHDK
A
G   4     H   ECFEHo
F
A   0        W=  ECHDG
E              (   @  C   [=  ECE
A   l  ,   F=       ̝            ؝       0     $D  =  ECHH
E        t.   <  8     E  <  ECFJ
J
I      H  B   <  4   l  <K  <  ECPA
G.c.       j   <     $!  М       ,   8!  ܜ    ECBH]
IH    h!  <       0       8P  `<  EQDFG
A     T   Zh   L<  8   x   Q"  0<  ECHK
G
G         bl  <  4   4"     ECFEHV
G
C  0   !  i=  <  ECDINGo	
G    D!  >   <     "            "  ̝          "  ؝       0   !  4t	  <  EQBJ
D      !    =  $   X#      ECDF0   $"    =  ECHH{
E  8   X"   }V  #=  ECBID.
F_.      "  l   r=  ,   $      ECBJu
G   0   "    1=  ECFHD
B     #     %=  0   @#    =  EQDFDC
A       t#   [   <    (   $      ECC
ED  (    %      ECM   4   #  
  {<  ECBEEFD
F       ($     _<  0   L$  <d  C<  ECMo
D   ,   $  xN  /<  ECFD
H (   &      ECM
J0   8&  ,    ECBD[
Gw
IR  ,   %  ȥN  ;  ECFD
H 0   @%    ;  ECDGH
H  0   t%  d  ;  ECMo
D   ,   %  ЪN  s;  ECFD
H 0   %    _;  EEHDf
D   ,   &    S;  ECP|
D     <&  @   ;  0   `&  Xd  s;  ECMo
D   0   &  -  _;  ECBN
J  ,   &  N  K;  ECFD
H 0   &    7;  EEHDf
D   H   ,'  ܙ  +;  ECHD
I.W. d.W. ..     x'  T  <  0   '    ;  ECDP\
A      '  $   ;  8   '  Ĳ  ;  ECFEH
I.f.     0(  \E  ;  0   T(  TE  ;  ECBEH
K     (  J   <  8   (  L  ;  ECI
Lx	
H       (    p<  ,   )  F  W<  ECFD
A 0   <)    C<  EEBJ
B   (   *  H    ECBF
D   8   *  z   EGDED
Gx
HN
J  0   4+  0d   ECBEFEH!
E   ,   *  D  ;  ACI
G    <*  q   ;  ,   `*  1  ;  ECPF
B    *  8  I=  ,   *  ķN  7=  ECFD
H ,   @,      ECBEEGu
H   ,   +  N  <  ECFD
H 0   D+  ĺ  <  ECFEH,
I 0   x+  0x  <  ECFEK
F      +    =  0   +  X  =  ECBEMT
A     ,  4$   _=  0   (,  )  C=  EEBIH\
G  8   \,  \	  ;=  ECHDe
G$
D  $   ,  r   P=  A      .  	       0   ,     =  ECM
F       -     <  0   ,-  ~  <  ACMJ
A       `-     <     .            .            /  l	          /  h          0/  d          D/  `          X/  \          l/  X          /  T       0   8.  `g  ;  ECP
B       l.    <  0   .  x9  <  ECBNd
D       .     <  0   .   >  <  ECIl
C       /  p   3=  0   @/  K  =  ECDFDV
D       t/     =    0   /  NM	  =  ECDEJi
D     /  :  s=  0   /  W  k=  ECM
D       $0  z   c=  0   H0  [U  K=  ECI
H       |0    =  (   1      ACBDF
Ho (   (2  L    ACBDF
Ho (   T2  @   ACM.  ,   2  Ľ    FCDFcJ  (   2  $@   ACM.  ,   2  8    FCDFlA     3  Q       $    3  ~    ECBHg8   1  <  X<  ECBJEM.@`. 
H     (2  r   N<  0   L2     2<  ECBG\
C^
A     2  >   <       3  !       0   2     ;  ECGw
JW
I   (   D4      ECBF
D   ,   p4  4    ECHDy
C   (   4      ECBF
D   8   4  xz   EGDED
Gx
HN
J  0   3  ,  :  ECDKC
F      3  %   :  <   4  t  :  ECP5.v. 
K]
A    D4     :  ,   h4  	  :  ECP}
K     4    ;  0   4  \%  :  ECI
A   $   4  N$   :         t6  P3    EQA[   6  I	       (   6  I    ECDEDW
D   6   L	          6            6  2    AH      7  KA    aRM      87      ACAT    X7  _    ACA@
K(   |7  
   ACG
E\  ,   7      AQW
G      7  $    QGF   @   7     FCDGH]GH     <8  J          P8  J          d8  G          x8  G          8  G          8  dJ       4   8     ACFEH|
E
E      8  	       (   7     #8  EQCx
G     7  n   7       L9         (   `9  &"   ACM      9  Ib    ECAn
I    9  43    EQA[$   9  tJ    ECCJ
K  $   9  J    ECCJ
K       :  Ib    ECAn
I (   D:  F    ECDEDX
C(   p:  $G    ECDEDX
C(   :  G    ECDEDX
C$   :  \    ESCg
N     :  $"    ECAT,   ;  4   AHBEIJ
H ,   9  &  5  ACPR
J    :  80   5  (   ;  r   ACPR
J(   ;  B   ACPR
J   ;  (	3           <  T		          <  P	       $   (<  \	6    ECE^
EE    P<  t	n          d<  	.       0   ;  	  4  ECDJEG
G     P;  ,N   4  8   t;  n  4  ECFMi

L
F     ;    H5  0   ;  >  [5  ECDEFu
D     <     B5  0   ,<  !  &5  ECE
KB
A   `<     
5  $   =  X"F    ECEf
ME ,   <  "  4  ECG
F      <  vJ   4    0   <  #  4  ECHDP
D       0=  hP   4      >  '1    KCAW     >   '(    ECAW    >  0'I    TCAhH     ?  \'I    TCAhH ,   <?  '    ECG
KW
A      l?  (&       @   ?  4(R   ECBEO
E~
BX
H\
D (   h>  P).  f3  ECBH
D    >  T%   H3    8   >  4*i  03  ECIe
Jb
N       >  (   3  (   p@  D/    ECCu
HD  8   @?  /  2  ECDEF
I`
H      |?  m   2  $   @  1F    ECEf
ME    $A   2          8A  2       ,   ?  2]  L2  ECM|
G      @  [   12      A  3p    EJX
D      A  `3@    EIAp   A  3@    EIAp(   B  3K   EEDD3
A  ,   0B  4    ECBJED
A 0   A  5   U1  ECDIF
A      8A  $   .1  0   \A  ,6U  1  ECI
H       A  z   0  (   A  4<   0  ECCw
F     A  :   0    ,    B  <  0  ECIP
G    0B     0     C  DC       0   hB  PCb  0  ECFEY 
A     B     ~0  0   B  hE  b0  EGDEID
G    B  d   d0  0   C  0I  I0  ECDEIOz
A    LC     D0  0   pC  K  (0  ECHG@
I       C  D    0  0   C  `N=  0  ECBEJFG
I    C  6   /  0    D  HO  /  ECDGPQ
D     TD     /  0   xD  T-  /  EHDI
J      D  R   /  ,   D  V  /  ECMt
G      E  C   /  $   F  dXF    ECEf
ME ,   F  X    ECDDD
Dh   0   |E  X  /  EVDIEd
G     E     .     0G  dZh       4   E  Z  .  ERDD
AH
H       F     .  ,   @F  (\   v.  ECBFq
G      pF  p-   ^.  8   G  x=    ECAO
Ht
LU
KE
K       (H  >    ECAI
N   LH  >!       8   G  4\	  -  ECDRO
C. L.        @G     .     H  >          H  >          H  >       4   G  xe
  -  ECMn
E]
K    G    -     XI  L>       ,   H  g  -  ECI
K    @H  B   >.     I  >       0   xH  `u  .  ECI
E       H    .  4   ,J  =   ECFEHU
H
F  0   dJ  @?    ECHD
E^
J,   <I  ?(  [.  ECFD 
F,   lI  B(  J.  ECFD 
F   J  E!       ,   K  F   ECHD
F  ,   I  HN  -  ECFD
H 0   J  I  -  ECBIH
G ,   DJ    -  ECG3
F     tJ     -    0   J     -  ECFIH5
E     J     -  (   J  8   -  ECBD
A    K  6$   n-    $   L  K~    ECBJi  ,   dK  d!
  .-  ECP}
K     K    [-      M  @    ECC ,   K  ̒  -  EGE
A      L     ,  0   ,L  ,  ,  ECEq
BJ
A   `L     ,  0   M  J   ECMB
EN
A0   L  Dr  s,  EHBEGE
G    L  n  ,  0   M  l  w,  ECC:
Kw
I     @M  6   L,    (   `M  "  4,  ECBD
A    M  r/   ,    4   M  ̙  +  ECG
B
M      M  J$   +    0   N  
  +  ECDFED
J    <N     %,  4   `N    	,  ECPn
Jd
D    N  t[   +  @   N  ,  +  ECBID.X. .S. 
G     O  h  X,  L   $O    B,  ECDEEE. \
I[. . L. r. L. W. I.     tO  x$    ,  0   O  L  +  ECDHED}
F    O  D  ,  l   O  \/  ,  ECP 
H.. b. . i. . _. . h. . P.. d.D.      `P  c  .  ,   P  I  -  ECIf
I    P     '.  0   4R      ECBEEEGw
I\ 0   Q  K  -  ECBGEK+
D    @Q  
   -  8   dQ    -  EGBJ.U. $
A     Q  LB   -  D   Q  D$  -  ECFED.L. 
J.E
I      R  "O   y-  0   0R  'L  ]-  ECBEGE
H    dR  6   P-  0   R  *9  4-  EHBEIIN
F    R  X   -     <T  +           
8      Z   8B q     ? I \   "  I      I9K0  	   	  		 		   }}lY  `Y  H   U     _ g #+  b(    !j             k                     { 5  	" 
 I        :          h   -!B  }      }  X  
6     } W      } W  :        8  UAQ S JS   Q   Q T   T Q   Q S   Q 	S 	T 	T 
T 
!  PR R   P P P   P PP   SQ  S S 1S   T R   P   VP    "P #P $  $pT &O &  &R '  (Q )P * Q +P +  ,P -R -P .  /Q /P /  1P 1  2R 3Q 3O 4R 5O 6O 6  9HQ 9Q :R :R ;  <?R =O =O =O BQ CO C  ER F!R GO H  HO IO JQ Js  MO MR MR OO    }       dU  aQx  
 	     	  	 
  
       }     U  e      
k   #    
8      T  	4  b $       .9       &        
+A<            ns        9  g    .  u   |   $@  !  
! &  	+(  ^         *@          	 	 
              *L    H !  ;   R       I    %  -O ;[   &  7Z Ff    M    }  `R  5    }   LR  I9K0  	   	  		 		   }}R   R  I9K0  	   	  		 		   }}Q  Q  I9K0  	   	  		 		   }}tQ  hQ  : F V  { "  H   U  x     $  E_  
 
        !
 0  ,  ;
   -    
 
 
   BG         $:    - - - . . / 	/ 
/ / / 0 / / / . . . . . - - , - - . . . . . , 0 / /  - !- !  $/ &- (-  n   `   	 
 
           { J  v"{               '   	 	 	 	 
  
             p  `
 ; qv 6  	        	 	  	
 
 
	 9/       }    C  g         
 
          D   B     $      	 g  {    #.  X  
  ]%      } TL  :        :          I       } K  :        %BH  H           ]P	   		  	 	 	   	   	 	 	   }   DK  $L    }   0K      } K  g    }  J  :        %BH  G           6   , - V- , - - -   	, 	. 
, - - - - - - - .   .  - / / - / / / / / / / . . . 0 / / 9   . !, !. !  ", ", #, #  $. %. &. '- N  @     uV  G ,          	 
        x  k             	 	 
    3  fS             	 	  
 
  
       -         K     :          F   :        -#e        }$G  N    }   G    a a a ` %` _ ` 	a 
^ 
^ a   a b b a ` c c ^ b a b a _ _ a  ^  ^ !  !^ "_ "  "_ #^ #  (a )  *` +_ ,_ ,_ -_ -_ ._ .` 1^ 1b 3b 3  4b 5c 5b 8b 9b :a ;b =` >_ ?` @` Ba C] D^ E] E] G^ H^ J^ Ka L] M` Q] R` W] Y_ \] ]] ]_ ]] r      :        :        1&RU   2              Dc   =       = [            	  	 	  
        s  0                      (   6   A     ) BH  N            MyD   
   ,  *  *   h 5  m [     U     J  `8 y8 7 7   7 	8 	  	V7 8 8 8   8 8 k  07 6 6 7   8 6 7 6 6 !  %6 '7 (6 )6 *6 +6 +6 ,8 ,O6 ,7 -6 -6 .7 .6 .7 .6 .6 .7 /6 27 26 58 56 x     UQ  	 l  	 	   	 	   	   	 	 	 		 6P  \   >           	 
 
             0  1)/  I i s    $       *  [9       L  ^       E  P   ; > 	 	 	 
m  @            m          (	   	   
 
 	 u R  I  W               " L 	 	    *     *   7  .?  M       2   )  
>   -$     @3  N \ 	 	 	     	  $  fR                	 	 
 
          4  
+]  (     8B d  !  
! &  g  D  RK  & & % & & & 	& ' ' ' ' & & e% % $%   ' ' ' ' ' ' ( ( ( ( ( ( ( ( ( I& & L& & $& #% #$& 3 `         e    \  K  q      A  m    %  /7    l  @   *  
+  Y   #>  
 
 
   ^
         *      $-  	9  F[   q
 2K p  (  B Z 0  K3     h    4   ( 	  	 .@  !J,        s  2c         s     +_            s  (-v          ;  R  F ,  FF  Tb       	 	 
  *       >     *     ?H  c   B O b   "  I    hB`             	 	    J  *O  { '       -  %'  Z  ?    , >S     -         	 	 	  	 	0  
 
  
  <               u]               	 		 	  
 
  >D     +  6 !      	 
            `     IR       IR         :        )  M      }       !%     &   -R  %?   f        z  	0  8<   Y   $  (    
 
, 
! >    .d      
 H    =5`             9  R        G ~  4 %       A  T            	 	        & "  )    .  )	 l  	 	 	   	 F  u  B% & 	& 	4& & % x&   8% & ' & & & & % & & % % % % % ' ' ' ' &  & 
YG   
B  J	   O=  w9 9 K; : [: : 	: 	: 
: B: < < : : : < < < : ; ; < : < ; ; ; ;   9 ; ; 3: 9 9 !9 ": "8 ": &; &9 &9 &; (4; ,9 ,; -  -9 .  /; 0  6"9 !           ^ ^   o\ \   
] 
  ^   g^   \ X^ ] U] ^ W\   ^ I  [ [   ]   $] %  &] &] '\ +\ ,] ,^ ,\ .z  /] 0\ 0q  2[ 2?[ 4  4[ 4\ 4\ 58\ 5\ ;.\ <\ =[ = [ =] ?[ A)] D  F#\ F  G>[ K\ O[ P\ P  P\ S  X\ Y  B  ^Ii   G       0 	 	 	 
   f  0m  8   Y /  v q  v O)   N   *  .E          6  #f  F  ]   "  N  V h   -                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               i     `i             ؖ     p	          PK               0                  p          0K          `                        	     P     G                     @                       `                     @                     @                                         `                           u     g     Y      N      C     3     "               @                 n     `     L     1     `     @          
     @
     @
     
     
      
     
      u
      b
     V
     @M
     @
     3
     %
     
     @	
     	     @	      	     	     	      	      z	     `j	      Y	     `E	     @2	      &	     	     
	                      @           `           @          @u     d     V      F     9     '          `     @               `          `     `           s     c     R     >      /                            `     `     @                                `y     @k      [     @L     >     ,          @           @          `               P                     `                          @     `                              0     P     `     p                                                         @     `                                                                                                              `                                                                         `                                                                               (            0      8     8      P     @      h     H              x                                                    `                                                                      @                                              P                                                        p                                 p                                                    `                                       P     i     p     0q     0      j     i     j                              @                         0     0p          P               q                         @p          p                              p          p     p      k                                                                                    P                                                                                
                                                                                                                  @     @     М                                     P     `          p                                                                                                                                                                                                                    0     P     Н     `          p           @                          К          0                                       P                        P     @                       0                                                                                                 X     (      h     0                   p             p     ~     P     ~                                  P     p          p     ~     P          p     p          ~             p          `     ~                                     Ț     ~     P     ~                            P     @}          @          Ț          p     ~     P          Ț     p          ~     ~     Ț          `     ~     `          P            B             B             -B             HB             YB             iB             xB             B             B             B             C                           Ę                                                         o                 `,             P      
       C                                       "                                        u              4      	                            o           o    s      o           o    p      o                                                                                                                                                                                                                                       0      @      P      `      p                                                                          0      @      P      `      p                                                                          0      @      P      `      p                                                                          0      @      P      `      p                                                                          0      @      P      `      p                                                                          0      @      P      `      p                                                                          0      @      P      `      p                                                                          0      @      P      `      p                                                                          0      @      P      `      p                                                                          0      @      P      `      p                                                                          0      @      P      `      p                                                                          0      @      P      `      p                                                                          0      @      P      `      p                                                                          0      @      P      `      p                                                                          0      @      P      `      p                                                                          0      @      P      `      p                                                                          0      @      P      `      p                                                                          0      @      P      `      p                                                                          0      @      P      `      p                                                                          0      @      P      `      p                                                                          0      @      P      `      p                                                                          0      @      P      `      p                                                                          0      @      P      `      p                                                                          0                                                                                        (       P     0            8            @       P     H                            p          i              p     P     i                   H     .                   H     +              p          U   /                                                                        (       P     0            8       `     @            H                            p     `     i                   h     .                   h     +              0          .              0          +              H          .              H          +             p          U   /                                      (       P     0                            p     `     i              p          U   /   6d84e947192109f5918b4cd2ff2624407ff902.debug    O .shstrtab .note.gnu.property .note.gnu.build-id .gnu.hash .dynsym .dynstr .gnu.version .gnu.version_r .rela.dyn .rela.plt .init .plt.got .plt.sec .text .fini .rodata .eh_frame_hdr .eh_frame .gcc_except_table .init_array .fini_array .data.rel.ro .dynamic .got.plt .data .bss .gnu_debuglink                                                                                                                                                    $                              1   o                   `                             ;             P      P      )                          C             `,      `,      C                             K   o       p      p      l                           X   o       s      s      P                           g             u      u       4                           q      B                   "                          {                                                         v                                                                     @      @                                                P      P                                               `      `      c                                         Ę     Ę                                                            M                                                    \                                          x     x     PT                                          R     R     ,                                                                                                                                                            0                                                                                             p     p     `                                                                                                      h                                                                                                           4                                                    <     "                             