From 282e181b58cf72b6ca770dc7ca5f91f135444502 Mon Sep 17 00:00:00 2001 From: Adam Lesinski Date: Thu, 23 Jan 2014 18:17:42 -0800 Subject: [PATCH] Revert "Move frameworks/base/tools/ to frameworks/tools/" This reverts commit 9f6a119c8aa276432ece4fe2118bd8a3c9b1067e. --- tools/aapt/AaptAssets.cpp | 2689 ++++++++++++ tools/aapt/AaptAssets.h | 633 +++ tools/aapt/Android.mk | 103 + tools/aapt/Bundle.h | 309 ++ tools/aapt/CacheUpdater.h | 107 + tools/aapt/Command.cpp | 2121 +++++++++ tools/aapt/CrunchCache.cpp | 104 + tools/aapt/CrunchCache.h | 102 + tools/aapt/DirectoryWalker.h | 98 + tools/aapt/FileFinder.cpp | 98 + tools/aapt/FileFinder.h | 80 + tools/aapt/Images.cpp | 1387 ++++++ tools/aapt/Images.h | 26 + tools/aapt/Main.cpp | 655 +++ tools/aapt/Main.h | 63 + tools/aapt/NOTICE | 190 + tools/aapt/Package.cpp | 505 +++ tools/aapt/Resource.cpp | 2676 +++++++++++ tools/aapt/ResourceFilter.cpp | 112 + tools/aapt/ResourceFilter.h | 33 + tools/aapt/ResourceIdCache.cpp | 107 + tools/aapt/ResourceIdCache.h | 30 + tools/aapt/ResourceTable.cpp | 3905 +++++++++++++++++ tools/aapt/ResourceTable.h | 557 +++ tools/aapt/SourcePos.cpp | 171 + tools/aapt/SourcePos.h | 28 + tools/aapt/StringPool.cpp | 574 +++ tools/aapt/StringPool.h | 183 + tools/aapt/WorkQueue.cpp | 171 + tools/aapt/WorkQueue.h | 119 + tools/aapt/XMLNode.cpp | 1510 +++++++ tools/aapt/XMLNode.h | 202 + tools/aapt/ZipEntry.cpp | 696 +++ tools/aapt/ZipEntry.h | 345 ++ tools/aapt/ZipFile.cpp | 1297 ++++++ tools/aapt/ZipFile.h | 270 ++ tools/aapt/printapk.cpp | 127 + tools/aapt/pseudolocalize.cpp | 119 + tools/aapt/pseudolocalize.h | 9 + tools/aapt/qsort_r_compat.c | 90 + tools/aapt/qsort_r_compat.h | 39 + tools/aapt/tests/CrunchCache_test.cpp | 97 + tools/aapt/tests/FileFinder_test.cpp | 101 + tools/aapt/tests/MockCacheUpdater.h | 40 + tools/aapt/tests/MockDirectoryWalker.h | 85 + tools/aapt/tests/MockFileFinder.h | 55 + tools/aapt/tests/plurals/AndroidManifest.xml | 5 + .../aapt/tests/plurals/res/values/strings.xml | 7 + tools/aapt/tests/plurals/run.sh | 16 + tools/aidl/AST.cpp | 912 ++++ tools/aidl/AST.h | 371 ++ tools/aidl/Android.mk | 29 + tools/aidl/NOTICE | 190 + tools/aidl/Type.cpp | 1440 ++++++ tools/aidl/Type.h | 542 +++ tools/aidl/aidl.cpp | 1155 +++++ tools/aidl/aidl_language.cpp | 20 + tools/aidl/aidl_language.h | 172 + tools/aidl/aidl_language_l.l | 214 + tools/aidl/aidl_language_y.y | 373 ++ tools/aidl/generate_java.cpp | 99 + tools/aidl/generate_java.h | 33 + tools/aidl/generate_java_binder.cpp | 560 +++ tools/aidl/generate_java_rpc.cpp | 1001 +++++ tools/aidl/options.cpp | 154 + tools/aidl/options.h | 36 + tools/aidl/options_test.cpp | 291 ++ tools/aidl/search_path.cpp | 57 + tools/aidl/search_path.h | 23 + tools/layoutlib/.gitignore | 1 + tools/layoutlib/Android.mk | 65 + tools/layoutlib/README | 4 + tools/layoutlib/bridge/.classpath | 11 + tools/layoutlib/bridge/.project | 17 + tools/layoutlib/bridge/.settings/README.txt | 2 + .../.settings/org.eclipse.jdt.core.prefs | 93 + tools/layoutlib/bridge/Android.mk | 38 + .../bridge/resources/bars/action_bar.xml | 7 + .../resources/bars/hdpi/ic_sysbar_back.png | Bin 0 -> 1053 bytes .../resources/bars/hdpi/ic_sysbar_home.png | Bin 0 -> 1064 bytes .../resources/bars/hdpi/ic_sysbar_recent.png | Bin 0 -> 711 bytes .../hdpi/stat_sys_wifi_signal_4_fully.png | Bin 0 -> 1195 bytes .../bars/hdpi/status_bar_background.9.png | Bin 0 -> 3233 bytes .../resources/bars/mdpi/ic_sysbar_back.png | Bin 0 -> 774 bytes .../resources/bars/mdpi/ic_sysbar_home.png | Bin 0 -> 836 bytes .../resources/bars/mdpi/ic_sysbar_recent.png | Bin 0 -> 591 bytes .../mdpi/stat_sys_wifi_signal_4_fully.png | Bin 0 -> 885 bytes .../bars/mdpi/status_bar_background.9.png | Bin 0 -> 204 bytes .../bridge/resources/bars/navigation_bar.xml | 20 + .../bridge/resources/bars/status_bar.xml | 15 + .../bridge/resources/bars/title_bar.xml | 6 + .../resources/bars/xhdpi/ic_sysbar_back.png | Bin 0 -> 1421 bytes .../resources/bars/xhdpi/ic_sysbar_home.png | Bin 0 -> 1421 bytes .../resources/bars/xhdpi/ic_sysbar_recent.png | Bin 0 -> 749 bytes .../android/animation/AnimationThread.java | 177 + .../PropertyValuesHolder_Delegate.java | 59 + .../src/android/app/Fragment_Delegate.java | 104 + .../content/res/BridgeAssetManager.java | 53 + .../android/content/res/BridgeResources.java | 695 +++ .../android/content/res/BridgeTypedArray.java | 908 ++++ .../content/res/Resources_Theme_Delegate.java | 67 + .../content/res/TypedArray_Delegate.java | 30 + .../graphics/AvoidXfermode_Delegate.java | 70 + .../graphics/BitmapFactory_Delegate.java | 177 + .../graphics/BitmapShader_Delegate.java | 252 ++ .../src/android/graphics/Bitmap_Delegate.java | 592 +++ .../graphics/BlurMaskFilter_Delegate.java | 64 + .../src/android/graphics/Canvas_Delegate.java | 1362 ++++++ .../graphics/ColorFilter_Delegate.java | 64 + .../ColorMatrixColorFilter_Delegate.java | 70 + .../graphics/ComposePathEffect_Delegate.java | 71 + .../graphics/ComposeShader_Delegate.java | 97 + .../graphics/CornerPathEffect_Delegate.java | 71 + .../graphics/DashPathEffect_Delegate.java | 89 + .../graphics/DiscretePathEffect_Delegate.java | 71 + .../android/graphics/DrawFilter_Delegate.java | 64 + .../graphics/EmbossMaskFilter_Delegate.java | 65 + .../android/graphics/Gradient_Delegate.java | 212 + .../graphics/LayerRasterizer_Delegate.java | 69 + .../LightingColorFilter_Delegate.java | 70 + .../graphics/LinearGradient_Delegate.java | 240 + .../android/graphics/MaskFilter_Delegate.java | 64 + .../src/android/graphics/Matrix_Delegate.java | 1129 +++++ .../android/graphics/NinePatch_Delegate.java | 226 + .../PaintFlagsDrawFilter_Delegate.java | 64 + .../src/android/graphics/Paint_Delegate.java | 1284 ++++++ .../graphics/PathDashPathEffect_Delegate.java | 72 + .../android/graphics/PathEffect_Delegate.java | 69 + .../src/android/graphics/Path_Delegate.java | 815 ++++ .../graphics/PixelXorXfermode_Delegate.java | 70 + .../PorterDuffColorFilter_Delegate.java | 71 + .../graphics/PorterDuffXfermode_Delegate.java | 140 + .../graphics/RadialGradient_Delegate.java | 215 + .../android/graphics/Rasterizer_Delegate.java | 64 + .../src/android/graphics/Region_Delegate.java | 484 ++ .../src/android/graphics/Shader_Delegate.java | 105 + .../graphics/SumPathEffect_Delegate.java | 71 + .../graphics/SweepGradient_Delegate.java | 222 + .../android/graphics/Typeface_Accessor.java | 27 + .../android/graphics/Typeface_Delegate.java | 211 + .../android/graphics/Xfermode_Delegate.java | 69 + .../bridge/src/android/os/Build_Delegate.java | 48 + .../android/os/HandlerThread_Delegate.java | 80 + .../src/android/os/Handler_Delegate.java | 57 + .../src/android/os/Looper_Accessor.java | 47 + .../bridge/src/android/os/ServiceManager.java | 72 + .../src/android/os/SystemClock_Delegate.java | 106 + .../android/text/AndroidBidi_Delegate.java | 37 + .../text/format/DateFormat_Delegate.java | 37 + .../android/util/BridgeXmlPullAttributes.java | 283 ++ .../src/android/util/FloatMath_Delegate.java | 132 + .../bridge/src/android/util/Log_Delegate.java | 51 + .../bridge/src/android/util/LruCache.java | 391 ++ .../src/android/view/AttachInfo_Accessor.java | 48 + .../src/android/view/BridgeInflater.java | 272 ++ .../android/view/Choreographer_Delegate.java | 33 + .../src/android/view/Display_Delegate.java | 36 + .../src/android/view/IWindowManagerImpl.java | 502 +++ .../android/view/LayoutInflater_Delegate.java | 199 + .../bridge/src/android/view/SurfaceView.java | 112 + .../view/ViewConfiguration_Accessor.java | 29 + .../android/view/ViewRootImpl_Delegate.java | 34 + .../src/android/view/View_Delegate.java | 34 + .../view/WindowManagerGlobal_Delegate.java | 43 + .../accessibility/AccessibilityManager.java | 137 + .../InputMethodManager_Accessor.java | 27 + .../InputMethodManager_Delegate.java | 49 + .../bridge/src/android/webkit/WebView.java | 254 ++ .../internal/policy/PolicyManager.java | 72 + .../ITextServicesManager_Stub_Delegate.java | 111 + .../internal/util/XmlUtils_Delegate.java | 74 + .../com/android/layoutlib/bridge/Bridge.java | 621 +++ .../layoutlib/bridge/BridgeConstants.java | 51 + .../layoutlib/bridge/BridgeRenderSession.java | 196 + .../android/layoutlib/bridge/MockView.java | 47 + .../bridge/android/BridgeContentProvider.java | 137 + .../bridge/android/BridgeContentResolver.java | 120 + .../bridge/android/BridgeContext.java | 1427 ++++++ .../android/BridgeIInputMethodManager.java | 230 + .../BridgeLayoutParamsMapAttributes.java | 164 + .../bridge/android/BridgePowerManager.java | 122 + .../bridge/android/BridgeWindow.java | 107 + .../bridge/android/BridgeWindowSession.java | 209 + .../bridge/android/BridgeXmlBlockParser.java | 494 +++ .../android/view/WindowManagerImpl.java | 64 + .../layoutlib/bridge/bars/CustomBar.java | 307 ++ .../layoutlib/bridge/bars/FakeActionBar.java | 48 + .../layoutlib/bridge/bars/NavigationBar.java | 54 + .../layoutlib/bridge/bars/StatusBar.java | 55 + .../layoutlib/bridge/bars/TitleBar.java | 47 + .../bridge/impl/DelegateManager.java | 146 + .../layoutlib/bridge/impl/FontLoader.java | 378 ++ .../layoutlib/bridge/impl/GcSnapshot.java | 803 ++++ .../layoutlib/bridge/impl/ParserFactory.java | 142 + .../bridge/impl/PlayAnimationThread.java | 49 + .../layoutlib/bridge/impl/RenderAction.java | 380 ++ .../layoutlib/bridge/impl/RenderDrawable.java | 133 + .../bridge/impl/RenderSessionImpl.java | 1471 +++++++ .../layoutlib/bridge/impl/ResourceHelper.java | 493 +++ .../android/layoutlib/bridge/impl/Stack.java | 70 + .../bridge/impl/binding/BaseAdapter.java | 247 ++ .../bridge/impl/binding/FakeAdapter.java | 121 + .../impl/binding/FakeExpandableAdapter.java | 196 + .../android/layoutlib/bridge/util/Debug.java | 23 + .../layoutlib/bridge/util/DynamicIdMap.java | 76 + .../bridge/util/SparseWeakArray.java | 376 ++ .../src/com/google/android/maps/MapView.java | 121 + .../bridge/src/libcore/icu/ICU_Delegate.java | 225 + tools/layoutlib/bridge/tests/.classpath | 11 + tools/layoutlib/bridge/tests/.project | 17 + tools/layoutlib/bridge/tests/Android.mk | 32 + .../android/layoutlib/testdata/layout1.xml | 49 + .../android/graphics/Matrix_DelegateTest.java | 58 + .../layoutlib/bridge/TestDelegates.java | 197 + .../android/BridgeXmlBlockParserTest.java | 121 + tools/layoutlib/create/.classpath | 9 + tools/layoutlib/create/.project | 17 + tools/layoutlib/create/.settings/README.txt | 2 + .../.settings/org.eclipse.jdt.core.prefs | 93 + tools/layoutlib/create/Android.mk | 28 + tools/layoutlib/create/README.txt | 240 + tools/layoutlib/create/manifest.txt | 1 + .../annotations/LayoutlibDelegate.java | 27 + .../tools/layoutlib/annotations/Nullable.java | 35 + .../annotations/VisibleForTesting.java | 50 + .../tools/layoutlib/create/AsmAnalyzer.java | 845 ++++ .../tools/layoutlib/create/AsmGenerator.java | 370 ++ .../create/ClassHasNativeVisitor.java | 102 + .../tools/layoutlib/create/CreateInfo.java | 207 + .../create/DelegateClassAdapter.java | 133 + .../create/DelegateMethodAdapter2.java | 461 ++ .../layoutlib/create/DependencyFinder.java | 787 ++++ .../tools/layoutlib/create/ICreateInfo.java | 65 + .../android/tools/layoutlib/create/Log.java | 72 + .../layoutlib/create/LogAbortException.java | 32 + .../android/tools/layoutlib/create/Main.java | 212 + .../tools/layoutlib/create/MethodAdapter.java | 97 + .../layoutlib/create/MethodListener.java | 76 + .../layoutlib/create/OverrideMethod.java | 151 + .../layoutlib/create/RenameClassAdapter.java | 463 ++ .../layoutlib/create/StubMethodAdapter.java | 376 ++ .../create/TransformClassAdapter.java | 183 + .../layoutlib/create/AsmAnalyzerTest.java | 227 + .../layoutlib/create/AsmGeneratorTest.java | 119 + .../create/ClassHasNativeVisitorTest.java | 102 + .../create/DelegateClassAdapterTest.java | 463 ++ .../tools/layoutlib/create/LogTest.java | 88 + .../tools/layoutlib/create/MockLog.java | 43 + .../create/RenameClassAdapterTest.java | 120 + .../create/dataclass/ClassWithNative.java | 45 + .../dataclass/ClassWithNative_Delegate.java | 34 + .../create/dataclass/OuterClass.java | 53 + .../create/dataclass/OuterClass_Delegate.java | 34 + .../OuterClass_InnerClass_Delegate.java | 30 + .../create/tests/data/mock_android.jar | Bin 0 -> 9075 bytes .../create/tests/data/mock_android.jardesc | 18 + .../tests/mock_android/dummy/InnerTest.java | 90 + .../create/tests/mock_android/view/View.java | 21 + .../tests/mock_android/view/ViewGroup.java | 29 + .../mock_android/widget/LinearLayout.java | 27 + .../mock_android/widget/TableLayout.java | 27 + tools/obbtool/Android.mk | 48 + tools/obbtool/Main.cpp | 301 ++ tools/obbtool/mkobb.sh | 281 ++ tools/obbtool/pbkdf2gen.cpp | 78 + tools/orientationplot/README.txt | 87 + tools/orientationplot/orientationplot.py | 457 ++ tools/preload/20080522.compiled | Bin 0 -> 11414749 bytes tools/preload/20090811.compiled | Bin 0 -> 15943336 bytes tools/preload/20100223.compiled | Bin 0 -> 21723744 bytes tools/preload/Android.mk | 23 + tools/preload/Compile.java | 73 + tools/preload/LoadedClass.java | 130 + tools/preload/MemoryUsage.java | 298 ++ tools/preload/Operation.java | 136 + tools/preload/Policy.java | 89 + tools/preload/PrintCsv.java | 127 + tools/preload/PrintHtmlDiff.java | 142 + tools/preload/PrintPsTree.java | 46 + tools/preload/Proc.java | 168 + tools/preload/Record.java | 182 + tools/preload/Root.java | 163 + tools/preload/WritePreloadedClassFile.java | 155 + tools/preload/loadclass/Android.mk | 9 + tools/preload/loadclass/LoadClass.java | 84 + tools/preload/preload.iml | 14 + tools/preload/preload.ipr | 495 +++ tools/preload/sorttable.js | 493 +++ tools/validatekeymaps/Android.mk | 33 + tools/validatekeymaps/Main.cpp | 147 + tools/velocityplot/velocityplot.py | 289 ++ 291 files changed, 67426 insertions(+) create mode 100644 tools/aapt/AaptAssets.cpp create mode 100644 tools/aapt/AaptAssets.h create mode 100644 tools/aapt/Android.mk create mode 100644 tools/aapt/Bundle.h create mode 100644 tools/aapt/CacheUpdater.h create mode 100644 tools/aapt/Command.cpp create mode 100644 tools/aapt/CrunchCache.cpp create mode 100644 tools/aapt/CrunchCache.h create mode 100644 tools/aapt/DirectoryWalker.h create mode 100644 tools/aapt/FileFinder.cpp create mode 100644 tools/aapt/FileFinder.h create mode 100644 tools/aapt/Images.cpp create mode 100644 tools/aapt/Images.h create mode 100644 tools/aapt/Main.cpp create mode 100644 tools/aapt/Main.h create mode 100644 tools/aapt/NOTICE create mode 100644 tools/aapt/Package.cpp create mode 100644 tools/aapt/Resource.cpp create mode 100644 tools/aapt/ResourceFilter.cpp create mode 100644 tools/aapt/ResourceFilter.h create mode 100644 tools/aapt/ResourceIdCache.cpp create mode 100644 tools/aapt/ResourceIdCache.h create mode 100644 tools/aapt/ResourceTable.cpp create mode 100644 tools/aapt/ResourceTable.h create mode 100644 tools/aapt/SourcePos.cpp create mode 100644 tools/aapt/SourcePos.h create mode 100644 tools/aapt/StringPool.cpp create mode 100644 tools/aapt/StringPool.h create mode 100644 tools/aapt/WorkQueue.cpp create mode 100644 tools/aapt/WorkQueue.h create mode 100644 tools/aapt/XMLNode.cpp create mode 100644 tools/aapt/XMLNode.h create mode 100644 tools/aapt/ZipEntry.cpp create mode 100644 tools/aapt/ZipEntry.h create mode 100644 tools/aapt/ZipFile.cpp create mode 100644 tools/aapt/ZipFile.h create mode 100644 tools/aapt/printapk.cpp create mode 100644 tools/aapt/pseudolocalize.cpp create mode 100644 tools/aapt/pseudolocalize.h create mode 100644 tools/aapt/qsort_r_compat.c create mode 100644 tools/aapt/qsort_r_compat.h create mode 100644 tools/aapt/tests/CrunchCache_test.cpp create mode 100644 tools/aapt/tests/FileFinder_test.cpp create mode 100644 tools/aapt/tests/MockCacheUpdater.h create mode 100644 tools/aapt/tests/MockDirectoryWalker.h create mode 100644 tools/aapt/tests/MockFileFinder.h create mode 100644 tools/aapt/tests/plurals/AndroidManifest.xml create mode 100644 tools/aapt/tests/plurals/res/values/strings.xml create mode 100755 tools/aapt/tests/plurals/run.sh create mode 100644 tools/aidl/AST.cpp create mode 100644 tools/aidl/AST.h create mode 100644 tools/aidl/Android.mk create mode 100644 tools/aidl/NOTICE create mode 100644 tools/aidl/Type.cpp create mode 100644 tools/aidl/Type.h create mode 100644 tools/aidl/aidl.cpp create mode 100644 tools/aidl/aidl_language.cpp create mode 100644 tools/aidl/aidl_language.h create mode 100644 tools/aidl/aidl_language_l.l create mode 100644 tools/aidl/aidl_language_y.y create mode 100644 tools/aidl/generate_java.cpp create mode 100644 tools/aidl/generate_java.h create mode 100644 tools/aidl/generate_java_binder.cpp create mode 100644 tools/aidl/generate_java_rpc.cpp create mode 100644 tools/aidl/options.cpp create mode 100644 tools/aidl/options.h create mode 100644 tools/aidl/options_test.cpp create mode 100644 tools/aidl/search_path.cpp create mode 100644 tools/aidl/search_path.h create mode 100644 tools/layoutlib/.gitignore create mode 100644 tools/layoutlib/Android.mk create mode 100644 tools/layoutlib/README create mode 100644 tools/layoutlib/bridge/.classpath create mode 100644 tools/layoutlib/bridge/.project create mode 100644 tools/layoutlib/bridge/.settings/README.txt create mode 100644 tools/layoutlib/bridge/.settings/org.eclipse.jdt.core.prefs create mode 100644 tools/layoutlib/bridge/Android.mk create mode 100644 tools/layoutlib/bridge/resources/bars/action_bar.xml create mode 100644 tools/layoutlib/bridge/resources/bars/hdpi/ic_sysbar_back.png create mode 100644 tools/layoutlib/bridge/resources/bars/hdpi/ic_sysbar_home.png create mode 100644 tools/layoutlib/bridge/resources/bars/hdpi/ic_sysbar_recent.png create mode 100644 tools/layoutlib/bridge/resources/bars/hdpi/stat_sys_wifi_signal_4_fully.png create mode 100644 tools/layoutlib/bridge/resources/bars/hdpi/status_bar_background.9.png create mode 100644 tools/layoutlib/bridge/resources/bars/mdpi/ic_sysbar_back.png create mode 100644 tools/layoutlib/bridge/resources/bars/mdpi/ic_sysbar_home.png create mode 100644 tools/layoutlib/bridge/resources/bars/mdpi/ic_sysbar_recent.png create mode 100644 tools/layoutlib/bridge/resources/bars/mdpi/stat_sys_wifi_signal_4_fully.png create mode 100644 tools/layoutlib/bridge/resources/bars/mdpi/status_bar_background.9.png create mode 100644 tools/layoutlib/bridge/resources/bars/navigation_bar.xml create mode 100644 tools/layoutlib/bridge/resources/bars/status_bar.xml create mode 100644 tools/layoutlib/bridge/resources/bars/title_bar.xml create mode 100644 tools/layoutlib/bridge/resources/bars/xhdpi/ic_sysbar_back.png create mode 100644 tools/layoutlib/bridge/resources/bars/xhdpi/ic_sysbar_home.png create mode 100644 tools/layoutlib/bridge/resources/bars/xhdpi/ic_sysbar_recent.png create mode 100644 tools/layoutlib/bridge/src/android/animation/AnimationThread.java create mode 100644 tools/layoutlib/bridge/src/android/animation/PropertyValuesHolder_Delegate.java create mode 100644 tools/layoutlib/bridge/src/android/app/Fragment_Delegate.java create mode 100644 tools/layoutlib/bridge/src/android/content/res/BridgeAssetManager.java create mode 100644 tools/layoutlib/bridge/src/android/content/res/BridgeResources.java create mode 100644 tools/layoutlib/bridge/src/android/content/res/BridgeTypedArray.java create mode 100644 tools/layoutlib/bridge/src/android/content/res/Resources_Theme_Delegate.java create mode 100644 tools/layoutlib/bridge/src/android/content/res/TypedArray_Delegate.java create mode 100644 tools/layoutlib/bridge/src/android/graphics/AvoidXfermode_Delegate.java create mode 100644 tools/layoutlib/bridge/src/android/graphics/BitmapFactory_Delegate.java create mode 100644 tools/layoutlib/bridge/src/android/graphics/BitmapShader_Delegate.java create mode 100644 tools/layoutlib/bridge/src/android/graphics/Bitmap_Delegate.java create mode 100644 tools/layoutlib/bridge/src/android/graphics/BlurMaskFilter_Delegate.java create mode 100644 tools/layoutlib/bridge/src/android/graphics/Canvas_Delegate.java create mode 100644 tools/layoutlib/bridge/src/android/graphics/ColorFilter_Delegate.java create mode 100644 tools/layoutlib/bridge/src/android/graphics/ColorMatrixColorFilter_Delegate.java create mode 100644 tools/layoutlib/bridge/src/android/graphics/ComposePathEffect_Delegate.java create mode 100644 tools/layoutlib/bridge/src/android/graphics/ComposeShader_Delegate.java create mode 100644 tools/layoutlib/bridge/src/android/graphics/CornerPathEffect_Delegate.java create mode 100644 tools/layoutlib/bridge/src/android/graphics/DashPathEffect_Delegate.java create mode 100644 tools/layoutlib/bridge/src/android/graphics/DiscretePathEffect_Delegate.java create mode 100644 tools/layoutlib/bridge/src/android/graphics/DrawFilter_Delegate.java create mode 100644 tools/layoutlib/bridge/src/android/graphics/EmbossMaskFilter_Delegate.java create mode 100644 tools/layoutlib/bridge/src/android/graphics/Gradient_Delegate.java create mode 100644 tools/layoutlib/bridge/src/android/graphics/LayerRasterizer_Delegate.java create mode 100644 tools/layoutlib/bridge/src/android/graphics/LightingColorFilter_Delegate.java create mode 100644 tools/layoutlib/bridge/src/android/graphics/LinearGradient_Delegate.java create mode 100644 tools/layoutlib/bridge/src/android/graphics/MaskFilter_Delegate.java create mode 100644 tools/layoutlib/bridge/src/android/graphics/Matrix_Delegate.java create mode 100644 tools/layoutlib/bridge/src/android/graphics/NinePatch_Delegate.java create mode 100644 tools/layoutlib/bridge/src/android/graphics/PaintFlagsDrawFilter_Delegate.java create mode 100644 tools/layoutlib/bridge/src/android/graphics/Paint_Delegate.java create mode 100644 tools/layoutlib/bridge/src/android/graphics/PathDashPathEffect_Delegate.java create mode 100644 tools/layoutlib/bridge/src/android/graphics/PathEffect_Delegate.java create mode 100644 tools/layoutlib/bridge/src/android/graphics/Path_Delegate.java create mode 100644 tools/layoutlib/bridge/src/android/graphics/PixelXorXfermode_Delegate.java create mode 100644 tools/layoutlib/bridge/src/android/graphics/PorterDuffColorFilter_Delegate.java create mode 100644 tools/layoutlib/bridge/src/android/graphics/PorterDuffXfermode_Delegate.java create mode 100644 tools/layoutlib/bridge/src/android/graphics/RadialGradient_Delegate.java create mode 100644 tools/layoutlib/bridge/src/android/graphics/Rasterizer_Delegate.java create mode 100644 tools/layoutlib/bridge/src/android/graphics/Region_Delegate.java create mode 100644 tools/layoutlib/bridge/src/android/graphics/Shader_Delegate.java create mode 100644 tools/layoutlib/bridge/src/android/graphics/SumPathEffect_Delegate.java create mode 100644 tools/layoutlib/bridge/src/android/graphics/SweepGradient_Delegate.java create mode 100644 tools/layoutlib/bridge/src/android/graphics/Typeface_Accessor.java create mode 100644 tools/layoutlib/bridge/src/android/graphics/Typeface_Delegate.java create mode 100644 tools/layoutlib/bridge/src/android/graphics/Xfermode_Delegate.java create mode 100644 tools/layoutlib/bridge/src/android/os/Build_Delegate.java create mode 100644 tools/layoutlib/bridge/src/android/os/HandlerThread_Delegate.java create mode 100644 tools/layoutlib/bridge/src/android/os/Handler_Delegate.java create mode 100644 tools/layoutlib/bridge/src/android/os/Looper_Accessor.java create mode 100644 tools/layoutlib/bridge/src/android/os/ServiceManager.java create mode 100644 tools/layoutlib/bridge/src/android/os/SystemClock_Delegate.java create mode 100644 tools/layoutlib/bridge/src/android/text/AndroidBidi_Delegate.java create mode 100644 tools/layoutlib/bridge/src/android/text/format/DateFormat_Delegate.java create mode 100644 tools/layoutlib/bridge/src/android/util/BridgeXmlPullAttributes.java create mode 100644 tools/layoutlib/bridge/src/android/util/FloatMath_Delegate.java create mode 100644 tools/layoutlib/bridge/src/android/util/Log_Delegate.java create mode 100644 tools/layoutlib/bridge/src/android/util/LruCache.java create mode 100644 tools/layoutlib/bridge/src/android/view/AttachInfo_Accessor.java create mode 100644 tools/layoutlib/bridge/src/android/view/BridgeInflater.java create mode 100644 tools/layoutlib/bridge/src/android/view/Choreographer_Delegate.java create mode 100644 tools/layoutlib/bridge/src/android/view/Display_Delegate.java create mode 100644 tools/layoutlib/bridge/src/android/view/IWindowManagerImpl.java create mode 100644 tools/layoutlib/bridge/src/android/view/LayoutInflater_Delegate.java create mode 100644 tools/layoutlib/bridge/src/android/view/SurfaceView.java create mode 100644 tools/layoutlib/bridge/src/android/view/ViewConfiguration_Accessor.java create mode 100644 tools/layoutlib/bridge/src/android/view/ViewRootImpl_Delegate.java create mode 100644 tools/layoutlib/bridge/src/android/view/View_Delegate.java create mode 100644 tools/layoutlib/bridge/src/android/view/WindowManagerGlobal_Delegate.java create mode 100644 tools/layoutlib/bridge/src/android/view/accessibility/AccessibilityManager.java create mode 100644 tools/layoutlib/bridge/src/android/view/inputmethod/InputMethodManager_Accessor.java create mode 100644 tools/layoutlib/bridge/src/android/view/inputmethod/InputMethodManager_Delegate.java create mode 100644 tools/layoutlib/bridge/src/android/webkit/WebView.java create mode 100644 tools/layoutlib/bridge/src/com/android/internal/policy/PolicyManager.java create mode 100644 tools/layoutlib/bridge/src/com/android/internal/textservice/ITextServicesManager_Stub_Delegate.java create mode 100644 tools/layoutlib/bridge/src/com/android/internal/util/XmlUtils_Delegate.java create mode 100644 tools/layoutlib/bridge/src/com/android/layoutlib/bridge/Bridge.java create mode 100644 tools/layoutlib/bridge/src/com/android/layoutlib/bridge/BridgeConstants.java create mode 100644 tools/layoutlib/bridge/src/com/android/layoutlib/bridge/BridgeRenderSession.java create mode 100644 tools/layoutlib/bridge/src/com/android/layoutlib/bridge/MockView.java create mode 100644 tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContentProvider.java create mode 100644 tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContentResolver.java create mode 100644 tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java create mode 100644 tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeIInputMethodManager.java create mode 100644 tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeLayoutParamsMapAttributes.java create mode 100644 tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgePowerManager.java create mode 100644 tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeWindow.java create mode 100644 tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeWindowSession.java create mode 100644 tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeXmlBlockParser.java create mode 100644 tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/view/WindowManagerImpl.java create mode 100644 tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/CustomBar.java create mode 100644 tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/FakeActionBar.java create mode 100644 tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/NavigationBar.java create mode 100644 tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/StatusBar.java create mode 100644 tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/TitleBar.java create mode 100644 tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/DelegateManager.java create mode 100644 tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/FontLoader.java create mode 100644 tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/GcSnapshot.java create mode 100644 tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/ParserFactory.java create mode 100644 tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/PlayAnimationThread.java create mode 100644 tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/RenderAction.java create mode 100644 tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/RenderDrawable.java create mode 100644 tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/RenderSessionImpl.java create mode 100644 tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/ResourceHelper.java create mode 100644 tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/Stack.java create mode 100644 tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/binding/BaseAdapter.java create mode 100644 tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/binding/FakeAdapter.java create mode 100644 tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/binding/FakeExpandableAdapter.java create mode 100644 tools/layoutlib/bridge/src/com/android/layoutlib/bridge/util/Debug.java create mode 100644 tools/layoutlib/bridge/src/com/android/layoutlib/bridge/util/DynamicIdMap.java create mode 100644 tools/layoutlib/bridge/src/com/android/layoutlib/bridge/util/SparseWeakArray.java create mode 100644 tools/layoutlib/bridge/src/com/google/android/maps/MapView.java create mode 100644 tools/layoutlib/bridge/src/libcore/icu/ICU_Delegate.java create mode 100644 tools/layoutlib/bridge/tests/.classpath create mode 100644 tools/layoutlib/bridge/tests/.project create mode 100644 tools/layoutlib/bridge/tests/Android.mk create mode 100644 tools/layoutlib/bridge/tests/res/com/android/layoutlib/testdata/layout1.xml create mode 100644 tools/layoutlib/bridge/tests/src/android/graphics/Matrix_DelegateTest.java create mode 100644 tools/layoutlib/bridge/tests/src/com/android/layoutlib/bridge/TestDelegates.java create mode 100644 tools/layoutlib/bridge/tests/src/com/android/layoutlib/bridge/android/BridgeXmlBlockParserTest.java create mode 100644 tools/layoutlib/create/.classpath create mode 100644 tools/layoutlib/create/.project create mode 100644 tools/layoutlib/create/.settings/README.txt create mode 100644 tools/layoutlib/create/.settings/org.eclipse.jdt.core.prefs create mode 100644 tools/layoutlib/create/Android.mk create mode 100644 tools/layoutlib/create/README.txt create mode 100644 tools/layoutlib/create/manifest.txt create mode 100644 tools/layoutlib/create/src/com/android/tools/layoutlib/annotations/LayoutlibDelegate.java create mode 100644 tools/layoutlib/create/src/com/android/tools/layoutlib/annotations/Nullable.java create mode 100644 tools/layoutlib/create/src/com/android/tools/layoutlib/annotations/VisibleForTesting.java create mode 100644 tools/layoutlib/create/src/com/android/tools/layoutlib/create/AsmAnalyzer.java create mode 100644 tools/layoutlib/create/src/com/android/tools/layoutlib/create/AsmGenerator.java create mode 100644 tools/layoutlib/create/src/com/android/tools/layoutlib/create/ClassHasNativeVisitor.java create mode 100644 tools/layoutlib/create/src/com/android/tools/layoutlib/create/CreateInfo.java create mode 100644 tools/layoutlib/create/src/com/android/tools/layoutlib/create/DelegateClassAdapter.java create mode 100644 tools/layoutlib/create/src/com/android/tools/layoutlib/create/DelegateMethodAdapter2.java create mode 100644 tools/layoutlib/create/src/com/android/tools/layoutlib/create/DependencyFinder.java create mode 100644 tools/layoutlib/create/src/com/android/tools/layoutlib/create/ICreateInfo.java create mode 100644 tools/layoutlib/create/src/com/android/tools/layoutlib/create/Log.java create mode 100644 tools/layoutlib/create/src/com/android/tools/layoutlib/create/LogAbortException.java create mode 100644 tools/layoutlib/create/src/com/android/tools/layoutlib/create/Main.java create mode 100644 tools/layoutlib/create/src/com/android/tools/layoutlib/create/MethodAdapter.java create mode 100644 tools/layoutlib/create/src/com/android/tools/layoutlib/create/MethodListener.java create mode 100644 tools/layoutlib/create/src/com/android/tools/layoutlib/create/OverrideMethod.java create mode 100644 tools/layoutlib/create/src/com/android/tools/layoutlib/create/RenameClassAdapter.java create mode 100644 tools/layoutlib/create/src/com/android/tools/layoutlib/create/StubMethodAdapter.java create mode 100644 tools/layoutlib/create/src/com/android/tools/layoutlib/create/TransformClassAdapter.java create mode 100644 tools/layoutlib/create/tests/com/android/tools/layoutlib/create/AsmAnalyzerTest.java create mode 100644 tools/layoutlib/create/tests/com/android/tools/layoutlib/create/AsmGeneratorTest.java create mode 100644 tools/layoutlib/create/tests/com/android/tools/layoutlib/create/ClassHasNativeVisitorTest.java create mode 100644 tools/layoutlib/create/tests/com/android/tools/layoutlib/create/DelegateClassAdapterTest.java create mode 100644 tools/layoutlib/create/tests/com/android/tools/layoutlib/create/LogTest.java create mode 100644 tools/layoutlib/create/tests/com/android/tools/layoutlib/create/MockLog.java create mode 100644 tools/layoutlib/create/tests/com/android/tools/layoutlib/create/RenameClassAdapterTest.java create mode 100644 tools/layoutlib/create/tests/com/android/tools/layoutlib/create/dataclass/ClassWithNative.java create mode 100644 tools/layoutlib/create/tests/com/android/tools/layoutlib/create/dataclass/ClassWithNative_Delegate.java create mode 100644 tools/layoutlib/create/tests/com/android/tools/layoutlib/create/dataclass/OuterClass.java create mode 100644 tools/layoutlib/create/tests/com/android/tools/layoutlib/create/dataclass/OuterClass_Delegate.java create mode 100644 tools/layoutlib/create/tests/com/android/tools/layoutlib/create/dataclass/OuterClass_InnerClass_Delegate.java create mode 100644 tools/layoutlib/create/tests/data/mock_android.jar create mode 100644 tools/layoutlib/create/tests/data/mock_android.jardesc create mode 100644 tools/layoutlib/create/tests/mock_android/dummy/InnerTest.java create mode 100644 tools/layoutlib/create/tests/mock_android/view/View.java create mode 100644 tools/layoutlib/create/tests/mock_android/view/ViewGroup.java create mode 100644 tools/layoutlib/create/tests/mock_android/widget/LinearLayout.java create mode 100644 tools/layoutlib/create/tests/mock_android/widget/TableLayout.java create mode 100644 tools/obbtool/Android.mk create mode 100644 tools/obbtool/Main.cpp create mode 100755 tools/obbtool/mkobb.sh create mode 100644 tools/obbtool/pbkdf2gen.cpp create mode 100644 tools/orientationplot/README.txt create mode 100755 tools/orientationplot/orientationplot.py create mode 100644 tools/preload/20080522.compiled create mode 100644 tools/preload/20090811.compiled create mode 100644 tools/preload/20100223.compiled create mode 100644 tools/preload/Android.mk create mode 100644 tools/preload/Compile.java create mode 100644 tools/preload/LoadedClass.java create mode 100644 tools/preload/MemoryUsage.java create mode 100644 tools/preload/Operation.java create mode 100644 tools/preload/Policy.java create mode 100644 tools/preload/PrintCsv.java create mode 100644 tools/preload/PrintHtmlDiff.java create mode 100644 tools/preload/PrintPsTree.java create mode 100644 tools/preload/Proc.java create mode 100644 tools/preload/Record.java create mode 100644 tools/preload/Root.java create mode 100644 tools/preload/WritePreloadedClassFile.java create mode 100644 tools/preload/loadclass/Android.mk create mode 100644 tools/preload/loadclass/LoadClass.java create mode 100644 tools/preload/preload.iml create mode 100644 tools/preload/preload.ipr create mode 100644 tools/preload/sorttable.js create mode 100644 tools/validatekeymaps/Android.mk create mode 100644 tools/validatekeymaps/Main.cpp create mode 100755 tools/velocityplot/velocityplot.py diff --git a/tools/aapt/AaptAssets.cpp b/tools/aapt/AaptAssets.cpp new file mode 100644 index 0000000000000..3797b49cc32d1 --- /dev/null +++ b/tools/aapt/AaptAssets.cpp @@ -0,0 +1,2689 @@ +// +// Copyright 2006 The Android Open Source Project +// + +#include "AaptAssets.h" +#include "ResourceFilter.h" +#include "Main.h" + +#include +#include + +#include +#include +#include + +static const char* kDefaultLocale = "default"; +static const char* kWildcardName = "any"; +static const char* kAssetDir = "assets"; +static const char* kResourceDir = "res"; +static const char* kValuesDir = "values"; +static const char* kMipmapDir = "mipmap"; +static const char* kInvalidChars = "/\\:"; +static const size_t kMaxAssetFileName = 100; + +static const String8 kResString(kResourceDir); + +/* + * Names of asset files must meet the following criteria: + * + * - the filename length must be less than kMaxAssetFileName bytes long + * (and can't be empty) + * - all characters must be 7-bit printable ASCII + * - none of { '/' '\\' ':' } + * + * Pass in just the filename, not the full path. + */ +static bool validateFileName(const char* fileName) +{ + const char* cp = fileName; + size_t len = 0; + + while (*cp != '\0') { + if ((*cp & 0x80) != 0) + return false; // reject high ASCII + if (*cp < 0x20 || *cp >= 0x7f) + return false; // reject control chars and 0x7f + if (strchr(kInvalidChars, *cp) != NULL) + return false; // reject path sep chars + cp++; + len++; + } + + if (len < 1 || len > kMaxAssetFileName) + return false; // reject empty or too long + + return true; +} + +// The default to use if no other ignore pattern is defined. +const char * const gDefaultIgnoreAssets = + "!.svn:!.git:!.ds_store:!*.scc:.*:_*:!CVS:!thumbs.db:!picasa.ini:!*~"; +// The ignore pattern that can be passed via --ignore-assets in Main.cpp +const char * gUserIgnoreAssets = NULL; + +static bool isHidden(const char *root, const char *path) +{ + // Patterns syntax: + // - Delimiter is : + // - Entry can start with the flag ! to avoid printing a warning + // about the file being ignored. + // - Entry can have the flag "" to match only directories + // or to match only files. Default is to match both. + // - Entry can be a simplified glob "*" or "*" + // where prefix/suffix must have at least 1 character (so that + // we don't match a '*' catch-all pattern.) + // - The special filenames "." and ".." are always ignored. + // - Otherwise the full string is matched. + // - match is not case-sensitive. + + if (strcmp(path, ".") == 0 || strcmp(path, "..") == 0) { + return true; + } + + const char *delim = ":"; + const char *p = gUserIgnoreAssets; + if (!p || !p[0]) { + p = getenv("ANDROID_AAPT_IGNORE"); + } + if (!p || !p[0]) { + p = gDefaultIgnoreAssets; + } + char *patterns = strdup(p); + + bool ignore = false; + bool chatty = true; + char *matchedPattern = NULL; + + String8 fullPath(root); + fullPath.appendPath(path); + FileType type = getFileType(fullPath); + + int plen = strlen(path); + + // Note: we don't have strtok_r under mingw. + for(char *token = strtok(patterns, delim); + !ignore && token != NULL; + token = strtok(NULL, delim)) { + chatty = token[0] != '!'; + if (!chatty) token++; // skip ! + if (strncasecmp(token, "" , 5) == 0) { + if (type != kFileTypeDirectory) continue; + token += 5; + } + if (strncasecmp(token, "", 6) == 0) { + if (type != kFileTypeRegular) continue; + token += 6; + } + + matchedPattern = token; + int n = strlen(token); + + if (token[0] == '*') { + // Match *suffix + token++; + n--; + if (n <= plen) { + ignore = strncasecmp(token, path + plen - n, n) == 0; + } + } else if (n > 1 && token[n - 1] == '*') { + // Match prefix* + ignore = strncasecmp(token, path, n - 1) == 0; + } else { + ignore = strcasecmp(token, path) == 0; + } + } + + if (ignore && chatty) { + fprintf(stderr, " (skipping %s '%s' due to ANDROID_AAPT_IGNORE pattern '%s')\n", + type == kFileTypeDirectory ? "dir" : "file", + path, + matchedPattern ? matchedPattern : ""); + } + + free(patterns); + return ignore; +} + +// ========================================================================= +// ========================================================================= +// ========================================================================= + +status_t +AaptGroupEntry::parseNamePart(const String8& part, int* axis, uint32_t* value) +{ + ResTable_config config; + + // IMSI - MCC + if (getMccName(part.string(), &config)) { + *axis = AXIS_MCC; + *value = config.mcc; + return 0; + } + + // IMSI - MNC + if (getMncName(part.string(), &config)) { + *axis = AXIS_MNC; + *value = config.mnc; + return 0; + } + + // locale - language + if (part.length() == 2 && isalpha(part[0]) && isalpha(part[1])) { + *axis = AXIS_LANGUAGE; + *value = part[1] << 8 | part[0]; + return 0; + } + + // locale - language_REGION + if (part.length() == 5 && isalpha(part[0]) && isalpha(part[1]) + && part[2] == '_' && isalpha(part[3]) && isalpha(part[4])) { + *axis = AXIS_LANGUAGE; + *value = (part[4] << 24) | (part[3] << 16) | (part[1] << 8) | (part[0]); + return 0; + } + + // layout direction + if (getLayoutDirectionName(part.string(), &config)) { + *axis = AXIS_LAYOUTDIR; + *value = (config.screenLayout&ResTable_config::MASK_LAYOUTDIR); + return 0; + } + + // smallest screen dp width + if (getSmallestScreenWidthDpName(part.string(), &config)) { + *axis = AXIS_SMALLESTSCREENWIDTHDP; + *value = config.smallestScreenWidthDp; + return 0; + } + + // screen dp width + if (getScreenWidthDpName(part.string(), &config)) { + *axis = AXIS_SCREENWIDTHDP; + *value = config.screenWidthDp; + return 0; + } + + // screen dp height + if (getScreenHeightDpName(part.string(), &config)) { + *axis = AXIS_SCREENHEIGHTDP; + *value = config.screenHeightDp; + return 0; + } + + // screen layout size + if (getScreenLayoutSizeName(part.string(), &config)) { + *axis = AXIS_SCREENLAYOUTSIZE; + *value = (config.screenLayout&ResTable_config::MASK_SCREENSIZE); + return 0; + } + + // screen layout long + if (getScreenLayoutLongName(part.string(), &config)) { + *axis = AXIS_SCREENLAYOUTLONG; + *value = (config.screenLayout&ResTable_config::MASK_SCREENLONG); + return 0; + } + + // orientation + if (getOrientationName(part.string(), &config)) { + *axis = AXIS_ORIENTATION; + *value = config.orientation; + return 0; + } + + // ui mode type + if (getUiModeTypeName(part.string(), &config)) { + *axis = AXIS_UIMODETYPE; + *value = (config.uiMode&ResTable_config::MASK_UI_MODE_TYPE); + return 0; + } + + // ui mode night + if (getUiModeNightName(part.string(), &config)) { + *axis = AXIS_UIMODENIGHT; + *value = (config.uiMode&ResTable_config::MASK_UI_MODE_NIGHT); + return 0; + } + + // density + if (getDensityName(part.string(), &config)) { + *axis = AXIS_DENSITY; + *value = config.density; + return 0; + } + + // touchscreen + if (getTouchscreenName(part.string(), &config)) { + *axis = AXIS_TOUCHSCREEN; + *value = config.touchscreen; + return 0; + } + + // keyboard hidden + if (getKeysHiddenName(part.string(), &config)) { + *axis = AXIS_KEYSHIDDEN; + *value = config.inputFlags; + return 0; + } + + // keyboard + if (getKeyboardName(part.string(), &config)) { + *axis = AXIS_KEYBOARD; + *value = config.keyboard; + return 0; + } + + // navigation hidden + if (getNavHiddenName(part.string(), &config)) { + *axis = AXIS_NAVHIDDEN; + *value = config.inputFlags; + return 0; + } + + // navigation + if (getNavigationName(part.string(), &config)) { + *axis = AXIS_NAVIGATION; + *value = config.navigation; + return 0; + } + + // screen size + if (getScreenSizeName(part.string(), &config)) { + *axis = AXIS_SCREENSIZE; + *value = config.screenSize; + return 0; + } + + // version + if (getVersionName(part.string(), &config)) { + *axis = AXIS_VERSION; + *value = config.version; + return 0; + } + + return 1; +} + +uint32_t +AaptGroupEntry::getConfigValueForAxis(const ResTable_config& config, int axis) +{ + switch (axis) { + case AXIS_MCC: + return config.mcc; + case AXIS_MNC: + return config.mnc; + case AXIS_LANGUAGE: + return (((uint32_t)config.country[1]) << 24) | (((uint32_t)config.country[0]) << 16) + | (((uint32_t)config.language[1]) << 8) | (config.language[0]); + case AXIS_LAYOUTDIR: + return config.screenLayout&ResTable_config::MASK_LAYOUTDIR; + case AXIS_SCREENLAYOUTSIZE: + return config.screenLayout&ResTable_config::MASK_SCREENSIZE; + case AXIS_ORIENTATION: + return config.orientation; + case AXIS_UIMODETYPE: + return (config.uiMode&ResTable_config::MASK_UI_MODE_TYPE); + case AXIS_UIMODENIGHT: + return (config.uiMode&ResTable_config::MASK_UI_MODE_NIGHT); + case AXIS_DENSITY: + return config.density; + case AXIS_TOUCHSCREEN: + return config.touchscreen; + case AXIS_KEYSHIDDEN: + return config.inputFlags; + case AXIS_KEYBOARD: + return config.keyboard; + case AXIS_NAVIGATION: + return config.navigation; + case AXIS_SCREENSIZE: + return config.screenSize; + case AXIS_SMALLESTSCREENWIDTHDP: + return config.smallestScreenWidthDp; + case AXIS_SCREENWIDTHDP: + return config.screenWidthDp; + case AXIS_SCREENHEIGHTDP: + return config.screenHeightDp; + case AXIS_VERSION: + return config.version; + } + return 0; +} + +bool +AaptGroupEntry::configSameExcept(const ResTable_config& config, + const ResTable_config& otherConfig, int axis) +{ + for (int i=AXIS_START; i<=AXIS_END; i++) { + if (i == axis) { + continue; + } + if (getConfigValueForAxis(config, i) != getConfigValueForAxis(otherConfig, i)) { + return false; + } + } + return true; +} + +bool +AaptGroupEntry::initFromDirName(const char* dir, String8* resType) +{ + mParamsChanged = true; + + Vector parts; + + String8 mcc, mnc, loc, layoutsize, layoutlong, orient, den; + String8 touch, key, keysHidden, nav, navHidden, size, layoutDir, vers; + String8 uiModeType, uiModeNight, smallestwidthdp, widthdp, heightdp; + + const char *p = dir; + const char *q; + while (NULL != (q = strchr(p, '-'))) { + String8 val(p, q-p); + val.toLower(); + parts.add(val); + //printf("part: %s\n", parts[parts.size()-1].string()); + p = q+1; + } + String8 val(p); + val.toLower(); + parts.add(val); + //printf("part: %s\n", parts[parts.size()-1].string()); + + const int N = parts.size(); + int index = 0; + String8 part = parts[index]; + + // resource type + if (!isValidResourceType(part)) { + return false; + } + *resType = part; + + index++; + if (index == N) { + goto success; + } + part = parts[index]; + + // imsi - mcc + if (getMccName(part.string())) { + mcc = part; + + index++; + if (index == N) { + goto success; + } + part = parts[index]; + } else { + //printf("not mcc: %s\n", part.string()); + } + + // imsi - mnc + if (getMncName(part.string())) { + mnc = part; + + index++; + if (index == N) { + goto success; + } + part = parts[index]; + } else { + //printf("not mcc: %s\n", part.string()); + } + + // locale - language + if (part.length() == 2 && isalpha(part[0]) && isalpha(part[1])) { + loc = part; + + index++; + if (index == N) { + goto success; + } + part = parts[index]; + } else { + //printf("not language: %s\n", part.string()); + } + + // locale - region + if (loc.length() > 0 + && part.length() == 3 && part[0] == 'r' && part[0] && part[1]) { + loc += "-"; + part.toUpper(); + loc += part.string() + 1; + + index++; + if (index == N) { + goto success; + } + part = parts[index]; + } else { + //printf("not region: %s\n", part.string()); + } + + if (getLayoutDirectionName(part.string())) { + layoutDir = part; + + index++; + if (index == N) { + goto success; + } + part = parts[index]; + } else { + //printf("not layout direction: %s\n", part.string()); + } + + if (getSmallestScreenWidthDpName(part.string())) { + smallestwidthdp = part; + + index++; + if (index == N) { + goto success; + } + part = parts[index]; + } else { + //printf("not smallest screen width dp: %s\n", part.string()); + } + + if (getScreenWidthDpName(part.string())) { + widthdp = part; + + index++; + if (index == N) { + goto success; + } + part = parts[index]; + } else { + //printf("not screen width dp: %s\n", part.string()); + } + + if (getScreenHeightDpName(part.string())) { + heightdp = part; + + index++; + if (index == N) { + goto success; + } + part = parts[index]; + } else { + //printf("not screen height dp: %s\n", part.string()); + } + + if (getScreenLayoutSizeName(part.string())) { + layoutsize = part; + + index++; + if (index == N) { + goto success; + } + part = parts[index]; + } else { + //printf("not screen layout size: %s\n", part.string()); + } + + if (getScreenLayoutLongName(part.string())) { + layoutlong = part; + + index++; + if (index == N) { + goto success; + } + part = parts[index]; + } else { + //printf("not screen layout long: %s\n", part.string()); + } + + // orientation + if (getOrientationName(part.string())) { + orient = part; + + index++; + if (index == N) { + goto success; + } + part = parts[index]; + } else { + //printf("not orientation: %s\n", part.string()); + } + + // ui mode type + if (getUiModeTypeName(part.string())) { + uiModeType = part; + + index++; + if (index == N) { + goto success; + } + part = parts[index]; + } else { + //printf("not ui mode type: %s\n", part.string()); + } + + // ui mode night + if (getUiModeNightName(part.string())) { + uiModeNight = part; + + index++; + if (index == N) { + goto success; + } + part = parts[index]; + } else { + //printf("not ui mode night: %s\n", part.string()); + } + + // density + if (getDensityName(part.string())) { + den = part; + + index++; + if (index == N) { + goto success; + } + part = parts[index]; + } else { + //printf("not density: %s\n", part.string()); + } + + // touchscreen + if (getTouchscreenName(part.string())) { + touch = part; + + index++; + if (index == N) { + goto success; + } + part = parts[index]; + } else { + //printf("not touchscreen: %s\n", part.string()); + } + + // keyboard hidden + if (getKeysHiddenName(part.string())) { + keysHidden = part; + + index++; + if (index == N) { + goto success; + } + part = parts[index]; + } else { + //printf("not keysHidden: %s\n", part.string()); + } + + // keyboard + if (getKeyboardName(part.string())) { + key = part; + + index++; + if (index == N) { + goto success; + } + part = parts[index]; + } else { + //printf("not keyboard: %s\n", part.string()); + } + + // navigation hidden + if (getNavHiddenName(part.string())) { + navHidden = part; + + index++; + if (index == N) { + goto success; + } + part = parts[index]; + } else { + //printf("not navHidden: %s\n", part.string()); + } + + if (getNavigationName(part.string())) { + nav = part; + + index++; + if (index == N) { + goto success; + } + part = parts[index]; + } else { + //printf("not navigation: %s\n", part.string()); + } + + if (getScreenSizeName(part.string())) { + size = part; + + index++; + if (index == N) { + goto success; + } + part = parts[index]; + } else { + //printf("not screen size: %s\n", part.string()); + } + + if (getVersionName(part.string())) { + vers = part; + + index++; + if (index == N) { + goto success; + } + part = parts[index]; + } else { + //printf("not version: %s\n", part.string()); + } + + // if there are extra parts, it doesn't match + return false; + +success: + this->mcc = mcc; + this->mnc = mnc; + this->locale = loc; + this->screenLayoutSize = layoutsize; + this->screenLayoutLong = layoutlong; + this->smallestScreenWidthDp = smallestwidthdp; + this->screenWidthDp = widthdp; + this->screenHeightDp = heightdp; + this->orientation = orient; + this->uiModeType = uiModeType; + this->uiModeNight = uiModeNight; + this->density = den; + this->touchscreen = touch; + this->keysHidden = keysHidden; + this->keyboard = key; + this->navHidden = navHidden; + this->navigation = nav; + this->screenSize = size; + this->layoutDirection = layoutDir; + this->version = vers; + + // what is this anyway? + this->vendor = ""; + + return true; +} + +String8 +AaptGroupEntry::toString() const +{ + String8 s = this->mcc; + s += ","; + s += this->mnc; + s += ","; + s += this->locale; + s += ","; + s += layoutDirection; + s += ","; + s += smallestScreenWidthDp; + s += ","; + s += screenWidthDp; + s += ","; + s += screenHeightDp; + s += ","; + s += screenLayoutSize; + s += ","; + s += screenLayoutLong; + s += ","; + s += this->orientation; + s += ","; + s += uiModeType; + s += ","; + s += uiModeNight; + s += ","; + s += density; + s += ","; + s += touchscreen; + s += ","; + s += keysHidden; + s += ","; + s += keyboard; + s += ","; + s += navHidden; + s += ","; + s += navigation; + s += ","; + s += screenSize; + s += ","; + s += version; + return s; +} + +String8 +AaptGroupEntry::toDirName(const String8& resType) const +{ + String8 s = resType; + if (this->mcc != "") { + if (s.length() > 0) { + s += "-"; + } + s += mcc; + } + if (this->mnc != "") { + if (s.length() > 0) { + s += "-"; + } + s += mnc; + } + if (this->locale != "") { + if (s.length() > 0) { + s += "-"; + } + s += locale; + } + if (this->layoutDirection != "") { + if (s.length() > 0) { + s += "-"; + } + s += layoutDirection; + } + if (this->smallestScreenWidthDp != "") { + if (s.length() > 0) { + s += "-"; + } + s += smallestScreenWidthDp; + } + if (this->screenWidthDp != "") { + if (s.length() > 0) { + s += "-"; + } + s += screenWidthDp; + } + if (this->screenHeightDp != "") { + if (s.length() > 0) { + s += "-"; + } + s += screenHeightDp; + } + if (this->screenLayoutSize != "") { + if (s.length() > 0) { + s += "-"; + } + s += screenLayoutSize; + } + if (this->screenLayoutLong != "") { + if (s.length() > 0) { + s += "-"; + } + s += screenLayoutLong; + } + if (this->orientation != "") { + if (s.length() > 0) { + s += "-"; + } + s += orientation; + } + if (this->uiModeType != "") { + if (s.length() > 0) { + s += "-"; + } + s += uiModeType; + } + if (this->uiModeNight != "") { + if (s.length() > 0) { + s += "-"; + } + s += uiModeNight; + } + if (this->density != "") { + if (s.length() > 0) { + s += "-"; + } + s += density; + } + if (this->touchscreen != "") { + if (s.length() > 0) { + s += "-"; + } + s += touchscreen; + } + if (this->keysHidden != "") { + if (s.length() > 0) { + s += "-"; + } + s += keysHidden; + } + if (this->keyboard != "") { + if (s.length() > 0) { + s += "-"; + } + s += keyboard; + } + if (this->navHidden != "") { + if (s.length() > 0) { + s += "-"; + } + s += navHidden; + } + if (this->navigation != "") { + if (s.length() > 0) { + s += "-"; + } + s += navigation; + } + if (this->screenSize != "") { + if (s.length() > 0) { + s += "-"; + } + s += screenSize; + } + if (this->version != "") { + if (s.length() > 0) { + s += "-"; + } + s += version; + } + + return s; +} + +bool AaptGroupEntry::getMccName(const char* name, + ResTable_config* out) +{ + if (strcmp(name, kWildcardName) == 0) { + if (out) out->mcc = 0; + return true; + } + const char* c = name; + if (tolower(*c) != 'm') return false; + c++; + if (tolower(*c) != 'c') return false; + c++; + if (tolower(*c) != 'c') return false; + c++; + + const char* val = c; + + while (*c >= '0' && *c <= '9') { + c++; + } + if (*c != 0) return false; + if (c-val != 3) return false; + + int d = atoi(val); + if (d != 0) { + if (out) out->mcc = d; + return true; + } + + return false; +} + +bool AaptGroupEntry::getMncName(const char* name, + ResTable_config* out) +{ + if (strcmp(name, kWildcardName) == 0) { + if (out) out->mcc = 0; + return true; + } + const char* c = name; + if (tolower(*c) != 'm') return false; + c++; + if (tolower(*c) != 'n') return false; + c++; + if (tolower(*c) != 'c') return false; + c++; + + const char* val = c; + + while (*c >= '0' && *c <= '9') { + c++; + } + if (*c != 0) return false; + if (c-val == 0 || c-val > 3) return false; + + if (out) { + out->mnc = atoi(val); + if (out->mnc == 0) { + out->mnc = ACONFIGURATION_MNC_ZERO; + } + } + + return true; +} + +/* + * Does this directory name fit the pattern of a locale dir ("en-rUS" or + * "default")? + * + * TODO: Should insist that the first two letters are lower case, and the + * second two are upper. + */ +bool AaptGroupEntry::getLocaleName(const char* fileName, + ResTable_config* out) +{ + if (strcmp(fileName, kWildcardName) == 0 + || strcmp(fileName, kDefaultLocale) == 0) { + if (out) { + out->language[0] = 0; + out->language[1] = 0; + out->country[0] = 0; + out->country[1] = 0; + } + return true; + } + + if (strlen(fileName) == 2 && isalpha(fileName[0]) && isalpha(fileName[1])) { + if (out) { + out->language[0] = fileName[0]; + out->language[1] = fileName[1]; + out->country[0] = 0; + out->country[1] = 0; + } + return true; + } + + if (strlen(fileName) == 5 && + isalpha(fileName[0]) && + isalpha(fileName[1]) && + fileName[2] == '-' && + isalpha(fileName[3]) && + isalpha(fileName[4])) { + if (out) { + out->language[0] = fileName[0]; + out->language[1] = fileName[1]; + out->country[0] = fileName[3]; + out->country[1] = fileName[4]; + } + return true; + } + + return false; +} + +bool AaptGroupEntry::getLayoutDirectionName(const char* name, ResTable_config* out) +{ + if (strcmp(name, kWildcardName) == 0) { + if (out) out->screenLayout = + (out->screenLayout&~ResTable_config::MASK_LAYOUTDIR) + | ResTable_config::LAYOUTDIR_ANY; + return true; + } else if (strcmp(name, "ldltr") == 0) { + if (out) out->screenLayout = + (out->screenLayout&~ResTable_config::MASK_LAYOUTDIR) + | ResTable_config::LAYOUTDIR_LTR; + return true; + } else if (strcmp(name, "ldrtl") == 0) { + if (out) out->screenLayout = + (out->screenLayout&~ResTable_config::MASK_LAYOUTDIR) + | ResTable_config::LAYOUTDIR_RTL; + return true; + } + + return false; +} + +bool AaptGroupEntry::getScreenLayoutSizeName(const char* name, + ResTable_config* out) +{ + if (strcmp(name, kWildcardName) == 0) { + if (out) out->screenLayout = + (out->screenLayout&~ResTable_config::MASK_SCREENSIZE) + | ResTable_config::SCREENSIZE_ANY; + return true; + } else if (strcmp(name, "small") == 0) { + if (out) out->screenLayout = + (out->screenLayout&~ResTable_config::MASK_SCREENSIZE) + | ResTable_config::SCREENSIZE_SMALL; + return true; + } else if (strcmp(name, "normal") == 0) { + if (out) out->screenLayout = + (out->screenLayout&~ResTable_config::MASK_SCREENSIZE) + | ResTable_config::SCREENSIZE_NORMAL; + return true; + } else if (strcmp(name, "large") == 0) { + if (out) out->screenLayout = + (out->screenLayout&~ResTable_config::MASK_SCREENSIZE) + | ResTable_config::SCREENSIZE_LARGE; + return true; + } else if (strcmp(name, "xlarge") == 0) { + if (out) out->screenLayout = + (out->screenLayout&~ResTable_config::MASK_SCREENSIZE) + | ResTable_config::SCREENSIZE_XLARGE; + return true; + } + + return false; +} + +bool AaptGroupEntry::getScreenLayoutLongName(const char* name, + ResTable_config* out) +{ + if (strcmp(name, kWildcardName) == 0) { + if (out) out->screenLayout = + (out->screenLayout&~ResTable_config::MASK_SCREENLONG) + | ResTable_config::SCREENLONG_ANY; + return true; + } else if (strcmp(name, "long") == 0) { + if (out) out->screenLayout = + (out->screenLayout&~ResTable_config::MASK_SCREENLONG) + | ResTable_config::SCREENLONG_YES; + return true; + } else if (strcmp(name, "notlong") == 0) { + if (out) out->screenLayout = + (out->screenLayout&~ResTable_config::MASK_SCREENLONG) + | ResTable_config::SCREENLONG_NO; + return true; + } + + return false; +} + +bool AaptGroupEntry::getOrientationName(const char* name, + ResTable_config* out) +{ + if (strcmp(name, kWildcardName) == 0) { + if (out) out->orientation = out->ORIENTATION_ANY; + return true; + } else if (strcmp(name, "port") == 0) { + if (out) out->orientation = out->ORIENTATION_PORT; + return true; + } else if (strcmp(name, "land") == 0) { + if (out) out->orientation = out->ORIENTATION_LAND; + return true; + } else if (strcmp(name, "square") == 0) { + if (out) out->orientation = out->ORIENTATION_SQUARE; + return true; + } + + return false; +} + +bool AaptGroupEntry::getUiModeTypeName(const char* name, + ResTable_config* out) +{ + if (strcmp(name, kWildcardName) == 0) { + if (out) out->uiMode = + (out->uiMode&~ResTable_config::MASK_UI_MODE_TYPE) + | ResTable_config::UI_MODE_TYPE_ANY; + return true; + } else if (strcmp(name, "desk") == 0) { + if (out) out->uiMode = + (out->uiMode&~ResTable_config::MASK_UI_MODE_TYPE) + | ResTable_config::UI_MODE_TYPE_DESK; + return true; + } else if (strcmp(name, "car") == 0) { + if (out) out->uiMode = + (out->uiMode&~ResTable_config::MASK_UI_MODE_TYPE) + | ResTable_config::UI_MODE_TYPE_CAR; + return true; + } else if (strcmp(name, "television") == 0) { + if (out) out->uiMode = + (out->uiMode&~ResTable_config::MASK_UI_MODE_TYPE) + | ResTable_config::UI_MODE_TYPE_TELEVISION; + return true; + } else if (strcmp(name, "appliance") == 0) { + if (out) out->uiMode = + (out->uiMode&~ResTable_config::MASK_UI_MODE_TYPE) + | ResTable_config::UI_MODE_TYPE_APPLIANCE; + return true; + } + + return false; +} + +bool AaptGroupEntry::getUiModeNightName(const char* name, + ResTable_config* out) +{ + if (strcmp(name, kWildcardName) == 0) { + if (out) out->uiMode = + (out->uiMode&~ResTable_config::MASK_UI_MODE_NIGHT) + | ResTable_config::UI_MODE_NIGHT_ANY; + return true; + } else if (strcmp(name, "night") == 0) { + if (out) out->uiMode = + (out->uiMode&~ResTable_config::MASK_UI_MODE_NIGHT) + | ResTable_config::UI_MODE_NIGHT_YES; + return true; + } else if (strcmp(name, "notnight") == 0) { + if (out) out->uiMode = + (out->uiMode&~ResTable_config::MASK_UI_MODE_NIGHT) + | ResTable_config::UI_MODE_NIGHT_NO; + return true; + } + + return false; +} + +bool AaptGroupEntry::getDensityName(const char* name, + ResTable_config* out) +{ + if (strcmp(name, kWildcardName) == 0) { + if (out) out->density = ResTable_config::DENSITY_DEFAULT; + return true; + } + + if (strcmp(name, "nodpi") == 0) { + if (out) out->density = ResTable_config::DENSITY_NONE; + return true; + } + + if (strcmp(name, "ldpi") == 0) { + if (out) out->density = ResTable_config::DENSITY_LOW; + return true; + } + + if (strcmp(name, "mdpi") == 0) { + if (out) out->density = ResTable_config::DENSITY_MEDIUM; + return true; + } + + if (strcmp(name, "tvdpi") == 0) { + if (out) out->density = ResTable_config::DENSITY_TV; + return true; + } + + if (strcmp(name, "hdpi") == 0) { + if (out) out->density = ResTable_config::DENSITY_HIGH; + return true; + } + + if (strcmp(name, "xhdpi") == 0) { + if (out) out->density = ResTable_config::DENSITY_XHIGH; + return true; + } + + if (strcmp(name, "xxhdpi") == 0) { + if (out) out->density = ResTable_config::DENSITY_XXHIGH; + return true; + } + + if (strcmp(name, "xxxhdpi") == 0) { + if (out) out->density = ResTable_config::DENSITY_XXXHIGH; + return true; + } + + char* c = (char*)name; + while (*c >= '0' && *c <= '9') { + c++; + } + + // check that we have 'dpi' after the last digit. + if (toupper(c[0]) != 'D' || + toupper(c[1]) != 'P' || + toupper(c[2]) != 'I' || + c[3] != 0) { + return false; + } + + // temporarily replace the first letter with \0 to + // use atoi. + char tmp = c[0]; + c[0] = '\0'; + + int d = atoi(name); + c[0] = tmp; + + if (d != 0) { + if (out) out->density = d; + return true; + } + + return false; +} + +bool AaptGroupEntry::getTouchscreenName(const char* name, + ResTable_config* out) +{ + if (strcmp(name, kWildcardName) == 0) { + if (out) out->touchscreen = out->TOUCHSCREEN_ANY; + return true; + } else if (strcmp(name, "notouch") == 0) { + if (out) out->touchscreen = out->TOUCHSCREEN_NOTOUCH; + return true; + } else if (strcmp(name, "stylus") == 0) { + if (out) out->touchscreen = out->TOUCHSCREEN_STYLUS; + return true; + } else if (strcmp(name, "finger") == 0) { + if (out) out->touchscreen = out->TOUCHSCREEN_FINGER; + return true; + } + + return false; +} + +bool AaptGroupEntry::getKeysHiddenName(const char* name, + ResTable_config* out) +{ + uint8_t mask = 0; + uint8_t value = 0; + if (strcmp(name, kWildcardName) == 0) { + mask = ResTable_config::MASK_KEYSHIDDEN; + value = ResTable_config::KEYSHIDDEN_ANY; + } else if (strcmp(name, "keysexposed") == 0) { + mask = ResTable_config::MASK_KEYSHIDDEN; + value = ResTable_config::KEYSHIDDEN_NO; + } else if (strcmp(name, "keyshidden") == 0) { + mask = ResTable_config::MASK_KEYSHIDDEN; + value = ResTable_config::KEYSHIDDEN_YES; + } else if (strcmp(name, "keyssoft") == 0) { + mask = ResTable_config::MASK_KEYSHIDDEN; + value = ResTable_config::KEYSHIDDEN_SOFT; + } + + if (mask != 0) { + if (out) out->inputFlags = (out->inputFlags&~mask) | value; + return true; + } + + return false; +} + +bool AaptGroupEntry::getKeyboardName(const char* name, + ResTable_config* out) +{ + if (strcmp(name, kWildcardName) == 0) { + if (out) out->keyboard = out->KEYBOARD_ANY; + return true; + } else if (strcmp(name, "nokeys") == 0) { + if (out) out->keyboard = out->KEYBOARD_NOKEYS; + return true; + } else if (strcmp(name, "qwerty") == 0) { + if (out) out->keyboard = out->KEYBOARD_QWERTY; + return true; + } else if (strcmp(name, "12key") == 0) { + if (out) out->keyboard = out->KEYBOARD_12KEY; + return true; + } + + return false; +} + +bool AaptGroupEntry::getNavHiddenName(const char* name, + ResTable_config* out) +{ + uint8_t mask = 0; + uint8_t value = 0; + if (strcmp(name, kWildcardName) == 0) { + mask = ResTable_config::MASK_NAVHIDDEN; + value = ResTable_config::NAVHIDDEN_ANY; + } else if (strcmp(name, "navexposed") == 0) { + mask = ResTable_config::MASK_NAVHIDDEN; + value = ResTable_config::NAVHIDDEN_NO; + } else if (strcmp(name, "navhidden") == 0) { + mask = ResTable_config::MASK_NAVHIDDEN; + value = ResTable_config::NAVHIDDEN_YES; + } + + if (mask != 0) { + if (out) out->inputFlags = (out->inputFlags&~mask) | value; + return true; + } + + return false; +} + +bool AaptGroupEntry::getNavigationName(const char* name, + ResTable_config* out) +{ + if (strcmp(name, kWildcardName) == 0) { + if (out) out->navigation = out->NAVIGATION_ANY; + return true; + } else if (strcmp(name, "nonav") == 0) { + if (out) out->navigation = out->NAVIGATION_NONAV; + return true; + } else if (strcmp(name, "dpad") == 0) { + if (out) out->navigation = out->NAVIGATION_DPAD; + return true; + } else if (strcmp(name, "trackball") == 0) { + if (out) out->navigation = out->NAVIGATION_TRACKBALL; + return true; + } else if (strcmp(name, "wheel") == 0) { + if (out) out->navigation = out->NAVIGATION_WHEEL; + return true; + } + + return false; +} + +bool AaptGroupEntry::getScreenSizeName(const char* name, ResTable_config* out) +{ + if (strcmp(name, kWildcardName) == 0) { + if (out) { + out->screenWidth = out->SCREENWIDTH_ANY; + out->screenHeight = out->SCREENHEIGHT_ANY; + } + return true; + } + + const char* x = name; + while (*x >= '0' && *x <= '9') x++; + if (x == name || *x != 'x') return false; + String8 xName(name, x-name); + x++; + + const char* y = x; + while (*y >= '0' && *y <= '9') y++; + if (y == name || *y != 0) return false; + String8 yName(x, y-x); + + uint16_t w = (uint16_t)atoi(xName.string()); + uint16_t h = (uint16_t)atoi(yName.string()); + if (w < h) { + return false; + } + + if (out) { + out->screenWidth = w; + out->screenHeight = h; + } + + return true; +} + +bool AaptGroupEntry::getSmallestScreenWidthDpName(const char* name, ResTable_config* out) +{ + if (strcmp(name, kWildcardName) == 0) { + if (out) { + out->smallestScreenWidthDp = out->SCREENWIDTH_ANY; + } + return true; + } + + if (*name != 's') return false; + name++; + if (*name != 'w') return false; + name++; + const char* x = name; + while (*x >= '0' && *x <= '9') x++; + if (x == name || x[0] != 'd' || x[1] != 'p' || x[2] != 0) return false; + String8 xName(name, x-name); + + if (out) { + out->smallestScreenWidthDp = (uint16_t)atoi(xName.string()); + } + + return true; +} + +bool AaptGroupEntry::getScreenWidthDpName(const char* name, ResTable_config* out) +{ + if (strcmp(name, kWildcardName) == 0) { + if (out) { + out->screenWidthDp = out->SCREENWIDTH_ANY; + } + return true; + } + + if (*name != 'w') return false; + name++; + const char* x = name; + while (*x >= '0' && *x <= '9') x++; + if (x == name || x[0] != 'd' || x[1] != 'p' || x[2] != 0) return false; + String8 xName(name, x-name); + + if (out) { + out->screenWidthDp = (uint16_t)atoi(xName.string()); + } + + return true; +} + +bool AaptGroupEntry::getScreenHeightDpName(const char* name, ResTable_config* out) +{ + if (strcmp(name, kWildcardName) == 0) { + if (out) { + out->screenHeightDp = out->SCREENWIDTH_ANY; + } + return true; + } + + if (*name != 'h') return false; + name++; + const char* x = name; + while (*x >= '0' && *x <= '9') x++; + if (x == name || x[0] != 'd' || x[1] != 'p' || x[2] != 0) return false; + String8 xName(name, x-name); + + if (out) { + out->screenHeightDp = (uint16_t)atoi(xName.string()); + } + + return true; +} + +bool AaptGroupEntry::getVersionName(const char* name, ResTable_config* out) +{ + if (strcmp(name, kWildcardName) == 0) { + if (out) { + out->sdkVersion = out->SDKVERSION_ANY; + out->minorVersion = out->MINORVERSION_ANY; + } + return true; + } + + if (*name != 'v') { + return false; + } + + name++; + const char* s = name; + while (*s >= '0' && *s <= '9') s++; + if (s == name || *s != 0) return false; + String8 sdkName(name, s-name); + + if (out) { + out->sdkVersion = (uint16_t)atoi(sdkName.string()); + out->minorVersion = 0; + } + + return true; +} + +int AaptGroupEntry::compare(const AaptGroupEntry& o) const +{ + int v = mcc.compare(o.mcc); + if (v == 0) v = mnc.compare(o.mnc); + if (v == 0) v = locale.compare(o.locale); + if (v == 0) v = layoutDirection.compare(o.layoutDirection); + if (v == 0) v = vendor.compare(o.vendor); + if (v == 0) v = smallestScreenWidthDp.compare(o.smallestScreenWidthDp); + if (v == 0) v = screenWidthDp.compare(o.screenWidthDp); + if (v == 0) v = screenHeightDp.compare(o.screenHeightDp); + if (v == 0) v = screenLayoutSize.compare(o.screenLayoutSize); + if (v == 0) v = screenLayoutLong.compare(o.screenLayoutLong); + if (v == 0) v = orientation.compare(o.orientation); + if (v == 0) v = uiModeType.compare(o.uiModeType); + if (v == 0) v = uiModeNight.compare(o.uiModeNight); + if (v == 0) v = density.compare(o.density); + if (v == 0) v = touchscreen.compare(o.touchscreen); + if (v == 0) v = keysHidden.compare(o.keysHidden); + if (v == 0) v = keyboard.compare(o.keyboard); + if (v == 0) v = navHidden.compare(o.navHidden); + if (v == 0) v = navigation.compare(o.navigation); + if (v == 0) v = screenSize.compare(o.screenSize); + if (v == 0) v = version.compare(o.version); + return v; +} + +const ResTable_config& AaptGroupEntry::toParams() const +{ + if (!mParamsChanged) { + return mParams; + } + + mParamsChanged = false; + ResTable_config& params(mParams); + memset(¶ms, 0, sizeof(params)); + getMccName(mcc.string(), ¶ms); + getMncName(mnc.string(), ¶ms); + getLocaleName(locale.string(), ¶ms); + getLayoutDirectionName(layoutDirection.string(), ¶ms); + getSmallestScreenWidthDpName(smallestScreenWidthDp.string(), ¶ms); + getScreenWidthDpName(screenWidthDp.string(), ¶ms); + getScreenHeightDpName(screenHeightDp.string(), ¶ms); + getScreenLayoutSizeName(screenLayoutSize.string(), ¶ms); + getScreenLayoutLongName(screenLayoutLong.string(), ¶ms); + getOrientationName(orientation.string(), ¶ms); + getUiModeTypeName(uiModeType.string(), ¶ms); + getUiModeNightName(uiModeNight.string(), ¶ms); + getDensityName(density.string(), ¶ms); + getTouchscreenName(touchscreen.string(), ¶ms); + getKeysHiddenName(keysHidden.string(), ¶ms); + getKeyboardName(keyboard.string(), ¶ms); + getNavHiddenName(navHidden.string(), ¶ms); + getNavigationName(navigation.string(), ¶ms); + getScreenSizeName(screenSize.string(), ¶ms); + getVersionName(version.string(), ¶ms); + + // Fix up version number based on specified parameters. + int minSdk = 0; + if (params.smallestScreenWidthDp != ResTable_config::SCREENWIDTH_ANY + || params.screenWidthDp != ResTable_config::SCREENWIDTH_ANY + || params.screenHeightDp != ResTable_config::SCREENHEIGHT_ANY) { + minSdk = SDK_HONEYCOMB_MR2; + } else if ((params.uiMode&ResTable_config::MASK_UI_MODE_TYPE) + != ResTable_config::UI_MODE_TYPE_ANY + || (params.uiMode&ResTable_config::MASK_UI_MODE_NIGHT) + != ResTable_config::UI_MODE_NIGHT_ANY) { + minSdk = SDK_FROYO; + } else if ((params.screenLayout&ResTable_config::MASK_SCREENSIZE) + != ResTable_config::SCREENSIZE_ANY + || (params.screenLayout&ResTable_config::MASK_SCREENLONG) + != ResTable_config::SCREENLONG_ANY + || params.density != ResTable_config::DENSITY_DEFAULT) { + minSdk = SDK_DONUT; + } + + if (minSdk > params.sdkVersion) { + params.sdkVersion = minSdk; + } + + return params; +} + +// ========================================================================= +// ========================================================================= +// ========================================================================= + +void* AaptFile::editData(size_t size) +{ + if (size <= mBufferSize) { + mDataSize = size; + return mData; + } + size_t allocSize = (size*3)/2; + void* buf = realloc(mData, allocSize); + if (buf == NULL) { + return NULL; + } + mData = buf; + mDataSize = size; + mBufferSize = allocSize; + return buf; +} + +void* AaptFile::editData(size_t* outSize) +{ + if (outSize) { + *outSize = mDataSize; + } + return mData; +} + +void* AaptFile::padData(size_t wordSize) +{ + const size_t extra = mDataSize%wordSize; + if (extra == 0) { + return mData; + } + + size_t initial = mDataSize; + void* data = editData(initial+(wordSize-extra)); + if (data != NULL) { + memset(((uint8_t*)data) + initial, 0, wordSize-extra); + } + return data; +} + +status_t AaptFile::writeData(const void* data, size_t size) +{ + size_t end = mDataSize; + size_t total = size + end; + void* buf = editData(total); + if (buf == NULL) { + return UNKNOWN_ERROR; + } + memcpy(((char*)buf)+end, data, size); + return NO_ERROR; +} + +void AaptFile::clearData() +{ + if (mData != NULL) free(mData); + mData = NULL; + mDataSize = 0; + mBufferSize = 0; +} + +String8 AaptFile::getPrintableSource() const +{ + if (hasData()) { + String8 name(mGroupEntry.toDirName(String8())); + name.appendPath(mPath); + name.append(" #generated"); + return name; + } + return mSourceFile; +} + +// ========================================================================= +// ========================================================================= +// ========================================================================= + +status_t AaptGroup::addFile(const sp& file) +{ + if (mFiles.indexOfKey(file->getGroupEntry()) < 0) { + file->mPath = mPath; + mFiles.add(file->getGroupEntry(), file); + return NO_ERROR; + } + +#if 0 + printf("Error adding file %s: group %s already exists in leaf=%s path=%s\n", + file->getSourceFile().string(), + file->getGroupEntry().toDirName(String8()).string(), + mLeaf.string(), mPath.string()); +#endif + + SourcePos(file->getSourceFile(), -1).error("Duplicate file.\n%s: Original is here.", + getPrintableSource().string()); + return UNKNOWN_ERROR; +} + +void AaptGroup::removeFile(size_t index) +{ + mFiles.removeItemsAt(index); +} + +void AaptGroup::print(const String8& prefix) const +{ + printf("%s%s\n", prefix.string(), getPath().string()); + const size_t N=mFiles.size(); + size_t i; + for (i=0; i file = mFiles.valueAt(i); + const AaptGroupEntry& e = file->getGroupEntry(); + if (file->hasData()) { + printf("%s Gen: (%s) %d bytes\n", prefix.string(), e.toDirName(String8()).string(), + (int)file->getSize()); + } else { + printf("%s Src: (%s) %s\n", prefix.string(), e.toDirName(String8()).string(), + file->getPrintableSource().string()); + } + //printf("%s File Group Entry: %s\n", prefix.string(), + // file->getGroupEntry().toDirName(String8()).string()); + } +} + +String8 AaptGroup::getPrintableSource() const +{ + if (mFiles.size() > 0) { + // Arbitrarily pull the first source file out of the list. + return mFiles.valueAt(0)->getPrintableSource(); + } + + // Should never hit this case, but to be safe... + return getPath(); + +} + +// ========================================================================= +// ========================================================================= +// ========================================================================= + +status_t AaptDir::addFile(const String8& name, const sp& file) +{ + if (mFiles.indexOfKey(name) >= 0) { + return ALREADY_EXISTS; + } + mFiles.add(name, file); + return NO_ERROR; +} + +status_t AaptDir::addDir(const String8& name, const sp& dir) +{ + if (mDirs.indexOfKey(name) >= 0) { + return ALREADY_EXISTS; + } + mDirs.add(name, dir); + return NO_ERROR; +} + +sp AaptDir::makeDir(const String8& path) +{ + String8 name; + String8 remain = path; + + sp subdir = this; + while (name = remain.walkPath(&remain), remain != "") { + subdir = subdir->makeDir(name); + } + + ssize_t i = subdir->mDirs.indexOfKey(name); + if (i >= 0) { + return subdir->mDirs.valueAt(i); + } + sp dir = new AaptDir(name, subdir->mPath.appendPathCopy(name)); + subdir->mDirs.add(name, dir); + return dir; +} + +void AaptDir::removeFile(const String8& name) +{ + mFiles.removeItem(name); +} + +void AaptDir::removeDir(const String8& name) +{ + mDirs.removeItem(name); +} + +status_t AaptDir::addLeafFile(const String8& leafName, const sp& file) +{ + sp group; + if (mFiles.indexOfKey(leafName) >= 0) { + group = mFiles.valueFor(leafName); + } else { + group = new AaptGroup(leafName, mPath.appendPathCopy(leafName)); + mFiles.add(leafName, group); + } + + return group->addFile(file); +} + +ssize_t AaptDir::slurpFullTree(Bundle* bundle, const String8& srcDir, + const AaptGroupEntry& kind, const String8& resType, + sp& fullResPaths) +{ + Vector fileNames; + { + DIR* dir = NULL; + + dir = opendir(srcDir.string()); + if (dir == NULL) { + fprintf(stderr, "ERROR: opendir(%s): %s\n", srcDir.string(), strerror(errno)); + return UNKNOWN_ERROR; + } + + /* + * Slurp the filenames out of the directory. + */ + while (1) { + struct dirent* entry; + + entry = readdir(dir); + if (entry == NULL) + break; + + if (isHidden(srcDir.string(), entry->d_name)) + continue; + + String8 name(entry->d_name); + fileNames.add(name); + // Add fully qualified path for dependency purposes + // if we're collecting them + if (fullResPaths != NULL) { + fullResPaths->add(srcDir.appendPathCopy(name)); + } + } + closedir(dir); + } + + ssize_t count = 0; + + /* + * Stash away the files and recursively descend into subdirectories. + */ + const size_t N = fileNames.size(); + size_t i; + for (i = 0; i < N; i++) { + String8 pathName(srcDir); + FileType type; + + pathName.appendPath(fileNames[i].string()); + type = getFileType(pathName.string()); + if (type == kFileTypeDirectory) { + sp subdir; + bool notAdded = false; + if (mDirs.indexOfKey(fileNames[i]) >= 0) { + subdir = mDirs.valueFor(fileNames[i]); + } else { + subdir = new AaptDir(fileNames[i], mPath.appendPathCopy(fileNames[i])); + notAdded = true; + } + ssize_t res = subdir->slurpFullTree(bundle, pathName, kind, + resType, fullResPaths); + if (res < NO_ERROR) { + return res; + } + if (res > 0 && notAdded) { + mDirs.add(fileNames[i], subdir); + } + count += res; + } else if (type == kFileTypeRegular) { + sp file = new AaptFile(pathName, kind, resType); + status_t err = addLeafFile(fileNames[i], file); + if (err != NO_ERROR) { + return err; + } + + count++; + + } else { + if (bundle->getVerbose()) + printf(" (ignoring non-file/dir '%s')\n", pathName.string()); + } + } + + return count; +} + +status_t AaptDir::validate() const +{ + const size_t NF = mFiles.size(); + const size_t ND = mDirs.size(); + size_t i; + for (i = 0; i < NF; i++) { + if (!validateFileName(mFiles.valueAt(i)->getLeaf().string())) { + SourcePos(mFiles.valueAt(i)->getPrintableSource(), -1).error( + "Invalid filename. Unable to add."); + return UNKNOWN_ERROR; + } + + size_t j; + for (j = i+1; j < NF; j++) { + if (strcasecmp(mFiles.valueAt(i)->getLeaf().string(), + mFiles.valueAt(j)->getLeaf().string()) == 0) { + SourcePos(mFiles.valueAt(i)->getPrintableSource(), -1).error( + "File is case-insensitive equivalent to: %s", + mFiles.valueAt(j)->getPrintableSource().string()); + return UNKNOWN_ERROR; + } + + // TODO: if ".gz", check for non-.gz; if non-, check for ".gz" + // (this is mostly caught by the "marked" stuff, below) + } + + for (j = 0; j < ND; j++) { + if (strcasecmp(mFiles.valueAt(i)->getLeaf().string(), + mDirs.valueAt(j)->getLeaf().string()) == 0) { + SourcePos(mFiles.valueAt(i)->getPrintableSource(), -1).error( + "File conflicts with dir from: %s", + mDirs.valueAt(j)->getPrintableSource().string()); + return UNKNOWN_ERROR; + } + } + } + + for (i = 0; i < ND; i++) { + if (!validateFileName(mDirs.valueAt(i)->getLeaf().string())) { + SourcePos(mDirs.valueAt(i)->getPrintableSource(), -1).error( + "Invalid directory name, unable to add."); + return UNKNOWN_ERROR; + } + + size_t j; + for (j = i+1; j < ND; j++) { + if (strcasecmp(mDirs.valueAt(i)->getLeaf().string(), + mDirs.valueAt(j)->getLeaf().string()) == 0) { + SourcePos(mDirs.valueAt(i)->getPrintableSource(), -1).error( + "Directory is case-insensitive equivalent to: %s", + mDirs.valueAt(j)->getPrintableSource().string()); + return UNKNOWN_ERROR; + } + } + + status_t err = mDirs.valueAt(i)->validate(); + if (err != NO_ERROR) { + return err; + } + } + + return NO_ERROR; +} + +void AaptDir::print(const String8& prefix) const +{ + const size_t ND=getDirs().size(); + size_t i; + for (i=0; iprint(prefix); + } + + const size_t NF=getFiles().size(); + for (i=0; iprint(prefix); + } +} + +String8 AaptDir::getPrintableSource() const +{ + if (mFiles.size() > 0) { + // Arbitrarily pull the first file out of the list as the source dir. + return mFiles.valueAt(0)->getPrintableSource().getPathDir(); + } + if (mDirs.size() > 0) { + // Or arbitrarily pull the first dir out of the list as the source dir. + return mDirs.valueAt(0)->getPrintableSource().getPathDir(); + } + + // Should never hit this case, but to be safe... + return mPath; + +} + +// ========================================================================= +// ========================================================================= +// ========================================================================= + +status_t AaptSymbols::applyJavaSymbols(const sp& javaSymbols) +{ + status_t err = NO_ERROR; + size_t N = javaSymbols->mSymbols.size(); + for (size_t i=0; imSymbols.keyAt(i); + const AaptSymbolEntry& entry = javaSymbols->mSymbols.valueAt(i); + ssize_t pos = mSymbols.indexOfKey(name); + if (pos < 0) { + entry.sourcePos.error("Symbol '%s' declared with not defined\n", name.string()); + err = UNKNOWN_ERROR; + continue; + } + //printf("**** setting symbol #%d/%d %s to isJavaSymbol=%d\n", + // i, N, name.string(), entry.isJavaSymbol ? 1 : 0); + mSymbols.editValueAt(pos).isJavaSymbol = entry.isJavaSymbol; + } + + N = javaSymbols->mNestedSymbols.size(); + for (size_t i=0; imNestedSymbols.keyAt(i); + const sp& symbols = javaSymbols->mNestedSymbols.valueAt(i); + ssize_t pos = mNestedSymbols.indexOfKey(name); + if (pos < 0) { + SourcePos pos; + pos.error("Java symbol dir %s not defined\n", name.string()); + err = UNKNOWN_ERROR; + continue; + } + //printf("**** applying java symbols in dir %s\n", name.string()); + status_t myerr = mNestedSymbols.valueAt(pos)->applyJavaSymbols(symbols); + if (myerr != NO_ERROR) { + err = myerr; + } + } + + return err; +} + +// ========================================================================= +// ========================================================================= +// ========================================================================= + +AaptAssets::AaptAssets() + : AaptDir(String8(), String8()), + mChanged(false), mHaveIncludedAssets(false), mRes(NULL) +{ +} + +const SortedVector& AaptAssets::getGroupEntries() const { + if (mChanged) { + } + return mGroupEntries; +} + +status_t AaptAssets::addFile(const String8& name, const sp& file) +{ + mChanged = true; + return AaptDir::addFile(name, file); +} + +sp AaptAssets::addFile( + const String8& filePath, const AaptGroupEntry& entry, + const String8& srcDir, sp* outGroup, + const String8& resType) +{ + sp dir = this; + sp group; + sp file; + String8 root, remain(filePath), partialPath; + while (remain.length() > 0) { + root = remain.walkPath(&remain); + partialPath.appendPath(root); + + const String8 rootStr(root); + + if (remain.length() == 0) { + ssize_t i = dir->getFiles().indexOfKey(rootStr); + if (i >= 0) { + group = dir->getFiles().valueAt(i); + } else { + group = new AaptGroup(rootStr, filePath); + status_t res = dir->addFile(rootStr, group); + if (res != NO_ERROR) { + return NULL; + } + } + file = new AaptFile(srcDir.appendPathCopy(filePath), entry, resType); + status_t res = group->addFile(file); + if (res != NO_ERROR) { + return NULL; + } + break; + + } else { + ssize_t i = dir->getDirs().indexOfKey(rootStr); + if (i >= 0) { + dir = dir->getDirs().valueAt(i); + } else { + sp subdir = new AaptDir(rootStr, partialPath); + status_t res = dir->addDir(rootStr, subdir); + if (res != NO_ERROR) { + return NULL; + } + dir = subdir; + } + } + } + + mGroupEntries.add(entry); + if (outGroup) *outGroup = group; + return file; +} + +void AaptAssets::addResource(const String8& leafName, const String8& path, + const sp& file, const String8& resType) +{ + sp res = AaptDir::makeDir(kResString); + String8 dirname = file->getGroupEntry().toDirName(resType); + sp subdir = res->makeDir(dirname); + sp grr = new AaptGroup(leafName, path); + grr->addFile(file); + + subdir->addFile(leafName, grr); +} + + +ssize_t AaptAssets::slurpFromArgs(Bundle* bundle) +{ + int count; + int totalCount = 0; + FileType type; + const Vector& resDirs = bundle->getResourceSourceDirs(); + const size_t dirCount =resDirs.size(); + sp current = this; + + const int N = bundle->getFileSpecCount(); + + /* + * If a package manifest was specified, include that first. + */ + if (bundle->getAndroidManifestFile() != NULL) { + // place at root of zip. + String8 srcFile(bundle->getAndroidManifestFile()); + addFile(srcFile.getPathLeaf(), AaptGroupEntry(), srcFile.getPathDir(), + NULL, String8()); + totalCount++; + } + + /* + * If a directory of custom assets was supplied, slurp 'em up. + */ + if (bundle->getAssetSourceDir()) { + const char* assetDir = bundle->getAssetSourceDir(); + + FileType type = getFileType(assetDir); + if (type == kFileTypeNonexistent) { + fprintf(stderr, "ERROR: asset directory '%s' does not exist\n", assetDir); + return UNKNOWN_ERROR; + } + if (type != kFileTypeDirectory) { + fprintf(stderr, "ERROR: '%s' is not a directory\n", assetDir); + return UNKNOWN_ERROR; + } + + String8 assetRoot(assetDir); + sp assetAaptDir = makeDir(String8(kAssetDir)); + AaptGroupEntry group; + count = assetAaptDir->slurpFullTree(bundle, assetRoot, group, + String8(), mFullAssetPaths); + if (count < 0) { + totalCount = count; + goto bail; + } + if (count > 0) { + mGroupEntries.add(group); + } + totalCount += count; + + if (bundle->getVerbose()) + printf("Found %d custom asset file%s in %s\n", + count, (count==1) ? "" : "s", assetDir); + } + + /* + * If a directory of resource-specific assets was supplied, slurp 'em up. + */ + for (size_t i=0; i0) { + sp nextOverlay = new AaptAssets(); + current->setOverlay(nextOverlay); + current = nextOverlay; + current->setFullResPaths(mFullResPaths); + } + count = current->slurpResourceTree(bundle, String8(res)); + + if (count < 0) { + totalCount = count; + goto bail; + } + totalCount += count; + } + else { + fprintf(stderr, "ERROR: '%s' is not a directory\n", res); + return UNKNOWN_ERROR; + } + } + + } + /* + * Now do any additional raw files. + */ + for (int arg=0; arggetFileSpecEntry(arg); + + FileType type = getFileType(assetDir); + if (type == kFileTypeNonexistent) { + fprintf(stderr, "ERROR: input directory '%s' does not exist\n", assetDir); + return UNKNOWN_ERROR; + } + if (type != kFileTypeDirectory) { + fprintf(stderr, "ERROR: '%s' is not a directory\n", assetDir); + return UNKNOWN_ERROR; + } + + String8 assetRoot(assetDir); + + if (bundle->getVerbose()) + printf("Processing raw dir '%s'\n", (const char*) assetDir); + + /* + * Do a recursive traversal of subdir tree. We don't make any + * guarantees about ordering, so we're okay with an inorder search + * using whatever order the OS happens to hand back to us. + */ + count = slurpFullTree(bundle, assetRoot, AaptGroupEntry(), String8(), mFullAssetPaths); + if (count < 0) { + /* failure; report error and remove archive */ + totalCount = count; + goto bail; + } + totalCount += count; + + if (bundle->getVerbose()) + printf("Found %d asset file%s in %s\n", + count, (count==1) ? "" : "s", assetDir); + } + + count = validate(); + if (count != NO_ERROR) { + totalCount = count; + goto bail; + } + + count = filter(bundle); + if (count != NO_ERROR) { + totalCount = count; + goto bail; + } + +bail: + return totalCount; +} + +ssize_t AaptAssets::slurpFullTree(Bundle* bundle, const String8& srcDir, + const AaptGroupEntry& kind, + const String8& resType, + sp& fullResPaths) +{ + ssize_t res = AaptDir::slurpFullTree(bundle, srcDir, kind, resType, fullResPaths); + if (res > 0) { + mGroupEntries.add(kind); + } + + return res; +} + +ssize_t AaptAssets::slurpResourceTree(Bundle* bundle, const String8& srcDir) +{ + ssize_t err = 0; + + DIR* dir = opendir(srcDir.string()); + if (dir == NULL) { + fprintf(stderr, "ERROR: opendir(%s): %s\n", srcDir.string(), strerror(errno)); + return UNKNOWN_ERROR; + } + + status_t count = 0; + + /* + * Run through the directory, looking for dirs that match the + * expected pattern. + */ + while (1) { + struct dirent* entry = readdir(dir); + if (entry == NULL) { + break; + } + + if (isHidden(srcDir.string(), entry->d_name)) { + continue; + } + + String8 subdirName(srcDir); + subdirName.appendPath(entry->d_name); + + AaptGroupEntry group; + String8 resType; + bool b = group.initFromDirName(entry->d_name, &resType); + if (!b) { + fprintf(stderr, "invalid resource directory name: %s/%s\n", srcDir.string(), + entry->d_name); + err = -1; + continue; + } + + if (bundle->getMaxResVersion() != NULL && group.getVersionString().length() != 0) { + int maxResInt = atoi(bundle->getMaxResVersion()); + const char *verString = group.getVersionString().string(); + int dirVersionInt = atoi(verString + 1); // skip 'v' in version name + if (dirVersionInt > maxResInt) { + fprintf(stderr, "max res %d, skipping %s\n", maxResInt, entry->d_name); + continue; + } + } + + FileType type = getFileType(subdirName.string()); + + if (type == kFileTypeDirectory) { + sp dir = makeDir(resType); + ssize_t res = dir->slurpFullTree(bundle, subdirName, group, + resType, mFullResPaths); + if (res < 0) { + count = res; + goto bail; + } + if (res > 0) { + mGroupEntries.add(group); + count += res; + } + + // Only add this directory if we don't already have a resource dir + // for the current type. This ensures that we only add the dir once + // for all configs. + sp rdir = resDir(resType); + if (rdir == NULL) { + mResDirs.add(dir); + } + } else { + if (bundle->getVerbose()) { + fprintf(stderr, " (ignoring file '%s')\n", subdirName.string()); + } + } + } + +bail: + closedir(dir); + dir = NULL; + + if (err != 0) { + return err; + } + return count; +} + +ssize_t +AaptAssets::slurpResourceZip(Bundle* bundle, const char* filename) +{ + int count = 0; + SortedVector entries; + + ZipFile* zip = new ZipFile; + status_t err = zip->open(filename, ZipFile::kOpenReadOnly); + if (err != NO_ERROR) { + fprintf(stderr, "error opening zip file %s\n", filename); + count = err; + delete zip; + return -1; + } + + const int N = zip->getNumEntries(); + for (int i=0; igetEntryByIndex(i); + if (entry->getDeleted()) { + continue; + } + + String8 entryName(entry->getFileName()); + + String8 dirName = entryName.getPathDir(); + sp dir = dirName == "" ? this : makeDir(dirName); + + String8 resType; + AaptGroupEntry kind; + + String8 remain; + if (entryName.walkPath(&remain) == kResourceDir) { + // these are the resources, pull their type out of the directory name + kind.initFromDirName(remain.walkPath().string(), &resType); + } else { + // these are untyped and don't have an AaptGroupEntry + } + if (entries.indexOf(kind) < 0) { + entries.add(kind); + mGroupEntries.add(kind); + } + + // use the one from the zip file if they both exist. + dir->removeFile(entryName.getPathLeaf()); + + sp file = new AaptFile(entryName, kind, resType); + status_t err = dir->addLeafFile(entryName.getPathLeaf(), file); + if (err != NO_ERROR) { + fprintf(stderr, "err=%s entryName=%s\n", strerror(err), entryName.string()); + count = err; + goto bail; + } + file->setCompressionMethod(entry->getCompressionMethod()); + +#if 0 + if (entryName == "AndroidManifest.xml") { + printf("AndroidManifest.xml\n"); + } + printf("\n\nfile: %s\n", entryName.string()); +#endif + + size_t len = entry->getUncompressedLen(); + void* data = zip->uncompress(entry); + void* buf = file->editData(len); + memcpy(buf, data, len); + +#if 0 + const int OFF = 0; + const unsigned char* p = (unsigned char*)data; + const unsigned char* end = p+len; + p += OFF; + for (int i=0; i<32 && p < end; i++) { + printf("0x%03x ", i*0x10 + OFF); + for (int j=0; j<0x10 && p < end; j++) { + printf(" %02x", *p); + p++; + } + printf("\n"); + } +#endif + + free(data); + + count++; + } + +bail: + delete zip; + return count; +} + +status_t AaptAssets::filter(Bundle* bundle) +{ + ResourceFilter reqFilter; + status_t err = reqFilter.parse(bundle->getConfigurations()); + if (err != NO_ERROR) { + return err; + } + + ResourceFilter prefFilter; + err = prefFilter.parse(bundle->getPreferredConfigurations()); + if (err != NO_ERROR) { + return err; + } + + if (reqFilter.isEmpty() && prefFilter.isEmpty()) { + return NO_ERROR; + } + + if (bundle->getVerbose()) { + if (!reqFilter.isEmpty()) { + printf("Applying required filter: %s\n", + bundle->getConfigurations()); + } + if (!prefFilter.isEmpty()) { + printf("Applying preferred filter: %s\n", + bundle->getPreferredConfigurations()); + } + } + + const Vector >& resdirs = mResDirs; + const size_t ND = resdirs.size(); + for (size_t i=0; i& dir = resdirs.itemAt(i); + if (dir->getLeaf() == kValuesDir) { + // The "value" dir is special since a single file defines + // multiple resources, so we can not do filtering on the + // files themselves. + continue; + } + if (dir->getLeaf() == kMipmapDir) { + // We also skip the "mipmap" directory, since the point of this + // is to include all densities without stripping. If you put + // other configurations in here as well they won't be stripped + // either... So don't do that. Seriously. What is wrong with you? + continue; + } + + const size_t NG = dir->getFiles().size(); + for (size_t j=0; j grp = dir->getFiles().valueAt(j); + + // First remove any configurations we know we don't need. + for (size_t k=0; kgetFiles().size(); k++) { + sp file = grp->getFiles().valueAt(k); + if (k == 0 && grp->getFiles().size() == 1) { + // If this is the only file left, we need to keep it. + // Otherwise the resource IDs we are using will be inconsistent + // with what we get when not stripping. Sucky, but at least + // for now we can rely on the back-end doing another filtering + // pass to take this out and leave us with this resource name + // containing no entries. + continue; + } + if (file->getPath().getPathExtension() == ".xml") { + // We can't remove .xml files at this point, because when + // we parse them they may add identifier resources, so + // removing them can cause our resource identifiers to + // become inconsistent. + continue; + } + const ResTable_config& config(file->getGroupEntry().toParams()); + if (!reqFilter.match(config)) { + if (bundle->getVerbose()) { + printf("Pruning unneeded resource: %s\n", + file->getPrintableSource().string()); + } + grp->removeFile(k); + k--; + } + } + + // Quick check: no preferred filters, nothing more to do. + if (prefFilter.isEmpty()) { + continue; + } + + // Now deal with preferred configurations. + for (int axis=AXIS_START; axis<=AXIS_END; axis++) { + for (size_t k=0; kgetFiles().size(); k++) { + sp file = grp->getFiles().valueAt(k); + if (k == 0 && grp->getFiles().size() == 1) { + // If this is the only file left, we need to keep it. + // Otherwise the resource IDs we are using will be inconsistent + // with what we get when not stripping. Sucky, but at least + // for now we can rely on the back-end doing another filtering + // pass to take this out and leave us with this resource name + // containing no entries. + continue; + } + if (file->getPath().getPathExtension() == ".xml") { + // We can't remove .xml files at this point, because when + // we parse them they may add identifier resources, so + // removing them can cause our resource identifiers to + // become inconsistent. + continue; + } + const ResTable_config& config(file->getGroupEntry().toParams()); + if (!prefFilter.match(axis, config)) { + // This is a resource we would prefer not to have. Check + // to see if have a similar variation that we would like + // to have and, if so, we can drop it. + for (size_t m=0; mgetFiles().size(); m++) { + if (m == k) continue; + sp mfile = grp->getFiles().valueAt(m); + const ResTable_config& mconfig(mfile->getGroupEntry().toParams()); + if (AaptGroupEntry::configSameExcept(config, mconfig, axis)) { + if (prefFilter.match(axis, mconfig)) { + if (bundle->getVerbose()) { + printf("Pruning unneeded resource: %s\n", + file->getPrintableSource().string()); + } + grp->removeFile(k); + k--; + break; + } + } + } + } + } + } + } + } + + return NO_ERROR; +} + +sp AaptAssets::getSymbolsFor(const String8& name) +{ + sp sym = mSymbols.valueFor(name); + if (sym == NULL) { + sym = new AaptSymbols(); + mSymbols.add(name, sym); + } + return sym; +} + +sp AaptAssets::getJavaSymbolsFor(const String8& name) +{ + sp sym = mJavaSymbols.valueFor(name); + if (sym == NULL) { + sym = new AaptSymbols(); + mJavaSymbols.add(name, sym); + } + return sym; +} + +status_t AaptAssets::applyJavaSymbols() +{ + size_t N = mJavaSymbols.size(); + for (size_t i=0; i& symbols = mJavaSymbols.valueAt(i); + ssize_t pos = mSymbols.indexOfKey(name); + if (pos < 0) { + SourcePos pos; + pos.error("Java symbol dir %s not defined\n", name.string()); + return UNKNOWN_ERROR; + } + //printf("**** applying java symbols in dir %s\n", name.string()); + status_t err = mSymbols.valueAt(pos)->applyJavaSymbols(symbols); + if (err != NO_ERROR) { + return err; + } + } + + return NO_ERROR; +} + +bool AaptAssets::isJavaSymbol(const AaptSymbolEntry& sym, bool includePrivate) const { + //printf("isJavaSymbol %s: public=%d, includePrivate=%d, isJavaSymbol=%d\n", + // sym.name.string(), sym.isPublic ? 1 : 0, includePrivate ? 1 : 0, + // sym.isJavaSymbol ? 1 : 0); + if (!mHavePrivateSymbols) return true; + if (sym.isPublic) return true; + if (includePrivate && sym.isJavaSymbol) return true; + return false; +} + +status_t AaptAssets::buildIncludedResources(Bundle* bundle) +{ + if (!mHaveIncludedAssets) { + // Add in all includes. + const Vector& incl = bundle->getPackageIncludes(); + const size_t N=incl.size(); + for (size_t i=0; igetVerbose()) + printf("Including resources from package: %s\n", incl[i]); + if (!mIncludedAssets.addAssetPath(String8(incl[i]), NULL)) { + fprintf(stderr, "ERROR: Asset package include '%s' not found.\n", + incl[i]); + return UNKNOWN_ERROR; + } + } + mHaveIncludedAssets = true; + } + + return NO_ERROR; +} + +status_t AaptAssets::addIncludedResources(const sp& file) +{ + const ResTable& res = getIncludedResources(); + // XXX dirty! + return const_cast(res).add(file->getData(), file->getSize(), NULL); +} + +const ResTable& AaptAssets::getIncludedResources() const +{ + return mIncludedAssets.getResources(false); +} + +void AaptAssets::print(const String8& prefix) const +{ + String8 innerPrefix(prefix); + innerPrefix.append(" "); + String8 innerInnerPrefix(innerPrefix); + innerInnerPrefix.append(" "); + printf("%sConfigurations:\n", prefix.string()); + const size_t N=mGroupEntries.size(); + for (size_t i=0; i >& resdirs = mResDirs; + const size_t NR = resdirs.size(); + for (size_t i=0; i& d = resdirs.itemAt(i); + printf("%s Type %s\n", prefix.string(), d->getLeaf().string()); + d->print(innerInnerPrefix); + } +} + +sp AaptAssets::resDir(const String8& name) const +{ + const Vector >& resdirs = mResDirs; + const size_t N = resdirs.size(); + for (size_t i=0; i& d = resdirs.itemAt(i); + if (d->getLeaf() == name) { + return d; + } + } + return NULL; +} + +bool +valid_symbol_name(const String8& symbol) +{ + static char const * const KEYWORDS[] = { + "abstract", "assert", "boolean", "break", + "byte", "case", "catch", "char", "class", "const", "continue", + "default", "do", "double", "else", "enum", "extends", "final", + "finally", "float", "for", "goto", "if", "implements", "import", + "instanceof", "int", "interface", "long", "native", "new", "package", + "private", "protected", "public", "return", "short", "static", + "strictfp", "super", "switch", "synchronized", "this", "throw", + "throws", "transient", "try", "void", "volatile", "while", + "true", "false", "null", + NULL + }; + const char*const* k = KEYWORDS; + const char*const s = symbol.string(); + while (*k) { + if (0 == strcmp(s, *k)) { + return false; + } + k++; + } + return true; +} diff --git a/tools/aapt/AaptAssets.h b/tools/aapt/AaptAssets.h new file mode 100644 index 0000000000000..5cfa913500639 --- /dev/null +++ b/tools/aapt/AaptAssets.h @@ -0,0 +1,633 @@ +// +// Copyright 2006 The Android Open Source Project +// +// Information about assets being operated on. +// +#ifndef __AAPT_ASSETS_H +#define __AAPT_ASSETS_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "ZipFile.h" + +#include "Bundle.h" +#include "SourcePos.h" + +using namespace android; + + +extern const char * const gDefaultIgnoreAssets; +extern const char * gUserIgnoreAssets; + +bool valid_symbol_name(const String8& str); + +class AaptAssets; + +enum { + AXIS_NONE = 0, + AXIS_MCC = 1, + AXIS_MNC, + AXIS_LANGUAGE, + AXIS_REGION, + AXIS_SCREENLAYOUTSIZE, + AXIS_SCREENLAYOUTLONG, + AXIS_ORIENTATION, + AXIS_UIMODETYPE, + AXIS_UIMODENIGHT, + AXIS_DENSITY, + AXIS_TOUCHSCREEN, + AXIS_KEYSHIDDEN, + AXIS_KEYBOARD, + AXIS_NAVHIDDEN, + AXIS_NAVIGATION, + AXIS_SCREENSIZE, + AXIS_SMALLESTSCREENWIDTHDP, + AXIS_SCREENWIDTHDP, + AXIS_SCREENHEIGHTDP, + AXIS_LAYOUTDIR, + AXIS_VERSION, + + AXIS_START = AXIS_MCC, + AXIS_END = AXIS_VERSION, +}; + +/** + * This structure contains a specific variation of a single file out + * of all the variations it can have that we can have. + */ +struct AaptGroupEntry +{ +public: + AaptGroupEntry() : mParamsChanged(true) { } + AaptGroupEntry(const String8& _locale, const String8& _vendor) + : locale(_locale), vendor(_vendor), mParamsChanged(true) { } + + bool initFromDirName(const char* dir, String8* resType); + + static status_t parseNamePart(const String8& part, int* axis, uint32_t* value); + + static uint32_t getConfigValueForAxis(const ResTable_config& config, int axis); + + static bool configSameExcept(const ResTable_config& config, + const ResTable_config& otherConfig, int axis); + + static bool getMccName(const char* name, ResTable_config* out = NULL); + static bool getMncName(const char* name, ResTable_config* out = NULL); + static bool getLocaleName(const char* name, ResTable_config* out = NULL); + static bool getScreenLayoutSizeName(const char* name, ResTable_config* out = NULL); + static bool getScreenLayoutLongName(const char* name, ResTable_config* out = NULL); + static bool getOrientationName(const char* name, ResTable_config* out = NULL); + static bool getUiModeTypeName(const char* name, ResTable_config* out = NULL); + static bool getUiModeNightName(const char* name, ResTable_config* out = NULL); + static bool getDensityName(const char* name, ResTable_config* out = NULL); + static bool getTouchscreenName(const char* name, ResTable_config* out = NULL); + static bool getKeysHiddenName(const char* name, ResTable_config* out = NULL); + static bool getKeyboardName(const char* name, ResTable_config* out = NULL); + static bool getNavigationName(const char* name, ResTable_config* out = NULL); + static bool getNavHiddenName(const char* name, ResTable_config* out = NULL); + static bool getScreenSizeName(const char* name, ResTable_config* out = NULL); + static bool getSmallestScreenWidthDpName(const char* name, ResTable_config* out = NULL); + static bool getScreenWidthDpName(const char* name, ResTable_config* out = NULL); + static bool getScreenHeightDpName(const char* name, ResTable_config* out = NULL); + static bool getLayoutDirectionName(const char* name, ResTable_config* out = NULL); + static bool getVersionName(const char* name, ResTable_config* out = NULL); + + int compare(const AaptGroupEntry& o) const; + + const ResTable_config& toParams() const; + + inline bool operator<(const AaptGroupEntry& o) const { return compare(o) < 0; } + inline bool operator<=(const AaptGroupEntry& o) const { return compare(o) <= 0; } + inline bool operator==(const AaptGroupEntry& o) const { return compare(o) == 0; } + inline bool operator!=(const AaptGroupEntry& o) const { return compare(o) != 0; } + inline bool operator>=(const AaptGroupEntry& o) const { return compare(o) >= 0; } + inline bool operator>(const AaptGroupEntry& o) const { return compare(o) > 0; } + + String8 toString() const; + String8 toDirName(const String8& resType) const; + + const String8& getVersionString() const { return version; } + +private: + String8 mcc; + String8 mnc; + String8 locale; + String8 vendor; + String8 smallestScreenWidthDp; + String8 screenWidthDp; + String8 screenHeightDp; + String8 screenLayoutSize; + String8 screenLayoutLong; + String8 orientation; + String8 uiModeType; + String8 uiModeNight; + String8 density; + String8 touchscreen; + String8 keysHidden; + String8 keyboard; + String8 navHidden; + String8 navigation; + String8 screenSize; + String8 layoutDirection; + String8 version; + + mutable bool mParamsChanged; + mutable ResTable_config mParams; +}; + +inline int compare_type(const AaptGroupEntry& lhs, const AaptGroupEntry& rhs) +{ + return lhs.compare(rhs); +} + +inline int strictly_order_type(const AaptGroupEntry& lhs, const AaptGroupEntry& rhs) +{ + return compare_type(lhs, rhs) < 0; +} + +class AaptGroup; +class FilePathStore; + +/** + * A single asset file we know about. + */ +class AaptFile : public RefBase +{ +public: + AaptFile(const String8& sourceFile, const AaptGroupEntry& groupEntry, + const String8& resType) + : mGroupEntry(groupEntry) + , mResourceType(resType) + , mSourceFile(sourceFile) + , mData(NULL) + , mDataSize(0) + , mBufferSize(0) + , mCompression(ZipEntry::kCompressStored) + { + //printf("new AaptFile created %s\n", (const char*)sourceFile); + } + virtual ~AaptFile() { + free(mData); + } + + const String8& getPath() const { return mPath; } + const AaptGroupEntry& getGroupEntry() const { return mGroupEntry; } + + // Data API. If there is data attached to the file, + // getSourceFile() is not used. + bool hasData() const { return mData != NULL; } + const void* getData() const { return mData; } + size_t getSize() const { return mDataSize; } + void* editData(size_t size); + void* editData(size_t* outSize = NULL); + void* padData(size_t wordSize); + status_t writeData(const void* data, size_t size); + void clearData(); + + const String8& getResourceType() const { return mResourceType; } + + // File API. If the file does not hold raw data, this is + // a full path to a file on the filesystem that holds its data. + const String8& getSourceFile() const { return mSourceFile; } + + String8 getPrintableSource() const; + + // Desired compression method, as per utils/ZipEntry.h. For example, + // no compression is ZipEntry::kCompressStored. + int getCompressionMethod() const { return mCompression; } + void setCompressionMethod(int c) { mCompression = c; } +private: + friend class AaptGroup; + + String8 mPath; + AaptGroupEntry mGroupEntry; + String8 mResourceType; + String8 mSourceFile; + void* mData; + size_t mDataSize; + size_t mBufferSize; + int mCompression; +}; + +/** + * A group of related files (the same file, with different + * vendor/locale variations). + */ +class AaptGroup : public RefBase +{ +public: + AaptGroup(const String8& leaf, const String8& path) + : mLeaf(leaf), mPath(path) { } + virtual ~AaptGroup() { } + + const String8& getLeaf() const { return mLeaf; } + + // Returns the relative path after the AaptGroupEntry dirs. + const String8& getPath() const { return mPath; } + + const DefaultKeyedVector >& getFiles() const + { return mFiles; } + + status_t addFile(const sp& file); + void removeFile(size_t index); + + void print(const String8& prefix) const; + + String8 getPrintableSource() const; + +private: + String8 mLeaf; + String8 mPath; + + DefaultKeyedVector > mFiles; +}; + +/** + * A single directory of assets, which can contain files and other + * sub-directories. + */ +class AaptDir : public RefBase +{ +public: + AaptDir(const String8& leaf, const String8& path) + : mLeaf(leaf), mPath(path) { } + virtual ~AaptDir() { } + + const String8& getLeaf() const { return mLeaf; } + + const String8& getPath() const { return mPath; } + + const DefaultKeyedVector >& getFiles() const { return mFiles; } + const DefaultKeyedVector >& getDirs() const { return mDirs; } + + virtual status_t addFile(const String8& name, const sp& file); + + void removeFile(const String8& name); + void removeDir(const String8& name); + + /* + * Perform some sanity checks on the names of files and directories here. + * In particular: + * - Check for illegal chars in filenames. + * - Check filename length. + * - Check for presence of ".gz" and non-".gz" copies of same file. + * - Check for multiple files whose names match in a case-insensitive + * fashion (problematic for some systems). + * + * Comparing names against all other names is O(n^2). We could speed + * it up some by sorting the entries and being smarter about what we + * compare against, but I'm not expecting to have enough files in a + * single directory to make a noticeable difference in speed. + * + * Note that sorting here is not enough to guarantee that the package + * contents are sorted -- subsequent updates can rearrange things. + */ + status_t validate() const; + + void print(const String8& prefix) const; + + String8 getPrintableSource() const; + +private: + friend class AaptAssets; + + status_t addDir(const String8& name, const sp& dir); + sp makeDir(const String8& name); + status_t addLeafFile(const String8& leafName, + const sp& file); + virtual ssize_t slurpFullTree(Bundle* bundle, + const String8& srcDir, + const AaptGroupEntry& kind, + const String8& resType, + sp& fullResPaths); + + String8 mLeaf; + String8 mPath; + + DefaultKeyedVector > mFiles; + DefaultKeyedVector > mDirs; +}; + +/** + * All information we know about a particular symbol. + */ +class AaptSymbolEntry +{ +public: + AaptSymbolEntry() + : isPublic(false), isJavaSymbol(false), typeCode(TYPE_UNKNOWN) + { + } + AaptSymbolEntry(const String8& _name) + : name(_name), isPublic(false), isJavaSymbol(false), typeCode(TYPE_UNKNOWN) + { + } + AaptSymbolEntry(const AaptSymbolEntry& o) + : name(o.name), sourcePos(o.sourcePos), isPublic(o.isPublic) + , isJavaSymbol(o.isJavaSymbol), comment(o.comment), typeComment(o.typeComment) + , typeCode(o.typeCode), int32Val(o.int32Val), stringVal(o.stringVal) + { + } + AaptSymbolEntry operator=(const AaptSymbolEntry& o) + { + sourcePos = o.sourcePos; + isPublic = o.isPublic; + isJavaSymbol = o.isJavaSymbol; + comment = o.comment; + typeComment = o.typeComment; + typeCode = o.typeCode; + int32Val = o.int32Val; + stringVal = o.stringVal; + return *this; + } + + const String8 name; + + SourcePos sourcePos; + bool isPublic; + bool isJavaSymbol; + + String16 comment; + String16 typeComment; + + enum { + TYPE_UNKNOWN = 0, + TYPE_INT32, + TYPE_STRING + }; + + int typeCode; + + // Value. May be one of these. + int32_t int32Val; + String8 stringVal; +}; + +/** + * A group of related symbols (such as indices into a string block) + * that have been generated from the assets. + */ +class AaptSymbols : public RefBase +{ +public: + AaptSymbols() { } + virtual ~AaptSymbols() { } + + status_t addSymbol(const String8& name, int32_t value, const SourcePos& pos) { + if (!check_valid_symbol_name(name, pos, "symbol")) { + return BAD_VALUE; + } + AaptSymbolEntry& sym = edit_symbol(name, &pos); + sym.typeCode = AaptSymbolEntry::TYPE_INT32; + sym.int32Val = value; + return NO_ERROR; + } + + status_t addStringSymbol(const String8& name, const String8& value, + const SourcePos& pos) { + if (!check_valid_symbol_name(name, pos, "symbol")) { + return BAD_VALUE; + } + AaptSymbolEntry& sym = edit_symbol(name, &pos); + sym.typeCode = AaptSymbolEntry::TYPE_STRING; + sym.stringVal = value; + return NO_ERROR; + } + + status_t makeSymbolPublic(const String8& name, const SourcePos& pos) { + if (!check_valid_symbol_name(name, pos, "symbol")) { + return BAD_VALUE; + } + AaptSymbolEntry& sym = edit_symbol(name, &pos); + sym.isPublic = true; + return NO_ERROR; + } + + status_t makeSymbolJavaSymbol(const String8& name, const SourcePos& pos) { + if (!check_valid_symbol_name(name, pos, "symbol")) { + return BAD_VALUE; + } + AaptSymbolEntry& sym = edit_symbol(name, &pos); + sym.isJavaSymbol = true; + return NO_ERROR; + } + + void appendComment(const String8& name, const String16& comment, const SourcePos& pos) { + if (comment.size() <= 0) { + return; + } + AaptSymbolEntry& sym = edit_symbol(name, &pos); + if (sym.comment.size() == 0) { + sym.comment = comment; + } else { + sym.comment.append(String16("\n")); + sym.comment.append(comment); + } + } + + void appendTypeComment(const String8& name, const String16& comment) { + if (comment.size() <= 0) { + return; + } + AaptSymbolEntry& sym = edit_symbol(name, NULL); + if (sym.typeComment.size() == 0) { + sym.typeComment = comment; + } else { + sym.typeComment.append(String16("\n")); + sym.typeComment.append(comment); + } + } + + sp addNestedSymbol(const String8& name, const SourcePos& pos) { + if (!check_valid_symbol_name(name, pos, "nested symbol")) { + return NULL; + } + + sp sym = mNestedSymbols.valueFor(name); + if (sym == NULL) { + sym = new AaptSymbols(); + mNestedSymbols.add(name, sym); + } + + return sym; + } + + status_t applyJavaSymbols(const sp& javaSymbols); + + const KeyedVector& getSymbols() const + { return mSymbols; } + const DefaultKeyedVector >& getNestedSymbols() const + { return mNestedSymbols; } + + const String16& getComment(const String8& name) const + { return get_symbol(name).comment; } + const String16& getTypeComment(const String8& name) const + { return get_symbol(name).typeComment; } + +private: + bool check_valid_symbol_name(const String8& symbol, const SourcePos& pos, const char* label) { + if (valid_symbol_name(symbol)) { + return true; + } + pos.error("invalid %s: '%s'\n", label, symbol.string()); + return false; + } + AaptSymbolEntry& edit_symbol(const String8& symbol, const SourcePos* pos) { + ssize_t i = mSymbols.indexOfKey(symbol); + if (i < 0) { + i = mSymbols.add(symbol, AaptSymbolEntry(symbol)); + } + AaptSymbolEntry& sym = mSymbols.editValueAt(i); + if (pos != NULL && sym.sourcePos.line < 0) { + sym.sourcePos = *pos; + } + return sym; + } + const AaptSymbolEntry& get_symbol(const String8& symbol) const { + ssize_t i = mSymbols.indexOfKey(symbol); + if (i >= 0) { + return mSymbols.valueAt(i); + } + return mDefSymbol; + } + + KeyedVector mSymbols; + DefaultKeyedVector > mNestedSymbols; + AaptSymbolEntry mDefSymbol; +}; + +class ResourceTypeSet : public RefBase, + public KeyedVector > +{ +public: + ResourceTypeSet(); +}; + +// Storage for lists of fully qualified paths for +// resources encountered during slurping. +class FilePathStore : public RefBase, + public Vector +{ +public: + FilePathStore(); +}; + +/** + * Asset hierarchy being operated on. + */ +class AaptAssets : public AaptDir +{ +public: + AaptAssets(); + virtual ~AaptAssets() { delete mRes; } + + const String8& getPackage() const { return mPackage; } + void setPackage(const String8& package) { + mPackage = package; + mSymbolsPrivatePackage = package; + mHavePrivateSymbols = false; + } + + const SortedVector& getGroupEntries() const; + + virtual status_t addFile(const String8& name, const sp& file); + + sp addFile(const String8& filePath, + const AaptGroupEntry& entry, + const String8& srcDir, + sp* outGroup, + const String8& resType); + + void addResource(const String8& leafName, + const String8& path, + const sp& file, + const String8& resType); + + void addGroupEntry(const AaptGroupEntry& entry) { mGroupEntries.add(entry); } + + ssize_t slurpFromArgs(Bundle* bundle); + + sp getSymbolsFor(const String8& name); + + sp getJavaSymbolsFor(const String8& name); + + status_t applyJavaSymbols(); + + const DefaultKeyedVector >& getSymbols() const { return mSymbols; } + + String8 getSymbolsPrivatePackage() const { return mSymbolsPrivatePackage; } + void setSymbolsPrivatePackage(const String8& pkg) { + mSymbolsPrivatePackage = pkg; + mHavePrivateSymbols = mSymbolsPrivatePackage != mPackage; + } + + bool havePrivateSymbols() const { return mHavePrivateSymbols; } + + bool isJavaSymbol(const AaptSymbolEntry& sym, bool includePrivate) const; + + status_t buildIncludedResources(Bundle* bundle); + status_t addIncludedResources(const sp& file); + const ResTable& getIncludedResources() const; + + void print(const String8& prefix) const; + + inline const Vector >& resDirs() const { return mResDirs; } + sp resDir(const String8& name) const; + + inline sp getOverlay() { return mOverlay; } + inline void setOverlay(sp& overlay) { mOverlay = overlay; } + + inline KeyedVector >* getResources() { return mRes; } + inline void + setResources(KeyedVector >* res) { delete mRes; mRes = res; } + + inline sp& getFullResPaths() { return mFullResPaths; } + inline void + setFullResPaths(sp& res) { mFullResPaths = res; } + + inline sp& getFullAssetPaths() { return mFullAssetPaths; } + inline void + setFullAssetPaths(sp& res) { mFullAssetPaths = res; } + +private: + virtual ssize_t slurpFullTree(Bundle* bundle, + const String8& srcDir, + const AaptGroupEntry& kind, + const String8& resType, + sp& fullResPaths); + + ssize_t slurpResourceTree(Bundle* bundle, const String8& srcDir); + ssize_t slurpResourceZip(Bundle* bundle, const char* filename); + + status_t filter(Bundle* bundle); + + String8 mPackage; + SortedVector mGroupEntries; + DefaultKeyedVector > mSymbols; + DefaultKeyedVector > mJavaSymbols; + String8 mSymbolsPrivatePackage; + bool mHavePrivateSymbols; + + Vector > mResDirs; + + bool mChanged; + + bool mHaveIncludedAssets; + AssetManager mIncludedAssets; + + sp mOverlay; + KeyedVector >* mRes; + + sp mFullResPaths; + sp mFullAssetPaths; +}; + +#endif // __AAPT_ASSETS_H + diff --git a/tools/aapt/Android.mk b/tools/aapt/Android.mk new file mode 100644 index 0000000000000..452c60a6853ee --- /dev/null +++ b/tools/aapt/Android.mk @@ -0,0 +1,103 @@ +# +# Copyright 2006 The Android Open Source Project +# +# Android Asset Packaging Tool +# + +# This tool is prebuilt if we're doing an app-only build. +ifeq ($(TARGET_BUILD_APPS),) + + +aapt_src_files := \ + AaptAssets.cpp \ + Command.cpp \ + CrunchCache.cpp \ + FileFinder.cpp \ + Main.cpp \ + Package.cpp \ + StringPool.cpp \ + XMLNode.cpp \ + ResourceFilter.cpp \ + ResourceIdCache.cpp \ + ResourceTable.cpp \ + Images.cpp \ + Resource.cpp \ + pseudolocalize.cpp \ + SourcePos.cpp \ + WorkQueue.cpp \ + ZipEntry.cpp \ + ZipFile.cpp \ + qsort_r_compat.c + +LOCAL_PATH:= $(call my-dir) +include $(CLEAR_VARS) + +LOCAL_SRC_FILES := $(aapt_src_files) + +LOCAL_CFLAGS += -Wno-format-y2k +ifeq (darwin,$(HOST_OS)) +LOCAL_CFLAGS += -D_DARWIN_UNLIMITED_STREAMS +endif + +LOCAL_CFLAGS += -DSTATIC_ANDROIDFW_FOR_TOOLS + +LOCAL_C_INCLUDES += external/libpng +LOCAL_C_INCLUDES += external/zlib + +LOCAL_STATIC_LIBRARIES := \ + libandroidfw \ + libutils \ + libcutils \ + libexpat \ + libpng \ + liblog + +ifeq ($(HOST_OS),linux) +LOCAL_LDLIBS += -lrt -ldl -lpthread +endif + +# Statically link libz for MinGW (Win SDK under Linux), +# and dynamically link for all others. +ifneq ($(strip $(USE_MINGW)),) + LOCAL_STATIC_LIBRARIES += libz +else + LOCAL_LDLIBS += -lz +endif + +LOCAL_MODULE := aapt + +include $(BUILD_HOST_EXECUTABLE) + +# aapt for running on the device +# ========================================================= +ifneq ($(SDK_ONLY),true) +include $(CLEAR_VARS) + +LOCAL_SRC_FILES := $(aapt_src_files) + +LOCAL_MODULE := aapt + +LOCAL_C_INCLUDES += bionic +LOCAL_C_INCLUDES += bionic/libstdc++/include +LOCAL_C_INCLUDES += external/stlport/stlport +LOCAL_C_INCLUDES += external/libpng +LOCAL_C_INCLUDES += external/zlib + +LOCAL_CFLAGS += -Wno-non-virtual-dtor + +LOCAL_SHARED_LIBRARIES := \ + libandroidfw \ + libutils \ + libcutils \ + libpng \ + liblog \ + libz + +LOCAL_STATIC_LIBRARIES := \ + libstlport_static \ + libexpat_static + +include $(BUILD_EXECUTABLE) +endif + +endif # TARGET_BUILD_APPS diff --git a/tools/aapt/Bundle.h b/tools/aapt/Bundle.h new file mode 100644 index 0000000000000..b67ca09e5acfb --- /dev/null +++ b/tools/aapt/Bundle.h @@ -0,0 +1,309 @@ +// +// Copyright 2006 The Android Open Source Project +// +// State bundle. Used to pass around stuff like command-line args. +// +#ifndef __BUNDLE_H +#define __BUNDLE_H + +#include +#include +#include +#include +#include +#include +#include + +enum { + SDK_CUPCAKE = 3, + SDK_DONUT = 4, + SDK_ECLAIR = 5, + SDK_ECLAIR_0_1 = 6, + SDK_MR1 = 7, + SDK_FROYO = 8, + SDK_HONEYCOMB_MR2 = 13, + SDK_ICE_CREAM_SANDWICH = 14, + SDK_ICE_CREAM_SANDWICH_MR1 = 15, +}; + +/* + * Things we can do. + */ +typedef enum Command { + kCommandUnknown = 0, + kCommandVersion, + kCommandList, + kCommandDump, + kCommandAdd, + kCommandRemove, + kCommandPackage, + kCommandCrunch, + kCommandSingleCrunch, +} Command; + +/* + * Bundle of goodies, including everything specified on the command line. + */ +class Bundle { +public: + Bundle(void) + : mCmd(kCommandUnknown), mVerbose(false), mAndroidList(false), + mForce(false), mGrayscaleTolerance(0), mMakePackageDirs(false), + mUpdate(false), mExtending(false), + mRequireLocalization(false), mPseudolocalize(false), + mWantUTF16(false), mValues(false), mIncludeMetaData(false), + mCompressionMethod(0), mJunkPath(false), mOutputAPKFile(NULL), + mManifestPackageNameOverride(NULL), mInstrumentationPackageNameOverride(NULL), + mAutoAddOverlay(false), mGenDependencies(false), + mAssetSourceDir(NULL), + mCrunchedOutputDir(NULL), mProguardFile(NULL), + mAndroidManifestFile(NULL), mPublicOutputFile(NULL), + mRClassDir(NULL), mResourceIntermediatesDir(NULL), mManifestMinSdkVersion(NULL), + mMinSdkVersion(NULL), mTargetSdkVersion(NULL), mMaxSdkVersion(NULL), + mVersionCode(NULL), mVersionName(NULL), mCustomPackage(NULL), mExtraPackages(NULL), + mMaxResVersion(NULL), mDebugMode(false), mNonConstantId(false), mProduct(NULL), + mUseCrunchCache(false), mErrorOnFailedInsert(false), mOutputTextSymbols(NULL), + mSingleCrunchInputFile(NULL), mSingleCrunchOutputFile(NULL), + mArgc(0), mArgv(NULL) + {} + ~Bundle(void) {} + + /* + * Set the command value. Returns "false" if it was previously set. + */ + Command getCommand(void) const { return mCmd; } + void setCommand(Command cmd) { mCmd = cmd; } + + /* + * Command modifiers. Not all modifiers are appropriate for all + * commands. + */ + bool getVerbose(void) const { return mVerbose; } + void setVerbose(bool val) { mVerbose = val; } + bool getAndroidList(void) const { return mAndroidList; } + void setAndroidList(bool val) { mAndroidList = val; } + bool getForce(void) const { return mForce; } + void setForce(bool val) { mForce = val; } + void setGrayscaleTolerance(int val) { mGrayscaleTolerance = val; } + int getGrayscaleTolerance() const { return mGrayscaleTolerance; } + bool getMakePackageDirs(void) const { return mMakePackageDirs; } + void setMakePackageDirs(bool val) { mMakePackageDirs = val; } + bool getUpdate(void) const { return mUpdate; } + void setUpdate(bool val) { mUpdate = val; } + bool getExtending(void) const { return mExtending; } + void setExtending(bool val) { mExtending = val; } + bool getRequireLocalization(void) const { return mRequireLocalization; } + void setRequireLocalization(bool val) { mRequireLocalization = val; } + bool getPseudolocalize(void) const { return mPseudolocalize; } + void setPseudolocalize(bool val) { mPseudolocalize = val; } + void setWantUTF16(bool val) { mWantUTF16 = val; } + bool getValues(void) const { return mValues; } + void setValues(bool val) { mValues = val; } + bool getIncludeMetaData(void) const { return mIncludeMetaData; } + void setIncludeMetaData(bool val) { mIncludeMetaData = val; } + int getCompressionMethod(void) const { return mCompressionMethod; } + void setCompressionMethod(int val) { mCompressionMethod = val; } + bool getJunkPath(void) const { return mJunkPath; } + void setJunkPath(bool val) { mJunkPath = val; } + const char* getOutputAPKFile() const { return mOutputAPKFile; } + void setOutputAPKFile(const char* val) { mOutputAPKFile = val; } + const char* getManifestPackageNameOverride() const { return mManifestPackageNameOverride; } + void setManifestPackageNameOverride(const char * val) { mManifestPackageNameOverride = val; } + const char* getInstrumentationPackageNameOverride() const { return mInstrumentationPackageNameOverride; } + void setInstrumentationPackageNameOverride(const char * val) { mInstrumentationPackageNameOverride = val; } + bool getAutoAddOverlay() { return mAutoAddOverlay; } + void setAutoAddOverlay(bool val) { mAutoAddOverlay = val; } + bool getGenDependencies() { return mGenDependencies; } + void setGenDependencies(bool val) { mGenDependencies = val; } + bool getErrorOnFailedInsert() { return mErrorOnFailedInsert; } + void setErrorOnFailedInsert(bool val) { mErrorOnFailedInsert = val; } + + bool getUTF16StringsOption() { + return mWantUTF16 || !isMinSdkAtLeast(SDK_FROYO); + } + + /* + * Input options. + */ + const char* getAssetSourceDir() const { return mAssetSourceDir; } + void setAssetSourceDir(const char* dir) { mAssetSourceDir = dir; } + const char* getCrunchedOutputDir() const { return mCrunchedOutputDir; } + void setCrunchedOutputDir(const char* dir) { mCrunchedOutputDir = dir; } + const char* getProguardFile() const { return mProguardFile; } + void setProguardFile(const char* file) { mProguardFile = file; } + const android::Vector& getResourceSourceDirs() const { return mResourceSourceDirs; } + void addResourceSourceDir(const char* dir) { mResourceSourceDirs.insertAt(dir,0); } + const char* getAndroidManifestFile() const { return mAndroidManifestFile; } + void setAndroidManifestFile(const char* file) { mAndroidManifestFile = file; } + const char* getPublicOutputFile() const { return mPublicOutputFile; } + void setPublicOutputFile(const char* file) { mPublicOutputFile = file; } + const char* getRClassDir() const { return mRClassDir; } + void setRClassDir(const char* dir) { mRClassDir = dir; } + const char* getConfigurations() const { return mConfigurations.size() > 0 ? mConfigurations.string() : NULL; } + void addConfigurations(const char* val) { if (mConfigurations.size() > 0) { mConfigurations.append(","); mConfigurations.append(val); } else { mConfigurations = val; } } + const char* getPreferredConfigurations() const { return mPreferredConfigurations.size() > 0 ? mPreferredConfigurations.string() : NULL; } + void addPreferredConfigurations(const char* val) { if (mPreferredConfigurations.size() > 0) { mPreferredConfigurations.append(","); mPreferredConfigurations.append(val); } else { mPreferredConfigurations = val; } } + const char* getResourceIntermediatesDir() const { return mResourceIntermediatesDir; } + void setResourceIntermediatesDir(const char* dir) { mResourceIntermediatesDir = dir; } + const android::Vector& getPackageIncludes() const { return mPackageIncludes; } + void addPackageInclude(const char* file) { mPackageIncludes.add(file); } + const android::Vector& getJarFiles() const { return mJarFiles; } + void addJarFile(const char* file) { mJarFiles.add(file); } + const android::Vector& getNoCompressExtensions() const { return mNoCompressExtensions; } + void addNoCompressExtension(const char* ext) { mNoCompressExtensions.add(ext); } + + const char* getManifestMinSdkVersion() const { return mManifestMinSdkVersion; } + void setManifestMinSdkVersion(const char* val) { mManifestMinSdkVersion = val; } + const char* getMinSdkVersion() const { return mMinSdkVersion; } + void setMinSdkVersion(const char* val) { mMinSdkVersion = val; } + const char* getTargetSdkVersion() const { return mTargetSdkVersion; } + void setTargetSdkVersion(const char* val) { mTargetSdkVersion = val; } + const char* getMaxSdkVersion() const { return mMaxSdkVersion; } + void setMaxSdkVersion(const char* val) { mMaxSdkVersion = val; } + const char* getVersionCode() const { return mVersionCode; } + void setVersionCode(const char* val) { mVersionCode = val; } + const char* getVersionName() const { return mVersionName; } + void setVersionName(const char* val) { mVersionName = val; } + const char* getCustomPackage() const { return mCustomPackage; } + void setCustomPackage(const char* val) { mCustomPackage = val; } + const char* getExtraPackages() const { return mExtraPackages; } + void setExtraPackages(const char* val) { mExtraPackages = val; } + const char* getMaxResVersion() const { return mMaxResVersion; } + void setMaxResVersion(const char * val) { mMaxResVersion = val; } + bool getDebugMode() const { return mDebugMode; } + void setDebugMode(bool val) { mDebugMode = val; } + bool getNonConstantId() const { return mNonConstantId; } + void setNonConstantId(bool val) { mNonConstantId = val; } + const char* getProduct() const { return mProduct; } + void setProduct(const char * val) { mProduct = val; } + void setUseCrunchCache(bool val) { mUseCrunchCache = val; } + bool getUseCrunchCache() const { return mUseCrunchCache; } + const char* getOutputTextSymbols() const { return mOutputTextSymbols; } + void setOutputTextSymbols(const char* val) { mOutputTextSymbols = val; } + const char* getSingleCrunchInputFile() const { return mSingleCrunchInputFile; } + void setSingleCrunchInputFile(const char* val) { mSingleCrunchInputFile = val; } + const char* getSingleCrunchOutputFile() const { return mSingleCrunchOutputFile; } + void setSingleCrunchOutputFile(const char* val) { mSingleCrunchOutputFile = val; } + + /* + * Set and get the file specification. + * + * Note this does NOT make a copy of argv. + */ + void setFileSpec(char* const argv[], int argc) { + mArgc = argc; + mArgv = argv; + } + int getFileSpecCount(void) const { return mArgc; } + const char* getFileSpecEntry(int idx) const { return mArgv[idx]; } + void eatArgs(int n) { + if (n > mArgc) n = mArgc; + mArgv += n; + mArgc -= n; + } + +#if 0 + /* + * Package count. Nothing to do with anything else here; this is + * just a convenient place to stuff it so we don't have to pass it + * around everywhere. + */ + int getPackageCount(void) const { return mPackageCount; } + void setPackageCount(int val) { mPackageCount = val; } +#endif + + /* Certain features may only be available on a specific SDK level or + * above. SDK levels that have a non-numeric identifier are assumed + * to be newer than any SDK level that has a number designated. + */ + bool isMinSdkAtLeast(int desired) { + /* If the application specifies a minSdkVersion in the manifest + * then use that. Otherwise, check what the user specified on + * the command line. If neither, it's not available since + * the minimum SDK version is assumed to be 1. + */ + const char *minVer; + if (mManifestMinSdkVersion != NULL) { + minVer = mManifestMinSdkVersion; + } else if (mMinSdkVersion != NULL) { + minVer = mMinSdkVersion; + } else { + return false; + } + + char *end; + int minSdkNum = (int)strtol(minVer, &end, 0); + if (*end == '\0') { + if (minSdkNum < desired) { + return false; + } + } + return true; + } + +private: + /* commands & modifiers */ + Command mCmd; + bool mVerbose; + bool mAndroidList; + bool mForce; + int mGrayscaleTolerance; + bool mMakePackageDirs; + bool mUpdate; + bool mExtending; + bool mRequireLocalization; + bool mPseudolocalize; + bool mWantUTF16; + bool mValues; + bool mIncludeMetaData; + int mCompressionMethod; + bool mJunkPath; + const char* mOutputAPKFile; + const char* mManifestPackageNameOverride; + const char* mInstrumentationPackageNameOverride; + bool mAutoAddOverlay; + bool mGenDependencies; + const char* mAssetSourceDir; + const char* mCrunchedOutputDir; + const char* mProguardFile; + const char* mAndroidManifestFile; + const char* mPublicOutputFile; + const char* mRClassDir; + const char* mResourceIntermediatesDir; + android::String8 mConfigurations; + android::String8 mPreferredConfigurations; + android::Vector mPackageIncludes; + android::Vector mJarFiles; + android::Vector mNoCompressExtensions; + android::Vector mResourceSourceDirs; + + const char* mManifestMinSdkVersion; + const char* mMinSdkVersion; + const char* mTargetSdkVersion; + const char* mMaxSdkVersion; + const char* mVersionCode; + const char* mVersionName; + const char* mCustomPackage; + const char* mExtraPackages; + const char* mMaxResVersion; + bool mDebugMode; + bool mNonConstantId; + const char* mProduct; + bool mUseCrunchCache; + bool mErrorOnFailedInsert; + const char* mOutputTextSymbols; + const char* mSingleCrunchInputFile; + const char* mSingleCrunchOutputFile; + + /* file specification */ + int mArgc; + char* const* mArgv; + +#if 0 + /* misc stuff */ + int mPackageCount; +#endif + +}; + +#endif // __BUNDLE_H diff --git a/tools/aapt/CacheUpdater.h b/tools/aapt/CacheUpdater.h new file mode 100644 index 0000000000000..0e65589529e54 --- /dev/null +++ b/tools/aapt/CacheUpdater.h @@ -0,0 +1,107 @@ +// +// Copyright 2011 The Android Open Source Project +// +// Abstraction of calls to system to make directories and delete files and +// wrapper to image processing. + +#ifndef CACHE_UPDATER_H +#define CACHE_UPDATER_H + +#include +#include +#include +#include +#include "Images.h" + +using namespace android; + +/** CacheUpdater + * This is a pure virtual class that declares abstractions of functions useful + * for managing a cache files. This manager is set up to be used in a + * mirror cache where the source tree is duplicated and filled with processed + * images. This class is abstracted to allow for dependency injection during + * unit testing. + * Usage: + * To update/add a file to the cache, call processImage + * To remove a file from the cache, call deleteFile + */ +class CacheUpdater { +public: + // Make sure all the directories along this path exist + virtual void ensureDirectoriesExist(String8 path) = 0; + + // Delete a file + virtual void deleteFile(String8 path) = 0; + + // Process an image from source out to dest + virtual void processImage(String8 source, String8 dest) = 0; +private: +}; + +/** SystemCacheUpdater + * This is an implementation of the above virtual cache updater specification. + * This implementations hits the filesystem to manage a cache and calls out to + * the PNG crunching in images.h to process images out to its cache components. + */ +class SystemCacheUpdater : public CacheUpdater { +public: + // Constructor to set bundle to pass to preProcessImage + SystemCacheUpdater (Bundle* b) + : bundle(b) { }; + + // Make sure all the directories along this path exist + virtual void ensureDirectoriesExist(String8 path) + { + // Check to see if we're dealing with a fully qualified path + String8 existsPath; + String8 toCreate; + String8 remains; + struct stat s; + + // Check optomistically to see if all directories exist. + // If something in the path doesn't exist, then walk the path backwards + // and find the place to start creating directories forward. + if (stat(path.string(),&s) == -1) { + // Walk backwards to find place to start creating directories + existsPath = path; + do { + // As we remove the end of existsPath add it to + // the string of paths to create. + toCreate = existsPath.getPathLeaf().appendPath(toCreate); + existsPath = existsPath.getPathDir(); + } while (stat(existsPath.string(),&s) == -1); + + // Walk forwards and build directories as we go + do { + // Advance to the next segment of the path + existsPath.appendPath(toCreate.walkPath(&remains)); + toCreate = remains; +#ifdef HAVE_MS_C_RUNTIME + _mkdir(existsPath.string()); +#else + mkdir(existsPath.string(), S_IRUSR|S_IWUSR|S_IXUSR|S_IRGRP|S_IXGRP); +#endif + } while (remains.length() > 0); + } //if + }; + + // Delete a file + virtual void deleteFile(String8 path) + { + if (remove(path.string()) != 0) + fprintf(stderr,"ERROR DELETING %s\n",path.string()); + }; + + // Process an image from source out to dest + virtual void processImage(String8 source, String8 dest) + { + // Make sure we're trying to write to a directory that is extant + ensureDirectoriesExist(dest.getPathDir()); + + preProcessImageToCache(bundle, source, dest); + }; +private: + Bundle* bundle; +}; + +#endif // CACHE_UPDATER_H \ No newline at end of file diff --git a/tools/aapt/Command.cpp b/tools/aapt/Command.cpp new file mode 100644 index 0000000000000..7fa8c9d89b3cc --- /dev/null +++ b/tools/aapt/Command.cpp @@ -0,0 +1,2121 @@ +// +// Copyright 2006 The Android Open Source Project +// +// Android Asset Packaging Tool main entry point. +// +#include "Main.h" +#include "Bundle.h" +#include "ResourceFilter.h" +#include "ResourceTable.h" +#include "Images.h" +#include "XMLNode.h" + +#include +#include +#include +#include + +#include +#include + +using namespace android; + +/* + * Show version info. All the cool kids do it. + */ +int doVersion(Bundle* bundle) +{ + if (bundle->getFileSpecCount() != 0) { + printf("(ignoring extra arguments)\n"); + } + printf("Android Asset Packaging Tool, v0.2\n"); + + return 0; +} + + +/* + * Open the file read only. The call fails if the file doesn't exist. + * + * Returns NULL on failure. + */ +ZipFile* openReadOnly(const char* fileName) +{ + ZipFile* zip; + status_t result; + + zip = new ZipFile; + result = zip->open(fileName, ZipFile::kOpenReadOnly); + if (result != NO_ERROR) { + if (result == NAME_NOT_FOUND) { + fprintf(stderr, "ERROR: '%s' not found\n", fileName); + } else if (result == PERMISSION_DENIED) { + fprintf(stderr, "ERROR: '%s' access denied\n", fileName); + } else { + fprintf(stderr, "ERROR: failed opening '%s' as Zip file\n", + fileName); + } + delete zip; + return NULL; + } + + return zip; +} + +/* + * Open the file read-write. The file will be created if it doesn't + * already exist and "okayToCreate" is set. + * + * Returns NULL on failure. + */ +ZipFile* openReadWrite(const char* fileName, bool okayToCreate) +{ + ZipFile* zip = NULL; + status_t result; + int flags; + + flags = ZipFile::kOpenReadWrite; + if (okayToCreate) { + flags |= ZipFile::kOpenCreate; + } + + zip = new ZipFile; + result = zip->open(fileName, flags); + if (result != NO_ERROR) { + delete zip; + zip = NULL; + goto bail; + } + +bail: + return zip; +} + + +/* + * Return a short string describing the compression method. + */ +const char* compressionName(int method) +{ + if (method == ZipEntry::kCompressStored) { + return "Stored"; + } else if (method == ZipEntry::kCompressDeflated) { + return "Deflated"; + } else { + return "Unknown"; + } +} + +/* + * Return the percent reduction in size (0% == no compression). + */ +int calcPercent(long uncompressedLen, long compressedLen) +{ + if (!uncompressedLen) { + return 0; + } else { + return (int) (100.0 - (compressedLen * 100.0) / uncompressedLen + 0.5); + } +} + +/* + * Handle the "list" command, which can be a simple file dump or + * a verbose listing. + * + * The verbose listing closely matches the output of the Info-ZIP "unzip" + * command. + */ +int doList(Bundle* bundle) +{ + int result = 1; + ZipFile* zip = NULL; + const ZipEntry* entry; + long totalUncLen, totalCompLen; + const char* zipFileName; + + if (bundle->getFileSpecCount() != 1) { + fprintf(stderr, "ERROR: specify zip file name (only)\n"); + goto bail; + } + zipFileName = bundle->getFileSpecEntry(0); + + zip = openReadOnly(zipFileName); + if (zip == NULL) { + goto bail; + } + + int count, i; + + if (bundle->getVerbose()) { + printf("Archive: %s\n", zipFileName); + printf( + " Length Method Size Ratio Offset Date Time CRC-32 Name\n"); + printf( + "-------- ------ ------- ----- ------- ---- ---- ------ ----\n"); + } + + totalUncLen = totalCompLen = 0; + + count = zip->getNumEntries(); + for (i = 0; i < count; i++) { + entry = zip->getEntryByIndex(i); + if (bundle->getVerbose()) { + char dateBuf[32]; + time_t when; + + when = entry->getModWhen(); + strftime(dateBuf, sizeof(dateBuf), "%m-%d-%y %H:%M", + localtime(&when)); + + printf("%8ld %-7.7s %7ld %3d%% %8zd %s %08lx %s\n", + (long) entry->getUncompressedLen(), + compressionName(entry->getCompressionMethod()), + (long) entry->getCompressedLen(), + calcPercent(entry->getUncompressedLen(), + entry->getCompressedLen()), + (size_t) entry->getLFHOffset(), + dateBuf, + entry->getCRC32(), + entry->getFileName()); + } else { + printf("%s\n", entry->getFileName()); + } + + totalUncLen += entry->getUncompressedLen(); + totalCompLen += entry->getCompressedLen(); + } + + if (bundle->getVerbose()) { + printf( + "-------- ------- --- -------\n"); + printf("%8ld %7ld %2d%% %d files\n", + totalUncLen, + totalCompLen, + calcPercent(totalUncLen, totalCompLen), + zip->getNumEntries()); + } + + if (bundle->getAndroidList()) { + AssetManager assets; + if (!assets.addAssetPath(String8(zipFileName), NULL)) { + fprintf(stderr, "ERROR: list -a failed because assets could not be loaded\n"); + goto bail; + } + + const ResTable& res = assets.getResources(false); + if (&res == NULL) { + printf("\nNo resource table found.\n"); + } else { +#ifndef HAVE_ANDROID_OS + printf("\nResource table:\n"); + res.print(false); +#endif + } + + Asset* manifestAsset = assets.openNonAsset("AndroidManifest.xml", + Asset::ACCESS_BUFFER); + if (manifestAsset == NULL) { + printf("\nNo AndroidManifest.xml found.\n"); + } else { + printf("\nAndroid manifest:\n"); + ResXMLTree tree; + tree.setTo(manifestAsset->getBuffer(true), + manifestAsset->getLength()); + printXMLBlock(&tree); + } + delete manifestAsset; + } + + result = 0; + +bail: + delete zip; + return result; +} + +static ssize_t indexOfAttribute(const ResXMLTree& tree, uint32_t attrRes) +{ + size_t N = tree.getAttributeCount(); + for (size_t i=0; i Res_value::TYPE_LAST_INT) { + if (outError != NULL) { + *outError = "attribute is not an integer value"; + } + return defValue; + } + } + return value.data; +} + +static int32_t getResolvedIntegerAttribute(const ResTable* resTable, const ResXMLTree& tree, + uint32_t attrRes, String8* outError, int32_t defValue = -1) +{ + ssize_t idx = indexOfAttribute(tree, attrRes); + if (idx < 0) { + return defValue; + } + Res_value value; + if (tree.getAttributeValue(idx, &value) != NO_ERROR) { + if (value.dataType == Res_value::TYPE_REFERENCE) { + resTable->resolveReference(&value, 0); + } + if (value.dataType < Res_value::TYPE_FIRST_INT + || value.dataType > Res_value::TYPE_LAST_INT) { + if (outError != NULL) { + *outError = "attribute is not an integer value"; + } + return defValue; + } + } + return value.data; +} + +static String8 getResolvedAttribute(const ResTable* resTable, const ResXMLTree& tree, + uint32_t attrRes, String8* outError) +{ + ssize_t idx = indexOfAttribute(tree, attrRes); + if (idx < 0) { + return String8(); + } + Res_value value; + if (tree.getAttributeValue(idx, &value) != NO_ERROR) { + if (value.dataType == Res_value::TYPE_STRING) { + size_t len; + const uint16_t* str = tree.getAttributeStringValue(idx, &len); + return str ? String8(str, len) : String8(); + } + resTable->resolveReference(&value, 0); + if (value.dataType != Res_value::TYPE_STRING) { + if (outError != NULL) { + *outError = "attribute is not a string value"; + } + return String8(); + } + } + size_t len; + const Res_value* value2 = &value; + const char16_t* str = const_cast(resTable)->valueToString(value2, 0, NULL, &len); + return str ? String8(str, len) : String8(); +} + +static void getResolvedResourceAttribute(Res_value* value, const ResTable* resTable, + const ResXMLTree& tree, uint32_t attrRes, String8* outError) +{ + ssize_t idx = indexOfAttribute(tree, attrRes); + if (idx < 0) { + if (outError != NULL) { + *outError = "attribute could not be found"; + } + return; + } + if (tree.getAttributeValue(idx, value) != NO_ERROR) { + if (value->dataType == Res_value::TYPE_REFERENCE) { + resTable->resolveReference(value, 0); + } + // The attribute was found and was resolved if need be. + return; + } + if (outError != NULL) { + *outError = "error getting resolved resource attribute"; + } +} + +// These are attribute resource constants for the platform, as found +// in android.R.attr +enum { + LABEL_ATTR = 0x01010001, + ICON_ATTR = 0x01010002, + NAME_ATTR = 0x01010003, + DEBUGGABLE_ATTR = 0x0101000f, + VALUE_ATTR = 0x01010024, + VERSION_CODE_ATTR = 0x0101021b, + VERSION_NAME_ATTR = 0x0101021c, + SCREEN_ORIENTATION_ATTR = 0x0101001e, + MIN_SDK_VERSION_ATTR = 0x0101020c, + MAX_SDK_VERSION_ATTR = 0x01010271, + REQ_TOUCH_SCREEN_ATTR = 0x01010227, + REQ_KEYBOARD_TYPE_ATTR = 0x01010228, + REQ_HARD_KEYBOARD_ATTR = 0x01010229, + REQ_NAVIGATION_ATTR = 0x0101022a, + REQ_FIVE_WAY_NAV_ATTR = 0x01010232, + TARGET_SDK_VERSION_ATTR = 0x01010270, + TEST_ONLY_ATTR = 0x01010272, + ANY_DENSITY_ATTR = 0x0101026c, + GL_ES_VERSION_ATTR = 0x01010281, + SMALL_SCREEN_ATTR = 0x01010284, + NORMAL_SCREEN_ATTR = 0x01010285, + LARGE_SCREEN_ATTR = 0x01010286, + XLARGE_SCREEN_ATTR = 0x010102bf, + REQUIRED_ATTR = 0x0101028e, + SCREEN_SIZE_ATTR = 0x010102ca, + SCREEN_DENSITY_ATTR = 0x010102cb, + REQUIRES_SMALLEST_WIDTH_DP_ATTR = 0x01010364, + COMPATIBLE_WIDTH_LIMIT_DP_ATTR = 0x01010365, + LARGEST_WIDTH_LIMIT_DP_ATTR = 0x01010366, + PUBLIC_KEY_ATTR = 0x010103a6, +}; + +const char *getComponentName(String8 &pkgName, String8 &componentName) { + ssize_t idx = componentName.find("."); + String8 retStr(pkgName); + if (idx == 0) { + retStr += componentName; + } else if (idx < 0) { + retStr += "."; + retStr += componentName; + } else { + return componentName.string(); + } + return retStr.string(); +} + +static void printCompatibleScreens(ResXMLTree& tree) { + size_t len; + ResXMLTree::event_code_t code; + int depth = 0; + bool first = true; + printf("compatible-screens:"); + while ((code=tree.next()) != ResXMLTree::END_DOCUMENT && code != ResXMLTree::BAD_DOCUMENT) { + if (code == ResXMLTree::END_TAG) { + depth--; + if (depth < 0) { + break; + } + continue; + } + if (code != ResXMLTree::START_TAG) { + continue; + } + depth++; + String8 tag(tree.getElementName(&len)); + if (tag == "screen") { + int32_t screenSize = getIntegerAttribute(tree, + SCREEN_SIZE_ATTR, NULL, -1); + int32_t screenDensity = getIntegerAttribute(tree, + SCREEN_DENSITY_ATTR, NULL, -1); + if (screenSize > 0 && screenDensity > 0) { + if (!first) { + printf(","); + } + first = false; + printf("'%d/%d'", screenSize, screenDensity); + } + } + } + printf("\n"); +} + +/* + * Handle the "dump" command, to extract select data from an archive. + */ +extern char CONSOLE_DATA[2925]; // see EOF +int doDump(Bundle* bundle) +{ + status_t result = UNKNOWN_ERROR; + Asset* asset = NULL; + + if (bundle->getFileSpecCount() < 1) { + fprintf(stderr, "ERROR: no dump option specified\n"); + return 1; + } + + if (bundle->getFileSpecCount() < 2) { + fprintf(stderr, "ERROR: no dump file specified\n"); + return 1; + } + + const char* option = bundle->getFileSpecEntry(0); + const char* filename = bundle->getFileSpecEntry(1); + + AssetManager assets; + void* assetsCookie; + if (!assets.addAssetPath(String8(filename), &assetsCookie)) { + fprintf(stderr, "ERROR: dump failed because assets could not be loaded\n"); + return 1; + } + + // Make a dummy config for retrieving resources... we need to supply + // non-default values for some configs so that we can retrieve resources + // in the app that don't have a default. The most important of these is + // the API version because key resources like icons will have an implicit + // version if they are using newer config types like density. + ResTable_config config; + config.language[0] = 'e'; + config.language[1] = 'n'; + config.country[0] = 'U'; + config.country[1] = 'S'; + config.orientation = ResTable_config::ORIENTATION_PORT; + config.density = ResTable_config::DENSITY_MEDIUM; + config.sdkVersion = 10000; // Very high. + config.screenWidthDp = 320; + config.screenHeightDp = 480; + config.smallestScreenWidthDp = 320; + assets.setConfiguration(config); + + const ResTable& res = assets.getResources(false); + if (&res == NULL) { + fprintf(stderr, "ERROR: dump failed because no resource table was found\n"); + goto bail; + } + + if (strcmp("resources", option) == 0) { +#ifndef HAVE_ANDROID_OS + res.print(bundle->getValues()); +#endif + + } else if (strcmp("strings", option) == 0) { + const ResStringPool* pool = res.getTableStringBlock(0); + printStringPool(pool); + + } else if (strcmp("xmltree", option) == 0) { + if (bundle->getFileSpecCount() < 3) { + fprintf(stderr, "ERROR: no dump xmltree resource file specified\n"); + goto bail; + } + + for (int i=2; igetFileSpecCount(); i++) { + const char* resname = bundle->getFileSpecEntry(i); + ResXMLTree tree; + asset = assets.openNonAsset(resname, Asset::ACCESS_BUFFER); + if (asset == NULL) { + fprintf(stderr, "ERROR: dump failed because resource %s found\n", resname); + goto bail; + } + + if (tree.setTo(asset->getBuffer(true), + asset->getLength()) != NO_ERROR) { + fprintf(stderr, "ERROR: Resource %s is corrupt\n", resname); + goto bail; + } + tree.restart(); + printXMLBlock(&tree); + tree.uninit(); + delete asset; + asset = NULL; + } + + } else if (strcmp("xmlstrings", option) == 0) { + if (bundle->getFileSpecCount() < 3) { + fprintf(stderr, "ERROR: no dump xmltree resource file specified\n"); + goto bail; + } + + for (int i=2; igetFileSpecCount(); i++) { + const char* resname = bundle->getFileSpecEntry(i); + ResXMLTree tree; + asset = assets.openNonAsset(resname, Asset::ACCESS_BUFFER); + if (asset == NULL) { + fprintf(stderr, "ERROR: dump failed because resource %s found\n", resname); + goto bail; + } + + if (tree.setTo(asset->getBuffer(true), + asset->getLength()) != NO_ERROR) { + fprintf(stderr, "ERROR: Resource %s is corrupt\n", resname); + goto bail; + } + printStringPool(&tree.getStrings()); + delete asset; + asset = NULL; + } + + } else { + ResXMLTree tree; + asset = assets.openNonAsset("AndroidManifest.xml", + Asset::ACCESS_BUFFER); + if (asset == NULL) { + fprintf(stderr, "ERROR: dump failed because no AndroidManifest.xml found\n"); + goto bail; + } + + if (tree.setTo(asset->getBuffer(true), + asset->getLength()) != NO_ERROR) { + fprintf(stderr, "ERROR: AndroidManifest.xml is corrupt\n"); + goto bail; + } + tree.restart(); + + if (strcmp("permissions", option) == 0) { + size_t len; + ResXMLTree::event_code_t code; + int depth = 0; + while ((code=tree.next()) != ResXMLTree::END_DOCUMENT && code != ResXMLTree::BAD_DOCUMENT) { + if (code == ResXMLTree::END_TAG) { + depth--; + continue; + } + if (code != ResXMLTree::START_TAG) { + continue; + } + depth++; + String8 tag(tree.getElementName(&len)); + //printf("Depth %d tag %s\n", depth, tag.string()); + if (depth == 1) { + if (tag != "manifest") { + fprintf(stderr, "ERROR: manifest does not start with tag\n"); + goto bail; + } + String8 pkg = getAttribute(tree, NULL, "package", NULL); + printf("package: %s\n", pkg.string()); + } else if (depth == 2 && tag == "permission") { + String8 error; + String8 name = getAttribute(tree, NAME_ATTR, &error); + if (error != "") { + fprintf(stderr, "ERROR: %s\n", error.string()); + goto bail; + } + printf("permission: %s\n", name.string()); + } else if (depth == 2 && tag == "uses-permission") { + String8 error; + String8 name = getAttribute(tree, NAME_ATTR, &error); + if (error != "") { + fprintf(stderr, "ERROR: %s\n", error.string()); + goto bail; + } + printf("uses-permission: %s\n", name.string()); + int req = getIntegerAttribute(tree, REQUIRED_ATTR, NULL, 1); + if (!req) { + printf("optional-permission: %s\n", name.string()); + } + } + } + } else if (strcmp("badging", option) == 0) { + Vector locales; + res.getLocales(&locales); + + Vector configs; + res.getConfigurations(&configs); + SortedVector densities; + const size_t NC = configs.size(); + for (size_t i=0; i, presume it's there anyway". + bool specCameraFeature = false; // camera-related + bool specCameraAutofocusFeature = false; + bool reqCameraAutofocusFeature = false; + bool reqCameraFlashFeature = false; + bool hasCameraPermission = false; + bool specLocationFeature = false; // location-related + bool specNetworkLocFeature = false; + bool reqNetworkLocFeature = false; + bool specGpsFeature = false; + bool reqGpsFeature = false; + bool hasMockLocPermission = false; + bool hasCoarseLocPermission = false; + bool hasGpsPermission = false; + bool hasGeneralLocPermission = false; + bool specBluetoothFeature = false; // Bluetooth API-related + bool hasBluetoothPermission = false; + bool specMicrophoneFeature = false; // microphone-related + bool hasRecordAudioPermission = false; + bool specWiFiFeature = false; + bool hasWiFiPermission = false; + bool specTelephonyFeature = false; // telephony-related + bool reqTelephonySubFeature = false; + bool hasTelephonyPermission = false; + bool specTouchscreenFeature = false; // touchscreen-related + bool specMultitouchFeature = false; + bool reqDistinctMultitouchFeature = false; + bool specScreenPortraitFeature = false; + bool specScreenLandscapeFeature = false; + bool reqScreenPortraitFeature = false; + bool reqScreenLandscapeFeature = false; + // 2.2 also added some other features that apps can request, but that + // have no corresponding permission, so we cannot implement any + // back-compatibility heuristic for them. The below are thus unnecessary + // (but are retained here for documentary purposes.) + //bool specCompassFeature = false; + //bool specAccelerometerFeature = false; + //bool specProximityFeature = false; + //bool specAmbientLightFeature = false; + //bool specLiveWallpaperFeature = false; + + int targetSdk = 0; + int smallScreen = 1; + int normalScreen = 1; + int largeScreen = 1; + int xlargeScreen = 1; + int anyDensity = 1; + int requiresSmallestWidthDp = 0; + int compatibleWidthLimitDp = 0; + int largestWidthLimitDp = 0; + String8 pkg; + String8 activityName; + String8 activityLabel; + String8 activityIcon; + String8 receiverName; + String8 serviceName; + while ((code=tree.next()) != ResXMLTree::END_DOCUMENT && code != ResXMLTree::BAD_DOCUMENT) { + if (code == ResXMLTree::END_TAG) { + depth--; + if (depth < 2) { + withinApplication = false; + } else if (depth < 3) { + if (withinActivity && isMainActivity && isLauncherActivity) { + const char *aName = getComponentName(pkg, activityName); + printf("launchable-activity:"); + if (aName != NULL) { + printf(" name='%s' ", aName); + } + printf(" label='%s' icon='%s'\n", + activityLabel.string(), + activityIcon.string()); + } + if (!hasIntentFilter) { + hasOtherActivities |= withinActivity; + hasOtherReceivers |= withinReceiver; + hasOtherServices |= withinService; + } + withinActivity = false; + withinService = false; + withinReceiver = false; + hasIntentFilter = false; + isMainActivity = isLauncherActivity = false; + } else if (depth < 4) { + if (withinIntentFilter) { + if (withinActivity) { + hasMainActivity |= actMainActivity; + hasOtherActivities |= !actMainActivity; + } else if (withinReceiver) { + hasWidgetReceivers |= actWidgetReceivers; + hasOtherReceivers |= !actWidgetReceivers; + } else if (withinService) { + hasImeService |= actImeService; + hasWallpaperService |= actWallpaperService; + hasOtherServices |= (!actImeService && !actWallpaperService); + } + } + withinIntentFilter = false; + } + continue; + } + if (code != ResXMLTree::START_TAG) { + continue; + } + depth++; + String8 tag(tree.getElementName(&len)); + //printf("Depth %d, %s\n", depth, tag.string()); + if (depth == 1) { + if (tag != "manifest") { + fprintf(stderr, "ERROR: manifest does not start with tag\n"); + goto bail; + } + pkg = getAttribute(tree, NULL, "package", NULL); + printf("package: name='%s' ", pkg.string()); + int32_t versionCode = getIntegerAttribute(tree, VERSION_CODE_ATTR, &error); + if (error != "") { + fprintf(stderr, "ERROR getting 'android:versionCode' attribute: %s\n", error.string()); + goto bail; + } + if (versionCode > 0) { + printf("versionCode='%d' ", versionCode); + } else { + printf("versionCode='' "); + } + String8 versionName = getResolvedAttribute(&res, tree, VERSION_NAME_ATTR, &error); + if (error != "") { + fprintf(stderr, "ERROR getting 'android:versionName' attribute: %s\n", error.string()); + goto bail; + } + printf("versionName='%s'\n", versionName.string()); + } else if (depth == 2) { + withinApplication = false; + if (tag == "application") { + withinApplication = true; + + String8 label; + const size_t NL = locales.size(); + for (size_t i=0; igetIncludeMetaData() && tag == "meta-data") { + String8 metaDataName = getAttribute(tree, NAME_ATTR, &error); + if (error != "") { + fprintf(stderr, "ERROR getting 'android:name' attribute for " + "meta-data:%s\n", error.string()); + goto bail; + } + printf("meta-data: name='%s' ", metaDataName.string()); + Res_value value; + getResolvedResourceAttribute(&value, &res, tree, VALUE_ATTR, &error); + if (error != "") { + fprintf(stderr, "ERROR getting 'android:value' attribute for " + "meta-data:%s\n", error.string()); + goto bail; + } + if (value.dataType == Res_value::TYPE_STRING) { + String8 metaDataValue = getAttribute(tree, value.data, &error); + if (error != "") { + fprintf(stderr, "ERROR getting 'android:value' attribute for " + "meta-data: %s\n", error.string()); + goto bail; + } + printf("value='%s'\n", metaDataValue.string()); + } else if (Res_value::TYPE_FIRST_INT <= value.dataType && + value.dataType <= Res_value::TYPE_LAST_INT) { + printf("value='%d'\n", value.data); + } else { + printf("value=(type 0x%x)0x%x", (int)value.dataType, (int)value.data); + } + } + } else if ((depth == 4) && (tag == "intent-filter")) { + hasIntentFilter = true; + withinIntentFilter = true; + actMainActivity = actWidgetReceivers = actImeService = actWallpaperService = + false; + } else if ((depth == 5) && withinIntentFilter) { + String8 action; + if (tag == "action") { + action = getAttribute(tree, NAME_ATTR, &error); + if (error != "") { + fprintf(stderr, "ERROR getting 'android:name' attribute: %s\n", + error.string()); + goto bail; + } + if (withinActivity) { + if (action == "android.intent.action.MAIN") { + isMainActivity = true; + actMainActivity = true; + } + } else if (withinReceiver) { + if (action == "android.appwidget.action.APPWIDGET_UPDATE") { + actWidgetReceivers = true; + } + } else if (withinService) { + if (action == "android.view.InputMethod") { + actImeService = true; + } else if (action == "android.service.wallpaper.WallpaperService") { + actWallpaperService = true; + } + } + if (action == "android.intent.action.SEARCH") { + isSearchable = true; + } + } + + if (tag == "category") { + String8 category = getAttribute(tree, NAME_ATTR, &error); + if (error != "") { + fprintf(stderr, "ERROR getting 'name' attribute: %s\n", error.string()); + goto bail; + } + if (withinActivity) { + if (category == "android.intent.category.LAUNCHER") { + isLauncherActivity = true; + } + } + } + } + } + + // Pre-1.6 implicitly granted permission compatibility logic + if (targetSdk < 4) { + if (!hasWriteExternalStoragePermission) { + printf("uses-permission:'android.permission.WRITE_EXTERNAL_STORAGE'\n"); + printf("uses-implied-permission:'android.permission.WRITE_EXTERNAL_STORAGE'," \ + "'targetSdkVersion < 4'\n"); + hasWriteExternalStoragePermission = true; + } + if (!hasReadPhoneStatePermission) { + printf("uses-permission:'android.permission.READ_PHONE_STATE'\n"); + printf("uses-implied-permission:'android.permission.READ_PHONE_STATE'," \ + "'targetSdkVersion < 4'\n"); + } + } + + // If the application has requested WRITE_EXTERNAL_STORAGE, we will + // force them to always take READ_EXTERNAL_STORAGE as well. We always + // do this (regardless of target API version) because we can't have + // an app with write permission but not read permission. + if (!hasReadExternalStoragePermission && hasWriteExternalStoragePermission) { + printf("uses-permission:'android.permission.READ_EXTERNAL_STORAGE'\n"); + printf("uses-implied-permission:'android.permission.READ_EXTERNAL_STORAGE'," \ + "'requested WRITE_EXTERNAL_STORAGE'\n"); + } + + // Pre-JellyBean call log permission compatibility. + if (targetSdk < 16) { + if (!hasReadCallLogPermission && hasReadContactsPermission) { + printf("uses-permission:'android.permission.READ_CALL_LOG'\n"); + printf("uses-implied-permission:'android.permission.READ_CALL_LOG'," \ + "'targetSdkVersion < 16 and requested READ_CONTACTS'\n"); + } + if (!hasWriteCallLogPermission && hasWriteContactsPermission) { + printf("uses-permission:'android.permission.WRITE_CALL_LOG'\n"); + printf("uses-implied-permission:'android.permission.WRITE_CALL_LOG'," \ + "'targetSdkVersion < 16 and requested WRITE_CONTACTS'\n"); + } + } + + /* The following blocks handle printing "inferred" uses-features, based + * on whether related features or permissions are used by the app. + * Note that the various spec*Feature variables denote whether the + * relevant tag was *present* in the AndroidManfest, not that it was + * present and set to true. + */ + // Camera-related back-compatibility logic + if (!specCameraFeature) { + if (reqCameraFlashFeature) { + // if app requested a sub-feature (autofocus or flash) and didn't + // request the base camera feature, we infer that it meant to + printf("uses-feature:'android.hardware.camera'\n"); + printf("uses-implied-feature:'android.hardware.camera'," \ + "'requested android.hardware.camera.flash feature'\n"); + } else if (reqCameraAutofocusFeature) { + // if app requested a sub-feature (autofocus or flash) and didn't + // request the base camera feature, we infer that it meant to + printf("uses-feature:'android.hardware.camera'\n"); + printf("uses-implied-feature:'android.hardware.camera'," \ + "'requested android.hardware.camera.autofocus feature'\n"); + } else if (hasCameraPermission) { + // if app wants to use camera but didn't request the feature, we infer + // that it meant to, and further that it wants autofocus + // (which was the 1.0 - 1.5 behavior) + printf("uses-feature:'android.hardware.camera'\n"); + if (!specCameraAutofocusFeature) { + printf("uses-feature:'android.hardware.camera.autofocus'\n"); + printf("uses-implied-feature:'android.hardware.camera.autofocus'," \ + "'requested android.permission.CAMERA permission'\n"); + } + } + } + + // Location-related back-compatibility logic + if (!specLocationFeature && + (hasMockLocPermission || hasCoarseLocPermission || hasGpsPermission || + hasGeneralLocPermission || reqNetworkLocFeature || reqGpsFeature)) { + // if app either takes a location-related permission or requests one of the + // sub-features, we infer that it also meant to request the base location feature + printf("uses-feature:'android.hardware.location'\n"); + printf("uses-implied-feature:'android.hardware.location'," \ + "'requested a location access permission'\n"); + } + if (!specGpsFeature && hasGpsPermission) { + // if app takes GPS (FINE location) perm but does not request the GPS + // feature, we infer that it meant to + printf("uses-feature:'android.hardware.location.gps'\n"); + printf("uses-implied-feature:'android.hardware.location.gps'," \ + "'requested android.permission.ACCESS_FINE_LOCATION permission'\n"); + } + if (!specNetworkLocFeature && hasCoarseLocPermission) { + // if app takes Network location (COARSE location) perm but does not request the + // network location feature, we infer that it meant to + printf("uses-feature:'android.hardware.location.network'\n"); + printf("uses-implied-feature:'android.hardware.location.network'," \ + "'requested android.permission.ACCESS_COARSE_LOCATION permission'\n"); + } + + // Bluetooth-related compatibility logic + if (!specBluetoothFeature && hasBluetoothPermission && (targetSdk > 4)) { + // if app takes a Bluetooth permission but does not request the Bluetooth + // feature, we infer that it meant to + printf("uses-feature:'android.hardware.bluetooth'\n"); + printf("uses-implied-feature:'android.hardware.bluetooth'," \ + "'requested android.permission.BLUETOOTH or android.permission.BLUETOOTH_ADMIN " \ + "permission and targetSdkVersion > 4'\n"); + } + + // Microphone-related compatibility logic + if (!specMicrophoneFeature && hasRecordAudioPermission) { + // if app takes the record-audio permission but does not request the microphone + // feature, we infer that it meant to + printf("uses-feature:'android.hardware.microphone'\n"); + printf("uses-implied-feature:'android.hardware.microphone'," \ + "'requested android.permission.RECORD_AUDIO permission'\n"); + } + + // WiFi-related compatibility logic + if (!specWiFiFeature && hasWiFiPermission) { + // if app takes one of the WiFi permissions but does not request the WiFi + // feature, we infer that it meant to + printf("uses-feature:'android.hardware.wifi'\n"); + printf("uses-implied-feature:'android.hardware.wifi'," \ + "'requested android.permission.ACCESS_WIFI_STATE, " \ + "android.permission.CHANGE_WIFI_STATE, or " \ + "android.permission.CHANGE_WIFI_MULTICAST_STATE permission'\n"); + } + + // Telephony-related compatibility logic + if (!specTelephonyFeature && (hasTelephonyPermission || reqTelephonySubFeature)) { + // if app takes one of the telephony permissions or requests a sub-feature but + // does not request the base telephony feature, we infer that it meant to + printf("uses-feature:'android.hardware.telephony'\n"); + printf("uses-implied-feature:'android.hardware.telephony'," \ + "'requested a telephony-related permission or feature'\n"); + } + + // Touchscreen-related back-compatibility logic + if (!specTouchscreenFeature) { // not a typo! + // all apps are presumed to require a touchscreen, unless they explicitly say + // + // Note that specTouchscreenFeature is true if the tag is present, regardless + // of whether its value is true or false, so this is safe + printf("uses-feature:'android.hardware.touchscreen'\n"); + printf("uses-implied-feature:'android.hardware.touchscreen'," \ + "'assumed you require a touch screen unless explicitly made optional'\n"); + } + if (!specMultitouchFeature && reqDistinctMultitouchFeature) { + // if app takes one of the telephony permissions or requests a sub-feature but + // does not request the base telephony feature, we infer that it meant to + printf("uses-feature:'android.hardware.touchscreen.multitouch'\n"); + printf("uses-implied-feature:'android.hardware.touchscreen.multitouch'," \ + "'requested android.hardware.touchscreen.multitouch.distinct feature'\n"); + } + + // Landscape/portrait-related compatibility logic + if (!specScreenLandscapeFeature && !specScreenPortraitFeature) { + // If the app has specified any activities in its manifest + // that request a specific orientation, then assume that + // orientation is required. + if (reqScreenLandscapeFeature) { + printf("uses-feature:'android.hardware.screen.landscape'\n"); + printf("uses-implied-feature:'android.hardware.screen.landscape'," \ + "'one or more activities have specified a landscape orientation'\n"); + } + if (reqScreenPortraitFeature) { + printf("uses-feature:'android.hardware.screen.portrait'\n"); + printf("uses-implied-feature:'android.hardware.screen.portrait'," \ + "'one or more activities have specified a portrait orientation'\n"); + } + } + + if (hasMainActivity) { + printf("main\n"); + } + if (hasWidgetReceivers) { + printf("app-widget\n"); + } + if (hasImeService) { + printf("ime\n"); + } + if (hasWallpaperService) { + printf("wallpaper\n"); + } + if (hasOtherActivities) { + printf("other-activities\n"); + } + if (isSearchable) { + printf("search\n"); + } + if (hasOtherReceivers) { + printf("other-receivers\n"); + } + if (hasOtherServices) { + printf("other-services\n"); + } + + // For modern apps, if screen size buckets haven't been specified + // but the new width ranges have, then infer the buckets from them. + if (smallScreen > 0 && normalScreen > 0 && largeScreen > 0 && xlargeScreen > 0 + && requiresSmallestWidthDp > 0) { + int compatWidth = compatibleWidthLimitDp; + if (compatWidth <= 0) { + compatWidth = requiresSmallestWidthDp; + } + if (requiresSmallestWidthDp <= 240 && compatWidth >= 240) { + smallScreen = -1; + } else { + smallScreen = 0; + } + if (requiresSmallestWidthDp <= 320 && compatWidth >= 320) { + normalScreen = -1; + } else { + normalScreen = 0; + } + if (requiresSmallestWidthDp <= 480 && compatWidth >= 480) { + largeScreen = -1; + } else { + largeScreen = 0; + } + if (requiresSmallestWidthDp <= 720 && compatWidth >= 720) { + xlargeScreen = -1; + } else { + xlargeScreen = 0; + } + } + + // Determine default values for any unspecified screen sizes, + // based on the target SDK of the package. As of 4 (donut) + // the screen size support was introduced, so all default to + // enabled. + if (smallScreen > 0) { + smallScreen = targetSdk >= 4 ? -1 : 0; + } + if (normalScreen > 0) { + normalScreen = -1; + } + if (largeScreen > 0) { + largeScreen = targetSdk >= 4 ? -1 : 0; + } + if (xlargeScreen > 0) { + // Introduced in Gingerbread. + xlargeScreen = targetSdk >= 9 ? -1 : 0; + } + if (anyDensity > 0) { + anyDensity = (targetSdk >= 4 || requiresSmallestWidthDp > 0 + || compatibleWidthLimitDp > 0) ? -1 : 0; + } + printf("supports-screens:"); + if (smallScreen != 0) { + printf(" 'small'"); + } + if (normalScreen != 0) { + printf(" 'normal'"); + } + if (largeScreen != 0) { + printf(" 'large'"); + } + if (xlargeScreen != 0) { + printf(" 'xlarge'"); + } + printf("\n"); + printf("supports-any-density: '%s'\n", anyDensity ? "true" : "false"); + if (requiresSmallestWidthDp > 0) { + printf("requires-smallest-width:'%d'\n", requiresSmallestWidthDp); + } + if (compatibleWidthLimitDp > 0) { + printf("compatible-width-limit:'%d'\n", compatibleWidthLimitDp); + } + if (largestWidthLimitDp > 0) { + printf("largest-width-limit:'%d'\n", largestWidthLimitDp); + } + + printf("locales:"); + const size_t NL = locales.size(); + for (size_t i=0; igetFileCount() > 0) { + printf("native-code:"); + for (size_t i=0; igetFileCount(); i++) { + printf(" '%s'", dir->getFileName(i).string()); + } + printf("\n"); + } + delete dir; + } + } else if (strcmp("badger", option) == 0) { + printf("%s", CONSOLE_DATA); + } else if (strcmp("configurations", option) == 0) { + Vector configs; + res.getConfigurations(&configs); + const size_t N = configs.size(); + for (size_t i=0; igetUpdate()) { + /* avoid confusion */ + fprintf(stderr, "ERROR: can't use '-u' with add\n"); + goto bail; + } + + if (bundle->getFileSpecCount() < 1) { + fprintf(stderr, "ERROR: must specify zip file name\n"); + goto bail; + } + zipFileName = bundle->getFileSpecEntry(0); + + if (bundle->getFileSpecCount() < 2) { + fprintf(stderr, "NOTE: nothing to do\n"); + goto bail; + } + + zip = openReadWrite(zipFileName, true); + if (zip == NULL) { + fprintf(stderr, "ERROR: failed opening/creating '%s' as Zip file\n", zipFileName); + goto bail; + } + + for (int i = 1; i < bundle->getFileSpecCount(); i++) { + const char* fileName = bundle->getFileSpecEntry(i); + + if (strcasecmp(String8(fileName).getPathExtension().string(), ".gz") == 0) { + printf(" '%s'... (from gzip)\n", fileName); + result = zip->addGzip(fileName, String8(fileName).getBasePath().string(), NULL); + } else { + if (bundle->getJunkPath()) { + String8 storageName = String8(fileName).getPathLeaf(); + printf(" '%s' as '%s'...\n", fileName, storageName.string()); + result = zip->add(fileName, storageName.string(), + bundle->getCompressionMethod(), NULL); + } else { + printf(" '%s'...\n", fileName); + result = zip->add(fileName, bundle->getCompressionMethod(), NULL); + } + } + if (result != NO_ERROR) { + fprintf(stderr, "Unable to add '%s' to '%s'", bundle->getFileSpecEntry(i), zipFileName); + if (result == NAME_NOT_FOUND) { + fprintf(stderr, ": file not found\n"); + } else if (result == ALREADY_EXISTS) { + fprintf(stderr, ": already exists in archive\n"); + } else { + fprintf(stderr, "\n"); + } + goto bail; + } + } + + result = NO_ERROR; + +bail: + delete zip; + return (result != NO_ERROR); +} + + +/* + * Delete files from an existing archive. + */ +int doRemove(Bundle* bundle) +{ + ZipFile* zip = NULL; + status_t result = UNKNOWN_ERROR; + const char* zipFileName; + + if (bundle->getFileSpecCount() < 1) { + fprintf(stderr, "ERROR: must specify zip file name\n"); + goto bail; + } + zipFileName = bundle->getFileSpecEntry(0); + + if (bundle->getFileSpecCount() < 2) { + fprintf(stderr, "NOTE: nothing to do\n"); + goto bail; + } + + zip = openReadWrite(zipFileName, false); + if (zip == NULL) { + fprintf(stderr, "ERROR: failed opening Zip archive '%s'\n", + zipFileName); + goto bail; + } + + for (int i = 1; i < bundle->getFileSpecCount(); i++) { + const char* fileName = bundle->getFileSpecEntry(i); + ZipEntry* entry; + + entry = zip->getEntryByName(fileName); + if (entry == NULL) { + printf(" '%s' NOT FOUND\n", fileName); + continue; + } + + result = zip->remove(entry); + + if (result != NO_ERROR) { + fprintf(stderr, "Unable to delete '%s' from '%s'\n", + bundle->getFileSpecEntry(i), zipFileName); + goto bail; + } + } + + /* update the archive */ + zip->flush(); + +bail: + delete zip; + return (result != NO_ERROR); +} + + +/* + * Package up an asset directory and associated application files. + */ +int doPackage(Bundle* bundle) +{ + const char* outputAPKFile; + int retVal = 1; + status_t err; + sp assets; + int N; + FILE* fp; + String8 dependencyFile; + + // -c zz_ZZ means do pseudolocalization + ResourceFilter filter; + err = filter.parse(bundle->getConfigurations()); + if (err != NO_ERROR) { + goto bail; + } + if (filter.containsPseudo()) { + bundle->setPseudolocalize(true); + } + + N = bundle->getFileSpecCount(); + if (N < 1 && bundle->getResourceSourceDirs().size() == 0 && bundle->getJarFiles().size() == 0 + && bundle->getAndroidManifestFile() == NULL && bundle->getAssetSourceDir() == NULL) { + fprintf(stderr, "ERROR: no input files\n"); + goto bail; + } + + outputAPKFile = bundle->getOutputAPKFile(); + + // Make sure the filenames provided exist and are of the appropriate type. + if (outputAPKFile) { + FileType type; + type = getFileType(outputAPKFile); + if (type != kFileTypeNonexistent && type != kFileTypeRegular) { + fprintf(stderr, + "ERROR: output file '%s' exists but is not regular file\n", + outputAPKFile); + goto bail; + } + } + + // Load the assets. + assets = new AaptAssets(); + + // Set up the resource gathering in assets if we're going to generate + // dependency files. Every time we encounter a resource while slurping + // the tree, we'll add it to these stores so we have full resource paths + // to write to a dependency file. + if (bundle->getGenDependencies()) { + sp resPathStore = new FilePathStore; + assets->setFullResPaths(resPathStore); + sp assetPathStore = new FilePathStore; + assets->setFullAssetPaths(assetPathStore); + } + + err = assets->slurpFromArgs(bundle); + if (err < 0) { + goto bail; + } + + if (bundle->getVerbose()) { + assets->print(String8()); + } + + // If they asked for any fileAs that need to be compiled, do so. + if (bundle->getResourceSourceDirs().size() || bundle->getAndroidManifestFile()) { + err = buildResources(bundle, assets); + if (err != 0) { + goto bail; + } + } + + // At this point we've read everything and processed everything. From here + // on out it's just writing output files. + if (SourcePos::hasErrors()) { + goto bail; + } + + // Update symbols with information about which ones are needed as Java symbols. + assets->applyJavaSymbols(); + if (SourcePos::hasErrors()) { + goto bail; + } + + // If we've been asked to generate a dependency file, do that here + if (bundle->getGenDependencies()) { + // If this is the packaging step, generate the dependency file next to + // the output apk (e.g. bin/resources.ap_.d) + if (outputAPKFile) { + dependencyFile = String8(outputAPKFile); + // Add the .d extension to the dependency file. + dependencyFile.append(".d"); + } else { + // Else if this is the R.java dependency generation step, + // generate the dependency file in the R.java package subdirectory + // e.g. gen/com/foo/app/R.java.d + dependencyFile = String8(bundle->getRClassDir()); + dependencyFile.appendPath("R.java.d"); + } + // Make sure we have a clean dependency file to start with + fp = fopen(dependencyFile, "w"); + fclose(fp); + } + + // Write out R.java constants + if (!assets->havePrivateSymbols()) { + if (bundle->getCustomPackage() == NULL) { + // Write the R.java file into the appropriate class directory + // e.g. gen/com/foo/app/R.java + err = writeResourceSymbols(bundle, assets, assets->getPackage(), true); + } else { + const String8 customPkg(bundle->getCustomPackage()); + err = writeResourceSymbols(bundle, assets, customPkg, true); + } + if (err < 0) { + goto bail; + } + // If we have library files, we're going to write our R.java file into + // the appropriate class directory for those libraries as well. + // e.g. gen/com/foo/app/lib/R.java + if (bundle->getExtraPackages() != NULL) { + // Split on colon + String8 libs(bundle->getExtraPackages()); + char* packageString = strtok(libs.lockBuffer(libs.length()), ":"); + while (packageString != NULL) { + // Write the R.java file out with the correct package name + err = writeResourceSymbols(bundle, assets, String8(packageString), true); + if (err < 0) { + goto bail; + } + packageString = strtok(NULL, ":"); + } + libs.unlockBuffer(); + } + } else { + err = writeResourceSymbols(bundle, assets, assets->getPackage(), false); + if (err < 0) { + goto bail; + } + err = writeResourceSymbols(bundle, assets, assets->getSymbolsPrivatePackage(), true); + if (err < 0) { + goto bail; + } + } + + // Write out the ProGuard file + err = writeProguardFile(bundle, assets); + if (err < 0) { + goto bail; + } + + // Write the apk + if (outputAPKFile) { + err = writeAPK(bundle, assets, String8(outputAPKFile)); + if (err != NO_ERROR) { + fprintf(stderr, "ERROR: packaging of '%s' failed\n", outputAPKFile); + goto bail; + } + } + + // If we've been asked to generate a dependency file, we need to finish up here. + // the writeResourceSymbols and writeAPK functions have already written the target + // half of the dependency file, now we need to write the prerequisites. (files that + // the R.java file or .ap_ file depend on) + if (bundle->getGenDependencies()) { + // Now that writeResourceSymbols or writeAPK has taken care of writing + // the targets to our dependency file, we'll write the prereqs + fp = fopen(dependencyFile, "a+"); + fprintf(fp, " : "); + bool includeRaw = (outputAPKFile != NULL); + err = writeDependencyPreReqs(bundle, assets, fp, includeRaw); + // Also manually add the AndroidManifeset since it's not under res/ or assets/ + // and therefore was not added to our pathstores during slurping + fprintf(fp, "%s \\\n", bundle->getAndroidManifestFile()); + fclose(fp); + } + + retVal = 0; +bail: + if (SourcePos::hasErrors()) { + SourcePos::printErrors(stderr); + } + return retVal; +} + +/* + * Do PNG Crunching + * PRECONDITIONS + * -S flag points to a source directory containing drawable* folders + * -C flag points to destination directory. The folder structure in the + * source directory will be mirrored to the destination (cache) directory + * + * POSTCONDITIONS + * Destination directory will be updated to match the PNG files in + * the source directory. + */ +int doCrunch(Bundle* bundle) +{ + fprintf(stdout, "Crunching PNG Files in "); + fprintf(stdout, "source dir: %s\n", bundle->getResourceSourceDirs()[0]); + fprintf(stdout, "To destination dir: %s\n", bundle->getCrunchedOutputDir()); + + updatePreProcessedCache(bundle); + + return NO_ERROR; +} + +/* + * Do PNG Crunching on a single flag + * -i points to a single png file + * -o points to a single png output file + */ +int doSingleCrunch(Bundle* bundle) +{ + fprintf(stdout, "Crunching single PNG file: %s\n", bundle->getSingleCrunchInputFile()); + fprintf(stdout, "\tOutput file: %s\n", bundle->getSingleCrunchOutputFile()); + + String8 input(bundle->getSingleCrunchInputFile()); + String8 output(bundle->getSingleCrunchOutputFile()); + + if (preProcessImageToCache(bundle, input, output) != NO_ERROR) { + // we can't return the status_t as it gets truncate to the lower 8 bits. + return 42; + } + + return NO_ERROR; +} + +char CONSOLE_DATA[2925] = { + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 95, 46, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 10, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 61, 63, + 86, 35, 40, 46, 46, 95, 95, 95, 95, 97, 97, 44, 32, 46, 124, 42, 33, 83, + 62, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 58, 46, 58, 59, 61, 59, 61, 81, + 81, 81, 81, 66, 96, 61, 61, 58, 46, 46, 46, 58, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 10, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 46, 61, 59, 59, 59, 58, 106, 81, 81, 81, 81, 102, 59, 61, 59, + 59, 61, 61, 61, 58, 46, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 61, 59, 59, + 59, 58, 109, 81, 81, 81, 81, 61, 59, 59, 59, 59, 59, 58, 59, 59, 46, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 46, 61, 59, 59, 59, 60, 81, 81, 81, 81, 87, + 58, 59, 59, 59, 59, 59, 59, 61, 119, 44, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 10, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, + 47, 61, 59, 59, 58, 100, 81, 81, 81, 81, 35, 58, 59, 59, 59, 59, 59, 58, + 121, 81, 91, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 109, 58, 59, 59, 61, 81, 81, + 81, 81, 81, 109, 58, 59, 59, 59, 59, 61, 109, 81, 81, 76, 46, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 10, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 41, 87, 59, 61, 59, 41, 81, 81, 81, 81, 81, 81, 59, 61, 59, + 59, 58, 109, 81, 81, 87, 39, 46, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 60, 81, 91, 59, + 59, 61, 81, 81, 81, 81, 81, 87, 43, 59, 58, 59, 60, 81, 81, 81, 76, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 52, 91, 58, 45, 59, 87, 81, 81, 81, 81, + 70, 58, 58, 58, 59, 106, 81, 81, 81, 91, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 10, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 93, 40, 32, 46, 59, 100, 81, 81, 81, 81, 40, 58, 46, 46, 58, 100, 81, + 81, 68, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 46, 46, 46, 32, 46, 46, 46, 32, 46, 32, 46, 45, 91, 59, 61, 58, 109, + 81, 81, 81, 87, 46, 58, 61, 59, 60, 81, 81, 80, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 10, 32, + 32, 32, 32, 32, 32, 32, 32, 46, 46, 61, 59, 61, 61, 61, 59, 61, 61, 59, + 59, 59, 58, 58, 46, 46, 41, 58, 59, 58, 81, 81, 81, 81, 69, 58, 59, 59, + 60, 81, 81, 68, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 10, 32, 32, 32, 32, 32, 32, 58, 59, + 61, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 61, 61, 46, + 61, 59, 93, 81, 81, 81, 81, 107, 58, 59, 58, 109, 87, 68, 96, 32, 32, 32, + 46, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 10, 32, 32, 32, 46, 60, 61, 61, 59, 59, 59, 59, 59, 59, 59, 59, + 59, 59, 59, 59, 59, 59, 59, 59, 59, 58, 58, 58, 115, 109, 68, 41, 36, 81, + 109, 46, 61, 61, 81, 69, 96, 46, 58, 58, 46, 58, 46, 46, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 10, 46, 32, 95, 81, + 67, 61, 61, 58, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, + 59, 59, 59, 59, 58, 68, 39, 61, 105, 61, 63, 81, 119, 58, 106, 80, 32, 58, + 61, 59, 59, 61, 59, 61, 59, 61, 46, 95, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 10, 32, 32, 36, 81, 109, 105, 59, 61, 59, 59, 59, + 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 46, 58, 37, + 73, 108, 108, 62, 52, 81, 109, 34, 32, 61, 59, 59, 59, 59, 59, 59, 59, 59, + 59, 61, 59, 61, 61, 46, 46, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 10, + 32, 46, 45, 57, 101, 43, 43, 61, 61, 59, 59, 59, 59, 59, 59, 61, 59, 59, + 59, 59, 59, 59, 59, 59, 59, 58, 97, 46, 61, 108, 62, 126, 58, 106, 80, 96, + 46, 61, 61, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 61, 61, + 97, 103, 97, 32, 32, 32, 32, 32, 32, 32, 10, 32, 32, 32, 32, 45, 46, 32, + 46, 32, 32, 32, 32, 32, 32, 32, 32, 45, 45, 45, 58, 59, 59, 59, 59, 61, + 119, 81, 97, 124, 105, 124, 124, 39, 126, 95, 119, 58, 61, 58, 59, 59, 59, + 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 61, 119, 81, 81, 99, 32, 32, + 32, 32, 32, 32, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 58, 59, 59, 58, 106, 81, 81, 81, 109, 119, + 119, 119, 109, 109, 81, 81, 122, 58, 59, 59, 59, 59, 59, 59, 59, 59, 59, + 59, 59, 59, 59, 59, 58, 115, 81, 87, 81, 102, 32, 32, 32, 32, 32, 32, 10, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 61, 58, 59, 61, 81, 81, 81, 81, 81, 81, 87, 87, 81, 81, 81, 81, + 81, 58, 59, 59, 59, 59, 59, 59, 59, 59, 58, 45, 45, 45, 59, 59, 59, 41, + 87, 66, 33, 32, 32, 32, 32, 32, 32, 32, 10, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 58, 59, 59, 93, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 40, 58, 59, 59, 59, 58, + 45, 32, 46, 32, 32, 32, 32, 32, 46, 32, 126, 96, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 58, 61, 59, 58, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 40, 58, 59, 59, 59, 58, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 10, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 58, + 59, 59, 58, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 40, 58, + 59, 59, 59, 46, 46, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 58, 61, 59, 60, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 59, 61, 59, 59, 61, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 58, 59, 59, 93, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 40, 59, 59, 59, 59, 32, 46, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 10, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 58, 61, 58, 106, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 76, 58, 59, 59, 59, + 32, 46, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 61, 58, 58, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 87, 58, 59, 59, 59, 59, 32, 46, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 10, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 58, 59, 61, 41, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 87, 59, + 61, 58, 59, 59, 46, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 58, 61, 58, 61, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 107, 58, 59, 59, 59, 59, 58, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 58, 59, 59, 58, 51, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 102, 94, 59, 59, 59, 59, 59, 61, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 10, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 58, 61, 59, + 59, 59, 43, 63, 36, 81, 81, 81, 87, 64, 86, 102, 58, 59, 59, 59, 59, 59, + 59, 59, 46, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 46, 61, 59, 59, 59, 59, 59, 59, 59, 43, 33, + 58, 126, 126, 58, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 32, 46, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 10, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, + 61, 59, 59, 59, 58, 45, 58, 61, 59, 58, 58, 58, 61, 59, 59, 59, 59, 59, + 59, 59, 59, 59, 59, 59, 59, 58, 32, 46, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 10, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 61, 59, 59, 59, 59, 59, 58, 95, + 32, 45, 61, 59, 61, 59, 59, 59, 59, 59, 59, 59, 45, 58, 59, 59, 59, 59, + 61, 58, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 58, 61, 59, 59, 59, 59, 59, 61, 59, 61, 46, 46, 32, 45, 45, 45, + 59, 58, 45, 45, 46, 58, 59, 59, 59, 59, 59, 59, 61, 46, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 10, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 58, 59, 59, 59, 59, + 59, 59, 59, 59, 59, 61, 59, 46, 32, 32, 46, 32, 46, 32, 58, 61, 59, 59, + 59, 59, 59, 59, 59, 59, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 45, 59, 59, 59, 59, 59, 59, 59, 59, 58, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 61, 59, 59, 59, 59, 59, 59, 59, 58, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 10, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 46, 61, 59, 59, 59, 59, 59, 59, 59, 32, 46, 32, 32, 32, 32, 32, 32, 61, + 46, 61, 59, 59, 59, 59, 59, 59, 58, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 10, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 61, 59, 59, 59, 59, 59, 59, + 59, 59, 32, 46, 32, 32, 32, 32, 32, 32, 32, 46, 61, 58, 59, 59, 59, 59, + 59, 58, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 58, 59, 59, 59, 59, 59, 59, 59, 59, 46, 46, 32, 32, 32, + 32, 32, 32, 32, 61, 59, 59, 59, 59, 59, 59, 59, 45, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 10, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 32, 45, 61, + 59, 59, 59, 59, 59, 58, 32, 46, 32, 32, 32, 32, 32, 32, 32, 58, 59, 59, + 59, 59, 59, 58, 45, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 45, 45, 45, 45, 32, 46, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 45, 61, 59, 58, 45, 45, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 46, 32, 32, 46, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 10 + }; diff --git a/tools/aapt/CrunchCache.cpp b/tools/aapt/CrunchCache.cpp new file mode 100644 index 0000000000000..c4cf6bc8494f4 --- /dev/null +++ b/tools/aapt/CrunchCache.cpp @@ -0,0 +1,104 @@ +// +// Copyright 2011 The Android Open Source Project +// +// Implementation file for CrunchCache +// This file defines functions laid out and documented in +// CrunchCache.h + +#include +#include + +#include "DirectoryWalker.h" +#include "FileFinder.h" +#include "CacheUpdater.h" +#include "CrunchCache.h" + +using namespace android; + +CrunchCache::CrunchCache(String8 sourcePath, String8 destPath, FileFinder* ff) + : mSourcePath(sourcePath), mDestPath(destPath), mSourceFiles(0), mDestFiles(0), mFileFinder(ff) +{ + // We initialize the default value to return to 0 so if a file doesn't exist + // then all files are automatically "newer" than it. + + // Set file extensions to look for. Right now just pngs. + mExtensions.push(String8(".png")); + + // Load files into our data members + loadFiles(); +} + +size_t CrunchCache::crunch(CacheUpdater* cu, bool forceOverwrite) +{ + size_t numFilesUpdated = 0; + + // Iterate through the source files and compare to cache. + // After processing a file, remove it from the source files and + // from the dest files. + // We're done when we're out of files in source. + String8 relativePath; + while (mSourceFiles.size() > 0) { + // Get the full path to the source file, then convert to a c-string + // and offset our beginning pointer to the length of the sourcePath + // This efficiently strips the source directory prefix from our path. + // Also, String8 doesn't have a substring method so this is what we've + // got to work with. + const char* rPathPtr = mSourceFiles.keyAt(0).string()+mSourcePath.length(); + // Strip leading slash if present + int offset = 0; + if (rPathPtr[0] == OS_PATH_SEPARATOR) + offset = 1; + relativePath = String8(rPathPtr + offset); + + if (forceOverwrite || needsUpdating(relativePath)) { + cu->processImage(mSourcePath.appendPathCopy(relativePath), + mDestPath.appendPathCopy(relativePath)); + numFilesUpdated++; + // crunchFile(relativePath); + } + // Delete this file from the source files and (if it exists) from the + // dest files. + mSourceFiles.removeItemsAt(0); + mDestFiles.removeItem(mDestPath.appendPathCopy(relativePath)); + } + + // Iterate through what's left of destFiles and delete leftovers + while (mDestFiles.size() > 0) { + cu->deleteFile(mDestFiles.keyAt(0)); + mDestFiles.removeItemsAt(0); + } + + // Update our knowledge of the files cache + // both source and dest should be empty by now. + loadFiles(); + + return numFilesUpdated; +} + +void CrunchCache::loadFiles() +{ + // Clear out our data structures to avoid putting in duplicates + mSourceFiles.clear(); + mDestFiles.clear(); + + // Make a directory walker that points to the system. + DirectoryWalker* dw = new SystemDirectoryWalker(); + + // Load files in the source directory + mFileFinder->findFiles(mSourcePath, mExtensions, mSourceFiles,dw); + + // Load files in the destination directory + mFileFinder->findFiles(mDestPath,mExtensions,mDestFiles,dw); + + delete dw; +} + +bool CrunchCache::needsUpdating(String8 relativePath) const +{ + // Retrieve modification dates for this file entry under the source and + // cache directory trees. The vectors will return a modification date of 0 + // if the file doesn't exist. + time_t sourceDate = mSourceFiles.valueFor(mSourcePath.appendPathCopy(relativePath)); + time_t destDate = mDestFiles.valueFor(mDestPath.appendPathCopy(relativePath)); + return sourceDate > destDate; +} \ No newline at end of file diff --git a/tools/aapt/CrunchCache.h b/tools/aapt/CrunchCache.h new file mode 100644 index 0000000000000..be3da5c40b255 --- /dev/null +++ b/tools/aapt/CrunchCache.h @@ -0,0 +1,102 @@ +// +// Copyright 2011 The Android Open Source Project +// +// Cache manager for pre-processed PNG files. +// Contains code for managing which PNG files get processed +// at build time. +// + +#ifndef CRUNCHCACHE_H +#define CRUNCHCACHE_H + +#include +#include +#include "FileFinder.h" +#include "CacheUpdater.h" + +using namespace android; + +/** CrunchCache + * This class is a cache manager which can pre-process PNG files and store + * them in a mirror-cache. It's capable of doing incremental updates to its + * cache. + * + * Usage: + * Create an instance initialized with the root of the source tree, the + * root location to store the cache files, and an instance of a file finder. + * Then update the cache by calling crunch. + */ +class CrunchCache { +public: + // Constructor + CrunchCache(String8 sourcePath, String8 destPath, FileFinder* ff); + + // Nobody should be calling the default constructor + // So this space is intentionally left blank + + // Default Copy Constructor and Destructor are fine + + /** crunch is the workhorse of this class. + * It goes through all the files found in the sourcePath and compares + * them to the cached versions in the destPath. If the optional + * argument forceOverwrite is set to true, then all source files are + * re-crunched even if they have not been modified recently. Otherwise, + * source files are only crunched when they needUpdating. Afterwards, + * we delete any leftover files in the cache that are no longer present + * in source. + * + * PRECONDITIONS: + * No setup besides construction is needed + * POSTCONDITIONS: + * The cache is updated to fully reflect all changes in source. + * The function then returns the number of files changed in cache + * (counting deletions). + */ + size_t crunch(CacheUpdater* cu, bool forceOverwrite=false); + +private: + /** loadFiles is a wrapper to the FileFinder that places matching + * files into mSourceFiles and mDestFiles. + * + * POSTCONDITIONS + * mDestFiles and mSourceFiles are refreshed to reflect the current + * state of the files in the source and dest directories. + * Any previous contents of mSourceFiles and mDestFiles are cleared. + */ + void loadFiles(); + + /** needsUpdating takes a file path + * and returns true if the file represented by this path is newer in the + * sourceFiles than in the cache (mDestFiles). + * + * PRECONDITIONS: + * mSourceFiles and mDestFiles must be initialized and filled. + * POSTCONDITIONS: + * returns true if and only if source file's modification time + * is greater than the cached file's mod-time. Otherwise returns false. + * + * USAGE: + * Should be used something like the following: + * if (needsUpdating(filePath)) + * // Recrunch sourceFile out to destFile. + * + */ + bool needsUpdating(String8 relativePath) const; + + // DATA MEMBERS ==================================================== + + String8 mSourcePath; + String8 mDestPath; + + Vector mExtensions; + + // Each vector of paths contains one entry per PNG file encountered. + // Each entry consists of a path pointing to that PNG. + DefaultKeyedVector mSourceFiles; + DefaultKeyedVector mDestFiles; + + // Pointer to a FileFinder to use + FileFinder* mFileFinder; +}; + +#endif // CRUNCHCACHE_H diff --git a/tools/aapt/DirectoryWalker.h b/tools/aapt/DirectoryWalker.h new file mode 100644 index 0000000000000..88031d04b2dfe --- /dev/null +++ b/tools/aapt/DirectoryWalker.h @@ -0,0 +1,98 @@ +// +// Copyright 2011 The Android Open Source Project +// +// Defines an abstraction for opening a directory on the filesystem and +// iterating through it. + +#ifndef DIRECTORYWALKER_H +#define DIRECTORYWALKER_H + +#include +#include +#include +#include +#include +#include + +#include + +using namespace android; + +// Directory Walker +// This is an abstraction for walking through a directory and getting files +// and descriptions. + +class DirectoryWalker { +public: + virtual ~DirectoryWalker() {}; + virtual bool openDir(String8 path) = 0; + virtual bool openDir(const char* path) = 0; + // Advance to next directory entry + virtual struct dirent* nextEntry() = 0; + // Get the stats for the current entry + virtual struct stat* entryStats() = 0; + // Clean Up + virtual void closeDir() = 0; + // This class is able to replicate itself on the heap + virtual DirectoryWalker* clone() = 0; + + // DATA MEMBERS + // Current directory entry + struct dirent mEntry; + // Stats for that directory entry + struct stat mStats; + // Base path + String8 mBasePath; +}; + +// System Directory Walker +// This is an implementation of the above abstraction that calls +// real system calls and is fully functional. +// functions are inlined since they're very short and simple + +class SystemDirectoryWalker : public DirectoryWalker { + + // Default constructor, copy constructor, and destructor are fine +public: + virtual bool openDir(String8 path) { + mBasePath = path; + dir = NULL; + dir = opendir(mBasePath.string() ); + + if (dir == NULL) + return false; + + return true; + }; + virtual bool openDir(const char* path) { + String8 p(path); + openDir(p); + return true; + }; + // Advance to next directory entry + virtual struct dirent* nextEntry() { + struct dirent* entryPtr = readdir(dir); + if (entryPtr == NULL) + return NULL; + + mEntry = *entryPtr; + // Get stats + String8 fullPath = mBasePath.appendPathCopy(mEntry.d_name); + stat(fullPath.string(),&mStats); + return &mEntry; + }; + // Get the stats for the current entry + virtual struct stat* entryStats() { + return &mStats; + }; + virtual void closeDir() { + closedir(dir); + }; + virtual DirectoryWalker* clone() { + return new SystemDirectoryWalker(*this); + }; +private: + DIR* dir; +}; + +#endif // DIRECTORYWALKER_H diff --git a/tools/aapt/FileFinder.cpp b/tools/aapt/FileFinder.cpp new file mode 100644 index 0000000000000..18775c06863f3 --- /dev/null +++ b/tools/aapt/FileFinder.cpp @@ -0,0 +1,98 @@ +// +// Copyright 2011 The Android Open Source Project +// + +// File Finder implementation. +// Implementation for the functions declared and documented in FileFinder.h + +#include +#include +#include + +#include +#include + +#include "DirectoryWalker.h" +#include "FileFinder.h" + +//#define DEBUG + +using android::String8; + +// Private function to check whether a file is a directory or not +bool isDirectory(const char* filename) { + struct stat fileStat; + if (stat(filename, &fileStat) == -1) { + return false; + } + return(S_ISDIR(fileStat.st_mode)); +} + + +// Private function to check whether a file is a regular file or not +bool isFile(const char* filename) { + struct stat fileStat; + if (stat(filename, &fileStat) == -1) { + return false; + } + return(S_ISREG(fileStat.st_mode)); +} + +bool SystemFileFinder::findFiles(String8 basePath, Vector& extensions, + KeyedVector& fileStore, + DirectoryWalker* dw) +{ + // Scan the directory pointed to by basePath + // check files and recurse into subdirectories. + if (!dw->openDir(basePath)) { + return false; + } + /* + * Go through all directory entries. Check each file using checkAndAddFile + * and recurse into sub-directories. + */ + struct dirent* entry; + while ((entry = dw->nextEntry()) != NULL) { + String8 entryName(entry->d_name); + if (entry->d_name[0] == '.') // Skip hidden files and directories + continue; + + String8 fullPath = basePath.appendPathCopy(entryName); + // If this entry is a directory we'll recurse into it + if (isDirectory(fullPath.string()) ) { + DirectoryWalker* copy = dw->clone(); + findFiles(fullPath, extensions, fileStore,copy); + delete copy; + } + + // If this entry is a file, we'll pass it over to checkAndAddFile + if (isFile(fullPath.string()) ) { + checkAndAddFile(fullPath,dw->entryStats(),extensions,fileStore); + } + } + + // Clean up + dw->closeDir(); + + return true; +} + +void SystemFileFinder::checkAndAddFile(String8 path, const struct stat* stats, + Vector& extensions, + KeyedVector& fileStore) +{ + // Loop over the extensions, checking for a match + bool done = false; + String8 ext(path.getPathExtension()); + ext.toLower(); + for (size_t i = 0; i < extensions.size() && !done; ++i) { + String8 ext2 = extensions[i].getPathExtension(); + ext2.toLower(); + // Compare the extensions. If a match is found, add to storage. + if (ext == ext2) { + done = true; + fileStore.add(path,stats->st_mtime); + } + } +} + diff --git a/tools/aapt/FileFinder.h b/tools/aapt/FileFinder.h new file mode 100644 index 0000000000000..6974aee033a87 --- /dev/null +++ b/tools/aapt/FileFinder.h @@ -0,0 +1,80 @@ +// +// Copyright 2011 The Android Open Source Project +// + +// File Finder. +// This is a collection of useful functions for finding paths and modification +// times of files that match an extension pattern in a directory tree. +// and finding files in it. + +#ifndef FILEFINDER_H +#define FILEFINDER_H + +#include +#include +#include + +#include "DirectoryWalker.h" + +using namespace android; + +// Abstraction to allow for dependency injection. See MockFileFinder.h +// for the testing implementation. +class FileFinder { +public: + virtual bool findFiles(String8 basePath, Vector& extensions, + KeyedVector& fileStore, + DirectoryWalker* dw) = 0; + + virtual ~FileFinder() {}; +}; + +class SystemFileFinder : public FileFinder { +public: + + /* findFiles takes a path, a Vector of extensions, and a destination KeyedVector + * and places path/modification date key/values pointing to + * all files with matching extensions found into the KeyedVector + * PRECONDITIONS + * path is a valid system path + * extensions should include leading "." + * This is not necessary, but the comparison directly + * compares the end of the path string so if the "." + * is excluded there is a small chance you could have + * a false positive match. (For example: extension "png" + * would match a file called "blahblahpng") + * + * POSTCONDITIONS + * fileStore contains (in no guaranteed order) paths to all + * matching files encountered in subdirectories of path + * as keys in the KeyedVector. Each key has the modification time + * of the file as its value. + * + * Calls checkAndAddFile on each file encountered in the directory tree + * Recursively descends into subdirectories. + */ + virtual bool findFiles(String8 basePath, Vector& extensions, + KeyedVector& fileStore, + DirectoryWalker* dw); + +private: + /** + * checkAndAddFile looks at a single file path and stat combo + * to determine whether it is a matching file (by looking at + * the extension) + * + * PRECONDITIONS + * no setup is needed + * + * POSTCONDITIONS + * If the given file has a matching extension then a new entry + * is added to the KeyedVector with the path as the key and the modification + * time as the value. + * + */ + static void checkAndAddFile(String8 path, const struct stat* stats, + Vector& extensions, + KeyedVector& fileStore); + +}; +#endif // FILEFINDER_H diff --git a/tools/aapt/Images.cpp b/tools/aapt/Images.cpp new file mode 100644 index 0000000000000..b2cbf49843af1 --- /dev/null +++ b/tools/aapt/Images.cpp @@ -0,0 +1,1387 @@ +// +// Copyright 2006 The Android Open Source Project +// +// Build resource files from raw assets. +// + +#define PNG_INTERNAL + +#include "Images.h" + +#include +#include + +#include +#include + +#define NOISY(x) //x + +static void +png_write_aapt_file(png_structp png_ptr, png_bytep data, png_size_t length) +{ + AaptFile* aaptfile = (AaptFile*) png_get_io_ptr(png_ptr); + status_t err = aaptfile->writeData(data, length); + if (err != NO_ERROR) { + png_error(png_ptr, "Write Error"); + } +} + + +static void +png_flush_aapt_file(png_structp png_ptr) +{ +} + +// This holds an image as 8bpp RGBA. +struct image_info +{ + image_info() : rows(NULL), is9Patch(false), allocRows(NULL) { } + ~image_info() { + if (rows && rows != allocRows) { + free(rows); + } + if (allocRows) { + for (int i=0; i<(int)allocHeight; i++) { + free(allocRows[i]); + } + free(allocRows); + } + free(info9Patch.xDivs); + free(info9Patch.yDivs); + free(info9Patch.colors); + } + + png_uint_32 width; + png_uint_32 height; + png_bytepp rows; + + // 9-patch info. + bool is9Patch; + Res_png_9patch info9Patch; + + // Layout padding, if relevant + bool haveLayoutBounds; + int32_t layoutBoundsLeft; + int32_t layoutBoundsTop; + int32_t layoutBoundsRight; + int32_t layoutBoundsBottom; + + png_uint_32 allocHeight; + png_bytepp allocRows; +}; + +static void read_png(const char* imageName, + png_structp read_ptr, png_infop read_info, + image_info* outImageInfo) +{ + int color_type; + int bit_depth, interlace_type, compression_type; + int i; + + png_read_info(read_ptr, read_info); + + png_get_IHDR(read_ptr, read_info, &outImageInfo->width, + &outImageInfo->height, &bit_depth, &color_type, + &interlace_type, &compression_type, NULL); + + //printf("Image %s:\n", imageName); + //printf("color_type=%d, bit_depth=%d, interlace_type=%d, compression_type=%d\n", + // color_type, bit_depth, interlace_type, compression_type); + + if (color_type == PNG_COLOR_TYPE_PALETTE) + png_set_palette_to_rgb(read_ptr); + + if (color_type == PNG_COLOR_TYPE_GRAY && bit_depth < 8) + png_set_expand_gray_1_2_4_to_8(read_ptr); + + if (png_get_valid(read_ptr, read_info, PNG_INFO_tRNS)) { + //printf("Has PNG_INFO_tRNS!\n"); + png_set_tRNS_to_alpha(read_ptr); + } + + if (bit_depth == 16) + png_set_strip_16(read_ptr); + + if ((color_type&PNG_COLOR_MASK_ALPHA) == 0) + png_set_add_alpha(read_ptr, 0xFF, PNG_FILLER_AFTER); + + if (color_type == PNG_COLOR_TYPE_GRAY || color_type == PNG_COLOR_TYPE_GRAY_ALPHA) + png_set_gray_to_rgb(read_ptr); + + png_read_update_info(read_ptr, read_info); + + outImageInfo->rows = (png_bytepp)malloc( + outImageInfo->height * sizeof(png_bytep)); + outImageInfo->allocHeight = outImageInfo->height; + outImageInfo->allocRows = outImageInfo->rows; + + png_set_rows(read_ptr, read_info, outImageInfo->rows); + + for (i = 0; i < (int)outImageInfo->height; i++) + { + outImageInfo->rows[i] = (png_bytep) + malloc(png_get_rowbytes(read_ptr, read_info)); + } + + png_read_image(read_ptr, outImageInfo->rows); + + png_read_end(read_ptr, read_info); + + NOISY(printf("Image %s: w=%d, h=%d, d=%d, colors=%d, inter=%d, comp=%d\n", + imageName, + (int)outImageInfo->width, (int)outImageInfo->height, + bit_depth, color_type, + interlace_type, compression_type)); + + png_get_IHDR(read_ptr, read_info, &outImageInfo->width, + &outImageInfo->height, &bit_depth, &color_type, + &interlace_type, &compression_type, NULL); +} + +#define COLOR_TRANSPARENT 0 +#define COLOR_WHITE 0xFFFFFFFF +#define COLOR_TICK 0xFF000000 +#define COLOR_LAYOUT_BOUNDS_TICK 0xFF0000FF + +enum { + TICK_TYPE_NONE, + TICK_TYPE_TICK, + TICK_TYPE_LAYOUT_BOUNDS, + TICK_TYPE_BOTH +}; + +static int tick_type(png_bytep p, bool transparent, const char** outError) +{ + png_uint_32 color = p[0] | (p[1] << 8) | (p[2] << 16) | (p[3] << 24); + + if (transparent) { + if (p[3] == 0) { + return TICK_TYPE_NONE; + } + if (color == COLOR_LAYOUT_BOUNDS_TICK) { + return TICK_TYPE_LAYOUT_BOUNDS; + } + if (color == COLOR_TICK) { + return TICK_TYPE_TICK; + } + + // Error cases + if (p[3] != 0xff) { + *outError = "Frame pixels must be either solid or transparent (not intermediate alphas)"; + return TICK_TYPE_NONE; + } + if (p[0] != 0 || p[1] != 0 || p[2] != 0) { + *outError = "Ticks in transparent frame must be black or red"; + } + return TICK_TYPE_TICK; + } + + if (p[3] != 0xFF) { + *outError = "White frame must be a solid color (no alpha)"; + } + if (color == COLOR_WHITE) { + return TICK_TYPE_NONE; + } + if (color == COLOR_TICK) { + return TICK_TYPE_TICK; + } + if (color == COLOR_LAYOUT_BOUNDS_TICK) { + return TICK_TYPE_LAYOUT_BOUNDS; + } + + if (p[0] != 0 || p[1] != 0 || p[2] != 0) { + *outError = "Ticks in white frame must be black or red"; + return TICK_TYPE_NONE; + } + return TICK_TYPE_TICK; +} + +enum { + TICK_START, + TICK_INSIDE_1, + TICK_OUTSIDE_1 +}; + +static status_t get_horizontal_ticks( + png_bytep row, int width, bool transparent, bool required, + int32_t* outLeft, int32_t* outRight, const char** outError, + uint8_t* outDivs, bool multipleAllowed) +{ + int i; + *outLeft = *outRight = -1; + int state = TICK_START; + bool found = false; + + for (i=1; i 1) { + (*outRight)++; + i--; + int tick = tick_type(row+i*4, transparent, outError); + if (tick != TICK_TYPE_LAYOUT_BOUNDS) { + break; + } + } + } + + return NO_ERROR; +} + +static status_t get_vertical_layout_bounds_ticks( + png_bytepp rows, int offset, int height, bool transparent, bool required, + int32_t* outTop, int32_t* outBottom, const char** outError) +{ + int i; + *outTop = *outBottom = 0; + + // Look for top tick + if (TICK_TYPE_LAYOUT_BOUNDS == tick_type(rows[1] + offset, transparent, outError)) { + // Starting with a layout padding tick + i = 1; + while (i < height - 1) { + (*outTop)++; + i++; + int tick = tick_type(rows[i] + offset, transparent, outError); + if (tick != TICK_TYPE_LAYOUT_BOUNDS) { + break; + } + } + } + + // Look for bottom tick + if (TICK_TYPE_LAYOUT_BOUNDS == tick_type(rows[height - 2] + offset, transparent, outError)) { + // Ending with a layout padding tick + i = height - 2; + while (i > 1) { + (*outBottom)++; + i--; + int tick = tick_type(rows[i] + offset, transparent, outError); + if (tick != TICK_TYPE_LAYOUT_BOUNDS) { + break; + } + } + } + + return NO_ERROR; +} + + +static uint32_t get_color( + png_bytepp rows, int left, int top, int right, int bottom) +{ + png_bytep color = rows[top] + left*4; + + if (left > right || top > bottom) { + return Res_png_9patch::TRANSPARENT_COLOR; + } + + while (top <= bottom) { + for (int i = left; i <= right; i++) { + png_bytep p = rows[top]+i*4; + if (color[3] == 0) { + if (p[3] != 0) { + return Res_png_9patch::NO_COLOR; + } + } else if (p[0] != color[0] || p[1] != color[1] + || p[2] != color[2] || p[3] != color[3]) { + return Res_png_9patch::NO_COLOR; + } + } + top++; + } + + if (color[3] == 0) { + return Res_png_9patch::TRANSPARENT_COLOR; + } + return (color[3]<<24) | (color[0]<<16) | (color[1]<<8) | color[2]; +} + +static void select_patch( + int which, int front, int back, int size, int* start, int* end) +{ + switch (which) { + case 0: + *start = 0; + *end = front-1; + break; + case 1: + *start = front; + *end = back-1; + break; + case 2: + *start = back; + *end = size-1; + break; + } +} + +static uint32_t get_color(image_info* image, int hpatch, int vpatch) +{ + int left, right, top, bottom; + select_patch( + hpatch, image->info9Patch.xDivs[0], image->info9Patch.xDivs[1], + image->width, &left, &right); + select_patch( + vpatch, image->info9Patch.yDivs[0], image->info9Patch.yDivs[1], + image->height, &top, &bottom); + //printf("Selecting h=%d v=%d: (%d,%d)-(%d,%d)\n", + // hpatch, vpatch, left, top, right, bottom); + const uint32_t c = get_color(image->rows, left, top, right, bottom); + NOISY(printf("Color in (%d,%d)-(%d,%d): #%08x\n", left, top, right, bottom, c)); + return c; +} + +static status_t do_9patch(const char* imageName, image_info* image) +{ + image->is9Patch = true; + + int W = image->width; + int H = image->height; + int i, j; + + int maxSizeXDivs = W * sizeof(int32_t); + int maxSizeYDivs = H * sizeof(int32_t); + int32_t* xDivs = (int32_t*) malloc(maxSizeXDivs); + int32_t* yDivs = (int32_t*) malloc(maxSizeYDivs); + uint8_t numXDivs = 0; + uint8_t numYDivs = 0; + int8_t numColors; + int numRows; + int numCols; + int top; + int left; + int right; + int bottom; + memset(xDivs, -1, maxSizeXDivs); + memset(yDivs, -1, maxSizeYDivs); + image->info9Patch.paddingLeft = image->info9Patch.paddingRight = + image->info9Patch.paddingTop = image->info9Patch.paddingBottom = -1; + + image->layoutBoundsLeft = image->layoutBoundsRight = + image->layoutBoundsTop = image->layoutBoundsBottom = 0; + + png_bytep p = image->rows[0]; + bool transparent = p[3] == 0; + bool hasColor = false; + + const char* errorMsg = NULL; + int errorPixel = -1; + const char* errorEdge = NULL; + + int colorIndex = 0; + + // Validate size... + if (W < 3 || H < 3) { + errorMsg = "Image must be at least 3x3 (1x1 without frame) pixels"; + goto getout; + } + + // Validate frame... + if (!transparent && + (p[0] != 0xFF || p[1] != 0xFF || p[2] != 0xFF || p[3] != 0xFF)) { + errorMsg = "Must have one-pixel frame that is either transparent or white"; + goto getout; + } + + // Find left and right of sizing areas... + if (get_horizontal_ticks(p, W, transparent, true, &xDivs[0], + &xDivs[1], &errorMsg, &numXDivs, true) != NO_ERROR) { + errorPixel = xDivs[0]; + errorEdge = "top"; + goto getout; + } + + // Find top and bottom of sizing areas... + if (get_vertical_ticks(image->rows, 0, H, transparent, true, &yDivs[0], + &yDivs[1], &errorMsg, &numYDivs, true) != NO_ERROR) { + errorPixel = yDivs[0]; + errorEdge = "left"; + goto getout; + } + + // Find left and right of padding area... + if (get_horizontal_ticks(image->rows[H-1], W, transparent, false, &image->info9Patch.paddingLeft, + &image->info9Patch.paddingRight, &errorMsg, NULL, false) != NO_ERROR) { + errorPixel = image->info9Patch.paddingLeft; + errorEdge = "bottom"; + goto getout; + } + + // Find top and bottom of padding area... + if (get_vertical_ticks(image->rows, (W-1)*4, H, transparent, false, &image->info9Patch.paddingTop, + &image->info9Patch.paddingBottom, &errorMsg, NULL, false) != NO_ERROR) { + errorPixel = image->info9Patch.paddingTop; + errorEdge = "right"; + goto getout; + } + + // Find left and right of layout padding... + get_horizontal_layout_bounds_ticks(image->rows[H-1], W, transparent, false, + &image->layoutBoundsLeft, + &image->layoutBoundsRight, &errorMsg); + + get_vertical_layout_bounds_ticks(image->rows, (W-1)*4, H, transparent, false, + &image->layoutBoundsTop, + &image->layoutBoundsBottom, &errorMsg); + + image->haveLayoutBounds = image->layoutBoundsLeft != 0 + || image->layoutBoundsRight != 0 + || image->layoutBoundsTop != 0 + || image->layoutBoundsBottom != 0; + + if (image->haveLayoutBounds) { + NOISY(printf("layoutBounds=%d %d %d %d\n", image->layoutBoundsLeft, image->layoutBoundsTop, + image->layoutBoundsRight, image->layoutBoundsBottom)); + } + + // Copy patch data into image + image->info9Patch.numXDivs = numXDivs; + image->info9Patch.numYDivs = numYDivs; + image->info9Patch.xDivs = xDivs; + image->info9Patch.yDivs = yDivs; + + // If padding is not yet specified, take values from size. + if (image->info9Patch.paddingLeft < 0) { + image->info9Patch.paddingLeft = xDivs[0]; + image->info9Patch.paddingRight = W - 2 - xDivs[1]; + } else { + // Adjust value to be correct! + image->info9Patch.paddingRight = W - 2 - image->info9Patch.paddingRight; + } + if (image->info9Patch.paddingTop < 0) { + image->info9Patch.paddingTop = yDivs[0]; + image->info9Patch.paddingBottom = H - 2 - yDivs[1]; + } else { + // Adjust value to be correct! + image->info9Patch.paddingBottom = H - 2 - image->info9Patch.paddingBottom; + } + + NOISY(printf("Size ticks for %s: x0=%d, x1=%d, y0=%d, y1=%d\n", imageName, + image->info9Patch.xDivs[0], image->info9Patch.xDivs[1], + image->info9Patch.yDivs[0], image->info9Patch.yDivs[1])); + NOISY(printf("padding ticks for %s: l=%d, r=%d, t=%d, b=%d\n", imageName, + image->info9Patch.paddingLeft, image->info9Patch.paddingRight, + image->info9Patch.paddingTop, image->info9Patch.paddingBottom)); + + // Remove frame from image. + image->rows = (png_bytepp)malloc((H-2) * sizeof(png_bytep)); + for (i=0; i<(H-2); i++) { + image->rows[i] = image->allocRows[i+1]; + memmove(image->rows[i], image->rows[i]+4, (W-2)*4); + } + image->width -= 2; + W = image->width; + image->height -= 2; + H = image->height; + + // Figure out the number of rows and columns in the N-patch + numCols = numXDivs + 1; + if (xDivs[0] == 0) { // Column 1 is strechable + numCols--; + } + if (xDivs[numXDivs - 1] == W) { + numCols--; + } + numRows = numYDivs + 1; + if (yDivs[0] == 0) { // Row 1 is strechable + numRows--; + } + if (yDivs[numYDivs - 1] == H) { + numRows--; + } + + // Make sure the amount of rows and columns will fit in the number of + // colors we can use in the 9-patch format. + if (numRows * numCols > 0x7F) { + errorMsg = "Too many rows and columns in 9-patch perimeter"; + goto getout; + } + + numColors = numRows * numCols; + image->info9Patch.numColors = numColors; + image->info9Patch.colors = (uint32_t*)malloc(numColors * sizeof(uint32_t)); + + // Fill in color information for each patch. + + uint32_t c; + top = 0; + + // The first row always starts with the top being at y=0 and the bottom + // being either yDivs[1] (if yDivs[0]=0) of yDivs[0]. In the former case + // the first row is stretchable along the Y axis, otherwise it is fixed. + // The last row always ends with the bottom being bitmap.height and the top + // being either yDivs[numYDivs-2] (if yDivs[numYDivs-1]=bitmap.height) or + // yDivs[numYDivs-1]. In the former case the last row is stretchable along + // the Y axis, otherwise it is fixed. + // + // The first and last columns are similarly treated with respect to the X + // axis. + // + // The above is to help explain some of the special casing that goes on the + // code below. + + // The initial yDiv and whether the first row is considered stretchable or + // not depends on whether yDiv[0] was zero or not. + for (j = (yDivs[0] == 0 ? 1 : 0); + j <= numYDivs && top < H; + j++) { + if (j == numYDivs) { + bottom = H; + } else { + bottom = yDivs[j]; + } + left = 0; + // The initial xDiv and whether the first column is considered + // stretchable or not depends on whether xDiv[0] was zero or not. + for (i = xDivs[0] == 0 ? 1 : 0; + i <= numXDivs && left < W; + i++) { + if (i == numXDivs) { + right = W; + } else { + right = xDivs[i]; + } + c = get_color(image->rows, left, top, right - 1, bottom - 1); + image->info9Patch.colors[colorIndex++] = c; + NOISY(if (c != Res_png_9patch::NO_COLOR) hasColor = true); + left = right; + } + top = bottom; + } + + assert(colorIndex == numColors); + + for (i=0; iinfo9Patch.colors[i]); + if (i == numColors - 1) printf("\n"); + } + } + + image->is9Patch = true; + image->info9Patch.deviceToFile(); + +getout: + if (errorMsg) { + fprintf(stderr, + "ERROR: 9-patch image %s malformed.\n" + " %s.\n", imageName, errorMsg); + if (errorEdge != NULL) { + if (errorPixel >= 0) { + fprintf(stderr, + " Found at pixel #%d along %s edge.\n", errorPixel, errorEdge); + } else { + fprintf(stderr, + " Found along %s edge.\n", errorEdge); + } + } + return UNKNOWN_ERROR; + } + return NO_ERROR; +} + +static void checkNinePatchSerialization(Res_png_9patch* inPatch, void * data) +{ + if (sizeof(void*) != sizeof(int32_t)) { + // can't deserialize on a non-32 bit system + return; + } + size_t patchSize = inPatch->serializedSize(); + void * newData = malloc(patchSize); + memcpy(newData, data, patchSize); + Res_png_9patch* outPatch = inPatch->deserialize(newData); + // deserialization is done in place, so outPatch == newData + assert(outPatch == newData); + assert(outPatch->numXDivs == inPatch->numXDivs); + assert(outPatch->numYDivs == inPatch->numYDivs); + assert(outPatch->paddingLeft == inPatch->paddingLeft); + assert(outPatch->paddingRight == inPatch->paddingRight); + assert(outPatch->paddingTop == inPatch->paddingTop); + assert(outPatch->paddingBottom == inPatch->paddingBottom); + for (int i = 0; i < outPatch->numXDivs; i++) { + assert(outPatch->xDivs[i] == inPatch->xDivs[i]); + } + for (int i = 0; i < outPatch->numYDivs; i++) { + assert(outPatch->yDivs[i] == inPatch->yDivs[i]); + } + for (int i = 0; i < outPatch->numColors; i++) { + assert(outPatch->colors[i] == inPatch->colors[i]); + } + free(newData); +} + +static bool patch_equals(Res_png_9patch& patch1, Res_png_9patch& patch2) { + if (!(patch1.numXDivs == patch2.numXDivs && + patch1.numYDivs == patch2.numYDivs && + patch1.numColors == patch2.numColors && + patch1.paddingLeft == patch2.paddingLeft && + patch1.paddingRight == patch2.paddingRight && + patch1.paddingTop == patch2.paddingTop && + patch1.paddingBottom == patch2.paddingBottom)) { + return false; + } + for (int i = 0; i < patch1.numColors; i++) { + if (patch1.colors[i] != patch2.colors[i]) { + return false; + } + } + for (int i = 0; i < patch1.numXDivs; i++) { + if (patch1.xDivs[i] != patch2.xDivs[i]) { + return false; + } + } + for (int i = 0; i < patch1.numYDivs; i++) { + if (patch1.yDivs[i] != patch2.yDivs[i]) { + return false; + } + } + return true; +} + +static void dump_image(int w, int h, png_bytepp rows, int color_type) +{ + int i, j, rr, gg, bb, aa; + + int bpp; + if (color_type == PNG_COLOR_TYPE_PALETTE || color_type == PNG_COLOR_TYPE_GRAY) { + bpp = 1; + } else if (color_type == PNG_COLOR_TYPE_GRAY_ALPHA) { + bpp = 2; + } else if (color_type == PNG_COLOR_TYPE_RGB || color_type == PNG_COLOR_TYPE_RGB_ALPHA) { + // We use a padding byte even when there is no alpha + bpp = 4; + } else { + printf("Unknown color type %d.\n", color_type); + } + + for (j = 0; j < h; j++) { + png_bytep row = rows[j]; + for (i = 0; i < w; i++) { + rr = row[0]; + gg = row[1]; + bb = row[2]; + aa = row[3]; + row += bpp; + + if (i == 0) { + printf("Row %d:", j); + } + switch (bpp) { + case 1: + printf(" (%d)", rr); + break; + case 2: + printf(" (%d %d", rr, gg); + break; + case 3: + printf(" (%d %d %d)", rr, gg, bb); + break; + case 4: + printf(" (%d %d %d %d)", rr, gg, bb, aa); + break; + } + if (i == (w - 1)) { + NOISY(printf("\n")); + } + } + } +} + +#define MAX(a,b) ((a)>(b)?(a):(b)) +#define ABS(a) ((a)<0?-(a):(a)) + +static void analyze_image(const char *imageName, image_info &imageInfo, int grayscaleTolerance, + png_colorp rgbPalette, png_bytep alphaPalette, + int *paletteEntries, bool *hasTransparency, int *colorType, + png_bytepp outRows) +{ + int w = imageInfo.width; + int h = imageInfo.height; + int i, j, rr, gg, bb, aa, idx; + uint32_t colors[256], col; + int num_colors = 0; + int maxGrayDeviation = 0; + + bool isOpaque = true; + bool isPalette = true; + bool isGrayscale = true; + + // Scan the entire image and determine if: + // 1. Every pixel has R == G == B (grayscale) + // 2. Every pixel has A == 255 (opaque) + // 3. There are no more than 256 distinct RGBA colors + + // NOISY(printf("Initial image data:\n")); + // dump_image(w, h, imageInfo.rows, PNG_COLOR_TYPE_RGB_ALPHA); + + for (j = 0; j < h; j++) { + png_bytep row = imageInfo.rows[j]; + png_bytep out = outRows[j]; + for (i = 0; i < w; i++) { + rr = *row++; + gg = *row++; + bb = *row++; + aa = *row++; + + int odev = maxGrayDeviation; + maxGrayDeviation = MAX(ABS(rr - gg), maxGrayDeviation); + maxGrayDeviation = MAX(ABS(gg - bb), maxGrayDeviation); + maxGrayDeviation = MAX(ABS(bb - rr), maxGrayDeviation); + if (maxGrayDeviation > odev) { + NOISY(printf("New max dev. = %d at pixel (%d, %d) = (%d %d %d %d)\n", + maxGrayDeviation, i, j, rr, gg, bb, aa)); + } + + // Check if image is really grayscale + if (isGrayscale) { + if (rr != gg || rr != bb) { + NOISY(printf("Found a non-gray pixel at %d, %d = (%d %d %d %d)\n", + i, j, rr, gg, bb, aa)); + isGrayscale = false; + } + } + + // Check if image is really opaque + if (isOpaque) { + if (aa != 0xff) { + NOISY(printf("Found a non-opaque pixel at %d, %d = (%d %d %d %d)\n", + i, j, rr, gg, bb, aa)); + isOpaque = false; + } + } + + // Check if image is really <= 256 colors + if (isPalette) { + col = (uint32_t) ((rr << 24) | (gg << 16) | (bb << 8) | aa); + bool match = false; + for (idx = 0; idx < num_colors; idx++) { + if (colors[idx] == col) { + match = true; + break; + } + } + + // Write the palette index for the pixel to outRows optimistically + // We might overwrite it later if we decide to encode as gray or + // gray + alpha + *out++ = idx; + if (!match) { + if (num_colors == 256) { + NOISY(printf("Found 257th color at %d, %d\n", i, j)); + isPalette = false; + } else { + colors[num_colors++] = col; + } + } + } + } + } + + *paletteEntries = 0; + *hasTransparency = !isOpaque; + int bpp = isOpaque ? 3 : 4; + int paletteSize = w * h + bpp * num_colors; + + NOISY(printf("isGrayscale = %s\n", isGrayscale ? "true" : "false")); + NOISY(printf("isOpaque = %s\n", isOpaque ? "true" : "false")); + NOISY(printf("isPalette = %s\n", isPalette ? "true" : "false")); + NOISY(printf("Size w/ palette = %d, gray+alpha = %d, rgb(a) = %d\n", + paletteSize, 2 * w * h, bpp * w * h)); + NOISY(printf("Max gray deviation = %d, tolerance = %d\n", maxGrayDeviation, grayscaleTolerance)); + + // Choose the best color type for the image. + // 1. Opaque gray - use COLOR_TYPE_GRAY at 1 byte/pixel + // 2. Gray + alpha - use COLOR_TYPE_PALETTE if the number of distinct combinations + // is sufficiently small, otherwise use COLOR_TYPE_GRAY_ALPHA + // 3. RGB(A) - use COLOR_TYPE_PALETTE if the number of distinct colors is sufficiently + // small, otherwise use COLOR_TYPE_RGB{_ALPHA} + if (isGrayscale) { + if (isOpaque) { + *colorType = PNG_COLOR_TYPE_GRAY; // 1 byte/pixel + } else { + // Use a simple heuristic to determine whether using a palette will + // save space versus using gray + alpha for each pixel. + // This doesn't take into account chunk overhead, filtering, LZ + // compression, etc. + if (isPalette && (paletteSize < 2 * w * h)) { + *colorType = PNG_COLOR_TYPE_PALETTE; // 1 byte/pixel + 4 bytes/color + } else { + *colorType = PNG_COLOR_TYPE_GRAY_ALPHA; // 2 bytes per pixel + } + } + } else if (isPalette && (paletteSize < bpp * w * h)) { + *colorType = PNG_COLOR_TYPE_PALETTE; + } else { + if (maxGrayDeviation <= grayscaleTolerance) { + printf("%s: forcing image to gray (max deviation = %d)\n", imageName, maxGrayDeviation); + *colorType = isOpaque ? PNG_COLOR_TYPE_GRAY : PNG_COLOR_TYPE_GRAY_ALPHA; + } else { + *colorType = isOpaque ? PNG_COLOR_TYPE_RGB : PNG_COLOR_TYPE_RGB_ALPHA; + } + } + + // Perform postprocessing of the image or palette data based on the final + // color type chosen + + if (*colorType == PNG_COLOR_TYPE_PALETTE) { + // Create separate RGB and Alpha palettes and set the number of colors + *paletteEntries = num_colors; + + // Create the RGB and alpha palettes + for (int idx = 0; idx < num_colors; idx++) { + col = colors[idx]; + rgbPalette[idx].red = (png_byte) ((col >> 24) & 0xff); + rgbPalette[idx].green = (png_byte) ((col >> 16) & 0xff); + rgbPalette[idx].blue = (png_byte) ((col >> 8) & 0xff); + alphaPalette[idx] = (png_byte) (col & 0xff); + } + } else if (*colorType == PNG_COLOR_TYPE_GRAY || *colorType == PNG_COLOR_TYPE_GRAY_ALPHA) { + // If the image is gray or gray + alpha, compact the pixels into outRows + for (j = 0; j < h; j++) { + png_bytep row = imageInfo.rows[j]; + png_bytep out = outRows[j]; + for (i = 0; i < w; i++) { + rr = *row++; + gg = *row++; + bb = *row++; + aa = *row++; + + if (isGrayscale) { + *out++ = rr; + } else { + *out++ = (png_byte) (rr * 0.2126f + gg * 0.7152f + bb * 0.0722f); + } + if (!isOpaque) { + *out++ = aa; + } + } + } + } +} + + +static void write_png(const char* imageName, + png_structp write_ptr, png_infop write_info, + image_info& imageInfo, int grayscaleTolerance) +{ + bool optimize = true; + png_uint_32 width, height; + int color_type; + int bit_depth, interlace_type, compression_type; + int i; + + png_unknown_chunk unknowns[2]; + unknowns[0].data = NULL; + unknowns[1].data = NULL; + + png_bytepp outRows = (png_bytepp) malloc((int) imageInfo.height * sizeof(png_bytep)); + if (outRows == (png_bytepp) 0) { + printf("Can't allocate output buffer!\n"); + exit(1); + } + for (i = 0; i < (int) imageInfo.height; i++) { + outRows[i] = (png_bytep) malloc(2 * (int) imageInfo.width); + if (outRows[i] == (png_bytep) 0) { + printf("Can't allocate output buffer!\n"); + exit(1); + } + } + + png_set_compression_level(write_ptr, Z_BEST_COMPRESSION); + + NOISY(printf("Writing image %s: w = %d, h = %d\n", imageName, + (int) imageInfo.width, (int) imageInfo.height)); + + png_color rgbPalette[256]; + png_byte alphaPalette[256]; + bool hasTransparency; + int paletteEntries; + + analyze_image(imageName, imageInfo, grayscaleTolerance, rgbPalette, alphaPalette, + &paletteEntries, &hasTransparency, &color_type, outRows); + + // If the image is a 9-patch, we need to preserve it as a ARGB file to make + // sure the pixels will not be pre-dithered/clamped until we decide they are + if (imageInfo.is9Patch && (color_type == PNG_COLOR_TYPE_RGB || + color_type == PNG_COLOR_TYPE_GRAY || color_type == PNG_COLOR_TYPE_PALETTE)) { + color_type = PNG_COLOR_TYPE_RGB_ALPHA; + } + + switch (color_type) { + case PNG_COLOR_TYPE_PALETTE: + NOISY(printf("Image %s has %d colors%s, using PNG_COLOR_TYPE_PALETTE\n", + imageName, paletteEntries, + hasTransparency ? " (with alpha)" : "")); + break; + case PNG_COLOR_TYPE_GRAY: + NOISY(printf("Image %s is opaque gray, using PNG_COLOR_TYPE_GRAY\n", imageName)); + break; + case PNG_COLOR_TYPE_GRAY_ALPHA: + NOISY(printf("Image %s is gray + alpha, using PNG_COLOR_TYPE_GRAY_ALPHA\n", imageName)); + break; + case PNG_COLOR_TYPE_RGB: + NOISY(printf("Image %s is opaque RGB, using PNG_COLOR_TYPE_RGB\n", imageName)); + break; + case PNG_COLOR_TYPE_RGB_ALPHA: + NOISY(printf("Image %s is RGB + alpha, using PNG_COLOR_TYPE_RGB_ALPHA\n", imageName)); + break; + } + + png_set_IHDR(write_ptr, write_info, imageInfo.width, imageInfo.height, + 8, color_type, PNG_INTERLACE_NONE, + PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT); + + if (color_type == PNG_COLOR_TYPE_PALETTE) { + png_set_PLTE(write_ptr, write_info, rgbPalette, paletteEntries); + if (hasTransparency) { + png_set_tRNS(write_ptr, write_info, alphaPalette, paletteEntries, (png_color_16p) 0); + } + png_set_filter(write_ptr, 0, PNG_NO_FILTERS); + } else { + png_set_filter(write_ptr, 0, PNG_ALL_FILTERS); + } + + if (imageInfo.is9Patch) { + int chunk_count = 1 + (imageInfo.haveLayoutBounds ? 1 : 0); + int p_index = imageInfo.haveLayoutBounds ? 1 : 0; + int b_index = 0; + png_byte *chunk_names = imageInfo.haveLayoutBounds + ? (png_byte*)"npLb\0npTc\0" + : (png_byte*)"npTc"; + NOISY(printf("Adding 9-patch info...\n")); + strcpy((char*)unknowns[p_index].name, "npTc"); + unknowns[p_index].data = (png_byte*)imageInfo.info9Patch.serialize(); + unknowns[p_index].size = imageInfo.info9Patch.serializedSize(); + // TODO: remove the check below when everything works + checkNinePatchSerialization(&imageInfo.info9Patch, unknowns[p_index].data); + + if (imageInfo.haveLayoutBounds) { + int chunk_size = sizeof(png_uint_32) * 4; + strcpy((char*)unknowns[b_index].name, "npLb"); + unknowns[b_index].data = (png_byte*) calloc(chunk_size, 1); + memcpy(unknowns[b_index].data, &imageInfo.layoutBoundsLeft, chunk_size); + unknowns[b_index].size = chunk_size; + } + + for (int i = 0; i < chunk_count; i++) { + unknowns[i].location = PNG_HAVE_PLTE; + } + png_set_keep_unknown_chunks(write_ptr, PNG_HANDLE_CHUNK_ALWAYS, + chunk_names, chunk_count); + png_set_unknown_chunks(write_ptr, write_info, unknowns, chunk_count); +#if PNG_LIBPNG_VER < 10600 + /* Deal with unknown chunk location bug in 1.5.x and earlier */ + png_set_unknown_chunk_location(write_ptr, write_info, 0, PNG_HAVE_PLTE); + if (imageInfo.haveLayoutBounds) { + png_set_unknown_chunk_location(write_ptr, write_info, 1, PNG_HAVE_PLTE); + } +#endif + } + + + png_write_info(write_ptr, write_info); + + png_bytepp rows; + if (color_type == PNG_COLOR_TYPE_RGB || color_type == PNG_COLOR_TYPE_RGB_ALPHA) { + if (color_type == PNG_COLOR_TYPE_RGB) { + png_set_filler(write_ptr, 0, PNG_FILLER_AFTER); + } + rows = imageInfo.rows; + } else { + rows = outRows; + } + png_write_image(write_ptr, rows); + +// NOISY(printf("Final image data:\n")); +// dump_image(imageInfo.width, imageInfo.height, rows, color_type); + + png_write_end(write_ptr, write_info); + + for (i = 0; i < (int) imageInfo.height; i++) { + free(outRows[i]); + } + free(outRows); + free(unknowns[0].data); + free(unknowns[1].data); + + png_get_IHDR(write_ptr, write_info, &width, &height, + &bit_depth, &color_type, &interlace_type, + &compression_type, NULL); + + NOISY(printf("Image written: w=%d, h=%d, d=%d, colors=%d, inter=%d, comp=%d\n", + (int)width, (int)height, bit_depth, color_type, interlace_type, + compression_type)); +} + +status_t preProcessImage(const Bundle* bundle, const sp& assets, + const sp& file, String8* outNewLeafName) +{ + String8 ext(file->getPath().getPathExtension()); + + // We currently only process PNG images. + if (strcmp(ext.string(), ".png") != 0) { + return NO_ERROR; + } + + // Example of renaming a file: + //*outNewLeafName = file->getPath().getBasePath().getFileName(); + //outNewLeafName->append(".nupng"); + + String8 printableName(file->getPrintableSource()); + + if (bundle->getVerbose()) { + printf("Processing image: %s\n", printableName.string()); + } + + png_structp read_ptr = NULL; + png_infop read_info = NULL; + FILE* fp; + + image_info imageInfo; + + png_structp write_ptr = NULL; + png_infop write_info = NULL; + + status_t error = UNKNOWN_ERROR; + + const size_t nameLen = file->getPath().length(); + + fp = fopen(file->getSourceFile().string(), "rb"); + if (fp == NULL) { + fprintf(stderr, "%s: ERROR: Unable to open PNG file\n", printableName.string()); + goto bail; + } + + read_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, 0, (png_error_ptr)NULL, + (png_error_ptr)NULL); + if (!read_ptr) { + goto bail; + } + + read_info = png_create_info_struct(read_ptr); + if (!read_info) { + goto bail; + } + + if (setjmp(png_jmpbuf(read_ptr))) { + goto bail; + } + + png_init_io(read_ptr, fp); + + read_png(printableName.string(), read_ptr, read_info, &imageInfo); + + if (nameLen > 6) { + const char* name = file->getPath().string(); + if (name[nameLen-5] == '9' && name[nameLen-6] == '.') { + if (do_9patch(printableName.string(), &imageInfo) != NO_ERROR) { + goto bail; + } + } + } + + write_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, 0, (png_error_ptr)NULL, + (png_error_ptr)NULL); + if (!write_ptr) + { + goto bail; + } + + write_info = png_create_info_struct(write_ptr); + if (!write_info) + { + goto bail; + } + + png_set_write_fn(write_ptr, (void*)file.get(), + png_write_aapt_file, png_flush_aapt_file); + + if (setjmp(png_jmpbuf(write_ptr))) + { + goto bail; + } + + write_png(printableName.string(), write_ptr, write_info, imageInfo, + bundle->getGrayscaleTolerance()); + + error = NO_ERROR; + + if (bundle->getVerbose()) { + fseek(fp, 0, SEEK_END); + size_t oldSize = (size_t)ftell(fp); + size_t newSize = file->getSize(); + float factor = ((float)newSize)/oldSize; + int percent = (int)(factor*100); + printf(" (processed image %s: %d%% size of source)\n", printableName.string(), percent); + } + +bail: + if (read_ptr) { + png_destroy_read_struct(&read_ptr, &read_info, (png_infopp)NULL); + } + if (fp) { + fclose(fp); + } + if (write_ptr) { + png_destroy_write_struct(&write_ptr, &write_info); + } + + if (error != NO_ERROR) { + fprintf(stderr, "ERROR: Failure processing PNG image %s\n", + file->getPrintableSource().string()); + } + return error; +} + +status_t preProcessImageToCache(const Bundle* bundle, const String8& source, const String8& dest) +{ + png_structp read_ptr = NULL; + png_infop read_info = NULL; + + FILE* fp; + + image_info imageInfo; + + png_structp write_ptr = NULL; + png_infop write_info = NULL; + + status_t error = UNKNOWN_ERROR; + + if (bundle->getVerbose()) { + printf("Processing image to cache: %s => %s\n", source.string(), dest.string()); + } + + // Get a file handler to read from + fp = fopen(source.string(),"rb"); + if (fp == NULL) { + fprintf(stderr, "%s ERROR: Unable to open PNG file\n", source.string()); + return error; + } + + // Call libpng to get a struct to read image data into + read_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); + if (!read_ptr) { + fclose(fp); + png_destroy_read_struct(&read_ptr, &read_info,NULL); + return error; + } + + // Call libpng to get a struct to read image info into + read_info = png_create_info_struct(read_ptr); + if (!read_info) { + fclose(fp); + png_destroy_read_struct(&read_ptr, &read_info,NULL); + return error; + } + + // Set a jump point for libpng to long jump back to on error + if (setjmp(png_jmpbuf(read_ptr))) { + fclose(fp); + png_destroy_read_struct(&read_ptr, &read_info,NULL); + return error; + } + + // Set up libpng to read from our file. + png_init_io(read_ptr,fp); + + // Actually read data from the file + read_png(source.string(), read_ptr, read_info, &imageInfo); + + // We're done reading so we can clean up + // Find old file size before releasing handle + fseek(fp, 0, SEEK_END); + size_t oldSize = (size_t)ftell(fp); + fclose(fp); + png_destroy_read_struct(&read_ptr, &read_info,NULL); + + // Check to see if we're dealing with a 9-patch + // If we are, process appropriately + if (source.getBasePath().getPathExtension() == ".9") { + if (do_9patch(source.string(), &imageInfo) != NO_ERROR) { + return error; + } + } + + // Call libpng to create a structure to hold the processed image data + // that can be written to disk + write_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); + if (!write_ptr) { + png_destroy_write_struct(&write_ptr, &write_info); + return error; + } + + // Call libpng to create a structure to hold processed image info that can + // be written to disk + write_info = png_create_info_struct(write_ptr); + if (!write_info) { + png_destroy_write_struct(&write_ptr, &write_info); + return error; + } + + // Open up our destination file for writing + fp = fopen(dest.string(), "wb"); + if (!fp) { + fprintf(stderr, "%s ERROR: Unable to open PNG file\n", dest.string()); + png_destroy_write_struct(&write_ptr, &write_info); + return error; + } + + // Set up libpng to write to our file + png_init_io(write_ptr, fp); + + // Set up a jump for libpng to long jump back on on errors + if (setjmp(png_jmpbuf(write_ptr))) { + fclose(fp); + png_destroy_write_struct(&write_ptr, &write_info); + return error; + } + + // Actually write out to the new png + write_png(dest.string(), write_ptr, write_info, imageInfo, + bundle->getGrayscaleTolerance()); + + if (bundle->getVerbose()) { + // Find the size of our new file + FILE* reader = fopen(dest.string(), "rb"); + fseek(reader, 0, SEEK_END); + size_t newSize = (size_t)ftell(reader); + fclose(reader); + + float factor = ((float)newSize)/oldSize; + int percent = (int)(factor*100); + printf(" (processed image to cache entry %s: %d%% size of source)\n", + dest.string(), percent); + } + + //Clean up + fclose(fp); + png_destroy_write_struct(&write_ptr, &write_info); + + return NO_ERROR; +} + +status_t postProcessImage(const sp& assets, + ResourceTable* table, const sp& file) +{ + String8 ext(file->getPath().getPathExtension()); + + // At this point, now that we have all the resource data, all we need to + // do is compile XML files. + if (strcmp(ext.string(), ".xml") == 0) { + return compileXmlFile(assets, file, table); + } + + return NO_ERROR; +} diff --git a/tools/aapt/Images.h b/tools/aapt/Images.h new file mode 100644 index 0000000000000..91b6554c02c9a --- /dev/null +++ b/tools/aapt/Images.h @@ -0,0 +1,26 @@ +// +// Copyright 2006 The Android Open Source Project +// +// Build resource files from raw assets. +// + +#ifndef IMAGES_H +#define IMAGES_H + +#include "ResourceTable.h" +#include "Bundle.h" + +#include +#include + +using android::String8; + +status_t preProcessImage(const Bundle* bundle, const sp& assets, + const sp& file, String8* outNewLeafName); + +status_t preProcessImageToCache(const Bundle* bundle, const String8& source, const String8& dest); + +status_t postProcessImage(const sp& assets, + ResourceTable* table, const sp& file); + +#endif diff --git a/tools/aapt/Main.cpp b/tools/aapt/Main.cpp new file mode 100644 index 0000000000000..4a8aa9cca4713 --- /dev/null +++ b/tools/aapt/Main.cpp @@ -0,0 +1,655 @@ +// +// Copyright 2006 The Android Open Source Project +// +// Android Asset Packaging Tool main entry point. +// +#include "Main.h" +#include "Bundle.h" + +#include +#include +#include +#include + +#include +#include +#include + +using namespace android; + +static const char* gProgName = "aapt"; + +/* + * When running under Cygwin on Windows, this will convert slash-based + * paths into back-slash-based ones. Otherwise the ApptAssets file comparisons + * fail later as they use back-slash separators under Windows. + * + * This operates in-place on the path string. + */ +void convertPath(char *path) { + if (path != NULL && OS_PATH_SEPARATOR != '/') { + for (; *path; path++) { + if (*path == '/') { + *path = OS_PATH_SEPARATOR; + } + } + } +} + +/* + * Print usage info. + */ +void usage(void) +{ + fprintf(stderr, "Android Asset Packaging Tool\n\n"); + fprintf(stderr, "Usage:\n"); + fprintf(stderr, + " %s l[ist] [-v] [-a] file.{zip,jar,apk}\n" + " List contents of Zip-compatible archive.\n\n", gProgName); + fprintf(stderr, + " %s d[ump] [--values] [--include-meta-data] WHAT file.{apk} [asset [asset ...]]\n" + " strings Print the contents of the resource table string pool in the APK.\n" + " badging Print the label and icon for the app declared in APK.\n" + " permissions Print the permissions from the APK.\n" + " resources Print the resource table from the APK.\n" + " configurations Print the configurations in the APK.\n" + " xmltree Print the compiled xmls in the given assets.\n" + " xmlstrings Print the strings of the given compiled xml assets.\n\n", gProgName); + fprintf(stderr, + " %s p[ackage] [-d][-f][-m][-u][-v][-x][-z][-M AndroidManifest.xml] \\\n" + " [-0 extension [-0 extension ...]] [-g tolerance] [-j jarfile] \\\n" + " [--debug-mode] [--min-sdk-version VAL] [--target-sdk-version VAL] \\\n" + " [--app-version VAL] [--app-version-name TEXT] [--custom-package VAL] \\\n" + " [--rename-manifest-package PACKAGE] \\\n" + " [--rename-instrumentation-target-package PACKAGE] \\\n" + " [--utf16] [--auto-add-overlay] \\\n" + " [--max-res-version VAL] \\\n" + " [-I base-package [-I base-package ...]] \\\n" + " [-A asset-source-dir] [-G class-list-file] [-P public-definitions-file] \\\n" + " [-S resource-sources [-S resource-sources ...]] \\\n" + " [-F apk-file] [-J R-file-dir] \\\n" + " [--product product1,product2,...] \\\n" + " [-c CONFIGS] [--preferred-configurations CONFIGS] \\\n" + " [raw-files-dir [raw-files-dir] ...] \\\n" + " [--output-text-symbols DIR]\n" + "\n" + " Package the android resources. It will read assets and resources that are\n" + " supplied with the -M -A -S or raw-files-dir arguments. The -J -P -F and -R\n" + " options control which files are output.\n\n" + , gProgName); + fprintf(stderr, + " %s r[emove] [-v] file.{zip,jar,apk} file1 [file2 ...]\n" + " Delete specified files from Zip-compatible archive.\n\n", + gProgName); + fprintf(stderr, + " %s a[dd] [-v] file.{zip,jar,apk} file1 [file2 ...]\n" + " Add specified files to Zip-compatible archive.\n\n", gProgName); + fprintf(stderr, + " %s c[runch] [-v] -S resource-sources ... -C output-folder ...\n" + " Do PNG preprocessing on one or several resource folders\n" + " and store the results in the output folder.\n\n", gProgName); + fprintf(stderr, + " %s s[ingleCrunch] [-v] -i input-file -o outputfile\n" + " Do PNG preprocessing on a single file.\n\n", gProgName); + fprintf(stderr, + " %s v[ersion]\n" + " Print program version.\n\n", gProgName); + fprintf(stderr, + " Modifiers:\n" + " -a print Android-specific data (resources, manifest) when listing\n" + " -c specify which configurations to include. The default is all\n" + " configurations. The value of the parameter should be a comma\n" + " separated list of configuration values. Locales should be specified\n" + " as either a language or language-region pair. Some examples:\n" + " en\n" + " port,en\n" + " port,land,en_US\n" + " If you put the special locale, zz_ZZ on the list, it will perform\n" + " pseudolocalization on the default locale, modifying all of the\n" + " strings so you can look for strings that missed the\n" + " internationalization process. For example:\n" + " port,land,zz_ZZ\n" + " -d one or more device assets to include, separated by commas\n" + " -f force overwrite of existing files\n" + " -g specify a pixel tolerance to force images to grayscale, default 0\n" + " -j specify a jar or zip file containing classes to include\n" + " -k junk path of file(s) added\n" + " -m make package directories under location specified by -J\n" +#if 0 + " -p pseudolocalize the default configuration\n" +#endif + " -u update existing packages (add new, replace older, remove deleted files)\n" + " -v verbose output\n" + " -x create extending (non-application) resource IDs\n" + " -z require localization of resource attributes marked with\n" + " localization=\"suggested\"\n" + " -A additional directory in which to find raw asset files\n" + " -G A file to output proguard options into.\n" + " -F specify the apk file to output\n" + " -I add an existing package to base include set\n" + " -J specify where to output R.java resource constant definitions\n" + " -M specify full path to AndroidManifest.xml to include in zip\n" + " -P specify where to output public resource definitions\n" + " -S directory in which to find resources. Multiple directories will be scanned\n" + " and the first match found (left to right) will take precedence.\n" + " -0 specifies an additional extension for which such files will not\n" + " be stored compressed in the .apk. An empty string means to not\n" + " compress any files at all.\n" + " --debug-mode\n" + " inserts android:debuggable=\"true\" in to the application node of the\n" + " manifest, making the application debuggable even on production devices.\n" + " --include-meta-data\n" + " when used with \"dump badging\" also includes meta-data tags.\n" + " --min-sdk-version\n" + " inserts android:minSdkVersion in to manifest. If the version is 7 or\n" + " higher, the default encoding for resources will be in UTF-8.\n" + " --target-sdk-version\n" + " inserts android:targetSdkVersion in to manifest.\n" + " --max-res-version\n" + " ignores versioned resource directories above the given value.\n" + " --values\n" + " when used with \"dump resources\" also includes resource values.\n" + " --version-code\n" + " inserts android:versionCode in to manifest.\n" + " --version-name\n" + " inserts android:versionName in to manifest.\n" + " --custom-package\n" + " generates R.java into a different package.\n" + " --extra-packages\n" + " generate R.java for libraries. Separate libraries with ':'.\n" + " --generate-dependencies\n" + " generate dependency files in the same directories for R.java and resource package\n" + " --auto-add-overlay\n" + " Automatically add resources that are only in overlays.\n" + " --preferred-configurations\n" + " Like the -c option for filtering out unneeded configurations, but\n" + " only expresses a preference. If there is no resource available with\n" + " the preferred configuration then it will not be stripped.\n" + " --rename-manifest-package\n" + " Rewrite the manifest so that its package name is the package name\n" + " given here. Relative class names (for example .Foo) will be\n" + " changed to absolute names with the old package so that the code\n" + " does not need to change.\n" + " --rename-instrumentation-target-package\n" + " Rewrite the manifest so that all of its instrumentation\n" + " components target the given package. Useful when used in\n" + " conjunction with --rename-manifest-package to fix tests against\n" + " a package that has been renamed.\n" + " --product\n" + " Specifies which variant to choose for strings that have\n" + " product variants\n" + " --utf16\n" + " changes default encoding for resources to UTF-16. Only useful when API\n" + " level is set to 7 or higher where the default encoding is UTF-8.\n" + " --non-constant-id\n" + " Make the resources ID non constant. This is required to make an R java class\n" + " that does not contain the final value but is used to make reusable compiled\n" + " libraries that need to access resources.\n" + " --error-on-failed-insert\n" + " Forces aapt to return an error if it fails to insert values into the manifest\n" + " with --debug-mode, --min-sdk-version, --target-sdk-version --version-code\n" + " and --version-name.\n" + " Insertion typically fails if the manifest already defines the attribute.\n" + " --output-text-symbols\n" + " Generates a text file containing the resource symbols of the R class in the\n" + " specified folder.\n" + " --ignore-assets\n" + " Assets to be ignored. Default pattern is:\n" + " %s\n", + gDefaultIgnoreAssets); +} + +/* + * Dispatch the command. + */ +int handleCommand(Bundle* bundle) +{ + //printf("--- command %d (verbose=%d force=%d):\n", + // bundle->getCommand(), bundle->getVerbose(), bundle->getForce()); + //for (int i = 0; i < bundle->getFileSpecCount(); i++) + // printf(" %d: '%s'\n", i, bundle->getFileSpecEntry(i)); + + switch (bundle->getCommand()) { + case kCommandVersion: return doVersion(bundle); + case kCommandList: return doList(bundle); + case kCommandDump: return doDump(bundle); + case kCommandAdd: return doAdd(bundle); + case kCommandRemove: return doRemove(bundle); + case kCommandPackage: return doPackage(bundle); + case kCommandCrunch: return doCrunch(bundle); + case kCommandSingleCrunch: return doSingleCrunch(bundle); + default: + fprintf(stderr, "%s: requested command not yet supported\n", gProgName); + return 1; + } +} + +/* + * Parse args. + */ +int main(int argc, char* const argv[]) +{ + char *prog = argv[0]; + Bundle bundle; + bool wantUsage = false; + int result = 1; // pessimistically assume an error. + int tolerance = 0; + + /* default to compression */ + bundle.setCompressionMethod(ZipEntry::kCompressDeflated); + + if (argc < 2) { + wantUsage = true; + goto bail; + } + + if (argv[1][0] == 'v') + bundle.setCommand(kCommandVersion); + else if (argv[1][0] == 'd') + bundle.setCommand(kCommandDump); + else if (argv[1][0] == 'l') + bundle.setCommand(kCommandList); + else if (argv[1][0] == 'a') + bundle.setCommand(kCommandAdd); + else if (argv[1][0] == 'r') + bundle.setCommand(kCommandRemove); + else if (argv[1][0] == 'p') + bundle.setCommand(kCommandPackage); + else if (argv[1][0] == 'c') + bundle.setCommand(kCommandCrunch); + else if (argv[1][0] == 's') + bundle.setCommand(kCommandSingleCrunch); + else { + fprintf(stderr, "ERROR: Unknown command '%s'\n", argv[1]); + wantUsage = true; + goto bail; + } + argc -= 2; + argv += 2; + + /* + * Pull out flags. We support "-fv" and "-f -v". + */ + while (argc && argv[0][0] == '-') { + /* flag(s) found */ + const char* cp = argv[0] +1; + + while (*cp != '\0') { + switch (*cp) { + case 'v': + bundle.setVerbose(true); + break; + case 'a': + bundle.setAndroidList(true); + break; + case 'c': + argc--; + argv++; + if (!argc) { + fprintf(stderr, "ERROR: No argument supplied for '-c' option\n"); + wantUsage = true; + goto bail; + } + bundle.addConfigurations(argv[0]); + break; + case 'f': + bundle.setForce(true); + break; + case 'g': + argc--; + argv++; + if (!argc) { + fprintf(stderr, "ERROR: No argument supplied for '-g' option\n"); + wantUsage = true; + goto bail; + } + tolerance = atoi(argv[0]); + bundle.setGrayscaleTolerance(tolerance); + printf("%s: Images with deviation <= %d will be forced to grayscale.\n", prog, tolerance); + break; + case 'k': + bundle.setJunkPath(true); + break; + case 'm': + bundle.setMakePackageDirs(true); + break; +#if 0 + case 'p': + bundle.setPseudolocalize(true); + break; +#endif + case 'u': + bundle.setUpdate(true); + break; + case 'x': + bundle.setExtending(true); + break; + case 'z': + bundle.setRequireLocalization(true); + break; + case 'j': + argc--; + argv++; + if (!argc) { + fprintf(stderr, "ERROR: No argument supplied for '-j' option\n"); + wantUsage = true; + goto bail; + } + convertPath(argv[0]); + bundle.addJarFile(argv[0]); + break; + case 'A': + argc--; + argv++; + if (!argc) { + fprintf(stderr, "ERROR: No argument supplied for '-A' option\n"); + wantUsage = true; + goto bail; + } + convertPath(argv[0]); + bundle.setAssetSourceDir(argv[0]); + break; + case 'G': + argc--; + argv++; + if (!argc) { + fprintf(stderr, "ERROR: No argument supplied for '-G' option\n"); + wantUsage = true; + goto bail; + } + convertPath(argv[0]); + bundle.setProguardFile(argv[0]); + break; + case 'I': + argc--; + argv++; + if (!argc) { + fprintf(stderr, "ERROR: No argument supplied for '-I' option\n"); + wantUsage = true; + goto bail; + } + convertPath(argv[0]); + bundle.addPackageInclude(argv[0]); + break; + case 'F': + argc--; + argv++; + if (!argc) { + fprintf(stderr, "ERROR: No argument supplied for '-F' option\n"); + wantUsage = true; + goto bail; + } + convertPath(argv[0]); + bundle.setOutputAPKFile(argv[0]); + break; + case 'J': + argc--; + argv++; + if (!argc) { + fprintf(stderr, "ERROR: No argument supplied for '-J' option\n"); + wantUsage = true; + goto bail; + } + convertPath(argv[0]); + bundle.setRClassDir(argv[0]); + break; + case 'M': + argc--; + argv++; + if (!argc) { + fprintf(stderr, "ERROR: No argument supplied for '-M' option\n"); + wantUsage = true; + goto bail; + } + convertPath(argv[0]); + bundle.setAndroidManifestFile(argv[0]); + break; + case 'P': + argc--; + argv++; + if (!argc) { + fprintf(stderr, "ERROR: No argument supplied for '-P' option\n"); + wantUsage = true; + goto bail; + } + convertPath(argv[0]); + bundle.setPublicOutputFile(argv[0]); + break; + case 'S': + argc--; + argv++; + if (!argc) { + fprintf(stderr, "ERROR: No argument supplied for '-S' option\n"); + wantUsage = true; + goto bail; + } + convertPath(argv[0]); + bundle.addResourceSourceDir(argv[0]); + break; + case 'C': + argc--; + argv++; + if (!argc) { + fprintf(stderr, "ERROR: No argument supplied for '-C' option\n"); + wantUsage = true; + goto bail; + } + convertPath(argv[0]); + bundle.setCrunchedOutputDir(argv[0]); + break; + case 'i': + argc--; + argv++; + if (!argc) { + fprintf(stderr, "ERROR: No argument supplied for '-i' option\n"); + wantUsage = true; + goto bail; + } + convertPath(argv[0]); + bundle.setSingleCrunchInputFile(argv[0]); + break; + case 'o': + argc--; + argv++; + if (!argc) { + fprintf(stderr, "ERROR: No argument supplied for '-o' option\n"); + wantUsage = true; + goto bail; + } + convertPath(argv[0]); + bundle.setSingleCrunchOutputFile(argv[0]); + break; + case '0': + argc--; + argv++; + if (!argc) { + fprintf(stderr, "ERROR: No argument supplied for '-e' option\n"); + wantUsage = true; + goto bail; + } + if (argv[0][0] != 0) { + bundle.addNoCompressExtension(argv[0]); + } else { + bundle.setCompressionMethod(ZipEntry::kCompressStored); + } + break; + case '-': + if (strcmp(cp, "-debug-mode") == 0) { + bundle.setDebugMode(true); + } else if (strcmp(cp, "-min-sdk-version") == 0) { + argc--; + argv++; + if (!argc) { + fprintf(stderr, "ERROR: No argument supplied for '--min-sdk-version' option\n"); + wantUsage = true; + goto bail; + } + bundle.setMinSdkVersion(argv[0]); + } else if (strcmp(cp, "-target-sdk-version") == 0) { + argc--; + argv++; + if (!argc) { + fprintf(stderr, "ERROR: No argument supplied for '--target-sdk-version' option\n"); + wantUsage = true; + goto bail; + } + bundle.setTargetSdkVersion(argv[0]); + } else if (strcmp(cp, "-max-sdk-version") == 0) { + argc--; + argv++; + if (!argc) { + fprintf(stderr, "ERROR: No argument supplied for '--max-sdk-version' option\n"); + wantUsage = true; + goto bail; + } + bundle.setMaxSdkVersion(argv[0]); + } else if (strcmp(cp, "-max-res-version") == 0) { + argc--; + argv++; + if (!argc) { + fprintf(stderr, "ERROR: No argument supplied for '--max-res-version' option\n"); + wantUsage = true; + goto bail; + } + bundle.setMaxResVersion(argv[0]); + } else if (strcmp(cp, "-version-code") == 0) { + argc--; + argv++; + if (!argc) { + fprintf(stderr, "ERROR: No argument supplied for '--version-code' option\n"); + wantUsage = true; + goto bail; + } + bundle.setVersionCode(argv[0]); + } else if (strcmp(cp, "-version-name") == 0) { + argc--; + argv++; + if (!argc) { + fprintf(stderr, "ERROR: No argument supplied for '--version-name' option\n"); + wantUsage = true; + goto bail; + } + bundle.setVersionName(argv[0]); + } else if (strcmp(cp, "-values") == 0) { + bundle.setValues(true); + } else if (strcmp(cp, "-include-meta-data") == 0) { + bundle.setIncludeMetaData(true); + } else if (strcmp(cp, "-custom-package") == 0) { + argc--; + argv++; + if (!argc) { + fprintf(stderr, "ERROR: No argument supplied for '--custom-package' option\n"); + wantUsage = true; + goto bail; + } + bundle.setCustomPackage(argv[0]); + } else if (strcmp(cp, "-extra-packages") == 0) { + argc--; + argv++; + if (!argc) { + fprintf(stderr, "ERROR: No argument supplied for '--extra-packages' option\n"); + wantUsage = true; + goto bail; + } + bundle.setExtraPackages(argv[0]); + } else if (strcmp(cp, "-generate-dependencies") == 0) { + bundle.setGenDependencies(true); + } else if (strcmp(cp, "-utf16") == 0) { + bundle.setWantUTF16(true); + } else if (strcmp(cp, "-preferred-configurations") == 0) { + argc--; + argv++; + if (!argc) { + fprintf(stderr, "ERROR: No argument supplied for '--preferred-configurations' option\n"); + wantUsage = true; + goto bail; + } + bundle.addPreferredConfigurations(argv[0]); + } else if (strcmp(cp, "-rename-manifest-package") == 0) { + argc--; + argv++; + if (!argc) { + fprintf(stderr, "ERROR: No argument supplied for '--rename-manifest-package' option\n"); + wantUsage = true; + goto bail; + } + bundle.setManifestPackageNameOverride(argv[0]); + } else if (strcmp(cp, "-rename-instrumentation-target-package") == 0) { + argc--; + argv++; + if (!argc) { + fprintf(stderr, "ERROR: No argument supplied for '--rename-instrumentation-target-package' option\n"); + wantUsage = true; + goto bail; + } + bundle.setInstrumentationPackageNameOverride(argv[0]); + } else if (strcmp(cp, "-auto-add-overlay") == 0) { + bundle.setAutoAddOverlay(true); + } else if (strcmp(cp, "-error-on-failed-insert") == 0) { + bundle.setErrorOnFailedInsert(true); + } else if (strcmp(cp, "-output-text-symbols") == 0) { + argc--; + argv++; + if (!argc) { + fprintf(stderr, "ERROR: No argument supplied for '-output-text-symbols' option\n"); + wantUsage = true; + goto bail; + } + bundle.setOutputTextSymbols(argv[0]); + } else if (strcmp(cp, "-product") == 0) { + argc--; + argv++; + if (!argc) { + fprintf(stderr, "ERROR: No argument supplied for '--product' option\n"); + wantUsage = true; + goto bail; + } + bundle.setProduct(argv[0]); + } else if (strcmp(cp, "-non-constant-id") == 0) { + bundle.setNonConstantId(true); + } else if (strcmp(cp, "-no-crunch") == 0) { + bundle.setUseCrunchCache(true); + } else if (strcmp(cp, "-ignore-assets") == 0) { + argc--; + argv++; + if (!argc) { + fprintf(stderr, "ERROR: No argument supplied for '--ignore-assets' option\n"); + wantUsage = true; + goto bail; + } + gUserIgnoreAssets = argv[0]; + } else { + fprintf(stderr, "ERROR: Unknown option '-%s'\n", cp); + wantUsage = true; + goto bail; + } + cp += strlen(cp) - 1; + break; + default: + fprintf(stderr, "ERROR: Unknown flag '-%c'\n", *cp); + wantUsage = true; + goto bail; + } + + cp++; + } + argc--; + argv++; + } + + /* + * We're past the flags. The rest all goes straight in. + */ + bundle.setFileSpec(argv, argc); + + result = handleCommand(&bundle); + +bail: + if (wantUsage) { + usage(); + result = 2; + } + + //printf("--> returning %d\n", result); + return result; +} diff --git a/tools/aapt/Main.h b/tools/aapt/Main.h new file mode 100644 index 0000000000000..a6b39ac418dc1 --- /dev/null +++ b/tools/aapt/Main.h @@ -0,0 +1,63 @@ +// +// Copyright 2006 The Android Open Source Project +// +// Some global defines that don't really merit their own header. +// +#ifndef __MAIN_H +#define __MAIN_H + +#include +#include +#include +#include +#include "Bundle.h" +#include "AaptAssets.h" +#include "ZipFile.h" + + +/* Benchmarking Flag */ +//#define BENCHMARK 1 + +#if BENCHMARK + #include +#endif /* BENCHMARK */ + +extern int doVersion(Bundle* bundle); +extern int doList(Bundle* bundle); +extern int doDump(Bundle* bundle); +extern int doAdd(Bundle* bundle); +extern int doRemove(Bundle* bundle); +extern int doPackage(Bundle* bundle); +extern int doCrunch(Bundle* bundle); +extern int doSingleCrunch(Bundle* bundle); + +extern int calcPercent(long uncompressedLen, long compressedLen); + +extern android::status_t writeAPK(Bundle* bundle, + const sp& assets, + const android::String8& outputFile); + +extern android::status_t updatePreProcessedCache(Bundle* bundle); + +extern android::status_t buildResources(Bundle* bundle, + const sp& assets); + +extern android::status_t writeResourceSymbols(Bundle* bundle, + const sp& assets, const String8& pkgName, bool includePrivate); + +extern android::status_t writeProguardFile(Bundle* bundle, const sp& assets); + +extern bool isValidResourceType(const String8& type); + +ssize_t processAssets(Bundle* bundle, ZipFile* zip, const sp& assets); + +extern status_t filterResources(Bundle* bundle, const sp& assets); + +int dumpResources(Bundle* bundle); + +String8 getAttribute(const ResXMLTree& tree, const char* ns, + const char* attr, String8* outError); + +status_t writeDependencyPreReqs(Bundle* bundle, const sp& assets, + FILE* fp, bool includeRaw); +#endif // __MAIN_H diff --git a/tools/aapt/NOTICE b/tools/aapt/NOTICE new file mode 100644 index 0000000000000..c5b1efa7aac76 --- /dev/null +++ b/tools/aapt/NOTICE @@ -0,0 +1,190 @@ + + Copyright (c) 2005-2008, The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + diff --git a/tools/aapt/Package.cpp b/tools/aapt/Package.cpp new file mode 100644 index 0000000000000..872d95c509f79 --- /dev/null +++ b/tools/aapt/Package.cpp @@ -0,0 +1,505 @@ +// +// Copyright 2006 The Android Open Source Project +// +// Package assets into Zip files. +// +#include "Main.h" +#include "AaptAssets.h" +#include "ResourceTable.h" +#include "ResourceFilter.h" + +#include + +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +using namespace android; + +static const char* kExcludeExtension = ".EXCLUDE"; + +/* these formats are already compressed, or don't compress well */ +static const char* kNoCompressExt[] = { + ".jpg", ".jpeg", ".png", ".gif", + ".wav", ".mp2", ".mp3", ".ogg", ".aac", + ".mpg", ".mpeg", ".mid", ".midi", ".smf", ".jet", + ".rtttl", ".imy", ".xmf", ".mp4", ".m4a", + ".m4v", ".3gp", ".3gpp", ".3g2", ".3gpp2", + ".amr", ".awb", ".wma", ".wmv" +}; + +/* fwd decls, so I can write this downward */ +ssize_t processAssets(Bundle* bundle, ZipFile* zip, const sp& assets); +ssize_t processAssets(Bundle* bundle, ZipFile* zip, const sp& dir, + const AaptGroupEntry& ge, const ResourceFilter* filter); +bool processFile(Bundle* bundle, ZipFile* zip, + const sp& group, const sp& file); +bool okayToCompress(Bundle* bundle, const String8& pathName); +ssize_t processJarFiles(Bundle* bundle, ZipFile* zip); + +/* + * The directory hierarchy looks like this: + * "outputDir" and "assetRoot" are existing directories. + * + * On success, "bundle->numPackages" will be the number of Zip packages + * we created. + */ +status_t writeAPK(Bundle* bundle, const sp& assets, + const String8& outputFile) +{ + #if BENCHMARK + fprintf(stdout, "BENCHMARK: Starting APK Bundling \n"); + long startAPKTime = clock(); + #endif /* BENCHMARK */ + + status_t result = NO_ERROR; + ZipFile* zip = NULL; + int count; + + //bundle->setPackageCount(0); + + /* + * Prep the Zip archive. + * + * If the file already exists, fail unless "update" or "force" is set. + * If "update" is set, update the contents of the existing archive. + * Else, if "force" is set, remove the existing archive. + */ + FileType fileType = getFileType(outputFile.string()); + if (fileType == kFileTypeNonexistent) { + // okay, create it below + } else if (fileType == kFileTypeRegular) { + if (bundle->getUpdate()) { + // okay, open it below + } else if (bundle->getForce()) { + if (unlink(outputFile.string()) != 0) { + fprintf(stderr, "ERROR: unable to remove '%s': %s\n", outputFile.string(), + strerror(errno)); + goto bail; + } + } else { + fprintf(stderr, "ERROR: '%s' exists (use '-f' to force overwrite)\n", + outputFile.string()); + goto bail; + } + } else { + fprintf(stderr, "ERROR: '%s' exists and is not a regular file\n", outputFile.string()); + goto bail; + } + + if (bundle->getVerbose()) { + printf("%s '%s'\n", (fileType == kFileTypeNonexistent) ? "Creating" : "Opening", + outputFile.string()); + } + + status_t status; + zip = new ZipFile; + status = zip->open(outputFile.string(), ZipFile::kOpenReadWrite | ZipFile::kOpenCreate); + if (status != NO_ERROR) { + fprintf(stderr, "ERROR: unable to open '%s' as Zip file for writing\n", + outputFile.string()); + goto bail; + } + + if (bundle->getVerbose()) { + printf("Writing all files...\n"); + } + + count = processAssets(bundle, zip, assets); + if (count < 0) { + fprintf(stderr, "ERROR: unable to process assets while packaging '%s'\n", + outputFile.string()); + result = count; + goto bail; + } + + if (bundle->getVerbose()) { + printf("Generated %d file%s\n", count, (count==1) ? "" : "s"); + } + + count = processJarFiles(bundle, zip); + if (count < 0) { + fprintf(stderr, "ERROR: unable to process jar files while packaging '%s'\n", + outputFile.string()); + result = count; + goto bail; + } + + if (bundle->getVerbose()) + printf("Included %d file%s from jar/zip files.\n", count, (count==1) ? "" : "s"); + + result = NO_ERROR; + + /* + * Check for cruft. We set the "marked" flag on all entries we created + * or decided not to update. If the entry isn't already slated for + * deletion, remove it now. + */ + { + if (bundle->getVerbose()) + printf("Checking for deleted files\n"); + int i, removed = 0; + for (i = 0; i < zip->getNumEntries(); i++) { + ZipEntry* entry = zip->getEntryByIndex(i); + + if (!entry->getMarked() && entry->getDeleted()) { + if (bundle->getVerbose()) { + printf(" (removing crufty '%s')\n", + entry->getFileName()); + } + zip->remove(entry); + removed++; + } + } + if (bundle->getVerbose() && removed > 0) + printf("Removed %d file%s\n", removed, (removed==1) ? "" : "s"); + } + + /* tell Zip lib to process deletions and other pending changes */ + result = zip->flush(); + if (result != NO_ERROR) { + fprintf(stderr, "ERROR: Zip flush failed, archive may be hosed\n"); + goto bail; + } + + /* anything here? */ + if (zip->getNumEntries() == 0) { + if (bundle->getVerbose()) { + printf("Archive is empty -- removing %s\n", outputFile.getPathLeaf().string()); + } + delete zip; // close the file so we can remove it in Win32 + zip = NULL; + if (unlink(outputFile.string()) != 0) { + fprintf(stderr, "warning: could not unlink '%s'\n", outputFile.string()); + } + } + + // If we've been asked to generate a dependency file for the .ap_ package, + // do so here + if (bundle->getGenDependencies()) { + // The dependency file gets output to the same directory + // as the specified output file with an additional .d extension. + // e.g. bin/resources.ap_.d + String8 dependencyFile = outputFile; + dependencyFile.append(".d"); + + FILE* fp = fopen(dependencyFile.string(), "a"); + // Add this file to the dependency file + fprintf(fp, "%s \\\n", outputFile.string()); + fclose(fp); + } + + assert(result == NO_ERROR); + +bail: + delete zip; // must close before remove in Win32 + if (result != NO_ERROR) { + if (bundle->getVerbose()) { + printf("Removing %s due to earlier failures\n", outputFile.string()); + } + if (unlink(outputFile.string()) != 0) { + fprintf(stderr, "warning: could not unlink '%s'\n", outputFile.string()); + } + } + + if (result == NO_ERROR && bundle->getVerbose()) + printf("Done!\n"); + + #if BENCHMARK + fprintf(stdout, "BENCHMARK: End APK Bundling. Time Elapsed: %f ms \n",(clock() - startAPKTime)/1000.0); + #endif /* BENCHMARK */ + return result; +} + +ssize_t processAssets(Bundle* bundle, ZipFile* zip, + const sp& assets) +{ + ResourceFilter filter; + status_t status = filter.parse(bundle->getConfigurations()); + if (status != NO_ERROR) { + return -1; + } + + ssize_t count = 0; + + const size_t N = assets->getGroupEntries().size(); + for (size_t i=0; igetGroupEntries()[i]; + + ssize_t res = processAssets(bundle, zip, assets, ge, &filter); + if (res < 0) { + return res; + } + + count += res; + } + + return count; +} + +ssize_t processAssets(Bundle* bundle, ZipFile* zip, const sp& dir, + const AaptGroupEntry& ge, const ResourceFilter* filter) +{ + ssize_t count = 0; + + const size_t ND = dir->getDirs().size(); + size_t i; + for (i=0; i& subDir = dir->getDirs().valueAt(i); + + const bool filterable = filter != NULL && subDir->getLeaf().find("mipmap-") != 0; + + if (filterable && subDir->getLeaf() != subDir->getPath() && !filter->match(ge.toParams())) { + continue; + } + + ssize_t res = processAssets(bundle, zip, subDir, ge, filterable ? filter : NULL); + if (res < 0) { + return res; + } + count += res; + } + + if (filter != NULL && !filter->match(ge.toParams())) { + return count; + } + + const size_t NF = dir->getFiles().size(); + for (i=0; i gp = dir->getFiles().valueAt(i); + ssize_t fi = gp->getFiles().indexOfKey(ge); + if (fi >= 0) { + sp fl = gp->getFiles().valueAt(fi); + if (!processFile(bundle, zip, gp, fl)) { + return UNKNOWN_ERROR; + } + count++; + } + } + + return count; +} + +/* + * Process a regular file, adding it to the archive if appropriate. + * + * If we're in "update" mode, and the file already exists in the archive, + * delete the existing entry before adding the new one. + */ +bool processFile(Bundle* bundle, ZipFile* zip, + const sp& group, const sp& file) +{ + const bool hasData = file->hasData(); + + String8 storageName(group->getPath()); + storageName.convertToResPath(); + ZipEntry* entry; + bool fromGzip = false; + status_t result; + + /* + * See if the filename ends in ".EXCLUDE". We can't use + * String8::getPathExtension() because the length of what it considers + * to be an extension is capped. + * + * The Asset Manager doesn't check for ".EXCLUDE" in Zip archives, + * so there's no value in adding them (and it makes life easier on + * the AssetManager lib if we don't). + * + * NOTE: this restriction has been removed. If you're in this code, you + * should clean this up, but I'm in here getting rid of Path Name, and I + * don't want to make other potentially breaking changes --joeo + */ + int fileNameLen = storageName.length(); + int excludeExtensionLen = strlen(kExcludeExtension); + if (fileNameLen > excludeExtensionLen + && (0 == strcmp(storageName.string() + (fileNameLen - excludeExtensionLen), + kExcludeExtension))) { + fprintf(stderr, "warning: '%s' not added to Zip\n", storageName.string()); + return true; + } + + if (strcasecmp(storageName.getPathExtension().string(), ".gz") == 0) { + fromGzip = true; + storageName = storageName.getBasePath(); + } + + if (bundle->getUpdate()) { + entry = zip->getEntryByName(storageName.string()); + if (entry != NULL) { + /* file already exists in archive; there can be only one */ + if (entry->getMarked()) { + fprintf(stderr, + "ERROR: '%s' exists twice (check for with & w/o '.gz'?)\n", + file->getPrintableSource().string()); + return false; + } + if (!hasData) { + const String8& srcName = file->getSourceFile(); + time_t fileModWhen; + fileModWhen = getFileModDate(srcName.string()); + if (fileModWhen == (time_t) -1) { // file existence tested earlier, + return false; // not expecting an error here + } + + if (fileModWhen > entry->getModWhen()) { + // mark as deleted so add() will succeed + if (bundle->getVerbose()) { + printf(" (removing old '%s')\n", storageName.string()); + } + + zip->remove(entry); + } else { + // version in archive is newer + if (bundle->getVerbose()) { + printf(" (not updating '%s')\n", storageName.string()); + } + entry->setMarked(true); + return true; + } + } else { + // Generated files are always replaced. + zip->remove(entry); + } + } + } + + //android_setMinPriority(NULL, ANDROID_LOG_VERBOSE); + + if (fromGzip) { + result = zip->addGzip(file->getSourceFile().string(), storageName.string(), &entry); + } else if (!hasData) { + /* don't compress certain files, e.g. PNGs */ + int compressionMethod = bundle->getCompressionMethod(); + if (!okayToCompress(bundle, storageName)) { + compressionMethod = ZipEntry::kCompressStored; + } + result = zip->add(file->getSourceFile().string(), storageName.string(), compressionMethod, + &entry); + } else { + result = zip->add(file->getData(), file->getSize(), storageName.string(), + file->getCompressionMethod(), &entry); + } + if (result == NO_ERROR) { + if (bundle->getVerbose()) { + printf(" '%s'%s", storageName.string(), fromGzip ? " (from .gz)" : ""); + if (entry->getCompressionMethod() == ZipEntry::kCompressStored) { + printf(" (not compressed)\n"); + } else { + printf(" (compressed %d%%)\n", calcPercent(entry->getUncompressedLen(), + entry->getCompressedLen())); + } + } + entry->setMarked(true); + } else { + if (result == ALREADY_EXISTS) { + fprintf(stderr, " Unable to add '%s': file already in archive (try '-u'?)\n", + file->getPrintableSource().string()); + } else { + fprintf(stderr, " Unable to add '%s': Zip add failed\n", + file->getPrintableSource().string()); + } + return false; + } + + return true; +} + +/* + * Determine whether or not we want to try to compress this file based + * on the file extension. + */ +bool okayToCompress(Bundle* bundle, const String8& pathName) +{ + String8 ext = pathName.getPathExtension(); + int i; + + if (ext.length() == 0) + return true; + + for (i = 0; i < NELEM(kNoCompressExt); i++) { + if (strcasecmp(ext.string(), kNoCompressExt[i]) == 0) + return false; + } + + const android::Vector& others(bundle->getNoCompressExtensions()); + for (i = 0; i < (int)others.size(); i++) { + const char* str = others[i]; + int pos = pathName.length() - strlen(str); + if (pos < 0) { + continue; + } + const char* path = pathName.string(); + if (strcasecmp(path + pos, str) == 0) { + return false; + } + } + + return true; +} + +bool endsWith(const char* haystack, const char* needle) +{ + size_t a = strlen(haystack); + size_t b = strlen(needle); + if (a < b) return false; + return strcasecmp(haystack+(a-b), needle) == 0; +} + +ssize_t processJarFile(ZipFile* jar, ZipFile* out) +{ + status_t err; + size_t N = jar->getNumEntries(); + size_t count = 0; + for (size_t i=0; igetEntryByIndex(i); + const char* storageName = entry->getFileName(); + if (endsWith(storageName, ".class")) { + int compressionMethod = entry->getCompressionMethod(); + size_t size = entry->getUncompressedLen(); + const void* data = jar->uncompress(entry); + if (data == NULL) { + fprintf(stderr, "ERROR: unable to uncompress entry '%s'\n", + storageName); + return -1; + } + out->add(data, size, storageName, compressionMethod, NULL); + free((void*)data); + } + count++; + } + return count; +} + +ssize_t processJarFiles(Bundle* bundle, ZipFile* zip) +{ + status_t err; + ssize_t count = 0; + const android::Vector& jars = bundle->getJarFiles(); + + size_t N = jars.size(); + for (size_t i=0; i& grp); +}; + +// ========================================================================== +// ========================================================================== +// ========================================================================== + +static String8 parseResourceName(const String8& leaf) +{ + const char* firstDot = strchr(leaf.string(), '.'); + const char* str = leaf.string(); + + if (firstDot) { + return String8(str, firstDot-str); + } else { + return String8(str); + } +} + +ResourceTypeSet::ResourceTypeSet() + :RefBase(), + KeyedVector >() +{ +} + +FilePathStore::FilePathStore() + :RefBase(), + Vector() +{ +} + +class ResourceDirIterator +{ +public: + ResourceDirIterator(const sp& set, const String8& resType) + : mResType(resType), mSet(set), mSetPos(0), mGroupPos(0) + { + } + + inline const sp& getGroup() const { return mGroup; } + inline const sp& getFile() const { return mFile; } + + inline const String8& getBaseName() const { return mBaseName; } + inline const String8& getLeafName() const { return mLeafName; } + inline String8 getPath() const { return mPath; } + inline const ResTable_config& getParams() const { return mParams; } + + enum { + EOD = 1 + }; + + ssize_t next() + { + while (true) { + sp group; + sp file; + + // Try to get next file in this current group. + if (mGroup != NULL && mGroupPos < mGroup->getFiles().size()) { + group = mGroup; + file = group->getFiles().valueAt(mGroupPos++); + + // Try to get the next group/file in this directory + } else if (mSetPos < mSet->size()) { + mGroup = group = mSet->valueAt(mSetPos++); + if (group->getFiles().size() < 1) { + continue; + } + file = group->getFiles().valueAt(0); + mGroupPos = 1; + + // All done! + } else { + return EOD; + } + + mFile = file; + + String8 leaf(group->getLeaf()); + mLeafName = String8(leaf); + mParams = file->getGroupEntry().toParams(); + NOISY(printf("Dir %s: mcc=%d mnc=%d lang=%c%c cnt=%c%c orient=%d ui=%d density=%d touch=%d key=%d inp=%d nav=%d\n", + group->getPath().string(), mParams.mcc, mParams.mnc, + mParams.language[0] ? mParams.language[0] : '-', + mParams.language[1] ? mParams.language[1] : '-', + mParams.country[0] ? mParams.country[0] : '-', + mParams.country[1] ? mParams.country[1] : '-', + mParams.orientation, mParams.uiMode, + mParams.density, mParams.touchscreen, mParams.keyboard, + mParams.inputFlags, mParams.navigation)); + mPath = "res"; + mPath.appendPath(file->getGroupEntry().toDirName(mResType)); + mPath.appendPath(leaf); + mBaseName = parseResourceName(leaf); + if (mBaseName == "") { + fprintf(stderr, "Error: malformed resource filename %s\n", + file->getPrintableSource().string()); + return UNKNOWN_ERROR; + } + + NOISY(printf("file name=%s\n", mBaseName.string())); + + return NO_ERROR; + } + } + +private: + String8 mResType; + + const sp mSet; + size_t mSetPos; + + sp mGroup; + size_t mGroupPos; + + sp mFile; + String8 mBaseName; + String8 mLeafName; + String8 mPath; + ResTable_config mParams; +}; + +// ========================================================================== +// ========================================================================== +// ========================================================================== + +bool isValidResourceType(const String8& type) +{ + return type == "anim" || type == "animator" || type == "interpolator" + || type == "transition" || type == "scene" + || type == "drawable" || type == "layout" + || type == "values" || type == "xml" || type == "raw" + || type == "color" || type == "menu" || type == "mipmap"; +} + +static sp getResourceFile(const sp& assets, bool makeIfNecessary=true) +{ + sp group = assets->getFiles().valueFor(String8("resources.arsc")); + sp file; + if (group != NULL) { + file = group->getFiles().valueFor(AaptGroupEntry()); + if (file != NULL) { + return file; + } + } + + if (!makeIfNecessary) { + return NULL; + } + return assets->addFile(String8("resources.arsc"), AaptGroupEntry(), String8(), + NULL, String8()); +} + +static status_t parsePackage(Bundle* bundle, const sp& assets, + const sp& grp) +{ + if (grp->getFiles().size() != 1) { + fprintf(stderr, "warning: Multiple AndroidManifest.xml files found, using %s\n", + grp->getFiles().valueAt(0)->getPrintableSource().string()); + } + + sp file = grp->getFiles().valueAt(0); + + ResXMLTree block; + status_t err = parseXMLResource(file, &block); + if (err != NO_ERROR) { + return err; + } + //printXMLBlock(&block); + + ResXMLTree::event_code_t code; + while ((code=block.next()) != ResXMLTree::START_TAG + && code != ResXMLTree::END_DOCUMENT + && code != ResXMLTree::BAD_DOCUMENT) { + } + + size_t len; + if (code != ResXMLTree::START_TAG) { + fprintf(stderr, "%s:%d: No start tag found\n", + file->getPrintableSource().string(), block.getLineNumber()); + return UNKNOWN_ERROR; + } + if (strcmp16(block.getElementName(&len), String16("manifest").string()) != 0) { + fprintf(stderr, "%s:%d: Invalid start tag %s, expected \n", + file->getPrintableSource().string(), block.getLineNumber(), + String8(block.getElementName(&len)).string()); + return UNKNOWN_ERROR; + } + + ssize_t nameIndex = block.indexOfAttribute(NULL, "package"); + if (nameIndex < 0) { + fprintf(stderr, "%s:%d: does not have package attribute.\n", + file->getPrintableSource().string(), block.getLineNumber()); + return UNKNOWN_ERROR; + } + + assets->setPackage(String8(block.getAttributeStringValue(nameIndex, &len))); + + String16 uses_sdk16("uses-sdk"); + while ((code=block.next()) != ResXMLTree::END_DOCUMENT + && code != ResXMLTree::BAD_DOCUMENT) { + if (code == ResXMLTree::START_TAG) { + if (strcmp16(block.getElementName(&len), uses_sdk16.string()) == 0) { + ssize_t minSdkIndex = block.indexOfAttribute(RESOURCES_ANDROID_NAMESPACE, + "minSdkVersion"); + if (minSdkIndex >= 0) { + const uint16_t* minSdk16 = block.getAttributeStringValue(minSdkIndex, &len); + const char* minSdk8 = strdup(String8(minSdk16).string()); + bundle->setManifestMinSdkVersion(minSdk8); + } + } + } + } + + return NO_ERROR; +} + +// ========================================================================== +// ========================================================================== +// ========================================================================== + +static status_t makeFileResources(Bundle* bundle, const sp& assets, + ResourceTable* table, + const sp& set, + const char* resType) +{ + String8 type8(resType); + String16 type16(resType); + + bool hasErrors = false; + + ResourceDirIterator it(set, String8(resType)); + ssize_t res; + while ((res=it.next()) == NO_ERROR) { + if (bundle->getVerbose()) { + printf(" (new resource id %s from %s)\n", + it.getBaseName().string(), it.getFile()->getPrintableSource().string()); + } + String16 baseName(it.getBaseName()); + const char16_t* str = baseName.string(); + const char16_t* const end = str + baseName.size(); + while (str < end) { + if (!((*str >= 'a' && *str <= 'z') + || (*str >= '0' && *str <= '9') + || *str == '_' || *str == '.')) { + fprintf(stderr, "%s: Invalid file name: must contain only [a-z0-9_.]\n", + it.getPath().string()); + hasErrors = true; + } + str++; + } + String8 resPath = it.getPath(); + resPath.convertToResPath(); + table->addEntry(SourcePos(it.getPath(), 0), String16(assets->getPackage()), + type16, + baseName, + String16(resPath), + NULL, + &it.getParams()); + assets->addResource(it.getLeafName(), resPath, it.getFile(), type8); + } + + return hasErrors ? UNKNOWN_ERROR : NO_ERROR; +} + +class PreProcessImageWorkUnit : public WorkQueue::WorkUnit { +public: + PreProcessImageWorkUnit(const Bundle* bundle, const sp& assets, + const sp& file, volatile bool* hasErrors) : + mBundle(bundle), mAssets(assets), mFile(file), mHasErrors(hasErrors) { + } + + virtual bool run() { + status_t status = preProcessImage(mBundle, mAssets, mFile, NULL); + if (status) { + *mHasErrors = true; + } + return true; // continue even if there are errors + } + +private: + const Bundle* mBundle; + sp mAssets; + sp mFile; + volatile bool* mHasErrors; +}; + +static status_t preProcessImages(const Bundle* bundle, const sp& assets, + const sp& set, const char* type) +{ + volatile bool hasErrors = false; + ssize_t res = NO_ERROR; + if (bundle->getUseCrunchCache() == false) { + WorkQueue wq(MAX_THREADS, false); + ResourceDirIterator it(set, String8(type)); + while ((res=it.next()) == NO_ERROR) { + PreProcessImageWorkUnit* w = new PreProcessImageWorkUnit( + bundle, assets, it.getFile(), &hasErrors); + status_t status = wq.schedule(w); + if (status) { + fprintf(stderr, "preProcessImages failed: schedule() returned %d\n", status); + hasErrors = true; + delete w; + break; + } + } + status_t status = wq.finish(); + if (status) { + fprintf(stderr, "preProcessImages failed: finish() returned %d\n", status); + hasErrors = true; + } + } + return (hasErrors || (res < NO_ERROR)) ? UNKNOWN_ERROR : NO_ERROR; +} + +status_t postProcessImages(const sp& assets, + ResourceTable* table, + const sp& set) +{ + ResourceDirIterator it(set, String8("drawable")); + bool hasErrors = false; + ssize_t res; + while ((res=it.next()) == NO_ERROR) { + res = postProcessImage(assets, table, it.getFile()); + if (res < NO_ERROR) { + hasErrors = true; + } + } + + return (hasErrors || (res < NO_ERROR)) ? UNKNOWN_ERROR : NO_ERROR; +} + +static void collect_files(const sp& dir, + KeyedVector >* resources) +{ + const DefaultKeyedVector >& groups = dir->getFiles(); + int N = groups.size(); + for (int i=0; i& group = groups.valueAt(i); + + const DefaultKeyedVector >& files + = group->getFiles(); + + if (files.size() == 0) { + continue; + } + + String8 resType = files.valueAt(0)->getResourceType(); + + ssize_t index = resources->indexOfKey(resType); + + if (index < 0) { + sp set = new ResourceTypeSet(); + NOISY(printf("Creating new resource type set for leaf %s with group %s (%p)\n", + leafName.string(), group->getPath().string(), group.get())); + set->add(leafName, group); + resources->add(resType, set); + } else { + sp set = resources->valueAt(index); + index = set->indexOfKey(leafName); + if (index < 0) { + NOISY(printf("Adding to resource type set for leaf %s group %s (%p)\n", + leafName.string(), group->getPath().string(), group.get())); + set->add(leafName, group); + } else { + sp existingGroup = set->valueAt(index); + NOISY(printf("Extending to resource type set for leaf %s group %s (%p)\n", + leafName.string(), group->getPath().string(), group.get())); + for (size_t j=0; jgetSourceFile().string(), + files.keyAt(j).toDirName(String8()).string(), + resType.string())); + status_t err = existingGroup->addFile(files.valueAt(j)); + } + } + } + } +} + +static void collect_files(const sp& ass, + KeyedVector >* resources) +{ + const Vector >& dirs = ass->resDirs(); + int N = dirs.size(); + + for (int i=0; i d = dirs.itemAt(i); + NOISY(printf("Collecting dir #%d %p: %s, leaf %s\n", i, d.get(), d->getPath().string(), + d->getLeaf().string())); + collect_files(d, resources); + + // don't try to include the res dir + NOISY(printf("Removing dir leaf %s\n", d->getLeaf().string())); + ass->removeDir(d->getLeaf()); + } +} + +enum { + ATTR_OKAY = -1, + ATTR_NOT_FOUND = -2, + ATTR_LEADING_SPACES = -3, + ATTR_TRAILING_SPACES = -4 +}; +static int validateAttr(const String8& path, const ResTable& table, + const ResXMLParser& parser, + const char* ns, const char* attr, const char* validChars, bool required) +{ + size_t len; + + ssize_t index = parser.indexOfAttribute(ns, attr); + const uint16_t* str; + Res_value value; + if (index >= 0 && parser.getAttributeValue(index, &value) >= 0) { + const ResStringPool* pool = &parser.getStrings(); + if (value.dataType == Res_value::TYPE_REFERENCE) { + uint32_t specFlags = 0; + int strIdx; + if ((strIdx=table.resolveReference(&value, 0x10000000, NULL, &specFlags)) < 0) { + fprintf(stderr, "%s:%d: Tag <%s> attribute %s references unknown resid 0x%08x.\n", + path.string(), parser.getLineNumber(), + String8(parser.getElementName(&len)).string(), attr, + value.data); + return ATTR_NOT_FOUND; + } + + pool = table.getTableStringBlock(strIdx); + #if 0 + if (pool != NULL) { + str = pool->stringAt(value.data, &len); + } + printf("***** RES ATTR: %s specFlags=0x%x strIdx=%d: %s\n", attr, + specFlags, strIdx, str != NULL ? String8(str).string() : "???"); + #endif + if ((specFlags&~ResTable_typeSpec::SPEC_PUBLIC) != 0 && false) { + fprintf(stderr, "%s:%d: Tag <%s> attribute %s varies by configurations 0x%x.\n", + path.string(), parser.getLineNumber(), + String8(parser.getElementName(&len)).string(), attr, + specFlags); + return ATTR_NOT_FOUND; + } + } + if (value.dataType == Res_value::TYPE_STRING) { + if (pool == NULL) { + fprintf(stderr, "%s:%d: Tag <%s> attribute %s has no string block.\n", + path.string(), parser.getLineNumber(), + String8(parser.getElementName(&len)).string(), attr); + return ATTR_NOT_FOUND; + } + if ((str=pool->stringAt(value.data, &len)) == NULL) { + fprintf(stderr, "%s:%d: Tag <%s> attribute %s has corrupt string value.\n", + path.string(), parser.getLineNumber(), + String8(parser.getElementName(&len)).string(), attr); + return ATTR_NOT_FOUND; + } + } else { + fprintf(stderr, "%s:%d: Tag <%s> attribute %s has invalid type %d.\n", + path.string(), parser.getLineNumber(), + String8(parser.getElementName(&len)).string(), attr, + value.dataType); + return ATTR_NOT_FOUND; + } + if (validChars) { + for (size_t i=0; i attribute %s has invalid character '%c'.\n", + path.string(), parser.getLineNumber(), + String8(parser.getElementName(&len)).string(), attr, (char)str[i]); + return (int)i; + } + } + } + if (*str == ' ') { + fprintf(stderr, "%s:%d: Tag <%s> attribute %s can not start with a space.\n", + path.string(), parser.getLineNumber(), + String8(parser.getElementName(&len)).string(), attr); + return ATTR_LEADING_SPACES; + } + if (str[len-1] == ' ') { + fprintf(stderr, "%s:%d: Tag <%s> attribute %s can not end with a space.\n", + path.string(), parser.getLineNumber(), + String8(parser.getElementName(&len)).string(), attr); + return ATTR_TRAILING_SPACES; + } + return ATTR_OKAY; + } + if (required) { + fprintf(stderr, "%s:%d: Tag <%s> missing required attribute %s.\n", + path.string(), parser.getLineNumber(), + String8(parser.getElementName(&len)).string(), attr); + return ATTR_NOT_FOUND; + } + return ATTR_OKAY; +} + +static void checkForIds(const String8& path, ResXMLParser& parser) +{ + ResXMLTree::event_code_t code; + while ((code=parser.next()) != ResXMLTree::END_DOCUMENT + && code > ResXMLTree::BAD_DOCUMENT) { + if (code == ResXMLTree::START_TAG) { + ssize_t index = parser.indexOfAttribute(NULL, "id"); + if (index >= 0) { + fprintf(stderr, "%s:%d: warning: found plain 'id' attribute; did you mean the new 'android:id' name?\n", + path.string(), parser.getLineNumber()); + } + } + } +} + +static bool applyFileOverlay(Bundle *bundle, + const sp& assets, + sp *baseSet, + const char *resType) +{ + if (bundle->getVerbose()) { + printf("applyFileOverlay for %s\n", resType); + } + + // Replace any base level files in this category with any found from the overlay + // Also add any found only in the overlay. + sp overlay = assets->getOverlay(); + String8 resTypeString(resType); + + // work through the linked list of overlays + while (overlay.get()) { + KeyedVector >* overlayRes = overlay->getResources(); + + // get the overlay resources of the requested type + ssize_t index = overlayRes->indexOfKey(resTypeString); + if (index >= 0) { + sp overlaySet = overlayRes->valueAt(index); + + // for each of the resources, check for a match in the previously built + // non-overlay "baseset". + size_t overlayCount = overlaySet->size(); + for (size_t overlayIndex=0; overlayIndexgetVerbose()) { + printf("trying overlaySet Key=%s\n",overlaySet->keyAt(overlayIndex).string()); + } + size_t baseIndex = UNKNOWN_ERROR; + if (baseSet->get() != NULL) { + baseIndex = (*baseSet)->indexOfKey(overlaySet->keyAt(overlayIndex)); + } + if (baseIndex < UNKNOWN_ERROR) { + // look for same flavor. For a given file (strings.xml, for example) + // there may be a locale specific or other flavors - we want to match + // the same flavor. + sp overlayGroup = overlaySet->valueAt(overlayIndex); + sp baseGroup = (*baseSet)->valueAt(baseIndex); + + DefaultKeyedVector > overlayFiles = + overlayGroup->getFiles(); + if (bundle->getVerbose()) { + DefaultKeyedVector > baseFiles = + baseGroup->getFiles(); + for (size_t i=0; i < baseFiles.size(); i++) { + printf("baseFile " ZD " has flavor %s\n", (ZD_TYPE) i, + baseFiles.keyAt(i).toString().string()); + } + for (size_t i=0; i < overlayFiles.size(); i++) { + printf("overlayFile " ZD " has flavor %s\n", (ZD_TYPE) i, + overlayFiles.keyAt(i).toString().string()); + } + } + + size_t overlayGroupSize = overlayFiles.size(); + for (size_t overlayGroupIndex = 0; + overlayGroupIndexgetFiles().indexOfKey(overlayFiles. + keyAt(overlayGroupIndex)); + if (baseFileIndex < UNKNOWN_ERROR) { + if (bundle->getVerbose()) { + printf("found a match (" ZD ") for overlay file %s, for flavor %s\n", + (ZD_TYPE) baseFileIndex, + overlayGroup->getLeaf().string(), + overlayFiles.keyAt(overlayGroupIndex).toString().string()); + } + baseGroup->removeFile(baseFileIndex); + } else { + // didn't find a match fall through and add it.. + if (true || bundle->getVerbose()) { + printf("nothing matches overlay file %s, for flavor %s\n", + overlayGroup->getLeaf().string(), + overlayFiles.keyAt(overlayGroupIndex).toString().string()); + } + } + baseGroup->addFile(overlayFiles.valueAt(overlayGroupIndex)); + assets->addGroupEntry(overlayFiles.keyAt(overlayGroupIndex)); + } + } else { + if (baseSet->get() == NULL) { + *baseSet = new ResourceTypeSet(); + assets->getResources()->add(String8(resType), *baseSet); + } + // this group doesn't exist (a file that's only in the overlay) + (*baseSet)->add(overlaySet->keyAt(overlayIndex), + overlaySet->valueAt(overlayIndex)); + // make sure all flavors are defined in the resources. + sp overlayGroup = overlaySet->valueAt(overlayIndex); + DefaultKeyedVector > overlayFiles = + overlayGroup->getFiles(); + size_t overlayGroupSize = overlayFiles.size(); + for (size_t overlayGroupIndex = 0; + overlayGroupIndexaddGroupEntry(overlayFiles.keyAt(overlayGroupIndex)); + } + } + } + // this overlay didn't have resources for this type + } + // try next overlay + overlay = overlay->getOverlay(); + } + return true; +} + +/* + * Inserts an attribute in a given node, only if the attribute does not + * exist. + * If errorOnFailedInsert is true, and the attribute already exists, returns false. + * Returns true otherwise, even if the attribute already exists. + */ +bool addTagAttribute(const sp& node, const char* ns8, + const char* attr8, const char* value, bool errorOnFailedInsert) +{ + if (value == NULL) { + return true; + } + + const String16 ns(ns8); + const String16 attr(attr8); + + if (node->getAttribute(ns, attr) != NULL) { + if (errorOnFailedInsert) { + fprintf(stderr, "Error: AndroidManifest.xml already defines %s (in %s);" + " cannot insert new value %s.\n", + String8(attr).string(), String8(ns).string(), value); + return false; + } + + fprintf(stderr, "Warning: AndroidManifest.xml already defines %s (in %s);" + " using existing value in manifest.\n", + String8(attr).string(), String8(ns).string()); + + // don't stop the build. + return true; + } + + node->addAttribute(ns, attr, String16(value)); + return true; +} + +static void fullyQualifyClassName(const String8& package, sp node, + const String16& attrName) { + XMLNode::attribute_entry* attr = node->editAttribute( + String16("http://schemas.android.com/apk/res/android"), attrName); + if (attr != NULL) { + String8 name(attr->string); + + // asdf --> package.asdf + // .asdf .a.b --> package.asdf package.a.b + // asdf.adsf --> asdf.asdf + String8 className; + const char* p = name.string(); + const char* q = strchr(p, '.'); + if (p == q) { + className += package; + className += name; + } else if (q == NULL) { + className += package; + className += "."; + className += name; + } else { + className += name; + } + NOISY(printf("Qualifying class '%s' to '%s'", name.string(), className.string())); + attr->string.setTo(String16(className)); + } +} + +status_t massageManifest(Bundle* bundle, sp root) +{ + root = root->searchElement(String16(), String16("manifest")); + if (root == NULL) { + fprintf(stderr, "No tag.\n"); + return UNKNOWN_ERROR; + } + + bool errorOnFailedInsert = bundle->getErrorOnFailedInsert(); + + if (!addTagAttribute(root, RESOURCES_ANDROID_NAMESPACE, "versionCode", + bundle->getVersionCode(), errorOnFailedInsert)) { + return UNKNOWN_ERROR; + } + if (!addTagAttribute(root, RESOURCES_ANDROID_NAMESPACE, "versionName", + bundle->getVersionName(), errorOnFailedInsert)) { + return UNKNOWN_ERROR; + } + + if (bundle->getMinSdkVersion() != NULL + || bundle->getTargetSdkVersion() != NULL + || bundle->getMaxSdkVersion() != NULL) { + sp vers = root->getChildElement(String16(), String16("uses-sdk")); + if (vers == NULL) { + vers = XMLNode::newElement(root->getFilename(), String16(), String16("uses-sdk")); + root->insertChildAt(vers, 0); + } + + if (!addTagAttribute(vers, RESOURCES_ANDROID_NAMESPACE, "minSdkVersion", + bundle->getMinSdkVersion(), errorOnFailedInsert)) { + return UNKNOWN_ERROR; + } + if (!addTagAttribute(vers, RESOURCES_ANDROID_NAMESPACE, "targetSdkVersion", + bundle->getTargetSdkVersion(), errorOnFailedInsert)) { + return UNKNOWN_ERROR; + } + if (!addTagAttribute(vers, RESOURCES_ANDROID_NAMESPACE, "maxSdkVersion", + bundle->getMaxSdkVersion(), errorOnFailedInsert)) { + return UNKNOWN_ERROR; + } + } + + if (bundle->getDebugMode()) { + sp application = root->getChildElement(String16(), String16("application")); + if (application != NULL) { + if (!addTagAttribute(application, RESOURCES_ANDROID_NAMESPACE, "debuggable", "true", + errorOnFailedInsert)) { + return UNKNOWN_ERROR; + } + } + } + + // Deal with manifest package name overrides + const char* manifestPackageNameOverride = bundle->getManifestPackageNameOverride(); + if (manifestPackageNameOverride != NULL) { + // Update the actual package name + XMLNode::attribute_entry* attr = root->editAttribute(String16(), String16("package")); + if (attr == NULL) { + fprintf(stderr, "package name is required with --rename-manifest-package.\n"); + return UNKNOWN_ERROR; + } + String8 origPackage(attr->string); + attr->string.setTo(String16(manifestPackageNameOverride)); + NOISY(printf("Overriding package '%s' to be '%s'\n", origPackage.string(), manifestPackageNameOverride)); + + // Make class names fully qualified + sp application = root->getChildElement(String16(), String16("application")); + if (application != NULL) { + fullyQualifyClassName(origPackage, application, String16("name")); + fullyQualifyClassName(origPackage, application, String16("backupAgent")); + + Vector >& children = const_cast >&>(application->getChildren()); + for (size_t i = 0; i < children.size(); i++) { + sp child = children.editItemAt(i); + String8 tag(child->getElementName()); + if (tag == "activity" || tag == "service" || tag == "receiver" || tag == "provider") { + fullyQualifyClassName(origPackage, child, String16("name")); + } else if (tag == "activity-alias") { + fullyQualifyClassName(origPackage, child, String16("name")); + fullyQualifyClassName(origPackage, child, String16("targetActivity")); + } + } + } + } + + // Deal with manifest package name overrides + const char* instrumentationPackageNameOverride = bundle->getInstrumentationPackageNameOverride(); + if (instrumentationPackageNameOverride != NULL) { + // Fix up instrumentation targets. + Vector >& children = const_cast >&>(root->getChildren()); + for (size_t i = 0; i < children.size(); i++) { + sp child = children.editItemAt(i); + String8 tag(child->getElementName()); + if (tag == "instrumentation") { + XMLNode::attribute_entry* attr = child->editAttribute( + String16("http://schemas.android.com/apk/res/android"), String16("targetPackage")); + if (attr != NULL) { + attr->string.setTo(String16(instrumentationPackageNameOverride)); + } + } + } + } + + return NO_ERROR; +} + +#define ASSIGN_IT(n) \ + do { \ + ssize_t index = resources->indexOfKey(String8(#n)); \ + if (index >= 0) { \ + n ## s = resources->valueAt(index); \ + } \ + } while (0) + +status_t updatePreProcessedCache(Bundle* bundle) +{ + #if BENCHMARK + fprintf(stdout, "BENCHMARK: Starting PNG PreProcessing \n"); + long startPNGTime = clock(); + #endif /* BENCHMARK */ + + String8 source(bundle->getResourceSourceDirs()[0]); + String8 dest(bundle->getCrunchedOutputDir()); + + FileFinder* ff = new SystemFileFinder(); + CrunchCache cc(source,dest,ff); + + CacheUpdater* cu = new SystemCacheUpdater(bundle); + size_t numFiles = cc.crunch(cu); + + if (bundle->getVerbose()) + fprintf(stdout, "Crunched %d PNG files to update cache\n", (int)numFiles); + + delete ff; + delete cu; + + #if BENCHMARK + fprintf(stdout, "BENCHMARK: End PNG PreProcessing. Time Elapsed: %f ms \n" + ,(clock() - startPNGTime)/1000.0); + #endif /* BENCHMARK */ + return 0; +} + +status_t buildResources(Bundle* bundle, const sp& assets) +{ + // First, look for a package file to parse. This is required to + // be able to generate the resource information. + sp androidManifestFile = + assets->getFiles().valueFor(String8("AndroidManifest.xml")); + if (androidManifestFile == NULL) { + fprintf(stderr, "ERROR: No AndroidManifest.xml file found.\n"); + return UNKNOWN_ERROR; + } + + status_t err = parsePackage(bundle, assets, androidManifestFile); + if (err != NO_ERROR) { + return err; + } + + NOISY(printf("Creating resources for package %s\n", + assets->getPackage().string())); + + ResourceTable table(bundle, String16(assets->getPackage())); + err = table.addIncludedResources(bundle, assets); + if (err != NO_ERROR) { + return err; + } + + NOISY(printf("Found %d included resource packages\n", (int)table.size())); + + // Standard flags for compiled XML and optional UTF-8 encoding + int xmlFlags = XML_COMPILE_STANDARD_RESOURCE; + + /* Only enable UTF-8 if the caller of aapt didn't specifically + * request UTF-16 encoding and the parameters of this package + * allow UTF-8 to be used. + */ + if (!bundle->getUTF16StringsOption()) { + xmlFlags |= XML_COMPILE_UTF8; + } + + // -------------------------------------------------------------- + // First, gather all resource information. + // -------------------------------------------------------------- + + // resType -> leafName -> group + KeyedVector > *resources = + new KeyedVector >; + collect_files(assets, resources); + + sp drawables; + sp layouts; + sp anims; + sp animators; + sp interpolators; + sp transitions; + sp scenes; + sp xmls; + sp raws; + sp colors; + sp menus; + sp mipmaps; + + ASSIGN_IT(drawable); + ASSIGN_IT(layout); + ASSIGN_IT(anim); + ASSIGN_IT(animator); + ASSIGN_IT(interpolator); + ASSIGN_IT(transition); + ASSIGN_IT(scene); + ASSIGN_IT(xml); + ASSIGN_IT(raw); + ASSIGN_IT(color); + ASSIGN_IT(menu); + ASSIGN_IT(mipmap); + + assets->setResources(resources); + // now go through any resource overlays and collect their files + sp current = assets->getOverlay(); + while(current.get()) { + KeyedVector > *resources = + new KeyedVector >; + current->setResources(resources); + collect_files(current, resources); + current = current->getOverlay(); + } + // apply the overlay files to the base set + if (!applyFileOverlay(bundle, assets, &drawables, "drawable") || + !applyFileOverlay(bundle, assets, &layouts, "layout") || + !applyFileOverlay(bundle, assets, &anims, "anim") || + !applyFileOverlay(bundle, assets, &animators, "animator") || + !applyFileOverlay(bundle, assets, &interpolators, "interpolator") || + !applyFileOverlay(bundle, assets, &transitions, "transition") || + !applyFileOverlay(bundle, assets, &scenes, "scene") || + !applyFileOverlay(bundle, assets, &xmls, "xml") || + !applyFileOverlay(bundle, assets, &raws, "raw") || + !applyFileOverlay(bundle, assets, &colors, "color") || + !applyFileOverlay(bundle, assets, &menus, "menu") || + !applyFileOverlay(bundle, assets, &mipmaps, "mipmap")) { + return UNKNOWN_ERROR; + } + + bool hasErrors = false; + + if (drawables != NULL) { + if (bundle->getOutputAPKFile() != NULL) { + err = preProcessImages(bundle, assets, drawables, "drawable"); + } + if (err == NO_ERROR) { + err = makeFileResources(bundle, assets, &table, drawables, "drawable"); + if (err != NO_ERROR) { + hasErrors = true; + } + } else { + hasErrors = true; + } + } + + if (mipmaps != NULL) { + if (bundle->getOutputAPKFile() != NULL) { + err = preProcessImages(bundle, assets, mipmaps, "mipmap"); + } + if (err == NO_ERROR) { + err = makeFileResources(bundle, assets, &table, mipmaps, "mipmap"); + if (err != NO_ERROR) { + hasErrors = true; + } + } else { + hasErrors = true; + } + } + + if (layouts != NULL) { + err = makeFileResources(bundle, assets, &table, layouts, "layout"); + if (err != NO_ERROR) { + hasErrors = true; + } + } + + if (anims != NULL) { + err = makeFileResources(bundle, assets, &table, anims, "anim"); + if (err != NO_ERROR) { + hasErrors = true; + } + } + + if (animators != NULL) { + err = makeFileResources(bundle, assets, &table, animators, "animator"); + if (err != NO_ERROR) { + hasErrors = true; + } + } + + if (transitions != NULL) { + err = makeFileResources(bundle, assets, &table, transitions, "transition"); + if (err != NO_ERROR) { + hasErrors = true; + } + } + + if (scenes != NULL) { + err = makeFileResources(bundle, assets, &table, scenes, "scene"); + if (err != NO_ERROR) { + hasErrors = true; + } + } + + if (interpolators != NULL) { + err = makeFileResources(bundle, assets, &table, interpolators, "interpolator"); + if (err != NO_ERROR) { + hasErrors = true; + } + } + + if (xmls != NULL) { + err = makeFileResources(bundle, assets, &table, xmls, "xml"); + if (err != NO_ERROR) { + hasErrors = true; + } + } + + if (raws != NULL) { + err = makeFileResources(bundle, assets, &table, raws, "raw"); + if (err != NO_ERROR) { + hasErrors = true; + } + } + + // compile resources + current = assets; + while(current.get()) { + KeyedVector > *resources = + current->getResources(); + + ssize_t index = resources->indexOfKey(String8("values")); + if (index >= 0) { + ResourceDirIterator it(resources->valueAt(index), String8("values")); + ssize_t res; + while ((res=it.next()) == NO_ERROR) { + sp file = it.getFile(); + res = compileResourceFile(bundle, assets, file, it.getParams(), + (current!=assets), &table); + if (res != NO_ERROR) { + hasErrors = true; + } + } + } + current = current->getOverlay(); + } + + if (colors != NULL) { + err = makeFileResources(bundle, assets, &table, colors, "color"); + if (err != NO_ERROR) { + hasErrors = true; + } + } + + if (menus != NULL) { + err = makeFileResources(bundle, assets, &table, menus, "menu"); + if (err != NO_ERROR) { + hasErrors = true; + } + } + + // -------------------------------------------------------------------- + // Assignment of resource IDs and initial generation of resource table. + // -------------------------------------------------------------------- + + if (table.hasResources()) { + sp resFile(getResourceFile(assets)); + if (resFile == NULL) { + fprintf(stderr, "Error: unable to generate entry for resource data\n"); + return UNKNOWN_ERROR; + } + + err = table.assignResourceIds(); + if (err < NO_ERROR) { + return err; + } + } + + // -------------------------------------------------------------- + // Finally, we can now we can compile XML files, which may reference + // resources. + // -------------------------------------------------------------- + + if (layouts != NULL) { + ResourceDirIterator it(layouts, String8("layout")); + while ((err=it.next()) == NO_ERROR) { + String8 src = it.getFile()->getPrintableSource(); + err = compileXmlFile(assets, it.getFile(), &table, xmlFlags); + if (err == NO_ERROR) { + ResXMLTree block; + block.setTo(it.getFile()->getData(), it.getFile()->getSize(), true); + checkForIds(src, block); + } else { + hasErrors = true; + } + } + + if (err < NO_ERROR) { + hasErrors = true; + } + err = NO_ERROR; + } + + if (anims != NULL) { + ResourceDirIterator it(anims, String8("anim")); + while ((err=it.next()) == NO_ERROR) { + err = compileXmlFile(assets, it.getFile(), &table, xmlFlags); + if (err != NO_ERROR) { + hasErrors = true; + } + } + + if (err < NO_ERROR) { + hasErrors = true; + } + err = NO_ERROR; + } + + if (animators != NULL) { + ResourceDirIterator it(animators, String8("animator")); + while ((err=it.next()) == NO_ERROR) { + err = compileXmlFile(assets, it.getFile(), &table, xmlFlags); + if (err != NO_ERROR) { + hasErrors = true; + } + } + + if (err < NO_ERROR) { + hasErrors = true; + } + err = NO_ERROR; + } + + if (interpolators != NULL) { + ResourceDirIterator it(interpolators, String8("interpolator")); + while ((err=it.next()) == NO_ERROR) { + err = compileXmlFile(assets, it.getFile(), &table, xmlFlags); + if (err != NO_ERROR) { + hasErrors = true; + } + } + + if (err < NO_ERROR) { + hasErrors = true; + } + err = NO_ERROR; + } + + if (transitions != NULL) { + ResourceDirIterator it(transitions, String8("transition")); + while ((err=it.next()) == NO_ERROR) { + err = compileXmlFile(assets, it.getFile(), &table, xmlFlags); + if (err != NO_ERROR) { + hasErrors = true; + } + } + + if (err < NO_ERROR) { + hasErrors = true; + } + err = NO_ERROR; + } + + if (scenes != NULL) { + ResourceDirIterator it(scenes, String8("scene")); + while ((err=it.next()) == NO_ERROR) { + err = compileXmlFile(assets, it.getFile(), &table, xmlFlags); + if (err != NO_ERROR) { + hasErrors = true; + } + } + + if (err < NO_ERROR) { + hasErrors = true; + } + err = NO_ERROR; + } + + if (xmls != NULL) { + ResourceDirIterator it(xmls, String8("xml")); + while ((err=it.next()) == NO_ERROR) { + err = compileXmlFile(assets, it.getFile(), &table, xmlFlags); + if (err != NO_ERROR) { + hasErrors = true; + } + } + + if (err < NO_ERROR) { + hasErrors = true; + } + err = NO_ERROR; + } + + if (drawables != NULL) { + err = postProcessImages(assets, &table, drawables); + if (err != NO_ERROR) { + hasErrors = true; + } + } + + if (colors != NULL) { + ResourceDirIterator it(colors, String8("color")); + while ((err=it.next()) == NO_ERROR) { + err = compileXmlFile(assets, it.getFile(), &table, xmlFlags); + if (err != NO_ERROR) { + hasErrors = true; + } + } + + if (err < NO_ERROR) { + hasErrors = true; + } + err = NO_ERROR; + } + + if (menus != NULL) { + ResourceDirIterator it(menus, String8("menu")); + while ((err=it.next()) == NO_ERROR) { + String8 src = it.getFile()->getPrintableSource(); + err = compileXmlFile(assets, it.getFile(), &table, xmlFlags); + if (err != NO_ERROR) { + hasErrors = true; + } + ResXMLTree block; + block.setTo(it.getFile()->getData(), it.getFile()->getSize(), true); + checkForIds(src, block); + } + + if (err < NO_ERROR) { + hasErrors = true; + } + err = NO_ERROR; + } + + if (table.validateLocalizations()) { + hasErrors = true; + } + + if (hasErrors) { + return UNKNOWN_ERROR; + } + + const sp manifestFile(androidManifestFile->getFiles().valueAt(0)); + String8 manifestPath(manifestFile->getPrintableSource()); + + // Generate final compiled manifest file. + manifestFile->clearData(); + sp manifestTree = XMLNode::parse(manifestFile); + if (manifestTree == NULL) { + return UNKNOWN_ERROR; + } + err = massageManifest(bundle, manifestTree); + if (err < NO_ERROR) { + return err; + } + err = compileXmlFile(assets, manifestTree, manifestFile, &table); + if (err < NO_ERROR) { + return err; + } + + //block.restart(); + //printXMLBlock(&block); + + // -------------------------------------------------------------- + // Generate the final resource table. + // Re-flatten because we may have added new resource IDs + // -------------------------------------------------------------- + + ResTable finalResTable; + sp resFile; + + if (table.hasResources()) { + sp symbols = assets->getSymbolsFor(String8("R")); + err = table.addSymbols(symbols); + if (err < NO_ERROR) { + return err; + } + + resFile = getResourceFile(assets); + if (resFile == NULL) { + fprintf(stderr, "Error: unable to generate entry for resource data\n"); + return UNKNOWN_ERROR; + } + + err = table.flatten(bundle, resFile); + if (err < NO_ERROR) { + return err; + } + + if (bundle->getPublicOutputFile()) { + FILE* fp = fopen(bundle->getPublicOutputFile(), "w+"); + if (fp == NULL) { + fprintf(stderr, "ERROR: Unable to open public definitions output file %s: %s\n", + (const char*)bundle->getPublicOutputFile(), strerror(errno)); + return UNKNOWN_ERROR; + } + if (bundle->getVerbose()) { + printf(" Writing public definitions to %s.\n", bundle->getPublicOutputFile()); + } + table.writePublicDefinitions(String16(assets->getPackage()), fp); + fclose(fp); + } + + // Read resources back in, + finalResTable.add(resFile->getData(), resFile->getSize(), NULL); + +#if 0 + NOISY( + printf("Generated resources:\n"); + finalResTable.print(); + ) +#endif + } + + // Perform a basic validation of the manifest file. This time we + // parse it with the comments intact, so that we can use them to + // generate java docs... so we are not going to write this one + // back out to the final manifest data. + sp outManifestFile = new AaptFile(manifestFile->getSourceFile(), + manifestFile->getGroupEntry(), + manifestFile->getResourceType()); + err = compileXmlFile(assets, manifestFile, + outManifestFile, &table, + XML_COMPILE_ASSIGN_ATTRIBUTE_IDS + | XML_COMPILE_STRIP_WHITESPACE | XML_COMPILE_STRIP_RAW_VALUES); + if (err < NO_ERROR) { + return err; + } + ResXMLTree block; + block.setTo(outManifestFile->getData(), outManifestFile->getSize(), true); + String16 manifest16("manifest"); + String16 permission16("permission"); + String16 permission_group16("permission-group"); + String16 uses_permission16("uses-permission"); + String16 instrumentation16("instrumentation"); + String16 application16("application"); + String16 provider16("provider"); + String16 service16("service"); + String16 receiver16("receiver"); + String16 activity16("activity"); + String16 action16("action"); + String16 category16("category"); + String16 data16("scheme"); + const char* packageIdentChars = "abcdefghijklmnopqrstuvwxyz" + "ABCDEFGHIJKLMNOPQRSTUVWXYZ._0123456789"; + const char* packageIdentCharsWithTheStupid = "abcdefghijklmnopqrstuvwxyz" + "ABCDEFGHIJKLMNOPQRSTUVWXYZ._0123456789-"; + const char* classIdentChars = "abcdefghijklmnopqrstuvwxyz" + "ABCDEFGHIJKLMNOPQRSTUVWXYZ._0123456789$"; + const char* processIdentChars = "abcdefghijklmnopqrstuvwxyz" + "ABCDEFGHIJKLMNOPQRSTUVWXYZ._0123456789:"; + const char* authoritiesIdentChars = "abcdefghijklmnopqrstuvwxyz" + "ABCDEFGHIJKLMNOPQRSTUVWXYZ._0123456789-:;"; + const char* typeIdentChars = "abcdefghijklmnopqrstuvwxyz" + "ABCDEFGHIJKLMNOPQRSTUVWXYZ._0123456789:-/*+"; + const char* schemeIdentChars = "abcdefghijklmnopqrstuvwxyz" + "ABCDEFGHIJKLMNOPQRSTUVWXYZ._0123456789-"; + ResXMLTree::event_code_t code; + sp permissionSymbols; + sp permissionGroupSymbols; + while ((code=block.next()) != ResXMLTree::END_DOCUMENT + && code > ResXMLTree::BAD_DOCUMENT) { + if (code == ResXMLTree::START_TAG) { + size_t len; + if (block.getElementNamespace(&len) != NULL) { + continue; + } + if (strcmp16(block.getElementName(&len), manifest16.string()) == 0) { + if (validateAttr(manifestPath, finalResTable, block, NULL, "package", + packageIdentChars, true) != ATTR_OKAY) { + hasErrors = true; + } + if (validateAttr(manifestPath, finalResTable, block, RESOURCES_ANDROID_NAMESPACE, + "sharedUserId", packageIdentChars, false) != ATTR_OKAY) { + hasErrors = true; + } + } else if (strcmp16(block.getElementName(&len), permission16.string()) == 0 + || strcmp16(block.getElementName(&len), permission_group16.string()) == 0) { + const bool isGroup = strcmp16(block.getElementName(&len), + permission_group16.string()) == 0; + if (validateAttr(manifestPath, finalResTable, block, RESOURCES_ANDROID_NAMESPACE, + "name", isGroup ? packageIdentCharsWithTheStupid + : packageIdentChars, true) != ATTR_OKAY) { + hasErrors = true; + } + SourcePos srcPos(manifestPath, block.getLineNumber()); + sp syms; + if (!isGroup) { + syms = permissionSymbols; + if (syms == NULL) { + sp symbols = + assets->getSymbolsFor(String8("Manifest")); + syms = permissionSymbols = symbols->addNestedSymbol( + String8("permission"), srcPos); + } + } else { + syms = permissionGroupSymbols; + if (syms == NULL) { + sp symbols = + assets->getSymbolsFor(String8("Manifest")); + syms = permissionGroupSymbols = symbols->addNestedSymbol( + String8("permission_group"), srcPos); + } + } + size_t len; + ssize_t index = block.indexOfAttribute(RESOURCES_ANDROID_NAMESPACE, "name"); + const uint16_t* id = block.getAttributeStringValue(index, &len); + if (id == NULL) { + fprintf(stderr, "%s:%d: missing name attribute in element <%s>.\n", + manifestPath.string(), block.getLineNumber(), + String8(block.getElementName(&len)).string()); + hasErrors = true; + break; + } + String8 idStr(id); + char* p = idStr.lockBuffer(idStr.size()); + char* e = p + idStr.size(); + bool begins_with_digit = true; // init to true so an empty string fails + while (e > p) { + e--; + if (*e >= '0' && *e <= '9') { + begins_with_digit = true; + continue; + } + if ((*e >= 'a' && *e <= 'z') || + (*e >= 'A' && *e <= 'Z') || + (*e == '_')) { + begins_with_digit = false; + continue; + } + if (isGroup && (*e == '-')) { + *e = '_'; + begins_with_digit = false; + continue; + } + e++; + break; + } + idStr.unlockBuffer(); + // verify that we stopped because we hit a period or + // the beginning of the string, and that the + // identifier didn't begin with a digit. + if (begins_with_digit || (e != p && *(e-1) != '.')) { + fprintf(stderr, + "%s:%d: Permission name <%s> is not a valid Java symbol\n", + manifestPath.string(), block.getLineNumber(), idStr.string()); + hasErrors = true; + } + syms->addStringSymbol(String8(e), idStr, srcPos); + const uint16_t* cmt = block.getComment(&len); + if (cmt != NULL && *cmt != 0) { + //printf("Comment of %s: %s\n", String8(e).string(), + // String8(cmt).string()); + syms->appendComment(String8(e), String16(cmt), srcPos); + } else { + //printf("No comment for %s\n", String8(e).string()); + } + syms->makeSymbolPublic(String8(e), srcPos); + } else if (strcmp16(block.getElementName(&len), uses_permission16.string()) == 0) { + if (validateAttr(manifestPath, finalResTable, block, RESOURCES_ANDROID_NAMESPACE, + "name", packageIdentChars, true) != ATTR_OKAY) { + hasErrors = true; + } + } else if (strcmp16(block.getElementName(&len), instrumentation16.string()) == 0) { + if (validateAttr(manifestPath, finalResTable, block, RESOURCES_ANDROID_NAMESPACE, + "name", classIdentChars, true) != ATTR_OKAY) { + hasErrors = true; + } + if (validateAttr(manifestPath, finalResTable, block, + RESOURCES_ANDROID_NAMESPACE, "targetPackage", + packageIdentChars, true) != ATTR_OKAY) { + hasErrors = true; + } + } else if (strcmp16(block.getElementName(&len), application16.string()) == 0) { + if (validateAttr(manifestPath, finalResTable, block, RESOURCES_ANDROID_NAMESPACE, + "name", classIdentChars, false) != ATTR_OKAY) { + hasErrors = true; + } + if (validateAttr(manifestPath, finalResTable, block, + RESOURCES_ANDROID_NAMESPACE, "permission", + packageIdentChars, false) != ATTR_OKAY) { + hasErrors = true; + } + if (validateAttr(manifestPath, finalResTable, block, + RESOURCES_ANDROID_NAMESPACE, "process", + processIdentChars, false) != ATTR_OKAY) { + hasErrors = true; + } + if (validateAttr(manifestPath, finalResTable, block, + RESOURCES_ANDROID_NAMESPACE, "taskAffinity", + processIdentChars, false) != ATTR_OKAY) { + hasErrors = true; + } + } else if (strcmp16(block.getElementName(&len), provider16.string()) == 0) { + if (validateAttr(manifestPath, finalResTable, block, RESOURCES_ANDROID_NAMESPACE, + "name", classIdentChars, true) != ATTR_OKAY) { + hasErrors = true; + } + if (validateAttr(manifestPath, finalResTable, block, + RESOURCES_ANDROID_NAMESPACE, "authorities", + authoritiesIdentChars, true) != ATTR_OKAY) { + hasErrors = true; + } + if (validateAttr(manifestPath, finalResTable, block, + RESOURCES_ANDROID_NAMESPACE, "permission", + packageIdentChars, false) != ATTR_OKAY) { + hasErrors = true; + } + if (validateAttr(manifestPath, finalResTable, block, + RESOURCES_ANDROID_NAMESPACE, "process", + processIdentChars, false) != ATTR_OKAY) { + hasErrors = true; + } + } else if (strcmp16(block.getElementName(&len), service16.string()) == 0 + || strcmp16(block.getElementName(&len), receiver16.string()) == 0 + || strcmp16(block.getElementName(&len), activity16.string()) == 0) { + if (validateAttr(manifestPath, finalResTable, block, RESOURCES_ANDROID_NAMESPACE, + "name", classIdentChars, true) != ATTR_OKAY) { + hasErrors = true; + } + if (validateAttr(manifestPath, finalResTable, block, + RESOURCES_ANDROID_NAMESPACE, "permission", + packageIdentChars, false) != ATTR_OKAY) { + hasErrors = true; + } + if (validateAttr(manifestPath, finalResTable, block, + RESOURCES_ANDROID_NAMESPACE, "process", + processIdentChars, false) != ATTR_OKAY) { + hasErrors = true; + } + if (validateAttr(manifestPath, finalResTable, block, + RESOURCES_ANDROID_NAMESPACE, "taskAffinity", + processIdentChars, false) != ATTR_OKAY) { + hasErrors = true; + } + } else if (strcmp16(block.getElementName(&len), action16.string()) == 0 + || strcmp16(block.getElementName(&len), category16.string()) == 0) { + if (validateAttr(manifestPath, finalResTable, block, + RESOURCES_ANDROID_NAMESPACE, "name", + packageIdentChars, true) != ATTR_OKAY) { + hasErrors = true; + } + } else if (strcmp16(block.getElementName(&len), data16.string()) == 0) { + if (validateAttr(manifestPath, finalResTable, block, + RESOURCES_ANDROID_NAMESPACE, "mimeType", + typeIdentChars, true) != ATTR_OKAY) { + hasErrors = true; + } + if (validateAttr(manifestPath, finalResTable, block, + RESOURCES_ANDROID_NAMESPACE, "scheme", + schemeIdentChars, true) != ATTR_OKAY) { + hasErrors = true; + } + } + } + } + + if (resFile != NULL) { + // These resources are now considered to be a part of the included + // resources, for others to reference. + err = assets->addIncludedResources(resFile); + if (err < NO_ERROR) { + fprintf(stderr, "ERROR: Unable to parse generated resources, aborting.\n"); + return err; + } + } + + return err; +} + +static const char* getIndentSpace(int indent) +{ +static const char whitespace[] = +" "; + + return whitespace + sizeof(whitespace) - 1 - indent*4; +} + +static String8 flattenSymbol(const String8& symbol) { + String8 result(symbol); + ssize_t first; + if ((first = symbol.find(":", 0)) >= 0 + || (first = symbol.find(".", 0)) >= 0) { + size_t size = symbol.size(); + char* buf = result.lockBuffer(size); + for (size_t i = first; i < size; i++) { + if (buf[i] == ':' || buf[i] == '.') { + buf[i] = '_'; + } + } + result.unlockBuffer(size); + } + return result; +} + +static String8 getSymbolPackage(const String8& symbol, const sp& assets, bool pub) { + ssize_t colon = symbol.find(":", 0); + if (colon >= 0) { + return String8(symbol.string(), colon); + } + return pub ? assets->getPackage() : assets->getSymbolsPrivatePackage(); +} + +static String8 getSymbolName(const String8& symbol) { + ssize_t colon = symbol.find(":", 0); + if (colon >= 0) { + return String8(symbol.string() + colon + 1); + } + return symbol; +} + +static String16 getAttributeComment(const sp& assets, + const String8& name, + String16* outTypeComment = NULL) +{ + sp asym = assets->getSymbolsFor(String8("R")); + if (asym != NULL) { + //printf("Got R symbols!\n"); + asym = asym->getNestedSymbols().valueFor(String8("attr")); + if (asym != NULL) { + //printf("Got attrs symbols! comment %s=%s\n", + // name.string(), String8(asym->getComment(name)).string()); + if (outTypeComment != NULL) { + *outTypeComment = asym->getTypeComment(name); + } + return asym->getComment(name); + } + } + return String16(); +} + +static status_t writeLayoutClasses( + FILE* fp, const sp& assets, + const sp& symbols, int indent, bool includePrivate) +{ + const char* indentStr = getIndentSpace(indent); + if (!includePrivate) { + fprintf(fp, "%s/** @doconly */\n", indentStr); + } + fprintf(fp, "%spublic static final class styleable {\n", indentStr); + indent++; + + String16 attr16("attr"); + String16 package16(assets->getPackage()); + + indentStr = getIndentSpace(indent); + bool hasErrors = false; + + size_t i; + size_t N = symbols->getNestedSymbols().size(); + for (i=0; i nsymbols = symbols->getNestedSymbols().valueAt(i); + String8 realClassName(symbols->getNestedSymbols().keyAt(i)); + String8 nclassName(flattenSymbol(realClassName)); + + SortedVector idents; + Vector origOrder; + Vector publicFlags; + + size_t a; + size_t NA = nsymbols->getSymbols().size(); + for (a=0; agetSymbols().valueAt(a)); + int32_t code = sym.typeCode == AaptSymbolEntry::TYPE_INT32 + ? sym.int32Val : 0; + bool isPublic = true; + if (code == 0) { + String16 name16(sym.name); + uint32_t typeSpecFlags; + code = assets->getIncludedResources().identifierForName( + name16.string(), name16.size(), + attr16.string(), attr16.size(), + package16.string(), package16.size(), &typeSpecFlags); + if (code == 0) { + fprintf(stderr, "ERROR: In %s, unable to find attribute %s\n", + nclassName.string(), sym.name.string()); + hasErrors = true; + } + isPublic = (typeSpecFlags&ResTable_typeSpec::SPEC_PUBLIC) != 0; + } + idents.add(code); + origOrder.add(code); + publicFlags.add(isPublic); + } + + NA = idents.size(); + + bool deprecated = false; + + String16 comment = symbols->getComment(realClassName); + fprintf(fp, "%s/** ", indentStr); + if (comment.size() > 0) { + String8 cmt(comment); + fprintf(fp, "%s\n", cmt.string()); + if (strstr(cmt.string(), "@deprecated") != NULL) { + deprecated = true; + } + } else { + fprintf(fp, "Attributes that can be used with a %s.\n", nclassName.string()); + } + bool hasTable = false; + for (a=0; a= 0) { + if (!hasTable) { + hasTable = true; + fprintf(fp, + "%s

Includes the following attributes:

\n" + "%s \n" + "%s \n" + "%s \n" + "%s \n", + indentStr, + indentStr, + indentStr, + indentStr, + indentStr); + } + const AaptSymbolEntry& sym = nsymbols->getSymbols().valueAt(a); + if (!publicFlags.itemAt(a) && !includePrivate) { + continue; + } + String8 name8(sym.name); + String16 comment(sym.comment); + if (comment.size() <= 0) { + comment = getAttributeComment(assets, name8); + } + if (comment.size() > 0) { + const char16_t* p = comment.string(); + while (*p != 0 && *p != '.') { + if (*p == '{') { + while (*p != 0 && *p != '}') { + p++; + } + } else { + p++; + } + } + if (*p == '.') { + p++; + } + comment = String16(comment.string(), p-comment.string()); + } + fprintf(fp, "%s \n", + indentStr, nclassName.string(), + flattenSymbol(name8).string(), + getSymbolPackage(name8, assets, true).string(), + getSymbolName(name8).string(), + String8(comment).string()); + } + } + if (hasTable) { + fprintf(fp, "%s
AttributeDescription
{@link #%s_%s %s:%s}%s
\n", indentStr); + } + for (a=0; a= 0) { + const AaptSymbolEntry& sym = nsymbols->getSymbols().valueAt(a); + if (!publicFlags.itemAt(a) && !includePrivate) { + continue; + } + fprintf(fp, "%s @see #%s_%s\n", + indentStr, nclassName.string(), + flattenSymbol(sym.name).string()); + } + } + fprintf(fp, "%s */\n", getIndentSpace(indent)); + + if (deprecated) { + fprintf(fp, "%s@Deprecated\n", indentStr); + } + + fprintf(fp, + "%spublic static final int[] %s = {\n" + "%s", + indentStr, nclassName.string(), + getIndentSpace(indent+1)); + + for (a=0; a= 0) { + const AaptSymbolEntry& sym = nsymbols->getSymbols().valueAt(a); + if (!publicFlags.itemAt(a) && !includePrivate) { + continue; + } + String8 name8(sym.name); + String16 comment(sym.comment); + String16 typeComment; + if (comment.size() <= 0) { + comment = getAttributeComment(assets, name8, &typeComment); + } else { + getAttributeComment(assets, name8, &typeComment); + } + + uint32_t typeSpecFlags = 0; + String16 name16(sym.name); + assets->getIncludedResources().identifierForName( + name16.string(), name16.size(), + attr16.string(), attr16.size(), + package16.string(), package16.size(), &typeSpecFlags); + //printf("%s:%s/%s: 0x%08x\n", String8(package16).string(), + // String8(attr16).string(), String8(name16).string(), typeSpecFlags); + const bool pub = (typeSpecFlags&ResTable_typeSpec::SPEC_PUBLIC) != 0; + + bool deprecated = false; + + fprintf(fp, "%s/**\n", indentStr); + if (comment.size() > 0) { + String8 cmt(comment); + fprintf(fp, "%s

\n%s @attr description\n", indentStr, indentStr); + fprintf(fp, "%s %s\n", indentStr, cmt.string()); + if (strstr(cmt.string(), "@deprecated") != NULL) { + deprecated = true; + } + } else { + fprintf(fp, + "%s

This symbol is the offset where the {@link %s.R.attr#%s}\n" + "%s attribute's value can be found in the {@link #%s} array.\n", + indentStr, + getSymbolPackage(name8, assets, pub).string(), + getSymbolName(name8).string(), + indentStr, nclassName.string()); + } + if (typeComment.size() > 0) { + String8 cmt(typeComment); + fprintf(fp, "\n\n%s %s\n", indentStr, cmt.string()); + if (strstr(cmt.string(), "@deprecated") != NULL) { + deprecated = true; + } + } + if (comment.size() > 0) { + if (pub) { + fprintf(fp, + "%s

This corresponds to the global attribute\n" + "%s resource symbol {@link %s.R.attr#%s}.\n", + indentStr, indentStr, + getSymbolPackage(name8, assets, true).string(), + getSymbolName(name8).string()); + } else { + fprintf(fp, + "%s

This is a private symbol.\n", indentStr); + } + } + fprintf(fp, "%s @attr name %s:%s\n", indentStr, + getSymbolPackage(name8, assets, pub).string(), + getSymbolName(name8).string()); + fprintf(fp, "%s*/\n", indentStr); + if (deprecated) { + fprintf(fp, "%s@Deprecated\n", indentStr); + } + fprintf(fp, + "%spublic static final int %s_%s = %d;\n", + indentStr, nclassName.string(), + flattenSymbol(name8).string(), (int)pos); + } + } + } + + indent--; + fprintf(fp, "%s};\n", getIndentSpace(indent)); + return hasErrors ? UNKNOWN_ERROR : NO_ERROR; +} + +static status_t writeTextLayoutClasses( + FILE* fp, const sp& assets, + const sp& symbols, bool includePrivate) +{ + String16 attr16("attr"); + String16 package16(assets->getPackage()); + + bool hasErrors = false; + + size_t i; + size_t N = symbols->getNestedSymbols().size(); + for (i=0; i nsymbols = symbols->getNestedSymbols().valueAt(i); + String8 realClassName(symbols->getNestedSymbols().keyAt(i)); + String8 nclassName(flattenSymbol(realClassName)); + + SortedVector idents; + Vector origOrder; + Vector publicFlags; + + size_t a; + size_t NA = nsymbols->getSymbols().size(); + for (a=0; agetSymbols().valueAt(a)); + int32_t code = sym.typeCode == AaptSymbolEntry::TYPE_INT32 + ? sym.int32Val : 0; + bool isPublic = true; + if (code == 0) { + String16 name16(sym.name); + uint32_t typeSpecFlags; + code = assets->getIncludedResources().identifierForName( + name16.string(), name16.size(), + attr16.string(), attr16.size(), + package16.string(), package16.size(), &typeSpecFlags); + if (code == 0) { + fprintf(stderr, "ERROR: In %s, unable to find attribute %s\n", + nclassName.string(), sym.name.string()); + hasErrors = true; + } + isPublic = (typeSpecFlags&ResTable_typeSpec::SPEC_PUBLIC) != 0; + } + idents.add(code); + origOrder.add(code); + publicFlags.add(isPublic); + } + + NA = idents.size(); + + fprintf(fp, "int[] styleable %s {", nclassName.string()); + + for (a=0; a= 0) { + const AaptSymbolEntry& sym = nsymbols->getSymbols().valueAt(a); + if (!publicFlags.itemAt(a) && !includePrivate) { + continue; + } + String8 name8(sym.name); + String16 comment(sym.comment); + String16 typeComment; + if (comment.size() <= 0) { + comment = getAttributeComment(assets, name8, &typeComment); + } else { + getAttributeComment(assets, name8, &typeComment); + } + + uint32_t typeSpecFlags = 0; + String16 name16(sym.name); + assets->getIncludedResources().identifierForName( + name16.string(), name16.size(), + attr16.string(), attr16.size(), + package16.string(), package16.size(), &typeSpecFlags); + //printf("%s:%s/%s: 0x%08x\n", String8(package16).string(), + // String8(attr16).string(), String8(name16).string(), typeSpecFlags); + const bool pub = (typeSpecFlags&ResTable_typeSpec::SPEC_PUBLIC) != 0; + + fprintf(fp, + "int styleable %s_%s %d\n", + nclassName.string(), + flattenSymbol(name8).string(), (int)pos); + } + } + } + + return hasErrors ? UNKNOWN_ERROR : NO_ERROR; +} + +static status_t writeSymbolClass( + FILE* fp, const sp& assets, bool includePrivate, + const sp& symbols, const String8& className, int indent, + bool nonConstantId) +{ + fprintf(fp, "%spublic %sfinal class %s {\n", + getIndentSpace(indent), + indent != 0 ? "static " : "", className.string()); + indent++; + + size_t i; + status_t err = NO_ERROR; + + const char * id_format = nonConstantId ? + "%spublic static int %s=0x%08x;\n" : + "%spublic static final int %s=0x%08x;\n"; + + size_t N = symbols->getSymbols().size(); + for (i=0; igetSymbols().valueAt(i); + if (sym.typeCode != AaptSymbolEntry::TYPE_INT32) { + continue; + } + if (!assets->isJavaSymbol(sym, includePrivate)) { + continue; + } + String8 name8(sym.name); + String16 comment(sym.comment); + bool haveComment = false; + bool deprecated = false; + if (comment.size() > 0) { + haveComment = true; + String8 cmt(comment); + fprintf(fp, + "%s/** %s\n", + getIndentSpace(indent), cmt.string()); + if (strstr(cmt.string(), "@deprecated") != NULL) { + deprecated = true; + } + } else if (sym.isPublic && !includePrivate) { + sym.sourcePos.warning("No comment for public symbol %s:%s/%s", + assets->getPackage().string(), className.string(), + String8(sym.name).string()); + } + String16 typeComment(sym.typeComment); + if (typeComment.size() > 0) { + String8 cmt(typeComment); + if (!haveComment) { + haveComment = true; + fprintf(fp, + "%s/** %s\n", getIndentSpace(indent), cmt.string()); + } else { + fprintf(fp, + "%s %s\n", getIndentSpace(indent), cmt.string()); + } + if (strstr(cmt.string(), "@deprecated") != NULL) { + deprecated = true; + } + } + if (haveComment) { + fprintf(fp,"%s */\n", getIndentSpace(indent)); + } + if (deprecated) { + fprintf(fp, "%s@Deprecated\n", getIndentSpace(indent)); + } + fprintf(fp, id_format, + getIndentSpace(indent), + flattenSymbol(name8).string(), (int)sym.int32Val); + } + + for (i=0; igetSymbols().valueAt(i); + if (sym.typeCode != AaptSymbolEntry::TYPE_STRING) { + continue; + } + if (!assets->isJavaSymbol(sym, includePrivate)) { + continue; + } + String8 name8(sym.name); + String16 comment(sym.comment); + bool deprecated = false; + if (comment.size() > 0) { + String8 cmt(comment); + fprintf(fp, + "%s/** %s\n" + "%s */\n", + getIndentSpace(indent), cmt.string(), + getIndentSpace(indent)); + if (strstr(cmt.string(), "@deprecated") != NULL) { + deprecated = true; + } + } else if (sym.isPublic && !includePrivate) { + sym.sourcePos.warning("No comment for public symbol %s:%s/%s", + assets->getPackage().string(), className.string(), + String8(sym.name).string()); + } + if (deprecated) { + fprintf(fp, "%s@Deprecated\n", getIndentSpace(indent)); + } + fprintf(fp, "%spublic static final String %s=\"%s\";\n", + getIndentSpace(indent), + flattenSymbol(name8).string(), sym.stringVal.string()); + } + + sp styleableSymbols; + + N = symbols->getNestedSymbols().size(); + for (i=0; i nsymbols = symbols->getNestedSymbols().valueAt(i); + String8 nclassName(symbols->getNestedSymbols().keyAt(i)); + if (nclassName == "styleable") { + styleableSymbols = nsymbols; + } else { + err = writeSymbolClass(fp, assets, includePrivate, nsymbols, nclassName, indent, nonConstantId); + } + if (err != NO_ERROR) { + return err; + } + } + + if (styleableSymbols != NULL) { + err = writeLayoutClasses(fp, assets, styleableSymbols, indent, includePrivate); + if (err != NO_ERROR) { + return err; + } + } + + indent--; + fprintf(fp, "%s}\n", getIndentSpace(indent)); + return NO_ERROR; +} + +static status_t writeTextSymbolClass( + FILE* fp, const sp& assets, bool includePrivate, + const sp& symbols, const String8& className) +{ + size_t i; + status_t err = NO_ERROR; + + size_t N = symbols->getSymbols().size(); + for (i=0; igetSymbols().valueAt(i); + if (sym.typeCode != AaptSymbolEntry::TYPE_INT32) { + continue; + } + + if (!assets->isJavaSymbol(sym, includePrivate)) { + continue; + } + + String8 name8(sym.name); + fprintf(fp, "int %s %s 0x%08x\n", + className.string(), + flattenSymbol(name8).string(), (int)sym.int32Val); + } + + N = symbols->getNestedSymbols().size(); + for (i=0; i nsymbols = symbols->getNestedSymbols().valueAt(i); + String8 nclassName(symbols->getNestedSymbols().keyAt(i)); + if (nclassName == "styleable") { + err = writeTextLayoutClasses(fp, assets, nsymbols, includePrivate); + } else { + err = writeTextSymbolClass(fp, assets, includePrivate, nsymbols, nclassName); + } + if (err != NO_ERROR) { + return err; + } + } + + return NO_ERROR; +} + +status_t writeResourceSymbols(Bundle* bundle, const sp& assets, + const String8& package, bool includePrivate) +{ + if (!bundle->getRClassDir()) { + return NO_ERROR; + } + + const char* textSymbolsDest = bundle->getOutputTextSymbols(); + + String8 R("R"); + const size_t N = assets->getSymbols().size(); + for (size_t i=0; i symbols = assets->getSymbols().valueAt(i); + String8 className(assets->getSymbols().keyAt(i)); + String8 dest(bundle->getRClassDir()); + + if (bundle->getMakePackageDirs()) { + String8 pkg(package); + const char* last = pkg.string(); + const char* s = last-1; + do { + s++; + if (s > last && (*s == '.' || *s == 0)) { + String8 part(last, s-last); + dest.appendPath(part); +#ifdef HAVE_MS_C_RUNTIME + _mkdir(dest.string()); +#else + mkdir(dest.string(), S_IRUSR|S_IWUSR|S_IXUSR|S_IRGRP|S_IXGRP); +#endif + last = s+1; + } + } while (*s); + } + dest.appendPath(className); + dest.append(".java"); + FILE* fp = fopen(dest.string(), "w+"); + if (fp == NULL) { + fprintf(stderr, "ERROR: Unable to open class file %s: %s\n", + dest.string(), strerror(errno)); + return UNKNOWN_ERROR; + } + if (bundle->getVerbose()) { + printf(" Writing symbols for class %s.\n", className.string()); + } + + fprintf(fp, + "/* AUTO-GENERATED FILE. DO NOT MODIFY.\n" + " *\n" + " * This class was automatically generated by the\n" + " * aapt tool from the resource data it found. It\n" + " * should not be modified by hand.\n" + " */\n" + "\n" + "package %s;\n\n", package.string()); + + status_t err = writeSymbolClass(fp, assets, includePrivate, symbols, + className, 0, bundle->getNonConstantId()); + if (err != NO_ERROR) { + return err; + } + fclose(fp); + + if (textSymbolsDest != NULL && R == className) { + String8 textDest(textSymbolsDest); + textDest.appendPath(className); + textDest.append(".txt"); + + FILE* fp = fopen(textDest.string(), "w+"); + if (fp == NULL) { + fprintf(stderr, "ERROR: Unable to open text symbol file %s: %s\n", + textDest.string(), strerror(errno)); + return UNKNOWN_ERROR; + } + if (bundle->getVerbose()) { + printf(" Writing text symbols for class %s.\n", className.string()); + } + + status_t err = writeTextSymbolClass(fp, assets, includePrivate, symbols, + className); + if (err != NO_ERROR) { + return err; + } + fclose(fp); + } + + // If we were asked to generate a dependency file, we'll go ahead and add this R.java + // as a target in the dependency file right next to it. + if (bundle->getGenDependencies() && R == className) { + // Add this R.java to the dependency file + String8 dependencyFile(bundle->getRClassDir()); + dependencyFile.appendPath("R.java.d"); + + FILE *fp = fopen(dependencyFile.string(), "a"); + fprintf(fp,"%s \\\n", dest.string()); + fclose(fp); + } + } + + return NO_ERROR; +} + + +class ProguardKeepSet +{ +public: + // { rule --> { file locations } } + KeyedVector > rules; + + void add(const String8& rule, const String8& where); +}; + +void ProguardKeepSet::add(const String8& rule, const String8& where) +{ + ssize_t index = rules.indexOfKey(rule); + if (index < 0) { + index = rules.add(rule, SortedVector()); + } + rules.editValueAt(index).add(where); +} + +void +addProguardKeepRule(ProguardKeepSet* keep, const String8& inClassName, + const char* pkg, const String8& srcName, int line) +{ + String8 className(inClassName); + if (pkg != NULL) { + // asdf --> package.asdf + // .asdf .a.b --> package.asdf package.a.b + // asdf.adsf --> asdf.asdf + const char* p = className.string(); + const char* q = strchr(p, '.'); + if (p == q) { + className = pkg; + className.append(inClassName); + } else if (q == NULL) { + className = pkg; + className.append("."); + className.append(inClassName); + } + } + + String8 rule("-keep class "); + rule += className; + rule += " { (...); }"; + + String8 location("view "); + location += srcName; + char lineno[20]; + sprintf(lineno, ":%d", line); + location += lineno; + + keep->add(rule, location); +} + +void +addProguardKeepMethodRule(ProguardKeepSet* keep, const String8& memberName, + const char* pkg, const String8& srcName, int line) +{ + String8 rule("-keepclassmembers class * { *** "); + rule += memberName; + rule += "(...); }"; + + String8 location("onClick "); + location += srcName; + char lineno[20]; + sprintf(lineno, ":%d", line); + location += lineno; + + keep->add(rule, location); +} + +status_t +writeProguardForAndroidManifest(ProguardKeepSet* keep, const sp& assets) +{ + status_t err; + ResXMLTree tree; + size_t len; + ResXMLTree::event_code_t code; + int depth = 0; + bool inApplication = false; + String8 error; + sp assGroup; + sp assFile; + String8 pkg; + + // First, look for a package file to parse. This is required to + // be able to generate the resource information. + assGroup = assets->getFiles().valueFor(String8("AndroidManifest.xml")); + if (assGroup == NULL) { + fprintf(stderr, "ERROR: No AndroidManifest.xml file found.\n"); + return -1; + } + + if (assGroup->getFiles().size() != 1) { + fprintf(stderr, "warning: Multiple AndroidManifest.xml files found, using %s\n", + assGroup->getFiles().valueAt(0)->getPrintableSource().string()); + } + + assFile = assGroup->getFiles().valueAt(0); + + err = parseXMLResource(assFile, &tree); + if (err != NO_ERROR) { + return err; + } + + tree.restart(); + + while ((code=tree.next()) != ResXMLTree::END_DOCUMENT && code != ResXMLTree::BAD_DOCUMENT) { + if (code == ResXMLTree::END_TAG) { + if (/* name == "Application" && */ depth == 2) { + inApplication = false; + } + depth--; + continue; + } + if (code != ResXMLTree::START_TAG) { + continue; + } + depth++; + String8 tag(tree.getElementName(&len)); + // printf("Depth %d tag %s\n", depth, tag.string()); + bool keepTag = false; + if (depth == 1) { + if (tag != "manifest") { + fprintf(stderr, "ERROR: manifest does not start with tag\n"); + return -1; + } + pkg = getAttribute(tree, NULL, "package", NULL); + } else if (depth == 2) { + if (tag == "application") { + inApplication = true; + keepTag = true; + + String8 agent = getAttribute(tree, "http://schemas.android.com/apk/res/android", + "backupAgent", &error); + if (agent.length() > 0) { + addProguardKeepRule(keep, agent, pkg.string(), + assFile->getPrintableSource(), tree.getLineNumber()); + } + } else if (tag == "instrumentation") { + keepTag = true; + } + } + if (!keepTag && inApplication && depth == 3) { + if (tag == "activity" || tag == "service" || tag == "receiver" || tag == "provider") { + keepTag = true; + } + } + if (keepTag) { + String8 name = getAttribute(tree, "http://schemas.android.com/apk/res/android", + "name", &error); + if (error != "") { + fprintf(stderr, "ERROR: %s\n", error.string()); + return -1; + } + if (name.length() > 0) { + addProguardKeepRule(keep, name, pkg.string(), + assFile->getPrintableSource(), tree.getLineNumber()); + } + } + } + + return NO_ERROR; +} + +struct NamespaceAttributePair { + const char* ns; + const char* attr; + + NamespaceAttributePair(const char* n, const char* a) : ns(n), attr(a) {} + NamespaceAttributePair() : ns(NULL), attr(NULL) {} +}; + +status_t +writeProguardForXml(ProguardKeepSet* keep, const sp& layoutFile, + const char* startTag, const KeyedVector >* tagAttrPairs) +{ + status_t err; + ResXMLTree tree; + size_t len; + ResXMLTree::event_code_t code; + + err = parseXMLResource(layoutFile, &tree); + if (err != NO_ERROR) { + return err; + } + + tree.restart(); + + if (startTag != NULL) { + bool haveStart = false; + while ((code=tree.next()) != ResXMLTree::END_DOCUMENT && code != ResXMLTree::BAD_DOCUMENT) { + if (code != ResXMLTree::START_TAG) { + continue; + } + String8 tag(tree.getElementName(&len)); + if (tag == startTag) { + haveStart = true; + } + break; + } + if (!haveStart) { + return NO_ERROR; + } + } + + while ((code=tree.next()) != ResXMLTree::END_DOCUMENT && code != ResXMLTree::BAD_DOCUMENT) { + if (code != ResXMLTree::START_TAG) { + continue; + } + String8 tag(tree.getElementName(&len)); + + // If there is no '.', we'll assume that it's one of the built in names. + if (strchr(tag.string(), '.')) { + addProguardKeepRule(keep, tag, NULL, + layoutFile->getPrintableSource(), tree.getLineNumber()); + } else if (tagAttrPairs != NULL) { + ssize_t tagIndex = tagAttrPairs->indexOfKey(tag); + if (tagIndex >= 0) { + const Vector& nsAttrVector = tagAttrPairs->valueAt(tagIndex); + for (size_t i = 0; i < nsAttrVector.size(); i++) { + const NamespaceAttributePair& nsAttr = nsAttrVector[i]; + + ssize_t attrIndex = tree.indexOfAttribute(nsAttr.ns, nsAttr.attr); + if (attrIndex < 0) { + // fprintf(stderr, "%s:%d: <%s> does not have attribute %s:%s.\n", + // layoutFile->getPrintableSource().string(), tree.getLineNumber(), + // tag.string(), nsAttr.ns, nsAttr.attr); + } else { + size_t len; + addProguardKeepRule(keep, + String8(tree.getAttributeStringValue(attrIndex, &len)), NULL, + layoutFile->getPrintableSource(), tree.getLineNumber()); + } + } + } + } + ssize_t attrIndex = tree.indexOfAttribute(RESOURCES_ANDROID_NAMESPACE, "onClick"); + if (attrIndex >= 0) { + size_t len; + addProguardKeepMethodRule(keep, + String8(tree.getAttributeStringValue(attrIndex, &len)), NULL, + layoutFile->getPrintableSource(), tree.getLineNumber()); + } + } + + return NO_ERROR; +} + +static void addTagAttrPair(KeyedVector >* dest, + const char* tag, const char* ns, const char* attr) { + String8 tagStr(tag); + ssize_t index = dest->indexOfKey(tagStr); + + if (index < 0) { + Vector vector; + vector.add(NamespaceAttributePair(ns, attr)); + dest->add(tagStr, vector); + } else { + dest->editValueAt(index).add(NamespaceAttributePair(ns, attr)); + } +} + +status_t +writeProguardForLayouts(ProguardKeepSet* keep, const sp& assets) +{ + status_t err; + + // tag:attribute pairs that should be checked in layout files. + KeyedVector > kLayoutTagAttrPairs; + addTagAttrPair(&kLayoutTagAttrPairs, "view", NULL, "class"); + addTagAttrPair(&kLayoutTagAttrPairs, "fragment", NULL, "class"); + addTagAttrPair(&kLayoutTagAttrPairs, "fragment", RESOURCES_ANDROID_NAMESPACE, "name"); + + // tag:attribute pairs that should be checked in xml files. + KeyedVector > kXmlTagAttrPairs; + addTagAttrPair(&kXmlTagAttrPairs, "PreferenceScreen", RESOURCES_ANDROID_NAMESPACE, "fragment"); + addTagAttrPair(&kXmlTagAttrPairs, "header", RESOURCES_ANDROID_NAMESPACE, "fragment"); + + const Vector >& dirs = assets->resDirs(); + const size_t K = dirs.size(); + for (size_t k=0; k& d = dirs.itemAt(k); + const String8& dirName = d->getLeaf(); + const char* startTag = NULL; + const KeyedVector >* tagAttrPairs = NULL; + if ((dirName == String8("layout")) || (strncmp(dirName.string(), "layout-", 7) == 0)) { + tagAttrPairs = &kLayoutTagAttrPairs; + } else if ((dirName == String8("xml")) || (strncmp(dirName.string(), "xml-", 4) == 0)) { + startTag = "PreferenceScreen"; + tagAttrPairs = &kXmlTagAttrPairs; + } else if ((dirName == String8("menu")) || (strncmp(dirName.string(), "menu-", 5) == 0)) { + startTag = "menu"; + tagAttrPairs = NULL; + } else { + continue; + } + + const KeyedVector > groups = d->getFiles(); + const size_t N = groups.size(); + for (size_t i=0; i& group = groups.valueAt(i); + const DefaultKeyedVector >& files = group->getFiles(); + const size_t M = files.size(); + for (size_t j=0; j overlay = assets->getOverlay(); + if (overlay.get()) { + return writeProguardForLayouts(keep, overlay); + } + + return NO_ERROR; +} + +status_t +writeProguardFile(Bundle* bundle, const sp& assets) +{ + status_t err = -1; + + if (!bundle->getProguardFile()) { + return NO_ERROR; + } + + ProguardKeepSet keep; + + err = writeProguardForAndroidManifest(&keep, assets); + if (err < 0) { + return err; + } + + err = writeProguardForLayouts(&keep, assets); + if (err < 0) { + return err; + } + + FILE* fp = fopen(bundle->getProguardFile(), "w+"); + if (fp == NULL) { + fprintf(stderr, "ERROR: Unable to open class file %s: %s\n", + bundle->getProguardFile(), strerror(errno)); + return UNKNOWN_ERROR; + } + + const KeyedVector >& rules = keep.rules; + const size_t N = rules.size(); + for (size_t i=0; i& locations = rules.valueAt(i); + const size_t M = locations.size(); + for (size_t j=0; j& files, FILE* fp) +{ + status_t deps = -1; + for (size_t file_i = 0; file_i < files->size(); ++file_i) { + // Add the full file path to the dependency file + fprintf(fp, "%s \\\n", files->itemAt(file_i).string()); + deps++; + } + return deps; +} + +status_t +writeDependencyPreReqs(Bundle* bundle, const sp& assets, FILE* fp, bool includeRaw) +{ + status_t deps = -1; + deps += writePathsToFile(assets->getFullResPaths(), fp); + if (includeRaw) { + deps += writePathsToFile(assets->getFullAssetPaths(), fp); + } + return deps; +} diff --git a/tools/aapt/ResourceFilter.cpp b/tools/aapt/ResourceFilter.cpp new file mode 100644 index 0000000000000..8cfd2a5ec0d6d --- /dev/null +++ b/tools/aapt/ResourceFilter.cpp @@ -0,0 +1,112 @@ +// +// Copyright 2011 The Android Open Source Project +// +// Build resource files from raw assets. +// + +#include "ResourceFilter.h" + +status_t +ResourceFilter::parse(const char* arg) +{ + if (arg == NULL) { + return 0; + } + + const char* p = arg; + const char* q; + + while (true) { + q = strchr(p, ','); + if (q == NULL) { + q = p + strlen(p); + } + + String8 part(p, q-p); + + if (part == "zz_ZZ") { + mContainsPseudo = true; + } + int axis; + uint32_t value; + if (AaptGroupEntry::parseNamePart(part, &axis, &value)) { + fprintf(stderr, "Invalid configuration: %s\n", arg); + fprintf(stderr, " "); + for (int i=0; i()); + } + SortedVector& sv = mData.editValueFor(axis); + sv.add(value); + // if it's a locale with a region, also match an unmodified locale of the + // same language + if (axis == AXIS_LANGUAGE) { + if (value & 0xffff0000) { + sv.add(value & 0x0000ffff); + } + } + p = q; + if (!*p) break; + p++; + } + + return NO_ERROR; +} + +bool +ResourceFilter::isEmpty() const +{ + return mData.size() == 0; +} + +bool +ResourceFilter::match(int axis, uint32_t value) const +{ + if (value == 0) { + // they didn't specify anything so take everything + return true; + } + ssize_t index = mData.indexOfKey(axis); + if (index < 0) { + // we didn't request anything on this axis so take everything + return true; + } + const SortedVector& sv = mData.valueAt(index); + return sv.indexOf(value) >= 0; +} + +bool +ResourceFilter::match(int axis, const ResTable_config& config) const +{ + return match(axis, AaptGroupEntry::getConfigValueForAxis(config, axis)); +} + +bool +ResourceFilter::match(const ResTable_config& config) const +{ + for (int i=AXIS_START; i<=AXIS_END; i++) { + if (!match(i, AaptGroupEntry::getConfigValueForAxis(config, i))) { + return false; + } + } + return true; +} + +const SortedVector* ResourceFilter::configsForAxis(int axis) const +{ + ssize_t index = mData.indexOfKey(axis); + if (index < 0) { + return NULL; + } + return &mData.valueAt(index); +} diff --git a/tools/aapt/ResourceFilter.h b/tools/aapt/ResourceFilter.h new file mode 100644 index 0000000000000..647b7bbfdd23a --- /dev/null +++ b/tools/aapt/ResourceFilter.h @@ -0,0 +1,33 @@ +// +// Copyright 2011 The Android Open Source Project +// +// Build resource files from raw assets. +// + +#ifndef RESOURCE_FILTER_H +#define RESOURCE_FILTER_H + +#include "AaptAssets.h" + +/** + * Implements logic for parsing and handling "-c" and "--preferred-configurations" + * options. + */ +class ResourceFilter +{ +public: + ResourceFilter() : mData(), mContainsPseudo(false) {} + status_t parse(const char* arg); + bool isEmpty() const; + bool match(int axis, uint32_t value) const; + bool match(int axis, const ResTable_config& config) const; + bool match(const ResTable_config& config) const; + const SortedVector* configsForAxis(int axis) const; + inline bool containsPseudo() const { return mContainsPseudo; } + +private: + KeyedVector > mData; + bool mContainsPseudo; +}; + +#endif diff --git a/tools/aapt/ResourceIdCache.cpp b/tools/aapt/ResourceIdCache.cpp new file mode 100644 index 0000000000000..e03f4f668a1e7 --- /dev/null +++ b/tools/aapt/ResourceIdCache.cpp @@ -0,0 +1,107 @@ +// +// Copyright 2012 The Android Open Source Project +// +// Manage a resource ID cache. + +#define LOG_TAG "ResourceIdCache" + +#include +#include +#include "ResourceIdCache.h" +#include +using namespace std; + + +static size_t mHits = 0; +static size_t mMisses = 0; +static size_t mCollisions = 0; + +static const size_t MAX_CACHE_ENTRIES = 2048; +static const android::String16 TRUE16("1"); +static const android::String16 FALSE16("0"); + +struct CacheEntry { + // concatenation of the relevant strings into a single instance + android::String16 hashedName; + uint32_t id; + + CacheEntry() {} + CacheEntry(const android::String16& name, uint32_t resId) : hashedName(name), id(resId) { } +}; + +static map< uint32_t, CacheEntry > mIdMap; + + +// djb2; reasonable choice for strings when collisions aren't particularly important +static inline uint32_t hashround(uint32_t hash, int c) { + return ((hash << 5) + hash) + c; /* hash * 33 + c */ +} + +static uint32_t hash(const android::String16& hashableString) { + uint32_t hash = 5381; + const char16_t* str = hashableString.string(); + while (int c = *str++) hash = hashround(hash, c); + return hash; +} + +namespace android { + +static inline String16 makeHashableName(const android::String16& package, + const android::String16& type, + const android::String16& name, + bool onlyPublic) { + String16 hashable = String16(name); + hashable += type; + hashable += package; + hashable += (onlyPublic ? TRUE16 : FALSE16); + return hashable; +} + +uint32_t ResourceIdCache::lookup(const android::String16& package, + const android::String16& type, + const android::String16& name, + bool onlyPublic) { + const String16 hashedName = makeHashableName(package, type, name, onlyPublic); + const uint32_t hashcode = hash(hashedName); + map::iterator item = mIdMap.find(hashcode); + if (item == mIdMap.end()) { + // cache miss + mMisses++; + return 0; + } + + // legit match? + if (hashedName == (*item).second.hashedName) { + mHits++; + return (*item).second.id; + } + + // collision + mCollisions++; + mIdMap.erase(hashcode); + return 0; +} + +// returns the resource ID being stored, for callsite convenience +uint32_t ResourceIdCache::store(const android::String16& package, + const android::String16& type, + const android::String16& name, + bool onlyPublic, + uint32_t resId) { + if (mIdMap.size() < MAX_CACHE_ENTRIES) { + const String16 hashedName = makeHashableName(package, type, name, onlyPublic); + const uint32_t hashcode = hash(hashedName); + mIdMap[hashcode] = CacheEntry(hashedName, resId); + } + return resId; +} + +void ResourceIdCache::dump() { + printf("ResourceIdCache dump:\n"); + printf("Size: %ld\n", mIdMap.size()); + printf("Hits: %ld\n", mHits); + printf("Misses: %ld\n", mMisses); + printf("(Collisions: %ld)\n", mCollisions); +} + +} diff --git a/tools/aapt/ResourceIdCache.h b/tools/aapt/ResourceIdCache.h new file mode 100644 index 0000000000000..65f77818b0553 --- /dev/null +++ b/tools/aapt/ResourceIdCache.h @@ -0,0 +1,30 @@ +// +// Copyright 2012 The Android Open Source Project +// +// Manage a resource ID cache. + +#ifndef RESOURCE_ID_CACHE_H +#define RESOURCE_ID_CACHE_H + +namespace android { +class android::String16; + +class ResourceIdCache { +public: + static uint32_t lookup(const android::String16& package, + const android::String16& type, + const android::String16& name, + bool onlyPublic); + + static uint32_t store(const android::String16& package, + const android::String16& type, + const android::String16& name, + bool onlyPublic, + uint32_t resId); + + static void dump(void); +}; + +} + +#endif diff --git a/tools/aapt/ResourceTable.cpp b/tools/aapt/ResourceTable.cpp new file mode 100644 index 0000000000000..52ebaf0f7775d --- /dev/null +++ b/tools/aapt/ResourceTable.cpp @@ -0,0 +1,3905 @@ +// +// Copyright 2006 The Android Open Source Project +// +// Build resource files from raw assets. +// + +#include "ResourceTable.h" + +#include "XMLNode.h" +#include "ResourceFilter.h" +#include "ResourceIdCache.h" + +#include +#include +#include + +#define NOISY(x) //x + +status_t compileXmlFile(const sp& assets, + const sp& target, + ResourceTable* table, + int options) +{ + sp root = XMLNode::parse(target); + if (root == NULL) { + return UNKNOWN_ERROR; + } + + return compileXmlFile(assets, root, target, table, options); +} + +status_t compileXmlFile(const sp& assets, + const sp& target, + const sp& outTarget, + ResourceTable* table, + int options) +{ + sp root = XMLNode::parse(target); + if (root == NULL) { + return UNKNOWN_ERROR; + } + + return compileXmlFile(assets, root, outTarget, table, options); +} + +status_t compileXmlFile(const sp& assets, + const sp& root, + const sp& target, + ResourceTable* table, + int options) +{ + if ((options&XML_COMPILE_STRIP_WHITESPACE) != 0) { + root->removeWhitespace(true, NULL); + } else if ((options&XML_COMPILE_COMPACT_WHITESPACE) != 0) { + root->removeWhitespace(false, NULL); + } + + if ((options&XML_COMPILE_UTF8) != 0) { + root->setUTF8(true); + } + + bool hasErrors = false; + + if ((options&XML_COMPILE_ASSIGN_ATTRIBUTE_IDS) != 0) { + status_t err = root->assignResourceIds(assets, table); + if (err != NO_ERROR) { + hasErrors = true; + } + } + + status_t err = root->parseValues(assets, table); + if (err != NO_ERROR) { + hasErrors = true; + } + + if (hasErrors) { + return UNKNOWN_ERROR; + } + + NOISY(printf("Input XML Resource:\n")); + NOISY(root->print()); + err = root->flatten(target, + (options&XML_COMPILE_STRIP_COMMENTS) != 0, + (options&XML_COMPILE_STRIP_RAW_VALUES) != 0); + if (err != NO_ERROR) { + return err; + } + + NOISY(printf("Output XML Resource:\n")); + NOISY(ResXMLTree tree; + tree.setTo(target->getData(), target->getSize()); + printXMLBlock(&tree)); + + target->setCompressionMethod(ZipEntry::kCompressDeflated); + + return err; +} + +#undef NOISY +#define NOISY(x) //x + +struct flag_entry +{ + const char16_t* name; + size_t nameLen; + uint32_t value; + const char* description; +}; + +static const char16_t referenceArray[] = + { 'r', 'e', 'f', 'e', 'r', 'e', 'n', 'c', 'e' }; +static const char16_t stringArray[] = + { 's', 't', 'r', 'i', 'n', 'g' }; +static const char16_t integerArray[] = + { 'i', 'n', 't', 'e', 'g', 'e', 'r' }; +static const char16_t booleanArray[] = + { 'b', 'o', 'o', 'l', 'e', 'a', 'n' }; +static const char16_t colorArray[] = + { 'c', 'o', 'l', 'o', 'r' }; +static const char16_t floatArray[] = + { 'f', 'l', 'o', 'a', 't' }; +static const char16_t dimensionArray[] = + { 'd', 'i', 'm', 'e', 'n', 's', 'i', 'o', 'n' }; +static const char16_t fractionArray[] = + { 'f', 'r', 'a', 'c', 't', 'i', 'o', 'n' }; +static const char16_t enumArray[] = + { 'e', 'n', 'u', 'm' }; +static const char16_t flagsArray[] = + { 'f', 'l', 'a', 'g', 's' }; + +static const flag_entry gFormatFlags[] = { + { referenceArray, sizeof(referenceArray)/2, ResTable_map::TYPE_REFERENCE, + "a reference to another resource, in the form \"@[+][package:]type:name\"\n" + "or to a theme attribute in the form \"?[package:][type:]name\"."}, + { stringArray, sizeof(stringArray)/2, ResTable_map::TYPE_STRING, + "a string value, using '\\\\;' to escape characters such as '\\\\n' or '\\\\uxxxx' for a unicode character." }, + { integerArray, sizeof(integerArray)/2, ResTable_map::TYPE_INTEGER, + "an integer value, such as \"100\"." }, + { booleanArray, sizeof(booleanArray)/2, ResTable_map::TYPE_BOOLEAN, + "a boolean value, either \"true\" or \"false\"." }, + { colorArray, sizeof(colorArray)/2, ResTable_map::TYPE_COLOR, + "a color value, in the form of \"#rgb\", \"#argb\",\n" + "\"#rrggbb\", or \"#aarrggbb\"." }, + { floatArray, sizeof(floatArray)/2, ResTable_map::TYPE_FLOAT, + "a floating point value, such as \"1.2\"."}, + { dimensionArray, sizeof(dimensionArray)/2, ResTable_map::TYPE_DIMENSION, + "a dimension value, which is a floating point number appended with a unit such as \"14.5sp\".\n" + "Available units are: px (pixels), dp (density-independent pixels), sp (scaled pixels based on preferred font size),\n" + "in (inches), mm (millimeters)." }, + { fractionArray, sizeof(fractionArray)/2, ResTable_map::TYPE_FRACTION, + "a fractional value, which is a floating point number appended with either % or %p, such as \"14.5%\".\n" + "The % suffix always means a percentage of the base size; the optional %p suffix provides a size relative to\n" + "some parent container." }, + { enumArray, sizeof(enumArray)/2, ResTable_map::TYPE_ENUM, NULL }, + { flagsArray, sizeof(flagsArray)/2, ResTable_map::TYPE_FLAGS, NULL }, + { NULL, 0, 0, NULL } +}; + +static const char16_t suggestedArray[] = { 's', 'u', 'g', 'g', 'e', 's', 't', 'e', 'd' }; + +static const flag_entry l10nRequiredFlags[] = { + { suggestedArray, sizeof(suggestedArray)/2, ResTable_map::L10N_SUGGESTED, NULL }, + { NULL, 0, 0, NULL } +}; + +static const char16_t nulStr[] = { 0 }; + +static uint32_t parse_flags(const char16_t* str, size_t len, + const flag_entry* flags, bool* outError = NULL) +{ + while (len > 0 && isspace(*str)) { + str++; + len--; + } + while (len > 0 && isspace(str[len-1])) { + len--; + } + + const char16_t* const end = str + len; + uint32_t value = 0; + + while (str < end) { + const char16_t* div = str; + while (div < end && *div != '|') { + div++; + } + + const flag_entry* cur = flags; + while (cur->name) { + if (strzcmp16(cur->name, cur->nameLen, str, div-str) == 0) { + value |= cur->value; + break; + } + cur++; + } + + if (!cur->name) { + if (outError) *outError = true; + return 0; + } + + str = div < end ? div+1 : div; + } + + if (outError) *outError = false; + return value; +} + +static String16 mayOrMust(int type, int flags) +{ + if ((type&(~flags)) == 0) { + return String16("

Must"); + } + + return String16("

May"); +} + +static void appendTypeInfo(ResourceTable* outTable, const String16& pkg, + const String16& typeName, const String16& ident, int type, + const flag_entry* flags) +{ + bool hadType = false; + while (flags->name) { + if ((type&flags->value) != 0 && flags->description != NULL) { + String16 fullMsg(mayOrMust(type, flags->value)); + fullMsg.append(String16(" be ")); + fullMsg.append(String16(flags->description)); + outTable->appendTypeComment(pkg, typeName, ident, fullMsg); + hadType = true; + } + flags++; + } + if (hadType && (type&ResTable_map::TYPE_REFERENCE) == 0) { + outTable->appendTypeComment(pkg, typeName, ident, + String16("

This may also be a reference to a resource (in the form\n" + "\"@[package:]type:name\") or\n" + "theme attribute (in the form\n" + "\"?[package:][type:]name\")\n" + "containing a value of this type.")); + } +} + +struct PendingAttribute +{ + const String16 myPackage; + const SourcePos sourcePos; + const bool appendComment; + int32_t type; + String16 ident; + String16 comment; + bool hasErrors; + bool added; + + PendingAttribute(String16 _package, const sp& in, + ResXMLTree& block, bool _appendComment) + : myPackage(_package) + , sourcePos(in->getPrintableSource(), block.getLineNumber()) + , appendComment(_appendComment) + , type(ResTable_map::TYPE_ANY) + , hasErrors(false) + , added(false) + { + } + + status_t createIfNeeded(ResourceTable* outTable) + { + if (added || hasErrors) { + return NO_ERROR; + } + added = true; + + String16 attr16("attr"); + + if (outTable->hasBagOrEntry(myPackage, attr16, ident)) { + sourcePos.error("Attribute \"%s\" has already been defined\n", + String8(ident).string()); + hasErrors = true; + return UNKNOWN_ERROR; + } + + char numberStr[16]; + sprintf(numberStr, "%d", type); + status_t err = outTable->addBag(sourcePos, myPackage, + attr16, ident, String16(""), + String16("^type"), + String16(numberStr), NULL, NULL); + if (err != NO_ERROR) { + hasErrors = true; + return err; + } + outTable->appendComment(myPackage, attr16, ident, comment, appendComment); + //printf("Attribute %s comment: %s\n", String8(ident).string(), + // String8(comment).string()); + return err; + } +}; + +static status_t compileAttribute(const sp& in, + ResXMLTree& block, + const String16& myPackage, + ResourceTable* outTable, + String16* outIdent = NULL, + bool inStyleable = false) +{ + PendingAttribute attr(myPackage, in, block, inStyleable); + + const String16 attr16("attr"); + const String16 id16("id"); + + // Attribute type constants. + const String16 enum16("enum"); + const String16 flag16("flag"); + + ResXMLTree::event_code_t code; + size_t len; + status_t err; + + ssize_t identIdx = block.indexOfAttribute(NULL, "name"); + if (identIdx >= 0) { + attr.ident = String16(block.getAttributeStringValue(identIdx, &len)); + if (outIdent) { + *outIdent = attr.ident; + } + } else { + attr.sourcePos.error("A 'name' attribute is required for \n"); + attr.hasErrors = true; + } + + attr.comment = String16( + block.getComment(&len) ? block.getComment(&len) : nulStr); + + ssize_t typeIdx = block.indexOfAttribute(NULL, "format"); + if (typeIdx >= 0) { + String16 typeStr = String16(block.getAttributeStringValue(typeIdx, &len)); + attr.type = parse_flags(typeStr.string(), typeStr.size(), gFormatFlags); + if (attr.type == 0) { + attr.sourcePos.error("Tag 'format' attribute value \"%s\" not valid\n", + String8(typeStr).string()); + attr.hasErrors = true; + } + attr.createIfNeeded(outTable); + } else if (!inStyleable) { + // Attribute definitions outside of styleables always define the + // attribute as a generic value. + attr.createIfNeeded(outTable); + } + + //printf("Attribute %s: type=0x%08x\n", String8(attr.ident).string(), attr.type); + + ssize_t minIdx = block.indexOfAttribute(NULL, "min"); + if (minIdx >= 0) { + String16 val = String16(block.getAttributeStringValue(minIdx, &len)); + if (!ResTable::stringToInt(val.string(), val.size(), NULL)) { + attr.sourcePos.error("Tag 'min' attribute must be a number, not \"%s\"\n", + String8(val).string()); + attr.hasErrors = true; + } + attr.createIfNeeded(outTable); + if (!attr.hasErrors) { + err = outTable->addBag(attr.sourcePos, myPackage, attr16, attr.ident, + String16(""), String16("^min"), String16(val), NULL, NULL); + if (err != NO_ERROR) { + attr.hasErrors = true; + } + } + } + + ssize_t maxIdx = block.indexOfAttribute(NULL, "max"); + if (maxIdx >= 0) { + String16 val = String16(block.getAttributeStringValue(maxIdx, &len)); + if (!ResTable::stringToInt(val.string(), val.size(), NULL)) { + attr.sourcePos.error("Tag 'max' attribute must be a number, not \"%s\"\n", + String8(val).string()); + attr.hasErrors = true; + } + attr.createIfNeeded(outTable); + if (!attr.hasErrors) { + err = outTable->addBag(attr.sourcePos, myPackage, attr16, attr.ident, + String16(""), String16("^max"), String16(val), NULL, NULL); + attr.hasErrors = true; + } + } + + if ((minIdx >= 0 || maxIdx >= 0) && (attr.type&ResTable_map::TYPE_INTEGER) == 0) { + attr.sourcePos.error("Tag must have format=integer attribute if using max or min\n"); + attr.hasErrors = true; + } + + ssize_t l10nIdx = block.indexOfAttribute(NULL, "localization"); + if (l10nIdx >= 0) { + const uint16_t* str = block.getAttributeStringValue(l10nIdx, &len); + bool error; + uint32_t l10n_required = parse_flags(str, len, l10nRequiredFlags, &error); + if (error) { + attr.sourcePos.error("Tag 'localization' attribute value \"%s\" not valid\n", + String8(str).string()); + attr.hasErrors = true; + } + attr.createIfNeeded(outTable); + if (!attr.hasErrors) { + char buf[11]; + sprintf(buf, "%d", l10n_required); + err = outTable->addBag(attr.sourcePos, myPackage, attr16, attr.ident, + String16(""), String16("^l10n"), String16(buf), NULL, NULL); + if (err != NO_ERROR) { + attr.hasErrors = true; + } + } + } + + String16 enumOrFlagsComment; + + while ((code=block.next()) != ResXMLTree::END_DOCUMENT && code != ResXMLTree::BAD_DOCUMENT) { + if (code == ResXMLTree::START_TAG) { + uint32_t localType = 0; + if (strcmp16(block.getElementName(&len), enum16.string()) == 0) { + localType = ResTable_map::TYPE_ENUM; + } else if (strcmp16(block.getElementName(&len), flag16.string()) == 0) { + localType = ResTable_map::TYPE_FLAGS; + } else { + SourcePos(in->getPrintableSource(), block.getLineNumber()) + .error("Tag <%s> can not appear inside , only or \n", + String8(block.getElementName(&len)).string()); + return UNKNOWN_ERROR; + } + + attr.createIfNeeded(outTable); + + if (attr.type == ResTable_map::TYPE_ANY) { + // No type was explicitly stated, so supplying enum tags + // implicitly creates an enum or flag. + attr.type = 0; + } + + if ((attr.type&(ResTable_map::TYPE_ENUM|ResTable_map::TYPE_FLAGS)) == 0) { + // Wasn't originally specified as an enum, so update its type. + attr.type |= localType; + if (!attr.hasErrors) { + char numberStr[16]; + sprintf(numberStr, "%d", attr.type); + err = outTable->addBag(SourcePos(in->getPrintableSource(), block.getLineNumber()), + myPackage, attr16, attr.ident, String16(""), + String16("^type"), String16(numberStr), NULL, NULL, true); + if (err != NO_ERROR) { + attr.hasErrors = true; + } + } + } else if ((uint32_t)(attr.type&(ResTable_map::TYPE_ENUM|ResTable_map::TYPE_FLAGS)) != localType) { + if (localType == ResTable_map::TYPE_ENUM) { + SourcePos(in->getPrintableSource(), block.getLineNumber()) + .error(" attribute can not be used inside a flags format\n"); + attr.hasErrors = true; + } else { + SourcePos(in->getPrintableSource(), block.getLineNumber()) + .error(" attribute can not be used inside a enum format\n"); + attr.hasErrors = true; + } + } + + String16 itemIdent; + ssize_t itemIdentIdx = block.indexOfAttribute(NULL, "name"); + if (itemIdentIdx >= 0) { + itemIdent = String16(block.getAttributeStringValue(itemIdentIdx, &len)); + } else { + SourcePos(in->getPrintableSource(), block.getLineNumber()) + .error("A 'name' attribute is required for or \n"); + attr.hasErrors = true; + } + + String16 value; + ssize_t valueIdx = block.indexOfAttribute(NULL, "value"); + if (valueIdx >= 0) { + value = String16(block.getAttributeStringValue(valueIdx, &len)); + } else { + SourcePos(in->getPrintableSource(), block.getLineNumber()) + .error("A 'value' attribute is required for or \n"); + attr.hasErrors = true; + } + if (!attr.hasErrors && !ResTable::stringToInt(value.string(), value.size(), NULL)) { + SourcePos(in->getPrintableSource(), block.getLineNumber()) + .error("Tag or 'value' attribute must be a number," + " not \"%s\"\n", + String8(value).string()); + attr.hasErrors = true; + } + + // Make sure an id is defined for this enum/flag identifier... + if (!attr.hasErrors && !outTable->hasBagOrEntry(itemIdent, &id16, &myPackage)) { + err = outTable->startBag(SourcePos(in->getPrintableSource(), block.getLineNumber()), + myPackage, id16, itemIdent, String16(), NULL); + if (err != NO_ERROR) { + attr.hasErrors = true; + } + } + + if (!attr.hasErrors) { + if (enumOrFlagsComment.size() == 0) { + enumOrFlagsComment.append(mayOrMust(attr.type, + ResTable_map::TYPE_ENUM|ResTable_map::TYPE_FLAGS)); + enumOrFlagsComment.append((attr.type&ResTable_map::TYPE_ENUM) + ? String16(" be one of the following constant values.") + : String16(" be one or more (separated by '|') of the following constant values.")); + enumOrFlagsComment.append(String16("

\n\n" + "\n" + "\n" + "\n" + "")); + } + + enumOrFlagsComment.append(String16("\n")); + + err = outTable->addBag(SourcePos(in->getPrintableSource(), block.getLineNumber()), + myPackage, + attr16, attr.ident, String16(""), + itemIdent, value, NULL, NULL, false, true); + if (err != NO_ERROR) { + attr.hasErrors = true; + } + } + } else if (code == ResXMLTree::END_TAG) { + if (strcmp16(block.getElementName(&len), attr16.string()) == 0) { + break; + } + if ((attr.type&ResTable_map::TYPE_ENUM) != 0) { + if (strcmp16(block.getElementName(&len), enum16.string()) != 0) { + SourcePos(in->getPrintableSource(), block.getLineNumber()) + .error("Found tag where is expected\n", + String8(block.getElementName(&len)).string()); + return UNKNOWN_ERROR; + } + } else { + if (strcmp16(block.getElementName(&len), flag16.string()) != 0) { + SourcePos(in->getPrintableSource(), block.getLineNumber()) + .error("Found tag where is expected\n", + String8(block.getElementName(&len)).string()); + return UNKNOWN_ERROR; + } + } + } + } + + if (!attr.hasErrors && attr.added) { + appendTypeInfo(outTable, myPackage, attr16, attr.ident, attr.type, gFormatFlags); + } + + if (!attr.hasErrors && enumOrFlagsComment.size() > 0) { + enumOrFlagsComment.append(String16("\n
ConstantValueDescription
")); + enumOrFlagsComment.append(itemIdent); + enumOrFlagsComment.append(String16("")); + enumOrFlagsComment.append(value); + enumOrFlagsComment.append(String16("")); + if (block.getComment(&len)) { + enumOrFlagsComment.append(String16(block.getComment(&len))); + } + enumOrFlagsComment.append(String16("
")); + outTable->appendTypeComment(myPackage, attr16, attr.ident, enumOrFlagsComment); + } + + + return NO_ERROR; +} + +bool localeIsDefined(const ResTable_config& config) +{ + return config.locale == 0; +} + +status_t parseAndAddBag(Bundle* bundle, + const sp& in, + ResXMLTree* block, + const ResTable_config& config, + const String16& myPackage, + const String16& curType, + const String16& ident, + const String16& parentIdent, + const String16& itemIdent, + int32_t curFormat, + bool isFormatted, + const String16& product, + bool pseudolocalize, + const bool overwrite, + ResourceTable* outTable) +{ + status_t err; + const String16 item16("item"); + + String16 str; + Vector spans; + err = parseStyledString(bundle, in->getPrintableSource().string(), + block, item16, &str, &spans, isFormatted, + pseudolocalize); + if (err != NO_ERROR) { + return err; + } + + NOISY(printf("Adding resource bag entry l=%c%c c=%c%c orien=%d d=%d " + " pid=%s, bag=%s, id=%s: %s\n", + config.language[0], config.language[1], + config.country[0], config.country[1], + config.orientation, config.density, + String8(parentIdent).string(), + String8(ident).string(), + String8(itemIdent).string(), + String8(str).string())); + + err = outTable->addBag(SourcePos(in->getPrintableSource(), block->getLineNumber()), + myPackage, curType, ident, parentIdent, itemIdent, str, + &spans, &config, overwrite, false, curFormat); + return err; +} + +/* + * Returns true if needle is one of the elements in the comma-separated list + * haystack, false otherwise. + */ +bool isInProductList(const String16& needle, const String16& haystack) { + const char16_t *needle2 = needle.string(); + const char16_t *haystack2 = haystack.string(); + size_t needlesize = needle.size(); + + while (*haystack2 != '\0') { + if (strncmp16(haystack2, needle2, needlesize) == 0) { + if (haystack2[needlesize] == '\0' || haystack2[needlesize] == ',') { + return true; + } + } + + while (*haystack2 != '\0' && *haystack2 != ',') { + haystack2++; + } + if (*haystack2 == ',') { + haystack2++; + } + } + + return false; +} + +status_t parseAndAddEntry(Bundle* bundle, + const sp& in, + ResXMLTree* block, + const ResTable_config& config, + const String16& myPackage, + const String16& curType, + const String16& ident, + const String16& curTag, + bool curIsStyled, + int32_t curFormat, + bool isFormatted, + const String16& product, + bool pseudolocalize, + const bool overwrite, + ResourceTable* outTable) +{ + status_t err; + + String16 str; + Vector spans; + err = parseStyledString(bundle, in->getPrintableSource().string(), block, + curTag, &str, curIsStyled ? &spans : NULL, + isFormatted, pseudolocalize); + + if (err < NO_ERROR) { + return err; + } + + /* + * If a product type was specified on the command line + * and also in the string, and the two are not the same, + * return without adding the string. + */ + + const char *bundleProduct = bundle->getProduct(); + if (bundleProduct == NULL) { + bundleProduct = ""; + } + + if (product.size() != 0) { + /* + * If the command-line-specified product is empty, only "default" + * matches. Other variants are skipped. This is so generation + * of the R.java file when the product is not known is predictable. + */ + + if (bundleProduct[0] == '\0') { + if (strcmp16(String16("default").string(), product.string()) != 0) { + return NO_ERROR; + } + } else { + /* + * The command-line product is not empty. + * If the product for this string is on the command-line list, + * it matches. "default" also matches, but only if nothing + * else has matched already. + */ + + if (isInProductList(product, String16(bundleProduct))) { + ; + } else if (strcmp16(String16("default").string(), product.string()) == 0 && + !outTable->hasBagOrEntry(myPackage, curType, ident, config)) { + ; + } else { + return NO_ERROR; + } + } + } + + NOISY(printf("Adding resource entry l=%c%c c=%c%c orien=%d d=%d id=%s: %s\n", + config.language[0], config.language[1], + config.country[0], config.country[1], + config.orientation, config.density, + String8(ident).string(), String8(str).string())); + + err = outTable->addEntry(SourcePos(in->getPrintableSource(), block->getLineNumber()), + myPackage, curType, ident, str, &spans, &config, + false, curFormat, overwrite); + + return err; +} + +status_t compileResourceFile(Bundle* bundle, + const sp& assets, + const sp& in, + const ResTable_config& defParams, + const bool overwrite, + ResourceTable* outTable) +{ + ResXMLTree block; + status_t err = parseXMLResource(in, &block, false, true); + if (err != NO_ERROR) { + return err; + } + + // Top-level tag. + const String16 resources16("resources"); + + // Identifier declaration tags. + const String16 declare_styleable16("declare-styleable"); + const String16 attr16("attr"); + + // Data creation organizational tags. + const String16 string16("string"); + const String16 drawable16("drawable"); + const String16 color16("color"); + const String16 bool16("bool"); + const String16 integer16("integer"); + const String16 dimen16("dimen"); + const String16 fraction16("fraction"); + const String16 style16("style"); + const String16 plurals16("plurals"); + const String16 array16("array"); + const String16 string_array16("string-array"); + const String16 integer_array16("integer-array"); + const String16 public16("public"); + const String16 public_padding16("public-padding"); + const String16 private_symbols16("private-symbols"); + const String16 java_symbol16("java-symbol"); + const String16 add_resource16("add-resource"); + const String16 skip16("skip"); + const String16 eat_comment16("eat-comment"); + + // Data creation tags. + const String16 bag16("bag"); + const String16 item16("item"); + + // Attribute type constants. + const String16 enum16("enum"); + + // plural values + const String16 other16("other"); + const String16 quantityOther16("^other"); + const String16 zero16("zero"); + const String16 quantityZero16("^zero"); + const String16 one16("one"); + const String16 quantityOne16("^one"); + const String16 two16("two"); + const String16 quantityTwo16("^two"); + const String16 few16("few"); + const String16 quantityFew16("^few"); + const String16 many16("many"); + const String16 quantityMany16("^many"); + + // useful attribute names and special values + const String16 name16("name"); + const String16 translatable16("translatable"); + const String16 formatted16("formatted"); + const String16 false16("false"); + + const String16 myPackage(assets->getPackage()); + + bool hasErrors = false; + + bool fileIsTranslatable = true; + if (strstr(in->getPrintableSource().string(), "donottranslate") != NULL) { + fileIsTranslatable = false; + } + + DefaultKeyedVector nextPublicId(0); + + ResXMLTree::event_code_t code; + do { + code = block.next(); + } while (code == ResXMLTree::START_NAMESPACE); + + size_t len; + if (code != ResXMLTree::START_TAG) { + SourcePos(in->getPrintableSource(), block.getLineNumber()).error( + "No start tag found\n"); + return UNKNOWN_ERROR; + } + if (strcmp16(block.getElementName(&len), resources16.string()) != 0) { + SourcePos(in->getPrintableSource(), block.getLineNumber()).error( + "Invalid start tag %s\n", String8(block.getElementName(&len)).string()); + return UNKNOWN_ERROR; + } + + ResTable_config curParams(defParams); + + ResTable_config pseudoParams(curParams); + pseudoParams.language[0] = 'z'; + pseudoParams.language[1] = 'z'; + pseudoParams.country[0] = 'Z'; + pseudoParams.country[1] = 'Z'; + + while ((code=block.next()) != ResXMLTree::END_DOCUMENT && code != ResXMLTree::BAD_DOCUMENT) { + if (code == ResXMLTree::START_TAG) { + const String16* curTag = NULL; + String16 curType; + int32_t curFormat = ResTable_map::TYPE_ANY; + bool curIsBag = false; + bool curIsBagReplaceOnOverwrite = false; + bool curIsStyled = false; + bool curIsPseudolocalizable = false; + bool curIsFormatted = fileIsTranslatable; + bool localHasErrors = false; + + if (strcmp16(block.getElementName(&len), skip16.string()) == 0) { + while ((code=block.next()) != ResXMLTree::END_DOCUMENT + && code != ResXMLTree::BAD_DOCUMENT) { + if (code == ResXMLTree::END_TAG) { + if (strcmp16(block.getElementName(&len), skip16.string()) == 0) { + break; + } + } + } + continue; + + } else if (strcmp16(block.getElementName(&len), eat_comment16.string()) == 0) { + while ((code=block.next()) != ResXMLTree::END_DOCUMENT + && code != ResXMLTree::BAD_DOCUMENT) { + if (code == ResXMLTree::END_TAG) { + if (strcmp16(block.getElementName(&len), eat_comment16.string()) == 0) { + break; + } + } + } + continue; + + } else if (strcmp16(block.getElementName(&len), public16.string()) == 0) { + SourcePos srcPos(in->getPrintableSource(), block.getLineNumber()); + + String16 type; + ssize_t typeIdx = block.indexOfAttribute(NULL, "type"); + if (typeIdx < 0) { + srcPos.error("A 'type' attribute is required for \n"); + hasErrors = localHasErrors = true; + } + type = String16(block.getAttributeStringValue(typeIdx, &len)); + + String16 name; + ssize_t nameIdx = block.indexOfAttribute(NULL, "name"); + if (nameIdx < 0) { + srcPos.error("A 'name' attribute is required for \n"); + hasErrors = localHasErrors = true; + } + name = String16(block.getAttributeStringValue(nameIdx, &len)); + + uint32_t ident = 0; + ssize_t identIdx = block.indexOfAttribute(NULL, "id"); + if (identIdx >= 0) { + const char16_t* identStr = block.getAttributeStringValue(identIdx, &len); + Res_value identValue; + if (!ResTable::stringToInt(identStr, len, &identValue)) { + srcPos.error("Given 'id' attribute is not an integer: %s\n", + String8(block.getAttributeStringValue(identIdx, &len)).string()); + hasErrors = localHasErrors = true; + } else { + ident = identValue.data; + nextPublicId.replaceValueFor(type, ident+1); + } + } else if (nextPublicId.indexOfKey(type) < 0) { + srcPos.error("No 'id' attribute supplied ," + " and no previous id defined in this file.\n"); + hasErrors = localHasErrors = true; + } else if (!localHasErrors) { + ident = nextPublicId.valueFor(type); + nextPublicId.replaceValueFor(type, ident+1); + } + + if (!localHasErrors) { + err = outTable->addPublic(srcPos, myPackage, type, name, ident); + if (err < NO_ERROR) { + hasErrors = localHasErrors = true; + } + } + if (!localHasErrors) { + sp symbols = assets->getSymbolsFor(String8("R")); + if (symbols != NULL) { + symbols = symbols->addNestedSymbol(String8(type), srcPos); + } + if (symbols != NULL) { + symbols->makeSymbolPublic(String8(name), srcPos); + String16 comment( + block.getComment(&len) ? block.getComment(&len) : nulStr); + symbols->appendComment(String8(name), comment, srcPos); + } else { + srcPos.error("Unable to create symbols!\n"); + hasErrors = localHasErrors = true; + } + } + + while ((code=block.next()) != ResXMLTree::END_DOCUMENT && code != ResXMLTree::BAD_DOCUMENT) { + if (code == ResXMLTree::END_TAG) { + if (strcmp16(block.getElementName(&len), public16.string()) == 0) { + break; + } + } + } + continue; + + } else if (strcmp16(block.getElementName(&len), public_padding16.string()) == 0) { + SourcePos srcPos(in->getPrintableSource(), block.getLineNumber()); + + String16 type; + ssize_t typeIdx = block.indexOfAttribute(NULL, "type"); + if (typeIdx < 0) { + srcPos.error("A 'type' attribute is required for \n"); + hasErrors = localHasErrors = true; + } + type = String16(block.getAttributeStringValue(typeIdx, &len)); + + String16 name; + ssize_t nameIdx = block.indexOfAttribute(NULL, "name"); + if (nameIdx < 0) { + srcPos.error("A 'name' attribute is required for \n"); + hasErrors = localHasErrors = true; + } + name = String16(block.getAttributeStringValue(nameIdx, &len)); + + uint32_t start = 0; + ssize_t startIdx = block.indexOfAttribute(NULL, "start"); + if (startIdx >= 0) { + const char16_t* startStr = block.getAttributeStringValue(startIdx, &len); + Res_value startValue; + if (!ResTable::stringToInt(startStr, len, &startValue)) { + srcPos.error("Given 'start' attribute is not an integer: %s\n", + String8(block.getAttributeStringValue(startIdx, &len)).string()); + hasErrors = localHasErrors = true; + } else { + start = startValue.data; + } + } else if (nextPublicId.indexOfKey(type) < 0) { + srcPos.error("No 'start' attribute supplied ," + " and no previous id defined in this file.\n"); + hasErrors = localHasErrors = true; + } else if (!localHasErrors) { + start = nextPublicId.valueFor(type); + } + + uint32_t end = 0; + ssize_t endIdx = block.indexOfAttribute(NULL, "end"); + if (endIdx >= 0) { + const char16_t* endStr = block.getAttributeStringValue(endIdx, &len); + Res_value endValue; + if (!ResTable::stringToInt(endStr, len, &endValue)) { + srcPos.error("Given 'end' attribute is not an integer: %s\n", + String8(block.getAttributeStringValue(endIdx, &len)).string()); + hasErrors = localHasErrors = true; + } else { + end = endValue.data; + } + } else { + srcPos.error("No 'end' attribute supplied \n"); + hasErrors = localHasErrors = true; + } + + if (end >= start) { + nextPublicId.replaceValueFor(type, end+1); + } else { + srcPos.error("Padding start '%ul' is after end '%ul'\n", + start, end); + hasErrors = localHasErrors = true; + } + + String16 comment( + block.getComment(&len) ? block.getComment(&len) : nulStr); + for (uint32_t curIdent=start; curIdent<=end; curIdent++) { + if (localHasErrors) { + break; + } + String16 curName(name); + char buf[64]; + sprintf(buf, "%d", (int)(end-curIdent+1)); + curName.append(String16(buf)); + + err = outTable->addEntry(srcPos, myPackage, type, curName, + String16("padding"), NULL, &curParams, false, + ResTable_map::TYPE_STRING, overwrite); + if (err < NO_ERROR) { + hasErrors = localHasErrors = true; + break; + } + err = outTable->addPublic(srcPos, myPackage, type, + curName, curIdent); + if (err < NO_ERROR) { + hasErrors = localHasErrors = true; + break; + } + sp symbols = assets->getSymbolsFor(String8("R")); + if (symbols != NULL) { + symbols = symbols->addNestedSymbol(String8(type), srcPos); + } + if (symbols != NULL) { + symbols->makeSymbolPublic(String8(curName), srcPos); + symbols->appendComment(String8(curName), comment, srcPos); + } else { + srcPos.error("Unable to create symbols!\n"); + hasErrors = localHasErrors = true; + } + } + + while ((code=block.next()) != ResXMLTree::END_DOCUMENT && code != ResXMLTree::BAD_DOCUMENT) { + if (code == ResXMLTree::END_TAG) { + if (strcmp16(block.getElementName(&len), public_padding16.string()) == 0) { + break; + } + } + } + continue; + + } else if (strcmp16(block.getElementName(&len), private_symbols16.string()) == 0) { + String16 pkg; + ssize_t pkgIdx = block.indexOfAttribute(NULL, "package"); + if (pkgIdx < 0) { + SourcePos(in->getPrintableSource(), block.getLineNumber()).error( + "A 'package' attribute is required for \n"); + hasErrors = localHasErrors = true; + } + pkg = String16(block.getAttributeStringValue(pkgIdx, &len)); + if (!localHasErrors) { + assets->setSymbolsPrivatePackage(String8(pkg)); + } + + while ((code=block.next()) != ResXMLTree::END_DOCUMENT && code != ResXMLTree::BAD_DOCUMENT) { + if (code == ResXMLTree::END_TAG) { + if (strcmp16(block.getElementName(&len), private_symbols16.string()) == 0) { + break; + } + } + } + continue; + + } else if (strcmp16(block.getElementName(&len), java_symbol16.string()) == 0) { + SourcePos srcPos(in->getPrintableSource(), block.getLineNumber()); + + String16 type; + ssize_t typeIdx = block.indexOfAttribute(NULL, "type"); + if (typeIdx < 0) { + srcPos.error("A 'type' attribute is required for \n"); + hasErrors = localHasErrors = true; + } + type = String16(block.getAttributeStringValue(typeIdx, &len)); + + String16 name; + ssize_t nameIdx = block.indexOfAttribute(NULL, "name"); + if (nameIdx < 0) { + srcPos.error("A 'name' attribute is required for \n"); + hasErrors = localHasErrors = true; + } + name = String16(block.getAttributeStringValue(nameIdx, &len)); + + sp symbols = assets->getJavaSymbolsFor(String8("R")); + if (symbols != NULL) { + symbols = symbols->addNestedSymbol(String8(type), srcPos); + } + if (symbols != NULL) { + symbols->makeSymbolJavaSymbol(String8(name), srcPos); + String16 comment( + block.getComment(&len) ? block.getComment(&len) : nulStr); + symbols->appendComment(String8(name), comment, srcPos); + } else { + srcPos.error("Unable to create symbols!\n"); + hasErrors = localHasErrors = true; + } + + while ((code=block.next()) != ResXMLTree::END_DOCUMENT && code != ResXMLTree::BAD_DOCUMENT) { + if (code == ResXMLTree::END_TAG) { + if (strcmp16(block.getElementName(&len), java_symbol16.string()) == 0) { + break; + } + } + } + continue; + + + } else if (strcmp16(block.getElementName(&len), add_resource16.string()) == 0) { + SourcePos srcPos(in->getPrintableSource(), block.getLineNumber()); + + String16 typeName; + ssize_t typeIdx = block.indexOfAttribute(NULL, "type"); + if (typeIdx < 0) { + srcPos.error("A 'type' attribute is required for \n"); + hasErrors = localHasErrors = true; + } + typeName = String16(block.getAttributeStringValue(typeIdx, &len)); + + String16 name; + ssize_t nameIdx = block.indexOfAttribute(NULL, "name"); + if (nameIdx < 0) { + srcPos.error("A 'name' attribute is required for \n"); + hasErrors = localHasErrors = true; + } + name = String16(block.getAttributeStringValue(nameIdx, &len)); + + outTable->canAddEntry(srcPos, myPackage, typeName, name); + + while ((code=block.next()) != ResXMLTree::END_DOCUMENT && code != ResXMLTree::BAD_DOCUMENT) { + if (code == ResXMLTree::END_TAG) { + if (strcmp16(block.getElementName(&len), add_resource16.string()) == 0) { + break; + } + } + } + continue; + + } else if (strcmp16(block.getElementName(&len), declare_styleable16.string()) == 0) { + SourcePos srcPos(in->getPrintableSource(), block.getLineNumber()); + + String16 ident; + ssize_t identIdx = block.indexOfAttribute(NULL, "name"); + if (identIdx < 0) { + srcPos.error("A 'name' attribute is required for \n"); + hasErrors = localHasErrors = true; + } + ident = String16(block.getAttributeStringValue(identIdx, &len)); + + sp symbols = assets->getSymbolsFor(String8("R")); + if (!localHasErrors) { + if (symbols != NULL) { + symbols = symbols->addNestedSymbol(String8("styleable"), srcPos); + } + sp styleSymbols = symbols; + if (symbols != NULL) { + symbols = symbols->addNestedSymbol(String8(ident), srcPos); + } + if (symbols == NULL) { + srcPos.error("Unable to create symbols!\n"); + return UNKNOWN_ERROR; + } + + String16 comment( + block.getComment(&len) ? block.getComment(&len) : nulStr); + styleSymbols->appendComment(String8(ident), comment, srcPos); + } else { + symbols = NULL; + } + + while ((code=block.next()) != ResXMLTree::END_DOCUMENT && code != ResXMLTree::BAD_DOCUMENT) { + if (code == ResXMLTree::START_TAG) { + if (strcmp16(block.getElementName(&len), skip16.string()) == 0) { + while ((code=block.next()) != ResXMLTree::END_DOCUMENT + && code != ResXMLTree::BAD_DOCUMENT) { + if (code == ResXMLTree::END_TAG) { + if (strcmp16(block.getElementName(&len), skip16.string()) == 0) { + break; + } + } + } + continue; + } else if (strcmp16(block.getElementName(&len), eat_comment16.string()) == 0) { + while ((code=block.next()) != ResXMLTree::END_DOCUMENT + && code != ResXMLTree::BAD_DOCUMENT) { + if (code == ResXMLTree::END_TAG) { + if (strcmp16(block.getElementName(&len), eat_comment16.string()) == 0) { + break; + } + } + } + continue; + } else if (strcmp16(block.getElementName(&len), attr16.string()) != 0) { + SourcePos(in->getPrintableSource(), block.getLineNumber()).error( + "Tag <%s> can not appear inside , only \n", + String8(block.getElementName(&len)).string()); + return UNKNOWN_ERROR; + } + + String16 comment( + block.getComment(&len) ? block.getComment(&len) : nulStr); + String16 itemIdent; + err = compileAttribute(in, block, myPackage, outTable, &itemIdent, true); + if (err != NO_ERROR) { + hasErrors = localHasErrors = true; + } + + if (symbols != NULL) { + SourcePos srcPos(String8(in->getPrintableSource()), block.getLineNumber()); + symbols->addSymbol(String8(itemIdent), 0, srcPos); + symbols->appendComment(String8(itemIdent), comment, srcPos); + //printf("Attribute %s comment: %s\n", String8(itemIdent).string(), + // String8(comment).string()); + } + } else if (code == ResXMLTree::END_TAG) { + if (strcmp16(block.getElementName(&len), declare_styleable16.string()) == 0) { + break; + } + + SourcePos(in->getPrintableSource(), block.getLineNumber()).error( + "Found tag where is expected\n", + String8(block.getElementName(&len)).string()); + return UNKNOWN_ERROR; + } + } + continue; + + } else if (strcmp16(block.getElementName(&len), attr16.string()) == 0) { + err = compileAttribute(in, block, myPackage, outTable, NULL); + if (err != NO_ERROR) { + hasErrors = true; + } + continue; + + } else if (strcmp16(block.getElementName(&len), item16.string()) == 0) { + curTag = &item16; + ssize_t attri = block.indexOfAttribute(NULL, "type"); + if (attri >= 0) { + curType = String16(block.getAttributeStringValue(attri, &len)); + ssize_t formatIdx = block.indexOfAttribute(NULL, "format"); + if (formatIdx >= 0) { + String16 formatStr = String16(block.getAttributeStringValue( + formatIdx, &len)); + curFormat = parse_flags(formatStr.string(), formatStr.size(), + gFormatFlags); + if (curFormat == 0) { + SourcePos(in->getPrintableSource(), block.getLineNumber()).error( + "Tag 'format' attribute value \"%s\" not valid\n", + String8(formatStr).string()); + hasErrors = localHasErrors = true; + } + } + } else { + SourcePos(in->getPrintableSource(), block.getLineNumber()).error( + "A 'type' attribute is required for \n"); + hasErrors = localHasErrors = true; + } + curIsStyled = true; + } else if (strcmp16(block.getElementName(&len), string16.string()) == 0) { + // Note the existence and locale of every string we process + char rawLocale[16]; + curParams.getLocale(rawLocale); + String8 locale(rawLocale); + String16 name; + String16 translatable; + String16 formatted; + + size_t n = block.getAttributeCount(); + for (size_t i = 0; i < n; i++) { + size_t length; + const uint16_t* attr = block.getAttributeName(i, &length); + if (strcmp16(attr, name16.string()) == 0) { + name.setTo(block.getAttributeStringValue(i, &length)); + } else if (strcmp16(attr, translatable16.string()) == 0) { + translatable.setTo(block.getAttributeStringValue(i, &length)); + } else if (strcmp16(attr, formatted16.string()) == 0) { + formatted.setTo(block.getAttributeStringValue(i, &length)); + } + } + + if (name.size() > 0) { + if (translatable == false16) { + curIsFormatted = false; + // Untranslatable strings must only exist in the default [empty] locale + if (locale.size() > 0) { + fprintf(stderr, "aapt: warning: string '%s' in %s marked untranslatable but exists" + " in locale '%s'\n", String8(name).string(), + bundle->getResourceSourceDirs()[0], + locale.string()); + // hasErrors = localHasErrors = true; + } else { + // Intentionally empty block: + // + // Don't add untranslatable strings to the localization table; that + // way if we later see localizations of them, they'll be flagged as + // having no default translation. + } + } else { + outTable->addLocalization(name, locale); + } + + if (formatted == false16) { + curIsFormatted = false; + } + } + + curTag = &string16; + curType = string16; + curFormat = ResTable_map::TYPE_REFERENCE|ResTable_map::TYPE_STRING; + curIsStyled = true; + curIsPseudolocalizable = true; + } else if (strcmp16(block.getElementName(&len), drawable16.string()) == 0) { + curTag = &drawable16; + curType = drawable16; + curFormat = ResTable_map::TYPE_REFERENCE|ResTable_map::TYPE_COLOR; + } else if (strcmp16(block.getElementName(&len), color16.string()) == 0) { + curTag = &color16; + curType = color16; + curFormat = ResTable_map::TYPE_REFERENCE|ResTable_map::TYPE_COLOR; + } else if (strcmp16(block.getElementName(&len), bool16.string()) == 0) { + curTag = &bool16; + curType = bool16; + curFormat = ResTable_map::TYPE_REFERENCE|ResTable_map::TYPE_BOOLEAN; + } else if (strcmp16(block.getElementName(&len), integer16.string()) == 0) { + curTag = &integer16; + curType = integer16; + curFormat = ResTable_map::TYPE_REFERENCE|ResTable_map::TYPE_INTEGER; + } else if (strcmp16(block.getElementName(&len), dimen16.string()) == 0) { + curTag = &dimen16; + curType = dimen16; + curFormat = ResTable_map::TYPE_REFERENCE|ResTable_map::TYPE_DIMENSION; + } else if (strcmp16(block.getElementName(&len), fraction16.string()) == 0) { + curTag = &fraction16; + curType = fraction16; + curFormat = ResTable_map::TYPE_REFERENCE|ResTable_map::TYPE_FRACTION; + } else if (strcmp16(block.getElementName(&len), bag16.string()) == 0) { + curTag = &bag16; + curIsBag = true; + ssize_t attri = block.indexOfAttribute(NULL, "type"); + if (attri >= 0) { + curType = String16(block.getAttributeStringValue(attri, &len)); + } else { + SourcePos(in->getPrintableSource(), block.getLineNumber()).error( + "A 'type' attribute is required for \n"); + hasErrors = localHasErrors = true; + } + } else if (strcmp16(block.getElementName(&len), style16.string()) == 0) { + curTag = &style16; + curType = style16; + curIsBag = true; + } else if (strcmp16(block.getElementName(&len), plurals16.string()) == 0) { + curTag = &plurals16; + curType = plurals16; + curIsBag = true; + } else if (strcmp16(block.getElementName(&len), array16.string()) == 0) { + curTag = &array16; + curType = array16; + curIsBag = true; + curIsBagReplaceOnOverwrite = true; + ssize_t formatIdx = block.indexOfAttribute(NULL, "format"); + if (formatIdx >= 0) { + String16 formatStr = String16(block.getAttributeStringValue( + formatIdx, &len)); + curFormat = parse_flags(formatStr.string(), formatStr.size(), + gFormatFlags); + if (curFormat == 0) { + SourcePos(in->getPrintableSource(), block.getLineNumber()).error( + "Tag 'format' attribute value \"%s\" not valid\n", + String8(formatStr).string()); + hasErrors = localHasErrors = true; + } + } + } else if (strcmp16(block.getElementName(&len), string_array16.string()) == 0) { + // Check whether these strings need valid formats. + // (simplified form of what string16 does above) + size_t n = block.getAttributeCount(); + for (size_t i = 0; i < n; i++) { + size_t length; + const uint16_t* attr = block.getAttributeName(i, &length); + if (strcmp16(attr, translatable16.string()) == 0 + || strcmp16(attr, formatted16.string()) == 0) { + const uint16_t* value = block.getAttributeStringValue(i, &length); + if (strcmp16(value, false16.string()) == 0) { + curIsFormatted = false; + break; + } + } + } + + curTag = &string_array16; + curType = array16; + curFormat = ResTable_map::TYPE_REFERENCE|ResTable_map::TYPE_STRING; + curIsBag = true; + curIsBagReplaceOnOverwrite = true; + curIsPseudolocalizable = true; + } else if (strcmp16(block.getElementName(&len), integer_array16.string()) == 0) { + curTag = &integer_array16; + curType = array16; + curFormat = ResTable_map::TYPE_REFERENCE|ResTable_map::TYPE_INTEGER; + curIsBag = true; + curIsBagReplaceOnOverwrite = true; + } else { + SourcePos(in->getPrintableSource(), block.getLineNumber()).error( + "Found tag %s where item is expected\n", + String8(block.getElementName(&len)).string()); + return UNKNOWN_ERROR; + } + + String16 ident; + ssize_t identIdx = block.indexOfAttribute(NULL, "name"); + if (identIdx >= 0) { + ident = String16(block.getAttributeStringValue(identIdx, &len)); + } else { + SourcePos(in->getPrintableSource(), block.getLineNumber()).error( + "A 'name' attribute is required for <%s>\n", + String8(*curTag).string()); + hasErrors = localHasErrors = true; + } + + String16 product; + identIdx = block.indexOfAttribute(NULL, "product"); + if (identIdx >= 0) { + product = String16(block.getAttributeStringValue(identIdx, &len)); + } + + String16 comment(block.getComment(&len) ? block.getComment(&len) : nulStr); + + if (curIsBag) { + // Figure out the parent of this bag... + String16 parentIdent; + ssize_t parentIdentIdx = block.indexOfAttribute(NULL, "parent"); + if (parentIdentIdx >= 0) { + parentIdent = String16(block.getAttributeStringValue(parentIdentIdx, &len)); + } else { + ssize_t sep = ident.findLast('.'); + if (sep >= 0) { + parentIdent.setTo(ident, sep); + } + } + + if (!localHasErrors) { + err = outTable->startBag(SourcePos(in->getPrintableSource(), + block.getLineNumber()), myPackage, curType, ident, + parentIdent, &curParams, + overwrite, curIsBagReplaceOnOverwrite); + if (err != NO_ERROR) { + hasErrors = localHasErrors = true; + } + } + + ssize_t elmIndex = 0; + char elmIndexStr[14]; + while ((code=block.next()) != ResXMLTree::END_DOCUMENT + && code != ResXMLTree::BAD_DOCUMENT) { + + if (code == ResXMLTree::START_TAG) { + if (strcmp16(block.getElementName(&len), item16.string()) != 0) { + SourcePos(in->getPrintableSource(), block.getLineNumber()).error( + "Tag <%s> can not appear inside <%s>, only \n", + String8(block.getElementName(&len)).string(), + String8(*curTag).string()); + return UNKNOWN_ERROR; + } + + String16 itemIdent; + if (curType == array16) { + sprintf(elmIndexStr, "^index_%d", (int)elmIndex++); + itemIdent = String16(elmIndexStr); + } else if (curType == plurals16) { + ssize_t itemIdentIdx = block.indexOfAttribute(NULL, "quantity"); + if (itemIdentIdx >= 0) { + String16 quantity16(block.getAttributeStringValue(itemIdentIdx, &len)); + if (quantity16 == other16) { + itemIdent = quantityOther16; + } + else if (quantity16 == zero16) { + itemIdent = quantityZero16; + } + else if (quantity16 == one16) { + itemIdent = quantityOne16; + } + else if (quantity16 == two16) { + itemIdent = quantityTwo16; + } + else if (quantity16 == few16) { + itemIdent = quantityFew16; + } + else if (quantity16 == many16) { + itemIdent = quantityMany16; + } + else { + SourcePos(in->getPrintableSource(), block.getLineNumber()).error( + "Illegal 'quantity' attribute is inside \n"); + hasErrors = localHasErrors = true; + } + } else { + SourcePos(in->getPrintableSource(), block.getLineNumber()).error( + "A 'quantity' attribute is required for inside \n"); + hasErrors = localHasErrors = true; + } + } else { + ssize_t itemIdentIdx = block.indexOfAttribute(NULL, "name"); + if (itemIdentIdx >= 0) { + itemIdent = String16(block.getAttributeStringValue(itemIdentIdx, &len)); + } else { + SourcePos(in->getPrintableSource(), block.getLineNumber()).error( + "A 'name' attribute is required for \n"); + hasErrors = localHasErrors = true; + } + } + + ResXMLParser::ResXMLPosition parserPosition; + block.getPosition(&parserPosition); + + err = parseAndAddBag(bundle, in, &block, curParams, myPackage, curType, + ident, parentIdent, itemIdent, curFormat, curIsFormatted, + product, false, overwrite, outTable); + if (err == NO_ERROR) { + if (curIsPseudolocalizable && localeIsDefined(curParams) + && bundle->getPseudolocalize()) { + // pseudolocalize here +#if 1 + block.setPosition(parserPosition); + err = parseAndAddBag(bundle, in, &block, pseudoParams, myPackage, + curType, ident, parentIdent, itemIdent, curFormat, + curIsFormatted, product, true, overwrite, outTable); +#endif + } + } + if (err != NO_ERROR) { + hasErrors = localHasErrors = true; + } + } else if (code == ResXMLTree::END_TAG) { + if (strcmp16(block.getElementName(&len), curTag->string()) != 0) { + SourcePos(in->getPrintableSource(), block.getLineNumber()).error( + "Found tag where is expected\n", + String8(block.getElementName(&len)).string(), + String8(*curTag).string()); + return UNKNOWN_ERROR; + } + break; + } + } + } else { + ResXMLParser::ResXMLPosition parserPosition; + block.getPosition(&parserPosition); + + err = parseAndAddEntry(bundle, in, &block, curParams, myPackage, curType, ident, + *curTag, curIsStyled, curFormat, curIsFormatted, + product, false, overwrite, outTable); + + if (err < NO_ERROR) { // Why err < NO_ERROR instead of err != NO_ERROR? + hasErrors = localHasErrors = true; + } + else if (err == NO_ERROR) { + if (curIsPseudolocalizable && localeIsDefined(curParams) + && bundle->getPseudolocalize()) { + // pseudolocalize here + block.setPosition(parserPosition); + err = parseAndAddEntry(bundle, in, &block, pseudoParams, myPackage, curType, + ident, *curTag, curIsStyled, curFormat, + curIsFormatted, product, + true, overwrite, outTable); + if (err != NO_ERROR) { + hasErrors = localHasErrors = true; + } + } + } + } + +#if 0 + if (comment.size() > 0) { + printf("Comment for @%s:%s/%s: %s\n", String8(myPackage).string(), + String8(curType).string(), String8(ident).string(), + String8(comment).string()); + } +#endif + if (!localHasErrors) { + outTable->appendComment(myPackage, curType, ident, comment, false); + } + } + else if (code == ResXMLTree::END_TAG) { + if (strcmp16(block.getElementName(&len), resources16.string()) != 0) { + SourcePos(in->getPrintableSource(), block.getLineNumber()).error( + "Unexpected end tag %s\n", String8(block.getElementName(&len)).string()); + return UNKNOWN_ERROR; + } + } + else if (code == ResXMLTree::START_NAMESPACE || code == ResXMLTree::END_NAMESPACE) { + } + else if (code == ResXMLTree::TEXT) { + if (isWhitespace(block.getText(&len))) { + continue; + } + SourcePos(in->getPrintableSource(), block.getLineNumber()).error( + "Found text \"%s\" where item tag is expected\n", + String8(block.getText(&len)).string()); + return UNKNOWN_ERROR; + } + } + + return hasErrors ? UNKNOWN_ERROR : NO_ERROR; +} + +ResourceTable::ResourceTable(Bundle* bundle, const String16& assetsPackage) + : mAssetsPackage(assetsPackage), mNextPackageId(1), mHaveAppPackage(false), + mIsAppPackage(!bundle->getExtending()), + mNumLocal(0), + mBundle(bundle) +{ +} + +status_t ResourceTable::addIncludedResources(Bundle* bundle, const sp& assets) +{ + status_t err = assets->buildIncludedResources(bundle); + if (err != NO_ERROR) { + return err; + } + + // For future reference to included resources. + mAssets = assets; + + const ResTable& incl = assets->getIncludedResources(); + + // Retrieve all the packages. + const size_t N = incl.getBasePackageCount(); + for (size_t phase=0; phase<2; phase++) { + for (size_t i=0; i id) { + fprintf(stderr, "Included base package ID %d already in use!\n", id); + return UNKNOWN_ERROR; + } + } + if (id != 0) { + NOISY(printf("Including package %s with ID=%d\n", + String8(name).string(), id)); + sp p = new Package(name, id); + mPackages.add(name, p); + mOrderedPackages.add(p); + + if (id >= mNextPackageId) { + mNextPackageId = id+1; + } + } + } + } + + // Every resource table always has one first entry, the bag attributes. + const SourcePos unknown(String8("????"), 0); + sp attr = getType(mAssetsPackage, String16("attr"), unknown); + + return NO_ERROR; +} + +status_t ResourceTable::addPublic(const SourcePos& sourcePos, + const String16& package, + const String16& type, + const String16& name, + const uint32_t ident) +{ + uint32_t rid = mAssets->getIncludedResources() + .identifierForName(name.string(), name.size(), + type.string(), type.size(), + package.string(), package.size()); + if (rid != 0) { + sourcePos.error("Error declaring public resource %s/%s for included package %s\n", + String8(type).string(), String8(name).string(), + String8(package).string()); + return UNKNOWN_ERROR; + } + + sp t = getType(package, type, sourcePos); + if (t == NULL) { + return UNKNOWN_ERROR; + } + return t->addPublic(sourcePos, name, ident); +} + +status_t ResourceTable::addEntry(const SourcePos& sourcePos, + const String16& package, + const String16& type, + const String16& name, + const String16& value, + const Vector* style, + const ResTable_config* params, + const bool doSetIndex, + const int32_t format, + const bool overwrite) +{ + // Check for adding entries in other packages... for now we do + // nothing. We need to do the right thing here to support skinning. + uint32_t rid = mAssets->getIncludedResources() + .identifierForName(name.string(), name.size(), + type.string(), type.size(), + package.string(), package.size()); + if (rid != 0) { + return NO_ERROR; + } + +#if 0 + if (name == String16("left")) { + printf("Adding entry left: file=%s, line=%d, type=%s, value=%s\n", + sourcePos.file.string(), sourcePos.line, String8(type).string(), + String8(value).string()); + } +#endif + + sp e = getEntry(package, type, name, sourcePos, overwrite, + params, doSetIndex); + if (e == NULL) { + return UNKNOWN_ERROR; + } + status_t err = e->setItem(sourcePos, value, style, format, overwrite); + if (err == NO_ERROR) { + mNumLocal++; + } + return err; +} + +status_t ResourceTable::startBag(const SourcePos& sourcePos, + const String16& package, + const String16& type, + const String16& name, + const String16& bagParent, + const ResTable_config* params, + bool overlay, + bool replace, bool isId) +{ + status_t result = NO_ERROR; + + // Check for adding entries in other packages... for now we do + // nothing. We need to do the right thing here to support skinning. + uint32_t rid = mAssets->getIncludedResources() + .identifierForName(name.string(), name.size(), + type.string(), type.size(), + package.string(), package.size()); + if (rid != 0) { + return NO_ERROR; + } + +#if 0 + if (name == String16("left")) { + printf("Adding bag left: file=%s, line=%d, type=%s\n", + sourcePos.file.striing(), sourcePos.line, String8(type).string()); + } +#endif + if (overlay && !mBundle->getAutoAddOverlay() && !hasBagOrEntry(package, type, name)) { + bool canAdd = false; + sp p = mPackages.valueFor(package); + if (p != NULL) { + sp t = p->getTypes().valueFor(type); + if (t != NULL) { + if (t->getCanAddEntries().indexOf(name) >= 0) { + canAdd = true; + } + } + } + if (!canAdd) { + sourcePos.error("Resource does not already exist in overlay at '%s'; use to add.\n", + String8(name).string()); + return UNKNOWN_ERROR; + } + } + sp e = getEntry(package, type, name, sourcePos, overlay, params); + if (e == NULL) { + return UNKNOWN_ERROR; + } + + // If a parent is explicitly specified, set it. + if (bagParent.size() > 0) { + e->setParent(bagParent); + } + + if ((result = e->makeItABag(sourcePos)) != NO_ERROR) { + return result; + } + + if (overlay && replace) { + return e->emptyBag(sourcePos); + } + return result; +} + +status_t ResourceTable::addBag(const SourcePos& sourcePos, + const String16& package, + const String16& type, + const String16& name, + const String16& bagParent, + const String16& bagKey, + const String16& value, + const Vector* style, + const ResTable_config* params, + bool replace, bool isId, const int32_t format) +{ + // Check for adding entries in other packages... for now we do + // nothing. We need to do the right thing here to support skinning. + uint32_t rid = mAssets->getIncludedResources() + .identifierForName(name.string(), name.size(), + type.string(), type.size(), + package.string(), package.size()); + if (rid != 0) { + return NO_ERROR; + } + +#if 0 + if (name == String16("left")) { + printf("Adding bag left: file=%s, line=%d, type=%s\n", + sourcePos.file.striing(), sourcePos.line, String8(type).string()); + } +#endif + sp e = getEntry(package, type, name, sourcePos, replace, params); + if (e == NULL) { + return UNKNOWN_ERROR; + } + + // If a parent is explicitly specified, set it. + if (bagParent.size() > 0) { + e->setParent(bagParent); + } + + const bool first = e->getBag().indexOfKey(bagKey) < 0; + status_t err = e->addToBag(sourcePos, bagKey, value, style, replace, isId, format); + if (err == NO_ERROR && first) { + mNumLocal++; + } + return err; +} + +bool ResourceTable::hasBagOrEntry(const String16& package, + const String16& type, + const String16& name) const +{ + // First look for this in the included resources... + uint32_t rid = mAssets->getIncludedResources() + .identifierForName(name.string(), name.size(), + type.string(), type.size(), + package.string(), package.size()); + if (rid != 0) { + return true; + } + + sp p = mPackages.valueFor(package); + if (p != NULL) { + sp t = p->getTypes().valueFor(type); + if (t != NULL) { + sp c = t->getConfigs().valueFor(name); + if (c != NULL) return true; + } + } + + return false; +} + +bool ResourceTable::hasBagOrEntry(const String16& package, + const String16& type, + const String16& name, + const ResTable_config& config) const +{ + // First look for this in the included resources... + uint32_t rid = mAssets->getIncludedResources() + .identifierForName(name.string(), name.size(), + type.string(), type.size(), + package.string(), package.size()); + if (rid != 0) { + return true; + } + + sp p = mPackages.valueFor(package); + if (p != NULL) { + sp t = p->getTypes().valueFor(type); + if (t != NULL) { + sp c = t->getConfigs().valueFor(name); + if (c != NULL) { + sp e = c->getEntries().valueFor(config); + if (e != NULL) { + return true; + } + } + } + } + + return false; +} + +bool ResourceTable::hasBagOrEntry(const String16& ref, + const String16* defType, + const String16* defPackage) +{ + String16 package, type, name; + if (!ResTable::expandResourceRef(ref.string(), ref.size(), &package, &type, &name, + defType, defPackage ? defPackage:&mAssetsPackage, NULL)) { + return false; + } + return hasBagOrEntry(package, type, name); +} + +bool ResourceTable::appendComment(const String16& package, + const String16& type, + const String16& name, + const String16& comment, + bool onlyIfEmpty) +{ + if (comment.size() <= 0) { + return true; + } + + sp p = mPackages.valueFor(package); + if (p != NULL) { + sp t = p->getTypes().valueFor(type); + if (t != NULL) { + sp c = t->getConfigs().valueFor(name); + if (c != NULL) { + c->appendComment(comment, onlyIfEmpty); + return true; + } + } + } + return false; +} + +bool ResourceTable::appendTypeComment(const String16& package, + const String16& type, + const String16& name, + const String16& comment) +{ + if (comment.size() <= 0) { + return true; + } + + sp p = mPackages.valueFor(package); + if (p != NULL) { + sp t = p->getTypes().valueFor(type); + if (t != NULL) { + sp c = t->getConfigs().valueFor(name); + if (c != NULL) { + c->appendTypeComment(comment); + return true; + } + } + } + return false; +} + +void ResourceTable::canAddEntry(const SourcePos& pos, + const String16& package, const String16& type, const String16& name) +{ + sp t = getType(package, type, pos); + if (t != NULL) { + t->canAddEntry(name); + } +} + +size_t ResourceTable::size() const { + return mPackages.size(); +} + +size_t ResourceTable::numLocalResources() const { + return mNumLocal; +} + +bool ResourceTable::hasResources() const { + return mNumLocal > 0; +} + +sp ResourceTable::flatten(Bundle* bundle) +{ + sp data = new AaptFile(String8(), AaptGroupEntry(), String8()); + status_t err = flatten(bundle, data); + return err == NO_ERROR ? data : NULL; +} + +inline uint32_t ResourceTable::getResId(const sp& p, + const sp& t, + uint32_t nameId) +{ + return makeResId(p->getAssignedId(), t->getIndex(), nameId); +} + +uint32_t ResourceTable::getResId(const String16& package, + const String16& type, + const String16& name, + bool onlyPublic) const +{ + uint32_t id = ResourceIdCache::lookup(package, type, name, onlyPublic); + if (id != 0) return id; // cache hit + + sp p = mPackages.valueFor(package); + if (p == NULL) return 0; + + // First look for this in the included resources... + uint32_t specFlags = 0; + uint32_t rid = mAssets->getIncludedResources() + .identifierForName(name.string(), name.size(), + type.string(), type.size(), + package.string(), package.size(), + &specFlags); + if (rid != 0) { + if (onlyPublic) { + if ((specFlags & ResTable_typeSpec::SPEC_PUBLIC) == 0) { + return 0; + } + } + + if (Res_INTERNALID(rid)) { + return ResourceIdCache::store(package, type, name, onlyPublic, rid); + } + return ResourceIdCache::store(package, type, name, onlyPublic, + Res_MAKEID(p->getAssignedId()-1, Res_GETTYPE(rid), Res_GETENTRY(rid))); + } + + sp t = p->getTypes().valueFor(type); + if (t == NULL) return 0; + sp c = t->getConfigs().valueFor(name); + if (c == NULL) return 0; + int32_t ei = c->getEntryIndex(); + if (ei < 0) return 0; + + return ResourceIdCache::store(package, type, name, onlyPublic, + getResId(p, t, ei)); +} + +uint32_t ResourceTable::getResId(const String16& ref, + const String16* defType, + const String16* defPackage, + const char** outErrorMsg, + bool onlyPublic) const +{ + String16 package, type, name; + bool refOnlyPublic = true; + if (!ResTable::expandResourceRef( + ref.string(), ref.size(), &package, &type, &name, + defType, defPackage ? defPackage:&mAssetsPackage, + outErrorMsg, &refOnlyPublic)) { + NOISY(printf("Expanding resource: ref=%s\n", + String8(ref).string())); + NOISY(printf("Expanding resource: defType=%s\n", + defType ? String8(*defType).string() : "NULL")); + NOISY(printf("Expanding resource: defPackage=%s\n", + defPackage ? String8(*defPackage).string() : "NULL")); + NOISY(printf("Expanding resource: ref=%s\n", String8(ref).string())); + NOISY(printf("Expanded resource: p=%s, t=%s, n=%s, res=0\n", + String8(package).string(), String8(type).string(), + String8(name).string())); + return 0; + } + uint32_t res = getResId(package, type, name, onlyPublic && refOnlyPublic); + NOISY(printf("Expanded resource: p=%s, t=%s, n=%s, res=%d\n", + String8(package).string(), String8(type).string(), + String8(name).string(), res)); + if (res == 0) { + if (outErrorMsg) + *outErrorMsg = "No resource found that matches the given name"; + } + return res; +} + +bool ResourceTable::isValidResourceName(const String16& s) +{ + const char16_t* p = s.string(); + bool first = true; + while (*p) { + if ((*p >= 'a' && *p <= 'z') + || (*p >= 'A' && *p <= 'Z') + || *p == '_' + || (!first && *p >= '0' && *p <= '9')) { + first = false; + p++; + continue; + } + return false; + } + return true; +} + +bool ResourceTable::stringToValue(Res_value* outValue, StringPool* pool, + const String16& str, + bool preserveSpaces, bool coerceType, + uint32_t attrID, + const Vector* style, + String16* outStr, void* accessorCookie, + uint32_t attrType, const String8* configTypeName, + const ConfigDescription* config) +{ + String16 finalStr; + + bool res = true; + if (style == NULL || style->size() == 0) { + // Text is not styled so it can be any type... let's figure it out. + res = mAssets->getIncludedResources() + .stringToValue(outValue, &finalStr, str.string(), str.size(), preserveSpaces, + coerceType, attrID, NULL, &mAssetsPackage, this, + accessorCookie, attrType); + } else { + // Styled text can only be a string, and while collecting the style + // information we have already processed that string! + outValue->size = sizeof(Res_value); + outValue->res0 = 0; + outValue->dataType = outValue->TYPE_STRING; + outValue->data = 0; + finalStr = str; + } + + if (!res) { + return false; + } + + if (outValue->dataType == outValue->TYPE_STRING) { + // Should do better merging styles. + if (pool) { + String8 configStr; + if (config != NULL) { + configStr = config->toString(); + } else { + configStr = "(null)"; + } + NOISY(printf("Adding to pool string style #%d config %s: %s\n", + style != NULL ? style->size() : 0, + configStr.string(), String8(finalStr).string())); + if (style != NULL && style->size() > 0) { + outValue->data = pool->add(finalStr, *style, configTypeName, config); + } else { + outValue->data = pool->add(finalStr, true, configTypeName, config); + } + } else { + // Caller will fill this in later. + outValue->data = 0; + } + + if (outStr) { + *outStr = finalStr; + } + + } + + return true; +} + +uint32_t ResourceTable::getCustomResource( + const String16& package, const String16& type, const String16& name) const +{ + //printf("getCustomResource: %s %s %s\n", String8(package).string(), + // String8(type).string(), String8(name).string()); + sp p = mPackages.valueFor(package); + if (p == NULL) return 0; + sp t = p->getTypes().valueFor(type); + if (t == NULL) return 0; + sp c = t->getConfigs().valueFor(name); + if (c == NULL) return 0; + int32_t ei = c->getEntryIndex(); + if (ei < 0) return 0; + return getResId(p, t, ei); +} + +uint32_t ResourceTable::getCustomResourceWithCreation( + const String16& package, const String16& type, const String16& name, + const bool createIfNotFound) +{ + uint32_t resId = getCustomResource(package, type, name); + if (resId != 0 || !createIfNotFound) { + return resId; + } + String16 value("false"); + + status_t status = addEntry(mCurrentXmlPos, package, type, name, value, NULL, NULL, true); + if (status == NO_ERROR) { + resId = getResId(package, type, name); + return resId; + } + return 0; +} + +uint32_t ResourceTable::getRemappedPackage(uint32_t origPackage) const +{ + return origPackage; +} + +bool ResourceTable::getAttributeType(uint32_t attrID, uint32_t* outType) +{ + //printf("getAttributeType #%08x\n", attrID); + Res_value value; + if (getItemValue(attrID, ResTable_map::ATTR_TYPE, &value)) { + //printf("getAttributeType #%08x (%s): #%08x\n", attrID, + // String8(getEntry(attrID)->getName()).string(), value.data); + *outType = value.data; + return true; + } + return false; +} + +bool ResourceTable::getAttributeMin(uint32_t attrID, uint32_t* outMin) +{ + //printf("getAttributeMin #%08x\n", attrID); + Res_value value; + if (getItemValue(attrID, ResTable_map::ATTR_MIN, &value)) { + *outMin = value.data; + return true; + } + return false; +} + +bool ResourceTable::getAttributeMax(uint32_t attrID, uint32_t* outMax) +{ + //printf("getAttributeMax #%08x\n", attrID); + Res_value value; + if (getItemValue(attrID, ResTable_map::ATTR_MAX, &value)) { + *outMax = value.data; + return true; + } + return false; +} + +uint32_t ResourceTable::getAttributeL10N(uint32_t attrID) +{ + //printf("getAttributeL10N #%08x\n", attrID); + Res_value value; + if (getItemValue(attrID, ResTable_map::ATTR_L10N, &value)) { + return value.data; + } + return ResTable_map::L10N_NOT_REQUIRED; +} + +bool ResourceTable::getLocalizationSetting() +{ + return mBundle->getRequireLocalization(); +} + +void ResourceTable::reportError(void* accessorCookie, const char* fmt, ...) +{ + if (accessorCookie != NULL && fmt != NULL) { + AccessorCookie* ac = (AccessorCookie*)accessorCookie; + int retval=0; + char buf[1024]; + va_list ap; + va_start(ap, fmt); + retval = vsnprintf(buf, sizeof(buf), fmt, ap); + va_end(ap); + ac->sourcePos.error("Error: %s (at '%s' with value '%s').\n", + buf, ac->attr.string(), ac->value.string()); + } +} + +bool ResourceTable::getAttributeKeys( + uint32_t attrID, Vector* outKeys) +{ + sp e = getEntry(attrID); + if (e != NULL) { + const size_t N = e->getBag().size(); + for (size_t i=0; igetBag().keyAt(i); + if (key.size() > 0 && key.string()[0] != '^') { + outKeys->add(key); + } + } + return true; + } + return false; +} + +bool ResourceTable::getAttributeEnum( + uint32_t attrID, const char16_t* name, size_t nameLen, + Res_value* outValue) +{ + //printf("getAttributeEnum #%08x %s\n", attrID, String8(name, nameLen).string()); + String16 nameStr(name, nameLen); + sp e = getEntry(attrID); + if (e != NULL) { + const size_t N = e->getBag().size(); + for (size_t i=0; igetBag().keyAt(i)).string()); + if (e->getBag().keyAt(i) == nameStr) { + return getItemValue(attrID, e->getBag().valueAt(i).bagKeyId, outValue); + } + } + } + return false; +} + +bool ResourceTable::getAttributeFlags( + uint32_t attrID, const char16_t* name, size_t nameLen, + Res_value* outValue) +{ + outValue->dataType = Res_value::TYPE_INT_HEX; + outValue->data = 0; + + //printf("getAttributeFlags #%08x %s\n", attrID, String8(name, nameLen).string()); + String16 nameStr(name, nameLen); + sp e = getEntry(attrID); + if (e != NULL) { + const size_t N = e->getBag().size(); + + const char16_t* end = name + nameLen; + const char16_t* pos = name; + while (pos < end) { + const char16_t* start = pos; + while (pos < end && *pos != '|') { + pos++; + } + + String16 nameStr(start, pos-start); + size_t i; + for (i=0; igetBag().keyAt(i)).string()); + if (e->getBag().keyAt(i) == nameStr) { + Res_value val; + bool got = getItemValue(attrID, e->getBag().valueAt(i).bagKeyId, &val); + if (!got) { + return false; + } + //printf("Got value: 0x%08x\n", val.data); + outValue->data |= val.data; + break; + } + } + + if (i >= N) { + // Didn't find this flag identifier. + return false; + } + pos++; + } + + return true; + } + return false; +} + +status_t ResourceTable::assignResourceIds() +{ + const size_t N = mOrderedPackages.size(); + size_t pi; + status_t firstError = NO_ERROR; + + // First generate all bag attributes and assign indices. + for (pi=0; pi p = mOrderedPackages.itemAt(pi); + if (p == NULL || p->getTypes().size() == 0) { + // Empty, skip! + continue; + } + + status_t err = p->applyPublicTypeOrder(); + if (err != NO_ERROR && firstError == NO_ERROR) { + firstError = err; + } + + // Generate attributes... + const size_t N = p->getOrderedTypes().size(); + size_t ti; + for (ti=0; ti t = p->getOrderedTypes().itemAt(ti); + if (t == NULL) { + continue; + } + const size_t N = t->getOrderedConfigs().size(); + for (size_t ci=0; ci c = t->getOrderedConfigs().itemAt(ci); + if (c == NULL) { + continue; + } + const size_t N = c->getEntries().size(); + for (size_t ei=0; ei e = c->getEntries().valueAt(ei); + if (e == NULL) { + continue; + } + status_t err = e->generateAttributes(this, p->getName()); + if (err != NO_ERROR && firstError == NO_ERROR) { + firstError = err; + } + } + } + } + + const SourcePos unknown(String8("????"), 0); + sp attr = p->getType(String16("attr"), unknown); + + // Assign indices... + for (ti=0; ti t = p->getOrderedTypes().itemAt(ti); + if (t == NULL) { + continue; + } + err = t->applyPublicEntryOrder(); + if (err != NO_ERROR && firstError == NO_ERROR) { + firstError = err; + } + + const size_t N = t->getOrderedConfigs().size(); + t->setIndex(ti+1); + + LOG_ALWAYS_FATAL_IF(ti == 0 && attr != t, + "First type is not attr!"); + + for (size_t ei=0; ei c = t->getOrderedConfigs().itemAt(ei); + if (c == NULL) { + continue; + } + c->setEntryIndex(ei); + } + } + + // Assign resource IDs to keys in bags... + for (ti=0; ti t = p->getOrderedTypes().itemAt(ti); + if (t == NULL) { + continue; + } + const size_t N = t->getOrderedConfigs().size(); + for (size_t ci=0; ci c = t->getOrderedConfigs().itemAt(ci); + //printf("Ordered config #%d: %p\n", ci, c.get()); + const size_t N = c->getEntries().size(); + for (size_t ei=0; ei e = c->getEntries().valueAt(ei); + if (e == NULL) { + continue; + } + status_t err = e->assignResourceIds(this, p->getName()); + if (err != NO_ERROR && firstError == NO_ERROR) { + firstError = err; + } + } + } + } + } + return firstError; +} + +status_t ResourceTable::addSymbols(const sp& outSymbols) { + const size_t N = mOrderedPackages.size(); + size_t pi; + + for (pi=0; pi p = mOrderedPackages.itemAt(pi); + if (p->getTypes().size() == 0) { + // Empty, skip! + continue; + } + + const size_t N = p->getOrderedTypes().size(); + size_t ti; + + for (ti=0; ti t = p->getOrderedTypes().itemAt(ti); + if (t == NULL) { + continue; + } + const size_t N = t->getOrderedConfigs().size(); + sp typeSymbols; + typeSymbols = outSymbols->addNestedSymbol(String8(t->getName()), t->getPos()); + for (size_t ci=0; ci c = t->getOrderedConfigs().itemAt(ci); + if (c == NULL) { + continue; + } + uint32_t rid = getResId(p, t, ci); + if (rid == 0) { + return UNKNOWN_ERROR; + } + if (Res_GETPACKAGE(rid) == (size_t)(p->getAssignedId()-1)) { + typeSymbols->addSymbol(String8(c->getName()), rid, c->getPos()); + + String16 comment(c->getComment()); + typeSymbols->appendComment(String8(c->getName()), comment, c->getPos()); + //printf("Type symbol %s comment: %s\n", String8(e->getName()).string(), + // String8(comment).string()); + comment = c->getTypeComment(); + typeSymbols->appendTypeComment(String8(c->getName()), comment); + } else { +#if 0 + printf("**** NO MATCH: 0x%08x vs 0x%08x\n", + Res_GETPACKAGE(rid), p->getAssignedId()); +#endif + } + } + } + } + return NO_ERROR; +} + + +void +ResourceTable::addLocalization(const String16& name, const String8& locale) +{ + mLocalizations[name].insert(locale); +} + + +/*! + * Flag various sorts of localization problems. '+' indicates checks already implemented; + * '-' indicates checks that will be implemented in the future. + * + * + A localized string for which no default-locale version exists => warning + * + A string for which no version in an explicitly-requested locale exists => warning + * + A localized translation of an translateable="false" string => warning + * - A localized string not provided in every locale used by the table + */ +status_t +ResourceTable::validateLocalizations(void) +{ + status_t err = NO_ERROR; + const String8 defaultLocale; + + // For all strings... + for (map >::iterator nameIter = mLocalizations.begin(); + nameIter != mLocalizations.end(); + nameIter++) { + const set& configSet = nameIter->second; // naming convenience + + // Look for strings with no default localization + if (configSet.count(defaultLocale) == 0) { + fprintf(stdout, "aapt: warning: string '%s' has no default translation in %s; found:", + String8(nameIter->first).string(), mBundle->getResourceSourceDirs()[0]); + for (set::const_iterator locales = configSet.begin(); + locales != configSet.end(); + locales++) { + fprintf(stdout, " %s", (*locales).string()); + } + fprintf(stdout, "\n"); + // !!! TODO: throw an error here in some circumstances + } + + // Check that all requested localizations are present for this string + if (mBundle->getConfigurations() != NULL && mBundle->getRequireLocalization()) { + const char* allConfigs = mBundle->getConfigurations(); + const char* start = allConfigs; + const char* comma; + + do { + String8 config; + comma = strchr(start, ','); + if (comma != NULL) { + config.setTo(start, comma - start); + start = comma + 1; + } else { + config.setTo(start); + } + + // don't bother with the pseudolocale "zz_ZZ" + if (config != "zz_ZZ") { + if (configSet.find(config) == configSet.end()) { + // okay, no specific localization found. it's possible that we are + // requiring a specific regional localization [e.g. de_DE] but there is an + // available string in the generic language localization [e.g. de]; + // consider that string to have fulfilled the localization requirement. + String8 region(config.string(), 2); + if (configSet.find(region) == configSet.end()) { + if (configSet.count(defaultLocale) == 0) { + fprintf(stdout, "aapt: warning: " + "**** string '%s' has no default or required localization " + "for '%s' in %s\n", + String8(nameIter->first).string(), + config.string(), + mBundle->getResourceSourceDirs()[0]); + } + } + } + } + } while (comma != NULL); + } + } + + return err; +} + +status_t ResourceTable::flatten(Bundle* bundle, const sp& dest) +{ + ResourceFilter filter; + status_t err = filter.parse(bundle->getConfigurations()); + if (err != NO_ERROR) { + return err; + } + + const ConfigDescription nullConfig; + + const size_t N = mOrderedPackages.size(); + size_t pi; + + const static String16 mipmap16("mipmap"); + + bool useUTF8 = !bundle->getUTF16StringsOption(); + + // Iterate through all data, collecting all values (strings, + // references, etc). + StringPool valueStrings(useUTF8); + Vector > allEntries; + for (pi=0; pi p = mOrderedPackages.itemAt(pi); + if (p->getTypes().size() == 0) { + // Empty, skip! + continue; + } + + StringPool typeStrings(useUTF8); + StringPool keyStrings(useUTF8); + + const size_t N = p->getOrderedTypes().size(); + for (size_t ti=0; ti t = p->getOrderedTypes().itemAt(ti); + if (t == NULL) { + typeStrings.add(String16(""), false); + continue; + } + const String16 typeName(t->getName()); + typeStrings.add(typeName, false); + + // This is a hack to tweak the sorting order of the final strings, + // to put stuff that is generally not language-specific first. + String8 configTypeName(typeName); + if (configTypeName == "drawable" || configTypeName == "layout" + || configTypeName == "color" || configTypeName == "anim" + || configTypeName == "interpolator" || configTypeName == "animator" + || configTypeName == "xml" || configTypeName == "menu" + || configTypeName == "mipmap" || configTypeName == "raw") { + configTypeName = "1complex"; + } else { + configTypeName = "2value"; + } + + const bool filterable = (typeName != mipmap16); + + const size_t N = t->getOrderedConfigs().size(); + for (size_t ci=0; ci c = t->getOrderedConfigs().itemAt(ci); + if (c == NULL) { + continue; + } + const size_t N = c->getEntries().size(); + for (size_t ei=0; eigetEntries().keyAt(ei); + if (filterable && !filter.match(config)) { + continue; + } + sp e = c->getEntries().valueAt(ei); + if (e == NULL) { + continue; + } + e->setNameIndex(keyStrings.add(e->getName(), true)); + + // If this entry has no values for other configs, + // and is the default config, then it is special. Otherwise + // we want to add it with the config info. + ConfigDescription* valueConfig = NULL; + if (N != 1 || config == nullConfig) { + valueConfig = &config; + } + + status_t err = e->prepareFlatten(&valueStrings, this, + &configTypeName, &config); + if (err != NO_ERROR) { + return err; + } + allEntries.add(e); + } + } + } + + p->setTypeStrings(typeStrings.createStringBlock()); + p->setKeyStrings(keyStrings.createStringBlock()); + } + + if (bundle->getOutputAPKFile() != NULL) { + // Now we want to sort the value strings for better locality. This will + // cause the positions of the strings to change, so we need to go back + // through out resource entries and update them accordingly. Only need + // to do this if actually writing the output file. + valueStrings.sortByConfig(); + for (pi=0; piremapStringValue(&valueStrings); + } + } + + ssize_t strAmt = 0; + + // Now build the array of package chunks. + Vector > flatPackages; + for (pi=0; pi p = mOrderedPackages.itemAt(pi); + if (p->getTypes().size() == 0) { + // Empty, skip! + continue; + } + + const size_t N = p->getTypeStrings().size(); + + const size_t baseSize = sizeof(ResTable_package); + + // Start the package data. + sp data = new AaptFile(String8(), AaptGroupEntry(), String8()); + ResTable_package* header = (ResTable_package*)data->editData(baseSize); + if (header == NULL) { + fprintf(stderr, "ERROR: out of memory creating ResTable_package\n"); + return NO_MEMORY; + } + memset(header, 0, sizeof(*header)); + header->header.type = htods(RES_TABLE_PACKAGE_TYPE); + header->header.headerSize = htods(sizeof(*header)); + header->id = htodl(p->getAssignedId()); + strcpy16_htod(header->name, p->getName().string()); + + // Write the string blocks. + const size_t typeStringsStart = data->getSize(); + sp strFile = p->getTypeStringsData(); + ssize_t amt = data->writeData(strFile->getData(), strFile->getSize()); + #if PRINT_STRING_METRICS + fprintf(stderr, "**** type strings: %d\n", amt); + #endif + strAmt += amt; + if (amt < 0) { + return amt; + } + const size_t keyStringsStart = data->getSize(); + strFile = p->getKeyStringsData(); + amt = data->writeData(strFile->getData(), strFile->getSize()); + #if PRINT_STRING_METRICS + fprintf(stderr, "**** key strings: %d\n", amt); + #endif + strAmt += amt; + if (amt < 0) { + return amt; + } + + // Build the type chunks inside of this package. + for (size_t ti=0; tigetTypeStrings().stringAt(ti, &len)); + sp t = p->getTypes().valueFor(typeName); + LOG_ALWAYS_FATAL_IF(t == NULL && typeName != String16(""), + "Type name %s not found", + String8(typeName).string()); + + const bool filterable = (typeName != mipmap16); + + const size_t N = t != NULL ? t->getOrderedConfigs().size() : 0; + + // Until a non-NO_ENTRY value has been written for a resource, + // that resource is invalid; validResources[i] represents + // the item at t->getOrderedConfigs().itemAt(i). + Vector validResources; + validResources.insertAt(false, 0, N); + + // First write the typeSpec chunk, containing information about + // each resource entry in this type. + { + const size_t typeSpecSize = sizeof(ResTable_typeSpec) + sizeof(uint32_t)*N; + const size_t typeSpecStart = data->getSize(); + ResTable_typeSpec* tsHeader = (ResTable_typeSpec*) + (((uint8_t*)data->editData(typeSpecStart+typeSpecSize)) + typeSpecStart); + if (tsHeader == NULL) { + fprintf(stderr, "ERROR: out of memory creating ResTable_typeSpec\n"); + return NO_MEMORY; + } + memset(tsHeader, 0, sizeof(*tsHeader)); + tsHeader->header.type = htods(RES_TABLE_TYPE_SPEC_TYPE); + tsHeader->header.headerSize = htods(sizeof(*tsHeader)); + tsHeader->header.size = htodl(typeSpecSize); + tsHeader->id = ti+1; + tsHeader->entryCount = htodl(N); + + uint32_t* typeSpecFlags = (uint32_t*) + (((uint8_t*)data->editData()) + + typeSpecStart + sizeof(ResTable_typeSpec)); + memset(typeSpecFlags, 0, sizeof(uint32_t)*N); + + for (size_t ei=0; ei cl = t->getOrderedConfigs().itemAt(ei); + if (cl->getPublic()) { + typeSpecFlags[ei] |= htodl(ResTable_typeSpec::SPEC_PUBLIC); + } + const size_t CN = cl->getEntries().size(); + for (size_t ci=0; cigetEntries().keyAt(ci))) { + continue; + } + for (size_t cj=ci+1; cjgetEntries().keyAt(cj))) { + continue; + } + typeSpecFlags[ei] |= htodl( + cl->getEntries().keyAt(ci).diff(cl->getEntries().keyAt(cj))); + } + } + } + } + + // We need to write one type chunk for each configuration for + // which we have entries in this type. + const size_t NC = t->getUniqueConfigs().size(); + + const size_t typeSize = sizeof(ResTable_type) + sizeof(uint32_t)*N; + + for (size_t ci=0; cigetUniqueConfigs().itemAt(ci); + + NOISY(printf("Writing config %d config: imsi:%d/%d lang:%c%c cnt:%c%c " + "orien:%d ui:%d touch:%d density:%d key:%d inp:%d nav:%d sz:%dx%d " + "sw%ddp w%ddp h%ddp dir:%d\n", + ti+1, + config.mcc, config.mnc, + config.language[0] ? config.language[0] : '-', + config.language[1] ? config.language[1] : '-', + config.country[0] ? config.country[0] : '-', + config.country[1] ? config.country[1] : '-', + config.orientation, + config.uiMode, + config.touchscreen, + config.density, + config.keyboard, + config.inputFlags, + config.navigation, + config.screenWidth, + config.screenHeight, + config.smallestScreenWidthDp, + config.screenWidthDp, + config.screenHeightDp, + config.layoutDirection)); + + if (filterable && !filter.match(config)) { + continue; + } + + const size_t typeStart = data->getSize(); + + ResTable_type* tHeader = (ResTable_type*) + (((uint8_t*)data->editData(typeStart+typeSize)) + typeStart); + if (tHeader == NULL) { + fprintf(stderr, "ERROR: out of memory creating ResTable_type\n"); + return NO_MEMORY; + } + + memset(tHeader, 0, sizeof(*tHeader)); + tHeader->header.type = htods(RES_TABLE_TYPE_TYPE); + tHeader->header.headerSize = htods(sizeof(*tHeader)); + tHeader->id = ti+1; + tHeader->entryCount = htodl(N); + tHeader->entriesStart = htodl(typeSize); + tHeader->config = config; + NOISY(printf("Writing type %d config: imsi:%d/%d lang:%c%c cnt:%c%c " + "orien:%d ui:%d touch:%d density:%d key:%d inp:%d nav:%d sz:%dx%d " + "sw%ddp w%ddp h%ddp dir:%d\n", + ti+1, + tHeader->config.mcc, tHeader->config.mnc, + tHeader->config.language[0] ? tHeader->config.language[0] : '-', + tHeader->config.language[1] ? tHeader->config.language[1] : '-', + tHeader->config.country[0] ? tHeader->config.country[0] : '-', + tHeader->config.country[1] ? tHeader->config.country[1] : '-', + tHeader->config.orientation, + tHeader->config.uiMode, + tHeader->config.touchscreen, + tHeader->config.density, + tHeader->config.keyboard, + tHeader->config.inputFlags, + tHeader->config.navigation, + tHeader->config.screenWidth, + tHeader->config.screenHeight, + tHeader->config.smallestScreenWidthDp, + tHeader->config.screenWidthDp, + tHeader->config.screenHeightDp, + tHeader->config.layoutDirection)); + tHeader->config.swapHtoD(); + + // Build the entries inside of this type. + for (size_t ei=0; ei cl = t->getOrderedConfigs().itemAt(ei); + sp e = cl->getEntries().valueFor(config); + + // Set the offset for this entry in its type. + uint32_t* index = (uint32_t*) + (((uint8_t*)data->editData()) + + typeStart + sizeof(ResTable_type)); + if (e != NULL) { + index[ei] = htodl(data->getSize()-typeStart-typeSize); + + // Create the entry. + ssize_t amt = e->flatten(bundle, data, cl->getPublic()); + if (amt < 0) { + return amt; + } + validResources.editItemAt(ei) = true; + } else { + index[ei] = htodl(ResTable_type::NO_ENTRY); + } + } + + // Fill in the rest of the type information. + tHeader = (ResTable_type*) + (((uint8_t*)data->editData()) + typeStart); + tHeader->header.size = htodl(data->getSize()-typeStart); + } + + for (size_t i = 0; i < N; ++i) { + if (!validResources[i]) { + sp c = t->getOrderedConfigs().itemAt(i); + fprintf(stderr, "warning: no entries written for %s/%s\n", + String8(typeName).string(), String8(c->getName()).string()); + } + } + } + + // Fill in the rest of the package information. + header = (ResTable_package*)data->editData(); + header->header.size = htodl(data->getSize()); + header->typeStrings = htodl(typeStringsStart); + header->lastPublicType = htodl(p->getTypeStrings().size()); + header->keyStrings = htodl(keyStringsStart); + header->lastPublicKey = htodl(p->getKeyStrings().size()); + + flatPackages.add(data); + } + + // And now write out the final chunks. + const size_t dataStart = dest->getSize(); + + { + // blah + ResTable_header header; + memset(&header, 0, sizeof(header)); + header.header.type = htods(RES_TABLE_TYPE); + header.header.headerSize = htods(sizeof(header)); + header.packageCount = htodl(flatPackages.size()); + status_t err = dest->writeData(&header, sizeof(header)); + if (err != NO_ERROR) { + fprintf(stderr, "ERROR: out of memory creating ResTable_header\n"); + return err; + } + } + + ssize_t strStart = dest->getSize(); + err = valueStrings.writeStringBlock(dest); + if (err != NO_ERROR) { + return err; + } + + ssize_t amt = (dest->getSize()-strStart); + strAmt += amt; + #if PRINT_STRING_METRICS + fprintf(stderr, "**** value strings: %d\n", amt); + fprintf(stderr, "**** total strings: %d\n", strAmt); + #endif + + for (pi=0; piwriteData(flatPackages[pi]->getData(), + flatPackages[pi]->getSize()); + if (err != NO_ERROR) { + fprintf(stderr, "ERROR: out of memory creating package chunk for ResTable_header\n"); + return err; + } + } + + ResTable_header* header = (ResTable_header*) + (((uint8_t*)dest->getData()) + dataStart); + header->header.size = htodl(dest->getSize() - dataStart); + + NOISY(aout << "Resource table:" + << HexDump(dest->getData(), dest->getSize()) << endl); + + #if PRINT_STRING_METRICS + fprintf(stderr, "**** total resource table size: %d / %d%% strings\n", + dest->getSize(), (strAmt*100)/dest->getSize()); + #endif + + return NO_ERROR; +} + +void ResourceTable::writePublicDefinitions(const String16& package, FILE* fp) +{ + fprintf(fp, + "\n" + "\n" + "\n"); + + writePublicDefinitions(package, fp, true); + writePublicDefinitions(package, fp, false); + + fprintf(fp, + "\n" + "\n"); +} + +void ResourceTable::writePublicDefinitions(const String16& package, FILE* fp, bool pub) +{ + bool didHeader = false; + + sp pkg = mPackages.valueFor(package); + if (pkg != NULL) { + const size_t NT = pkg->getOrderedTypes().size(); + for (size_t i=0; i t = pkg->getOrderedTypes().itemAt(i); + if (t == NULL) { + continue; + } + + bool didType = false; + + const size_t NC = t->getOrderedConfigs().size(); + for (size_t j=0; j c = t->getOrderedConfigs().itemAt(j); + if (c == NULL) { + continue; + } + + if (c->getPublic() != pub) { + continue; + } + + if (!didType) { + fprintf(fp, "\n"); + didType = true; + } + if (!didHeader) { + if (pub) { + fprintf(fp," \n\n"); + } else { + fprintf(fp," \n\n"); + } + didHeader = true; + } + if (!pub) { + const size_t NE = c->getEntries().size(); + for (size_t k=0; kgetEntries().valueAt(k)->getPos(); + if (pos.file != "") { + fprintf(fp," \n", + pos.file.string(), pos.line); + } + } + } + fprintf(fp, " \n", + String8(t->getName()).string(), + String8(c->getName()).string(), + getResId(pkg, t, c->getEntryIndex())); + } + } + } +} + +ResourceTable::Item::Item(const SourcePos& _sourcePos, + bool _isId, + const String16& _value, + const Vector* _style, + int32_t _format) + : sourcePos(_sourcePos) + , isId(_isId) + , value(_value) + , format(_format) + , bagKeyId(0) + , evaluating(false) +{ + if (_style) { + style = *_style; + } +} + +status_t ResourceTable::Entry::makeItABag(const SourcePos& sourcePos) +{ + if (mType == TYPE_BAG) { + return NO_ERROR; + } + if (mType == TYPE_UNKNOWN) { + mType = TYPE_BAG; + return NO_ERROR; + } + sourcePos.error("Resource entry %s is already defined as a single item.\n" + "%s:%d: Originally defined here.\n", + String8(mName).string(), + mItem.sourcePos.file.string(), mItem.sourcePos.line); + return UNKNOWN_ERROR; +} + +status_t ResourceTable::Entry::setItem(const SourcePos& sourcePos, + const String16& value, + const Vector* style, + int32_t format, + const bool overwrite) +{ + Item item(sourcePos, false, value, style); + + if (mType == TYPE_BAG) { + const Item& item(mBag.valueAt(0)); + sourcePos.error("Resource entry %s is already defined as a bag.\n" + "%s:%d: Originally defined here.\n", + String8(mName).string(), + item.sourcePos.file.string(), item.sourcePos.line); + return UNKNOWN_ERROR; + } + if ( (mType != TYPE_UNKNOWN) && (overwrite == false) ) { + sourcePos.error("Resource entry %s is already defined.\n" + "%s:%d: Originally defined here.\n", + String8(mName).string(), + mItem.sourcePos.file.string(), mItem.sourcePos.line); + return UNKNOWN_ERROR; + } + + mType = TYPE_ITEM; + mItem = item; + mItemFormat = format; + return NO_ERROR; +} + +status_t ResourceTable::Entry::addToBag(const SourcePos& sourcePos, + const String16& key, const String16& value, + const Vector* style, + bool replace, bool isId, int32_t format) +{ + status_t err = makeItABag(sourcePos); + if (err != NO_ERROR) { + return err; + } + + Item item(sourcePos, isId, value, style, format); + + // XXX NOTE: there is an error if you try to have a bag with two keys, + // one an attr and one an id, with the same name. Not something we + // currently ever have to worry about. + ssize_t origKey = mBag.indexOfKey(key); + if (origKey >= 0) { + if (!replace) { + const Item& item(mBag.valueAt(origKey)); + sourcePos.error("Resource entry %s already has bag item %s.\n" + "%s:%d: Originally defined here.\n", + String8(mName).string(), String8(key).string(), + item.sourcePos.file.string(), item.sourcePos.line); + return UNKNOWN_ERROR; + } + //printf("Replacing %s with %s\n", + // String8(mBag.valueFor(key).value).string(), String8(value).string()); + mBag.replaceValueFor(key, item); + } + + mBag.add(key, item); + return NO_ERROR; +} + +status_t ResourceTable::Entry::emptyBag(const SourcePos& sourcePos) +{ + status_t err = makeItABag(sourcePos); + if (err != NO_ERROR) { + return err; + } + + mBag.clear(); + return NO_ERROR; +} + +status_t ResourceTable::Entry::generateAttributes(ResourceTable* table, + const String16& package) +{ + const String16 attr16("attr"); + const String16 id16("id"); + const size_t N = mBag.size(); + for (size_t i=0; ihasBagOrEntry(key, &id16, &package)) { + String16 value("false"); + status_t err = table->addEntry(SourcePos(String8(""), 0), package, + id16, key, value); + if (err != NO_ERROR) { + return err; + } + } + } else if (!table->hasBagOrEntry(key, &attr16, &package)) { + +#if 1 +// fprintf(stderr, "ERROR: Bag attribute '%s' has not been defined.\n", +// String8(key).string()); +// const Item& item(mBag.valueAt(i)); +// fprintf(stderr, "Referenced from file %s line %d\n", +// item.sourcePos.file.string(), item.sourcePos.line); +// return UNKNOWN_ERROR; +#else + char numberStr[16]; + sprintf(numberStr, "%d", ResTable_map::TYPE_ANY); + status_t err = table->addBag(SourcePos("", 0), package, + attr16, key, String16(""), + String16("^type"), + String16(numberStr), NULL, NULL); + if (err != NO_ERROR) { + return err; + } +#endif + } + } + return NO_ERROR; +} + +status_t ResourceTable::Entry::assignResourceIds(ResourceTable* table, + const String16& package) +{ + bool hasErrors = false; + + if (mType == TYPE_BAG) { + const char* errorMsg; + const String16 style16("style"); + const String16 attr16("attr"); + const String16 id16("id"); + mParentId = 0; + if (mParent.size() > 0) { + mParentId = table->getResId(mParent, &style16, NULL, &errorMsg); + if (mParentId == 0) { + mPos.error("Error retrieving parent for item: %s '%s'.\n", + errorMsg, String8(mParent).string()); + hasErrors = true; + } + } + const size_t N = mBag.size(); + for (size_t i=0; igetResId(key, + it.isId ? &id16 : &attr16, NULL, &errorMsg); + //printf("Bag key of %s: #%08x\n", String8(key).string(), it.bagKeyId); + if (it.bagKeyId == 0) { + it.sourcePos.error("Error: %s: %s '%s'.\n", errorMsg, + String8(it.isId ? id16 : attr16).string(), + String8(key).string()); + hasErrors = true; + } + } + } + return hasErrors ? UNKNOWN_ERROR : NO_ERROR; +} + +status_t ResourceTable::Entry::prepareFlatten(StringPool* strings, ResourceTable* table, + const String8* configTypeName, const ConfigDescription* config) +{ + if (mType == TYPE_ITEM) { + Item& it = mItem; + AccessorCookie ac(it.sourcePos, String8(mName), String8(it.value)); + if (!table->stringToValue(&it.parsedValue, strings, + it.value, false, true, 0, + &it.style, NULL, &ac, mItemFormat, + configTypeName, config)) { + return UNKNOWN_ERROR; + } + } else if (mType == TYPE_BAG) { + const size_t N = mBag.size(); + for (size_t i=0; istringToValue(&it.parsedValue, strings, + it.value, false, true, it.bagKeyId, + &it.style, NULL, &ac, it.format, + configTypeName, config)) { + return UNKNOWN_ERROR; + } + } + } else { + mPos.error("Error: entry %s is not a single item or a bag.\n", + String8(mName).string()); + return UNKNOWN_ERROR; + } + return NO_ERROR; +} + +status_t ResourceTable::Entry::remapStringValue(StringPool* strings) +{ + if (mType == TYPE_ITEM) { + Item& it = mItem; + if (it.parsedValue.dataType == Res_value::TYPE_STRING) { + it.parsedValue.data = strings->mapOriginalPosToNewPos(it.parsedValue.data); + } + } else if (mType == TYPE_BAG) { + const size_t N = mBag.size(); + for (size_t i=0; imapOriginalPosToNewPos(it.parsedValue.data); + } + } + } else { + mPos.error("Error: entry %s is not a single item or a bag.\n", + String8(mName).string()); + return UNKNOWN_ERROR; + } + return NO_ERROR; +} + +ssize_t ResourceTable::Entry::flatten(Bundle* bundle, const sp& data, bool isPublic) +{ + size_t amt = 0; + ResTable_entry header; + memset(&header, 0, sizeof(header)); + header.size = htods(sizeof(header)); + const type ty = this != NULL ? mType : TYPE_ITEM; + if (this != NULL) { + if (ty == TYPE_BAG) { + header.flags |= htods(header.FLAG_COMPLEX); + } + if (isPublic) { + header.flags |= htods(header.FLAG_PUBLIC); + } + header.key.index = htodl(mNameIndex); + } + if (ty != TYPE_BAG) { + status_t err = data->writeData(&header, sizeof(header)); + if (err != NO_ERROR) { + fprintf(stderr, "ERROR: out of memory creating ResTable_entry\n"); + return err; + } + + const Item& it = mItem; + Res_value par; + memset(&par, 0, sizeof(par)); + par.size = htods(it.parsedValue.size); + par.dataType = it.parsedValue.dataType; + par.res0 = it.parsedValue.res0; + par.data = htodl(it.parsedValue.data); + #if 0 + printf("Writing item (%s): type=%d, data=0x%x, res0=0x%x\n", + String8(mName).string(), it.parsedValue.dataType, + it.parsedValue.data, par.res0); + #endif + err = data->writeData(&par, it.parsedValue.size); + if (err != NO_ERROR) { + fprintf(stderr, "ERROR: out of memory creating Res_value\n"); + return err; + } + amt += it.parsedValue.size; + } else { + size_t N = mBag.size(); + size_t i; + // Create correct ordering of items. + KeyedVector items; + for (i=0; iwriteData(&mapHeader, sizeof(mapHeader)); + if (err != NO_ERROR) { + fprintf(stderr, "ERROR: out of memory creating ResTable_entry\n"); + return err; + } + + for (i=0; iwriteData(&map, sizeof(map)); + if (err != NO_ERROR) { + fprintf(stderr, "ERROR: out of memory creating Res_value\n"); + return err; + } + amt += sizeof(map); + } + } + return amt; +} + +void ResourceTable::ConfigList::appendComment(const String16& comment, + bool onlyIfEmpty) +{ + if (comment.size() <= 0) { + return; + } + if (onlyIfEmpty && mComment.size() > 0) { + return; + } + if (mComment.size() > 0) { + mComment.append(String16("\n")); + } + mComment.append(comment); +} + +void ResourceTable::ConfigList::appendTypeComment(const String16& comment) +{ + if (comment.size() <= 0) { + return; + } + if (mTypeComment.size() > 0) { + mTypeComment.append(String16("\n")); + } + mTypeComment.append(comment); +} + +status_t ResourceTable::Type::addPublic(const SourcePos& sourcePos, + const String16& name, + const uint32_t ident) +{ + #if 0 + int32_t entryIdx = Res_GETENTRY(ident); + if (entryIdx < 0) { + sourcePos.error("Public resource %s/%s has an invalid 0 identifier (0x%08x).\n", + String8(mName).string(), String8(name).string(), ident); + return UNKNOWN_ERROR; + } + #endif + + int32_t typeIdx = Res_GETTYPE(ident); + if (typeIdx >= 0) { + typeIdx++; + if (mPublicIndex > 0 && mPublicIndex != typeIdx) { + sourcePos.error("Public resource %s/%s has conflicting type codes for its" + " public identifiers (0x%x vs 0x%x).\n", + String8(mName).string(), String8(name).string(), + mPublicIndex, typeIdx); + return UNKNOWN_ERROR; + } + mPublicIndex = typeIdx; + } + + if (mFirstPublicSourcePos == NULL) { + mFirstPublicSourcePos = new SourcePos(sourcePos); + } + + if (mPublic.indexOfKey(name) < 0) { + mPublic.add(name, Public(sourcePos, String16(), ident)); + } else { + Public& p = mPublic.editValueFor(name); + if (p.ident != ident) { + sourcePos.error("Public resource %s/%s has conflicting public identifiers" + " (0x%08x vs 0x%08x).\n" + "%s:%d: Originally defined here.\n", + String8(mName).string(), String8(name).string(), p.ident, ident, + p.sourcePos.file.string(), p.sourcePos.line); + return UNKNOWN_ERROR; + } + } + + return NO_ERROR; +} + +void ResourceTable::Type::canAddEntry(const String16& name) +{ + mCanAddEntries.add(name); +} + +sp ResourceTable::Type::getEntry(const String16& entry, + const SourcePos& sourcePos, + const ResTable_config* config, + bool doSetIndex, + bool overlay, + bool autoAddOverlay) +{ + int pos = -1; + sp c = mConfigs.valueFor(entry); + if (c == NULL) { + if (overlay && !autoAddOverlay && mCanAddEntries.indexOf(entry) < 0) { + sourcePos.error("Resource at %s appears in overlay but not" + " in the base package; use to add.\n", + String8(entry).string()); + return NULL; + } + c = new ConfigList(entry, sourcePos); + mConfigs.add(entry, c); + pos = (int)mOrderedConfigs.size(); + mOrderedConfigs.add(c); + if (doSetIndex) { + c->setEntryIndex(pos); + } + } + + ConfigDescription cdesc; + if (config) cdesc = *config; + + sp e = c->getEntries().valueFor(cdesc); + if (e == NULL) { + if (config != NULL) { + NOISY(printf("New entry at %s:%d: imsi:%d/%d lang:%c%c cnt:%c%c " + "orien:%d touch:%d density:%d key:%d inp:%d nav:%d sz:%dx%d " + "sw%ddp w%ddp h%ddp dir:%d\n", + sourcePos.file.string(), sourcePos.line, + config->mcc, config->mnc, + config->language[0] ? config->language[0] : '-', + config->language[1] ? config->language[1] : '-', + config->country[0] ? config->country[0] : '-', + config->country[1] ? config->country[1] : '-', + config->orientation, + config->touchscreen, + config->density, + config->keyboard, + config->inputFlags, + config->navigation, + config->screenWidth, + config->screenHeight, + config->smallestScreenWidthDp, + config->screenWidthDp, + config->screenHeightDp, + config->layoutDirection)); + } else { + NOISY(printf("New entry at %s:%d: NULL config\n", + sourcePos.file.string(), sourcePos.line)); + } + e = new Entry(entry, sourcePos); + c->addEntry(cdesc, e); + /* + if (doSetIndex) { + if (pos < 0) { + for (pos=0; pos<(int)mOrderedConfigs.size(); pos++) { + if (mOrderedConfigs[pos] == c) { + break; + } + } + if (pos >= (int)mOrderedConfigs.size()) { + sourcePos.error("Internal error: config not found in mOrderedConfigs when adding entry"); + return NULL; + } + } + e->setEntryIndex(pos); + } + */ + } + + mUniqueConfigs.add(cdesc); + + return e; +} + +status_t ResourceTable::Type::applyPublicEntryOrder() +{ + size_t N = mOrderedConfigs.size(); + Vector > origOrder(mOrderedConfigs); + bool hasError = false; + + size_t i; + for (i=0; i e = origOrder.itemAt(i); + //printf("#%d: \"%s\"\n", i, String8(e->getName()).string()); + if (e->getName() == name) { + if (idx >= (int32_t)mOrderedConfigs.size()) { + p.sourcePos.error("Public entry identifier 0x%x entry index " + "is larger than available symbols (index %d, total symbols %d).\n", + p.ident, idx, mOrderedConfigs.size()); + hasError = true; + } else if (mOrderedConfigs.itemAt(idx) == NULL) { + e->setPublic(true); + e->setPublicSourcePos(p.sourcePos); + mOrderedConfigs.replaceAt(e, idx); + origOrder.removeAt(i); + N--; + found = true; + break; + } else { + sp oe = mOrderedConfigs.itemAt(idx); + + p.sourcePos.error("Multiple entry names declared for public entry" + " identifier 0x%x in type %s (%s vs %s).\n" + "%s:%d: Originally defined here.", + idx+1, String8(mName).string(), + String8(oe->getName()).string(), + String8(name).string(), + oe->getPublicSourcePos().file.string(), + oe->getPublicSourcePos().line); + hasError = true; + } + } + } + + if (!found) { + p.sourcePos.error("Public symbol %s/%s declared here is not defined.", + String8(mName).string(), String8(name).string()); + hasError = true; + } + } + + //printf("Copying back in %d non-public configs, have %d\n", N, origOrder.size()); + + if (N != origOrder.size()) { + printf("Internal error: remaining private symbol count mismatch\n"); + N = origOrder.size(); + } + + j = 0; + for (i=0; i e = origOrder.itemAt(i); + // There will always be enough room for the remaining entries. + while (mOrderedConfigs.itemAt(j) != NULL) { + j++; + } + mOrderedConfigs.replaceAt(e, j); + j++; + } + + return hasError ? UNKNOWN_ERROR : NO_ERROR; +} + +ResourceTable::Package::Package(const String16& name, ssize_t includedId) + : mName(name), mIncludedId(includedId), + mTypeStringsMapping(0xffffffff), + mKeyStringsMapping(0xffffffff) +{ +} + +sp ResourceTable::Package::getType(const String16& type, + const SourcePos& sourcePos, + bool doSetIndex) +{ + sp t = mTypes.valueFor(type); + if (t == NULL) { + t = new Type(type, sourcePos); + mTypes.add(type, t); + mOrderedTypes.add(t); + if (doSetIndex) { + // For some reason the type's index is set to one plus the index + // in the mOrderedTypes list, rather than just the index. + t->setIndex(mOrderedTypes.size()); + } + } + return t; +} + +status_t ResourceTable::Package::setTypeStrings(const sp& data) +{ + mTypeStringsData = data; + status_t err = setStrings(data, &mTypeStrings, &mTypeStringsMapping); + if (err != NO_ERROR) { + fprintf(stderr, "ERROR: Type string data is corrupt!\n"); + } + return err; +} + +status_t ResourceTable::Package::setKeyStrings(const sp& data) +{ + mKeyStringsData = data; + status_t err = setStrings(data, &mKeyStrings, &mKeyStringsMapping); + if (err != NO_ERROR) { + fprintf(stderr, "ERROR: Key string data is corrupt!\n"); + } + return err; +} + +status_t ResourceTable::Package::setStrings(const sp& data, + ResStringPool* strings, + DefaultKeyedVector* mappings) +{ + if (data->getData() == NULL) { + return UNKNOWN_ERROR; + } + + NOISY(aout << "Setting restable string pool: " + << HexDump(data->getData(), data->getSize()) << endl); + + status_t err = strings->setTo(data->getData(), data->getSize()); + if (err == NO_ERROR) { + const size_t N = strings->size(); + for (size_t i=0; iadd(String16(strings->stringAt(i, &len)), i); + } + } + return err; +} + +status_t ResourceTable::Package::applyPublicTypeOrder() +{ + size_t N = mOrderedTypes.size(); + Vector > origOrder(mOrderedTypes); + + size_t i; + for (i=0; i t = origOrder.itemAt(i); + int32_t idx = t->getPublicIndex(); + if (idx > 0) { + idx--; + while (idx >= (int32_t)mOrderedTypes.size()) { + mOrderedTypes.add(); + } + if (mOrderedTypes.itemAt(idx) != NULL) { + sp ot = mOrderedTypes.itemAt(idx); + t->getFirstPublicSourcePos().error("Multiple type names declared for public type" + " identifier 0x%x (%s vs %s).\n" + "%s:%d: Originally defined here.", + idx, String8(ot->getName()).string(), + String8(t->getName()).string(), + ot->getFirstPublicSourcePos().file.string(), + ot->getFirstPublicSourcePos().line); + return UNKNOWN_ERROR; + } + mOrderedTypes.replaceAt(t, idx); + origOrder.removeAt(i); + i--; + N--; + } + } + + size_t j=0; + for (i=0; i t = origOrder.itemAt(i); + // There will always be enough room for the remaining types. + while (mOrderedTypes.itemAt(j) != NULL) { + j++; + } + mOrderedTypes.replaceAt(t, j); + } + + return NO_ERROR; +} + +sp ResourceTable::getPackage(const String16& package) +{ + sp p = mPackages.valueFor(package); + if (p == NULL) { + if (mIsAppPackage) { + if (mHaveAppPackage) { + fprintf(stderr, "Adding multiple application package resources; only one is allowed.\n" + "Use -x to create extended resources.\n"); + return NULL; + } + mHaveAppPackage = true; + p = new Package(package, 127); + } else { + p = new Package(package, mNextPackageId); + } + //printf("*** NEW PACKAGE: \"%s\" id=%d\n", + // String8(package).string(), p->getAssignedId()); + mPackages.add(package, p); + mOrderedPackages.add(p); + mNextPackageId++; + } + return p; +} + +sp ResourceTable::getType(const String16& package, + const String16& type, + const SourcePos& sourcePos, + bool doSetIndex) +{ + sp p = getPackage(package); + if (p == NULL) { + return NULL; + } + return p->getType(type, sourcePos, doSetIndex); +} + +sp ResourceTable::getEntry(const String16& package, + const String16& type, + const String16& name, + const SourcePos& sourcePos, + bool overlay, + const ResTable_config* config, + bool doSetIndex) +{ + sp t = getType(package, type, sourcePos, doSetIndex); + if (t == NULL) { + return NULL; + } + return t->getEntry(name, sourcePos, config, doSetIndex, overlay, mBundle->getAutoAddOverlay()); +} + +sp ResourceTable::getEntry(uint32_t resID, + const ResTable_config* config) const +{ + int pid = Res_GETPACKAGE(resID)+1; + const size_t N = mOrderedPackages.size(); + size_t i; + sp p; + for (i=0; i check = mOrderedPackages[i]; + if (check->getAssignedId() == pid) { + p = check; + break; + } + + } + if (p == NULL) { + fprintf(stderr, "warning: Package not found for resource #%08x\n", resID); + return NULL; + } + + int tid = Res_GETTYPE(resID); + if (tid < 0 || tid >= (int)p->getOrderedTypes().size()) { + fprintf(stderr, "warning: Type not found for resource #%08x\n", resID); + return NULL; + } + sp t = p->getOrderedTypes()[tid]; + + int eid = Res_GETENTRY(resID); + if (eid < 0 || eid >= (int)t->getOrderedConfigs().size()) { + fprintf(stderr, "warning: Entry not found for resource #%08x\n", resID); + return NULL; + } + + sp c = t->getOrderedConfigs()[eid]; + if (c == NULL) { + fprintf(stderr, "warning: Entry not found for resource #%08x\n", resID); + return NULL; + } + + ConfigDescription cdesc; + if (config) cdesc = *config; + sp e = c->getEntries().valueFor(cdesc); + if (c == NULL) { + fprintf(stderr, "warning: Entry configuration not found for resource #%08x\n", resID); + return NULL; + } + + return e; +} + +const ResourceTable::Item* ResourceTable::getItem(uint32_t resID, uint32_t attrID) const +{ + sp e = getEntry(resID); + if (e == NULL) { + return NULL; + } + + const size_t N = e->getBag().size(); + for (size_t i=0; igetBag().valueAt(i); + if (it.bagKeyId == 0) { + fprintf(stderr, "warning: ID not yet assigned to '%s' in bag '%s'\n", + String8(e->getName()).string(), + String8(e->getBag().keyAt(i)).string()); + } + if (it.bagKeyId == attrID) { + return ⁢ + } + } + + return NULL; +} + +bool ResourceTable::getItemValue( + uint32_t resID, uint32_t attrID, Res_value* outValue) +{ + const Item* item = getItem(resID, attrID); + + bool res = false; + if (item != NULL) { + if (item->evaluating) { + sp e = getEntry(resID); + const size_t N = e->getBag().size(); + size_t i; + for (i=0; igetBag().valueAt(i) == item) { + break; + } + } + fprintf(stderr, "warning: Circular reference detected in key '%s' of bag '%s'\n", + String8(e->getName()).string(), + String8(e->getBag().keyAt(i)).string()); + return false; + } + item->evaluating = true; + res = stringToValue(outValue, NULL, item->value, false, false, item->bagKeyId); + NOISY( + if (res) { + printf("getItemValue of #%08x[#%08x] (%s): type=#%08x, data=#%08x\n", + resID, attrID, String8(getEntry(resID)->getName()).string(), + outValue->dataType, outValue->data); + } else { + printf("getItemValue of #%08x[#%08x]: failed\n", + resID, attrID); + } + ); + item->evaluating = false; + } + return res; +} diff --git a/tools/aapt/ResourceTable.h b/tools/aapt/ResourceTable.h new file mode 100644 index 0000000000000..a3e066690fba4 --- /dev/null +++ b/tools/aapt/ResourceTable.h @@ -0,0 +1,557 @@ +// +// Copyright 2006 The Android Open Source Project +// +// Build resource files from raw assets. +// + +#ifndef RESOURCE_TABLE_H +#define RESOURCE_TABLE_H + +#include "StringPool.h" +#include "SourcePos.h" + +#include +#include + +using namespace std; + +class XMLNode; +class ResourceTable; + +enum { + XML_COMPILE_STRIP_COMMENTS = 1<<0, + XML_COMPILE_ASSIGN_ATTRIBUTE_IDS = 1<<1, + XML_COMPILE_COMPACT_WHITESPACE = 1<<2, + XML_COMPILE_STRIP_WHITESPACE = 1<<3, + XML_COMPILE_STRIP_RAW_VALUES = 1<<4, + XML_COMPILE_UTF8 = 1<<5, + + XML_COMPILE_STANDARD_RESOURCE = + XML_COMPILE_STRIP_COMMENTS | XML_COMPILE_ASSIGN_ATTRIBUTE_IDS + | XML_COMPILE_STRIP_WHITESPACE | XML_COMPILE_STRIP_RAW_VALUES +}; + +status_t compileXmlFile(const sp& assets, + const sp& target, + ResourceTable* table, + int options = XML_COMPILE_STANDARD_RESOURCE); + +status_t compileXmlFile(const sp& assets, + const sp& target, + const sp& outTarget, + ResourceTable* table, + int options = XML_COMPILE_STANDARD_RESOURCE); + +status_t compileXmlFile(const sp& assets, + const sp& xmlTree, + const sp& target, + ResourceTable* table, + int options = XML_COMPILE_STANDARD_RESOURCE); + +status_t compileResourceFile(Bundle* bundle, + const sp& assets, + const sp& in, + const ResTable_config& defParams, + const bool overwrite, + ResourceTable* outTable); + +struct AccessorCookie +{ + SourcePos sourcePos; + String8 attr; + String8 value; + + AccessorCookie(const SourcePos&p, const String8& a, const String8& v) + :sourcePos(p), + attr(a), + value(v) + { + } +}; + +class ResourceTable : public ResTable::Accessor +{ +public: + class Package; + class Type; + class Entry; + + struct ConfigDescription : public ResTable_config { + ConfigDescription() { + memset(this, 0, sizeof(*this)); + size = sizeof(ResTable_config); + } + ConfigDescription(const ResTable_config&o) { + *static_cast(this) = o; + size = sizeof(ResTable_config); + } + ConfigDescription(const ConfigDescription&o) { + *static_cast(this) = o; + } + + ConfigDescription& operator=(const ResTable_config& o) { + *static_cast(this) = o; + size = sizeof(ResTable_config); + return *this; + } + ConfigDescription& operator=(const ConfigDescription& o) { + *static_cast(this) = o; + return *this; + } + + inline bool operator<(const ConfigDescription& o) const { return compare(o) < 0; } + inline bool operator<=(const ConfigDescription& o) const { return compare(o) <= 0; } + inline bool operator==(const ConfigDescription& o) const { return compare(o) == 0; } + inline bool operator!=(const ConfigDescription& o) const { return compare(o) != 0; } + inline bool operator>=(const ConfigDescription& o) const { return compare(o) >= 0; } + inline bool operator>(const ConfigDescription& o) const { return compare(o) > 0; } + }; + + ResourceTable(Bundle* bundle, const String16& assetsPackage); + + status_t addIncludedResources(Bundle* bundle, const sp& assets); + + status_t addPublic(const SourcePos& pos, + const String16& package, + const String16& type, + const String16& name, + const uint32_t ident); + + status_t addEntry(const SourcePos& pos, + const String16& package, + const String16& type, + const String16& name, + const String16& value, + const Vector* style = NULL, + const ResTable_config* params = NULL, + const bool doSetIndex = false, + const int32_t format = ResTable_map::TYPE_ANY, + const bool overwrite = false); + + status_t startBag(const SourcePos& pos, + const String16& package, + const String16& type, + const String16& name, + const String16& bagParent, + const ResTable_config* params = NULL, + bool overlay = false, + bool replace = false, + bool isId = false); + + status_t addBag(const SourcePos& pos, + const String16& package, + const String16& type, + const String16& name, + const String16& bagParent, + const String16& bagKey, + const String16& value, + const Vector* style = NULL, + const ResTable_config* params = NULL, + bool replace = false, + bool isId = false, + const int32_t format = ResTable_map::TYPE_ANY); + + bool hasBagOrEntry(const String16& package, + const String16& type, + const String16& name) const; + + bool hasBagOrEntry(const String16& package, + const String16& type, + const String16& name, + const ResTable_config& config) const; + + bool hasBagOrEntry(const String16& ref, + const String16* defType = NULL, + const String16* defPackage = NULL); + + bool appendComment(const String16& package, + const String16& type, + const String16& name, + const String16& comment, + bool onlyIfEmpty = false); + + bool appendTypeComment(const String16& package, + const String16& type, + const String16& name, + const String16& comment); + + void canAddEntry(const SourcePos& pos, + const String16& package, const String16& type, const String16& name); + + size_t size() const; + size_t numLocalResources() const; + bool hasResources() const; + + sp flatten(Bundle*); + + static inline uint32_t makeResId(uint32_t packageId, + uint32_t typeId, + uint32_t nameId) + { + return nameId | (typeId<<16) | (packageId<<24); + } + + static inline uint32_t getResId(const sp& p, + const sp& t, + uint32_t nameId); + + uint32_t getResId(const String16& package, + const String16& type, + const String16& name, + bool onlyPublic = true) const; + + uint32_t getResId(const String16& ref, + const String16* defType = NULL, + const String16* defPackage = NULL, + const char** outErrorMsg = NULL, + bool onlyPublic = true) const; + + static bool isValidResourceName(const String16& s); + + bool stringToValue(Res_value* outValue, StringPool* pool, + const String16& str, + bool preserveSpaces, bool coerceType, + uint32_t attrID, + const Vector* style = NULL, + String16* outStr = NULL, void* accessorCookie = NULL, + uint32_t attrType = ResTable_map::TYPE_ANY, + const String8* configTypeName = NULL, + const ConfigDescription* config = NULL); + + status_t assignResourceIds(); + status_t addSymbols(const sp& outSymbols = NULL); + void addLocalization(const String16& name, const String8& locale); + status_t validateLocalizations(void); + + status_t flatten(Bundle*, const sp& dest); + + void writePublicDefinitions(const String16& package, FILE* fp); + + virtual uint32_t getCustomResource(const String16& package, + const String16& type, + const String16& name) const; + virtual uint32_t getCustomResourceWithCreation(const String16& package, + const String16& type, + const String16& name, + const bool createIfNeeded); + virtual uint32_t getRemappedPackage(uint32_t origPackage) const; + virtual bool getAttributeType(uint32_t attrID, uint32_t* outType); + virtual bool getAttributeMin(uint32_t attrID, uint32_t* outMin); + virtual bool getAttributeMax(uint32_t attrID, uint32_t* outMax); + virtual bool getAttributeKeys(uint32_t attrID, Vector* outKeys); + virtual bool getAttributeEnum(uint32_t attrID, + const char16_t* name, size_t nameLen, + Res_value* outValue); + virtual bool getAttributeFlags(uint32_t attrID, + const char16_t* name, size_t nameLen, + Res_value* outValue); + virtual uint32_t getAttributeL10N(uint32_t attrID); + + virtual bool getLocalizationSetting(); + virtual void reportError(void* accessorCookie, const char* fmt, ...); + + void setCurrentXmlPos(const SourcePos& pos) { mCurrentXmlPos = pos; } + + class Item { + public: + Item() : isId(false), format(ResTable_map::TYPE_ANY), bagKeyId(0), evaluating(false) + { memset(&parsedValue, 0, sizeof(parsedValue)); } + Item(const SourcePos& pos, + bool _isId, + const String16& _value, + const Vector* _style = NULL, + int32_t format = ResTable_map::TYPE_ANY); + Item(const Item& o) : sourcePos(o.sourcePos), + isId(o.isId), value(o.value), style(o.style), + format(o.format), bagKeyId(o.bagKeyId), evaluating(false) { + memset(&parsedValue, 0, sizeof(parsedValue)); + } + ~Item() { } + + Item& operator=(const Item& o) { + sourcePos = o.sourcePos; + isId = o.isId; + value = o.value; + style = o.style; + format = o.format; + bagKeyId = o.bagKeyId; + parsedValue = o.parsedValue; + return *this; + } + + SourcePos sourcePos; + mutable bool isId; + String16 value; + Vector style; + int32_t format; + uint32_t bagKeyId; + mutable bool evaluating; + Res_value parsedValue; + }; + + class Entry : public RefBase { + public: + Entry(const String16& name, const SourcePos& pos) + : mName(name), mType(TYPE_UNKNOWN), + mItemFormat(ResTable_map::TYPE_ANY), mNameIndex(-1), mPos(pos) + { } + virtual ~Entry() { } + + enum type { + TYPE_UNKNOWN = 0, + TYPE_ITEM, + TYPE_BAG + }; + + String16 getName() const { return mName; } + type getType() const { return mType; } + + void setParent(const String16& parent) { mParent = parent; } + String16 getParent() const { return mParent; } + + status_t makeItABag(const SourcePos& sourcePos); + + status_t emptyBag(const SourcePos& sourcePos); + + status_t setItem(const SourcePos& pos, + const String16& value, + const Vector* style = NULL, + int32_t format = ResTable_map::TYPE_ANY, + const bool overwrite = false); + + status_t addToBag(const SourcePos& pos, + const String16& key, const String16& value, + const Vector* style = NULL, + bool replace=false, bool isId = false, + int32_t format = ResTable_map::TYPE_ANY); + + // Index of the entry's name string in the key pool. + int32_t getNameIndex() const { return mNameIndex; } + void setNameIndex(int32_t index) { mNameIndex = index; } + + const Item* getItem() const { return mType == TYPE_ITEM ? &mItem : NULL; } + const KeyedVector& getBag() const { return mBag; } + + status_t generateAttributes(ResourceTable* table, + const String16& package); + + status_t assignResourceIds(ResourceTable* table, + const String16& package); + + status_t prepareFlatten(StringPool* strings, ResourceTable* table, + const String8* configTypeName, const ConfigDescription* config); + + status_t remapStringValue(StringPool* strings); + + ssize_t flatten(Bundle*, const sp& data, bool isPublic); + + const SourcePos& getPos() const { return mPos; } + + private: + String16 mName; + String16 mParent; + type mType; + Item mItem; + int32_t mItemFormat; + KeyedVector mBag; + int32_t mNameIndex; + uint32_t mParentId; + SourcePos mPos; + }; + + class ConfigList : public RefBase { + public: + ConfigList(const String16& name, const SourcePos& pos) + : mName(name), mPos(pos), mPublic(false), mEntryIndex(-1) { } + virtual ~ConfigList() { } + + String16 getName() const { return mName; } + const SourcePos& getPos() const { return mPos; } + + void appendComment(const String16& comment, bool onlyIfEmpty = false); + const String16& getComment() const { return mComment; } + + void appendTypeComment(const String16& comment); + const String16& getTypeComment() const { return mTypeComment; } + + // Index of this entry in its Type. + int32_t getEntryIndex() const { return mEntryIndex; } + void setEntryIndex(int32_t index) { mEntryIndex = index; } + + void setPublic(bool pub) { mPublic = pub; } + bool getPublic() const { return mPublic; } + void setPublicSourcePos(const SourcePos& pos) { mPublicSourcePos = pos; } + const SourcePos& getPublicSourcePos() { return mPublicSourcePos; } + + void addEntry(const ResTable_config& config, const sp& entry) { + mEntries.add(config, entry); + } + + const DefaultKeyedVector >& getEntries() const { return mEntries; } + private: + const String16 mName; + const SourcePos mPos; + String16 mComment; + String16 mTypeComment; + bool mPublic; + SourcePos mPublicSourcePos; + int32_t mEntryIndex; + DefaultKeyedVector > mEntries; + }; + + class Public { + public: + Public() : sourcePos(), ident(0) { } + Public(const SourcePos& pos, + const String16& _comment, + uint32_t _ident) + : sourcePos(pos), + comment(_comment), ident(_ident) { } + Public(const Public& o) : sourcePos(o.sourcePos), + comment(o.comment), ident(o.ident) { } + ~Public() { } + + Public& operator=(const Public& o) { + sourcePos = o.sourcePos; + comment = o.comment; + ident = o.ident; + return *this; + } + + SourcePos sourcePos; + String16 comment; + uint32_t ident; + }; + + class Type : public RefBase { + public: + Type(const String16& name, const SourcePos& pos) + : mName(name), mFirstPublicSourcePos(NULL), mPublicIndex(-1), mIndex(-1), mPos(pos) + { } + virtual ~Type() { delete mFirstPublicSourcePos; } + + status_t addPublic(const SourcePos& pos, + const String16& name, + const uint32_t ident); + + void canAddEntry(const String16& name); + + String16 getName() const { return mName; } + sp getEntry(const String16& entry, + const SourcePos& pos, + const ResTable_config* config = NULL, + bool doSetIndex = false, + bool overlay = false, + bool autoAddOverlay = false); + + const SourcePos& getFirstPublicSourcePos() const { return *mFirstPublicSourcePos; } + + int32_t getPublicIndex() const { return mPublicIndex; } + + int32_t getIndex() const { return mIndex; } + void setIndex(int32_t index) { mIndex = index; } + + status_t applyPublicEntryOrder(); + + const SortedVector& getUniqueConfigs() const { return mUniqueConfigs; } + + const DefaultKeyedVector >& getConfigs() const { return mConfigs; } + const Vector >& getOrderedConfigs() const { return mOrderedConfigs; } + + const SortedVector& getCanAddEntries() const { return mCanAddEntries; } + + const SourcePos& getPos() const { return mPos; } + private: + String16 mName; + SourcePos* mFirstPublicSourcePos; + DefaultKeyedVector mPublic; + SortedVector mUniqueConfigs; + DefaultKeyedVector > mConfigs; + Vector > mOrderedConfigs; + SortedVector mCanAddEntries; + int32_t mPublicIndex; + int32_t mIndex; + SourcePos mPos; + }; + + class Package : public RefBase { + public: + Package(const String16& name, ssize_t includedId=-1); + virtual ~Package() { } + + String16 getName() const { return mName; } + sp getType(const String16& type, + const SourcePos& pos, + bool doSetIndex = false); + + ssize_t getAssignedId() const { return mIncludedId; } + + const ResStringPool& getTypeStrings() const { return mTypeStrings; } + uint32_t indexOfTypeString(const String16& s) const { return mTypeStringsMapping.valueFor(s); } + const sp getTypeStringsData() const { return mTypeStringsData; } + status_t setTypeStrings(const sp& data); + + const ResStringPool& getKeyStrings() const { return mKeyStrings; } + uint32_t indexOfKeyString(const String16& s) const { return mKeyStringsMapping.valueFor(s); } + const sp getKeyStringsData() const { return mKeyStringsData; } + status_t setKeyStrings(const sp& data); + + status_t applyPublicTypeOrder(); + + const DefaultKeyedVector >& getTypes() const { return mTypes; } + const Vector >& getOrderedTypes() const { return mOrderedTypes; } + + private: + status_t setStrings(const sp& data, + ResStringPool* strings, + DefaultKeyedVector* mappings); + + const String16 mName; + const ssize_t mIncludedId; + DefaultKeyedVector > mTypes; + Vector > mOrderedTypes; + sp mTypeStringsData; + sp mKeyStringsData; + ResStringPool mTypeStrings; + ResStringPool mKeyStrings; + DefaultKeyedVector mTypeStringsMapping; + DefaultKeyedVector mKeyStringsMapping; + }; + +private: + void writePublicDefinitions(const String16& package, FILE* fp, bool pub); + sp getPackage(const String16& package); + sp getType(const String16& package, + const String16& type, + const SourcePos& pos, + bool doSetIndex = false); + sp getEntry(const String16& package, + const String16& type, + const String16& name, + const SourcePos& pos, + bool overlay, + const ResTable_config* config = NULL, + bool doSetIndex = false); + sp getEntry(uint32_t resID, + const ResTable_config* config = NULL) const; + const Item* getItem(uint32_t resID, uint32_t attrID) const; + bool getItemValue(uint32_t resID, uint32_t attrID, + Res_value* outValue); + + + String16 mAssetsPackage; + sp mAssets; + DefaultKeyedVector > mPackages; + Vector > mOrderedPackages; + uint32_t mNextPackageId; + bool mHaveAppPackage; + bool mIsAppPackage; + size_t mNumLocal; + SourcePos mCurrentXmlPos; + Bundle* mBundle; + + // key = string resource name, value = set of locales in which that name is defined + map > mLocalizations; +}; + +#endif diff --git a/tools/aapt/SourcePos.cpp b/tools/aapt/SourcePos.cpp new file mode 100644 index 0000000000000..e2a921c060c55 --- /dev/null +++ b/tools/aapt/SourcePos.cpp @@ -0,0 +1,171 @@ +#include "SourcePos.h" + +#include +#include + +using namespace std; + + +// ErrorPos +// ============================================================================= +struct ErrorPos +{ + String8 file; + int line; + String8 error; + bool fatal; + + ErrorPos(); + ErrorPos(const ErrorPos& that); + ErrorPos(const String8& file, int line, const String8& error, bool fatal); + ~ErrorPos(); + bool operator<(const ErrorPos& rhs) const; + bool operator==(const ErrorPos& rhs) const; + ErrorPos& operator=(const ErrorPos& rhs); + + void print(FILE* to) const; +}; + +static vector g_errors; + +ErrorPos::ErrorPos() + :line(-1), fatal(false) +{ +} + +ErrorPos::ErrorPos(const ErrorPos& that) + :file(that.file), + line(that.line), + error(that.error), + fatal(that.fatal) +{ +} + +ErrorPos::ErrorPos(const String8& f, int l, const String8& e, bool fat) + :file(f), + line(l), + error(e), + fatal(fat) +{ +} + +ErrorPos::~ErrorPos() +{ +} + +bool +ErrorPos::operator<(const ErrorPos& rhs) const +{ + if (this->file < rhs.file) return true; + if (this->file == rhs.file) { + if (this->line < rhs.line) return true; + if (this->line == rhs.line) { + if (this->error < rhs.error) return true; + } + } + return false; +} + +bool +ErrorPos::operator==(const ErrorPos& rhs) const +{ + return this->file == rhs.file + && this->line == rhs.line + && this->error == rhs.error; +} + +ErrorPos& +ErrorPos::operator=(const ErrorPos& rhs) +{ + this->file = rhs.file; + this->line = rhs.line; + this->error = rhs.error; + return *this; +} + +void +ErrorPos::print(FILE* to) const +{ + const char* type = fatal ? "error:" : "warning:"; + + if (this->line >= 0) { + fprintf(to, "%s:%d: %s %s\n", this->file.string(), this->line, type, this->error.string()); + } else { + fprintf(to, "%s: %s %s\n", this->file.string(), type, this->error.string()); + } +} + +// SourcePos +// ============================================================================= +SourcePos::SourcePos(const String8& f, int l) + : file(f), line(l) +{ +} + +SourcePos::SourcePos(const SourcePos& that) + : file(that.file), line(that.line) +{ +} + +SourcePos::SourcePos() + : file("???", 0), line(-1) +{ +} + +SourcePos::~SourcePos() +{ +} + +int +SourcePos::error(const char* fmt, ...) const +{ + int retval=0; + char buf[1024]; + va_list ap; + va_start(ap, fmt); + retval = vsnprintf(buf, sizeof(buf), fmt, ap); + va_end(ap); + char* p = buf + retval - 1; + while (p > buf && *p == '\n') { + *p = '\0'; + p--; + } + g_errors.push_back(ErrorPos(this->file, this->line, String8(buf), true)); + return retval; +} + +int +SourcePos::warning(const char* fmt, ...) const +{ + int retval=0; + char buf[1024]; + va_list ap; + va_start(ap, fmt); + retval = vsnprintf(buf, sizeof(buf), fmt, ap); + va_end(ap); + char* p = buf + retval - 1; + while (p > buf && *p == '\n') { + *p = '\0'; + p--; + } + ErrorPos(this->file, this->line, String8(buf), false).print(stderr); + return retval; +} + +bool +SourcePos::hasErrors() +{ + return g_errors.size() > 0; +} + +void +SourcePos::printErrors(FILE* to) +{ + vector::const_iterator it; + for (it=g_errors.begin(); it!=g_errors.end(); it++) { + it->print(to); + } +} + + + diff --git a/tools/aapt/SourcePos.h b/tools/aapt/SourcePos.h new file mode 100644 index 0000000000000..33f72a9c1e1cf --- /dev/null +++ b/tools/aapt/SourcePos.h @@ -0,0 +1,28 @@ +#ifndef SOURCEPOS_H +#define SOURCEPOS_H + +#include +#include + +using namespace android; + +class SourcePos +{ +public: + String8 file; + int line; + + SourcePos(const String8& f, int l); + SourcePos(const SourcePos& that); + SourcePos(); + ~SourcePos(); + + int error(const char* fmt, ...) const; + int warning(const char* fmt, ...) const; + + static bool hasErrors(); + static void printErrors(FILE* to); +}; + + +#endif // SOURCEPOS_H diff --git a/tools/aapt/StringPool.cpp b/tools/aapt/StringPool.cpp new file mode 100644 index 0000000000000..158b39196cb33 --- /dev/null +++ b/tools/aapt/StringPool.cpp @@ -0,0 +1,574 @@ +// +// Copyright 2006 The Android Open Source Project +// +// Build resource files from raw assets. +// + +#include "StringPool.h" +#include "ResourceTable.h" + +#include +#include +#include "qsort_r_compat.h" + +#if HAVE_PRINTF_ZD +# define ZD "%zd" +# define ZD_TYPE ssize_t +#else +# define ZD "%ld" +# define ZD_TYPE long +#endif + +#define NOISY(x) //x + +void strcpy16_htod(uint16_t* dst, const uint16_t* src) +{ + while (*src) { + char16_t s = htods(*src); + *dst++ = s; + src++; + } + *dst = 0; +} + +void printStringPool(const ResStringPool* pool) +{ + SortedVector uniqueStrings; + const size_t N = pool->size(); + for (size_t i=0; iisUTF8()) { + uniqueStrings.add(pool->string8At(i, &len)); + } else { + uniqueStrings.add(pool->stringAt(i, &len)); + } + } + + printf("String pool of " ZD " unique %s %s strings, " ZD " entries and " + ZD " styles using " ZD " bytes:\n", + (ZD_TYPE)uniqueStrings.size(), pool->isUTF8() ? "UTF-8" : "UTF-16", + pool->isSorted() ? "sorted" : "non-sorted", + (ZD_TYPE)N, (ZD_TYPE)pool->styleCount(), (ZD_TYPE)pool->bytes()); + + const size_t NS = pool->size(); + for (size_t s=0; sstring8ObjectAt(s); + printf("String #" ZD ": %s\n", (ZD_TYPE) s, str.string()); + } +} + +String8 StringPool::entry::makeConfigsString() const { + String8 configStr(configTypeName); + if (configStr.size() > 0) configStr.append(" "); + if (configs.size() > 0) { + for (size_t j=0; j 0) configStr.append(", "); + configStr.append(configs[j].toString()); + } + } else { + configStr = "(none)"; + } + return configStr; +} + +int StringPool::entry::compare(const entry& o) const { + // Strings with styles go first, to reduce the size of the styles array. + // We don't care about the relative order of these strings. + if (hasStyles) { + return o.hasStyles ? 0 : -1; + } + if (o.hasStyles) { + return 1; + } + + // Sort unstyled strings by type, then by logical configuration. + int comp = configTypeName.compare(o.configTypeName); + if (comp != 0) { + return comp; + } + const size_t LHN = configs.size(); + const size_t RHN = o.configs.size(); + size_t i=0; + while (i < LHN && i < RHN) { + comp = configs[i].compareLogical(o.configs[i]); + if (comp != 0) { + return comp; + } + i++; + } + if (LHN < RHN) return -1; + else if (LHN > RHN) return 1; + return 0; +} + +StringPool::StringPool(bool utf8) : + mUTF8(utf8), mValues(-1) +{ +} + +ssize_t StringPool::add(const String16& value, const Vector& spans, + const String8* configTypeName, const ResTable_config* config) +{ + ssize_t res = add(value, false, configTypeName, config); + if (res >= 0) { + addStyleSpans(res, spans); + } + return res; +} + +ssize_t StringPool::add(const String16& value, + bool mergeDuplicates, const String8* configTypeName, const ResTable_config* config) +{ + ssize_t vidx = mValues.indexOfKey(value); + ssize_t pos = vidx >= 0 ? mValues.valueAt(vidx) : -1; + ssize_t eidx = pos >= 0 ? mEntryArray.itemAt(pos) : -1; + if (eidx < 0) { + eidx = mEntries.add(entry(value)); + if (eidx < 0) { + fprintf(stderr, "Failure adding string %s\n", String8(value).string()); + return eidx; + } + } + + if (configTypeName != NULL) { + entry& ent = mEntries.editItemAt(eidx); + NOISY(printf("*** adding config type name %s, was %s\n", + configTypeName->string(), ent.configTypeName.string())); + if (ent.configTypeName.size() <= 0) { + ent.configTypeName = *configTypeName; + } else if (ent.configTypeName != *configTypeName) { + ent.configTypeName = " "; + } + } + + if (config != NULL) { + // Add this to the set of configs associated with the string. + entry& ent = mEntries.editItemAt(eidx); + size_t addPos; + for (addPos=0; addPos= 0) { + if (cmp > 0) { + NOISY(printf("*** inserting config: %s\n", config->toString().string())); + ent.configs.insertAt(*config, addPos); + } + break; + } + } + if (addPos >= ent.configs.size()) { + NOISY(printf("*** adding config: %s\n", config->toString().string())); + ent.configs.add(*config); + } + } + + const bool first = vidx < 0; + const bool styled = (pos >= 0 && (size_t)pos < mEntryStyleArray.size()) ? + mEntryStyleArray[pos].spans.size() : 0; + if (first || styled || !mergeDuplicates) { + pos = mEntryArray.add(eidx); + if (first) { + vidx = mValues.add(value, pos); + } + entry& ent = mEntries.editItemAt(eidx); + ent.indices.add(pos); + } + + NOISY(printf("Adding string %s to pool: pos=%d eidx=%d vidx=%d\n", + String8(value).string(), pos, eidx, vidx)); + + return pos; +} + +status_t StringPool::addStyleSpan(size_t idx, const String16& name, + uint32_t start, uint32_t end) +{ + entry_style_span span; + span.name = name; + span.span.firstChar = start; + span.span.lastChar = end; + return addStyleSpan(idx, span); +} + +status_t StringPool::addStyleSpans(size_t idx, const Vector& spans) +{ + const size_t N=spans.size(); + for (size_t i=0; imEntries[pool->mEntryArray[*static_cast(lhs)]]; + const entry& rhe = pool->mEntries[pool->mEntryArray[*static_cast(rhs)]]; + return lhe.compare(rhe); +} + +void StringPool::sortByConfig() +{ + LOG_ALWAYS_FATAL_IF(mOriginalPosToNewPos.size() > 0, "Can't sort string pool after already sorted."); + + const size_t N = mEntryArray.size(); + + // This is a vector that starts out with a 1:1 mapping to entries + // in the array, which we will sort to come up with the desired order. + // At that point it maps from the new position in the array to the + // original position the entry appeared. + Vector newPosToOriginalPos; + newPosToOriginalPos.setCapacity(N); + for (size_t i=0; i < N; i++) { + newPosToOriginalPos.add(i); + } + + // Sort the array. + NOISY(printf("SORTING STRINGS BY CONFIGURATION...\n")); + // Vector::sort uses insertion sort, which is very slow for this data set. + // Use quicksort instead because we don't need a stable sort here. + qsort_r_compat(newPosToOriginalPos.editArray(), N, sizeof(size_t), this, config_sort); + //newPosToOriginalPos.sort(config_sort, this); + NOISY(printf("DONE SORTING STRINGS BY CONFIGURATION.\n")); + + // Create the reverse mapping from the original position in the array + // to the new position where it appears in the sorted array. This is + // so that clients can re-map any positions they had previously stored. + mOriginalPosToNewPos = newPosToOriginalPos; + for (size_t i=0; i entries; + + for (size_t i=0; i newEntries; + Vector newEntryArray; + Vector newEntryStyleArray; + DefaultKeyedVector origOffsetToNewOffset; + + for (size_t i=0; i 0) { + if (oldI < mEntryStyleArray.size()) { + newEntryStyleArray.add(mEntryStyleArray[oldI]); + } else { + newEntryStyleArray.add(entry_style()); + } + } + } + + // Now trim any entries at the end of the new style array that are + // not needed. + for (ssize_t i=newEntryStyleArray.size()-1; i>=0; i--) { + const entry_style& style = newEntryStyleArray[i]; + if (style.spans.size() > 0) { + // That's it. + break; + } + // This one is not needed; remove. + newEntryStyleArray.removeAt(i); + } + + // All done, install the new data structures and upate mValues with + // the new positions. + mEntries = newEntries; + mEntryArray = newEntryArray; + mEntryStyleArray = newEntryStyleArray; + mValues.clear(); + for (size_t i=0; i StringPool::createStringBlock() +{ + sp pool = new AaptFile(String8(), AaptGroupEntry(), + String8()); + status_t err = writeStringBlock(pool); + return err == NO_ERROR ? pool : NULL; +} + +#define ENCODE_LENGTH(str, chrsz, strSize) \ +{ \ + size_t maxMask = 1 << ((chrsz*8)-1); \ + size_t maxSize = maxMask-1; \ + if (strSize > maxSize) { \ + *str++ = maxMask | ((strSize>>(chrsz*8))&maxSize); \ + } \ + *str++ = strSize; \ +} + +status_t StringPool::writeStringBlock(const sp& pool) +{ + // Allow appending. Sorry this is a little wacky. + if (pool->getSize() > 0) { + sp block = createStringBlock(); + if (block == NULL) { + return UNKNOWN_ERROR; + } + ssize_t res = pool->writeData(block->getData(), block->getSize()); + return (res >= 0) ? (status_t)NO_ERROR : res; + } + + // First we need to add all style span names to the string pool. + // We do this now (instead of when the span is added) so that these + // will appear at the end of the pool, not disrupting the order + // our client placed their own strings in it. + + const size_t STYLES = mEntryStyleArray.size(); + size_t i; + + for (i=0; ieditData(preSize) == NULL) { + fprintf(stderr, "ERROR: Out of memory for string pool\n"); + return NO_MEMORY; + } + + const size_t charSize = mUTF8 ? sizeof(uint8_t) : sizeof(char16_t); + + size_t strPos = 0; + for (i=0; i (size_t)(1<<((charSize*8)-1))-1 ? + charSize*2 : charSize; + + String8 encStr; + if (mUTF8) { + encStr = String8(ent.value); + } + + const size_t encSize = mUTF8 ? encStr.size() : 0; + const size_t encLenSize = mUTF8 ? + (encSize > (size_t)(1<<((charSize*8)-1))-1 ? + charSize*2 : charSize) : 0; + + ent.offset = strPos; + + const size_t totalSize = lenSize + encLenSize + + ((mUTF8 ? encSize : strSize)+1)*charSize; + + void* dat = (void*)pool->editData(preSize + strPos + totalSize); + if (dat == NULL) { + fprintf(stderr, "ERROR: Out of memory for string pool\n"); + return NO_MEMORY; + } + dat = (uint8_t*)dat + preSize + strPos; + if (mUTF8) { + uint8_t* strings = (uint8_t*)dat; + + ENCODE_LENGTH(strings, sizeof(uint8_t), strSize) + + ENCODE_LENGTH(strings, sizeof(uint8_t), encSize) + + strncpy((char*)strings, encStr, encSize+1); + } else { + uint16_t* strings = (uint16_t*)dat; + + ENCODE_LENGTH(strings, sizeof(uint16_t), strSize) + + strcpy16_htod(strings, ent.value); + } + + strPos += totalSize; + } + + // Pad ending string position up to a uint32_t boundary. + + if (strPos&0x3) { + size_t padPos = ((strPos+3)&~0x3); + uint8_t* dat = (uint8_t*)pool->editData(preSize + padPos); + if (dat == NULL) { + fprintf(stderr, "ERROR: Out of memory padding string pool\n"); + return NO_MEMORY; + } + memset(dat+preSize+strPos, 0, padPos-strPos); + strPos = padPos; + } + + // Build the pool of style spans. + + size_t styPos = strPos; + for (i=0; ieditData(preSize + styPos + totalSize); + if (dat == NULL) { + fprintf(stderr, "ERROR: Out of memory for string styles\n"); + return NO_MEMORY; + } + ResStringPool_span* span = (ResStringPool_span*)(dat+preSize+styPos); + for (size_t i=0; iname.index = htodl(ent.spans[i].span.name.index); + span->firstChar = htodl(ent.spans[i].span.firstChar); + span->lastChar = htodl(ent.spans[i].span.lastChar); + span++; + } + span->name.index = htodl(ResStringPool_span::END); + + styPos += totalSize; + } + + if (STYLES > 0) { + // Add full terminator at the end (when reading we validate that + // the end of the pool is fully terminated to simplify error + // checking). + size_t extra = sizeof(ResStringPool_span)-sizeof(ResStringPool_ref); + uint8_t* dat = (uint8_t*)pool->editData(preSize + styPos + extra); + if (dat == NULL) { + fprintf(stderr, "ERROR: Out of memory for string styles\n"); + return NO_MEMORY; + } + uint32_t* p = (uint32_t*)(dat+preSize+styPos); + while (extra > 0) { + *p++ = htodl(ResStringPool_span::END); + extra -= sizeof(uint32_t); + } + styPos += extra; + } + + // Write header. + + ResStringPool_header* header = + (ResStringPool_header*)pool->padData(sizeof(uint32_t)); + if (header == NULL) { + fprintf(stderr, "ERROR: Out of memory for string pool\n"); + return NO_MEMORY; + } + memset(header, 0, sizeof(*header)); + header->header.type = htods(RES_STRING_POOL_TYPE); + header->header.headerSize = htods(sizeof(*header)); + header->header.size = htodl(pool->getSize()); + header->stringCount = htodl(ENTRIES); + header->styleCount = htodl(STYLES); + if (mUTF8) { + header->flags |= htodl(ResStringPool_header::UTF8_FLAG); + } + header->stringsStart = htodl(preSize); + header->stylesStart = htodl(STYLES > 0 ? (preSize+strPos) : 0); + + // Write string index array. + + uint32_t* index = (uint32_t*)(header+1); + for (i=0; i* indices = offsetsForString(val); + ssize_t res = indices != NULL && indices->size() > 0 ? indices->itemAt(0) : -1; + NOISY(printf("Offset for string %s: %d (%s)\n", String8(val).string(), res, + res >= 0 ? String8(mEntries[mEntryArray[res]].value).string() : String8())); + return res; +} + +const Vector* StringPool::offsetsForString(const String16& val) const +{ + ssize_t pos = mValues.valueFor(val); + if (pos < 0) { + return NULL; + } + return &mEntries[mEntryArray[pos]].indices; +} diff --git a/tools/aapt/StringPool.h b/tools/aapt/StringPool.h new file mode 100644 index 0000000000000..1b3abfd9b4c61 --- /dev/null +++ b/tools/aapt/StringPool.h @@ -0,0 +1,183 @@ +// +// Copyright 2006 The Android Open Source Project +// +// Build resource files from raw assets. +// + +#ifndef STRING_POOL_H +#define STRING_POOL_H + +#include "Main.h" +#include "AaptAssets.h" + +#include +#include +#include + +#include +#include +#include +#include +#include + +#include + +using namespace android; + +#define PRINT_STRING_METRICS 0 + +void strcpy16_htod(uint16_t* dst, const uint16_t* src); + +void printStringPool(const ResStringPool* pool); + +/** + * The StringPool class is used as an intermediate representation for + * generating the string pool resource data structure that can be parsed with + * ResStringPool in include/utils/ResourceTypes.h. + */ +class StringPool +{ +public: + struct entry { + entry() : offset(0) { } + entry(const String16& _value) : value(_value), offset(0), hasStyles(false) { } + entry(const entry& o) : value(o.value), offset(o.offset), + hasStyles(o.hasStyles), indices(o.indices), + configTypeName(o.configTypeName), configs(o.configs) { } + + String16 value; + size_t offset; + bool hasStyles; + Vector indices; + String8 configTypeName; + Vector configs; + + String8 makeConfigsString() const; + + int compare(const entry& o) const; + + inline bool operator<(const entry& o) const { return compare(o) < 0; } + inline bool operator<=(const entry& o) const { return compare(o) <= 0; } + inline bool operator==(const entry& o) const { return compare(o) == 0; } + inline bool operator!=(const entry& o) const { return compare(o) != 0; } + inline bool operator>=(const entry& o) const { return compare(o) >= 0; } + inline bool operator>(const entry& o) const { return compare(o) > 0; } + }; + + struct entry_style_span { + String16 name; + ResStringPool_span span; + }; + + struct entry_style { + entry_style() : offset(0) { } + + entry_style(const entry_style& o) : offset(o.offset), spans(o.spans) { } + + size_t offset; + Vector spans; + }; + + /** + * If 'utf8' is true, strings will be encoded with UTF-8 instead of + * left in Java's native UTF-16. + */ + explicit StringPool(bool utf8 = false); + + /** + * Add a new string to the pool. If mergeDuplicates is true, thenif + * the string already exists the existing entry for it will be used; + * otherwise, or if the value doesn't already exist, a new entry is + * created. + * + * Returns the index in the entry array of the new string entry. + */ + ssize_t add(const String16& value, bool mergeDuplicates = false, + const String8* configTypeName = NULL, const ResTable_config* config = NULL); + + ssize_t add(const String16& value, const Vector& spans, + const String8* configTypeName = NULL, const ResTable_config* config = NULL); + + status_t addStyleSpan(size_t idx, const String16& name, + uint32_t start, uint32_t end); + status_t addStyleSpans(size_t idx, const Vector& spans); + status_t addStyleSpan(size_t idx, const entry_style_span& span); + + // Sort the contents of the string block by the configuration associated + // with each item. After doing this you can use mapOriginalPosToNewPos() + // to find out the new position given the position originally returned by + // add(). + void sortByConfig(); + + // For use after sortByConfig() to map from the original position of + // a string to its new sorted position. + size_t mapOriginalPosToNewPos(size_t originalPos) const { + return mOriginalPosToNewPos.itemAt(originalPos); + } + + sp createStringBlock(); + + status_t writeStringBlock(const sp& pool); + + /** + * Find out an offset in the pool for a particular string. If the string + * pool is sorted, this can not be called until after createStringBlock() + * or writeStringBlock() has been called + * (which determines the offsets). In the case of a string that appears + * multiple times in the pool, the first offset will be returned. Returns + * -1 if the string does not exist. + */ + ssize_t offsetForString(const String16& val) const; + + /** + * Find all of the offsets in the pool for a particular string. If the + * string pool is sorted, this can not be called until after + * createStringBlock() or writeStringBlock() has been called + * (which determines the offsets). Returns NULL if the string does not exist. + */ + const Vector* offsetsForString(const String16& val) const; + +private: + static int config_sort(void* state, const void* lhs, const void* rhs); + + const bool mUTF8; + + // The following data structures represent the actual structures + // that will be generated for the final string pool. + + // Raw array of unique strings, in some arbitrary order. This is the + // actual strings that appear in the final string pool, in the order + // that they will be written. + Vector mEntries; + // Array of indices into mEntries, in the order they were + // added to the pool. This can be different than mEntries + // if the same string was added multiple times (it will appear + // once in mEntries, with multiple occurrences in this array). + // This is the lookup array that will be written for finding + // the string for each offset/position in the string pool. + Vector mEntryArray; + // Optional style span information associated with each index of + // mEntryArray. + Vector mEntryStyleArray; + + // The following data structures are used for book-keeping as the + // string pool is constructed. + + // Unique set of all the strings added to the pool, mapped to + // the first index of mEntryArray where the value was added. + DefaultKeyedVector mValues; + // This array maps from the original position a string was placed at + // in mEntryArray to its new position after being sorted with sortByConfig(). + Vector mOriginalPosToNewPos; +}; + +// The entry types are trivially movable because all fields they contain, including +// the vectors and strings, are trivially movable. +namespace android { + ANDROID_TRIVIAL_MOVE_TRAIT(StringPool::entry); + ANDROID_TRIVIAL_MOVE_TRAIT(StringPool::entry_style_span); + ANDROID_TRIVIAL_MOVE_TRAIT(StringPool::entry_style); +}; + +#endif + diff --git a/tools/aapt/WorkQueue.cpp b/tools/aapt/WorkQueue.cpp new file mode 100644 index 0000000000000..24a962fcfdb6d --- /dev/null +++ b/tools/aapt/WorkQueue.cpp @@ -0,0 +1,171 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// #define LOG_NDEBUG 0 +#define LOG_TAG "WorkQueue" + +#include +#include "WorkQueue.h" + +namespace android { + +// --- WorkQueue --- + +WorkQueue::WorkQueue(size_t maxThreads, bool canCallJava) : + mMaxThreads(maxThreads), mCanCallJava(canCallJava), + mCanceled(false), mFinished(false), mIdleThreads(0) { +} + +WorkQueue::~WorkQueue() { + if (!cancel()) { + finish(); + } +} + +status_t WorkQueue::schedule(WorkUnit* workUnit, size_t backlog) { + AutoMutex _l(mLock); + + if (mFinished || mCanceled) { + return INVALID_OPERATION; + } + + if (mWorkThreads.size() < mMaxThreads + && mIdleThreads < mWorkUnits.size() + 1) { + sp workThread = new WorkThread(this, mCanCallJava); + status_t status = workThread->run("WorkQueue::WorkThread"); + if (status) { + return status; + } + mWorkThreads.add(workThread); + mIdleThreads += 1; + } else if (backlog) { + while (mWorkUnits.size() >= mMaxThreads * backlog) { + mWorkDequeuedCondition.wait(mLock); + if (mFinished || mCanceled) { + return INVALID_OPERATION; + } + } + } + + mWorkUnits.add(workUnit); + mWorkChangedCondition.broadcast(); + return OK; +} + +status_t WorkQueue::cancel() { + AutoMutex _l(mLock); + + return cancelLocked(); +} + +status_t WorkQueue::cancelLocked() { + if (mFinished) { + return INVALID_OPERATION; + } + + if (!mCanceled) { + mCanceled = true; + + size_t count = mWorkUnits.size(); + for (size_t i = 0; i < count; i++) { + delete mWorkUnits.itemAt(i); + } + mWorkUnits.clear(); + mWorkChangedCondition.broadcast(); + mWorkDequeuedCondition.broadcast(); + } + return OK; +} + +status_t WorkQueue::finish() { + { // acquire lock + AutoMutex _l(mLock); + + if (mFinished) { + return INVALID_OPERATION; + } + + mFinished = true; + mWorkChangedCondition.broadcast(); + } // release lock + + // It is not possible for the list of work threads to change once the mFinished + // flag has been set, so we can access mWorkThreads outside of the lock here. + size_t count = mWorkThreads.size(); + for (size_t i = 0; i < count; i++) { + mWorkThreads.itemAt(i)->join(); + } + mWorkThreads.clear(); + return OK; +} + +bool WorkQueue::threadLoop() { + WorkUnit* workUnit; + { // acquire lock + AutoMutex _l(mLock); + + for (;;) { + if (mCanceled) { + return false; + } + + if (!mWorkUnits.isEmpty()) { + workUnit = mWorkUnits.itemAt(0); + mWorkUnits.removeAt(0); + mIdleThreads -= 1; + mWorkDequeuedCondition.broadcast(); + break; + } + + if (mFinished) { + return false; + } + + mWorkChangedCondition.wait(mLock); + } + } // release lock + + bool shouldContinue = workUnit->run(); + delete workUnit; + + { // acquire lock + AutoMutex _l(mLock); + + mIdleThreads += 1; + + if (!shouldContinue) { + cancelLocked(); + return false; + } + } // release lock + + return true; +} + +// --- WorkQueue::WorkThread --- + +WorkQueue::WorkThread::WorkThread(WorkQueue* workQueue, bool canCallJava) : + Thread(canCallJava), mWorkQueue(workQueue) { +} + +WorkQueue::WorkThread::~WorkThread() { +} + +bool WorkQueue::WorkThread::threadLoop() { + return mWorkQueue->threadLoop(); +} + +}; // namespace android diff --git a/tools/aapt/WorkQueue.h b/tools/aapt/WorkQueue.h new file mode 100644 index 0000000000000..d38f05d034e9a --- /dev/null +++ b/tools/aapt/WorkQueue.h @@ -0,0 +1,119 @@ +/*] + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AAPT_WORK_QUEUE_H +#define AAPT_WORK_QUEUE_H + +#include +#include +#include + +namespace android { + +/* + * A threaded work queue. + * + * This class is designed to make it easy to run a bunch of isolated work + * units in parallel, using up to the specified number of threads. + * To use it, write a loop to post work units to the work queue, then synchronize + * on the queue at the end. + */ +class WorkQueue { +public: + class WorkUnit { + public: + WorkUnit() { } + virtual ~WorkUnit() { } + + /* + * Runs the work unit. + * If the result is 'true' then the work queue continues scheduling work as usual. + * If the result is 'false' then the work queue is canceled. + */ + virtual bool run() = 0; + }; + + /* Creates a work queue with the specified maximum number of work threads. */ + WorkQueue(size_t maxThreads, bool canCallJava = true); + + /* Destroys the work queue. + * Cancels pending work and waits for all remaining threads to complete. + */ + ~WorkQueue(); + + /* Posts a work unit to run later. + * If the work queue has been canceled or is already finished, returns INVALID_OPERATION + * and does not take ownership of the work unit (caller must destroy it itself). + * Otherwise, returns OK and takes ownership of the work unit (the work queue will + * destroy it automatically). + * + * For flow control, this method blocks when the size of the pending work queue is more + * 'backlog' times the number of threads. This condition reduces the rate of entry into + * the pending work queue and prevents it from growing much more rapidly than the + * work threads can actually handle. + * + * If 'backlog' is 0, then no throttle is applied. + */ + status_t schedule(WorkUnit* workUnit, size_t backlog = 2); + + /* Cancels all pending work. + * If the work queue is already finished, returns INVALID_OPERATION. + * If the work queue is already canceled, returns OK and does nothing else. + * Otherwise, returns OK, discards all pending work units and prevents additional + * work units from being scheduled. + * + * Call finish() after cancel() to wait for all remaining work to complete. + */ + status_t cancel(); + + /* Waits for all work to complete. + * If the work queue is already finished, returns INVALID_OPERATION. + * Otherwise, waits for all work to complete and returns OK. + */ + status_t finish(); + +private: + class WorkThread : public Thread { + public: + WorkThread(WorkQueue* workQueue, bool canCallJava); + virtual ~WorkThread(); + + private: + virtual bool threadLoop(); + + WorkQueue* const mWorkQueue; + }; + + status_t cancelLocked(); + bool threadLoop(); // called from each work thread + + const size_t mMaxThreads; + const bool mCanCallJava; + + Mutex mLock; + Condition mWorkChangedCondition; + Condition mWorkDequeuedCondition; + + bool mCanceled; + bool mFinished; + size_t mIdleThreads; + Vector > mWorkThreads; + Vector mWorkUnits; +}; + +}; // namespace android + +#endif // AAPT_WORK_QUEUE_H diff --git a/tools/aapt/XMLNode.cpp b/tools/aapt/XMLNode.cpp new file mode 100644 index 0000000000000..a663ad58fc55a --- /dev/null +++ b/tools/aapt/XMLNode.cpp @@ -0,0 +1,1510 @@ +// +// Copyright 2006 The Android Open Source Project +// +// Build resource files from raw assets. +// + +#include "XMLNode.h" +#include "ResourceTable.h" +#include "pseudolocalize.h" + +#include +#include +#include + +#ifndef HAVE_MS_C_RUNTIME +#define O_BINARY 0 +#endif + +#define NOISY(x) //x +#define NOISY_PARSE(x) //x + +const char* const RESOURCES_ROOT_NAMESPACE = "http://schemas.android.com/apk/res/"; +const char* const RESOURCES_ANDROID_NAMESPACE = "http://schemas.android.com/apk/res/android"; +const char* const RESOURCES_AUTO_PACKAGE_NAMESPACE = "http://schemas.android.com/apk/res-auto"; +const char* const RESOURCES_ROOT_PRV_NAMESPACE = "http://schemas.android.com/apk/prv/res/"; + +const char* const XLIFF_XMLNS = "urn:oasis:names:tc:xliff:document:1.2"; +const char* const ALLOWED_XLIFF_ELEMENTS[] = { + "bpt", + "ept", + "it", + "ph", + "g", + "bx", + "ex", + "x" + }; + +bool isWhitespace(const char16_t* str) +{ + while (*str != 0 && *str < 128 && isspace(*str)) { + str++; + } + return *str == 0; +} + +static const String16 RESOURCES_PREFIX(RESOURCES_ROOT_NAMESPACE); +static const String16 RESOURCES_PREFIX_AUTO_PACKAGE(RESOURCES_AUTO_PACKAGE_NAMESPACE); +static const String16 RESOURCES_PRV_PREFIX(RESOURCES_ROOT_PRV_NAMESPACE); +static const String16 RESOURCES_TOOLS_NAMESPACE("http://schemas.android.com/tools"); + +String16 getNamespaceResourcePackage(String16 appPackage, String16 namespaceUri, bool* outIsPublic) +{ + //printf("%s starts with %s?\n", String8(namespaceUri).string(), + // String8(RESOURCES_PREFIX).string()); + size_t prefixSize; + bool isPublic = true; + if(namespaceUri.startsWith(RESOURCES_PREFIX_AUTO_PACKAGE)) { + NOISY(printf("Using default application package: %s -> %s\n", String8(namespaceUri).string(), String8(appPackage).string())); + isPublic = true; + return appPackage; + } else if (namespaceUri.startsWith(RESOURCES_PREFIX)) { + prefixSize = RESOURCES_PREFIX.size(); + } else if (namespaceUri.startsWith(RESOURCES_PRV_PREFIX)) { + isPublic = false; + prefixSize = RESOURCES_PRV_PREFIX.size(); + } else { + if (outIsPublic) *outIsPublic = isPublic; // = true + return String16(); + } + + //printf("YES!\n"); + //printf("namespace: %s\n", String8(String16(namespaceUri, namespaceUri.size()-prefixSize, prefixSize)).string()); + if (outIsPublic) *outIsPublic = isPublic; + return String16(namespaceUri, namespaceUri.size()-prefixSize, prefixSize); +} + +status_t hasSubstitutionErrors(const char* fileName, + ResXMLTree* inXml, + String16 str16) +{ + const char16_t* str = str16.string(); + const char16_t* p = str; + const char16_t* end = str + str16.size(); + + bool nonpositional = false; + int argCount = 0; + + while (p < end) { + /* + * Look for the start of a Java-style substitution sequence. + */ + if (*p == '%' && p + 1 < end) { + p++; + + // A literal percent sign represented by %% + if (*p == '%') { + p++; + continue; + } + + argCount++; + + if (*p >= '0' && *p <= '9') { + do { + p++; + } while (*p >= '0' && *p <= '9'); + if (*p != '$') { + // This must be a size specification instead of position. + nonpositional = true; + } + } else if (*p == '<') { + // Reusing last argument; bad idea since it can be re-arranged. + nonpositional = true; + p++; + + // Optionally '$' can be specified at the end. + if (p < end && *p == '$') { + p++; + } + } else { + nonpositional = true; + } + + // Ignore flags and widths + while (p < end && (*p == '-' || + *p == '#' || + *p == '+' || + *p == ' ' || + *p == ',' || + *p == '(' || + (*p >= '0' && *p <= '9'))) { + p++; + } + + /* + * This is a shortcut to detect strings that are going to Time.format() + * instead of String.format() + * + * Comparison of String.format() and Time.format() args: + * + * String: ABC E GH ST X abcdefgh nost x + * Time: DEFGHKMS W Za d hkm s w yz + * + * Therefore we know it's definitely Time if we have: + * DFKMWZkmwyz + */ + if (p < end) { + switch (*p) { + case 'D': + case 'F': + case 'K': + case 'M': + case 'W': + case 'Z': + case 'k': + case 'm': + case 'w': + case 'y': + case 'z': + return NO_ERROR; + } + } + } + + p++; + } + + /* + * If we have more than one substitution in this string and any of them + * are not in positional form, give the user an error. + */ + if (argCount > 1 && nonpositional) { + SourcePos(String8(fileName), inXml->getLineNumber()).error( + "Multiple substitutions specified in non-positional format; " + "did you mean to add the formatted=\"false\" attribute?\n"); + return NOT_ENOUGH_DATA; + } + + return NO_ERROR; +} + +status_t parseStyledString(Bundle* bundle, + const char* fileName, + ResXMLTree* inXml, + const String16& endTag, + String16* outString, + Vector* outSpans, + bool isFormatted, + bool pseudolocalize) +{ + Vector spanStack; + String16 curString; + String16 rawString; + const char* errorMsg; + int xliffDepth = 0; + bool firstTime = true; + + size_t len; + ResXMLTree::event_code_t code; + while ((code=inXml->next()) != ResXMLTree::END_DOCUMENT && code != ResXMLTree::BAD_DOCUMENT) { + + if (code == ResXMLTree::TEXT) { + String16 text(inXml->getText(&len)); + if (firstTime && text.size() > 0) { + firstTime = false; + if (text.string()[0] == '@') { + // If this is a resource reference, don't do the pseudoloc. + pseudolocalize = false; + } + } + if (xliffDepth == 0 && pseudolocalize) { + std::string orig(String8(text).string()); + std::string pseudo = pseudolocalize_string(orig); + curString.append(String16(String8(pseudo.c_str()))); + } else { + if (isFormatted && hasSubstitutionErrors(fileName, inXml, text) != NO_ERROR) { + return UNKNOWN_ERROR; + } else { + curString.append(text); + } + } + } else if (code == ResXMLTree::START_TAG) { + const String16 element16(inXml->getElementName(&len)); + const String8 element8(element16); + + size_t nslen; + const uint16_t* ns = inXml->getElementNamespace(&nslen); + if (ns == NULL) { + ns = (const uint16_t*)"\0\0"; + nslen = 0; + } + const String8 nspace(String16(ns, nslen)); + if (nspace == XLIFF_XMLNS) { + const int N = sizeof(ALLOWED_XLIFF_ELEMENTS)/sizeof(ALLOWED_XLIFF_ELEMENTS[0]); + for (int i=0; igetLineNumber()).error( + "Found unsupported XLIFF tag <%s>\n", + element8.string()); + return UNKNOWN_ERROR; + } +moveon: + continue; + } + + if (outSpans == NULL) { + SourcePos(String8(fileName), inXml->getLineNumber()).error( + "Found style tag <%s> where styles are not allowed\n", element8.string()); + return UNKNOWN_ERROR; + } + + if (!ResTable::collectString(outString, curString.string(), + curString.size(), false, &errorMsg, true)) { + SourcePos(String8(fileName), inXml->getLineNumber()).error("%s (in %s)\n", + errorMsg, String8(curString).string()); + return UNKNOWN_ERROR; + } + rawString.append(curString); + curString = String16(); + + StringPool::entry_style_span span; + span.name = element16; + for (size_t ai=0; aigetAttributeCount(); ai++) { + span.name.append(String16(";")); + const char16_t* str = inXml->getAttributeName(ai, &len); + span.name.append(str, len); + span.name.append(String16("=")); + str = inXml->getAttributeStringValue(ai, &len); + span.name.append(str, len); + } + //printf("Span: %s\n", String8(span.name).string()); + span.span.firstChar = span.span.lastChar = outString->size(); + spanStack.push(span); + + } else if (code == ResXMLTree::END_TAG) { + size_t nslen; + const uint16_t* ns = inXml->getElementNamespace(&nslen); + if (ns == NULL) { + ns = (const uint16_t*)"\0\0"; + nslen = 0; + } + const String8 nspace(String16(ns, nslen)); + if (nspace == XLIFF_XMLNS) { + xliffDepth--; + continue; + } + if (!ResTable::collectString(outString, curString.string(), + curString.size(), false, &errorMsg, true)) { + SourcePos(String8(fileName), inXml->getLineNumber()).error("%s (in %s)\n", + errorMsg, String8(curString).string()); + return UNKNOWN_ERROR; + } + rawString.append(curString); + curString = String16(); + + if (spanStack.size() == 0) { + if (strcmp16(inXml->getElementName(&len), endTag.string()) != 0) { + SourcePos(String8(fileName), inXml->getLineNumber()).error( + "Found tag %s where <%s> close is expected\n", + String8(inXml->getElementName(&len)).string(), + String8(endTag).string()); + return UNKNOWN_ERROR; + } + break; + } + StringPool::entry_style_span span = spanStack.top(); + String16 spanTag; + ssize_t semi = span.name.findFirst(';'); + if (semi >= 0) { + spanTag.setTo(span.name.string(), semi); + } else { + spanTag.setTo(span.name); + } + if (strcmp16(inXml->getElementName(&len), spanTag.string()) != 0) { + SourcePos(String8(fileName), inXml->getLineNumber()).error( + "Found close tag %s where close tag %s is expected\n", + String8(inXml->getElementName(&len)).string(), + String8(spanTag).string()); + return UNKNOWN_ERROR; + } + bool empty = true; + if (outString->size() > 0) { + span.span.lastChar = outString->size()-1; + if (span.span.lastChar >= span.span.firstChar) { + empty = false; + outSpans->add(span); + } + } + spanStack.pop(); + + /* + * This warning seems to be just an irritation to most people, + * since it is typically introduced by translators who then never + * see the warning. + */ + if (0 && empty) { + fprintf(stderr, "%s:%d: warning: empty '%s' span found in text '%s'\n", + fileName, inXml->getLineNumber(), + String8(spanTag).string(), String8(*outString).string()); + + } + } else if (code == ResXMLTree::START_NAMESPACE) { + // nothing + } + } + + if (code == ResXMLTree::BAD_DOCUMENT) { + SourcePos(String8(fileName), inXml->getLineNumber()).error( + "Error parsing XML\n"); + } + + if (outSpans != NULL && outSpans->size() > 0) { + if (curString.size() > 0) { + if (!ResTable::collectString(outString, curString.string(), + curString.size(), false, &errorMsg, true)) { + SourcePos(String8(fileName), inXml->getLineNumber()).error( + "%s (in %s)\n", + errorMsg, String8(curString).string()); + return UNKNOWN_ERROR; + } + } + } else { + // There is no style information, so string processing will happen + // later as part of the overall type conversion. Return to the + // client the raw unprocessed text. + rawString.append(curString); + outString->setTo(rawString); + } + + return NO_ERROR; +} + +struct namespace_entry { + String8 prefix; + String8 uri; +}; + +static String8 make_prefix(int depth) +{ + String8 prefix; + int i; + for (i=0; i& namespaces, + const uint16_t* ns) +{ + String8 str; + if (ns != NULL) { + str = String8(ns); + const size_t N = namespaces.size(); + for (size_t i=0; irestart(); + + Vector namespaces; + + ResXMLTree::event_code_t code; + int depth = 0; + while ((code=block->next()) != ResXMLTree::END_DOCUMENT && code != ResXMLTree::BAD_DOCUMENT) { + String8 prefix = make_prefix(depth); + int i; + if (code == ResXMLTree::START_TAG) { + size_t len; + const uint16_t* ns16 = block->getElementNamespace(&len); + String8 elemNs = build_namespace(namespaces, ns16); + const uint16_t* com16 = block->getComment(&len); + if (com16) { + printf("%s \n", prefix.string(), String8(com16).string()); + } + printf("%sE: %s%s (line=%d)\n", prefix.string(), elemNs.string(), + String8(block->getElementName(&len)).string(), + block->getLineNumber()); + int N = block->getAttributeCount(); + depth++; + prefix = make_prefix(depth); + for (i=0; igetAttributeNameResID(i); + ns16 = block->getAttributeNamespace(i, &len); + String8 ns = build_namespace(namespaces, ns16); + String8 name(block->getAttributeName(i, &len)); + printf("%sA: ", prefix.string()); + if (res) { + printf("%s%s(0x%08x)", ns.string(), name.string(), res); + } else { + printf("%s%s", ns.string(), name.string()); + } + Res_value value; + block->getAttributeValue(i, &value); + if (value.dataType == Res_value::TYPE_NULL) { + printf("=(null)"); + } else if (value.dataType == Res_value::TYPE_REFERENCE) { + printf("=@0x%x", (int)value.data); + } else if (value.dataType == Res_value::TYPE_ATTRIBUTE) { + printf("=?0x%x", (int)value.data); + } else if (value.dataType == Res_value::TYPE_STRING) { + printf("=\"%s\"", + ResTable::normalizeForOutput(String8(block->getAttributeStringValue(i, + &len)).string()).string()); + } else { + printf("=(type 0x%x)0x%x", (int)value.dataType, (int)value.data); + } + const char16_t* val = block->getAttributeStringValue(i, &len); + if (val != NULL) { + printf(" (Raw: \"%s\")", ResTable::normalizeForOutput(String8(val).string()). + string()); + } + printf("\n"); + } + } else if (code == ResXMLTree::END_TAG) { + depth--; + } else if (code == ResXMLTree::START_NAMESPACE) { + namespace_entry ns; + size_t len; + const uint16_t* prefix16 = block->getNamespacePrefix(&len); + if (prefix16) { + ns.prefix = String8(prefix16); + } else { + ns.prefix = ""; + } + ns.uri = String8(block->getNamespaceUri(&len)); + namespaces.push(ns); + printf("%sN: %s=%s\n", prefix.string(), ns.prefix.string(), + ns.uri.string()); + depth++; + } else if (code == ResXMLTree::END_NAMESPACE) { + depth--; + const namespace_entry& ns = namespaces.top(); + size_t len; + const uint16_t* prefix16 = block->getNamespacePrefix(&len); + String8 pr; + if (prefix16) { + pr = String8(prefix16); + } else { + pr = ""; + } + if (ns.prefix != pr) { + prefix = make_prefix(depth); + printf("%s*** BAD END NS PREFIX: found=%s, expected=%s\n", + prefix.string(), pr.string(), ns.prefix.string()); + } + String8 uri = String8(block->getNamespaceUri(&len)); + if (ns.uri != uri) { + prefix = make_prefix(depth); + printf("%s *** BAD END NS URI: found=%s, expected=%s\n", + prefix.string(), uri.string(), ns.uri.string()); + } + namespaces.pop(); + } else if (code == ResXMLTree::TEXT) { + size_t len; + printf("%sC: \"%s\"\n", prefix.string(), + ResTable::normalizeForOutput(String8(block->getText(&len)).string()).string()); + } + } + + block->restart(); +} + +status_t parseXMLResource(const sp& file, ResXMLTree* outTree, + bool stripAll, bool keepComments, + const char** cDataTags) +{ + sp root = XMLNode::parse(file); + if (root == NULL) { + return UNKNOWN_ERROR; + } + root->removeWhitespace(stripAll, cDataTags); + + NOISY(printf("Input XML from %s:\n", (const char*)file->getPrintableSource())); + NOISY(root->print()); + sp rsc = new AaptFile(String8(), AaptGroupEntry(), String8()); + status_t err = root->flatten(rsc, !keepComments, false); + if (err != NO_ERROR) { + return err; + } + err = outTree->setTo(rsc->getData(), rsc->getSize(), true); + if (err != NO_ERROR) { + return err; + } + + NOISY(printf("Output XML:\n")); + NOISY(printXMLBlock(outTree)); + + return NO_ERROR; +} + +sp XMLNode::parse(const sp& file) +{ + char buf[16384]; + int fd = open(file->getSourceFile().string(), O_RDONLY | O_BINARY); + if (fd < 0) { + SourcePos(file->getSourceFile(), -1).error("Unable to open file for read: %s", + strerror(errno)); + return NULL; + } + + XML_Parser parser = XML_ParserCreateNS(NULL, 1); + ParseState state; + state.filename = file->getPrintableSource(); + state.parser = parser; + XML_SetUserData(parser, &state); + XML_SetElementHandler(parser, startElement, endElement); + XML_SetNamespaceDeclHandler(parser, startNamespace, endNamespace); + XML_SetCharacterDataHandler(parser, characterData); + XML_SetCommentHandler(parser, commentData); + + ssize_t len; + bool done; + do { + len = read(fd, buf, sizeof(buf)); + done = len < (ssize_t)sizeof(buf); + if (len < 0) { + SourcePos(file->getSourceFile(), -1).error("Error reading file: %s\n", strerror(errno)); + close(fd); + return NULL; + } + if (XML_Parse(parser, buf, len, done) == XML_STATUS_ERROR) { + SourcePos(file->getSourceFile(), (int)XML_GetCurrentLineNumber(parser)).error( + "Error parsing XML: %s\n", XML_ErrorString(XML_GetErrorCode(parser))); + close(fd); + return NULL; + } + } while (!done); + + XML_ParserFree(parser); + if (state.root == NULL) { + SourcePos(file->getSourceFile(), -1).error("No XML data generated when parsing"); + } + close(fd); + return state.root; +} + +XMLNode::XMLNode(const String8& filename, const String16& s1, const String16& s2, bool isNamespace) + : mNextAttributeIndex(0x80000000) + , mFilename(filename) + , mStartLineNumber(0) + , mEndLineNumber(0) + , mUTF8(false) +{ + if (isNamespace) { + mNamespacePrefix = s1; + mNamespaceUri = s2; + } else { + mNamespaceUri = s1; + mElementName = s2; + } +} + +XMLNode::XMLNode(const String8& filename) + : mFilename(filename) +{ + memset(&mCharsValue, 0, sizeof(mCharsValue)); +} + +XMLNode::type XMLNode::getType() const +{ + if (mElementName.size() != 0) { + return TYPE_ELEMENT; + } + if (mNamespaceUri.size() != 0) { + return TYPE_NAMESPACE; + } + return TYPE_CDATA; +} + +const String16& XMLNode::getNamespacePrefix() const +{ + return mNamespacePrefix; +} + +const String16& XMLNode::getNamespaceUri() const +{ + return mNamespaceUri; +} + +const String16& XMLNode::getElementNamespace() const +{ + return mNamespaceUri; +} + +const String16& XMLNode::getElementName() const +{ + return mElementName; +} + +const Vector >& XMLNode::getChildren() const +{ + return mChildren; +} + +const String8& XMLNode::getFilename() const +{ + return mFilename; +} + +const Vector& + XMLNode::getAttributes() const +{ + return mAttributes; +} + +const XMLNode::attribute_entry* XMLNode::getAttribute(const String16& ns, + const String16& name) const +{ + for (size_t i=0; ins == ns && ae->name == name) { + return ae; + } + } + + return NULL; +} + +const String16& XMLNode::getCData() const +{ + return mChars; +} + +const String16& XMLNode::getComment() const +{ + return mComment; +} + +int32_t XMLNode::getStartLineNumber() const +{ + return mStartLineNumber; +} + +int32_t XMLNode::getEndLineNumber() const +{ + return mEndLineNumber; +} + +sp XMLNode::searchElement(const String16& tagNamespace, const String16& tagName) +{ + if (getType() == XMLNode::TYPE_ELEMENT + && mNamespaceUri == tagNamespace + && mElementName == tagName) { + return this; + } + + for (size_t i=0; i found = mChildren.itemAt(i)->searchElement(tagNamespace, tagName); + if (found != NULL) { + return found; + } + } + + return NULL; +} + +sp XMLNode::getChildElement(const String16& tagNamespace, const String16& tagName) +{ + for (size_t i=0; i child = mChildren.itemAt(i); + if (child->getType() == XMLNode::TYPE_ELEMENT + && child->mNamespaceUri == tagNamespace + && child->mElementName == tagName) { + return child; + } + } + + return NULL; +} + +status_t XMLNode::addChild(const sp& child) +{ + if (getType() == TYPE_CDATA) { + SourcePos(mFilename, child->getStartLineNumber()).error("Child to CDATA node."); + return UNKNOWN_ERROR; + } + //printf("Adding child %p to parent %p\n", child.get(), this); + mChildren.add(child); + return NO_ERROR; +} + +status_t XMLNode::insertChildAt(const sp& child, size_t index) +{ + if (getType() == TYPE_CDATA) { + SourcePos(mFilename, child->getStartLineNumber()).error("Child to CDATA node."); + return UNKNOWN_ERROR; + } + //printf("Adding child %p to parent %p\n", child.get(), this); + mChildren.insertAt(child, index); + return NO_ERROR; +} + +status_t XMLNode::addAttribute(const String16& ns, const String16& name, + const String16& value) +{ + if (getType() == TYPE_CDATA) { + SourcePos(mFilename, getStartLineNumber()).error("Child to CDATA node."); + return UNKNOWN_ERROR; + } + + if (ns != RESOURCES_TOOLS_NAMESPACE) { + attribute_entry e; + e.index = mNextAttributeIndex++; + e.ns = ns; + e.name = name; + e.string = value; + mAttributes.add(e); + mAttributeOrder.add(e.index, mAttributes.size()-1); + } + return NO_ERROR; +} + +void XMLNode::setAttributeResID(size_t attrIdx, uint32_t resId) +{ + attribute_entry& e = mAttributes.editItemAt(attrIdx); + if (e.nameResId) { + mAttributeOrder.removeItem(e.nameResId); + } else { + mAttributeOrder.removeItem(e.index); + } + NOISY(printf("Elem %s %s=\"%s\": set res id = 0x%08x\n", + String8(getElementName()).string(), + String8(mAttributes.itemAt(attrIdx).name).string(), + String8(mAttributes.itemAt(attrIdx).string).string(), + resId)); + mAttributes.editItemAt(attrIdx).nameResId = resId; + mAttributeOrder.add(resId, attrIdx); +} + +status_t XMLNode::appendChars(const String16& chars) +{ + if (getType() != TYPE_CDATA) { + SourcePos(mFilename, getStartLineNumber()).error("Adding characters to element node."); + return UNKNOWN_ERROR; + } + mChars.append(chars); + return NO_ERROR; +} + +status_t XMLNode::appendComment(const String16& comment) +{ + if (mComment.size() > 0) { + mComment.append(String16("\n")); + } + mComment.append(comment); + return NO_ERROR; +} + +void XMLNode::setStartLineNumber(int32_t line) +{ + mStartLineNumber = line; +} + +void XMLNode::setEndLineNumber(int32_t line) +{ + mEndLineNumber = line; +} + +void XMLNode::removeWhitespace(bool stripAll, const char** cDataTags) +{ + //printf("Removing whitespace in %s\n", String8(mElementName).string()); + size_t N = mChildren.size(); + if (cDataTags) { + String8 tag(mElementName); + const char** p = cDataTags; + while (*p) { + if (tag == *p) { + stripAll = false; + break; + } + } + } + for (size_t i=0; i node = mChildren.itemAt(i); + if (node->getType() == TYPE_CDATA) { + // This is a CDATA node... + const char16_t* p = node->mChars.string(); + while (*p != 0 && *p < 128 && isspace(*p)) { + p++; + } + //printf("Space ends at %d in \"%s\"\n", + // (int)(p-node->mChars.string()), + // String8(node->mChars).string()); + if (*p == 0) { + if (stripAll) { + // Remove this node! + mChildren.removeAt(i); + N--; + i--; + } else { + node->mChars = String16(" "); + } + } else { + // Compact leading/trailing whitespace. + const char16_t* e = node->mChars.string()+node->mChars.size()-1; + while (e > p && *e < 128 && isspace(*e)) { + e--; + } + if (p > node->mChars.string()) { + p--; + } + if (e < (node->mChars.string()+node->mChars.size()-1)) { + e++; + } + if (p > node->mChars.string() || + e < (node->mChars.string()+node->mChars.size()-1)) { + String16 tmp(p, e-p+1); + node->mChars = tmp; + } + } + } else { + node->removeWhitespace(stripAll, cDataTags); + } + } +} + +status_t XMLNode::parseValues(const sp& assets, + ResourceTable* table) +{ + bool hasErrors = false; + + if (getType() == TYPE_ELEMENT) { + const size_t N = mAttributes.size(); + String16 defPackage(assets->getPackage()); + for (size_t i=0; isetCurrentXmlPos(SourcePos(mFilename, getStartLineNumber())); + if (!assets->getIncludedResources() + .stringToValue(&e.value, &e.string, + e.string.string(), e.string.size(), true, true, + e.nameResId, NULL, &defPackage, table, &ac)) { + hasErrors = true; + } + NOISY(printf("Attr %s: type=0x%x, str=%s\n", + String8(e.name).string(), e.value.dataType, + String8(e.string).string())); + } + } + const size_t N = mChildren.size(); + for (size_t i=0; iparseValues(assets, table); + if (err != NO_ERROR) { + hasErrors = true; + } + } + return hasErrors ? UNKNOWN_ERROR : NO_ERROR; +} + +status_t XMLNode::assignResourceIds(const sp& assets, + const ResourceTable* table) +{ + bool hasErrors = false; + + if (getType() == TYPE_ELEMENT) { + String16 attr("attr"); + const char* errorMsg; + const size_t N = mAttributes.size(); + for (size_t i=0; igetPackage()), e.ns, &nsIsPublic)); + NOISY(printf("Elem %s %s=\"%s\": namespace(%s) %s ===> %s\n", + String8(getElementName()).string(), + String8(e.name).string(), + String8(e.string).string(), + String8(e.ns).string(), + (nsIsPublic) ? "public" : "private", + String8(pkg).string())); + if (pkg.size() <= 0) continue; + uint32_t res = table != NULL + ? table->getResId(e.name, &attr, &pkg, &errorMsg, nsIsPublic) + : assets->getIncludedResources(). + identifierForName(e.name.string(), e.name.size(), + attr.string(), attr.size(), + pkg.string(), pkg.size()); + if (res != 0) { + NOISY(printf("XML attribute name %s: resid=0x%08x\n", + String8(e.name).string(), res)); + setAttributeResID(i, res); + } else { + SourcePos(mFilename, getStartLineNumber()).error( + "No resource identifier found for attribute '%s' in package '%s'\n", + String8(e.name).string(), String8(pkg).string()); + hasErrors = true; + } + } + } + const size_t N = mChildren.size(); + for (size_t i=0; iassignResourceIds(assets, table); + if (err < NO_ERROR) { + hasErrors = true; + } + } + + return hasErrors ? UNKNOWN_ERROR : NO_ERROR; +} + +status_t XMLNode::flatten(const sp& dest, + bool stripComments, bool stripRawValues) const +{ + StringPool strings(mUTF8); + Vector resids; + + // First collect just the strings for attribute names that have a + // resource ID assigned to them. This ensures that the resource ID + // array is compact, and makes it easier to deal with attribute names + // in different namespaces (and thus with different resource IDs). + collect_resid_strings(&strings, &resids); + + // Next collect all remainibng strings. + collect_strings(&strings, &resids, stripComments, stripRawValues); + +#if 0 // No longer compiles + NOISY(printf("Found strings:\n"); + const size_t N = strings.size(); + for (size_t i=0; i stringPool = strings.createStringBlock(); + NOISY(aout << "String pool:" + << HexDump(stringPool->getData(), stringPool->getSize()) << endl); + + ResXMLTree_header header; + memset(&header, 0, sizeof(header)); + header.header.type = htods(RES_XML_TYPE); + header.header.headerSize = htods(sizeof(header)); + + const size_t basePos = dest->getSize(); + dest->writeData(&header, sizeof(header)); + dest->writeData(stringPool->getData(), stringPool->getSize()); + + // If we have resource IDs, write them. + if (resids.size() > 0) { + const size_t resIdsPos = dest->getSize(); + const size_t resIdsSize = + sizeof(ResChunk_header)+(sizeof(uint32_t)*resids.size()); + ResChunk_header* idsHeader = (ResChunk_header*) + (((const uint8_t*)dest->editData(resIdsPos+resIdsSize))+resIdsPos); + idsHeader->type = htods(RES_XML_RESOURCE_MAP_TYPE); + idsHeader->headerSize = htods(sizeof(*idsHeader)); + idsHeader->size = htodl(resIdsSize); + uint32_t* ids = (uint32_t*)(idsHeader+1); + for (size_t i=0; ieditData(); + ResXMLTree_header* hd = (ResXMLTree_header*)(((uint8_t*)data)+basePos); + size_t size = dest->getSize()-basePos; + hd->header.size = htodl(dest->getSize()-basePos); + + NOISY(aout << "XML resource:" + << HexDump(dest->getData(), dest->getSize()) << endl); + + #if PRINT_STRING_METRICS + fprintf(stderr, "**** total xml size: %d / %d%% strings (in %s)\n", + dest->getSize(), (stringPool->getSize()*100)/dest->getSize(), + dest->getPath().string()); + #endif + + return NO_ERROR; +} + +void XMLNode::print(int indent) +{ + String8 prefix; + int i; + for (i=0; i 0) { + elemNs.append(":"); + } + printf("%s E: %s%s", prefix.string(), + elemNs.string(), String8(getElementName()).string()); + int N = mAttributes.size(); + for (i=0; i 0) { + attrNs.append(":"); + } + if (attr.nameResId) { + printf("%s%s(0x%08x)", attrNs.string(), + String8(attr.name).string(), attr.nameResId); + } else { + printf("%s%s", attrNs.string(), String8(attr.name).string()); + } + printf("=%s", String8(attr.string).string()); + } + printf("\n"); + } else if (getType() == TYPE_NAMESPACE) { + printf("%s N: %s=%s\n", prefix.string(), + getNamespacePrefix().size() > 0 + ? String8(getNamespacePrefix()).string() : "", + String8(getNamespaceUri()).string()); + } else { + printf("%s C: \"%s\"\n", prefix.string(), String8(getCData()).string()); + } + int N = mChildren.size(); + for (i=0; iprint(indent+1); + } +} + +static void splitName(const char* name, String16* outNs, String16* outName) +{ + const char* p = name; + while (*p != 0 && *p != 1) { + p++; + } + if (*p == 0) { + *outNs = String16(); + *outName = String16(name); + } else { + *outNs = String16(name, (p-name)); + *outName = String16(p+1); + } +} + +void XMLCALL +XMLNode::startNamespace(void *userData, const char *prefix, const char *uri) +{ + NOISY_PARSE(printf("Start Namespace: %s %s\n", prefix, uri)); + ParseState* st = (ParseState*)userData; + sp node = XMLNode::newNamespace(st->filename, + String16(prefix != NULL ? prefix : ""), String16(uri)); + node->setStartLineNumber(XML_GetCurrentLineNumber(st->parser)); + if (st->stack.size() > 0) { + st->stack.itemAt(st->stack.size()-1)->addChild(node); + } else { + st->root = node; + } + st->stack.push(node); +} + +void XMLCALL +XMLNode::startElement(void *userData, const char *name, const char **atts) +{ + NOISY_PARSE(printf("Start Element: %s\n", name)); + ParseState* st = (ParseState*)userData; + String16 ns16, name16; + splitName(name, &ns16, &name16); + sp node = XMLNode::newElement(st->filename, ns16, name16); + node->setStartLineNumber(XML_GetCurrentLineNumber(st->parser)); + if (st->pendingComment.size() > 0) { + node->appendComment(st->pendingComment); + st->pendingComment = String16(); + } + if (st->stack.size() > 0) { + st->stack.itemAt(st->stack.size()-1)->addChild(node); + } else { + st->root = node; + } + st->stack.push(node); + + for (int i = 0; atts[i]; i += 2) { + splitName(atts[i], &ns16, &name16); + node->addAttribute(ns16, name16, String16(atts[i+1])); + } +} + +void XMLCALL +XMLNode::characterData(void *userData, const XML_Char *s, int len) +{ + NOISY_PARSE(printf("CDATA: \"%s\"\n", String8(s, len).string())); + ParseState* st = (ParseState*)userData; + sp node = NULL; + if (st->stack.size() == 0) { + return; + } + sp parent = st->stack.itemAt(st->stack.size()-1); + if (parent != NULL && parent->getChildren().size() > 0) { + node = parent->getChildren()[parent->getChildren().size()-1]; + if (node->getType() != TYPE_CDATA) { + // Last node is not CDATA, need to make a new node. + node = NULL; + } + } + + if (node == NULL) { + node = XMLNode::newCData(st->filename); + node->setStartLineNumber(XML_GetCurrentLineNumber(st->parser)); + parent->addChild(node); + } + + node->appendChars(String16(s, len)); +} + +void XMLCALL +XMLNode::endElement(void *userData, const char *name) +{ + NOISY_PARSE(printf("End Element: %s\n", name)); + ParseState* st = (ParseState*)userData; + sp node = st->stack.itemAt(st->stack.size()-1); + node->setEndLineNumber(XML_GetCurrentLineNumber(st->parser)); + if (st->pendingComment.size() > 0) { + node->appendComment(st->pendingComment); + st->pendingComment = String16(); + } + String16 ns16, name16; + splitName(name, &ns16, &name16); + LOG_ALWAYS_FATAL_IF(node->getElementNamespace() != ns16 + || node->getElementName() != name16, + "Bad end element %s", name); + st->stack.pop(); +} + +void XMLCALL +XMLNode::endNamespace(void *userData, const char *prefix) +{ + const char* nonNullPrefix = prefix != NULL ? prefix : ""; + NOISY_PARSE(printf("End Namespace: %s\n", prefix)); + ParseState* st = (ParseState*)userData; + sp node = st->stack.itemAt(st->stack.size()-1); + node->setEndLineNumber(XML_GetCurrentLineNumber(st->parser)); + LOG_ALWAYS_FATAL_IF(node->getNamespacePrefix() != String16(nonNullPrefix), + "Bad end namespace %s", prefix); + st->stack.pop(); +} + +void XMLCALL +XMLNode::commentData(void *userData, const char *comment) +{ + NOISY_PARSE(printf("Comment: %s\n", comment)); + ParseState* st = (ParseState*)userData; + if (st->pendingComment.size() > 0) { + st->pendingComment.append(String16("\n")); + } + st->pendingComment.append(String16(comment)); +} + +status_t XMLNode::collect_strings(StringPool* dest, Vector* outResIds, + bool stripComments, bool stripRawValues) const +{ + collect_attr_strings(dest, outResIds, true); + + int i; + if (RESOURCES_TOOLS_NAMESPACE != mNamespaceUri) { + if (mNamespacePrefix.size() > 0) { + dest->add(mNamespacePrefix, true); + } + if (mNamespaceUri.size() > 0) { + dest->add(mNamespaceUri, true); + } + } + if (mElementName.size() > 0) { + dest->add(mElementName, true); + } + + if (!stripComments && mComment.size() > 0) { + dest->add(mComment, true); + } + + const int NA = mAttributes.size(); + + for (i=0; i 0) { + dest->add(ae.ns, true); + } + if (!stripRawValues || ae.needStringValue()) { + dest->add(ae.string, true); + } + /* + if (ae.value.dataType == Res_value::TYPE_NULL + || ae.value.dataType == Res_value::TYPE_STRING) { + dest->add(ae.string, true); + } + */ + } + + if (mElementName.size() == 0) { + // If not an element, include the CDATA, even if it is empty. + dest->add(mChars, true); + } + + const int NC = mChildren.size(); + + for (i=0; icollect_strings(dest, outResIds, + stripComments, stripRawValues); + } + + return NO_ERROR; +} + +status_t XMLNode::collect_attr_strings(StringPool* outPool, + Vector* outResIds, bool allAttrs) const { + const int NA = mAttributes.size(); + + for (int i=0; i* indices = outPool->offsetsForString(attr.name); + ssize_t idx = -1; + if (indices != NULL) { + const int NJ = indices->size(); + const size_t NR = outResIds->size(); + for (int j=0; jitemAt(j); + if (strIdx >= NR) { + if (id == 0) { + // We don't need to assign a resource ID for this one. + idx = strIdx; + break; + } + // Just ignore strings that are out of range of + // the currently assigned resource IDs... we add + // strings as we assign the first ID. + } else if (outResIds->itemAt(strIdx) == id) { + idx = strIdx; + break; + } + } + } + if (idx < 0) { + idx = outPool->add(attr.name); + NOISY(printf("Adding attr %s (resid 0x%08x) to pool: idx=%d\n", + String8(attr.name).string(), id, idx)); + if (id != 0) { + while ((ssize_t)outResIds->size() <= idx) { + outResIds->add(0); + } + outResIds->replaceAt(id, idx); + } + } + attr.namePoolIdx = idx; + NOISY(printf("String %s offset=0x%08x\n", + String8(attr.name).string(), idx)); + } + } + + return NO_ERROR; +} + +status_t XMLNode::collect_resid_strings(StringPool* outPool, + Vector* outResIds) const +{ + collect_attr_strings(outPool, outResIds, false); + + const int NC = mChildren.size(); + + for (int i=0; icollect_resid_strings(outPool, outResIds); + } + + return NO_ERROR; +} + +status_t XMLNode::flatten_node(const StringPool& strings, const sp& dest, + bool stripComments, bool stripRawValues) const +{ + ResXMLTree_node node; + ResXMLTree_cdataExt cdataExt; + ResXMLTree_namespaceExt namespaceExt; + ResXMLTree_attrExt attrExt; + const void* extData = NULL; + size_t extSize = 0; + ResXMLTree_attribute attr; + bool writeCurrentNode = true; + + const size_t NA = mAttributes.size(); + const size_t NC = mChildren.size(); + size_t i; + + LOG_ALWAYS_FATAL_IF(NA != mAttributeOrder.size(), "Attributes messed up!"); + + const String16 id16("id"); + const String16 class16("class"); + const String16 style16("style"); + + const type type = getType(); + + memset(&node, 0, sizeof(node)); + memset(&attr, 0, sizeof(attr)); + node.header.headerSize = htods(sizeof(node)); + node.lineNumber = htodl(getStartLineNumber()); + if (!stripComments) { + node.comment.index = htodl( + mComment.size() > 0 ? strings.offsetForString(mComment) : -1); + //if (mComment.size() > 0) { + // printf("Flattening comment: %s\n", String8(mComment).string()); + //} + } else { + node.comment.index = htodl((uint32_t)-1); + } + if (type == TYPE_ELEMENT) { + node.header.type = htods(RES_XML_START_ELEMENT_TYPE); + extData = &attrExt; + extSize = sizeof(attrExt); + memset(&attrExt, 0, sizeof(attrExt)); + if (mNamespaceUri.size() > 0) { + attrExt.ns.index = htodl(strings.offsetForString(mNamespaceUri)); + } else { + attrExt.ns.index = htodl((uint32_t)-1); + } + attrExt.name.index = htodl(strings.offsetForString(mElementName)); + attrExt.attributeStart = htods(sizeof(attrExt)); + attrExt.attributeSize = htods(sizeof(attr)); + attrExt.attributeCount = htods(NA); + attrExt.idIndex = htods(0); + attrExt.classIndex = htods(0); + attrExt.styleIndex = htods(0); + for (i=0; i 0) { + namespaceExt.prefix.index = htodl(strings.offsetForString(mNamespacePrefix)); + } else { + namespaceExt.prefix.index = htodl((uint32_t)-1); + } + namespaceExt.prefix.index = htodl(strings.offsetForString(mNamespacePrefix)); + namespaceExt.uri.index = htodl(strings.offsetForString(mNamespaceUri)); + } + LOG_ALWAYS_FATAL_IF(NA != 0, "Namespace nodes can't have attributes!"); + } else if (type == TYPE_CDATA) { + node.header.type = htods(RES_XML_CDATA_TYPE); + extData = &cdataExt; + extSize = sizeof(cdataExt); + memset(&cdataExt, 0, sizeof(cdataExt)); + cdataExt.data.index = htodl(strings.offsetForString(mChars)); + cdataExt.typedData.size = htods(sizeof(cdataExt.typedData)); + cdataExt.typedData.res0 = 0; + cdataExt.typedData.dataType = mCharsValue.dataType; + cdataExt.typedData.data = htodl(mCharsValue.data); + LOG_ALWAYS_FATAL_IF(NA != 0, "CDATA nodes can't have attributes!"); + } + + node.header.size = htodl(sizeof(node) + extSize + (sizeof(attr)*NA)); + + if (writeCurrentNode) { + dest->writeData(&node, sizeof(node)); + if (extSize > 0) { + dest->writeData(extData, extSize); + } + } + + for (i=0; i 0) { + attr.ns.index = htodl(strings.offsetForString(ae.ns)); + } else { + attr.ns.index = htodl((uint32_t)-1); + } + attr.name.index = htodl(ae.namePoolIdx); + + if (!stripRawValues || ae.needStringValue()) { + attr.rawValue.index = htodl(strings.offsetForString(ae.string)); + } else { + attr.rawValue.index = htodl((uint32_t)-1); + } + attr.typedValue.size = htods(sizeof(attr.typedValue)); + if (ae.value.dataType == Res_value::TYPE_NULL + || ae.value.dataType == Res_value::TYPE_STRING) { + attr.typedValue.res0 = 0; + attr.typedValue.dataType = Res_value::TYPE_STRING; + attr.typedValue.data = htodl(strings.offsetForString(ae.string)); + } else { + attr.typedValue.res0 = 0; + attr.typedValue.dataType = ae.value.dataType; + attr.typedValue.data = htodl(ae.value.data); + } + dest->writeData(&attr, sizeof(attr)); + } + + for (i=0; iflatten_node(strings, dest, + stripComments, stripRawValues); + if (err != NO_ERROR) { + return err; + } + } + + if (type == TYPE_ELEMENT) { + ResXMLTree_endElementExt endElementExt; + memset(&endElementExt, 0, sizeof(endElementExt)); + node.header.type = htods(RES_XML_END_ELEMENT_TYPE); + node.header.size = htodl(sizeof(node)+sizeof(endElementExt)); + node.lineNumber = htodl(getEndLineNumber()); + node.comment.index = htodl((uint32_t)-1); + endElementExt.ns.index = attrExt.ns.index; + endElementExt.name.index = attrExt.name.index; + dest->writeData(&node, sizeof(node)); + dest->writeData(&endElementExt, sizeof(endElementExt)); + } else if (type == TYPE_NAMESPACE) { + if (writeCurrentNode) { + node.header.type = htods(RES_XML_END_NAMESPACE_TYPE); + node.lineNumber = htodl(getEndLineNumber()); + node.comment.index = htodl((uint32_t)-1); + node.header.size = htodl(sizeof(node)+extSize); + dest->writeData(&node, sizeof(node)); + dest->writeData(extData, extSize); + } + } + + return NO_ERROR; +} diff --git a/tools/aapt/XMLNode.h b/tools/aapt/XMLNode.h new file mode 100644 index 0000000000000..05624b7451766 --- /dev/null +++ b/tools/aapt/XMLNode.h @@ -0,0 +1,202 @@ +// +// Copyright 2006 The Android Open Source Project +// +// Build resource files from raw assets. +// + +#ifndef XML_NODE_H +#define XML_NODE_H + +#include "StringPool.h" +#include "ResourceTable.h" + +class XMLNode; + +extern const char* const RESOURCES_ROOT_NAMESPACE; +extern const char* const RESOURCES_ANDROID_NAMESPACE; + +bool isWhitespace(const char16_t* str); + +String16 getNamespaceResourcePackage(String16 namespaceUri, bool* outIsPublic = NULL); + +status_t parseStyledString(Bundle* bundle, + const char* fileName, + ResXMLTree* inXml, + const String16& endTag, + String16* outString, + Vector* outSpans, + bool isFormatted, + bool isPseudolocalizable); + +void printXMLBlock(ResXMLTree* block); + +status_t parseXMLResource(const sp& file, ResXMLTree* outTree, + bool stripAll=true, bool keepComments=false, + const char** cDataTags=NULL); + +class XMLNode : public RefBase +{ +public: + static sp parse(const sp& file); + + static inline + sp newNamespace(const String8& filename, const String16& prefix, const String16& uri) { + return new XMLNode(filename, prefix, uri, true); + } + + static inline + sp newElement(const String8& filename, const String16& ns, const String16& name) { + return new XMLNode(filename, ns, name, false); + } + + static inline + sp newCData(const String8& filename) { + return new XMLNode(filename); + } + + enum type { + TYPE_NAMESPACE, + TYPE_ELEMENT, + TYPE_CDATA + }; + + type getType() const; + + const String16& getNamespacePrefix() const; + const String16& getNamespaceUri() const; + + const String16& getElementNamespace() const; + const String16& getElementName() const; + const Vector >& getChildren() const; + + const String8& getFilename() const; + + struct attribute_entry { + attribute_entry() : index(~(uint32_t)0), nameResId(0) + { + value.dataType = Res_value::TYPE_NULL; + } + + bool needStringValue() const { + return nameResId == 0 + || value.dataType == Res_value::TYPE_NULL + || value.dataType == Res_value::TYPE_STRING; + } + + String16 ns; + String16 name; + String16 string; + Res_value value; + uint32_t index; + uint32_t nameResId; + mutable uint32_t namePoolIdx; + }; + + const Vector& getAttributes() const; + + const attribute_entry* getAttribute(const String16& ns, const String16& name) const; + + attribute_entry* editAttribute(const String16& ns, const String16& name); + + const String16& getCData() const; + + const String16& getComment() const; + + int32_t getStartLineNumber() const; + int32_t getEndLineNumber() const; + + sp searchElement(const String16& tagNamespace, const String16& tagName); + + sp getChildElement(const String16& tagNamespace, const String16& tagName); + + status_t addChild(const sp& child); + + status_t insertChildAt(const sp& child, size_t index); + + status_t addAttribute(const String16& ns, const String16& name, + const String16& value); + + void setAttributeResID(size_t attrIdx, uint32_t resId); + + status_t appendChars(const String16& chars); + + status_t appendComment(const String16& comment); + + void setStartLineNumber(int32_t line); + void setEndLineNumber(int32_t line); + + void removeWhitespace(bool stripAll=true, const char** cDataTags=NULL); + + void setUTF8(bool val) { mUTF8 = val; } + + status_t parseValues(const sp& assets, ResourceTable* table); + + status_t assignResourceIds(const sp& assets, + const ResourceTable* table = NULL); + + status_t flatten(const sp& dest, bool stripComments, + bool stripRawValues) const; + + void print(int indent=0); + +private: + struct ParseState + { + String8 filename; + XML_Parser parser; + sp root; + Vector > stack; + String16 pendingComment; + }; + + static void XMLCALL + startNamespace(void *userData, const char *prefix, const char *uri); + static void XMLCALL + startElement(void *userData, const char *name, const char **atts); + static void XMLCALL + characterData(void *userData, const XML_Char *s, int len); + static void XMLCALL + endElement(void *userData, const char *name); + static void XMLCALL + endNamespace(void *userData, const char *prefix); + + static void XMLCALL + commentData(void *userData, const char *comment); + + // Creating an element node. + XMLNode(const String8& filename, const String16& s1, const String16& s2, bool isNamespace); + + // Creating a CDATA node. + XMLNode(const String8& filename); + + status_t collect_strings(StringPool* dest, Vector* outResIds, + bool stripComments, bool stripRawValues) const; + + status_t collect_attr_strings(StringPool* outPool, + Vector* outResIds, bool allAttrs) const; + + status_t collect_resid_strings(StringPool* outPool, + Vector* outResIds) const; + + status_t flatten_node(const StringPool& strings, const sp& dest, + bool stripComments, bool stripRawValues) const; + + String16 mNamespacePrefix; + String16 mNamespaceUri; + String16 mElementName; + Vector > mChildren; + Vector mAttributes; + KeyedVector mAttributeOrder; + uint32_t mNextAttributeIndex; + String16 mChars; + Res_value mCharsValue; + String16 mComment; + String8 mFilename; + int32_t mStartLineNumber; + int32_t mEndLineNumber; + + // Encode compiled XML with UTF-8 StringPools? + bool mUTF8; +}; + +#endif diff --git a/tools/aapt/ZipEntry.cpp b/tools/aapt/ZipEntry.cpp new file mode 100644 index 0000000000000..b575988f02773 --- /dev/null +++ b/tools/aapt/ZipEntry.cpp @@ -0,0 +1,696 @@ +/* + * Copyright (C) 2006 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// +// Access to entries in a Zip archive. +// + +#define LOG_TAG "zip" + +#include "ZipEntry.h" +#include + +#include +#include +#include + +using namespace android; + +/* + * Initialize a new ZipEntry structure from a FILE* positioned at a + * CentralDirectoryEntry. + * + * On exit, the file pointer will be at the start of the next CDE or + * at the EOCD. + */ +status_t ZipEntry::initFromCDE(FILE* fp) +{ + status_t result; + long posn; + bool hasDD; + + //ALOGV("initFromCDE ---\n"); + + /* read the CDE */ + result = mCDE.read(fp); + if (result != NO_ERROR) { + ALOGD("mCDE.read failed\n"); + return result; + } + + //mCDE.dump(); + + /* using the info in the CDE, go load up the LFH */ + posn = ftell(fp); + if (fseek(fp, mCDE.mLocalHeaderRelOffset, SEEK_SET) != 0) { + ALOGD("local header seek failed (%ld)\n", + mCDE.mLocalHeaderRelOffset); + return UNKNOWN_ERROR; + } + + result = mLFH.read(fp); + if (result != NO_ERROR) { + ALOGD("mLFH.read failed\n"); + return result; + } + + if (fseek(fp, posn, SEEK_SET) != 0) + return UNKNOWN_ERROR; + + //mLFH.dump(); + + /* + * We *might* need to read the Data Descriptor at this point and + * integrate it into the LFH. If this bit is set, the CRC-32, + * compressed size, and uncompressed size will be zero. In practice + * these seem to be rare. + */ + hasDD = (mLFH.mGPBitFlag & kUsesDataDescr) != 0; + if (hasDD) { + // do something clever + //ALOGD("+++ has data descriptor\n"); + } + + /* + * Sanity-check the LFH. Note that this will fail if the "kUsesDataDescr" + * flag is set, because the LFH is incomplete. (Not a problem, since we + * prefer the CDE values.) + */ + if (!hasDD && !compareHeaders()) { + ALOGW("warning: header mismatch\n"); + // keep going? + } + + /* + * If the mVersionToExtract is greater than 20, we may have an + * issue unpacking the record -- could be encrypted, compressed + * with something we don't support, or use Zip64 extensions. We + * can defer worrying about that to when we're extracting data. + */ + + return NO_ERROR; +} + +/* + * Initialize a new entry. Pass in the file name and an optional comment. + * + * Initializes the CDE and the LFH. + */ +void ZipEntry::initNew(const char* fileName, const char* comment) +{ + assert(fileName != NULL && *fileName != '\0'); // name required + + /* most fields are properly initialized by constructor */ + mCDE.mVersionMadeBy = kDefaultMadeBy; + mCDE.mVersionToExtract = kDefaultVersion; + mCDE.mCompressionMethod = kCompressStored; + mCDE.mFileNameLength = strlen(fileName); + if (comment != NULL) + mCDE.mFileCommentLength = strlen(comment); + mCDE.mExternalAttrs = 0x81b60020; // matches what WinZip does + + if (mCDE.mFileNameLength > 0) { + mCDE.mFileName = new unsigned char[mCDE.mFileNameLength+1]; + strcpy((char*) mCDE.mFileName, fileName); + } + if (mCDE.mFileCommentLength > 0) { + /* TODO: stop assuming null-terminated ASCII here? */ + mCDE.mFileComment = new unsigned char[mCDE.mFileCommentLength+1]; + strcpy((char*) mCDE.mFileComment, comment); + } + + copyCDEtoLFH(); +} + +/* + * Initialize a new entry, starting with the ZipEntry from a different + * archive. + * + * Initializes the CDE and the LFH. + */ +status_t ZipEntry::initFromExternal(const ZipFile* pZipFile, + const ZipEntry* pEntry) +{ + /* + * Copy everything in the CDE over, then fix up the hairy bits. + */ + memcpy(&mCDE, &pEntry->mCDE, sizeof(mCDE)); + + if (mCDE.mFileNameLength > 0) { + mCDE.mFileName = new unsigned char[mCDE.mFileNameLength+1]; + if (mCDE.mFileName == NULL) + return NO_MEMORY; + strcpy((char*) mCDE.mFileName, (char*)pEntry->mCDE.mFileName); + } + if (mCDE.mFileCommentLength > 0) { + mCDE.mFileComment = new unsigned char[mCDE.mFileCommentLength+1]; + if (mCDE.mFileComment == NULL) + return NO_MEMORY; + strcpy((char*) mCDE.mFileComment, (char*)pEntry->mCDE.mFileComment); + } + if (mCDE.mExtraFieldLength > 0) { + /* we null-terminate this, though it may not be a string */ + mCDE.mExtraField = new unsigned char[mCDE.mExtraFieldLength+1]; + if (mCDE.mExtraField == NULL) + return NO_MEMORY; + memcpy(mCDE.mExtraField, pEntry->mCDE.mExtraField, + mCDE.mExtraFieldLength+1); + } + + /* construct the LFH from the CDE */ + copyCDEtoLFH(); + + /* + * The LFH "extra" field is independent of the CDE "extra", so we + * handle it here. + */ + assert(mLFH.mExtraField == NULL); + mLFH.mExtraFieldLength = pEntry->mLFH.mExtraFieldLength; + if (mLFH.mExtraFieldLength > 0) { + mLFH.mExtraField = new unsigned char[mLFH.mExtraFieldLength+1]; + if (mLFH.mExtraField == NULL) + return NO_MEMORY; + memcpy(mLFH.mExtraField, pEntry->mLFH.mExtraField, + mLFH.mExtraFieldLength+1); + } + + return NO_ERROR; +} + +/* + * Insert pad bytes in the LFH by tweaking the "extra" field. This will + * potentially confuse something that put "extra" data in here earlier, + * but I can't find an actual problem. + */ +status_t ZipEntry::addPadding(int padding) +{ + if (padding <= 0) + return INVALID_OPERATION; + + //ALOGI("HEY: adding %d pad bytes to existing %d in %s\n", + // padding, mLFH.mExtraFieldLength, mCDE.mFileName); + + if (mLFH.mExtraFieldLength > 0) { + /* extend existing field */ + unsigned char* newExtra; + + newExtra = new unsigned char[mLFH.mExtraFieldLength + padding]; + if (newExtra == NULL) + return NO_MEMORY; + memset(newExtra + mLFH.mExtraFieldLength, 0, padding); + memcpy(newExtra, mLFH.mExtraField, mLFH.mExtraFieldLength); + + delete[] mLFH.mExtraField; + mLFH.mExtraField = newExtra; + mLFH.mExtraFieldLength += padding; + } else { + /* create new field */ + mLFH.mExtraField = new unsigned char[padding]; + memset(mLFH.mExtraField, 0, padding); + mLFH.mExtraFieldLength = padding; + } + + return NO_ERROR; +} + +/* + * Set the fields in the LFH equal to the corresponding fields in the CDE. + * + * This does not touch the LFH "extra" field. + */ +void ZipEntry::copyCDEtoLFH(void) +{ + mLFH.mVersionToExtract = mCDE.mVersionToExtract; + mLFH.mGPBitFlag = mCDE.mGPBitFlag; + mLFH.mCompressionMethod = mCDE.mCompressionMethod; + mLFH.mLastModFileTime = mCDE.mLastModFileTime; + mLFH.mLastModFileDate = mCDE.mLastModFileDate; + mLFH.mCRC32 = mCDE.mCRC32; + mLFH.mCompressedSize = mCDE.mCompressedSize; + mLFH.mUncompressedSize = mCDE.mUncompressedSize; + mLFH.mFileNameLength = mCDE.mFileNameLength; + // the "extra field" is independent + + delete[] mLFH.mFileName; + if (mLFH.mFileNameLength > 0) { + mLFH.mFileName = new unsigned char[mLFH.mFileNameLength+1]; + strcpy((char*) mLFH.mFileName, (const char*) mCDE.mFileName); + } else { + mLFH.mFileName = NULL; + } +} + +/* + * Set some information about a file after we add it. + */ +void ZipEntry::setDataInfo(long uncompLen, long compLen, unsigned long crc32, + int compressionMethod) +{ + mCDE.mCompressionMethod = compressionMethod; + mCDE.mCRC32 = crc32; + mCDE.mCompressedSize = compLen; + mCDE.mUncompressedSize = uncompLen; + mCDE.mCompressionMethod = compressionMethod; + if (compressionMethod == kCompressDeflated) { + mCDE.mGPBitFlag |= 0x0002; // indicates maximum compression used + } + copyCDEtoLFH(); +} + +/* + * See if the data in mCDE and mLFH match up. This is mostly useful for + * debugging these classes, but it can be used to identify damaged + * archives. + * + * Returns "false" if they differ. + */ +bool ZipEntry::compareHeaders(void) const +{ + if (mCDE.mVersionToExtract != mLFH.mVersionToExtract) { + ALOGV("cmp: VersionToExtract\n"); + return false; + } + if (mCDE.mGPBitFlag != mLFH.mGPBitFlag) { + ALOGV("cmp: GPBitFlag\n"); + return false; + } + if (mCDE.mCompressionMethod != mLFH.mCompressionMethod) { + ALOGV("cmp: CompressionMethod\n"); + return false; + } + if (mCDE.mLastModFileTime != mLFH.mLastModFileTime) { + ALOGV("cmp: LastModFileTime\n"); + return false; + } + if (mCDE.mLastModFileDate != mLFH.mLastModFileDate) { + ALOGV("cmp: LastModFileDate\n"); + return false; + } + if (mCDE.mCRC32 != mLFH.mCRC32) { + ALOGV("cmp: CRC32\n"); + return false; + } + if (mCDE.mCompressedSize != mLFH.mCompressedSize) { + ALOGV("cmp: CompressedSize\n"); + return false; + } + if (mCDE.mUncompressedSize != mLFH.mUncompressedSize) { + ALOGV("cmp: UncompressedSize\n"); + return false; + } + if (mCDE.mFileNameLength != mLFH.mFileNameLength) { + ALOGV("cmp: FileNameLength\n"); + return false; + } +#if 0 // this seems to be used for padding, not real data + if (mCDE.mExtraFieldLength != mLFH.mExtraFieldLength) { + ALOGV("cmp: ExtraFieldLength\n"); + return false; + } +#endif + if (mCDE.mFileName != NULL) { + if (strcmp((char*) mCDE.mFileName, (char*) mLFH.mFileName) != 0) { + ALOGV("cmp: FileName\n"); + return false; + } + } + + return true; +} + + +/* + * Convert the DOS date/time stamp into a UNIX time stamp. + */ +time_t ZipEntry::getModWhen(void) const +{ + struct tm parts; + + parts.tm_sec = (mCDE.mLastModFileTime & 0x001f) << 1; + parts.tm_min = (mCDE.mLastModFileTime & 0x07e0) >> 5; + parts.tm_hour = (mCDE.mLastModFileTime & 0xf800) >> 11; + parts.tm_mday = (mCDE.mLastModFileDate & 0x001f); + parts.tm_mon = ((mCDE.mLastModFileDate & 0x01e0) >> 5) -1; + parts.tm_year = ((mCDE.mLastModFileDate & 0xfe00) >> 9) + 80; + parts.tm_wday = parts.tm_yday = 0; + parts.tm_isdst = -1; // DST info "not available" + + return mktime(&parts); +} + +/* + * Set the CDE/LFH timestamp from UNIX time. + */ +void ZipEntry::setModWhen(time_t when) +{ +#ifdef HAVE_LOCALTIME_R + struct tm tmResult; +#endif + time_t even; + unsigned short zdate, ztime; + + struct tm* ptm; + + /* round up to an even number of seconds */ + even = (time_t)(((unsigned long)(when) + 1) & (~1)); + + /* expand */ +#ifdef HAVE_LOCALTIME_R + ptm = localtime_r(&even, &tmResult); +#else + ptm = localtime(&even); +#endif + + int year; + year = ptm->tm_year; + if (year < 80) + year = 80; + + zdate = (year - 80) << 9 | (ptm->tm_mon+1) << 5 | ptm->tm_mday; + ztime = ptm->tm_hour << 11 | ptm->tm_min << 5 | ptm->tm_sec >> 1; + + mCDE.mLastModFileTime = mLFH.mLastModFileTime = ztime; + mCDE.mLastModFileDate = mLFH.mLastModFileDate = zdate; +} + + +/* + * =========================================================================== + * ZipEntry::LocalFileHeader + * =========================================================================== + */ + +/* + * Read a local file header. + * + * On entry, "fp" points to the signature at the start of the header. + * On exit, "fp" points to the start of data. + */ +status_t ZipEntry::LocalFileHeader::read(FILE* fp) +{ + status_t result = NO_ERROR; + unsigned char buf[kLFHLen]; + + assert(mFileName == NULL); + assert(mExtraField == NULL); + + if (fread(buf, 1, kLFHLen, fp) != kLFHLen) { + result = UNKNOWN_ERROR; + goto bail; + } + + if (ZipEntry::getLongLE(&buf[0x00]) != kSignature) { + ALOGD("whoops: didn't find expected signature\n"); + result = UNKNOWN_ERROR; + goto bail; + } + + mVersionToExtract = ZipEntry::getShortLE(&buf[0x04]); + mGPBitFlag = ZipEntry::getShortLE(&buf[0x06]); + mCompressionMethod = ZipEntry::getShortLE(&buf[0x08]); + mLastModFileTime = ZipEntry::getShortLE(&buf[0x0a]); + mLastModFileDate = ZipEntry::getShortLE(&buf[0x0c]); + mCRC32 = ZipEntry::getLongLE(&buf[0x0e]); + mCompressedSize = ZipEntry::getLongLE(&buf[0x12]); + mUncompressedSize = ZipEntry::getLongLE(&buf[0x16]); + mFileNameLength = ZipEntry::getShortLE(&buf[0x1a]); + mExtraFieldLength = ZipEntry::getShortLE(&buf[0x1c]); + + // TODO: validate sizes + + /* grab filename */ + if (mFileNameLength != 0) { + mFileName = new unsigned char[mFileNameLength+1]; + if (mFileName == NULL) { + result = NO_MEMORY; + goto bail; + } + if (fread(mFileName, 1, mFileNameLength, fp) != mFileNameLength) { + result = UNKNOWN_ERROR; + goto bail; + } + mFileName[mFileNameLength] = '\0'; + } + + /* grab extra field */ + if (mExtraFieldLength != 0) { + mExtraField = new unsigned char[mExtraFieldLength+1]; + if (mExtraField == NULL) { + result = NO_MEMORY; + goto bail; + } + if (fread(mExtraField, 1, mExtraFieldLength, fp) != mExtraFieldLength) { + result = UNKNOWN_ERROR; + goto bail; + } + mExtraField[mExtraFieldLength] = '\0'; + } + +bail: + return result; +} + +/* + * Write a local file header. + */ +status_t ZipEntry::LocalFileHeader::write(FILE* fp) +{ + unsigned char buf[kLFHLen]; + + ZipEntry::putLongLE(&buf[0x00], kSignature); + ZipEntry::putShortLE(&buf[0x04], mVersionToExtract); + ZipEntry::putShortLE(&buf[0x06], mGPBitFlag); + ZipEntry::putShortLE(&buf[0x08], mCompressionMethod); + ZipEntry::putShortLE(&buf[0x0a], mLastModFileTime); + ZipEntry::putShortLE(&buf[0x0c], mLastModFileDate); + ZipEntry::putLongLE(&buf[0x0e], mCRC32); + ZipEntry::putLongLE(&buf[0x12], mCompressedSize); + ZipEntry::putLongLE(&buf[0x16], mUncompressedSize); + ZipEntry::putShortLE(&buf[0x1a], mFileNameLength); + ZipEntry::putShortLE(&buf[0x1c], mExtraFieldLength); + + if (fwrite(buf, 1, kLFHLen, fp) != kLFHLen) + return UNKNOWN_ERROR; + + /* write filename */ + if (mFileNameLength != 0) { + if (fwrite(mFileName, 1, mFileNameLength, fp) != mFileNameLength) + return UNKNOWN_ERROR; + } + + /* write "extra field" */ + if (mExtraFieldLength != 0) { + if (fwrite(mExtraField, 1, mExtraFieldLength, fp) != mExtraFieldLength) + return UNKNOWN_ERROR; + } + + return NO_ERROR; +} + + +/* + * Dump the contents of a LocalFileHeader object. + */ +void ZipEntry::LocalFileHeader::dump(void) const +{ + ALOGD(" LocalFileHeader contents:\n"); + ALOGD(" versToExt=%u gpBits=0x%04x compression=%u\n", + mVersionToExtract, mGPBitFlag, mCompressionMethod); + ALOGD(" modTime=0x%04x modDate=0x%04x crc32=0x%08lx\n", + mLastModFileTime, mLastModFileDate, mCRC32); + ALOGD(" compressedSize=%lu uncompressedSize=%lu\n", + mCompressedSize, mUncompressedSize); + ALOGD(" filenameLen=%u extraLen=%u\n", + mFileNameLength, mExtraFieldLength); + if (mFileName != NULL) + ALOGD(" filename: '%s'\n", mFileName); +} + + +/* + * =========================================================================== + * ZipEntry::CentralDirEntry + * =========================================================================== + */ + +/* + * Read the central dir entry that appears next in the file. + * + * On entry, "fp" should be positioned on the signature bytes for the + * entry. On exit, "fp" will point at the signature word for the next + * entry or for the EOCD. + */ +status_t ZipEntry::CentralDirEntry::read(FILE* fp) +{ + status_t result = NO_ERROR; + unsigned char buf[kCDELen]; + + /* no re-use */ + assert(mFileName == NULL); + assert(mExtraField == NULL); + assert(mFileComment == NULL); + + if (fread(buf, 1, kCDELen, fp) != kCDELen) { + result = UNKNOWN_ERROR; + goto bail; + } + + if (ZipEntry::getLongLE(&buf[0x00]) != kSignature) { + ALOGD("Whoops: didn't find expected signature\n"); + result = UNKNOWN_ERROR; + goto bail; + } + + mVersionMadeBy = ZipEntry::getShortLE(&buf[0x04]); + mVersionToExtract = ZipEntry::getShortLE(&buf[0x06]); + mGPBitFlag = ZipEntry::getShortLE(&buf[0x08]); + mCompressionMethod = ZipEntry::getShortLE(&buf[0x0a]); + mLastModFileTime = ZipEntry::getShortLE(&buf[0x0c]); + mLastModFileDate = ZipEntry::getShortLE(&buf[0x0e]); + mCRC32 = ZipEntry::getLongLE(&buf[0x10]); + mCompressedSize = ZipEntry::getLongLE(&buf[0x14]); + mUncompressedSize = ZipEntry::getLongLE(&buf[0x18]); + mFileNameLength = ZipEntry::getShortLE(&buf[0x1c]); + mExtraFieldLength = ZipEntry::getShortLE(&buf[0x1e]); + mFileCommentLength = ZipEntry::getShortLE(&buf[0x20]); + mDiskNumberStart = ZipEntry::getShortLE(&buf[0x22]); + mInternalAttrs = ZipEntry::getShortLE(&buf[0x24]); + mExternalAttrs = ZipEntry::getLongLE(&buf[0x26]); + mLocalHeaderRelOffset = ZipEntry::getLongLE(&buf[0x2a]); + + // TODO: validate sizes and offsets + + /* grab filename */ + if (mFileNameLength != 0) { + mFileName = new unsigned char[mFileNameLength+1]; + if (mFileName == NULL) { + result = NO_MEMORY; + goto bail; + } + if (fread(mFileName, 1, mFileNameLength, fp) != mFileNameLength) { + result = UNKNOWN_ERROR; + goto bail; + } + mFileName[mFileNameLength] = '\0'; + } + + /* read "extra field" */ + if (mExtraFieldLength != 0) { + mExtraField = new unsigned char[mExtraFieldLength+1]; + if (mExtraField == NULL) { + result = NO_MEMORY; + goto bail; + } + if (fread(mExtraField, 1, mExtraFieldLength, fp) != mExtraFieldLength) { + result = UNKNOWN_ERROR; + goto bail; + } + mExtraField[mExtraFieldLength] = '\0'; + } + + + /* grab comment, if any */ + if (mFileCommentLength != 0) { + mFileComment = new unsigned char[mFileCommentLength+1]; + if (mFileComment == NULL) { + result = NO_MEMORY; + goto bail; + } + if (fread(mFileComment, 1, mFileCommentLength, fp) != mFileCommentLength) + { + result = UNKNOWN_ERROR; + goto bail; + } + mFileComment[mFileCommentLength] = '\0'; + } + +bail: + return result; +} + +/* + * Write a central dir entry. + */ +status_t ZipEntry::CentralDirEntry::write(FILE* fp) +{ + unsigned char buf[kCDELen]; + + ZipEntry::putLongLE(&buf[0x00], kSignature); + ZipEntry::putShortLE(&buf[0x04], mVersionMadeBy); + ZipEntry::putShortLE(&buf[0x06], mVersionToExtract); + ZipEntry::putShortLE(&buf[0x08], mGPBitFlag); + ZipEntry::putShortLE(&buf[0x0a], mCompressionMethod); + ZipEntry::putShortLE(&buf[0x0c], mLastModFileTime); + ZipEntry::putShortLE(&buf[0x0e], mLastModFileDate); + ZipEntry::putLongLE(&buf[0x10], mCRC32); + ZipEntry::putLongLE(&buf[0x14], mCompressedSize); + ZipEntry::putLongLE(&buf[0x18], mUncompressedSize); + ZipEntry::putShortLE(&buf[0x1c], mFileNameLength); + ZipEntry::putShortLE(&buf[0x1e], mExtraFieldLength); + ZipEntry::putShortLE(&buf[0x20], mFileCommentLength); + ZipEntry::putShortLE(&buf[0x22], mDiskNumberStart); + ZipEntry::putShortLE(&buf[0x24], mInternalAttrs); + ZipEntry::putLongLE(&buf[0x26], mExternalAttrs); + ZipEntry::putLongLE(&buf[0x2a], mLocalHeaderRelOffset); + + if (fwrite(buf, 1, kCDELen, fp) != kCDELen) + return UNKNOWN_ERROR; + + /* write filename */ + if (mFileNameLength != 0) { + if (fwrite(mFileName, 1, mFileNameLength, fp) != mFileNameLength) + return UNKNOWN_ERROR; + } + + /* write "extra field" */ + if (mExtraFieldLength != 0) { + if (fwrite(mExtraField, 1, mExtraFieldLength, fp) != mExtraFieldLength) + return UNKNOWN_ERROR; + } + + /* write comment */ + if (mFileCommentLength != 0) { + if (fwrite(mFileComment, 1, mFileCommentLength, fp) != mFileCommentLength) + return UNKNOWN_ERROR; + } + + return NO_ERROR; +} + +/* + * Dump the contents of a CentralDirEntry object. + */ +void ZipEntry::CentralDirEntry::dump(void) const +{ + ALOGD(" CentralDirEntry contents:\n"); + ALOGD(" versMadeBy=%u versToExt=%u gpBits=0x%04x compression=%u\n", + mVersionMadeBy, mVersionToExtract, mGPBitFlag, mCompressionMethod); + ALOGD(" modTime=0x%04x modDate=0x%04x crc32=0x%08lx\n", + mLastModFileTime, mLastModFileDate, mCRC32); + ALOGD(" compressedSize=%lu uncompressedSize=%lu\n", + mCompressedSize, mUncompressedSize); + ALOGD(" filenameLen=%u extraLen=%u commentLen=%u\n", + mFileNameLength, mExtraFieldLength, mFileCommentLength); + ALOGD(" diskNumStart=%u intAttr=0x%04x extAttr=0x%08lx relOffset=%lu\n", + mDiskNumberStart, mInternalAttrs, mExternalAttrs, + mLocalHeaderRelOffset); + + if (mFileName != NULL) + ALOGD(" filename: '%s'\n", mFileName); + if (mFileComment != NULL) + ALOGD(" comment: '%s'\n", mFileComment); +} + diff --git a/tools/aapt/ZipEntry.h b/tools/aapt/ZipEntry.h new file mode 100644 index 0000000000000..c2f3227cf230b --- /dev/null +++ b/tools/aapt/ZipEntry.h @@ -0,0 +1,345 @@ +/* + * Copyright (C) 2006 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// +// Zip archive entries. +// +// The ZipEntry class is tightly meshed with the ZipFile class. +// +#ifndef __LIBS_ZIPENTRY_H +#define __LIBS_ZIPENTRY_H + +#include + +#include +#include + +namespace android { + +class ZipFile; + +/* + * ZipEntry objects represent a single entry in a Zip archive. + * + * You can use one of these to get or set information about an entry, but + * there are no functions here for accessing the data itself. (We could + * tuck a pointer to the ZipFile in here for convenience, but that raises + * the likelihood of using ZipEntry objects after discarding the ZipFile.) + * + * File information is stored in two places: next to the file data (the Local + * File Header, and possibly a Data Descriptor), and at the end of the file + * (the Central Directory Entry). The two must be kept in sync. + */ +class ZipEntry { +public: + friend class ZipFile; + + ZipEntry(void) + : mDeleted(false), mMarked(false) + {} + ~ZipEntry(void) {} + + /* + * Returns "true" if the data is compressed. + */ + bool isCompressed(void) const { + return mCDE.mCompressionMethod != kCompressStored; + } + int getCompressionMethod(void) const { return mCDE.mCompressionMethod; } + + /* + * Return the uncompressed length. + */ + off_t getUncompressedLen(void) const { return mCDE.mUncompressedSize; } + + /* + * Return the compressed length. For uncompressed data, this returns + * the same thing as getUncompresesdLen(). + */ + off_t getCompressedLen(void) const { return mCDE.mCompressedSize; } + + /* + * Return the offset of the local file header. + */ + off_t getLFHOffset(void) const { return mCDE.mLocalHeaderRelOffset; } + + /* + * Return the absolute file offset of the start of the compressed or + * uncompressed data. + */ + off_t getFileOffset(void) const { + return mCDE.mLocalHeaderRelOffset + + LocalFileHeader::kLFHLen + + mLFH.mFileNameLength + + mLFH.mExtraFieldLength; + } + + /* + * Return the data CRC. + */ + unsigned long getCRC32(void) const { return mCDE.mCRC32; } + + /* + * Return file modification time in UNIX seconds-since-epoch. + */ + time_t getModWhen(void) const; + + /* + * Return the archived file name. + */ + const char* getFileName(void) const { return (const char*) mCDE.mFileName; } + + /* + * Application-defined "mark". Can be useful when synchronizing the + * contents of an archive with contents on disk. + */ + bool getMarked(void) const { return mMarked; } + void setMarked(bool val) { mMarked = val; } + + /* + * Some basic functions for raw data manipulation. "LE" means + * Little Endian. + */ + static inline unsigned short getShortLE(const unsigned char* buf) { + return buf[0] | (buf[1] << 8); + } + static inline unsigned long getLongLE(const unsigned char* buf) { + return buf[0] | (buf[1] << 8) | (buf[2] << 16) | (buf[3] << 24); + } + static inline void putShortLE(unsigned char* buf, short val) { + buf[0] = (unsigned char) val; + buf[1] = (unsigned char) (val >> 8); + } + static inline void putLongLE(unsigned char* buf, long val) { + buf[0] = (unsigned char) val; + buf[1] = (unsigned char) (val >> 8); + buf[2] = (unsigned char) (val >> 16); + buf[3] = (unsigned char) (val >> 24); + } + + /* defined for Zip archives */ + enum { + kCompressStored = 0, // no compression + // shrunk = 1, + // reduced 1 = 2, + // reduced 2 = 3, + // reduced 3 = 4, + // reduced 4 = 5, + // imploded = 6, + // tokenized = 7, + kCompressDeflated = 8, // standard deflate + // Deflate64 = 9, + // lib imploded = 10, + // reserved = 11, + // bzip2 = 12, + }; + + /* + * Deletion flag. If set, the entry will be removed on the next + * call to "flush". + */ + bool getDeleted(void) const { return mDeleted; } + +protected: + /* + * Initialize the structure from the file, which is pointing at + * our Central Directory entry. + */ + status_t initFromCDE(FILE* fp); + + /* + * Initialize the structure for a new file. We need the filename + * and comment so that we can properly size the LFH area. The + * filename is mandatory, the comment is optional. + */ + void initNew(const char* fileName, const char* comment); + + /* + * Initialize the structure with the contents of a ZipEntry from + * another file. + */ + status_t initFromExternal(const ZipFile* pZipFile, const ZipEntry* pEntry); + + /* + * Add some pad bytes to the LFH. We do this by adding or resizing + * the "extra" field. + */ + status_t addPadding(int padding); + + /* + * Set information about the data for this entry. + */ + void setDataInfo(long uncompLen, long compLen, unsigned long crc32, + int compressionMethod); + + /* + * Set the modification date. + */ + void setModWhen(time_t when); + + /* + * Set the offset of the local file header, relative to the start of + * the current file. + */ + void setLFHOffset(off_t offset) { + mCDE.mLocalHeaderRelOffset = (long) offset; + } + + /* mark for deletion; used by ZipFile::remove() */ + void setDeleted(void) { mDeleted = true; } + +private: + /* these are private and not defined */ + ZipEntry(const ZipEntry& src); + ZipEntry& operator=(const ZipEntry& src); + + /* returns "true" if the CDE and the LFH agree */ + bool compareHeaders(void) const; + void copyCDEtoLFH(void); + + bool mDeleted; // set if entry is pending deletion + bool mMarked; // app-defined marker + + /* + * Every entry in the Zip archive starts off with one of these. + */ + class LocalFileHeader { + public: + LocalFileHeader(void) : + mVersionToExtract(0), + mGPBitFlag(0), + mCompressionMethod(0), + mLastModFileTime(0), + mLastModFileDate(0), + mCRC32(0), + mCompressedSize(0), + mUncompressedSize(0), + mFileNameLength(0), + mExtraFieldLength(0), + mFileName(NULL), + mExtraField(NULL) + {} + virtual ~LocalFileHeader(void) { + delete[] mFileName; + delete[] mExtraField; + } + + status_t read(FILE* fp); + status_t write(FILE* fp); + + // unsigned long mSignature; + unsigned short mVersionToExtract; + unsigned short mGPBitFlag; + unsigned short mCompressionMethod; + unsigned short mLastModFileTime; + unsigned short mLastModFileDate; + unsigned long mCRC32; + unsigned long mCompressedSize; + unsigned long mUncompressedSize; + unsigned short mFileNameLength; + unsigned short mExtraFieldLength; + unsigned char* mFileName; + unsigned char* mExtraField; + + enum { + kSignature = 0x04034b50, + kLFHLen = 30, // LocalFileHdr len, excl. var fields + }; + + void dump(void) const; + }; + + /* + * Every entry in the Zip archive has one of these in the "central + * directory" at the end of the file. + */ + class CentralDirEntry { + public: + CentralDirEntry(void) : + mVersionMadeBy(0), + mVersionToExtract(0), + mGPBitFlag(0), + mCompressionMethod(0), + mLastModFileTime(0), + mLastModFileDate(0), + mCRC32(0), + mCompressedSize(0), + mUncompressedSize(0), + mFileNameLength(0), + mExtraFieldLength(0), + mFileCommentLength(0), + mDiskNumberStart(0), + mInternalAttrs(0), + mExternalAttrs(0), + mLocalHeaderRelOffset(0), + mFileName(NULL), + mExtraField(NULL), + mFileComment(NULL) + {} + virtual ~CentralDirEntry(void) { + delete[] mFileName; + delete[] mExtraField; + delete[] mFileComment; + } + + status_t read(FILE* fp); + status_t write(FILE* fp); + + // unsigned long mSignature; + unsigned short mVersionMadeBy; + unsigned short mVersionToExtract; + unsigned short mGPBitFlag; + unsigned short mCompressionMethod; + unsigned short mLastModFileTime; + unsigned short mLastModFileDate; + unsigned long mCRC32; + unsigned long mCompressedSize; + unsigned long mUncompressedSize; + unsigned short mFileNameLength; + unsigned short mExtraFieldLength; + unsigned short mFileCommentLength; + unsigned short mDiskNumberStart; + unsigned short mInternalAttrs; + unsigned long mExternalAttrs; + unsigned long mLocalHeaderRelOffset; + unsigned char* mFileName; + unsigned char* mExtraField; + unsigned char* mFileComment; + + void dump(void) const; + + enum { + kSignature = 0x02014b50, + kCDELen = 46, // CentralDirEnt len, excl. var fields + }; + }; + + enum { + //kDataDescriptorSignature = 0x08074b50, // currently unused + kDataDescriptorLen = 16, // four 32-bit fields + + kDefaultVersion = 20, // need deflate, nothing much else + kDefaultMadeBy = 0x0317, // 03=UNIX, 17=spec v2.3 + kUsesDataDescr = 0x0008, // GPBitFlag bit 3 + }; + + LocalFileHeader mLFH; + CentralDirEntry mCDE; +}; + +}; // namespace android + +#endif // __LIBS_ZIPENTRY_H diff --git a/tools/aapt/ZipFile.cpp b/tools/aapt/ZipFile.cpp new file mode 100644 index 0000000000000..8057068dd685f --- /dev/null +++ b/tools/aapt/ZipFile.cpp @@ -0,0 +1,1297 @@ +/* + * Copyright (C) 2006 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// +// Access to Zip archives. +// + +#define LOG_TAG "zip" + +#include +#include + +#include "ZipFile.h" + +#include +#define DEF_MEM_LEVEL 8 // normally in zutil.h? + +#include +#include +#include +#include + +using namespace android; + +/* + * Some environments require the "b", some choke on it. + */ +#define FILE_OPEN_RO "rb" +#define FILE_OPEN_RW "r+b" +#define FILE_OPEN_RW_CREATE "w+b" + +/* should live somewhere else? */ +static status_t errnoToStatus(int err) +{ + if (err == ENOENT) + return NAME_NOT_FOUND; + else if (err == EACCES) + return PERMISSION_DENIED; + else + return UNKNOWN_ERROR; +} + +/* + * Open a file and parse its guts. + */ +status_t ZipFile::open(const char* zipFileName, int flags) +{ + bool newArchive = false; + + assert(mZipFp == NULL); // no reopen + + if ((flags & kOpenTruncate)) + flags |= kOpenCreate; // trunc implies create + + if ((flags & kOpenReadOnly) && (flags & kOpenReadWrite)) + return INVALID_OPERATION; // not both + if (!((flags & kOpenReadOnly) || (flags & kOpenReadWrite))) + return INVALID_OPERATION; // not neither + if ((flags & kOpenCreate) && !(flags & kOpenReadWrite)) + return INVALID_OPERATION; // create requires write + + if (flags & kOpenTruncate) { + newArchive = true; + } else { + newArchive = (access(zipFileName, F_OK) != 0); + if (!(flags & kOpenCreate) && newArchive) { + /* not creating, must already exist */ + ALOGD("File %s does not exist", zipFileName); + return NAME_NOT_FOUND; + } + } + + /* open the file */ + const char* openflags; + if (flags & kOpenReadWrite) { + if (newArchive) + openflags = FILE_OPEN_RW_CREATE; + else + openflags = FILE_OPEN_RW; + } else { + openflags = FILE_OPEN_RO; + } + mZipFp = fopen(zipFileName, openflags); + if (mZipFp == NULL) { + int err = errno; + ALOGD("fopen failed: %d\n", err); + return errnoToStatus(err); + } + + status_t result; + if (!newArchive) { + /* + * Load the central directory. If that fails, then this probably + * isn't a Zip archive. + */ + result = readCentralDir(); + } else { + /* + * Newly-created. The EndOfCentralDir constructor actually + * sets everything to be the way we want it (all zeroes). We + * set mNeedCDRewrite so that we create *something* if the + * caller doesn't add any files. (We could also just unlink + * the file if it's brand new and nothing was added, but that's + * probably doing more than we really should -- the user might + * have a need for empty zip files.) + */ + mNeedCDRewrite = true; + result = NO_ERROR; + } + + if (flags & kOpenReadOnly) + mReadOnly = true; + else + assert(!mReadOnly); + + return result; +} + +/* + * Return the Nth entry in the archive. + */ +ZipEntry* ZipFile::getEntryByIndex(int idx) const +{ + if (idx < 0 || idx >= (int) mEntries.size()) + return NULL; + + return mEntries[idx]; +} + +/* + * Find an entry by name. + */ +ZipEntry* ZipFile::getEntryByName(const char* fileName) const +{ + /* + * Do a stupid linear string-compare search. + * + * There are various ways to speed this up, especially since it's rare + * to intermingle changes to the archive with "get by name" calls. We + * don't want to sort the mEntries vector itself, however, because + * it's used to recreate the Central Directory. + * + * (Hash table works, parallel list of pointers in sorted order is good.) + */ + int idx; + + for (idx = mEntries.size()-1; idx >= 0; idx--) { + ZipEntry* pEntry = mEntries[idx]; + if (!pEntry->getDeleted() && + strcmp(fileName, pEntry->getFileName()) == 0) + { + return pEntry; + } + } + + return NULL; +} + +/* + * Empty the mEntries vector. + */ +void ZipFile::discardEntries(void) +{ + int count = mEntries.size(); + + while (--count >= 0) + delete mEntries[count]; + + mEntries.clear(); +} + + +/* + * Find the central directory and read the contents. + * + * The fun thing about ZIP archives is that they may or may not be + * readable from start to end. In some cases, notably for archives + * that were written to stdout, the only length information is in the + * central directory at the end of the file. + * + * Of course, the central directory can be followed by a variable-length + * comment field, so we have to scan through it backwards. The comment + * is at most 64K, plus we have 18 bytes for the end-of-central-dir stuff + * itself, plus apparently sometimes people throw random junk on the end + * just for the fun of it. + * + * This is all a little wobbly. If the wrong value ends up in the EOCD + * area, we're hosed. This appears to be the way that everbody handles + * it though, so we're in pretty good company if this fails. + */ +status_t ZipFile::readCentralDir(void) +{ + status_t result = NO_ERROR; + unsigned char* buf = NULL; + off_t fileLength, seekStart; + long readAmount; + int i; + + fseek(mZipFp, 0, SEEK_END); + fileLength = ftell(mZipFp); + rewind(mZipFp); + + /* too small to be a ZIP archive? */ + if (fileLength < EndOfCentralDir::kEOCDLen) { + ALOGD("Length is %ld -- too small\n", (long)fileLength); + result = INVALID_OPERATION; + goto bail; + } + + buf = new unsigned char[EndOfCentralDir::kMaxEOCDSearch]; + if (buf == NULL) { + ALOGD("Failure allocating %d bytes for EOCD search", + EndOfCentralDir::kMaxEOCDSearch); + result = NO_MEMORY; + goto bail; + } + + if (fileLength > EndOfCentralDir::kMaxEOCDSearch) { + seekStart = fileLength - EndOfCentralDir::kMaxEOCDSearch; + readAmount = EndOfCentralDir::kMaxEOCDSearch; + } else { + seekStart = 0; + readAmount = (long) fileLength; + } + if (fseek(mZipFp, seekStart, SEEK_SET) != 0) { + ALOGD("Failure seeking to end of zip at %ld", (long) seekStart); + result = UNKNOWN_ERROR; + goto bail; + } + + /* read the last part of the file into the buffer */ + if (fread(buf, 1, readAmount, mZipFp) != (size_t) readAmount) { + ALOGD("short file? wanted %ld\n", readAmount); + result = UNKNOWN_ERROR; + goto bail; + } + + /* find the end-of-central-dir magic */ + for (i = readAmount - 4; i >= 0; i--) { + if (buf[i] == 0x50 && + ZipEntry::getLongLE(&buf[i]) == EndOfCentralDir::kSignature) + { + ALOGV("+++ Found EOCD at buf+%d\n", i); + break; + } + } + if (i < 0) { + ALOGD("EOCD not found, not Zip\n"); + result = INVALID_OPERATION; + goto bail; + } + + /* extract eocd values */ + result = mEOCD.readBuf(buf + i, readAmount - i); + if (result != NO_ERROR) { + ALOGD("Failure reading %ld bytes of EOCD values", readAmount - i); + goto bail; + } + //mEOCD.dump(); + + if (mEOCD.mDiskNumber != 0 || mEOCD.mDiskWithCentralDir != 0 || + mEOCD.mNumEntries != mEOCD.mTotalNumEntries) + { + ALOGD("Archive spanning not supported\n"); + result = INVALID_OPERATION; + goto bail; + } + + /* + * So far so good. "mCentralDirSize" is the size in bytes of the + * central directory, so we can just seek back that far to find it. + * We can also seek forward mCentralDirOffset bytes from the + * start of the file. + * + * We're not guaranteed to have the rest of the central dir in the + * buffer, nor are we guaranteed that the central dir will have any + * sort of convenient size. We need to skip to the start of it and + * read the header, then the other goodies. + * + * The only thing we really need right now is the file comment, which + * we're hoping to preserve. + */ + if (fseek(mZipFp, mEOCD.mCentralDirOffset, SEEK_SET) != 0) { + ALOGD("Failure seeking to central dir offset %ld\n", + mEOCD.mCentralDirOffset); + result = UNKNOWN_ERROR; + goto bail; + } + + /* + * Loop through and read the central dir entries. + */ + ALOGV("Scanning %d entries...\n", mEOCD.mTotalNumEntries); + int entry; + for (entry = 0; entry < mEOCD.mTotalNumEntries; entry++) { + ZipEntry* pEntry = new ZipEntry; + + result = pEntry->initFromCDE(mZipFp); + if (result != NO_ERROR) { + ALOGD("initFromCDE failed\n"); + delete pEntry; + goto bail; + } + + mEntries.add(pEntry); + } + + + /* + * If all went well, we should now be back at the EOCD. + */ + { + unsigned char checkBuf[4]; + if (fread(checkBuf, 1, 4, mZipFp) != 4) { + ALOGD("EOCD check read failed\n"); + result = INVALID_OPERATION; + goto bail; + } + if (ZipEntry::getLongLE(checkBuf) != EndOfCentralDir::kSignature) { + ALOGD("EOCD read check failed\n"); + result = UNKNOWN_ERROR; + goto bail; + } + ALOGV("+++ EOCD read check passed\n"); + } + +bail: + delete[] buf; + return result; +} + + +/* + * Add a new file to the archive. + * + * This requires creating and populating a ZipEntry structure, and copying + * the data into the file at the appropriate position. The "appropriate + * position" is the current location of the central directory, which we + * casually overwrite (we can put it back later). + * + * If we were concerned about safety, we would want to make all changes + * in a temp file and then overwrite the original after everything was + * safely written. Not really a concern for us. + */ +status_t ZipFile::addCommon(const char* fileName, const void* data, size_t size, + const char* storageName, int sourceType, int compressionMethod, + ZipEntry** ppEntry) +{ + ZipEntry* pEntry = NULL; + status_t result = NO_ERROR; + long lfhPosn, startPosn, endPosn, uncompressedLen; + FILE* inputFp = NULL; + unsigned long crc; + time_t modWhen; + + if (mReadOnly) + return INVALID_OPERATION; + + assert(compressionMethod == ZipEntry::kCompressDeflated || + compressionMethod == ZipEntry::kCompressStored); + + /* make sure we're in a reasonable state */ + assert(mZipFp != NULL); + assert(mEntries.size() == mEOCD.mTotalNumEntries); + + /* make sure it doesn't already exist */ + if (getEntryByName(storageName) != NULL) + return ALREADY_EXISTS; + + if (!data) { + inputFp = fopen(fileName, FILE_OPEN_RO); + if (inputFp == NULL) + return errnoToStatus(errno); + } + + if (fseek(mZipFp, mEOCD.mCentralDirOffset, SEEK_SET) != 0) { + result = UNKNOWN_ERROR; + goto bail; + } + + pEntry = new ZipEntry; + pEntry->initNew(storageName, NULL); + + /* + * From here on out, failures are more interesting. + */ + mNeedCDRewrite = true; + + /* + * Write the LFH, even though it's still mostly blank. We need it + * as a place-holder. In theory the LFH isn't necessary, but in + * practice some utilities demand it. + */ + lfhPosn = ftell(mZipFp); + pEntry->mLFH.write(mZipFp); + startPosn = ftell(mZipFp); + + /* + * Copy the data in, possibly compressing it as we go. + */ + if (sourceType == ZipEntry::kCompressStored) { + if (compressionMethod == ZipEntry::kCompressDeflated) { + bool failed = false; + result = compressFpToFp(mZipFp, inputFp, data, size, &crc); + if (result != NO_ERROR) { + ALOGD("compression failed, storing\n"); + failed = true; + } else { + /* + * Make sure it has compressed "enough". This probably ought + * to be set through an API call, but I don't expect our + * criteria to change over time. + */ + long src = inputFp ? ftell(inputFp) : size; + long dst = ftell(mZipFp) - startPosn; + if (dst + (dst / 10) > src) { + ALOGD("insufficient compression (src=%ld dst=%ld), storing\n", + src, dst); + failed = true; + } + } + + if (failed) { + compressionMethod = ZipEntry::kCompressStored; + if (inputFp) rewind(inputFp); + fseek(mZipFp, startPosn, SEEK_SET); + /* fall through to kCompressStored case */ + } + } + /* handle "no compression" request, or failed compression from above */ + if (compressionMethod == ZipEntry::kCompressStored) { + if (inputFp) { + result = copyFpToFp(mZipFp, inputFp, &crc); + } else { + result = copyDataToFp(mZipFp, data, size, &crc); + } + if (result != NO_ERROR) { + // don't need to truncate; happens in CDE rewrite + ALOGD("failed copying data in\n"); + goto bail; + } + } + + // currently seeked to end of file + uncompressedLen = inputFp ? ftell(inputFp) : size; + } else if (sourceType == ZipEntry::kCompressDeflated) { + /* we should support uncompressed-from-compressed, but it's not + * important right now */ + assert(compressionMethod == ZipEntry::kCompressDeflated); + + bool scanResult; + int method; + long compressedLen; + + scanResult = ZipUtils::examineGzip(inputFp, &method, &uncompressedLen, + &compressedLen, &crc); + if (!scanResult || method != ZipEntry::kCompressDeflated) { + ALOGD("this isn't a deflated gzip file?"); + result = UNKNOWN_ERROR; + goto bail; + } + + result = copyPartialFpToFp(mZipFp, inputFp, compressedLen, NULL); + if (result != NO_ERROR) { + ALOGD("failed copying gzip data in\n"); + goto bail; + } + } else { + assert(false); + result = UNKNOWN_ERROR; + goto bail; + } + + /* + * We could write the "Data Descriptor", but there doesn't seem to + * be any point since we're going to go back and write the LFH. + * + * Update file offsets. + */ + endPosn = ftell(mZipFp); // seeked to end of compressed data + + /* + * Success! Fill out new values. + */ + pEntry->setDataInfo(uncompressedLen, endPosn - startPosn, crc, + compressionMethod); + modWhen = getModTime(inputFp ? fileno(inputFp) : fileno(mZipFp)); + pEntry->setModWhen(modWhen); + pEntry->setLFHOffset(lfhPosn); + mEOCD.mNumEntries++; + mEOCD.mTotalNumEntries++; + mEOCD.mCentralDirSize = 0; // mark invalid; set by flush() + mEOCD.mCentralDirOffset = endPosn; + + /* + * Go back and write the LFH. + */ + if (fseek(mZipFp, lfhPosn, SEEK_SET) != 0) { + result = UNKNOWN_ERROR; + goto bail; + } + pEntry->mLFH.write(mZipFp); + + /* + * Add pEntry to the list. + */ + mEntries.add(pEntry); + if (ppEntry != NULL) + *ppEntry = pEntry; + pEntry = NULL; + +bail: + if (inputFp != NULL) + fclose(inputFp); + delete pEntry; + return result; +} + +/* + * Add an entry by copying it from another zip file. If "padding" is + * nonzero, the specified number of bytes will be added to the "extra" + * field in the header. + * + * If "ppEntry" is non-NULL, a pointer to the new entry will be returned. + */ +status_t ZipFile::add(const ZipFile* pSourceZip, const ZipEntry* pSourceEntry, + int padding, ZipEntry** ppEntry) +{ + ZipEntry* pEntry = NULL; + status_t result; + long lfhPosn, endPosn; + + if (mReadOnly) + return INVALID_OPERATION; + + /* make sure we're in a reasonable state */ + assert(mZipFp != NULL); + assert(mEntries.size() == mEOCD.mTotalNumEntries); + + if (fseek(mZipFp, mEOCD.mCentralDirOffset, SEEK_SET) != 0) { + result = UNKNOWN_ERROR; + goto bail; + } + + pEntry = new ZipEntry; + if (pEntry == NULL) { + result = NO_MEMORY; + goto bail; + } + + result = pEntry->initFromExternal(pSourceZip, pSourceEntry); + if (result != NO_ERROR) + goto bail; + if (padding != 0) { + result = pEntry->addPadding(padding); + if (result != NO_ERROR) + goto bail; + } + + /* + * From here on out, failures are more interesting. + */ + mNeedCDRewrite = true; + + /* + * Write the LFH. Since we're not recompressing the data, we already + * have all of the fields filled out. + */ + lfhPosn = ftell(mZipFp); + pEntry->mLFH.write(mZipFp); + + /* + * Copy the data over. + * + * If the "has data descriptor" flag is set, we want to copy the DD + * fields as well. This is a fixed-size area immediately following + * the data. + */ + if (fseek(pSourceZip->mZipFp, pSourceEntry->getFileOffset(), SEEK_SET) != 0) + { + result = UNKNOWN_ERROR; + goto bail; + } + + off_t copyLen; + copyLen = pSourceEntry->getCompressedLen(); + if ((pSourceEntry->mLFH.mGPBitFlag & ZipEntry::kUsesDataDescr) != 0) + copyLen += ZipEntry::kDataDescriptorLen; + + if (copyPartialFpToFp(mZipFp, pSourceZip->mZipFp, copyLen, NULL) + != NO_ERROR) + { + ALOGW("copy of '%s' failed\n", pEntry->mCDE.mFileName); + result = UNKNOWN_ERROR; + goto bail; + } + + /* + * Update file offsets. + */ + endPosn = ftell(mZipFp); + + /* + * Success! Fill out new values. + */ + pEntry->setLFHOffset(lfhPosn); // sets mCDE.mLocalHeaderRelOffset + mEOCD.mNumEntries++; + mEOCD.mTotalNumEntries++; + mEOCD.mCentralDirSize = 0; // mark invalid; set by flush() + mEOCD.mCentralDirOffset = endPosn; + + /* + * Add pEntry to the list. + */ + mEntries.add(pEntry); + if (ppEntry != NULL) + *ppEntry = pEntry; + pEntry = NULL; + + result = NO_ERROR; + +bail: + delete pEntry; + return result; +} + +/* + * Copy all of the bytes in "src" to "dst". + * + * On exit, "srcFp" will be seeked to the end of the file, and "dstFp" + * will be seeked immediately past the data. + */ +status_t ZipFile::copyFpToFp(FILE* dstFp, FILE* srcFp, unsigned long* pCRC32) +{ + unsigned char tmpBuf[32768]; + size_t count; + + *pCRC32 = crc32(0L, Z_NULL, 0); + + while (1) { + count = fread(tmpBuf, 1, sizeof(tmpBuf), srcFp); + if (ferror(srcFp) || ferror(dstFp)) + return errnoToStatus(errno); + if (count == 0) + break; + + *pCRC32 = crc32(*pCRC32, tmpBuf, count); + + if (fwrite(tmpBuf, 1, count, dstFp) != count) { + ALOGD("fwrite %d bytes failed\n", (int) count); + return UNKNOWN_ERROR; + } + } + + return NO_ERROR; +} + +/* + * Copy all of the bytes in "src" to "dst". + * + * On exit, "dstFp" will be seeked immediately past the data. + */ +status_t ZipFile::copyDataToFp(FILE* dstFp, + const void* data, size_t size, unsigned long* pCRC32) +{ + size_t count; + + *pCRC32 = crc32(0L, Z_NULL, 0); + if (size > 0) { + *pCRC32 = crc32(*pCRC32, (const unsigned char*)data, size); + if (fwrite(data, 1, size, dstFp) != size) { + ALOGD("fwrite %d bytes failed\n", (int) size); + return UNKNOWN_ERROR; + } + } + + return NO_ERROR; +} + +/* + * Copy some of the bytes in "src" to "dst". + * + * If "pCRC32" is NULL, the CRC will not be computed. + * + * On exit, "srcFp" will be seeked to the end of the file, and "dstFp" + * will be seeked immediately past the data just written. + */ +status_t ZipFile::copyPartialFpToFp(FILE* dstFp, FILE* srcFp, long length, + unsigned long* pCRC32) +{ + unsigned char tmpBuf[32768]; + size_t count; + + if (pCRC32 != NULL) + *pCRC32 = crc32(0L, Z_NULL, 0); + + while (length) { + long readSize; + + readSize = sizeof(tmpBuf); + if (readSize > length) + readSize = length; + + count = fread(tmpBuf, 1, readSize, srcFp); + if ((long) count != readSize) { // error or unexpected EOF + ALOGD("fread %d bytes failed\n", (int) readSize); + return UNKNOWN_ERROR; + } + + if (pCRC32 != NULL) + *pCRC32 = crc32(*pCRC32, tmpBuf, count); + + if (fwrite(tmpBuf, 1, count, dstFp) != count) { + ALOGD("fwrite %d bytes failed\n", (int) count); + return UNKNOWN_ERROR; + } + + length -= readSize; + } + + return NO_ERROR; +} + +/* + * Compress all of the data in "srcFp" and write it to "dstFp". + * + * On exit, "srcFp" will be seeked to the end of the file, and "dstFp" + * will be seeked immediately past the compressed data. + */ +status_t ZipFile::compressFpToFp(FILE* dstFp, FILE* srcFp, + const void* data, size_t size, unsigned long* pCRC32) +{ + status_t result = NO_ERROR; + const size_t kBufSize = 32768; + unsigned char* inBuf = NULL; + unsigned char* outBuf = NULL; + z_stream zstream; + bool atEof = false; // no feof() aviailable yet + unsigned long crc; + int zerr; + + /* + * Create an input buffer and an output buffer. + */ + inBuf = new unsigned char[kBufSize]; + outBuf = new unsigned char[kBufSize]; + if (inBuf == NULL || outBuf == NULL) { + result = NO_MEMORY; + goto bail; + } + + /* + * Initialize the zlib stream. + */ + memset(&zstream, 0, sizeof(zstream)); + zstream.zalloc = Z_NULL; + zstream.zfree = Z_NULL; + zstream.opaque = Z_NULL; + zstream.next_in = NULL; + zstream.avail_in = 0; + zstream.next_out = outBuf; + zstream.avail_out = kBufSize; + zstream.data_type = Z_UNKNOWN; + + zerr = deflateInit2(&zstream, Z_BEST_COMPRESSION, + Z_DEFLATED, -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY); + if (zerr != Z_OK) { + result = UNKNOWN_ERROR; + if (zerr == Z_VERSION_ERROR) { + ALOGE("Installed zlib is not compatible with linked version (%s)\n", + ZLIB_VERSION); + } else { + ALOGD("Call to deflateInit2 failed (zerr=%d)\n", zerr); + } + goto bail; + } + + crc = crc32(0L, Z_NULL, 0); + + /* + * Loop while we have data. + */ + do { + size_t getSize; + int flush; + + /* only read if the input buffer is empty */ + if (zstream.avail_in == 0 && !atEof) { + ALOGV("+++ reading %d bytes\n", (int)kBufSize); + if (data) { + getSize = size > kBufSize ? kBufSize : size; + memcpy(inBuf, data, getSize); + data = ((const char*)data) + getSize; + size -= getSize; + } else { + getSize = fread(inBuf, 1, kBufSize, srcFp); + if (ferror(srcFp)) { + ALOGD("deflate read failed (errno=%d)\n", errno); + goto z_bail; + } + } + if (getSize < kBufSize) { + ALOGV("+++ got %d bytes, EOF reached\n", + (int)getSize); + atEof = true; + } + + crc = crc32(crc, inBuf, getSize); + + zstream.next_in = inBuf; + zstream.avail_in = getSize; + } + + if (atEof) + flush = Z_FINISH; /* tell zlib that we're done */ + else + flush = Z_NO_FLUSH; /* more to come! */ + + zerr = deflate(&zstream, flush); + if (zerr != Z_OK && zerr != Z_STREAM_END) { + ALOGD("zlib deflate call failed (zerr=%d)\n", zerr); + result = UNKNOWN_ERROR; + goto z_bail; + } + + /* write when we're full or when we're done */ + if (zstream.avail_out == 0 || + (zerr == Z_STREAM_END && zstream.avail_out != (uInt) kBufSize)) + { + ALOGV("+++ writing %d bytes\n", (int) (zstream.next_out - outBuf)); + if (fwrite(outBuf, 1, zstream.next_out - outBuf, dstFp) != + (size_t)(zstream.next_out - outBuf)) + { + ALOGD("write %d failed in deflate\n", + (int) (zstream.next_out - outBuf)); + goto z_bail; + } + + zstream.next_out = outBuf; + zstream.avail_out = kBufSize; + } + } while (zerr == Z_OK); + + assert(zerr == Z_STREAM_END); /* other errors should've been caught */ + + *pCRC32 = crc; + +z_bail: + deflateEnd(&zstream); /* free up any allocated structures */ + +bail: + delete[] inBuf; + delete[] outBuf; + + return result; +} + +/* + * Mark an entry as deleted. + * + * We will eventually need to crunch the file down, but if several files + * are being removed (perhaps as part of an "update" process) we can make + * things considerably faster by deferring the removal to "flush" time. + */ +status_t ZipFile::remove(ZipEntry* pEntry) +{ + /* + * Should verify that pEntry is actually part of this archive, and + * not some stray ZipEntry from a different file. + */ + + /* mark entry as deleted, and mark archive as dirty */ + pEntry->setDeleted(); + mNeedCDRewrite = true; + return NO_ERROR; +} + +/* + * Flush any pending writes. + * + * In particular, this will crunch out deleted entries, and write the + * Central Directory and EOCD if we have stomped on them. + */ +status_t ZipFile::flush(void) +{ + status_t result = NO_ERROR; + long eocdPosn; + int i, count; + + if (mReadOnly) + return INVALID_OPERATION; + if (!mNeedCDRewrite) + return NO_ERROR; + + assert(mZipFp != NULL); + + result = crunchArchive(); + if (result != NO_ERROR) + return result; + + if (fseek(mZipFp, mEOCD.mCentralDirOffset, SEEK_SET) != 0) + return UNKNOWN_ERROR; + + count = mEntries.size(); + for (i = 0; i < count; i++) { + ZipEntry* pEntry = mEntries[i]; + pEntry->mCDE.write(mZipFp); + } + + eocdPosn = ftell(mZipFp); + mEOCD.mCentralDirSize = eocdPosn - mEOCD.mCentralDirOffset; + + mEOCD.write(mZipFp); + + /* + * If we had some stuff bloat up during compression and get replaced + * with plain files, or if we deleted some entries, there's a lot + * of wasted space at the end of the file. Remove it now. + */ + if (ftruncate(fileno(mZipFp), ftell(mZipFp)) != 0) { + ALOGW("ftruncate failed %ld: %s\n", ftell(mZipFp), strerror(errno)); + // not fatal + } + + /* should we clear the "newly added" flag in all entries now? */ + + mNeedCDRewrite = false; + return NO_ERROR; +} + +/* + * Crunch deleted files out of an archive by shifting the later files down. + * + * Because we're not using a temp file, we do the operation inside the + * current file. + */ +status_t ZipFile::crunchArchive(void) +{ + status_t result = NO_ERROR; + int i, count; + long delCount, adjust; + +#if 0 + printf("CONTENTS:\n"); + for (i = 0; i < (int) mEntries.size(); i++) { + printf(" %d: lfhOff=%ld del=%d\n", + i, mEntries[i]->getLFHOffset(), mEntries[i]->getDeleted()); + } + printf(" END is %ld\n", (long) mEOCD.mCentralDirOffset); +#endif + + /* + * Roll through the set of files, shifting them as appropriate. We + * could probably get a slight performance improvement by sliding + * multiple files down at once (because we could use larger reads + * when operating on batches of small files), but it's not that useful. + */ + count = mEntries.size(); + delCount = adjust = 0; + for (i = 0; i < count; i++) { + ZipEntry* pEntry = mEntries[i]; + long span; + + if (pEntry->getLFHOffset() != 0) { + long nextOffset; + + /* Get the length of this entry by finding the offset + * of the next entry. Directory entries don't have + * file offsets, so we need to find the next non-directory + * entry. + */ + nextOffset = 0; + for (int ii = i+1; nextOffset == 0 && ii < count; ii++) + nextOffset = mEntries[ii]->getLFHOffset(); + if (nextOffset == 0) + nextOffset = mEOCD.mCentralDirOffset; + span = nextOffset - pEntry->getLFHOffset(); + + assert(span >= ZipEntry::LocalFileHeader::kLFHLen); + } else { + /* This is a directory entry. It doesn't have + * any actual file contents, so there's no need to + * move anything. + */ + span = 0; + } + + //printf("+++ %d: off=%ld span=%ld del=%d [count=%d]\n", + // i, pEntry->getLFHOffset(), span, pEntry->getDeleted(), count); + + if (pEntry->getDeleted()) { + adjust += span; + delCount++; + + delete pEntry; + mEntries.removeAt(i); + + /* adjust loop control */ + count--; + i--; + } else if (span != 0 && adjust > 0) { + /* shuffle this entry back */ + //printf("+++ Shuffling '%s' back %ld\n", + // pEntry->getFileName(), adjust); + result = filemove(mZipFp, pEntry->getLFHOffset() - adjust, + pEntry->getLFHOffset(), span); + if (result != NO_ERROR) { + /* this is why you use a temp file */ + ALOGE("error during crunch - archive is toast\n"); + return result; + } + + pEntry->setLFHOffset(pEntry->getLFHOffset() - adjust); + } + } + + /* + * Fix EOCD info. We have to wait until the end to do some of this + * because we use mCentralDirOffset to determine "span" for the + * last entry. + */ + mEOCD.mCentralDirOffset -= adjust; + mEOCD.mNumEntries -= delCount; + mEOCD.mTotalNumEntries -= delCount; + mEOCD.mCentralDirSize = 0; // mark invalid; set by flush() + + assert(mEOCD.mNumEntries == mEOCD.mTotalNumEntries); + assert(mEOCD.mNumEntries == count); + + return result; +} + +/* + * Works like memmove(), but on pieces of a file. + */ +status_t ZipFile::filemove(FILE* fp, off_t dst, off_t src, size_t n) +{ + if (dst == src || n <= 0) + return NO_ERROR; + + unsigned char readBuf[32768]; + + if (dst < src) { + /* shift stuff toward start of file; must read from start */ + while (n != 0) { + size_t getSize = sizeof(readBuf); + if (getSize > n) + getSize = n; + + if (fseek(fp, (long) src, SEEK_SET) != 0) { + ALOGD("filemove src seek %ld failed\n", (long) src); + return UNKNOWN_ERROR; + } + + if (fread(readBuf, 1, getSize, fp) != getSize) { + ALOGD("filemove read %ld off=%ld failed\n", + (long) getSize, (long) src); + return UNKNOWN_ERROR; + } + + if (fseek(fp, (long) dst, SEEK_SET) != 0) { + ALOGD("filemove dst seek %ld failed\n", (long) dst); + return UNKNOWN_ERROR; + } + + if (fwrite(readBuf, 1, getSize, fp) != getSize) { + ALOGD("filemove write %ld off=%ld failed\n", + (long) getSize, (long) dst); + return UNKNOWN_ERROR; + } + + src += getSize; + dst += getSize; + n -= getSize; + } + } else { + /* shift stuff toward end of file; must read from end */ + assert(false); // write this someday, maybe + return UNKNOWN_ERROR; + } + + return NO_ERROR; +} + + +/* + * Get the modification time from a file descriptor. + */ +time_t ZipFile::getModTime(int fd) +{ + struct stat sb; + + if (fstat(fd, &sb) < 0) { + ALOGD("HEY: fstat on fd %d failed\n", fd); + return (time_t) -1; + } + + return sb.st_mtime; +} + + +#if 0 /* this is a bad idea */ +/* + * Get a copy of the Zip file descriptor. + * + * We don't allow this if the file was opened read-write because we tend + * to leave the file contents in an uncertain state between calls to + * flush(). The duplicated file descriptor should only be valid for reads. + */ +int ZipFile::getZipFd(void) const +{ + if (!mReadOnly) + return INVALID_OPERATION; + assert(mZipFp != NULL); + + int fd; + fd = dup(fileno(mZipFp)); + if (fd < 0) { + ALOGD("didn't work, errno=%d\n", errno); + } + + return fd; +} +#endif + + +#if 0 +/* + * Expand data. + */ +bool ZipFile::uncompress(const ZipEntry* pEntry, void* buf) const +{ + return false; +} +#endif + +// free the memory when you're done +void* ZipFile::uncompress(const ZipEntry* entry) +{ + size_t unlen = entry->getUncompressedLen(); + size_t clen = entry->getCompressedLen(); + + void* buf = malloc(unlen); + if (buf == NULL) { + return NULL; + } + + fseek(mZipFp, 0, SEEK_SET); + + off_t offset = entry->getFileOffset(); + if (fseek(mZipFp, offset, SEEK_SET) != 0) { + goto bail; + } + + switch (entry->getCompressionMethod()) + { + case ZipEntry::kCompressStored: { + ssize_t amt = fread(buf, 1, unlen, mZipFp); + if (amt != (ssize_t)unlen) { + goto bail; + } +#if 0 + printf("data...\n"); + const unsigned char* p = (unsigned char*)buf; + const unsigned char* end = p+unlen; + for (int i=0; i<32 && p < end; i++) { + printf("0x%08x ", (int)(offset+(i*0x10))); + for (int j=0; j<0x10 && p < end; j++) { + printf(" %02x", *p); + p++; + } + printf("\n"); + } +#endif + + } + break; + case ZipEntry::kCompressDeflated: { + if (!ZipUtils::inflateToBuffer(mZipFp, buf, unlen, clen)) { + goto bail; + } + } + break; + default: + goto bail; + } + return buf; + +bail: + free(buf); + return NULL; +} + + +/* + * =========================================================================== + * ZipFile::EndOfCentralDir + * =========================================================================== + */ + +/* + * Read the end-of-central-dir fields. + * + * "buf" should be positioned at the EOCD signature, and should contain + * the entire EOCD area including the comment. + */ +status_t ZipFile::EndOfCentralDir::readBuf(const unsigned char* buf, int len) +{ + /* don't allow re-use */ + assert(mComment == NULL); + + if (len < kEOCDLen) { + /* looks like ZIP file got truncated */ + ALOGD(" Zip EOCD: expected >= %d bytes, found %d\n", + kEOCDLen, len); + return INVALID_OPERATION; + } + + /* this should probably be an assert() */ + if (ZipEntry::getLongLE(&buf[0x00]) != kSignature) + return UNKNOWN_ERROR; + + mDiskNumber = ZipEntry::getShortLE(&buf[0x04]); + mDiskWithCentralDir = ZipEntry::getShortLE(&buf[0x06]); + mNumEntries = ZipEntry::getShortLE(&buf[0x08]); + mTotalNumEntries = ZipEntry::getShortLE(&buf[0x0a]); + mCentralDirSize = ZipEntry::getLongLE(&buf[0x0c]); + mCentralDirOffset = ZipEntry::getLongLE(&buf[0x10]); + mCommentLen = ZipEntry::getShortLE(&buf[0x14]); + + // TODO: validate mCentralDirOffset + + if (mCommentLen > 0) { + if (kEOCDLen + mCommentLen > len) { + ALOGD("EOCD(%d) + comment(%d) exceeds len (%d)\n", + kEOCDLen, mCommentLen, len); + return UNKNOWN_ERROR; + } + mComment = new unsigned char[mCommentLen]; + memcpy(mComment, buf + kEOCDLen, mCommentLen); + } + + return NO_ERROR; +} + +/* + * Write an end-of-central-directory section. + */ +status_t ZipFile::EndOfCentralDir::write(FILE* fp) +{ + unsigned char buf[kEOCDLen]; + + ZipEntry::putLongLE(&buf[0x00], kSignature); + ZipEntry::putShortLE(&buf[0x04], mDiskNumber); + ZipEntry::putShortLE(&buf[0x06], mDiskWithCentralDir); + ZipEntry::putShortLE(&buf[0x08], mNumEntries); + ZipEntry::putShortLE(&buf[0x0a], mTotalNumEntries); + ZipEntry::putLongLE(&buf[0x0c], mCentralDirSize); + ZipEntry::putLongLE(&buf[0x10], mCentralDirOffset); + ZipEntry::putShortLE(&buf[0x14], mCommentLen); + + if (fwrite(buf, 1, kEOCDLen, fp) != kEOCDLen) + return UNKNOWN_ERROR; + if (mCommentLen > 0) { + assert(mComment != NULL); + if (fwrite(mComment, mCommentLen, 1, fp) != mCommentLen) + return UNKNOWN_ERROR; + } + + return NO_ERROR; +} + +/* + * Dump the contents of an EndOfCentralDir object. + */ +void ZipFile::EndOfCentralDir::dump(void) const +{ + ALOGD(" EndOfCentralDir contents:\n"); + ALOGD(" diskNum=%u diskWCD=%u numEnt=%u totalNumEnt=%u\n", + mDiskNumber, mDiskWithCentralDir, mNumEntries, mTotalNumEntries); + ALOGD(" centDirSize=%lu centDirOff=%lu commentLen=%u\n", + mCentralDirSize, mCentralDirOffset, mCommentLen); +} + diff --git a/tools/aapt/ZipFile.h b/tools/aapt/ZipFile.h new file mode 100644 index 0000000000000..78775502884bb --- /dev/null +++ b/tools/aapt/ZipFile.h @@ -0,0 +1,270 @@ +/* + * Copyright (C) 2006 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// +// General-purpose Zip archive access. This class allows both reading and +// writing to Zip archives, including deletion of existing entries. +// +#ifndef __LIBS_ZIPFILE_H +#define __LIBS_ZIPFILE_H + +#include +#include +#include + +#include "ZipEntry.h" + +namespace android { + +/* + * Manipulate a Zip archive. + * + * Some changes will not be visible in the until until "flush" is called. + * + * The correct way to update a file archive is to make all changes to a + * copy of the archive in a temporary file, and then unlink/rename over + * the original after everything completes. Because we're only interested + * in using this for packaging, we don't worry about such things. Crashing + * after making changes and before flush() completes could leave us with + * an unusable Zip archive. + */ +class ZipFile { +public: + ZipFile(void) + : mZipFp(NULL), mReadOnly(false), mNeedCDRewrite(false) + {} + ~ZipFile(void) { + if (!mReadOnly) + flush(); + if (mZipFp != NULL) + fclose(mZipFp); + discardEntries(); + } + + /* + * Open a new or existing archive. + */ + enum { + kOpenReadOnly = 0x01, + kOpenReadWrite = 0x02, + kOpenCreate = 0x04, // create if it doesn't exist + kOpenTruncate = 0x08, // if it exists, empty it + }; + status_t open(const char* zipFileName, int flags); + + /* + * Add a file to the end of the archive. Specify whether you want the + * library to try to store it compressed. + * + * If "storageName" is specified, the archive will use that instead + * of "fileName". + * + * If there is already an entry with the same name, the call fails. + * Existing entries with the same name must be removed first. + * + * If "ppEntry" is non-NULL, a pointer to the new entry will be returned. + */ + status_t add(const char* fileName, int compressionMethod, + ZipEntry** ppEntry) + { + return add(fileName, fileName, compressionMethod, ppEntry); + } + status_t add(const char* fileName, const char* storageName, + int compressionMethod, ZipEntry** ppEntry) + { + return addCommon(fileName, NULL, 0, storageName, + ZipEntry::kCompressStored, + compressionMethod, ppEntry); + } + + /* + * Add a file that is already compressed with gzip. + * + * If "ppEntry" is non-NULL, a pointer to the new entry will be returned. + */ + status_t addGzip(const char* fileName, const char* storageName, + ZipEntry** ppEntry) + { + return addCommon(fileName, NULL, 0, storageName, + ZipEntry::kCompressDeflated, + ZipEntry::kCompressDeflated, ppEntry); + } + + /* + * Add a file from an in-memory data buffer. + * + * If "ppEntry" is non-NULL, a pointer to the new entry will be returned. + */ + status_t add(const void* data, size_t size, const char* storageName, + int compressionMethod, ZipEntry** ppEntry) + { + return addCommon(NULL, data, size, storageName, + ZipEntry::kCompressStored, + compressionMethod, ppEntry); + } + + /* + * Add an entry by copying it from another zip file. If "padding" is + * nonzero, the specified number of bytes will be added to the "extra" + * field in the header. + * + * If "ppEntry" is non-NULL, a pointer to the new entry will be returned. + */ + status_t add(const ZipFile* pSourceZip, const ZipEntry* pSourceEntry, + int padding, ZipEntry** ppEntry); + + /* + * Mark an entry as having been removed. It is not actually deleted + * from the archive or our internal data structures until flush() is + * called. + */ + status_t remove(ZipEntry* pEntry); + + /* + * Flush changes. If mNeedCDRewrite is set, this writes the central dir. + */ + status_t flush(void); + + /* + * Expand the data into the buffer provided. The buffer must hold + * at least bytes. Variation expands directly + * to a file. + * + * Returns "false" if an error was encountered in the compressed data. + */ + //bool uncompress(const ZipEntry* pEntry, void* buf) const; + //bool uncompress(const ZipEntry* pEntry, FILE* fp) const; + void* uncompress(const ZipEntry* pEntry); + + /* + * Get an entry, by name. Returns NULL if not found. + * + * Does not return entries pending deletion. + */ + ZipEntry* getEntryByName(const char* fileName) const; + + /* + * Get the Nth entry in the archive. + * + * This will return an entry that is pending deletion. + */ + int getNumEntries(void) const { return mEntries.size(); } + ZipEntry* getEntryByIndex(int idx) const; + +private: + /* these are private and not defined */ + ZipFile(const ZipFile& src); + ZipFile& operator=(const ZipFile& src); + + class EndOfCentralDir { + public: + EndOfCentralDir(void) : + mDiskNumber(0), + mDiskWithCentralDir(0), + mNumEntries(0), + mTotalNumEntries(0), + mCentralDirSize(0), + mCentralDirOffset(0), + mCommentLen(0), + mComment(NULL) + {} + virtual ~EndOfCentralDir(void) { + delete[] mComment; + } + + status_t readBuf(const unsigned char* buf, int len); + status_t write(FILE* fp); + + //unsigned long mSignature; + unsigned short mDiskNumber; + unsigned short mDiskWithCentralDir; + unsigned short mNumEntries; + unsigned short mTotalNumEntries; + unsigned long mCentralDirSize; + unsigned long mCentralDirOffset; // offset from first disk + unsigned short mCommentLen; + unsigned char* mComment; + + enum { + kSignature = 0x06054b50, + kEOCDLen = 22, // EndOfCentralDir len, excl. comment + + kMaxCommentLen = 65535, // longest possible in ushort + kMaxEOCDSearch = kMaxCommentLen + EndOfCentralDir::kEOCDLen, + + }; + + void dump(void) const; + }; + + + /* read all entries in the central dir */ + status_t readCentralDir(void); + + /* crunch deleted entries out */ + status_t crunchArchive(void); + + /* clean up mEntries */ + void discardEntries(void); + + /* common handler for all "add" functions */ + status_t addCommon(const char* fileName, const void* data, size_t size, + const char* storageName, int sourceType, int compressionMethod, + ZipEntry** ppEntry); + + /* copy all of "srcFp" into "dstFp" */ + status_t copyFpToFp(FILE* dstFp, FILE* srcFp, unsigned long* pCRC32); + /* copy all of "data" into "dstFp" */ + status_t copyDataToFp(FILE* dstFp, + const void* data, size_t size, unsigned long* pCRC32); + /* copy some of "srcFp" into "dstFp" */ + status_t copyPartialFpToFp(FILE* dstFp, FILE* srcFp, long length, + unsigned long* pCRC32); + /* like memmove(), but on parts of a single file */ + status_t filemove(FILE* fp, off_t dest, off_t src, size_t n); + /* compress all of "srcFp" into "dstFp", using Deflate */ + status_t compressFpToFp(FILE* dstFp, FILE* srcFp, + const void* data, size_t size, unsigned long* pCRC32); + + /* get modification date from a file descriptor */ + time_t getModTime(int fd); + + /* + * We use stdio FILE*, which gives us buffering but makes dealing + * with files >2GB awkward. Until we support Zip64, we're fine. + */ + FILE* mZipFp; // Zip file pointer + + /* one of these per file */ + EndOfCentralDir mEOCD; + + /* did we open this read-only? */ + bool mReadOnly; + + /* set this when we trash the central dir */ + bool mNeedCDRewrite; + + /* + * One ZipEntry per entry in the zip file. I'm using pointers instead + * of objects because it's easier than making operator= work for the + * classes and sub-classes. + */ + Vector mEntries; +}; + +}; // namespace android + +#endif // __LIBS_ZIPFILE_H diff --git a/tools/aapt/printapk.cpp b/tools/aapt/printapk.cpp new file mode 100644 index 0000000000000..4cf73d81294bd --- /dev/null +++ b/tools/aapt/printapk.cpp @@ -0,0 +1,127 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace android; + +static int +usage() +{ + fprintf(stderr, + "usage: apk APKFILE\n" + "\n" + "APKFILE an android packge file produced by aapt.\n" + ); + return 1; +} + + +int +main(int argc, char** argv) +{ + const char* filename; + int fd; + ssize_t amt; + off_t size; + void* buf; + zipfile_t zip; + zipentry_t entry; + void* cookie; + void* resfile; + int bufsize; + int err; + + if (argc != 2) { + return usage(); + } + + filename = argv[1]; + fd = open(filename, O_RDONLY); + if (fd == -1) { + fprintf(stderr, "apk: couldn't open file for read: %s\n", filename); + return 1; + } + + size = lseek(fd, 0, SEEK_END); + amt = lseek(fd, 0, SEEK_SET); + + if (size < 0 || amt < 0) { + fprintf(stderr, "apk: error determining file size: %s\n", filename); + return 1; + } + + buf = malloc(size); + if (buf == NULL) { + fprintf(stderr, "apk: file too big: %s\n", filename); + return 1; + } + + amt = read(fd, buf, size); + if (amt != size) { + fprintf(stderr, "apk: error reading file: %s\n", filename); + return 1; + } + + close(fd); + + zip = init_zipfile(buf, size); + if (zip == NULL) { + fprintf(stderr, "apk: file doesn't seem to be a zip file: %s\n", + filename); + return 1; + } + + printf("files:\n"); + cookie = NULL; + while ((entry = iterate_zipfile(zip, &cookie))) { + char* name = get_zipentry_name(entry); + printf(" %s\n", name); + free(name); + } + + entry = lookup_zipentry(zip, "resources.arsc"); + if (entry != NULL) { + size = get_zipentry_size(entry); + bufsize = size + (size / 1000) + 1; + resfile = malloc(bufsize); + + err = decompress_zipentry(entry, resfile, bufsize); + if (err != 0) { + fprintf(stderr, "apk: error decompressing resources.arsc"); + return 1; + } + + ResTable res(resfile, size, resfile); + res.print(); +#if 0 + size_t tableCount = res.getTableCount(); + printf("Tables: %d\n", (int)tableCount); + for (size_t tableIndex=0; tableIndexsize(); + for (size_t stringIndex=0; stringIndexstringAt(stringIndex, &len); + String8 s(String16(ch, len)); + printf(" [%3d] %s\n", (int)stringIndex, s.string()); + } + } + + size_t basePackageCount = res.getBasePackageCount(); + printf("Base Packages: %d\n", (int)basePackageCount); + for (size_t bpIndex=0; bpIndex + +std::string pseudolocalize_string(const std::string& source); + +#endif // HOST_PSEUDOLOCALIZE_H + diff --git a/tools/aapt/qsort_r_compat.c b/tools/aapt/qsort_r_compat.c new file mode 100644 index 0000000000000..2a8dbe85f4c98 --- /dev/null +++ b/tools/aapt/qsort_r_compat.c @@ -0,0 +1,90 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include "qsort_r_compat.h" + +/* + * Note: This code is only used on the host, and is primarily here for + * Mac OS compatibility. Apparently, glibc and Apple's libc disagree on + * the parameter order for qsort_r. + */ + +#if HAVE_BSD_QSORT_R + +/* + * BSD qsort_r parameter order is as we have defined here. + */ + +void qsort_r_compat(void* base, size_t nel, size_t width, void* thunk, + int (*compar)(void*, const void* , const void*)) { + qsort_r(base, nel, width, thunk, compar); +} + +#elif HAVE_GNU_QSORT_R + +/* + * GNU qsort_r parameter order places the thunk parameter last. + */ + +struct compar_data { + void* thunk; + int (*compar)(void*, const void* , const void*); +}; + +static int compar_wrapper(const void* a, const void* b, void* data) { + struct compar_data* compar_data = (struct compar_data*)data; + return compar_data->compar(compar_data->thunk, a, b); +} + +void qsort_r_compat(void* base, size_t nel, size_t width, void* thunk, + int (*compar)(void*, const void* , const void*)) { + struct compar_data compar_data; + compar_data.thunk = thunk; + compar_data.compar = compar; + qsort_r(base, nel, width, compar_wrapper, &compar_data); +} + +#else + +/* + * Emulate qsort_r using thread local storage to access the thunk data. + */ + +#include + +static thread_store_t compar_data_key = THREAD_STORE_INITIALIZER; + +struct compar_data { + void* thunk; + int (*compar)(void*, const void* , const void*); +}; + +static int compar_wrapper(const void* a, const void* b) { + struct compar_data* compar_data = (struct compar_data*)thread_store_get(&compar_data_key); + return compar_data->compar(compar_data->thunk, a, b); +} + +void qsort_r_compat(void* base, size_t nel, size_t width, void* thunk, + int (*compar)(void*, const void* , const void*)) { + struct compar_data compar_data; + compar_data.thunk = thunk; + compar_data.compar = compar; + thread_store_set(&compar_data_key, &compar_data, NULL); + qsort(base, nel, width, compar_wrapper); +} + +#endif diff --git a/tools/aapt/qsort_r_compat.h b/tools/aapt/qsort_r_compat.h new file mode 100644 index 0000000000000..e14f999f736ae --- /dev/null +++ b/tools/aapt/qsort_r_compat.h @@ -0,0 +1,39 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * Provides a portable version of qsort_r, called qsort_r_compat, which is a + * reentrant variant of qsort that passes a user data pointer to its comparator. + * This implementation follows the BSD parameter convention. + */ + +#ifndef ___QSORT_R_COMPAT_H +#define ___QSORT_R_COMPAT_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +void qsort_r_compat(void* base, size_t nel, size_t width, void* thunk, + int (*compar)(void*, const void* , const void* )); + +#ifdef __cplusplus +} +#endif + +#endif // ___QSORT_R_COMPAT_H diff --git a/tools/aapt/tests/CrunchCache_test.cpp b/tools/aapt/tests/CrunchCache_test.cpp new file mode 100644 index 0000000000000..20b5022b52576 --- /dev/null +++ b/tools/aapt/tests/CrunchCache_test.cpp @@ -0,0 +1,97 @@ +// +// Copyright 2011 The Android Open Source Project +// +#include +#include +#include + +#include "CrunchCache.h" +#include "FileFinder.h" +#include "MockFileFinder.h" +#include "CacheUpdater.h" +#include "MockCacheUpdater.h" + +using namespace android; +using std::cout; +using std::endl; + +void expectEqual(int got, int expected, const char* desc) { + cout << "Checking " << desc << ": "; + cout << "Got " << got << ", expected " << expected << "..."; + cout << ( (got == expected) ? "PASSED" : "FAILED") << endl; + errno += ((got == expected) ? 0 : 1); +} + +int main() { + + errno = 0; + + String8 source("res"); + String8 dest("res2"); + + // Create data for MockFileFinder to feed to the cache + KeyedVector sourceData; + // This shouldn't be updated + sourceData.add(String8("res/drawable/hello.png"),3); + // This should be updated + sourceData.add(String8("res/drawable/world.png"),5); + // This should cause make directory to be called + sourceData.add(String8("res/drawable-cool/hello.png"),3); + + KeyedVector destData; + destData.add(String8("res2/drawable/hello.png"),3); + destData.add(String8("res2/drawable/world.png"),3); + // this should call delete + destData.add(String8("res2/drawable/dead.png"),3); + + // Package up data and create mock file finder + KeyedVector > data; + data.add(source,sourceData); + data.add(dest,destData); + FileFinder* ff = new MockFileFinder(data); + CrunchCache cc(source,dest,ff); + + MockCacheUpdater* mcu = new MockCacheUpdater(); + CacheUpdater* cu(mcu); + + cout << "Running Crunch..."; + int result = cc.crunch(cu); + cout << ((result > 0) ? "PASSED" : "FAILED") << endl; + errno += ((result > 0) ? 0 : 1); + + const int EXPECTED_RESULT = 2; + expectEqual(result, EXPECTED_RESULT, "number of files touched"); + + cout << "Checking calls to deleteFile and processImage:" << endl; + const int EXPECTED_DELETES = 1; + const int EXPECTED_PROCESSED = 2; + // Deletes + expectEqual(mcu->deleteCount, EXPECTED_DELETES, "deleteFile"); + // processImage + expectEqual(mcu->processCount, EXPECTED_PROCESSED, "processImage"); + + const int EXPECTED_OVERWRITES = 3; + result = cc.crunch(cu, true); + expectEqual(result, EXPECTED_OVERWRITES, "number of files touched with overwrite"); + \ + + if (errno == 0) + cout << "ALL TESTS PASSED!" << endl; + else + cout << errno << " TESTS FAILED" << endl; + + delete ff; + delete cu; + + // TESTS BELOW WILL GO AWAY SOON + + String8 source2("ApiDemos/res"); + String8 dest2("ApiDemos/res2"); + + FileFinder* sff = new SystemFileFinder(); + CacheUpdater* scu = new SystemCacheUpdater(); + + CrunchCache scc(source2,dest2,sff); + + scc.crunch(scu); +} \ No newline at end of file diff --git a/tools/aapt/tests/FileFinder_test.cpp b/tools/aapt/tests/FileFinder_test.cpp new file mode 100644 index 0000000000000..07bd665bcdb5c --- /dev/null +++ b/tools/aapt/tests/FileFinder_test.cpp @@ -0,0 +1,101 @@ +// +// Copyright 2011 The Android Open Source Project +// +#include +#include +#include +#include +#include +#include + +#include "DirectoryWalker.h" +#include "MockDirectoryWalker.h" +#include "FileFinder.h" + +using namespace android; + +using std::pair; +using std::cout; +using std::endl; + + + +int main() +{ + + cout << "\n\n STARTING FILE FINDER TESTS" << endl; + String8 path("ApiDemos"); + + // Storage to pass to findFiles() + KeyedVector testStorage; + + // Mock Directory Walker initialization. First data, then sdw + Vector< pair > data; + data.push( pair(String8("hello.png"),3) ); + data.push( pair(String8("world.PNG"),3) ); + data.push( pair(String8("foo.pNg"),3) ); + // Neither of these should be found + data.push( pair(String8("hello.jpg"),3) ); + data.push( pair(String8(".hidden.png"),3)); + + DirectoryWalker* sdw = new StringDirectoryWalker(path,data); + + // Extensions to look for + Vector exts; + exts.push(String8(".png")); + + errno = 0; + + // Make sure we get a valid mock directory walker + // Make sure we finish without errors + cout << "Checking DirectoryWalker..."; + assert(sdw != NULL); + cout << "PASSED" << endl; + + // Make sure we finish without errors + cout << "Running findFiles()..."; + bool findStatus = FileFinder::findFiles(path,exts, testStorage, sdw); + assert(findStatus); + cout << "PASSED" << endl; + + const size_t SIZE_EXPECTED = 3; + // Check to make sure we have the right number of things in our storage + cout << "Running size comparison: Size is " << testStorage.size() << ", "; + cout << "Expected " << SIZE_EXPECTED << "..."; + if(testStorage.size() == SIZE_EXPECTED) + cout << "PASSED" << endl; + else { + cout << "FAILED" << endl; + errno++; + } + + // Check to make sure that each of our found items has the right extension + cout << "Checking Returned Extensions..."; + bool extsOkay = true; + String8 wrongExts; + for (size_t i = 0; i < SIZE_EXPECTED; ++i) { + String8 testExt(testStorage.keyAt(i).getPathExtension()); + testExt.toLower(); + if (testExt != ".png") { + wrongExts += testStorage.keyAt(i); + wrongExts += "\n"; + extsOkay = false; + } + } + if (extsOkay) + cout << "PASSED" << endl; + else { + cout << "FAILED" << endl; + cout << "The following extensions didn't check out" << endl << wrongExts; + } + + // Clean up + delete sdw; + + if(errno == 0) { + cout << "ALL TESTS PASSED" << endl; + } else { + cout << errno << " TESTS FAILED" << endl; + } + return errno; +} \ No newline at end of file diff --git a/tools/aapt/tests/MockCacheUpdater.h b/tools/aapt/tests/MockCacheUpdater.h new file mode 100644 index 0000000000000..c7f4bd7359a19 --- /dev/null +++ b/tools/aapt/tests/MockCacheUpdater.h @@ -0,0 +1,40 @@ +// +// Copyright 2011 The Android Open Source Project +// +#ifndef MOCKCACHEUPDATER_H +#define MOCKCACHEUPDATER_H + +#include +#include "CacheUpdater.h" + +using namespace android; + +class MockCacheUpdater : public CacheUpdater { +public: + + MockCacheUpdater() + : deleteCount(0), processCount(0) { }; + + // Make sure all the directories along this path exist + virtual void ensureDirectoriesExist(String8 path) + { + // Nothing to do + }; + + // Delete a file + virtual void deleteFile(String8 path) { + deleteCount++; + }; + + // Process an image from source out to dest + virtual void processImage(String8 source, String8 dest) { + processCount++; + }; + + // DATA MEMBERS + int deleteCount; + int processCount; +private: +}; + +#endif // MOCKCACHEUPDATER_H \ No newline at end of file diff --git a/tools/aapt/tests/MockDirectoryWalker.h b/tools/aapt/tests/MockDirectoryWalker.h new file mode 100644 index 0000000000000..5900cf3d8b0a2 --- /dev/null +++ b/tools/aapt/tests/MockDirectoryWalker.h @@ -0,0 +1,85 @@ +// +// Copyright 2011 The Android Open Source Project +// +#ifndef MOCKDIRECTORYWALKER_H +#define MOCKDIRECTORYWALKER_H + +#include +#include +#include +#include "DirectoryWalker.h" + +using namespace android; +using std::pair; + +// String8 Directory Walker +// This is an implementation of the Directory Walker abstraction that is built +// for testing. +// Instead of system calls it queries a private data structure for the directory +// entries. It takes a path and a map of filenames and their modification times. +// functions are inlined since they are short and simple + +class StringDirectoryWalker : public DirectoryWalker { +public: + StringDirectoryWalker(String8& path, Vector< pair >& data) + : mPos(0), mBasePath(path), mData(data) { + //fprintf(stdout,"StringDW built to mimic %s with %d files\n", + // mBasePath.string()); + }; + // Default copy constructor, and destructor are fine + + virtual bool openDir(String8 path) { + // If the user is trying to query the "directory" that this + // walker was initialized with, then return success. Else fail. + return path == mBasePath; + }; + virtual bool openDir(const char* path) { + String8 p(path); + openDir(p); + return true; + }; + // Advance to next entry in the Vector + virtual struct dirent* nextEntry() { + // Advance position and check to see if we're done + if (mPos >= mData.size()) + return NULL; + + // Place data in the entry descriptor. This class only returns files. + mEntry.d_type = DT_REG; + mEntry.d_ino = mPos; + // Copy chars from the string name to the entry name + size_t i = 0; + for (i; i < mData[mPos].first.size(); ++i) + mEntry.d_name[i] = mData[mPos].first[i]; + mEntry.d_name[i] = '\0'; + + // Place data in stats + mStats.st_ino = mPos; + mStats.st_mtime = mData[mPos].second; + + // Get ready to move to the next entry + mPos++; + + return &mEntry; + }; + // Get the stats for the current entry + virtual struct stat* entryStats() { + return &mStats; + }; + // Nothing to do in clean up + virtual void closeDir() { + // Nothing to do + }; + virtual DirectoryWalker* clone() { + return new StringDirectoryWalker(*this); + }; +private: + // Current position in the Vector + size_t mPos; + // Base path + String8 mBasePath; + // Data to simulate a directory full of files. + Vector< pair > mData; +}; + +#endif // MOCKDIRECTORYWALKER_H \ No newline at end of file diff --git a/tools/aapt/tests/MockFileFinder.h b/tools/aapt/tests/MockFileFinder.h new file mode 100644 index 0000000000000..da5ea4fcd3a23 --- /dev/null +++ b/tools/aapt/tests/MockFileFinder.h @@ -0,0 +1,55 @@ +// +// Copyright 2011 The Android Open Source Project +// + +#ifndef MOCKFILEFINDER_H +#define MOCKFILEFINDER_H + +#include +#include +#include + +#include "DirectoryWalker.h" + +using namespace android; + +class MockFileFinder : public FileFinder { +public: + MockFileFinder (KeyedVector >& files) + : mFiles(files) + { + // Nothing left to do + }; + + /** + * findFiles implementation for the abstraction. + * PRECONDITIONS: + * No checking is done, so there MUST be an entry in mFiles with + * path matching basePath. + * + * POSTCONDITIONS: + * fileStore is filled with a copy of the data in mFiles corresponding + * to the basePath. + */ + + virtual bool findFiles(String8 basePath, Vector& extensions, + KeyedVector& fileStore, + DirectoryWalker* dw) + { + const KeyedVector* payload(&mFiles.valueFor(basePath)); + // Since KeyedVector doesn't implement swap + // (who doesn't use swap??) we loop and add one at a time. + for (size_t i = 0; i < payload->size(); ++i) { + fileStore.add(payload->keyAt(i),payload->valueAt(i)); + } + return true; + } + +private: + // Virtual mapping between "directories" and the "files" contained + // in them + KeyedVector > mFiles; +}; + + +#endif // MOCKFILEFINDER_H \ No newline at end of file diff --git a/tools/aapt/tests/plurals/AndroidManifest.xml b/tools/aapt/tests/plurals/AndroidManifest.xml new file mode 100644 index 0000000000000..c721dee98256d --- /dev/null +++ b/tools/aapt/tests/plurals/AndroidManifest.xml @@ -0,0 +1,5 @@ + + + + diff --git a/tools/aapt/tests/plurals/res/values/strings.xml b/tools/aapt/tests/plurals/res/values/strings.xml new file mode 100644 index 0000000000000..1c1fc19ebf95f --- /dev/null +++ b/tools/aapt/tests/plurals/res/values/strings.xml @@ -0,0 +1,7 @@ + + OK + + A dog + Some dogs + + diff --git a/tools/aapt/tests/plurals/run.sh b/tools/aapt/tests/plurals/run.sh new file mode 100755 index 0000000000000..4d39e10bd3135 --- /dev/null +++ b/tools/aapt/tests/plurals/run.sh @@ -0,0 +1,16 @@ +TEST_DIR=tools/aapt/tests/plurals +TEST_OUT_DIR=out/plurals_test + +rm -rf $TEST_OUT_DIR +mkdir -p $TEST_OUT_DIR +mkdir -p $TEST_OUT_DIR/java + +#gdb --args \ +aapt package -v -x -m -z -J $TEST_OUT_DIR/java -M $TEST_DIR/AndroidManifest.xml \ + -I out/target/common/obj/APPS/framework-res_intermediates/package-export.apk \ + -P $TEST_OUT_DIR/public_resources.xml \ + -S $TEST_DIR/res + +echo +echo "==================== FILES CREATED ==================== " +find $TEST_OUT_DIR -type f diff --git a/tools/aidl/AST.cpp b/tools/aidl/AST.cpp new file mode 100644 index 0000000000000..bfa67656b3232 --- /dev/null +++ b/tools/aidl/AST.cpp @@ -0,0 +1,912 @@ +#include "AST.h" +#include "Type.h" + +void +WriteModifiers(FILE* to, int mod, int mask) +{ + int m = mod & mask; + + if (m & OVERRIDE) { + fprintf(to, "@Override "); + } + + if ((m & SCOPE_MASK) == PUBLIC) { + fprintf(to, "public "); + } + else if ((m & SCOPE_MASK) == PRIVATE) { + fprintf(to, "private "); + } + else if ((m & SCOPE_MASK) == PROTECTED) { + fprintf(to, "protected "); + } + + if (m & STATIC) { + fprintf(to, "static "); + } + + if (m & FINAL) { + fprintf(to, "final "); + } + + if (m & ABSTRACT) { + fprintf(to, "abstract "); + } +} + +void +WriteArgumentList(FILE* to, const vector& arguments) +{ + size_t N = arguments.size(); + for (size_t i=0; iWrite(to); + if (i != N-1) { + fprintf(to, ", "); + } + } +} + +ClassElement::ClassElement() +{ +} + +ClassElement::~ClassElement() +{ +} + +Field::Field() + :ClassElement(), + modifiers(0), + variable(NULL) +{ +} + +Field::Field(int m, Variable* v) + :ClassElement(), + modifiers(m), + variable(v) +{ +} + +Field::~Field() +{ +} + +void +Field::GatherTypes(set* types) const +{ + types->insert(this->variable->type); +} + +void +Field::Write(FILE* to) +{ + if (this->comment.length() != 0) { + fprintf(to, "%s\n", this->comment.c_str()); + } + WriteModifiers(to, this->modifiers, SCOPE_MASK | STATIC | FINAL | OVERRIDE); + fprintf(to, "%s %s", this->variable->type->QualifiedName().c_str(), + this->variable->name.c_str()); + if (this->value.length() != 0) { + fprintf(to, " = %s", this->value.c_str()); + } + fprintf(to, ";\n"); +} + +Expression::~Expression() +{ +} + +LiteralExpression::LiteralExpression(const string& v) + :value(v) +{ +} + +LiteralExpression::~LiteralExpression() +{ +} + +void +LiteralExpression::Write(FILE* to) +{ + fprintf(to, "%s", this->value.c_str()); +} + +StringLiteralExpression::StringLiteralExpression(const string& v) + :value(v) +{ +} + +StringLiteralExpression::~StringLiteralExpression() +{ +} + +void +StringLiteralExpression::Write(FILE* to) +{ + fprintf(to, "\"%s\"", this->value.c_str()); +} + +Variable::Variable() + :type(NULL), + name(), + dimension(0) +{ +} + +Variable::Variable(Type* t, const string& n) + :type(t), + name(n), + dimension(0) +{ +} + +Variable::Variable(Type* t, const string& n, int d) + :type(t), + name(n), + dimension(d) +{ +} + +Variable::~Variable() +{ +} + +void +Variable::GatherTypes(set* types) const +{ + types->insert(this->type); +} + +void +Variable::WriteDeclaration(FILE* to) +{ + string dim; + for (int i=0; idimension; i++) { + dim += "[]"; + } + fprintf(to, "%s%s %s", this->type->QualifiedName().c_str(), dim.c_str(), + this->name.c_str()); +} + +void +Variable::Write(FILE* to) +{ + fprintf(to, "%s", name.c_str()); +} + +FieldVariable::FieldVariable(Expression* o, const string& n) + :object(o), + clazz(NULL), + name(n) +{ +} + +FieldVariable::FieldVariable(Type* c, const string& n) + :object(NULL), + clazz(c), + name(n) +{ +} + +FieldVariable::~FieldVariable() +{ +} + +void +FieldVariable::Write(FILE* to) +{ + if (this->object != NULL) { + this->object->Write(to); + } + else if (this->clazz != NULL) { + fprintf(to, "%s", this->clazz->QualifiedName().c_str()); + } + fprintf(to, ".%s", name.c_str()); +} + + +Statement::~Statement() +{ +} + +StatementBlock::StatementBlock() +{ +} + +StatementBlock::~StatementBlock() +{ +} + +void +StatementBlock::Write(FILE* to) +{ + fprintf(to, "{\n"); + int N = this->statements.size(); + for (int i=0; istatements[i]->Write(to); + } + fprintf(to, "}\n"); +} + +void +StatementBlock::Add(Statement* statement) +{ + this->statements.push_back(statement); +} + +void +StatementBlock::Add(Expression* expression) +{ + this->statements.push_back(new ExpressionStatement(expression)); +} + +ExpressionStatement::ExpressionStatement(Expression* e) + :expression(e) +{ +} + +ExpressionStatement::~ExpressionStatement() +{ +} + +void +ExpressionStatement::Write(FILE* to) +{ + this->expression->Write(to); + fprintf(to, ";\n"); +} + +Assignment::Assignment(Variable* l, Expression* r) + :lvalue(l), + rvalue(r), + cast(NULL) +{ +} + +Assignment::Assignment(Variable* l, Expression* r, Type* c) + :lvalue(l), + rvalue(r), + cast(c) +{ +} + +Assignment::~Assignment() +{ +} + +void +Assignment::Write(FILE* to) +{ + this->lvalue->Write(to); + fprintf(to, " = "); + if (this->cast != NULL) { + fprintf(to, "(%s)", this->cast->QualifiedName().c_str()); + } + this->rvalue->Write(to); +} + +MethodCall::MethodCall(const string& n) + :obj(NULL), + clazz(NULL), + name(n) +{ +} + +MethodCall::MethodCall(const string& n, int argc = 0, ...) + :obj(NULL), + clazz(NULL), + name(n) +{ + va_list args; + va_start(args, argc); + init(argc, args); + va_end(args); +} + +MethodCall::MethodCall(Expression* o, const string& n) + :obj(o), + clazz(NULL), + name(n) +{ +} + +MethodCall::MethodCall(Type* t, const string& n) + :obj(NULL), + clazz(t), + name(n) +{ +} + +MethodCall::MethodCall(Expression* o, const string& n, int argc = 0, ...) + :obj(o), + clazz(NULL), + name(n) +{ + va_list args; + va_start(args, argc); + init(argc, args); + va_end(args); +} + +MethodCall::MethodCall(Type* t, const string& n, int argc = 0, ...) + :obj(NULL), + clazz(t), + name(n) +{ + va_list args; + va_start(args, argc); + init(argc, args); + va_end(args); +} + +MethodCall::~MethodCall() +{ +} + +void +MethodCall::init(int n, va_list args) +{ + for (int i=0; iarguments.push_back(expression); + } +} + +void +MethodCall::Write(FILE* to) +{ + if (this->obj != NULL) { + this->obj->Write(to); + fprintf(to, "."); + } + else if (this->clazz != NULL) { + fprintf(to, "%s.", this->clazz->QualifiedName().c_str()); + } + fprintf(to, "%s(", this->name.c_str()); + WriteArgumentList(to, this->arguments); + fprintf(to, ")"); +} + +Comparison::Comparison(Expression* l, const string& o, Expression* r) + :lvalue(l), + op(o), + rvalue(r) +{ +} + +Comparison::~Comparison() +{ +} + +void +Comparison::Write(FILE* to) +{ + fprintf(to, "("); + this->lvalue->Write(to); + fprintf(to, "%s", this->op.c_str()); + this->rvalue->Write(to); + fprintf(to, ")"); +} + +NewExpression::NewExpression(Type* t) + :type(t) +{ +} + +NewExpression::NewExpression(Type* t, int argc = 0, ...) + :type(t) +{ + va_list args; + va_start(args, argc); + init(argc, args); + va_end(args); +} + +NewExpression::~NewExpression() +{ +} + +void +NewExpression::init(int n, va_list args) +{ + for (int i=0; iarguments.push_back(expression); + } +} + +void +NewExpression::Write(FILE* to) +{ + fprintf(to, "new %s(", this->type->InstantiableName().c_str()); + WriteArgumentList(to, this->arguments); + fprintf(to, ")"); +} + +NewArrayExpression::NewArrayExpression(Type* t, Expression* s) + :type(t), + size(s) +{ +} + +NewArrayExpression::~NewArrayExpression() +{ +} + +void +NewArrayExpression::Write(FILE* to) +{ + fprintf(to, "new %s[", this->type->QualifiedName().c_str()); + size->Write(to); + fprintf(to, "]"); +} + +Ternary::Ternary() + :condition(NULL), + ifpart(NULL), + elsepart(NULL) +{ +} + +Ternary::Ternary(Expression* a, Expression* b, Expression* c) + :condition(a), + ifpart(b), + elsepart(c) +{ +} + +Ternary::~Ternary() +{ +} + +void +Ternary::Write(FILE* to) +{ + fprintf(to, "(("); + this->condition->Write(to); + fprintf(to, ")?("); + this->ifpart->Write(to); + fprintf(to, "):("); + this->elsepart->Write(to); + fprintf(to, "))"); +} + +Cast::Cast() + :type(NULL), + expression(NULL) +{ +} + +Cast::Cast(Type* t, Expression* e) + :type(t), + expression(e) +{ +} + +Cast::~Cast() +{ +} + +void +Cast::Write(FILE* to) +{ + fprintf(to, "((%s)", this->type->QualifiedName().c_str()); + expression->Write(to); + fprintf(to, ")"); +} + +VariableDeclaration::VariableDeclaration(Variable* l, Expression* r, Type* c) + :lvalue(l), + cast(c), + rvalue(r) +{ +} + +VariableDeclaration::VariableDeclaration(Variable* l) + :lvalue(l), + cast(NULL), + rvalue(NULL) +{ +} + +VariableDeclaration::~VariableDeclaration() +{ +} + +void +VariableDeclaration::Write(FILE* to) +{ + this->lvalue->WriteDeclaration(to); + if (this->rvalue != NULL) { + fprintf(to, " = "); + if (this->cast != NULL) { + fprintf(to, "(%s)", this->cast->QualifiedName().c_str()); + } + this->rvalue->Write(to); + } + fprintf(to, ";\n"); +} + +IfStatement::IfStatement() + :expression(NULL), + statements(new StatementBlock), + elseif(NULL) +{ +} + +IfStatement::~IfStatement() +{ +} + +void +IfStatement::Write(FILE* to) +{ + if (this->expression != NULL) { + fprintf(to, "if ("); + this->expression->Write(to); + fprintf(to, ") "); + } + this->statements->Write(to); + if (this->elseif != NULL) { + fprintf(to, "else "); + this->elseif->Write(to); + } +} + +ReturnStatement::ReturnStatement(Expression* e) + :expression(e) +{ +} + +ReturnStatement::~ReturnStatement() +{ +} + +void +ReturnStatement::Write(FILE* to) +{ + fprintf(to, "return "); + this->expression->Write(to); + fprintf(to, ";\n"); +} + +TryStatement::TryStatement() + :statements(new StatementBlock) +{ +} + +TryStatement::~TryStatement() +{ +} + +void +TryStatement::Write(FILE* to) +{ + fprintf(to, "try "); + this->statements->Write(to); +} + +CatchStatement::CatchStatement(Variable* e) + :statements(new StatementBlock), + exception(e) +{ +} + +CatchStatement::~CatchStatement() +{ +} + +void +CatchStatement::Write(FILE* to) +{ + fprintf(to, "catch "); + if (this->exception != NULL) { + fprintf(to, "("); + this->exception->WriteDeclaration(to); + fprintf(to, ") "); + } + this->statements->Write(to); +} + +FinallyStatement::FinallyStatement() + :statements(new StatementBlock) +{ +} + +FinallyStatement::~FinallyStatement() +{ +} + +void +FinallyStatement::Write(FILE* to) +{ + fprintf(to, "finally "); + this->statements->Write(to); +} + +Case::Case() + :statements(new StatementBlock) +{ +} + +Case::Case(const string& c) + :statements(new StatementBlock) +{ + cases.push_back(c); +} + +Case::~Case() +{ +} + +void +Case::Write(FILE* to) +{ + int N = this->cases.size(); + if (N > 0) { + for (int i=0; icases[i]; + if (s.length() != 0) { + fprintf(to, "case %s:\n", s.c_str()); + } else { + fprintf(to, "default:\n"); + } + } + } else { + fprintf(to, "default:\n"); + } + statements->Write(to); +} + +SwitchStatement::SwitchStatement(Expression* e) + :expression(e) +{ +} + +SwitchStatement::~SwitchStatement() +{ +} + +void +SwitchStatement::Write(FILE* to) +{ + fprintf(to, "switch ("); + this->expression->Write(to); + fprintf(to, ")\n{\n"); + int N = this->cases.size(); + for (int i=0; icases[i]->Write(to); + } + fprintf(to, "}\n"); +} + +Break::Break() +{ +} + +Break::~Break() +{ +} + +void +Break::Write(FILE* to) +{ + fprintf(to, "break;\n"); +} + +Method::Method() + :ClassElement(), + modifiers(0), + returnType(NULL), // (NULL means constructor) + returnTypeDimension(0), + statements(NULL) +{ +} + +Method::~Method() +{ +} + +void +Method::GatherTypes(set* types) const +{ + size_t N, i; + + if (this->returnType) { + types->insert(this->returnType); + } + + N = this->parameters.size(); + for (i=0; iparameters[i]->GatherTypes(types); + } + + N = this->exceptions.size(); + for (i=0; iinsert(this->exceptions[i]); + } +} + +void +Method::Write(FILE* to) +{ + size_t N, i; + + if (this->comment.length() != 0) { + fprintf(to, "%s\n", this->comment.c_str()); + } + + WriteModifiers(to, this->modifiers, SCOPE_MASK | STATIC | ABSTRACT | FINAL | OVERRIDE); + + if (this->returnType != NULL) { + string dim; + for (i=0; ireturnTypeDimension; i++) { + dim += "[]"; + } + fprintf(to, "%s%s ", this->returnType->QualifiedName().c_str(), + dim.c_str()); + } + + fprintf(to, "%s(", this->name.c_str()); + + N = this->parameters.size(); + for (i=0; iparameters[i]->WriteDeclaration(to); + if (i != N-1) { + fprintf(to, ", "); + } + } + + fprintf(to, ")"); + + N = this->exceptions.size(); + for (i=0; iexceptions[i]->QualifiedName().c_str()); + } + + if (this->statements == NULL) { + fprintf(to, ";\n"); + } else { + fprintf(to, "\n"); + this->statements->Write(to); + } +} + +Class::Class() + :modifiers(0), + what(CLASS), + type(NULL), + extends(NULL) +{ +} + +Class::~Class() +{ +} + +void +Class::GatherTypes(set* types) const +{ + int N, i; + + types->insert(this->type); + if (this->extends != NULL) { + types->insert(this->extends); + } + + N = this->interfaces.size(); + for (i=0; iinsert(this->interfaces[i]); + } + + N = this->elements.size(); + for (i=0; ielements[i]->GatherTypes(types); + } +} + +void +Class::Write(FILE* to) +{ + size_t N, i; + + if (this->comment.length() != 0) { + fprintf(to, "%s\n", this->comment.c_str()); + } + + WriteModifiers(to, this->modifiers, ALL_MODIFIERS); + + if (this->what == Class::CLASS) { + fprintf(to, "class "); + } else { + fprintf(to, "interface "); + } + + string name = this->type->Name(); + size_t pos = name.rfind('.'); + if (pos != string::npos) { + name = name.c_str() + pos + 1; + } + + fprintf(to, "%s", name.c_str()); + + if (this->extends != NULL) { + fprintf(to, " extends %s", this->extends->QualifiedName().c_str()); + } + + N = this->interfaces.size(); + if (N != 0) { + if (this->what == Class::CLASS) { + fprintf(to, " implements"); + } else { + fprintf(to, " extends"); + } + for (i=0; iinterfaces[i]->QualifiedName().c_str()); + } + } + + fprintf(to, "\n"); + fprintf(to, "{\n"); + + N = this->elements.size(); + for (i=0; ielements[i]->Write(to); + } + + fprintf(to, "}\n"); + +} + +Document::Document() +{ +} + +Document::~Document() +{ +} + +static string +escape_backslashes(const string& str) +{ + string result; + const size_t I=str.length(); + for (size_t i=0; icomment.length() != 0) { + fprintf(to, "%s\n", this->comment.c_str()); + } + fprintf(to, "/*\n" + " * This file is auto-generated. DO NOT MODIFY.\n" + " * Original file: %s\n" + " */\n", escape_backslashes(this->originalSrc).c_str()); + if (this->package.length() != 0) { + fprintf(to, "package %s;\n", this->package.c_str()); + } + + N = this->classes.size(); + for (i=0; iclasses[i]; + c->Write(to); + } +} + diff --git a/tools/aidl/AST.h b/tools/aidl/AST.h new file mode 100644 index 0000000000000..ead5e7ae3439c --- /dev/null +++ b/tools/aidl/AST.h @@ -0,0 +1,371 @@ +#ifndef AIDL_AST_H +#define AIDL_AST_H + +#include +#include +#include +#include +#include + +using namespace std; + +class Type; + +enum { + PACKAGE_PRIVATE = 0x00000000, + PUBLIC = 0x00000001, + PRIVATE = 0x00000002, + PROTECTED = 0x00000003, + SCOPE_MASK = 0x00000003, + + STATIC = 0x00000010, + FINAL = 0x00000020, + ABSTRACT = 0x00000040, + + OVERRIDE = 0x00000100, + + ALL_MODIFIERS = 0xffffffff +}; + +// Write the modifiers that are set in both mod and mask +void WriteModifiers(FILE* to, int mod, int mask); + +struct ClassElement +{ + ClassElement(); + virtual ~ClassElement(); + + virtual void GatherTypes(set* types) const = 0; + virtual void Write(FILE* to) = 0; +}; + +struct Expression +{ + virtual ~Expression(); + virtual void Write(FILE* to) = 0; +}; + +struct LiteralExpression : public Expression +{ + string value; + + LiteralExpression(const string& value); + virtual ~LiteralExpression(); + virtual void Write(FILE* to); +}; + +// TODO: also escape the contents. not needed for now +struct StringLiteralExpression : public Expression +{ + string value; + + StringLiteralExpression(const string& value); + virtual ~StringLiteralExpression(); + virtual void Write(FILE* to); +}; + +struct Variable : public Expression +{ + Type* type; + string name; + int dimension; + + Variable(); + Variable(Type* type, const string& name); + Variable(Type* type, const string& name, int dimension); + virtual ~Variable(); + + virtual void GatherTypes(set* types) const; + void WriteDeclaration(FILE* to); + void Write(FILE* to); +}; + +struct FieldVariable : public Expression +{ + Expression* object; + Type* clazz; + string name; + + FieldVariable(Expression* object, const string& name); + FieldVariable(Type* clazz, const string& name); + virtual ~FieldVariable(); + + void Write(FILE* to); +}; + +struct Field : public ClassElement +{ + string comment; + int modifiers; + Variable *variable; + string value; + + Field(); + Field(int modifiers, Variable* variable); + virtual ~Field(); + + virtual void GatherTypes(set* types) const; + virtual void Write(FILE* to); +}; + +struct Statement +{ + virtual ~Statement(); + virtual void Write(FILE* to) = 0; +}; + +struct StatementBlock : public Statement +{ + vector statements; + + StatementBlock(); + virtual ~StatementBlock(); + virtual void Write(FILE* to); + + void Add(Statement* statement); + void Add(Expression* expression); +}; + +struct ExpressionStatement : public Statement +{ + Expression* expression; + + ExpressionStatement(Expression* expression); + virtual ~ExpressionStatement(); + virtual void Write(FILE* to); +}; + +struct Assignment : public Expression +{ + Variable* lvalue; + Expression* rvalue; + Type* cast; + + Assignment(Variable* lvalue, Expression* rvalue); + Assignment(Variable* lvalue, Expression* rvalue, Type* cast); + virtual ~Assignment(); + virtual void Write(FILE* to); +}; + +struct MethodCall : public Expression +{ + Expression* obj; + Type* clazz; + string name; + vector arguments; + vector exceptions; + + MethodCall(const string& name); + MethodCall(const string& name, int argc, ...); + MethodCall(Expression* obj, const string& name); + MethodCall(Type* clazz, const string& name); + MethodCall(Expression* obj, const string& name, int argc, ...); + MethodCall(Type* clazz, const string& name, int argc, ...); + virtual ~MethodCall(); + virtual void Write(FILE* to); + +private: + void init(int n, va_list args); +}; + +struct Comparison : public Expression +{ + Expression* lvalue; + string op; + Expression* rvalue; + + Comparison(Expression* lvalue, const string& op, Expression* rvalue); + virtual ~Comparison(); + virtual void Write(FILE* to); +}; + +struct NewExpression : public Expression +{ + Type* type; + vector arguments; + + NewExpression(Type* type); + NewExpression(Type* type, int argc, ...); + virtual ~NewExpression(); + virtual void Write(FILE* to); + +private: + void init(int n, va_list args); +}; + +struct NewArrayExpression : public Expression +{ + Type* type; + Expression* size; + + NewArrayExpression(Type* type, Expression* size); + virtual ~NewArrayExpression(); + virtual void Write(FILE* to); +}; + +struct Ternary : public Expression +{ + Expression* condition; + Expression* ifpart; + Expression* elsepart; + + Ternary(); + Ternary(Expression* condition, Expression* ifpart, Expression* elsepart); + virtual ~Ternary(); + virtual void Write(FILE* to); +}; + +struct Cast : public Expression +{ + Type* type; + Expression* expression; + + Cast(); + Cast(Type* type, Expression* expression); + virtual ~Cast(); + virtual void Write(FILE* to); +}; + +struct VariableDeclaration : public Statement +{ + Variable* lvalue; + Type* cast; + Expression* rvalue; + + VariableDeclaration(Variable* lvalue); + VariableDeclaration(Variable* lvalue, Expression* rvalue, Type* cast = NULL); + virtual ~VariableDeclaration(); + virtual void Write(FILE* to); +}; + +struct IfStatement : public Statement +{ + Expression* expression; + StatementBlock* statements; + IfStatement* elseif; + + IfStatement(); + virtual ~IfStatement(); + virtual void Write(FILE* to); +}; + +struct ReturnStatement : public Statement +{ + Expression* expression; + + ReturnStatement(Expression* expression); + virtual ~ReturnStatement(); + virtual void Write(FILE* to); +}; + +struct TryStatement : public Statement +{ + StatementBlock* statements; + + TryStatement(); + virtual ~TryStatement(); + virtual void Write(FILE* to); +}; + +struct CatchStatement : public Statement +{ + StatementBlock* statements; + Variable* exception; + + CatchStatement(Variable* exception); + virtual ~CatchStatement(); + virtual void Write(FILE* to); +}; + +struct FinallyStatement : public Statement +{ + StatementBlock* statements; + + FinallyStatement(); + virtual ~FinallyStatement(); + virtual void Write(FILE* to); +}; + +struct Case +{ + vector cases; + StatementBlock* statements; + + Case(); + Case(const string& c); + virtual ~Case(); + virtual void Write(FILE* to); +}; + +struct SwitchStatement : public Statement +{ + Expression* expression; + vector cases; + + SwitchStatement(Expression* expression); + virtual ~SwitchStatement(); + virtual void Write(FILE* to); +}; + +struct Break : public Statement +{ + Break(); + virtual ~Break(); + virtual void Write(FILE* to); +}; + +struct Method : public ClassElement +{ + string comment; + int modifiers; + Type* returnType; + size_t returnTypeDimension; + string name; + vector parameters; + vector exceptions; + StatementBlock* statements; + + Method(); + virtual ~Method(); + + virtual void GatherTypes(set* types) const; + virtual void Write(FILE* to); +}; + +struct Class : public ClassElement +{ + enum { + CLASS, + INTERFACE + }; + + string comment; + int modifiers; + int what; // CLASS or INTERFACE + Type* type; + Type* extends; + vector interfaces; + vector elements; + + Class(); + virtual ~Class(); + + virtual void GatherTypes(set* types) const; + virtual void Write(FILE* to); +}; + +struct Document +{ + string comment; + string package; + string originalSrc; + set imports; + vector classes; + + Document(); + virtual ~Document(); + + virtual void Write(FILE* to); +}; + +#endif // AIDL_AST_H diff --git a/tools/aidl/Android.mk b/tools/aidl/Android.mk new file mode 100644 index 0000000000000..77d46abf4881b --- /dev/null +++ b/tools/aidl/Android.mk @@ -0,0 +1,29 @@ +# Copyright 2007 The Android Open Source Project +# +# Copies files into the directory structure described by a manifest + +# This tool is prebuilt if we're doing an app-only build. +ifeq ($(TARGET_BUILD_APPS),) + +LOCAL_PATH:= $(call my-dir) +include $(CLEAR_VARS) + +LOCAL_SRC_FILES := \ + aidl_language_l.l \ + aidl_language_y.y \ + aidl.cpp \ + aidl_language.cpp \ + options.cpp \ + search_path.cpp \ + AST.cpp \ + Type.cpp \ + generate_java.cpp \ + generate_java_binder.cpp \ + generate_java_rpc.cpp + +LOCAL_CFLAGS := -g +LOCAL_MODULE := aidl + +include $(BUILD_HOST_EXECUTABLE) + +endif # TARGET_BUILD_APPS diff --git a/tools/aidl/NOTICE b/tools/aidl/NOTICE new file mode 100644 index 0000000000000..c5b1efa7aac76 --- /dev/null +++ b/tools/aidl/NOTICE @@ -0,0 +1,190 @@ + + Copyright (c) 2005-2008, The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + diff --git a/tools/aidl/Type.cpp b/tools/aidl/Type.cpp new file mode 100644 index 0000000000000..d572af6d2aab7 --- /dev/null +++ b/tools/aidl/Type.cpp @@ -0,0 +1,1440 @@ +#include "Type.h" + +Namespace NAMES; + +Type* VOID_TYPE; +Type* BOOLEAN_TYPE; +Type* BYTE_TYPE; +Type* CHAR_TYPE; +Type* INT_TYPE; +Type* LONG_TYPE; +Type* FLOAT_TYPE; +Type* DOUBLE_TYPE; +Type* STRING_TYPE; +Type* OBJECT_TYPE; +Type* CHAR_SEQUENCE_TYPE; +Type* TEXT_UTILS_TYPE; +Type* REMOTE_EXCEPTION_TYPE; +Type* RUNTIME_EXCEPTION_TYPE; +Type* IBINDER_TYPE; +Type* IINTERFACE_TYPE; +Type* BINDER_NATIVE_TYPE; +Type* BINDER_PROXY_TYPE; +Type* PARCEL_TYPE; +Type* PARCELABLE_INTERFACE_TYPE; +Type* CONTEXT_TYPE; +Type* MAP_TYPE; +Type* LIST_TYPE; +Type* CLASSLOADER_TYPE; +Type* RPC_DATA_TYPE; +Type* RPC_ERROR_TYPE; +Type* EVENT_FAKE_TYPE; + +Expression* NULL_VALUE; +Expression* THIS_VALUE; +Expression* SUPER_VALUE; +Expression* TRUE_VALUE; +Expression* FALSE_VALUE; + +void +register_base_types() +{ + VOID_TYPE = new BasicType("void", + "XXX", "XXX", "XXX", "XXX", "XXX", + "XXX", "XXX", "XXX", "XXX", "XXX"); + NAMES.Add(VOID_TYPE); + + BOOLEAN_TYPE = new BooleanType(); + NAMES.Add(BOOLEAN_TYPE); + + BYTE_TYPE = new BasicType("byte", + "writeByte", "readByte", "writeByteArray", "createByteArray", "readByteArray", + "putByte", "getByte", "putByteArray", "createByteArray", "getByteArray"); + NAMES.Add(BYTE_TYPE); + + CHAR_TYPE = new CharType(); + NAMES.Add(CHAR_TYPE); + + INT_TYPE = new BasicType("int", + "writeInt", "readInt", "writeIntArray", "createIntArray", "readIntArray", + "putInteger", "getInteger", "putIntegerArray", "createIntegerArray", "getIntegerArray"); + NAMES.Add(INT_TYPE); + + LONG_TYPE = new BasicType("long", + "writeLong", "readLong", "writeLongArray", "createLongArray", "readLongArray", + "putLong", "getLong", "putLongArray", "createLongArray", "getLongArray"); + NAMES.Add(LONG_TYPE); + + FLOAT_TYPE = new BasicType("float", + "writeFloat", "readFloat", "writeFloatArray", "createFloatArray", "readFloatArray", + "putFloat", "getFloat", "putFloatArray", "createFloatArray", "getFloatArray"); + NAMES.Add(FLOAT_TYPE); + + DOUBLE_TYPE = new BasicType("double", + "writeDouble", "readDouble", "writeDoubleArray", "createDoubleArray", "readDoubleArray", + "putDouble", "getDouble", "putDoubleArray", "createDoubleArray", "getDoubleArray"); + NAMES.Add(DOUBLE_TYPE); + + STRING_TYPE = new StringType(); + NAMES.Add(STRING_TYPE); + + OBJECT_TYPE = new Type("java.lang", "Object", Type::BUILT_IN, false, false, false); + NAMES.Add(OBJECT_TYPE); + + CHAR_SEQUENCE_TYPE = new CharSequenceType(); + NAMES.Add(CHAR_SEQUENCE_TYPE); + + MAP_TYPE = new MapType(); + NAMES.Add(MAP_TYPE); + + LIST_TYPE = new ListType(); + NAMES.Add(LIST_TYPE); + + TEXT_UTILS_TYPE = new Type("android.text", "TextUtils", Type::BUILT_IN, false, false, false); + NAMES.Add(TEXT_UTILS_TYPE); + + REMOTE_EXCEPTION_TYPE = new RemoteExceptionType(); + NAMES.Add(REMOTE_EXCEPTION_TYPE); + + RUNTIME_EXCEPTION_TYPE = new RuntimeExceptionType(); + NAMES.Add(RUNTIME_EXCEPTION_TYPE); + + IBINDER_TYPE = new IBinderType(); + NAMES.Add(IBINDER_TYPE); + + IINTERFACE_TYPE = new IInterfaceType(); + NAMES.Add(IINTERFACE_TYPE); + + BINDER_NATIVE_TYPE = new BinderType(); + NAMES.Add(BINDER_NATIVE_TYPE); + + BINDER_PROXY_TYPE = new BinderProxyType(); + NAMES.Add(BINDER_PROXY_TYPE); + + PARCEL_TYPE = new ParcelType(); + NAMES.Add(PARCEL_TYPE); + + PARCELABLE_INTERFACE_TYPE = new ParcelableInterfaceType(); + NAMES.Add(PARCELABLE_INTERFACE_TYPE); + + CONTEXT_TYPE = new Type("android.content", "Context", Type::BUILT_IN, false, false, false); + NAMES.Add(CONTEXT_TYPE); + + RPC_DATA_TYPE = new RpcDataType(); + NAMES.Add(RPC_DATA_TYPE); + + RPC_ERROR_TYPE = new UserDataType("android.support.place.rpc", "RpcError", + true, __FILE__, __LINE__); + NAMES.Add(RPC_ERROR_TYPE); + + EVENT_FAKE_TYPE = new Type("event", Type::BUILT_IN, false, false, false); + NAMES.Add(EVENT_FAKE_TYPE); + + CLASSLOADER_TYPE = new ClassLoaderType(); + NAMES.Add(CLASSLOADER_TYPE); + + NULL_VALUE = new LiteralExpression("null"); + THIS_VALUE = new LiteralExpression("this"); + SUPER_VALUE = new LiteralExpression("super"); + TRUE_VALUE = new LiteralExpression("true"); + FALSE_VALUE = new LiteralExpression("false"); + + NAMES.AddGenericType("java.util", "List", 1); + NAMES.AddGenericType("java.util", "Map", 2); +} + +static Type* +make_generic_type(const string& package, const string& name, + const vector& args) +{ + if (package == "java.util" && name == "List") { + return new GenericListType("java.util", "List", args); + } + return NULL; + //return new GenericType(package, name, args); +} + +// ================================================================ + +Type::Type(const string& name, int kind, bool canWriteToParcel, bool canWriteToRpcData, + bool canBeOut) + :m_package(), + m_name(name), + m_declFile(""), + m_declLine(-1), + m_kind(kind), + m_canWriteToParcel(canWriteToParcel), + m_canWriteToRpcData(canWriteToRpcData), + m_canBeOut(canBeOut) +{ + m_qualifiedName = name; +} + +Type::Type(const string& package, const string& name, + int kind, bool canWriteToParcel, bool canWriteToRpcData, + bool canBeOut, const string& declFile, int declLine) + :m_package(package), + m_name(name), + m_declFile(declFile), + m_declLine(declLine), + m_kind(kind), + m_canWriteToParcel(canWriteToParcel), + m_canWriteToRpcData(canWriteToRpcData), + m_canBeOut(canBeOut) +{ + if (package.length() > 0) { + m_qualifiedName = package; + m_qualifiedName += '.'; + } + m_qualifiedName += name; +} + +Type::~Type() +{ +} + +bool +Type::CanBeArray() const +{ + return false; +} + +string +Type::ImportType() const +{ + return m_qualifiedName; +} + +string +Type::CreatorName() const +{ + return ""; +} + +string +Type::RpcCreatorName() const +{ + return ""; +} + +string +Type::InstantiableName() const +{ + return QualifiedName(); +} + + +void +Type::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags) +{ + fprintf(stderr, "aidl:internal error %s:%d qualifiedName=%sn", + __FILE__, __LINE__, m_qualifiedName.c_str()); + addTo->Add(new LiteralExpression("/* WriteToParcel error " + + m_qualifiedName + " */")); +} + +void +Type::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**) +{ + fprintf(stderr, "aidl:internal error %s:%d qualifiedName=%s\n", + __FILE__, __LINE__, m_qualifiedName.c_str()); + addTo->Add(new LiteralExpression("/* CreateFromParcel error " + + m_qualifiedName + " */")); +} + +void +Type::ReadFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**) +{ + fprintf(stderr, "aidl:internal error %s:%d qualifiedName=%s\n", + __FILE__, __LINE__, m_qualifiedName.c_str()); + addTo->Add(new LiteralExpression("/* ReadFromParcel error " + + m_qualifiedName + " */")); +} + +void +Type::WriteArrayToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags) +{ + fprintf(stderr, "aidl:internal error %s:%d qualifiedName=%s\n", + __FILE__, __LINE__, m_qualifiedName.c_str()); + addTo->Add(new LiteralExpression("/* WriteArrayToParcel error " + + m_qualifiedName + " */")); +} + +void +Type::CreateArrayFromParcel(StatementBlock* addTo, Variable* v, + Variable* parcel, Variable**) +{ + fprintf(stderr, "aidl:internal error %s:%d qualifiedName=%s\n", + __FILE__, __LINE__, m_qualifiedName.c_str()); + addTo->Add(new LiteralExpression("/* CreateArrayFromParcel error " + + m_qualifiedName + " */")); +} + +void +Type::ReadArrayFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**) +{ + fprintf(stderr, "aidl:internal error %s:%d qualifiedName=%s\n", + __FILE__, __LINE__, m_qualifiedName.c_str()); + addTo->Add(new LiteralExpression("/* ReadArrayFromParcel error " + + m_qualifiedName + " */")); +} + +void +Type::WriteToRpcData(StatementBlock* addTo, Expression* k, Variable* v, + Variable* data, int flags) +{ + fprintf(stderr, "aidl:internal error %s:%d qualifiedName=%s\n", + __FILE__, __LINE__, m_qualifiedName.c_str()); + addTo->Add(new LiteralExpression("/* WriteToRpcData error " + + m_qualifiedName + " */")); +} + +void +Type::CreateFromRpcData(StatementBlock* addTo, Expression* k, Variable* v, Variable* data, + Variable** cl) +{ + fprintf(stderr, "aidl:internal error %s:%d qualifiedName=%s\n", + __FILE__, __LINE__, m_qualifiedName.c_str()); + addTo->Add(new LiteralExpression("/* ReadFromRpcData error " + + m_qualifiedName + " */")); +} + +void +Type::SetQualifiedName(const string& qualified) +{ + m_qualifiedName = qualified; +} + +Expression* +Type::BuildWriteToParcelFlags(int flags) +{ + if (flags == 0) { + return new LiteralExpression("0"); + } + if ((flags&PARCELABLE_WRITE_RETURN_VALUE) != 0) { + return new FieldVariable(PARCELABLE_INTERFACE_TYPE, + "PARCELABLE_WRITE_RETURN_VALUE"); + } + return new LiteralExpression("0"); +} + +// ================================================================ + +BasicType::BasicType(const string& name, const string& marshallParcel, + const string& unmarshallParcel, const string& writeArrayParcel, + const string& createArrayParcel, const string& readArrayParcel, + const string& marshallRpc, const string& unmarshallRpc, + const string& writeArrayRpc, const string& createArrayRpc, const string& readArrayRpc) + :Type(name, BUILT_IN, true, true, false), + m_marshallParcel(marshallParcel), + m_unmarshallParcel(unmarshallParcel), + m_writeArrayParcel(writeArrayParcel), + m_createArrayParcel(createArrayParcel), + m_readArrayParcel(readArrayParcel), + m_marshallRpc(marshallRpc), + m_unmarshallRpc(unmarshallRpc), + m_writeArrayRpc(writeArrayRpc), + m_createArrayRpc(createArrayRpc), + m_readArrayRpc(readArrayRpc) +{ +} + +void +BasicType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags) +{ + addTo->Add(new MethodCall(parcel, m_marshallParcel, 1, v)); +} + +void +BasicType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**) +{ + addTo->Add(new Assignment(v, new MethodCall(parcel, m_unmarshallParcel))); +} + +bool +BasicType::CanBeArray() const +{ + return true; +} + +void +BasicType::WriteArrayToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags) +{ + addTo->Add(new MethodCall(parcel, m_writeArrayParcel, 1, v)); +} + +void +BasicType::CreateArrayFromParcel(StatementBlock* addTo, Variable* v, + Variable* parcel, Variable**) +{ + addTo->Add(new Assignment(v, new MethodCall(parcel, m_createArrayParcel))); +} + +void +BasicType::ReadArrayFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**) +{ + addTo->Add(new MethodCall(parcel, m_readArrayParcel, 1, v)); +} + +void +BasicType::WriteToRpcData(StatementBlock* addTo, Expression* k, Variable* v, + Variable* data, int flags) +{ + addTo->Add(new MethodCall(data, m_marshallRpc, 2, k, v)); +} + +void +BasicType::CreateFromRpcData(StatementBlock* addTo, Expression* k, Variable* v, Variable* data, + Variable** cl) +{ + addTo->Add(new Assignment(v, new MethodCall(data, m_unmarshallRpc, 1, k))); +} + +// ================================================================ + +BooleanType::BooleanType() + :Type("boolean", BUILT_IN, true, true, false) +{ +} + +void +BooleanType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags) +{ + addTo->Add(new MethodCall(parcel, "writeInt", 1, + new Ternary(v, new LiteralExpression("1"), + new LiteralExpression("0")))); +} + +void +BooleanType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**) +{ + addTo->Add(new Assignment(v, new Comparison(new LiteralExpression("0"), + "!=", new MethodCall(parcel, "readInt")))); +} + +bool +BooleanType::CanBeArray() const +{ + return true; +} + +void +BooleanType::WriteArrayToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags) +{ + addTo->Add(new MethodCall(parcel, "writeBooleanArray", 1, v)); +} + +void +BooleanType::CreateArrayFromParcel(StatementBlock* addTo, Variable* v, + Variable* parcel, Variable**) +{ + addTo->Add(new Assignment(v, new MethodCall(parcel, "createBooleanArray"))); +} + +void +BooleanType::ReadArrayFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**) +{ + addTo->Add(new MethodCall(parcel, "readBooleanArray", 1, v)); +} + +void +BooleanType::WriteToRpcData(StatementBlock* addTo, Expression* k, Variable* v, + Variable* data, int flags) +{ + addTo->Add(new MethodCall(data, "putBoolean", 2, k, v)); +} + +void +BooleanType::CreateFromRpcData(StatementBlock* addTo, Expression* k, Variable* v, Variable* data, + Variable** cl) +{ + addTo->Add(new Assignment(v, new MethodCall(data, "getBoolean", 1, k))); +} + +// ================================================================ + +CharType::CharType() + :Type("char", BUILT_IN, true, true, false) +{ +} + +void +CharType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags) +{ + addTo->Add(new MethodCall(parcel, "writeInt", 1, + new Cast(INT_TYPE, v))); +} + +void +CharType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**) +{ + addTo->Add(new Assignment(v, new MethodCall(parcel, "readInt"), this)); +} + +bool +CharType::CanBeArray() const +{ + return true; +} + +void +CharType::WriteArrayToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags) +{ + addTo->Add(new MethodCall(parcel, "writeCharArray", 1, v)); +} + +void +CharType::CreateArrayFromParcel(StatementBlock* addTo, Variable* v, + Variable* parcel, Variable**) +{ + addTo->Add(new Assignment(v, new MethodCall(parcel, "createCharArray"))); +} + +void +CharType::ReadArrayFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**) +{ + addTo->Add(new MethodCall(parcel, "readCharArray", 1, v)); +} + +void +CharType::WriteToRpcData(StatementBlock* addTo, Expression* k, Variable* v, + Variable* data, int flags) +{ + addTo->Add(new MethodCall(data, "putChar", 2, k, v)); +} + +void +CharType::CreateFromRpcData(StatementBlock* addTo, Expression* k, Variable* v, Variable* data, + Variable** cl) +{ + addTo->Add(new Assignment(v, new MethodCall(data, "getChar", 1, k))); +} + +// ================================================================ + +StringType::StringType() + :Type("java.lang", "String", BUILT_IN, true, true, false) +{ +} + +string +StringType::CreatorName() const +{ + return "android.os.Parcel.STRING_CREATOR"; +} + +void +StringType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags) +{ + addTo->Add(new MethodCall(parcel, "writeString", 1, v)); +} + +void +StringType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**) +{ + addTo->Add(new Assignment(v, new MethodCall(parcel, "readString"))); +} + +bool +StringType::CanBeArray() const +{ + return true; +} + +void +StringType::WriteArrayToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags) +{ + addTo->Add(new MethodCall(parcel, "writeStringArray", 1, v)); +} + +void +StringType::CreateArrayFromParcel(StatementBlock* addTo, Variable* v, + Variable* parcel, Variable**) +{ + addTo->Add(new Assignment(v, new MethodCall(parcel, "createStringArray"))); +} + +void +StringType::ReadArrayFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**) +{ + addTo->Add(new MethodCall(parcel, "readStringArray", 1, v)); +} + +void +StringType::WriteToRpcData(StatementBlock* addTo, Expression* k, Variable* v, + Variable* data, int flags) +{ + addTo->Add(new MethodCall(data, "putString", 2, k, v)); +} + +void +StringType::CreateFromRpcData(StatementBlock* addTo, Expression* k, Variable* v, + Variable* data, Variable**) +{ + addTo->Add(new Assignment(v, new MethodCall(data, "getString", 1, k))); +} + +// ================================================================ + +CharSequenceType::CharSequenceType() + :Type("java.lang", "CharSequence", BUILT_IN, true, true, false) +{ +} + +string +CharSequenceType::CreatorName() const +{ + return "android.os.Parcel.STRING_CREATOR"; +} + +void +CharSequenceType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags) +{ + // if (v != null) { + // parcel.writeInt(1); + // v.writeToParcel(parcel); + // } else { + // parcel.writeInt(0); + // } + IfStatement* elsepart = new IfStatement(); + elsepart->statements->Add(new MethodCall(parcel, "writeInt", 1, + new LiteralExpression("0"))); + IfStatement* ifpart = new IfStatement; + ifpart->expression = new Comparison(v, "!=", NULL_VALUE); + ifpart->elseif = elsepart; + ifpart->statements->Add(new MethodCall(parcel, "writeInt", 1, + new LiteralExpression("1"))); + ifpart->statements->Add(new MethodCall(TEXT_UTILS_TYPE, "writeToParcel", + 3, v, parcel, BuildWriteToParcelFlags(flags))); + + addTo->Add(ifpart); +} + +void +CharSequenceType::CreateFromParcel(StatementBlock* addTo, Variable* v, + Variable* parcel, Variable**) +{ + // if (0 != parcel.readInt()) { + // v = TextUtils.createFromParcel(parcel) + // } else { + // v = null; + // } + IfStatement* elsepart = new IfStatement(); + elsepart->statements->Add(new Assignment(v, NULL_VALUE)); + + IfStatement* ifpart = new IfStatement(); + ifpart->expression = new Comparison(new LiteralExpression("0"), "!=", + new MethodCall(parcel, "readInt")); + ifpart->elseif = elsepart; + ifpart->statements->Add(new Assignment(v, + new MethodCall(TEXT_UTILS_TYPE, + "CHAR_SEQUENCE_CREATOR.createFromParcel", 1, parcel))); + + addTo->Add(ifpart); +} + + +// ================================================================ + +RemoteExceptionType::RemoteExceptionType() + :Type("android.os", "RemoteException", BUILT_IN, false, false, false) +{ +} + +void +RemoteExceptionType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags) +{ + fprintf(stderr, "aidl:internal error %s:%d\n", __FILE__, __LINE__); +} + +void +RemoteExceptionType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**) +{ + fprintf(stderr, "aidl:internal error %s:%d\n", __FILE__, __LINE__); +} + +// ================================================================ + +RuntimeExceptionType::RuntimeExceptionType() + :Type("java.lang", "RuntimeException", BUILT_IN, false, false, false) +{ +} + +void +RuntimeExceptionType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags) +{ + fprintf(stderr, "aidl:internal error %s:%d\n", __FILE__, __LINE__); +} + +void +RuntimeExceptionType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**) +{ + fprintf(stderr, "aidl:internal error %s:%d\n", __FILE__, __LINE__); +} + + +// ================================================================ + +IBinderType::IBinderType() + :Type("android.os", "IBinder", BUILT_IN, true, false, false) +{ +} + +void +IBinderType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags) +{ + addTo->Add(new MethodCall(parcel, "writeStrongBinder", 1, v)); +} + +void +IBinderType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**) +{ + addTo->Add(new Assignment(v, new MethodCall(parcel, "readStrongBinder"))); +} + +void +IBinderType::WriteArrayToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags) +{ + addTo->Add(new MethodCall(parcel, "writeBinderArray", 1, v)); +} + +void +IBinderType::CreateArrayFromParcel(StatementBlock* addTo, Variable* v, + Variable* parcel, Variable**) +{ + addTo->Add(new Assignment(v, new MethodCall(parcel, "createBinderArray"))); +} + +void +IBinderType::ReadArrayFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**) +{ + addTo->Add(new MethodCall(parcel, "readBinderArray", 1, v)); +} + + +// ================================================================ + +IInterfaceType::IInterfaceType() + :Type("android.os", "IInterface", BUILT_IN, false, false, false) +{ +} + +void +IInterfaceType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags) +{ + fprintf(stderr, "aidl:internal error %s:%d\n", __FILE__, __LINE__); +} + +void +IInterfaceType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**) +{ + fprintf(stderr, "aidl:internal error %s:%d\n", __FILE__, __LINE__); +} + + +// ================================================================ + +BinderType::BinderType() + :Type("android.os", "Binder", BUILT_IN, false, false, false) +{ +} + +void +BinderType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags) +{ + fprintf(stderr, "aidl:internal error %s:%d\n", __FILE__, __LINE__); +} + +void +BinderType::CreateFromParcel(StatementBlock* addTo, Variable* v, + Variable* parcel, Variable**) +{ + fprintf(stderr, "aidl:internal error %s:%d\n", __FILE__, __LINE__); +} + + +// ================================================================ + +BinderProxyType::BinderProxyType() + :Type("android.os", "BinderProxy", BUILT_IN, false, false, false) +{ +} + +void +BinderProxyType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags) +{ + fprintf(stderr, "aidl:internal error %s:%d\n", __FILE__, __LINE__); +} + +void +BinderProxyType::CreateFromParcel(StatementBlock* addTo, Variable* v, + Variable* parcel, Variable**) +{ + fprintf(stderr, "aidl:internal error %s:%d\n", __FILE__, __LINE__); +} + + +// ================================================================ + +ParcelType::ParcelType() + :Type("android.os", "Parcel", BUILT_IN, false, false, false) +{ +} + +void +ParcelType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags) +{ + fprintf(stderr, "aidl:internal error %s:%d\n", __FILE__, __LINE__); +} + +void +ParcelType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**) +{ + fprintf(stderr, "aidl:internal error %s:%d\n", __FILE__, __LINE__); +} + +// ================================================================ + +ParcelableInterfaceType::ParcelableInterfaceType() + :Type("android.os", "Parcelable", BUILT_IN, false, false, false) +{ +} + +void +ParcelableInterfaceType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags) +{ + fprintf(stderr, "aidl:internal error %s:%d\n", __FILE__, __LINE__); +} + +void +ParcelableInterfaceType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**) +{ + fprintf(stderr, "aidl:internal error %s:%d\n", __FILE__, __LINE__); +} + +// ================================================================ + +MapType::MapType() + :Type("java.util", "Map", BUILT_IN, true, false, true) +{ +} + +void +MapType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags) +{ + addTo->Add(new MethodCall(parcel, "writeMap", 1, v)); +} + +static void EnsureClassLoader(StatementBlock* addTo, Variable** cl) +{ + // We don't want to look up the class loader once for every + // collection argument, so ensure we do it at most once per method. + if (*cl == NULL) { + *cl = new Variable(CLASSLOADER_TYPE, "cl"); + addTo->Add(new VariableDeclaration(*cl, + new LiteralExpression("this.getClass().getClassLoader()"), + CLASSLOADER_TYPE)); + } +} + +void +MapType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable** cl) +{ + EnsureClassLoader(addTo, cl); + addTo->Add(new Assignment(v, new MethodCall(parcel, "readHashMap", 1, *cl))); +} + +void +MapType::ReadFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable** cl) +{ + EnsureClassLoader(addTo, cl); + addTo->Add(new MethodCall(parcel, "readMap", 2, v, *cl)); +} + + +// ================================================================ + +ListType::ListType() + :Type("java.util", "List", BUILT_IN, true, true, true) +{ +} + +string +ListType::InstantiableName() const +{ + return "java.util.ArrayList"; +} + +void +ListType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags) +{ + addTo->Add(new MethodCall(parcel, "writeList", 1, v)); +} + +void +ListType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable** cl) +{ + EnsureClassLoader(addTo, cl); + addTo->Add(new Assignment(v, new MethodCall(parcel, "readArrayList", 1, *cl))); +} + +void +ListType::ReadFromParcel(StatementBlock* addTo, Variable* v, + Variable* parcel, Variable** cl) +{ + EnsureClassLoader(addTo, cl); + addTo->Add(new MethodCall(parcel, "readList", 2, v, *cl)); +} + +void +ListType::WriteToRpcData(StatementBlock* addTo, Expression* k, Variable* v, + Variable* data, int flags) +{ + addTo->Add(new MethodCall(data, "putList", 2, k, v)); +} + +void +ListType::CreateFromRpcData(StatementBlock* addTo, Expression* k, Variable* v, Variable* data, + Variable** cl) +{ + addTo->Add(new Assignment(v, new MethodCall(data, "getList", 1, k))); +} + +// ================================================================ + +UserDataType::UserDataType(const string& package, const string& name, + bool builtIn, bool canWriteToParcel, bool canWriteToRpcData, + const string& declFile, int declLine) + :Type(package, name, builtIn ? BUILT_IN : USERDATA, canWriteToParcel, canWriteToRpcData, + true, declFile, declLine) +{ +} + +string +UserDataType::CreatorName() const +{ + return QualifiedName() + ".CREATOR"; +} + +string +UserDataType::RpcCreatorName() const +{ + return QualifiedName() + ".RPC_CREATOR"; +} + +void +UserDataType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags) +{ + // if (v != null) { + // parcel.writeInt(1); + // v.writeToParcel(parcel); + // } else { + // parcel.writeInt(0); + // } + IfStatement* elsepart = new IfStatement(); + elsepart->statements->Add(new MethodCall(parcel, "writeInt", 1, + new LiteralExpression("0"))); + IfStatement* ifpart = new IfStatement; + ifpart->expression = new Comparison(v, "!=", NULL_VALUE); + ifpart->elseif = elsepart; + ifpart->statements->Add(new MethodCall(parcel, "writeInt", 1, + new LiteralExpression("1"))); + ifpart->statements->Add(new MethodCall(v, "writeToParcel", 2, + parcel, BuildWriteToParcelFlags(flags))); + + addTo->Add(ifpart); +} + +void +UserDataType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**) +{ + // if (0 != parcel.readInt()) { + // v = CLASS.CREATOR.createFromParcel(parcel) + // } else { + // v = null; + // } + IfStatement* elsepart = new IfStatement(); + elsepart->statements->Add(new Assignment(v, NULL_VALUE)); + + IfStatement* ifpart = new IfStatement(); + ifpart->expression = new Comparison(new LiteralExpression("0"), "!=", + new MethodCall(parcel, "readInt")); + ifpart->elseif = elsepart; + ifpart->statements->Add(new Assignment(v, + new MethodCall(v->type, "CREATOR.createFromParcel", 1, parcel))); + + addTo->Add(ifpart); +} + +void +UserDataType::ReadFromParcel(StatementBlock* addTo, Variable* v, + Variable* parcel, Variable**) +{ + // TODO: really, we don't need to have this extra check, but we + // don't have two separate marshalling code paths + // if (0 != parcel.readInt()) { + // v.readFromParcel(parcel) + // } + IfStatement* ifpart = new IfStatement(); + ifpart->expression = new Comparison(new LiteralExpression("0"), "!=", + new MethodCall(parcel, "readInt")); + ifpart->statements->Add(new MethodCall(v, "readFromParcel", 1, parcel)); + addTo->Add(ifpart); +} + +bool +UserDataType::CanBeArray() const +{ + return true; +} + +void +UserDataType::WriteArrayToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags) +{ + addTo->Add(new MethodCall(parcel, "writeTypedArray", 2, v, + BuildWriteToParcelFlags(flags))); +} + +void +UserDataType::CreateArrayFromParcel(StatementBlock* addTo, Variable* v, + Variable* parcel, Variable**) +{ + string creator = v->type->QualifiedName() + ".CREATOR"; + addTo->Add(new Assignment(v, new MethodCall(parcel, + "createTypedArray", 1, new LiteralExpression(creator)))); +} + +void +UserDataType::ReadArrayFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**) +{ + string creator = v->type->QualifiedName() + ".CREATOR"; + addTo->Add(new MethodCall(parcel, "readTypedArray", 2, + v, new LiteralExpression(creator))); +} + +void +UserDataType::WriteToRpcData(StatementBlock* addTo, Expression* k, Variable* v, + Variable* data, int flags) +{ + // data.putFlattenable(k, v); + addTo->Add(new MethodCall(data, "putFlattenable", 2, k, v)); +} + +void +UserDataType::CreateFromRpcData(StatementBlock* addTo, Expression* k, Variable* v, + Variable* data, Variable** cl) +{ + // data.getFlattenable(k, CLASS.RPC_CREATOR); + addTo->Add(new Assignment(v, new MethodCall(data, "getFlattenable", 2, k, + new FieldVariable(v->type, "RPC_CREATOR")))); +} + +// ================================================================ + +InterfaceType::InterfaceType(const string& package, const string& name, + bool builtIn, bool oneway, + const string& declFile, int declLine) + :Type(package, name, builtIn ? BUILT_IN : INTERFACE, true, false, false, + declFile, declLine) + ,m_oneway(oneway) +{ +} + +bool +InterfaceType::OneWay() const +{ + return m_oneway; +} + +void +InterfaceType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags) +{ + // parcel.writeStrongBinder(v != null ? v.asBinder() : null); + addTo->Add(new MethodCall(parcel, "writeStrongBinder", 1, + new Ternary( + new Comparison(v, "!=", NULL_VALUE), + new MethodCall(v, "asBinder"), + NULL_VALUE))); +} + +void +InterfaceType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**) +{ + // v = Interface.asInterface(parcel.readStrongBinder()); + string type = v->type->QualifiedName(); + type += ".Stub"; + addTo->Add(new Assignment(v, + new MethodCall( NAMES.Find(type), "asInterface", 1, + new MethodCall(parcel, "readStrongBinder")))); +} + + +// ================================================================ + +GenericType::GenericType(const string& package, const string& name, + const vector& args) + :Type(package, name, BUILT_IN, true, true, true) +{ + m_args = args; + + m_importName = package + '.' + name; + + string gen = "<"; + int N = args.size(); + for (int i=0; iQualifiedName(); + if (i != N-1) { + gen += ','; + } + } + gen += '>'; + m_genericArguments = gen; + SetQualifiedName(m_importName + gen); +} + +const vector& +GenericType::GenericArgumentTypes() const +{ + return m_args; +} + +string +GenericType::GenericArguments() const +{ + return m_genericArguments; +} + +string +GenericType::ImportType() const +{ + return m_importName; +} + +void +GenericType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags) +{ + fprintf(stderr, "implement GenericType::WriteToParcel\n"); +} + +void +GenericType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**) +{ + fprintf(stderr, "implement GenericType::CreateFromParcel\n"); +} + +void +GenericType::ReadFromParcel(StatementBlock* addTo, Variable* v, + Variable* parcel, Variable**) +{ + fprintf(stderr, "implement GenericType::ReadFromParcel\n"); +} + + +// ================================================================ + +GenericListType::GenericListType(const string& package, const string& name, + const vector& args) + :GenericType(package, name, args), + m_creator(args[0]->CreatorName()) +{ +} + +string +GenericListType::CreatorName() const +{ + return "android.os.Parcel.arrayListCreator"; +} + +string +GenericListType::InstantiableName() const +{ + return "java.util.ArrayList" + GenericArguments(); +} + +void +GenericListType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags) +{ + if (m_creator == STRING_TYPE->CreatorName()) { + addTo->Add(new MethodCall(parcel, "writeStringList", 1, v)); + } else if (m_creator == IBINDER_TYPE->CreatorName()) { + addTo->Add(new MethodCall(parcel, "writeBinderList", 1, v)); + } else { + // parcel.writeTypedListXX(arg); + addTo->Add(new MethodCall(parcel, "writeTypedList", 1, v)); + } +} + +void +GenericListType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**) +{ + if (m_creator == STRING_TYPE->CreatorName()) { + addTo->Add(new Assignment(v, + new MethodCall(parcel, "createStringArrayList", 0))); + } else if (m_creator == IBINDER_TYPE->CreatorName()) { + addTo->Add(new Assignment(v, + new MethodCall(parcel, "createBinderArrayList", 0))); + } else { + // v = _data.readTypedArrayList(XXX.creator); + addTo->Add(new Assignment(v, + new MethodCall(parcel, "createTypedArrayList", 1, + new LiteralExpression(m_creator)))); + } +} + +void +GenericListType::ReadFromParcel(StatementBlock* addTo, Variable* v, + Variable* parcel, Variable**) +{ + if (m_creator == STRING_TYPE->CreatorName()) { + addTo->Add(new MethodCall(parcel, "readStringList", 1, v)); + } else if (m_creator == IBINDER_TYPE->CreatorName()) { + addTo->Add(new MethodCall(parcel, "readBinderList", 1, v)); + } else { + // v = _data.readTypedList(v, XXX.creator); + addTo->Add(new MethodCall(parcel, "readTypedList", 2, + v, + new LiteralExpression(m_creator))); + } +} + +void +GenericListType::WriteToRpcData(StatementBlock* addTo, Expression* k, Variable* v, + Variable* data, int flags) +{ + Type* generic = GenericArgumentTypes()[0]; + if (generic == RPC_DATA_TYPE) { + addTo->Add(new MethodCall(data, "putRpcDataList", 2, k, v)); + } else if (generic->RpcCreatorName() != "") { + addTo->Add(new MethodCall(data, "putFlattenableList", 2, k, v)); + } else { + addTo->Add(new MethodCall(data, "putList", 2, k, v)); + } +} + +void +GenericListType::CreateFromRpcData(StatementBlock* addTo, Expression* k, Variable* v, + Variable* data, Variable** cl) +{ + Type* generic = GenericArgumentTypes()[0]; + if (generic == RPC_DATA_TYPE) { + addTo->Add(new Assignment(v, new MethodCall(data, "getRpcDataList", 2, k))); + } else if (generic->RpcCreatorName() != "") { + addTo->Add(new Assignment(v, new MethodCall(data, "getFlattenableList", 2, k, + new LiteralExpression(generic->RpcCreatorName())))); + } else { + string classArg = GenericArgumentTypes()[0]->QualifiedName(); + classArg += ".class"; + addTo->Add(new Assignment(v, new MethodCall(data, "getList", 2, k, + new LiteralExpression(classArg)))); + } +} + + +// ================================================================ + +RpcDataType::RpcDataType() + :UserDataType("android.support.place.rpc", "RpcData", true, true, true) +{ +} + +void +RpcDataType::WriteToRpcData(StatementBlock* addTo, Expression* k, Variable* v, + Variable* data, int flags) +{ + addTo->Add(new MethodCall(data, "putRpcData", 2, k, v)); +} + +void +RpcDataType::CreateFromRpcData(StatementBlock* addTo, Expression* k, Variable* v, Variable* data, + Variable** cl) +{ + addTo->Add(new Assignment(v, new MethodCall(data, "getRpcData", 1, k))); +} + + +// ================================================================ + +ClassLoaderType::ClassLoaderType() + :Type("java.lang", "ClassLoader", BUILT_IN, false, false, false) +{ +} + + +// ================================================================ + +Namespace::Namespace() +{ +} + +Namespace::~Namespace() +{ + int N = m_types.size(); + for (int i=0; iQualifiedName()); + if (t == NULL) { + m_types.push_back(type); + } +} + +void +Namespace::AddGenericType(const string& package, const string& name, int args) +{ + Generic g; + g.package = package; + g.name = name; + g.qualified = package + '.' + name; + g.args = args; + m_generics.push_back(g); +} + +Type* +Namespace::Find(const string& name) const +{ + int N = m_types.size(); + for (int i=0; iQualifiedName() == name) { + return m_types[i]; + } + } + return NULL; +} + +Type* +Namespace::Find(const char* package, const char* name) const +{ + string s; + if (package != NULL) { + s += package; + s += '.'; + } + s += name; + return Find(s); +} + +static string +normalize_generic(const string& s) +{ + string r; + int N = s.size(); + for (int i=0; iName() == name) { + return m_types[i]; + } + } + + // we got to here and it's not a generic, give up + if (name.find('<') == name.npos) { + return NULL; + } + + // remove any whitespace + string normalized = normalize_generic(name); + + // find the part before the '<', find a generic for it + ssize_t baseIndex = normalized.find('<'); + string base(normalized.c_str(), baseIndex); + const Generic* g = search_generic(base); + if (g == NULL) { + return NULL; + } + + // For each of the args, do a recursive search on it. We don't allow + // generics within generics like Java does, because we're really limiting + // them to just built-in container classes, at least for now. Our syntax + // ensures this right now as well. + vector args; + size_t start = baseIndex + 1; + size_t end = start; + while (normalized[start] != '\0') { + end = normalized.find(',', start); + if (end == normalized.npos) { + end = normalized.find('>', start); + } + string s(normalized.c_str()+start, end-start); + Type* t = this->Search(s); + if (t == NULL) { + // maybe we should print a warning here? + return NULL; + } + args.push_back(t); + start = end+1; + } + + // construct a GenericType, add it to our name set so they always get + // the same object, and return it. + result = make_generic_type(g->package, g->name, args); + if (result == NULL) { + return NULL; + } + + this->Add(result); + return this->Find(result->QualifiedName()); +} + +const Namespace::Generic* +Namespace::search_generic(const string& name) const +{ + int N = m_generics.size(); + + // first exact match + for (int i=0; iPackage().c_str(), t->Name().c_str(), + t->QualifiedName().c_str()); + } +} diff --git a/tools/aidl/Type.h b/tools/aidl/Type.h new file mode 100644 index 0000000000000..ae12720142e88 --- /dev/null +++ b/tools/aidl/Type.h @@ -0,0 +1,542 @@ +#ifndef AIDL_TYPE_H +#define AIDL_TYPE_H + +#include "AST.h" +#include +#include + +using namespace std; + +class Type +{ +public: + // kinds + enum { + BUILT_IN, + USERDATA, + INTERFACE, + GENERATED + }; + + // WriteToParcel flags + enum { + PARCELABLE_WRITE_RETURN_VALUE = 0x0001 + }; + + Type(const string& name, int kind, bool canWriteToParcel, + bool canWriteToRpcData, bool canBeOut); + Type(const string& package, const string& name, + int kind, bool canWriteToParcel, bool canWriteToRpcData, bool canBeOut, + const string& declFile = "", int declLine = -1); + virtual ~Type(); + + inline string Package() const { return m_package; } + inline string Name() const { return m_name; } + inline string QualifiedName() const { return m_qualifiedName; } + inline int Kind() const { return m_kind; } + inline string DeclFile() const { return m_declFile; } + inline int DeclLine() const { return m_declLine; } + inline bool CanWriteToParcel() const { return m_canWriteToParcel; } + inline bool CanWriteToRpcData() const { return m_canWriteToRpcData; } + inline bool CanBeOutParameter() const { return m_canBeOut; } + + virtual string ImportType() const; + virtual string CreatorName() const; + virtual string RpcCreatorName() const; + virtual string InstantiableName() const; + + virtual void WriteToParcel(StatementBlock* addTo, Variable* v, + Variable* parcel, int flags); + virtual void CreateFromParcel(StatementBlock* addTo, Variable* v, + Variable* parcel, Variable** cl); + virtual void ReadFromParcel(StatementBlock* addTo, Variable* v, + Variable* parcel, Variable** cl); + + virtual bool CanBeArray() const; + + virtual void WriteArrayToParcel(StatementBlock* addTo, Variable* v, + Variable* parcel, int flags); + virtual void CreateArrayFromParcel(StatementBlock* addTo, Variable* v, + Variable* parcel, Variable** cl); + virtual void ReadArrayFromParcel(StatementBlock* addTo, Variable* v, + Variable* parcel, Variable** cl); + + virtual void WriteToRpcData(StatementBlock* addTo, Expression* k, Variable* v, + Variable* data, int flags); + virtual void CreateFromRpcData(StatementBlock* addTo, Expression* k, Variable* v, + Variable* data, Variable** cl); + +protected: + void SetQualifiedName(const string& qualified); + Expression* BuildWriteToParcelFlags(int flags); + +private: + Type(); + Type(const Type&); + + string m_package; + string m_name; + string m_qualifiedName; + string m_declFile; + int m_declLine; + int m_kind; + bool m_canWriteToParcel; + bool m_canWriteToRpcData; + bool m_canBeOut; +}; + +class BasicType : public Type +{ +public: + BasicType(const string& name, + const string& marshallParcel, + const string& unmarshallParcel, + const string& writeArrayParcel, + const string& createArrayParcel, + const string& readArrayParcel, + const string& marshallRpc, + const string& unmarshallRpc, + const string& writeArrayRpc, + const string& createArrayRpc, + const string& readArrayRpc); + + virtual void WriteToParcel(StatementBlock* addTo, Variable* v, + Variable* parcel, int flags); + virtual void CreateFromParcel(StatementBlock* addTo, Variable* v, + Variable* parcel, Variable** cl); + + virtual bool CanBeArray() const; + + virtual void WriteArrayToParcel(StatementBlock* addTo, Variable* v, + Variable* parcel, int flags); + virtual void CreateArrayFromParcel(StatementBlock* addTo, Variable* v, + Variable* parcel, Variable** cl); + virtual void ReadArrayFromParcel(StatementBlock* addTo, Variable* v, + Variable* parcel, Variable** cl); + + virtual void WriteToRpcData(StatementBlock* addTo, Expression* k, Variable* v, + Variable* data, int flags); + virtual void CreateFromRpcData(StatementBlock* addTo, Expression* k, Variable* v, + Variable* data, Variable** cl); + +private: + string m_marshallParcel; + string m_unmarshallParcel; + string m_writeArrayParcel; + string m_createArrayParcel; + string m_readArrayParcel; + string m_marshallRpc; + string m_unmarshallRpc; + string m_writeArrayRpc; + string m_createArrayRpc; + string m_readArrayRpc; +}; + +class BooleanType : public Type +{ +public: + BooleanType(); + + virtual void WriteToParcel(StatementBlock* addTo, Variable* v, + Variable* parcel, int flags); + virtual void CreateFromParcel(StatementBlock* addTo, Variable* v, + Variable* parcel, Variable** cl); + + virtual bool CanBeArray() const; + + virtual void WriteArrayToParcel(StatementBlock* addTo, Variable* v, + Variable* parcel, int flags); + virtual void CreateArrayFromParcel(StatementBlock* addTo, Variable* v, + Variable* parcel, Variable** cl); + virtual void ReadArrayFromParcel(StatementBlock* addTo, Variable* v, + Variable* parcel, Variable** cl); + + virtual void WriteToRpcData(StatementBlock* addTo, Expression* k, Variable* v, + Variable* data, int flags); + virtual void CreateFromRpcData(StatementBlock* addTo, Expression* k, Variable* v, + Variable* data, Variable** cl); +}; + +class CharType : public Type +{ +public: + CharType(); + + virtual void WriteToParcel(StatementBlock* addTo, Variable* v, + Variable* parcel, int flags); + virtual void CreateFromParcel(StatementBlock* addTo, Variable* v, + Variable* parcel, Variable** cl); + + virtual bool CanBeArray() const; + + virtual void WriteArrayToParcel(StatementBlock* addTo, Variable* v, + Variable* parcel, int flags); + virtual void CreateArrayFromParcel(StatementBlock* addTo, Variable* v, + Variable* parcel, Variable** cl); + virtual void ReadArrayFromParcel(StatementBlock* addTo, Variable* v, + Variable* parcel, Variable** cl); + + virtual void WriteToRpcData(StatementBlock* addTo, Expression* k, Variable* v, + Variable* data, int flags); + virtual void CreateFromRpcData(StatementBlock* addTo, Expression* k, Variable* v, + Variable* data, Variable** cl); +}; + + +class StringType : public Type +{ +public: + StringType(); + + virtual string CreatorName() const; + + virtual void WriteToParcel(StatementBlock* addTo, Variable* v, + Variable* parcel, int flags); + virtual void CreateFromParcel(StatementBlock* addTo, Variable* v, + Variable* parcel, Variable** cl); + + virtual bool CanBeArray() const; + + virtual void WriteArrayToParcel(StatementBlock* addTo, Variable* v, + Variable* parcel, int flags); + virtual void CreateArrayFromParcel(StatementBlock* addTo, Variable* v, + Variable* parcel, Variable** cl); + virtual void ReadArrayFromParcel(StatementBlock* addTo, Variable* v, + Variable* parcel, Variable** cl); + + virtual void WriteToRpcData(StatementBlock* addTo, Expression* k, Variable* v, + Variable* data, int flags); + virtual void CreateFromRpcData(StatementBlock* addTo, Expression* k, Variable* v, + Variable* data, Variable** cl); +}; + +class CharSequenceType : public Type +{ +public: + CharSequenceType(); + + virtual string CreatorName() const; + + virtual void WriteToParcel(StatementBlock* addTo, Variable* v, + Variable* parcel, int flags); + virtual void CreateFromParcel(StatementBlock* addTo, Variable* v, + Variable* parcel, Variable** cl); +}; + +class RemoteExceptionType : public Type +{ +public: + RemoteExceptionType(); + + virtual void WriteToParcel(StatementBlock* addTo, Variable* v, + Variable* parcel, int flags); + virtual void CreateFromParcel(StatementBlock* addTo, Variable* v, + Variable* parcel, Variable** cl); +}; + +class RuntimeExceptionType : public Type +{ +public: + RuntimeExceptionType(); + + virtual void WriteToParcel(StatementBlock* addTo, Variable* v, + Variable* parcel, int flags); + virtual void CreateFromParcel(StatementBlock* addTo, Variable* v, + Variable* parcel, Variable** cl); +}; + +class IBinderType : public Type +{ +public: + IBinderType(); + + virtual void WriteToParcel(StatementBlock* addTo, Variable* v, + Variable* parcel, int flags); + virtual void CreateFromParcel(StatementBlock* addTo, Variable* v, + Variable* parcel, Variable** cl); + + virtual void WriteArrayToParcel(StatementBlock* addTo, Variable* v, + Variable* parcel, int flags); + virtual void CreateArrayFromParcel(StatementBlock* addTo, Variable* v, + Variable* parcel, Variable** cl); + virtual void ReadArrayFromParcel(StatementBlock* addTo, Variable* v, + Variable* parcel, Variable** cl); +}; + +class IInterfaceType : public Type +{ +public: + IInterfaceType(); + + virtual void WriteToParcel(StatementBlock* addTo, Variable* v, + Variable* parcel, int flags); + virtual void CreateFromParcel(StatementBlock* addTo, Variable* v, + Variable* parcel, Variable** cl); +}; + +class BinderType : public Type +{ +public: + BinderType(); + + virtual void WriteToParcel(StatementBlock* addTo, Variable* v, + Variable* parcel, int flags); + virtual void CreateFromParcel(StatementBlock* addTo, Variable* v, + Variable* parcel, Variable** cl); +}; + +class BinderProxyType : public Type +{ +public: + BinderProxyType(); + + virtual void WriteToParcel(StatementBlock* addTo, Variable* v, + Variable* parcel, int flags); + virtual void CreateFromParcel(StatementBlock* addTo, Variable* v, + Variable* parcel, Variable** cl); +}; + +class ParcelType : public Type +{ +public: + ParcelType(); + + virtual void WriteToParcel(StatementBlock* addTo, Variable* v, + Variable* parcel, int flags); + virtual void CreateFromParcel(StatementBlock* addTo, Variable* v, + Variable* parcel, Variable** cl); +}; + +class ParcelableInterfaceType : public Type +{ +public: + ParcelableInterfaceType(); + + virtual void WriteToParcel(StatementBlock* addTo, Variable* v, + Variable* parcel, int flags); + virtual void CreateFromParcel(StatementBlock* addTo, Variable* v, + Variable* parcel, Variable** cl); +}; + +class MapType : public Type +{ +public: + MapType(); + + virtual void WriteToParcel(StatementBlock* addTo, Variable* v, + Variable* parcel, int flags); + virtual void CreateFromParcel(StatementBlock* addTo, Variable* v, + Variable* parcel, Variable** cl); + virtual void ReadFromParcel(StatementBlock* addTo, Variable* v, + Variable* parcel, Variable** cl); +}; + +class ListType : public Type +{ +public: + ListType(); + + virtual string InstantiableName() const; + + virtual void WriteToParcel(StatementBlock* addTo, Variable* v, + Variable* parcel, int flags); + virtual void CreateFromParcel(StatementBlock* addTo, Variable* v, + Variable* parcel, Variable** cl); + virtual void ReadFromParcel(StatementBlock* addTo, Variable* v, + Variable* parcel, Variable** cl); + + virtual void WriteToRpcData(StatementBlock* addTo, Expression* k, Variable* v, + Variable* data, int flags); + virtual void CreateFromRpcData(StatementBlock* addTo, Expression* k, Variable* v, + Variable* data, Variable** cl); +}; + +class UserDataType : public Type +{ +public: + UserDataType(const string& package, const string& name, + bool builtIn, bool canWriteToParcel, bool canWriteToRpcData, + const string& declFile = "", int declLine = -1); + + virtual string CreatorName() const; + virtual string RpcCreatorName() const; + + virtual void WriteToParcel(StatementBlock* addTo, Variable* v, + Variable* parcel, int flags); + virtual void CreateFromParcel(StatementBlock* addTo, Variable* v, + Variable* parcel, Variable** cl); + virtual void ReadFromParcel(StatementBlock* addTo, Variable* v, + Variable* parcel, Variable** cl); + + virtual bool CanBeArray() const; + + virtual void WriteArrayToParcel(StatementBlock* addTo, Variable* v, + Variable* parcel, int flags); + virtual void CreateArrayFromParcel(StatementBlock* addTo, Variable* v, + Variable* parcel, Variable** cl); + virtual void ReadArrayFromParcel(StatementBlock* addTo, Variable* v, + Variable* parcel, Variable** cl); + + virtual void WriteToRpcData(StatementBlock* addTo, Expression* k, Variable* v, + Variable* data, int flags); + virtual void CreateFromRpcData(StatementBlock* addTo, Expression* k, Variable* v, + Variable* data, Variable** cl); +}; + +class InterfaceType : public Type +{ +public: + InterfaceType(const string& package, const string& name, + bool builtIn, bool oneway, + const string& declFile, int declLine); + + bool OneWay() const; + + virtual void WriteToParcel(StatementBlock* addTo, Variable* v, + Variable* parcel, int flags); + virtual void CreateFromParcel(StatementBlock* addTo, Variable* v, + Variable* parcel, Variable** cl); + +private: + bool m_oneway; +}; + + +class GenericType : public Type +{ +public: + GenericType(const string& package, const string& name, + const vector& args); + + const vector& GenericArgumentTypes() const; + string GenericArguments() const; + + virtual string ImportType() const; + + virtual void WriteToParcel(StatementBlock* addTo, Variable* v, + Variable* parcel, int flags); + virtual void CreateFromParcel(StatementBlock* addTo, Variable* v, + Variable* parcel, Variable** cl); + virtual void ReadFromParcel(StatementBlock* addTo, Variable* v, + Variable* parcel, Variable** cl); + +private: + string m_genericArguments; + string m_importName; + vector m_args; +}; + +class RpcDataType : public UserDataType +{ +public: + RpcDataType(); + + virtual void WriteToRpcData(StatementBlock* addTo, Expression* k, Variable* v, + Variable* data, int flags); + virtual void CreateFromRpcData(StatementBlock* addTo, Expression* k, Variable* v, + Variable* data, Variable** cl); +}; + +class ClassLoaderType : public Type +{ +public: + ClassLoaderType(); +}; + +class GenericListType : public GenericType +{ +public: + GenericListType(const string& package, const string& name, + const vector& args); + + virtual string CreatorName() const; + virtual string InstantiableName() const; + + virtual void WriteToParcel(StatementBlock* addTo, Variable* v, + Variable* parcel, int flags); + virtual void CreateFromParcel(StatementBlock* addTo, Variable* v, + Variable* parcel, Variable** cl); + virtual void ReadFromParcel(StatementBlock* addTo, Variable* v, + Variable* parcel, Variable** cl); + + virtual void WriteToRpcData(StatementBlock* addTo, Expression* k, Variable* v, + Variable* data, int flags); + virtual void CreateFromRpcData(StatementBlock* addTo, Expression* k, Variable* v, + Variable* data, Variable** cl); + +private: + string m_creator; +}; + +class Namespace +{ +public: + Namespace(); + ~Namespace(); + void Add(Type* type); + + // args is the number of template types (what is this called?) + void AddGenericType(const string& package, const string& name, int args); + + // lookup a specific class name + Type* Find(const string& name) const; + Type* Find(const char* package, const char* name) const; + + // try to search by either a full name or a partial name + Type* Search(const string& name); + + void Dump() const; + +private: + struct Generic { + string package; + string name; + string qualified; + int args; + }; + + const Generic* search_generic(const string& name) const; + + vector m_types; + vector m_generics; +}; + +extern Namespace NAMES; + +extern Type* VOID_TYPE; +extern Type* BOOLEAN_TYPE; +extern Type* BYTE_TYPE; +extern Type* CHAR_TYPE; +extern Type* INT_TYPE; +extern Type* LONG_TYPE; +extern Type* FLOAT_TYPE; +extern Type* DOUBLE_TYPE; +extern Type* OBJECT_TYPE; +extern Type* STRING_TYPE; +extern Type* CHAR_SEQUENCE_TYPE; +extern Type* TEXT_UTILS_TYPE; +extern Type* REMOTE_EXCEPTION_TYPE; +extern Type* RUNTIME_EXCEPTION_TYPE; +extern Type* IBINDER_TYPE; +extern Type* IINTERFACE_TYPE; +extern Type* BINDER_NATIVE_TYPE; +extern Type* BINDER_PROXY_TYPE; +extern Type* PARCEL_TYPE; +extern Type* PARCELABLE_INTERFACE_TYPE; + +extern Type* CONTEXT_TYPE; + +extern Type* RPC_DATA_TYPE; +extern Type* RPC_ERROR_TYPE; +extern Type* RPC_CONTEXT_TYPE; +extern Type* EVENT_FAKE_TYPE; + +extern Expression* NULL_VALUE; +extern Expression* THIS_VALUE; +extern Expression* SUPER_VALUE; +extern Expression* TRUE_VALUE; +extern Expression* FALSE_VALUE; + +void register_base_types(); + +#endif // AIDL_TYPE_H diff --git a/tools/aidl/aidl.cpp b/tools/aidl/aidl.cpp new file mode 100644 index 0000000000000..b8a48033ede5f --- /dev/null +++ b/tools/aidl/aidl.cpp @@ -0,0 +1,1155 @@ + +#include "aidl_language.h" +#include "options.h" +#include "search_path.h" +#include "Type.h" +#include "generate_java.h" +#include +#include +#include +#include + +#include +#include +#include +#include + +#ifdef HAVE_MS_C_RUNTIME +#include +#include +#endif + +#ifndef O_BINARY +# define O_BINARY 0 +#endif + +// The following are gotten as the offset from the allowable id's between +// android.os.IBinder.FIRST_CALL_TRANSACTION=1 and +// android.os.IBinder.LAST_CALL_TRANSACTION=16777215 +#define MIN_USER_SET_METHOD_ID 0 +#define MAX_USER_SET_METHOD_ID 16777214 + +using namespace std; + +static void +test_document(document_item_type* d) +{ + while (d) { + if (d->item_type == INTERFACE_TYPE_BINDER) { + interface_type* c = (interface_type*)d; + printf("interface %s %s {\n", c->package, c->name.data); + interface_item_type *q = (interface_item_type*)c->interface_items; + while (q) { + if (q->item_type == METHOD_TYPE) { + method_type *m = (method_type*)q; + printf(" %s %s(", m->type.type.data, m->name.data); + arg_type *p = m->args; + while (p) { + printf("%s %s",p->type.type.data,p->name.data); + if (p->next) printf(", "); + p=p->next; + } + printf(")"); + printf(";\n"); + } + q=q->next; + } + printf("}\n"); + } + else if (d->item_type == USER_DATA_TYPE) { + user_data_type* b = (user_data_type*)d; + if ((b->flattening_methods & PARCELABLE_DATA) != 0) { + printf("parcelable %s %s;\n", b->package, b->name.data); + } + if ((b->flattening_methods & RPC_DATA) != 0) { + printf("flattenable %s %s;\n", b->package, b->name.data); + } + } + else { + printf("UNKNOWN d=0x%08lx d->item_type=%d\n", (long)d, d->item_type); + } + d = d->next; + } +} + +// ========================================================== +int +convert_direction(const char* direction) +{ + if (direction == NULL) { + return IN_PARAMETER; + } + if (0 == strcmp(direction, "in")) { + return IN_PARAMETER; + } + if (0 == strcmp(direction, "out")) { + return OUT_PARAMETER; + } + return INOUT_PARAMETER; +} + +// ========================================================== +struct import_info { + const char* from; + const char* filename; + buffer_type statement; + const char* neededClass; + document_item_type* doc; + struct import_info* next; +}; + +document_item_type* g_document = NULL; +import_info* g_imports = NULL; + +static void +main_document_parsed(document_item_type* d) +{ + g_document = d; +} + +static void +main_import_parsed(buffer_type* statement) +{ + import_info* import = (import_info*)malloc(sizeof(import_info)); + memset(import, 0, sizeof(import_info)); + import->from = strdup(g_currentFilename); + import->statement.lineno = statement->lineno; + import->statement.data = strdup(statement->data); + import->statement.extra = NULL; + import->next = g_imports; + import->neededClass = parse_import_statement(statement->data); + g_imports = import; +} + +static ParserCallbacks g_mainCallbacks = { + &main_document_parsed, + &main_import_parsed +}; + +char* +parse_import_statement(const char* text) +{ + const char* end; + int len; + + while (isspace(*text)) { + text++; + } + while (!isspace(*text)) { + text++; + } + while (isspace(*text)) { + text++; + } + end = text; + while (!isspace(*end) && *end != ';') { + end++; + } + len = end-text; + + char* rv = (char*)malloc(len+1); + memcpy(rv, text, len); + rv[len] = '\0'; + + return rv; +} + +// ========================================================== +static void +import_import_parsed(buffer_type* statement) +{ +} + +static ParserCallbacks g_importCallbacks = { + &main_document_parsed, + &import_import_parsed +}; + +// ========================================================== +static int +check_filename(const char* filename, const char* package, buffer_type* name) +{ + const char* p; + string expected; + string fn; + size_t len; + char cwd[MAXPATHLEN]; + bool valid = false; + +#ifdef HAVE_WINDOWS_PATHS + if (isalpha(filename[0]) && filename[1] == ':' + && filename[2] == OS_PATH_SEPARATOR) { +#else + if (filename[0] == OS_PATH_SEPARATOR) { +#endif + fn = filename; + } else { + fn = getcwd(cwd, sizeof(cwd)); + len = fn.length(); + if (fn[len-1] != OS_PATH_SEPARATOR) { + fn += OS_PATH_SEPARATOR; + } + fn += filename; + } + + if (package) { + expected = package; + expected += '.'; + } + + len = expected.length(); + for (size_t i=0; idata, '.'); + len = p ? p-name->data : strlen(name->data); + expected.append(name->data, len); + + expected += ".aidl"; + + len = fn.length(); + valid = (len >= expected.length()); + + if (valid) { + p = fn.c_str() + (len - expected.length()); + +#ifdef HAVE_WINDOWS_PATHS + if (OS_PATH_SEPARATOR != '/') { + // Input filename under cygwin most likely has / separators + // whereas the expected string uses \\ separators. Adjust + // them accordingly. + for (char *c = const_cast(p); *c; ++c) { + if (*c == '/') *c = OS_PATH_SEPARATOR; + } + } +#endif + +#ifdef OS_CASE_SENSITIVE + valid = (expected == p); +#else + valid = !strcasecmp(expected.c_str(), p); +#endif + } + + if (!valid) { + fprintf(stderr, "%s:%d interface %s should be declared in a file" + " called %s.\n", + filename, name->lineno, name->data, expected.c_str()); + return 1; + } + + return 0; +} + +static int +check_filenames(const char* filename, document_item_type* items) +{ + int err = 0; + while (items) { + if (items->item_type == USER_DATA_TYPE) { + user_data_type* p = (user_data_type*)items; + err |= check_filename(filename, p->package, &p->name); + } + else if (items->item_type == INTERFACE_TYPE_BINDER + || items->item_type == INTERFACE_TYPE_RPC) { + interface_type* c = (interface_type*)items; + err |= check_filename(filename, c->package, &c->name); + } + else { + fprintf(stderr, "aidl: internal error unkown document type %d.\n", + items->item_type); + return 1; + } + items = items->next; + } + return err; +} + +// ========================================================== +static const char* +kind_to_string(int kind) +{ + switch (kind) + { + case Type::INTERFACE: + return "an interface"; + case Type::USERDATA: + return "a user data"; + default: + return "ERROR"; + } +} + +static char* +rfind(char* str, char c) +{ + char* p = str + strlen(str) - 1; + while (p >= str) { + if (*p == c) { + return p; + } + p--; + } + return NULL; +} + +static int +gather_types(const char* filename, document_item_type* items) +{ + int err = 0; + while (items) { + Type* type; + if (items->item_type == USER_DATA_TYPE) { + user_data_type* p = (user_data_type*)items; + type = new UserDataType(p->package ? p->package : "", p->name.data, + false, ((p->flattening_methods & PARCELABLE_DATA) != 0), + ((p->flattening_methods & RPC_DATA) != 0), filename, p->name.lineno); + } + else if (items->item_type == INTERFACE_TYPE_BINDER + || items->item_type == INTERFACE_TYPE_RPC) { + interface_type* c = (interface_type*)items; + type = new InterfaceType(c->package ? c->package : "", + c->name.data, false, c->oneway, + filename, c->name.lineno); + } + else { + fprintf(stderr, "aidl: internal error %s:%d\n", __FILE__, __LINE__); + return 1; + } + + Type* old = NAMES.Find(type->QualifiedName()); + if (old == NULL) { + NAMES.Add(type); + + if (items->item_type == INTERFACE_TYPE_BINDER) { + // for interfaces, also add the stub and proxy types, we don't + // bother checking these for duplicates, because the parser + // won't let us do it. + interface_type* c = (interface_type*)items; + + string name = c->name.data; + name += ".Stub"; + Type* stub = new Type(c->package ? c->package : "", + name, Type::GENERATED, false, false, false, + filename, c->name.lineno); + NAMES.Add(stub); + + name = c->name.data; + name += ".Stub.Proxy"; + Type* proxy = new Type(c->package ? c->package : "", + name, Type::GENERATED, false, false, false, + filename, c->name.lineno); + NAMES.Add(proxy); + } + else if (items->item_type == INTERFACE_TYPE_RPC) { + // for interfaces, also add the service base type, we don't + // bother checking these for duplicates, because the parser + // won't let us do it. + interface_type* c = (interface_type*)items; + + string name = c->name.data; + name += ".ServiceBase"; + Type* base = new Type(c->package ? c->package : "", + name, Type::GENERATED, false, false, false, + filename, c->name.lineno); + NAMES.Add(base); + } + } else { + if (old->Kind() == Type::BUILT_IN) { + fprintf(stderr, "%s:%d attempt to redefine built in class %s\n", + filename, type->DeclLine(), + type->QualifiedName().c_str()); + err = 1; + } + else if (type->Kind() != old->Kind()) { + const char* oldKind = kind_to_string(old->Kind()); + const char* newKind = kind_to_string(type->Kind()); + + fprintf(stderr, "%s:%d attempt to redefine %s as %s,\n", + filename, type->DeclLine(), + type->QualifiedName().c_str(), newKind); + fprintf(stderr, "%s:%d previously defined here as %s.\n", + old->DeclFile().c_str(), old->DeclLine(), oldKind); + err = 1; + } + } + + items = items->next; + } + return err; +} + +// ========================================================== +static bool +matches_keyword(const char* str) +{ + static const char* KEYWORDS[] = { "abstract", "assert", "boolean", "break", + "byte", "case", "catch", "char", "class", "const", "continue", + "default", "do", "double", "else", "enum", "extends", "final", + "finally", "float", "for", "goto", "if", "implements", "import", + "instanceof", "int", "interface", "long", "native", "new", "package", + "private", "protected", "public", "return", "short", "static", + "strictfp", "super", "switch", "synchronized", "this", "throw", + "throws", "transient", "try", "void", "volatile", "while", + "true", "false", "null", + NULL + }; + const char** k = KEYWORDS; + while (*k) { + if (0 == strcmp(str, *k)) { + return true; + } + k++; + } + return false; +} + +static int +check_method(const char* filename, int kind, method_type* m) +{ + int err = 0; + + // return type + Type* returnType = NAMES.Search(m->type.type.data); + if (returnType == NULL) { + fprintf(stderr, "%s:%d unknown return type %s\n", filename, + m->type.type.lineno, m->type.type.data); + err = 1; + return err; + } + + if (returnType == EVENT_FAKE_TYPE) { + if (kind != INTERFACE_TYPE_RPC) { + fprintf(stderr, "%s:%d event methods only supported for rpc interfaces\n", + filename, m->type.type.lineno); + err = 1; + } + } else { + if (!(kind == INTERFACE_TYPE_BINDER ? returnType->CanWriteToParcel() + : returnType->CanWriteToRpcData())) { + fprintf(stderr, "%s:%d return type %s can't be marshalled.\n", filename, + m->type.type.lineno, m->type.type.data); + err = 1; + } + } + + if (m->type.dimension > 0 && !returnType->CanBeArray()) { + fprintf(stderr, "%s:%d return type %s%s can't be an array.\n", filename, + m->type.array_token.lineno, m->type.type.data, + m->type.array_token.data); + err = 1; + } + + if (m->type.dimension > 1) { + fprintf(stderr, "%s:%d return type %s%s only one" + " dimensional arrays are supported\n", filename, + m->type.array_token.lineno, m->type.type.data, + m->type.array_token.data); + err = 1; + } + + int index = 1; + + arg_type* arg = m->args; + while (arg) { + Type* t = NAMES.Search(arg->type.type.data); + + // check the arg type + if (t == NULL) { + fprintf(stderr, "%s:%d parameter %s (%d) unknown type %s\n", + filename, m->type.type.lineno, arg->name.data, index, + arg->type.type.data); + err = 1; + goto next; + } + + if (t == EVENT_FAKE_TYPE) { + fprintf(stderr, "%s:%d parameter %s (%d) event can not be used as a parameter %s\n", + filename, m->type.type.lineno, arg->name.data, index, + arg->type.type.data); + err = 1; + goto next; + } + + if (!(kind == INTERFACE_TYPE_BINDER ? t->CanWriteToParcel() : t->CanWriteToRpcData())) { + fprintf(stderr, "%s:%d parameter %d: '%s %s' can't be marshalled.\n", + filename, m->type.type.lineno, index, + arg->type.type.data, arg->name.data); + err = 1; + } + + if (returnType == EVENT_FAKE_TYPE + && convert_direction(arg->direction.data) != IN_PARAMETER) { + fprintf(stderr, "%s:%d parameter %d: '%s %s' All paremeters on events must be 'in'.\n", + filename, m->type.type.lineno, index, + arg->type.type.data, arg->name.data); + err = 1; + goto next; + } + + if (arg->direction.data == NULL + && (arg->type.dimension != 0 || t->CanBeOutParameter())) { + fprintf(stderr, "%s:%d parameter %d: '%s %s' can be an out" + " parameter, so you must declare it as in," + " out or inout.\n", + filename, m->type.type.lineno, index, + arg->type.type.data, arg->name.data); + err = 1; + } + + if (convert_direction(arg->direction.data) != IN_PARAMETER + && !t->CanBeOutParameter() + && arg->type.dimension == 0) { + fprintf(stderr, "%s:%d parameter %d: '%s %s %s' can only be an in" + " parameter.\n", + filename, m->type.type.lineno, index, + arg->direction.data, arg->type.type.data, + arg->name.data); + err = 1; + } + + if (arg->type.dimension > 0 && !t->CanBeArray()) { + fprintf(stderr, "%s:%d parameter %d: '%s %s%s %s' can't be an" + " array.\n", filename, + m->type.array_token.lineno, index, arg->direction.data, + arg->type.type.data, arg->type.array_token.data, + arg->name.data); + err = 1; + } + + if (arg->type.dimension > 1) { + fprintf(stderr, "%s:%d parameter %d: '%s %s%s %s' only one" + " dimensional arrays are supported\n", filename, + m->type.array_token.lineno, index, arg->direction.data, + arg->type.type.data, arg->type.array_token.data, + arg->name.data); + err = 1; + } + + // check that the name doesn't match a keyword + if (matches_keyword(arg->name.data)) { + fprintf(stderr, "%s:%d parameter %d %s is named the same as a" + " Java or aidl keyword\n", + filename, m->name.lineno, index, arg->name.data); + err = 1; + } + +next: + index++; + arg = arg->next; + } + + return err; +} + +static int +check_types(const char* filename, document_item_type* items) +{ + int err = 0; + while (items) { + // (nothing to check for USER_DATA_TYPE) + if (items->item_type == INTERFACE_TYPE_BINDER + || items->item_type == INTERFACE_TYPE_RPC) { + map methodNames; + interface_type* c = (interface_type*)items; + + interface_item_type* member = c->interface_items; + while (member) { + if (member->item_type == METHOD_TYPE) { + method_type* m = (method_type*)member; + + err |= check_method(filename, items->item_type, m); + + // prevent duplicate methods + if (methodNames.find(m->name.data) == methodNames.end()) { + methodNames[m->name.data] = m; + } else { + fprintf(stderr,"%s:%d attempt to redefine method %s,\n", + filename, m->name.lineno, m->name.data); + method_type* old = methodNames[m->name.data]; + fprintf(stderr, "%s:%d previously defined here.\n", + filename, old->name.lineno); + err = 1; + } + } + member = member->next; + } + } + + items = items->next; + } + return err; +} + +// ========================================================== +static int +exactly_one_interface(const char* filename, const document_item_type* items, const Options& options, + bool* onlyParcelable) +{ + if (items == NULL) { + fprintf(stderr, "%s: file does not contain any interfaces\n", + filename); + return 1; + } + + const document_item_type* next = items->next; + // Allow parcelables to skip the "one-only" rule. + if (items->next != NULL && next->item_type != USER_DATA_TYPE) { + int lineno = -1; + if (next->item_type == INTERFACE_TYPE_BINDER) { + lineno = ((interface_type*)next)->interface_token.lineno; + } + else if (next->item_type == INTERFACE_TYPE_RPC) { + lineno = ((interface_type*)next)->interface_token.lineno; + } + fprintf(stderr, "%s:%d aidl can only handle one interface per file\n", + filename, lineno); + return 1; + } + + if (items->item_type == USER_DATA_TYPE) { + *onlyParcelable = true; + if (options.failOnParcelable) { + fprintf(stderr, "%s:%d aidl can only generate code for interfaces, not" + " parcelables or flattenables,\n", filename, + ((user_data_type*)items)->keyword_token.lineno); + fprintf(stderr, "%s:%d .aidl files that only declare parcelables or flattenables" + "may not go in the Makefile.\n", filename, + ((user_data_type*)items)->keyword_token.lineno); + return 1; + } + } else { + *onlyParcelable = false; + } + + return 0; +} + +// ========================================================== +void +generate_dep_file(const Options& options, const document_item_type* items) +{ + /* we open the file in binary mode to ensure that the same output is + * generated on all platforms !! + */ + FILE* to = NULL; + if (options.autoDepFile) { + string fileName = options.outputFileName + ".d"; + to = fopen(fileName.c_str(), "wb"); + } else { + to = fopen(options.depFileName.c_str(), "wb"); + } + + if (to == NULL) { + return; + } + + const char* slash = "\\"; + import_info* import = g_imports; + if (import == NULL) { + slash = ""; + } + + if (items->item_type == INTERFACE_TYPE_BINDER || items->item_type == INTERFACE_TYPE_RPC) { + fprintf(to, "%s: \\\n", options.outputFileName.c_str()); + } else { + // parcelable: there's no output file. + fprintf(to, " : \\\n"); + } + fprintf(to, " %s %s\n", options.inputFileName.c_str(), slash); + + while (import) { + if (import->next == NULL) { + slash = ""; + } + if (import->filename) { + fprintf(to, " %s %s\n", import->filename, slash); + } + import = import->next; + } + + fprintf(to, "\n"); + + // Output ": " so make won't fail if the imported file has + // been deleted, moved or renamed in incremental build. + import = g_imports; + while (import) { + if (import->filename) { + fprintf(to, "%s :\n", import->filename); + } + import = import->next; + } + + fclose(to); +} + +// ========================================================== +static string +generate_outputFileName2(const Options& options, const buffer_type& name, const char* package) +{ + string result; + + // create the path to the destination folder based on the + // interface package name + result = options.outputBaseFolder; + result += OS_PATH_SEPARATOR; + + string packageStr = package; + size_t len = packageStr.length(); + for (size_t i=0; iitem_type == INTERFACE_TYPE_BINDER || items->item_type == INTERFACE_TYPE_RPC) { + interface_type* type = (interface_type*)items; + + return generate_outputFileName2(options, type->name, type->package); + } else if (items->item_type == USER_DATA_TYPE) { + user_data_type* type = (user_data_type*)items; + return generate_outputFileName2(options, type->name, type->package); + } + + // I don't think we can come here, but safer than returning NULL. + string result; + return result; +} + + + +// ========================================================== +static void +check_outputFilePath(const string& path) { + size_t len = path.length(); + for (size_t i=0; idocument_item.item_type = USER_DATA_TYPE; + parcl->keyword_token.lineno = lineno; + parcl->keyword_token.data = strdup(type); + parcl->package = packagename ? strdup(packagename) : NULL; + parcl->name.lineno = lineno; + parcl->name.data = strdup(classname); + parcl->semicolon_token.lineno = lineno; + parcl->semicolon_token.data = strdup(";"); + parcl->flattening_methods = PARCELABLE_DATA; + doc = (document_item_type*)parcl; + } + else if (0 == strcmp("flattenable", type)) { + user_data_type* parcl = (user_data_type*)malloc( + sizeof(user_data_type)); + memset(parcl, 0, sizeof(user_data_type)); + parcl->document_item.item_type = USER_DATA_TYPE; + parcl->keyword_token.lineno = lineno; + parcl->keyword_token.data = strdup(type); + parcl->package = packagename ? strdup(packagename) : NULL; + parcl->name.lineno = lineno; + parcl->name.data = strdup(classname); + parcl->semicolon_token.lineno = lineno; + parcl->semicolon_token.data = strdup(";"); + parcl->flattening_methods = RPC_DATA; + doc = (document_item_type*)parcl; + } + else if (0 == strcmp("interface", type)) { + interface_type* iface = (interface_type*)malloc( + sizeof(interface_type)); + memset(iface, 0, sizeof(interface_type)); + iface->document_item.item_type = INTERFACE_TYPE_BINDER; + iface->interface_token.lineno = lineno; + iface->interface_token.data = strdup(type); + iface->package = packagename ? strdup(packagename) : NULL; + iface->name.lineno = lineno; + iface->name.data = strdup(classname); + iface->open_brace_token.lineno = lineno; + iface->open_brace_token.data = strdup("{"); + iface->close_brace_token.lineno = lineno; + iface->close_brace_token.data = strdup("}"); + doc = (document_item_type*)iface; + } + else { + fprintf(stderr, "%s:%d: bad type in line: %s\n", + filename.c_str(), lineno, line); + return 1; + } + err = gather_types(filename.c_str(), doc); + lineno++; + } + + if (!feof(f)) { + fprintf(stderr, "%s:%d: error reading file, line to long.\n", + filename.c_str(), lineno); + return 1; + } + + fclose(f); + return 0; +} + +static int +check_and_assign_method_ids(const char * filename, interface_item_type* first_item) +{ + // Check whether there are any methods with manually assigned id's and any that are not. + // Either all method id's must be manually assigned or all of them must not. + // Also, check for duplicates of user set id's and that the id's are within the proper bounds. + set usedIds; + interface_item_type* item = first_item; + bool hasUnassignedIds = false; + bool hasAssignedIds = false; + while (item != NULL) { + if (item->item_type == METHOD_TYPE) { + method_type* method_item = (method_type*)item; + if (method_item->hasId) { + hasAssignedIds = true; + method_item->assigned_id = atoi(method_item->id.data); + // Ensure that the user set id is not duplicated. + if (usedIds.find(method_item->assigned_id) != usedIds.end()) { + // We found a duplicate id, so throw an error. + fprintf(stderr, + "%s:%d Found duplicate method id (%d) for method: %s\n", + filename, method_item->id.lineno, + method_item->assigned_id, method_item->name.data); + return 1; + } + // Ensure that the user set id is within the appropriate limits + if (method_item->assigned_id < MIN_USER_SET_METHOD_ID || + method_item->assigned_id > MAX_USER_SET_METHOD_ID) { + fprintf(stderr, "%s:%d Found out of bounds id (%d) for method: %s\n", + filename, method_item->id.lineno, + method_item->assigned_id, method_item->name.data); + fprintf(stderr, " Value for id must be between %d and %d inclusive.\n", + MIN_USER_SET_METHOD_ID, MAX_USER_SET_METHOD_ID); + return 1; + } + usedIds.insert(method_item->assigned_id); + } else { + hasUnassignedIds = true; + } + if (hasAssignedIds && hasUnassignedIds) { + fprintf(stderr, + "%s: You must either assign id's to all methods or to none of them.\n", + filename); + return 1; + } + } + item = item->next; + } + + // In the case that all methods have unassigned id's, set a unique id for them. + if (hasUnassignedIds) { + int newId = 0; + item = first_item; + while (item != NULL) { + if (item->item_type == METHOD_TYPE) { + method_type* method_item = (method_type*)item; + method_item->assigned_id = newId++; + } + item = item->next; + } + } + + // success + return 0; +} + +// ========================================================== +static int +compile_aidl(Options& options) +{ + int err = 0, N; + + set_import_paths(options.importPaths); + + register_base_types(); + + // import the preprocessed file + N = options.preprocessedFiles.size(); + for (int i=0; ineededClass) == NULL) { + import->filename = find_import_file(import->neededClass); + if (!import->filename) { + fprintf(stderr, "%s:%d: couldn't find import for class %s\n", + import->from, import->statement.lineno, + import->neededClass); + err |= 1; + } else { + err |= parse_aidl(import->filename); + import->doc = g_document; + if (import->doc == NULL) { + err |= 1; + } + } + } + import = import->next; + } + // bail out now if parsing wasn't successful + if (err != 0 || mainDoc == NULL) { + //fprintf(stderr, "aidl: parsing failed, stopping.\n"); + return 1; + } + + // complain about ones that aren't in the right files + err |= check_filenames(options.inputFileName.c_str(), mainDoc); + import = g_imports; + while (import) { + err |= check_filenames(import->filename, import->doc); + import = import->next; + } + + // gather the types that have been declared + err |= gather_types(options.inputFileName.c_str(), mainDoc); + import = g_imports; + while (import) { + err |= gather_types(import->filename, import->doc); + import = import->next; + } + +#if 0 + printf("---- main doc ----\n"); + test_document(mainDoc); + + import = g_imports; + while (import) { + printf("---- import doc ----\n"); + test_document(import->doc); + import = import->next; + } + NAMES.Dump(); +#endif + + // check the referenced types in mainDoc to make sure we've imported them + err |= check_types(options.inputFileName.c_str(), mainDoc); + + // finally, there really only needs to be one thing in mainDoc, and it + // needs to be an interface. + bool onlyParcelable = false; + err |= exactly_one_interface(options.inputFileName.c_str(), mainDoc, options, &onlyParcelable); + + // If this includes an interface definition, then assign method ids and validate. + if (!onlyParcelable) { + err |= check_and_assign_method_ids(options.inputFileName.c_str(), + ((interface_type*)mainDoc)->interface_items); + } + + // after this, there shouldn't be any more errors because of the + // input. + if (err != 0 || mainDoc == NULL) { + return 1; + } + + // if needed, generate the outputFileName from the outputBaseFolder + if (options.outputFileName.length() == 0 && + options.outputBaseFolder.length() > 0) { + options.outputFileName = generate_outputFileName(options, mainDoc); + } + + // if we were asked to, generate a make dependency file + // unless it's a parcelable *and* it's supposed to fail on parcelable + if ((options.autoDepFile || options.depFileName != "") && + !(onlyParcelable && options.failOnParcelable)) { + // make sure the folders of the output file all exists + check_outputFilePath(options.outputFileName); + generate_dep_file(options, mainDoc); + } + + // they didn't ask to fail on parcelables, so just exit quietly. + if (onlyParcelable && !options.failOnParcelable) { + return 0; + } + + // make sure the folders of the output file all exists + check_outputFilePath(options.outputFileName); + + err = generate_java(options.outputFileName, options.inputFileName.c_str(), + (interface_type*)mainDoc); + + return err; +} + +static int +preprocess_aidl(const Options& options) +{ + vector lines; + int err; + + // read files + int N = options.filesToPreprocess.size(); + for (int i=0; iitem_type == USER_DATA_TYPE) { + user_data_type* parcelable = (user_data_type*)doc; + if ((parcelable->flattening_methods & PARCELABLE_DATA) != 0) { + line = "parcelable "; + } + if ((parcelable->flattening_methods & RPC_DATA) != 0) { + line = "flattenable "; + } + if (parcelable->package) { + line += parcelable->package; + line += '.'; + } + line += parcelable->name.data; + } else { + line = "interface "; + interface_type* iface = (interface_type*)doc; + if (iface->package) { + line += iface->package; + line += '.'; + } + line += iface->name.data; + } + line += ";\n"; + lines.push_back(line); + } + + // write preprocessed file + int fd = open( options.outputFileName.c_str(), + O_RDWR|O_CREAT|O_TRUNC|O_BINARY, +#ifdef HAVE_MS_C_RUNTIME + _S_IREAD|_S_IWRITE); +#else + S_IRUSR|S_IWUSR|S_IRGRP); +#endif + if (fd == -1) { + fprintf(stderr, "aidl: could not open file for write: %s\n", + options.outputFileName.c_str()); + return 1; + } + + N = lines.size(); + for (int i=0; i +#include +#include + +#ifdef HAVE_MS_C_RUNTIME +int isatty(int fd) +{ + return (fd == 0); +} +#endif + +#if 0 +ParserCallbacks k_parserCallbacks = { + NULL +}; +#endif + +ParserCallbacks* g_callbacks = NULL; // &k_parserCallbacks; + diff --git a/tools/aidl/aidl_language.h b/tools/aidl/aidl_language.h new file mode 100644 index 0000000000000..de1370c086f53 --- /dev/null +++ b/tools/aidl/aidl_language.h @@ -0,0 +1,172 @@ +#ifndef DEVICE_TOOLS_AIDL_AIDL_LANGUAGE_H +#define DEVICE_TOOLS_AIDL_AIDL_LANGUAGE_H + + +typedef enum { + NO_EXTRA_TEXT = 0, + SHORT_COMMENT, + LONG_COMMENT, + COPY_TEXT, + WHITESPACE +} which_extra_text; + +typedef struct extra_text_type { + unsigned lineno; + which_extra_text which; + char* data; + unsigned len; + struct extra_text_type* next; +} extra_text_type; + +typedef struct buffer_type { + unsigned lineno; + unsigned token; + char *data; + extra_text_type* extra; +} buffer_type; + +typedef struct type_type { + buffer_type type; + buffer_type array_token; + int dimension; +} type_type; + +typedef struct arg_type { + buffer_type comma_token; // empty in the first one in the list + buffer_type direction; + type_type type; + buffer_type name; + struct arg_type *next; +} arg_type; + +enum { + METHOD_TYPE +}; + +typedef struct interface_item_type { + unsigned item_type; + struct interface_item_type* next; +} interface_item_type; + +typedef struct method_type { + interface_item_type interface_item; + type_type type; + bool oneway; + buffer_type oneway_token; + buffer_type name; + buffer_type open_paren_token; + arg_type* args; + buffer_type close_paren_token; + bool hasId; + buffer_type equals_token; + buffer_type id; + // XXX missing comments/copy text here + buffer_type semicolon_token; + buffer_type* comments_token; // points into this structure, DO NOT DELETE + int assigned_id; +} method_type; + +enum { + USER_DATA_TYPE = 12, + INTERFACE_TYPE_BINDER, + INTERFACE_TYPE_RPC +}; + +typedef struct document_item_type { + unsigned item_type; + struct document_item_type* next; +} document_item_type; + + +// for user_data_type.flattening_methods +enum { + PARCELABLE_DATA = 0x1, + RPC_DATA = 0x2 +}; + +typedef struct user_data_type { + document_item_type document_item; + buffer_type keyword_token; // only the first one + char* package; + buffer_type name; + buffer_type semicolon_token; + int flattening_methods; +} user_data_type; + +typedef struct interface_type { + document_item_type document_item; + buffer_type interface_token; + bool oneway; + buffer_type oneway_token; + char* package; + buffer_type name; + buffer_type open_brace_token; + interface_item_type* interface_items; + buffer_type close_brace_token; + buffer_type* comments_token; // points into this structure, DO NOT DELETE +} interface_type; + +typedef union lexer_type { + buffer_type buffer; + type_type type; + arg_type *arg; + method_type* method; + interface_item_type* interface_item; + interface_type* interface_obj; + user_data_type* user_data; + document_item_type* document_item; +} lexer_type; + + +#define YYSTYPE lexer_type + +#if __cplusplus +extern "C" { +#endif + +int parse_aidl(char const *); + +// strips off the leading whitespace, the "import" text +// also returns whether it's a local or system import +// we rely on the input matching the import regex from below +char* parse_import_statement(const char* text); + +// in, out or inout +enum { + IN_PARAMETER = 1, + OUT_PARAMETER = 2, + INOUT_PARAMETER = 3 +}; +int convert_direction(const char* direction); + +// callbacks from within the parser +// these functions all take ownership of the strings +typedef struct ParserCallbacks { + void (*document)(document_item_type* items); + void (*import)(buffer_type* statement); +} ParserCallbacks; + +extern ParserCallbacks* g_callbacks; + +// true if there was an error parsing, false otherwise +extern int g_error; + +// the name of the file we're currently parsing +extern char const* g_currentFilename; + +// the package name for our current file +extern char const* g_currentPackage; + +typedef enum { + STATEMENT_INSIDE_INTERFACE +} error_type; + +void init_buffer_type(buffer_type* buf, int lineno); + + +#if __cplusplus +} +#endif + + +#endif // DEVICE_TOOLS_AIDL_AIDL_LANGUAGE_H diff --git a/tools/aidl/aidl_language_l.l b/tools/aidl/aidl_language_l.l new file mode 100644 index 0000000000000..3d33e7a149136 --- /dev/null +++ b/tools/aidl/aidl_language_l.l @@ -0,0 +1,214 @@ +%{ +#include "aidl_language.h" +#include "aidl_language_y.h" +#include "search_path.h" +#include +#include + +extern YYSTYPE yylval; + +// comment and whitespace handling +// these functions save a copy of the buffer +static void begin_extra_text(unsigned lineno, which_extra_text which); +static void append_extra_text(char* text); +static extra_text_type* get_extra_text(void); // you now own the object + // this returns +static void drop_extra_text(void); + +// package handling +static void do_package_statement(const char* importText); + +#define SET_BUFFER(t) \ + do { \ + yylval.buffer.lineno = yylineno; \ + yylval.buffer.token = (t); \ + yylval.buffer.data = strdup(yytext); \ + yylval.buffer.extra = get_extra_text(); \ + } while(0) + +%} + +%option yylineno +%option noyywrap + +%x COPYING LONG_COMMENT + +identifier [_a-zA-Z][_a-zA-Z0-9\.]* +whitespace ([ \t\n\r]+) +brackets \[{whitespace}?\] +idvalue (0|[1-9][0-9]*) + +%% + + +\%\%\{ { begin_extra_text(yylineno, COPY_TEXT); BEGIN(COPYING); } +\}\%\% { BEGIN(INITIAL); } +.*\n { append_extra_text(yytext); } +.* { append_extra_text(yytext); } +\n+ { append_extra_text(yytext); } + + +\/\* { begin_extra_text(yylineno, (which_extra_text)LONG_COMMENT); + BEGIN(LONG_COMMENT); } +[^*]* { append_extra_text(yytext); } +\*+[^/] { append_extra_text(yytext); } +\n { append_extra_text(yytext); } +\**\/ { BEGIN(INITIAL); } + +^{whitespace}?import{whitespace}[^ \t\r\n]+{whitespace}?; { + SET_BUFFER(IMPORT); + return IMPORT; + } +^{whitespace}?package{whitespace}[^ \t\r\n]+{whitespace}?; { + do_package_statement(yytext); + SET_BUFFER(PACKAGE); + return PACKAGE; + } +<> { yyterminate(); } + +\/\/.*\n { begin_extra_text(yylineno, SHORT_COMMENT); + append_extra_text(yytext); } + +{whitespace} { /* begin_extra_text(yylineno, WHITESPACE); + append_extra_text(yytext); */ } + +; { SET_BUFFER(';'); return ';'; } +\{ { SET_BUFFER('{'); return '{'; } +\} { SET_BUFFER('}'); return '}'; } +\( { SET_BUFFER('('); return '('; } +\) { SET_BUFFER(')'); return ')'; } +, { SET_BUFFER(','); return ','; } += { SET_BUFFER('='); return '='; } + + /* keywords */ +parcelable { SET_BUFFER(PARCELABLE); return PARCELABLE; } +interface { SET_BUFFER(INTERFACE); return INTERFACE; } +flattenable { SET_BUFFER(FLATTENABLE); return FLATTENABLE; } +rpc { SET_BUFFER(INTERFACE); return RPC; } +in { SET_BUFFER(IN); return IN; } +out { SET_BUFFER(OUT); return OUT; } +inout { SET_BUFFER(INOUT); return INOUT; } +oneway { SET_BUFFER(ONEWAY); return ONEWAY; } + +{brackets}+ { SET_BUFFER(ARRAY); return ARRAY; } +{idvalue} { SET_BUFFER(IDVALUE); return IDVALUE; } +{identifier} { SET_BUFFER(IDENTIFIER); return IDENTIFIER; } +{identifier}\<{whitespace}*{identifier}({whitespace}*,{whitespace}*{identifier})*{whitespace}*\> { + SET_BUFFER(GENERIC); return GENERIC; } + + /* syntax error! */ +. { printf("UNKNOWN(%s)", yytext); + yylval.buffer.lineno = yylineno; + yylval.buffer.token = IDENTIFIER; + yylval.buffer.data = strdup(yytext); + return IDENTIFIER; + } + +%% + +// comment and whitespace handling +// ================================================ +extra_text_type* g_extraText = NULL; +extra_text_type* g_nextExtraText = NULL; + +void begin_extra_text(unsigned lineno, which_extra_text which) +{ + extra_text_type* text = (extra_text_type*)malloc(sizeof(extra_text_type)); + text->lineno = lineno; + text->which = which; + text->data = NULL; + text->len = 0; + text->next = NULL; + if (g_nextExtraText == NULL) { + g_extraText = text; + } else { + g_nextExtraText->next = text; + } + g_nextExtraText = text; +} + +void append_extra_text(char* text) +{ + if (g_nextExtraText->data == NULL) { + g_nextExtraText->data = strdup(text); + g_nextExtraText->len = strlen(text); + } else { + char* orig = g_nextExtraText->data; + unsigned oldLen = g_nextExtraText->len; + unsigned len = strlen(text); + g_nextExtraText->len += len; + g_nextExtraText->data = (char*)malloc(g_nextExtraText->len+1); + memcpy(g_nextExtraText->data, orig, oldLen); + memcpy(g_nextExtraText->data+oldLen, text, len); + g_nextExtraText->data[g_nextExtraText->len] = '\0'; + free(orig); + } +} + +extra_text_type* +get_extra_text(void) +{ + extra_text_type* result = g_extraText; + g_extraText = NULL; + g_nextExtraText = NULL; + return result; +} + +void drop_extra_text(void) +{ + extra_text_type* p = g_extraText; + while (p) { + extra_text_type* next = p->next; + free(p->data); + free(p); + free(next); + } + g_extraText = NULL; + g_nextExtraText = NULL; +} + + +// package handling +// ================================================ +void do_package_statement(const char* importText) +{ + if (g_currentPackage) free((void*)g_currentPackage); + g_currentPackage = parse_import_statement(importText); +} + + +// main parse function +// ================================================ +char const* g_currentFilename = NULL; +char const* g_currentPackage = NULL; + +int yyparse(void); + +int parse_aidl(char const *filename) +{ + yyin = fopen(filename, "r"); + if (yyin) { + char const* oldFilename = g_currentFilename; + char const* oldPackage = g_currentPackage; + g_currentFilename = strdup(filename); + + g_error = 0; + yylineno = 1; + int rv = yyparse(); + if (g_error != 0) { + rv = g_error; + } + + free((void*)g_currentFilename); + g_currentFilename = oldFilename; + + if (g_currentPackage) free((void*)g_currentPackage); + g_currentPackage = oldPackage; + + return rv; + } else { + fprintf(stderr, "aidl: unable to open file for read: %s\n", filename); + return 1; + } +} + diff --git a/tools/aidl/aidl_language_y.y b/tools/aidl/aidl_language_y.y new file mode 100644 index 0000000000000..9b40d28ad5988 --- /dev/null +++ b/tools/aidl/aidl_language_y.y @@ -0,0 +1,373 @@ +%{ +#include "aidl_language.h" +#include +#include +#include + +int yyerror(char* errstr); +int yylex(void); +extern int yylineno; + +static int count_brackets(const char*); + +%} + +%token IMPORT +%token PACKAGE +%token IDENTIFIER +%token IDVALUE +%token GENERIC +%token ARRAY +%token PARCELABLE +%token INTERFACE +%token FLATTENABLE +%token RPC +%token IN +%token OUT +%token INOUT +%token ONEWAY + +%% +document: + document_items { g_callbacks->document($1.document_item); } + | headers document_items { g_callbacks->document($2.document_item); } + ; + +headers: + package { } + | imports { } + | package imports { } + ; + +package: + PACKAGE { } + ; + +imports: + IMPORT { g_callbacks->import(&($1.buffer)); } + | IMPORT imports { g_callbacks->import(&($1.buffer)); } + ; + +document_items: + { $$.document_item = NULL; } + | document_items declaration { + if ($2.document_item == NULL) { + // error cases only + $$ = $1; + } else { + document_item_type* p = $1.document_item; + while (p && p->next) { + p=p->next; + } + if (p) { + p->next = (document_item_type*)$2.document_item; + $$ = $1; + } else { + $$.document_item = (document_item_type*)$2.document_item; + } + } + } + | document_items error { + fprintf(stderr, "%s:%d: syntax error don't know what to do with \"%s\"\n", g_currentFilename, + $2.buffer.lineno, $2.buffer.data); + $$ = $1; + } + ; + +declaration: + parcelable_decl { $$.document_item = (document_item_type*)$1.user_data; } + | interface_decl { $$.document_item = (document_item_type*)$1.interface_item; } + ; + +parcelable_decl: + PARCELABLE IDENTIFIER ';' { + user_data_type* b = (user_data_type*)malloc(sizeof(user_data_type)); + b->document_item.item_type = USER_DATA_TYPE; + b->document_item.next = NULL; + b->keyword_token = $1.buffer; + b->name = $2.buffer; + b->package = g_currentPackage ? strdup(g_currentPackage) : NULL; + b->semicolon_token = $3.buffer; + b->flattening_methods = PARCELABLE_DATA; + $$.user_data = b; + } + | PARCELABLE ';' { + fprintf(stderr, "%s:%d syntax error in parcelable declaration. Expected type name.\n", + g_currentFilename, $1.buffer.lineno); + $$.user_data = NULL; + } + | PARCELABLE error ';' { + fprintf(stderr, "%s:%d syntax error in parcelable declaration. Expected type name, saw \"%s\".\n", + g_currentFilename, $2.buffer.lineno, $2.buffer.data); + $$.user_data = NULL; + } + | FLATTENABLE IDENTIFIER ';' { + user_data_type* b = (user_data_type*)malloc(sizeof(user_data_type)); + b->document_item.item_type = USER_DATA_TYPE; + b->document_item.next = NULL; + b->keyword_token = $1.buffer; + b->name = $2.buffer; + b->package = g_currentPackage ? strdup(g_currentPackage) : NULL; + b->semicolon_token = $3.buffer; + b->flattening_methods = PARCELABLE_DATA | RPC_DATA; + $$.user_data = b; + } + | FLATTENABLE ';' { + fprintf(stderr, "%s:%d syntax error in flattenable declaration. Expected type name.\n", + g_currentFilename, $1.buffer.lineno); + $$.user_data = NULL; + } + | FLATTENABLE error ';' { + fprintf(stderr, "%s:%d syntax error in flattenable declaration. Expected type name, saw \"%s\".\n", + g_currentFilename, $2.buffer.lineno, $2.buffer.data); + $$.user_data = NULL; + } + + ; + +interface_header: + INTERFACE { + interface_type* c = (interface_type*)malloc(sizeof(interface_type)); + c->document_item.item_type = INTERFACE_TYPE_BINDER; + c->document_item.next = NULL; + c->interface_token = $1.buffer; + c->oneway = false; + memset(&c->oneway_token, 0, sizeof(buffer_type)); + c->comments_token = &c->interface_token; + $$.interface_obj = c; + } + | ONEWAY INTERFACE { + interface_type* c = (interface_type*)malloc(sizeof(interface_type)); + c->document_item.item_type = INTERFACE_TYPE_BINDER; + c->document_item.next = NULL; + c->interface_token = $2.buffer; + c->oneway = true; + c->oneway_token = $1.buffer; + c->comments_token = &c->oneway_token; + $$.interface_obj = c; + } + | RPC { + interface_type* c = (interface_type*)malloc(sizeof(interface_type)); + c->document_item.item_type = INTERFACE_TYPE_RPC; + c->document_item.next = NULL; + c->interface_token = $1.buffer; + c->oneway = false; + memset(&c->oneway_token, 0, sizeof(buffer_type)); + c->comments_token = &c->interface_token; + $$.interface_obj = c; + } + ; + +interface_keywords: + INTERFACE + | RPC + ; + +interface_decl: + interface_header IDENTIFIER '{' interface_items '}' { + interface_type* c = $1.interface_obj; + c->name = $2.buffer; + c->package = g_currentPackage ? strdup(g_currentPackage) : NULL; + c->open_brace_token = $3.buffer; + c->interface_items = $4.interface_item; + c->close_brace_token = $5.buffer; + $$.interface_obj = c; + } + | interface_keywords error '{' interface_items '}' { + fprintf(stderr, "%s:%d: syntax error in interface declaration. Expected type name, saw \"%s\"\n", + g_currentFilename, $2.buffer.lineno, $2.buffer.data); + $$.document_item = NULL; + } + | interface_keywords error '}' { + fprintf(stderr, "%s:%d: syntax error in interface declaration. Expected type name, saw \"%s\"\n", + g_currentFilename, $2.buffer.lineno, $2.buffer.data); + $$.document_item = NULL; + } + + ; + +interface_items: + { $$.interface_item = NULL; } + | interface_items method_decl { + interface_item_type* p=$1.interface_item; + while (p && p->next) { + p=p->next; + } + if (p) { + p->next = (interface_item_type*)$2.method; + $$ = $1; + } else { + $$.interface_item = (interface_item_type*)$2.method; + } + } + | interface_items error ';' { + fprintf(stderr, "%s:%d: syntax error before ';' (expected method declaration)\n", + g_currentFilename, $3.buffer.lineno); + $$ = $1; + } + ; + +method_decl: + type IDENTIFIER '(' arg_list ')' ';' { + method_type *method = (method_type*)malloc(sizeof(method_type)); + method->interface_item.item_type = METHOD_TYPE; + method->interface_item.next = NULL; + method->oneway = false; + method->type = $1.type; + memset(&method->oneway_token, 0, sizeof(buffer_type)); + method->name = $2.buffer; + method->open_paren_token = $3.buffer; + method->args = $4.arg; + method->close_paren_token = $5.buffer; + method->hasId = false; + memset(&method->equals_token, 0, sizeof(buffer_type)); + memset(&method->id, 0, sizeof(buffer_type)); + method->semicolon_token = $6.buffer; + method->comments_token = &method->type.type; + $$.method = method; + } + | ONEWAY type IDENTIFIER '(' arg_list ')' ';' { + method_type *method = (method_type*)malloc(sizeof(method_type)); + method->interface_item.item_type = METHOD_TYPE; + method->interface_item.next = NULL; + method->oneway = true; + method->oneway_token = $1.buffer; + method->type = $2.type; + method->name = $3.buffer; + method->open_paren_token = $4.buffer; + method->args = $5.arg; + method->close_paren_token = $6.buffer; + method->hasId = false; + memset(&method->equals_token, 0, sizeof(buffer_type)); + memset(&method->id, 0, sizeof(buffer_type)); + method->semicolon_token = $7.buffer; + method->comments_token = &method->oneway_token; + $$.method = method; + } + | type IDENTIFIER '(' arg_list ')' '=' IDVALUE ';' { + method_type *method = (method_type*)malloc(sizeof(method_type)); + method->interface_item.item_type = METHOD_TYPE; + method->interface_item.next = NULL; + method->oneway = false; + memset(&method->oneway_token, 0, sizeof(buffer_type)); + method->type = $1.type; + method->name = $2.buffer; + method->open_paren_token = $3.buffer; + method->args = $4.arg; + method->close_paren_token = $5.buffer; + method->hasId = true; + method->equals_token = $6.buffer; + method->id = $7.buffer; + method->semicolon_token = $8.buffer; + method->comments_token = &method->type.type; + $$.method = method; + } + | ONEWAY type IDENTIFIER '(' arg_list ')' '=' IDVALUE ';' { + method_type *method = (method_type*)malloc(sizeof(method_type)); + method->interface_item.item_type = METHOD_TYPE; + method->interface_item.next = NULL; + method->oneway = true; + method->oneway_token = $1.buffer; + method->type = $2.type; + method->name = $3.buffer; + method->open_paren_token = $4.buffer; + method->args = $5.arg; + method->close_paren_token = $6.buffer; + method->hasId = true; + method->equals_token = $7.buffer; + method->id = $8.buffer; + method->semicolon_token = $9.buffer; + method->comments_token = &method->oneway_token; + $$.method = method; + } + ; + +arg_list: + { $$.arg = NULL; } + | arg { $$ = $1; } + | arg_list ',' arg { + if ($$.arg != NULL) { + // only NULL on error + $$ = $1; + arg_type *p = $1.arg; + while (p && p->next) { + p=p->next; + } + $3.arg->comma_token = $2.buffer; + p->next = $3.arg; + } + } + | error { + fprintf(stderr, "%s:%d: syntax error in parameter list\n", g_currentFilename, $1.buffer.lineno); + $$.arg = NULL; + } + ; + +arg: + direction type IDENTIFIER { + arg_type* arg = (arg_type*)malloc(sizeof(arg_type)); + memset(&arg->comma_token, 0, sizeof(buffer_type)); + arg->direction = $1.buffer; + arg->type = $2.type; + arg->name = $3.buffer; + arg->next = NULL; + $$.arg = arg; + } + ; + +type: + IDENTIFIER { + $$.type.type = $1.buffer; + init_buffer_type(&$$.type.array_token, yylineno); + $$.type.dimension = 0; + } + | IDENTIFIER ARRAY { + $$.type.type = $1.buffer; + $$.type.array_token = $2.buffer; + $$.type.dimension = count_brackets($2.buffer.data); + } + | GENERIC { + $$.type.type = $1.buffer; + init_buffer_type(&$$.type.array_token, yylineno); + $$.type.dimension = 0; + } + ; + +direction: + { init_buffer_type(&$$.buffer, yylineno); } + | IN { $$.buffer = $1.buffer; } + | OUT { $$.buffer = $1.buffer; } + | INOUT { $$.buffer = $1.buffer; } + ; + +%% + +#include +#include + +int g_error = 0; + +int yyerror(char* errstr) +{ + fprintf(stderr, "%s:%d: %s\n", g_currentFilename, yylineno, errstr); + g_error = 1; + return 1; +} + +void init_buffer_type(buffer_type* buf, int lineno) +{ + buf->lineno = lineno; + buf->token = 0; + buf->data = NULL; + buf->extra = NULL; +} + +static int count_brackets(const char* s) +{ + int n=0; + while (*s) { + if (*s == '[') n++; + s++; + } + return n; +} diff --git a/tools/aidl/generate_java.cpp b/tools/aidl/generate_java.cpp new file mode 100644 index 0000000000000..9e57407e772ff --- /dev/null +++ b/tools/aidl/generate_java.cpp @@ -0,0 +1,99 @@ +#include "generate_java.h" +#include "Type.h" +#include +#include +#include +#include + +// ================================================= +VariableFactory::VariableFactory(const string& base) + :m_base(base), + m_index(0) +{ +} + +Variable* +VariableFactory::Get(Type* type) +{ + char name[100]; + sprintf(name, "%s%d", m_base.c_str(), m_index); + m_index++; + Variable* v = new Variable(type, name); + m_vars.push_back(v); + return v; +} + +Variable* +VariableFactory::Get(int index) +{ + return m_vars[index]; +} + +// ================================================= +string +gather_comments(extra_text_type* extra) +{ + string s; + while (extra) { + if (extra->which == SHORT_COMMENT) { + s += extra->data; + } + else if (extra->which == LONG_COMMENT) { + s += "/*"; + s += extra->data; + s += "*/"; + } + extra = extra->next; + } + return s; +} + +string +append(const char* a, const char* b) +{ + string s = a; + s += b; + return s; +} + +// ================================================= +int +generate_java(const string& filename, const string& originalSrc, + interface_type* iface) +{ + Class* cl; + + if (iface->document_item.item_type == INTERFACE_TYPE_BINDER) { + cl = generate_binder_interface_class(iface); + } + else if (iface->document_item.item_type == INTERFACE_TYPE_RPC) { + cl = generate_rpc_interface_class(iface); + } + + Document* document = new Document; + document->comment = ""; + if (iface->package) document->package = iface->package; + document->originalSrc = originalSrc; + document->classes.push_back(cl); + +// printf("outputting... filename=%s\n", filename.c_str()); + FILE* to; + if (filename == "-") { + to = stdout; + } else { + /* open file in binary mode to ensure that the tool produces the + * same output on all platforms !! + */ + to = fopen(filename.c_str(), "wb"); + if (to == NULL) { + fprintf(stderr, "unable to open %s for write\n", filename.c_str()); + return 1; + } + } + + document->Write(to); + + fclose(to); + return 0; +} + diff --git a/tools/aidl/generate_java.h b/tools/aidl/generate_java.h new file mode 100644 index 0000000000000..4bfcfeba07c86 --- /dev/null +++ b/tools/aidl/generate_java.h @@ -0,0 +1,33 @@ +#ifndef GENERATE_JAVA_H +#define GENERATE_JAVA_H + +#include "aidl_language.h" +#include "AST.h" + +#include + +using namespace std; + +int generate_java(const string& filename, const string& originalSrc, + interface_type* iface); + +Class* generate_binder_interface_class(const interface_type* iface); +Class* generate_rpc_interface_class(const interface_type* iface); + +string gather_comments(extra_text_type* extra); +string append(const char* a, const char* b); + +class VariableFactory +{ +public: + VariableFactory(const string& base); // base must be short + Variable* Get(Type* type); + Variable* Get(int index); +private: + vector m_vars; + string m_base; + int m_index; +}; + +#endif // GENERATE_JAVA_H + diff --git a/tools/aidl/generate_java_binder.cpp b/tools/aidl/generate_java_binder.cpp new file mode 100644 index 0000000000000..f291ceb2b09fb --- /dev/null +++ b/tools/aidl/generate_java_binder.cpp @@ -0,0 +1,560 @@ +#include "generate_java.h" +#include "Type.h" +#include +#include +#include +#include + +// ================================================= +class StubClass : public Class +{ +public: + StubClass(Type* type, Type* interfaceType); + virtual ~StubClass(); + + Variable* transact_code; + Variable* transact_data; + Variable* transact_reply; + Variable* transact_flags; + SwitchStatement* transact_switch; +private: + void make_as_interface(Type* interfaceType); +}; + +StubClass::StubClass(Type* type, Type* interfaceType) + :Class() +{ + this->comment = "/** Local-side IPC implementation stub class. */"; + this->modifiers = PUBLIC | ABSTRACT | STATIC; + this->what = Class::CLASS; + this->type = type; + this->extends = BINDER_NATIVE_TYPE; + this->interfaces.push_back(interfaceType); + + // descriptor + Field* descriptor = new Field(STATIC | FINAL | PRIVATE, + new Variable(STRING_TYPE, "DESCRIPTOR")); + descriptor->value = "\"" + interfaceType->QualifiedName() + "\""; + this->elements.push_back(descriptor); + + // ctor + Method* ctor = new Method; + ctor->modifiers = PUBLIC; + ctor->comment = "/** Construct the stub at attach it to the " + "interface. */"; + ctor->name = "Stub"; + ctor->statements = new StatementBlock; + MethodCall* attach = new MethodCall(THIS_VALUE, "attachInterface", + 2, THIS_VALUE, new LiteralExpression("DESCRIPTOR")); + ctor->statements->Add(attach); + this->elements.push_back(ctor); + + // asInterface + make_as_interface(interfaceType); + + // asBinder + Method* asBinder = new Method; + asBinder->modifiers = PUBLIC | OVERRIDE; + asBinder->returnType = IBINDER_TYPE; + asBinder->name = "asBinder"; + asBinder->statements = new StatementBlock; + asBinder->statements->Add(new ReturnStatement(THIS_VALUE)); + this->elements.push_back(asBinder); + + // onTransact + this->transact_code = new Variable(INT_TYPE, "code"); + this->transact_data = new Variable(PARCEL_TYPE, "data"); + this->transact_reply = new Variable(PARCEL_TYPE, "reply"); + this->transact_flags = new Variable(INT_TYPE, "flags"); + Method* onTransact = new Method; + onTransact->modifiers = PUBLIC | OVERRIDE; + onTransact->returnType = BOOLEAN_TYPE; + onTransact->name = "onTransact"; + onTransact->parameters.push_back(this->transact_code); + onTransact->parameters.push_back(this->transact_data); + onTransact->parameters.push_back(this->transact_reply); + onTransact->parameters.push_back(this->transact_flags); + onTransact->statements = new StatementBlock; + onTransact->exceptions.push_back(REMOTE_EXCEPTION_TYPE); + this->elements.push_back(onTransact); + this->transact_switch = new SwitchStatement(this->transact_code); + + onTransact->statements->Add(this->transact_switch); + MethodCall* superCall = new MethodCall(SUPER_VALUE, "onTransact", 4, + this->transact_code, this->transact_data, + this->transact_reply, this->transact_flags); + onTransact->statements->Add(new ReturnStatement(superCall)); +} + +StubClass::~StubClass() +{ +} + +void +StubClass::make_as_interface(Type *interfaceType) +{ + Variable* obj = new Variable(IBINDER_TYPE, "obj"); + + Method* m = new Method; + m->comment = "/**\n * Cast an IBinder object into an "; + m->comment += interfaceType->QualifiedName(); + m->comment += " interface,\n"; + m->comment += " * generating a proxy if needed.\n */"; + m->modifiers = PUBLIC | STATIC; + m->returnType = interfaceType; + m->name = "asInterface"; + m->parameters.push_back(obj); + m->statements = new StatementBlock; + + IfStatement* ifstatement = new IfStatement(); + ifstatement->expression = new Comparison(obj, "==", NULL_VALUE); + ifstatement->statements = new StatementBlock; + ifstatement->statements->Add(new ReturnStatement(NULL_VALUE)); + m->statements->Add(ifstatement); + + // IInterface iin = obj.queryLocalInterface(DESCRIPTOR) + MethodCall* queryLocalInterface = new MethodCall(obj, "queryLocalInterface"); + queryLocalInterface->arguments.push_back(new LiteralExpression("DESCRIPTOR")); + IInterfaceType* iinType = new IInterfaceType(); + Variable *iin = new Variable(iinType, "iin"); + VariableDeclaration* iinVd = new VariableDeclaration(iin, queryLocalInterface, NULL); + m->statements->Add(iinVd); + + // Ensure the instance type of the local object is as expected. + // One scenario where this is needed is if another package (with a + // different class loader) runs in the same process as the service. + + // if (iin != null && iin instanceof ) return () iin; + Comparison* iinNotNull = new Comparison(iin, "!=", NULL_VALUE); + Comparison* instOfCheck = new Comparison(iin, " instanceof ", + new LiteralExpression(interfaceType->QualifiedName())); + IfStatement* instOfStatement = new IfStatement(); + instOfStatement->expression = new Comparison(iinNotNull, "&&", instOfCheck); + instOfStatement->statements = new StatementBlock; + instOfStatement->statements->Add(new ReturnStatement(new Cast(interfaceType, iin))); + m->statements->Add(instOfStatement); + + string proxyType = interfaceType->QualifiedName(); + proxyType += ".Stub.Proxy"; + NewExpression* ne = new NewExpression(NAMES.Find(proxyType)); + ne->arguments.push_back(obj); + m->statements->Add(new ReturnStatement(ne)); + + this->elements.push_back(m); +} + + + +// ================================================= +class ProxyClass : public Class +{ +public: + ProxyClass(Type* type, InterfaceType* interfaceType); + virtual ~ProxyClass(); + + Variable* mRemote; + bool mOneWay; +}; + +ProxyClass::ProxyClass(Type* type, InterfaceType* interfaceType) + :Class() +{ + this->modifiers = PRIVATE | STATIC; + this->what = Class::CLASS; + this->type = type; + this->interfaces.push_back(interfaceType); + + mOneWay = interfaceType->OneWay(); + + // IBinder mRemote + mRemote = new Variable(IBINDER_TYPE, "mRemote"); + this->elements.push_back(new Field(PRIVATE, mRemote)); + + // Proxy() + Variable* remote = new Variable(IBINDER_TYPE, "remote"); + Method* ctor = new Method; + ctor->name = "Proxy"; + ctor->statements = new StatementBlock; + ctor->parameters.push_back(remote); + ctor->statements->Add(new Assignment(mRemote, remote)); + this->elements.push_back(ctor); + + // IBinder asBinder() + Method* asBinder = new Method; + asBinder->modifiers = PUBLIC | OVERRIDE; + asBinder->returnType = IBINDER_TYPE; + asBinder->name = "asBinder"; + asBinder->statements = new StatementBlock; + asBinder->statements->Add(new ReturnStatement(mRemote)); + this->elements.push_back(asBinder); +} + +ProxyClass::~ProxyClass() +{ +} + +// ================================================= +static void +generate_new_array(Type* t, StatementBlock* addTo, Variable* v, + Variable* parcel) +{ + Variable* len = new Variable(INT_TYPE, v->name + "_length"); + addTo->Add(new VariableDeclaration(len, new MethodCall(parcel, "readInt"))); + IfStatement* lencheck = new IfStatement(); + lencheck->expression = new Comparison(len, "<", new LiteralExpression("0")); + lencheck->statements->Add(new Assignment(v, NULL_VALUE)); + lencheck->elseif = new IfStatement(); + lencheck->elseif->statements->Add(new Assignment(v, + new NewArrayExpression(t, len))); + addTo->Add(lencheck); +} + +static void +generate_write_to_parcel(Type* t, StatementBlock* addTo, Variable* v, + Variable* parcel, int flags) +{ + if (v->dimension == 0) { + t->WriteToParcel(addTo, v, parcel, flags); + } + if (v->dimension == 1) { + t->WriteArrayToParcel(addTo, v, parcel, flags); + } +} + +static void +generate_create_from_parcel(Type* t, StatementBlock* addTo, Variable* v, + Variable* parcel, Variable** cl) +{ + if (v->dimension == 0) { + t->CreateFromParcel(addTo, v, parcel, cl); + } + if (v->dimension == 1) { + t->CreateArrayFromParcel(addTo, v, parcel, cl); + } +} + +static void +generate_read_from_parcel(Type* t, StatementBlock* addTo, Variable* v, + Variable* parcel, Variable** cl) +{ + if (v->dimension == 0) { + t->ReadFromParcel(addTo, v, parcel, cl); + } + if (v->dimension == 1) { + t->ReadArrayFromParcel(addTo, v, parcel, cl); + } +} + + +static void +generate_method(const method_type* method, Class* interface, + StubClass* stubClass, ProxyClass* proxyClass, int index) +{ + arg_type* arg; + int i; + bool hasOutParams = false; + + const bool oneway = proxyClass->mOneWay || method->oneway; + + // == the TRANSACT_ constant ============================================= + string transactCodeName = "TRANSACTION_"; + transactCodeName += method->name.data; + + char transactCodeValue[60]; + sprintf(transactCodeValue, "(android.os.IBinder.FIRST_CALL_TRANSACTION + %d)", index); + + Field* transactCode = new Field(STATIC | FINAL, + new Variable(INT_TYPE, transactCodeName)); + transactCode->value = transactCodeValue; + stubClass->elements.push_back(transactCode); + + // == the declaration in the interface =================================== + Method* decl = new Method; + decl->comment = gather_comments(method->comments_token->extra); + decl->modifiers = PUBLIC; + decl->returnType = NAMES.Search(method->type.type.data); + decl->returnTypeDimension = method->type.dimension; + decl->name = method->name.data; + + arg = method->args; + while (arg != NULL) { + decl->parameters.push_back(new Variable( + NAMES.Search(arg->type.type.data), arg->name.data, + arg->type.dimension)); + arg = arg->next; + } + + decl->exceptions.push_back(REMOTE_EXCEPTION_TYPE); + + interface->elements.push_back(decl); + + // == the stub method ==================================================== + + Case* c = new Case(transactCodeName); + + MethodCall* realCall = new MethodCall(THIS_VALUE, method->name.data); + + // interface token validation is the very first thing we do + c->statements->Add(new MethodCall(stubClass->transact_data, + "enforceInterface", 1, new LiteralExpression("DESCRIPTOR"))); + + // args + Variable* cl = NULL; + VariableFactory stubArgs("_arg"); + arg = method->args; + while (arg != NULL) { + Type* t = NAMES.Search(arg->type.type.data); + Variable* v = stubArgs.Get(t); + v->dimension = arg->type.dimension; + + c->statements->Add(new VariableDeclaration(v)); + + if (convert_direction(arg->direction.data) & IN_PARAMETER) { + generate_create_from_parcel(t, c->statements, v, + stubClass->transact_data, &cl); + } else { + if (arg->type.dimension == 0) { + c->statements->Add(new Assignment(v, new NewExpression(v->type))); + } + else if (arg->type.dimension == 1) { + generate_new_array(v->type, c->statements, v, + stubClass->transact_data); + } + else { + fprintf(stderr, "aidl:internal error %s:%d\n", __FILE__, + __LINE__); + } + } + + realCall->arguments.push_back(v); + + arg = arg->next; + } + + // the real call + Variable* _result = NULL; + if (0 == strcmp(method->type.type.data, "void")) { + c->statements->Add(realCall); + + if (!oneway) { + // report that there were no exceptions + MethodCall* ex = new MethodCall(stubClass->transact_reply, + "writeNoException", 0); + c->statements->Add(ex); + } + } else { + _result = new Variable(decl->returnType, "_result", + decl->returnTypeDimension); + c->statements->Add(new VariableDeclaration(_result, realCall)); + + if (!oneway) { + // report that there were no exceptions + MethodCall* ex = new MethodCall(stubClass->transact_reply, + "writeNoException", 0); + c->statements->Add(ex); + } + + // marshall the return value + generate_write_to_parcel(decl->returnType, c->statements, _result, + stubClass->transact_reply, + Type::PARCELABLE_WRITE_RETURN_VALUE); + } + + // out parameters + i = 0; + arg = method->args; + while (arg != NULL) { + Type* t = NAMES.Search(arg->type.type.data); + Variable* v = stubArgs.Get(i++); + + if (convert_direction(arg->direction.data) & OUT_PARAMETER) { + generate_write_to_parcel(t, c->statements, v, + stubClass->transact_reply, + Type::PARCELABLE_WRITE_RETURN_VALUE); + hasOutParams = true; + } + + arg = arg->next; + } + + // return true + c->statements->Add(new ReturnStatement(TRUE_VALUE)); + stubClass->transact_switch->cases.push_back(c); + + // == the proxy method =================================================== + Method* proxy = new Method; + proxy->comment = gather_comments(method->comments_token->extra); + proxy->modifiers = PUBLIC | OVERRIDE; + proxy->returnType = NAMES.Search(method->type.type.data); + proxy->returnTypeDimension = method->type.dimension; + proxy->name = method->name.data; + proxy->statements = new StatementBlock; + arg = method->args; + while (arg != NULL) { + proxy->parameters.push_back(new Variable( + NAMES.Search(arg->type.type.data), arg->name.data, + arg->type.dimension)); + arg = arg->next; + } + proxy->exceptions.push_back(REMOTE_EXCEPTION_TYPE); + proxyClass->elements.push_back(proxy); + + // the parcels + Variable* _data = new Variable(PARCEL_TYPE, "_data"); + proxy->statements->Add(new VariableDeclaration(_data, + new MethodCall(PARCEL_TYPE, "obtain"))); + Variable* _reply = NULL; + if (!oneway) { + _reply = new Variable(PARCEL_TYPE, "_reply"); + proxy->statements->Add(new VariableDeclaration(_reply, + new MethodCall(PARCEL_TYPE, "obtain"))); + } + + // the return value + _result = NULL; + if (0 != strcmp(method->type.type.data, "void")) { + _result = new Variable(proxy->returnType, "_result", + method->type.dimension); + proxy->statements->Add(new VariableDeclaration(_result)); + } + + // try and finally + TryStatement* tryStatement = new TryStatement(); + proxy->statements->Add(tryStatement); + FinallyStatement* finallyStatement = new FinallyStatement(); + proxy->statements->Add(finallyStatement); + + // the interface identifier token: the DESCRIPTOR constant, marshalled as a string + tryStatement->statements->Add(new MethodCall(_data, "writeInterfaceToken", + 1, new LiteralExpression("DESCRIPTOR"))); + + // the parameters + arg = method->args; + while (arg != NULL) { + Type* t = NAMES.Search(arg->type.type.data); + Variable* v = new Variable(t, arg->name.data, arg->type.dimension); + int dir = convert_direction(arg->direction.data); + if (dir == OUT_PARAMETER && arg->type.dimension != 0) { + IfStatement* checklen = new IfStatement(); + checklen->expression = new Comparison(v, "==", NULL_VALUE); + checklen->statements->Add(new MethodCall(_data, "writeInt", 1, + new LiteralExpression("-1"))); + checklen->elseif = new IfStatement(); + checklen->elseif->statements->Add(new MethodCall(_data, "writeInt", + 1, new FieldVariable(v, "length"))); + tryStatement->statements->Add(checklen); + } + else if (dir & IN_PARAMETER) { + generate_write_to_parcel(t, tryStatement->statements, v, _data, 0); + } + arg = arg->next; + } + + // the transact call + MethodCall* call = new MethodCall(proxyClass->mRemote, "transact", 4, + new LiteralExpression("Stub." + transactCodeName), + _data, _reply ? _reply : NULL_VALUE, + new LiteralExpression( + oneway ? "android.os.IBinder.FLAG_ONEWAY" : "0")); + tryStatement->statements->Add(call); + + // throw back exceptions. + if (_reply) { + MethodCall* ex = new MethodCall(_reply, "readException", 0); + tryStatement->statements->Add(ex); + } + + // returning and cleanup + if (_reply != NULL) { + if (_result != NULL) { + generate_create_from_parcel(proxy->returnType, + tryStatement->statements, _result, _reply, &cl); + } + + // the out/inout parameters + arg = method->args; + while (arg != NULL) { + Type* t = NAMES.Search(arg->type.type.data); + Variable* v = new Variable(t, arg->name.data, arg->type.dimension); + if (convert_direction(arg->direction.data) & OUT_PARAMETER) { + generate_read_from_parcel(t, tryStatement->statements, + v, _reply, &cl); + } + arg = arg->next; + } + + finallyStatement->statements->Add(new MethodCall(_reply, "recycle")); + } + finallyStatement->statements->Add(new MethodCall(_data, "recycle")); + + if (_result != NULL) { + proxy->statements->Add(new ReturnStatement(_result)); + } +} + +static void +generate_interface_descriptors(StubClass* stub, ProxyClass* proxy) +{ + // the interface descriptor transaction handler + Case* c = new Case("INTERFACE_TRANSACTION"); + c->statements->Add(new MethodCall(stub->transact_reply, "writeString", + 1, new LiteralExpression("DESCRIPTOR"))); + c->statements->Add(new ReturnStatement(TRUE_VALUE)); + stub->transact_switch->cases.push_back(c); + + // and the proxy-side method returning the descriptor directly + Method* getDesc = new Method; + getDesc->modifiers = PUBLIC; + getDesc->returnType = STRING_TYPE; + getDesc->returnTypeDimension = 0; + getDesc->name = "getInterfaceDescriptor"; + getDesc->statements = new StatementBlock; + getDesc->statements->Add(new ReturnStatement(new LiteralExpression("DESCRIPTOR"))); + proxy->elements.push_back(getDesc); +} + +Class* +generate_binder_interface_class(const interface_type* iface) +{ + InterfaceType* interfaceType = static_cast( + NAMES.Find(iface->package, iface->name.data)); + + // the interface class + Class* interface = new Class; + interface->comment = gather_comments(iface->comments_token->extra); + interface->modifiers = PUBLIC; + interface->what = Class::INTERFACE; + interface->type = interfaceType; + interface->interfaces.push_back(IINTERFACE_TYPE); + + // the stub inner class + StubClass* stub = new StubClass( + NAMES.Find(iface->package, append(iface->name.data, ".Stub").c_str()), + interfaceType); + interface->elements.push_back(stub); + + // the proxy inner class + ProxyClass* proxy = new ProxyClass( + NAMES.Find(iface->package, + append(iface->name.data, ".Stub.Proxy").c_str()), + interfaceType); + stub->elements.push_back(proxy); + + // stub and proxy support for getInterfaceDescriptor() + generate_interface_descriptors(stub, proxy); + + // all the declared methods of the interface + int index = 0; + interface_item_type* item = iface->interface_items; + while (item != NULL) { + if (item->item_type == METHOD_TYPE) { + method_type * method_item = (method_type*) item; + generate_method(method_item, interface, stub, proxy, method_item->assigned_id); + } + item = item->next; + index++; + } + + return interface; +} + diff --git a/tools/aidl/generate_java_rpc.cpp b/tools/aidl/generate_java_rpc.cpp new file mode 100644 index 0000000000000..5e4daccf63348 --- /dev/null +++ b/tools/aidl/generate_java_rpc.cpp @@ -0,0 +1,1001 @@ +#include "generate_java.h" +#include "Type.h" +#include +#include +#include +#include + +Type* SERVICE_CONTEXT_TYPE = new Type("android.content", + "Context", Type::BUILT_IN, false, false, false); +Type* PRESENTER_BASE_TYPE = new Type("android.support.place.connector", + "EventListener", Type::BUILT_IN, false, false, false); +Type* PRESENTER_LISTENER_BASE_TYPE = new Type("android.support.place.connector", + "EventListener.Listener", Type::BUILT_IN, false, false, false); +Type* RPC_BROKER_TYPE = new Type("android.support.place.connector", "Broker", + Type::BUILT_IN, false, false, false); +Type* RPC_CONTAINER_TYPE = new Type("com.android.athome.connector", "ConnectorContainer", + Type::BUILT_IN, false, false, false); +Type* PLACE_INFO_TYPE = new Type("android.support.place.connector", "PlaceInfo", + Type::BUILT_IN, false, false, false); +// TODO: Just use Endpoint, so this works for all endpoints. +Type* RPC_CONNECTOR_TYPE = new Type("android.support.place.connector", "Connector", + Type::BUILT_IN, false, false, false); +Type* RPC_ENDPOINT_INFO_TYPE = new UserDataType("android.support.place.rpc", + "EndpointInfo", true, __FILE__, __LINE__); +Type* RPC_RESULT_HANDLER_TYPE = new UserDataType("android.support.place.rpc", "RpcResultHandler", + true, __FILE__, __LINE__); +Type* RPC_ERROR_LISTENER_TYPE = new Type("android.support.place.rpc", "RpcErrorHandler", + Type::BUILT_IN, false, false, false); +Type* RPC_CONTEXT_TYPE = new UserDataType("android.support.place.rpc", "RpcContext", true, + __FILE__, __LINE__); + +static void generate_create_from_data(Type* t, StatementBlock* addTo, const string& key, + Variable* v, Variable* data, Variable** cl); +static void generate_new_array(Type* t, StatementBlock* addTo, Variable* v, Variable* from); +static void generate_write_to_data(Type* t, StatementBlock* addTo, Expression* k, Variable* v, + Variable* data); + +static string +format_int(int n) +{ + char str[20]; + sprintf(str, "%d", n); + return string(str); +} + +static string +class_name_leaf(const string& str) +{ + string::size_type pos = str.rfind('.'); + if (pos == string::npos) { + return str; + } else { + return string(str, pos+1); + } +} + +static string +results_class_name(const string& n) +{ + string str = n; + str[0] = toupper(str[0]); + str.insert(0, "On"); + return str; +} + +static string +results_method_name(const string& n) +{ + string str = n; + str[0] = toupper(str[0]); + str.insert(0, "on"); + return str; +} + +static string +push_method_name(const string& n) +{ + string str = n; + str[0] = toupper(str[0]); + str.insert(0, "push"); + return str; +} + +// ================================================= +class DispatcherClass : public Class +{ +public: + DispatcherClass(const interface_type* iface, Expression* target); + virtual ~DispatcherClass(); + + void AddMethod(const method_type* method); + void DoneWithMethods(); + + Method* processMethod; + Variable* actionParam; + Variable* requestParam; + Variable* rpcContextParam; + Variable* errorParam; + Variable* requestData; + Variable* resultData; + IfStatement* dispatchIfStatement; + Expression* targetExpression; + +private: + void generate_process(); +}; + +DispatcherClass::DispatcherClass(const interface_type* iface, Expression* target) + :Class(), + dispatchIfStatement(NULL), + targetExpression(target) +{ + generate_process(); +} + +DispatcherClass::~DispatcherClass() +{ +} + +void +DispatcherClass::generate_process() +{ + // byte[] process(String action, byte[] params, RpcContext context, RpcError status) + this->processMethod = new Method; + this->processMethod->modifiers = PUBLIC; + this->processMethod->returnType = BYTE_TYPE; + this->processMethod->returnTypeDimension = 1; + this->processMethod->name = "process"; + this->processMethod->statements = new StatementBlock; + + this->actionParam = new Variable(STRING_TYPE, "action"); + this->processMethod->parameters.push_back(this->actionParam); + + this->requestParam = new Variable(BYTE_TYPE, "requestParam", 1); + this->processMethod->parameters.push_back(this->requestParam); + + this->rpcContextParam = new Variable(RPC_CONTEXT_TYPE, "context", 0); + this->processMethod->parameters.push_back(this->rpcContextParam); + + this->errorParam = new Variable(RPC_ERROR_TYPE, "errorParam", 0); + this->processMethod->parameters.push_back(this->errorParam); + + this->requestData = new Variable(RPC_DATA_TYPE, "request"); + this->processMethod->statements->Add(new VariableDeclaration(requestData, + new NewExpression(RPC_DATA_TYPE, 1, this->requestParam))); + + this->resultData = new Variable(RPC_DATA_TYPE, "resultData"); + this->processMethod->statements->Add(new VariableDeclaration(this->resultData, + NULL_VALUE)); +} + +void +DispatcherClass::AddMethod(const method_type* method) +{ + arg_type* arg; + + // The if/switch statement + IfStatement* ifs = new IfStatement(); + ifs->expression = new MethodCall(new StringLiteralExpression(method->name.data), "equals", + 1, this->actionParam); + StatementBlock* block = ifs->statements = new StatementBlock; + if (this->dispatchIfStatement == NULL) { + this->dispatchIfStatement = ifs; + this->processMethod->statements->Add(dispatchIfStatement); + } else { + this->dispatchIfStatement->elseif = ifs; + this->dispatchIfStatement = ifs; + } + + // The call to decl (from above) + MethodCall* realCall = new MethodCall(this->targetExpression, method->name.data); + + // args + Variable* classLoader = NULL; + VariableFactory stubArgs("_arg"); + arg = method->args; + while (arg != NULL) { + Type* t = NAMES.Search(arg->type.type.data); + Variable* v = stubArgs.Get(t); + v->dimension = arg->type.dimension; + + // Unmarshall the parameter + block->Add(new VariableDeclaration(v)); + if (convert_direction(arg->direction.data) & IN_PARAMETER) { + generate_create_from_data(t, block, arg->name.data, v, + this->requestData, &classLoader); + } else { + if (arg->type.dimension == 0) { + block->Add(new Assignment(v, new NewExpression(v->type))); + } + else if (arg->type.dimension == 1) { + generate_new_array(v->type, block, v, this->requestData); + } + else { + fprintf(stderr, "aidl:internal error %s:%d\n", __FILE__, + __LINE__); + } + } + + // Add that parameter to the method call + realCall->arguments.push_back(v); + + arg = arg->next; + } + + // Add a final parameter: RpcContext. Contains data about + // incoming request (e.g., certificate) + realCall->arguments.push_back(new Variable(RPC_CONTEXT_TYPE, "context", 0)); + + Type* returnType = NAMES.Search(method->type.type.data); + if (returnType == EVENT_FAKE_TYPE) { + returnType = VOID_TYPE; + } + + // the real call + bool first = true; + Variable* _result = NULL; + if (returnType == VOID_TYPE) { + block->Add(realCall); + } else { + _result = new Variable(returnType, "_result", + method->type.dimension); + block->Add(new VariableDeclaration(_result, realCall)); + + // need the result RpcData + if (first) { + block->Add(new Assignment(this->resultData, + new NewExpression(RPC_DATA_TYPE))); + first = false; + } + + // marshall the return value + generate_write_to_data(returnType, block, + new StringLiteralExpression("_result"), _result, this->resultData); + } + + // out parameters + int i = 0; + arg = method->args; + while (arg != NULL) { + Type* t = NAMES.Search(arg->type.type.data); + Variable* v = stubArgs.Get(i++); + + if (convert_direction(arg->direction.data) & OUT_PARAMETER) { + // need the result RpcData + if (first) { + block->Add(new Assignment(this->resultData, new NewExpression(RPC_DATA_TYPE))); + first = false; + } + + generate_write_to_data(t, block, new StringLiteralExpression(arg->name.data), + v, this->resultData); + } + + arg = arg->next; + } +} + +void +DispatcherClass::DoneWithMethods() +{ + if (this->dispatchIfStatement == NULL) { + return; + } + + this->elements.push_back(this->processMethod); + + IfStatement* fallthrough = new IfStatement(); + fallthrough->statements = new StatementBlock; + fallthrough->statements->Add(new ReturnStatement( + new MethodCall(SUPER_VALUE, "process", 4, + this->actionParam, this->requestParam, + this->rpcContextParam, + this->errorParam))); + this->dispatchIfStatement->elseif = fallthrough; + IfStatement* s = new IfStatement; + s->statements = new StatementBlock; + this->processMethod->statements->Add(s); + s->expression = new Comparison(this->resultData, "!=", NULL_VALUE); + s->statements->Add(new ReturnStatement(new MethodCall(this->resultData, "serialize"))); + s->elseif = new IfStatement; + s = s->elseif; + s->statements->Add(new ReturnStatement(NULL_VALUE)); +} + +// ================================================= +class RpcProxyClass : public Class +{ +public: + RpcProxyClass(const interface_type* iface, InterfaceType* interfaceType); + virtual ~RpcProxyClass(); + + Variable* endpoint; + Variable* broker; + +private: + void generate_ctor(); + void generate_get_endpoint_info(); +}; + +RpcProxyClass::RpcProxyClass(const interface_type* iface, InterfaceType* interfaceType) + :Class() +{ + this->comment = gather_comments(iface->comments_token->extra); + this->modifiers = PUBLIC; + this->what = Class::CLASS; + this->type = interfaceType; + + // broker + this->broker = new Variable(RPC_BROKER_TYPE, "_broker"); + this->elements.push_back(new Field(PRIVATE, this->broker)); + // endpoint + this->endpoint = new Variable(RPC_ENDPOINT_INFO_TYPE, "_endpoint"); + this->elements.push_back(new Field(PRIVATE, this->endpoint)); + + // methods + generate_ctor(); + generate_get_endpoint_info(); +} + +RpcProxyClass::~RpcProxyClass() +{ +} + +void +RpcProxyClass::generate_ctor() +{ + Variable* broker = new Variable(RPC_BROKER_TYPE, "broker"); + Variable* endpoint = new Variable(RPC_ENDPOINT_INFO_TYPE, "endpoint"); + Method* ctor = new Method; + ctor->modifiers = PUBLIC; + ctor->name = class_name_leaf(this->type->Name()); + ctor->statements = new StatementBlock; + ctor->parameters.push_back(broker); + ctor->parameters.push_back(endpoint); + this->elements.push_back(ctor); + + ctor->statements->Add(new Assignment(this->broker, broker)); + ctor->statements->Add(new Assignment(this->endpoint, endpoint)); +} + +void +RpcProxyClass::generate_get_endpoint_info() +{ + Method* get = new Method; + get->modifiers = PUBLIC; + get->returnType = RPC_ENDPOINT_INFO_TYPE; + get->name = "getEndpointInfo"; + get->statements = new StatementBlock; + this->elements.push_back(get); + + get->statements->Add(new ReturnStatement(this->endpoint)); +} + +// ================================================= +class EventListenerClass : public DispatcherClass +{ +public: + EventListenerClass(const interface_type* iface, Type* listenerType); + virtual ~EventListenerClass(); + + Variable* _listener; + +private: + void generate_ctor(); +}; + +Expression* +generate_get_listener_expression(Type* cast) +{ + return new Cast(cast, new MethodCall(THIS_VALUE, "getView")); +} + +EventListenerClass::EventListenerClass(const interface_type* iface, Type* listenerType) + :DispatcherClass(iface, new FieldVariable(THIS_VALUE, "_listener")) +{ + this->modifiers = PRIVATE; + this->what = Class::CLASS; + this->type = new Type(iface->package ? iface->package : "", + append(iface->name.data, ".Presenter"), + Type::GENERATED, false, false, false); + this->extends = PRESENTER_BASE_TYPE; + + this->_listener = new Variable(listenerType, "_listener"); + this->elements.push_back(new Field(PRIVATE, this->_listener)); + + // methods + generate_ctor(); +} + +EventListenerClass::~EventListenerClass() +{ +} + +void +EventListenerClass::generate_ctor() +{ + Variable* broker = new Variable(RPC_BROKER_TYPE, "broker"); + Variable* listener = new Variable(this->_listener->type, "listener"); + Method* ctor = new Method; + ctor->modifiers = PUBLIC; + ctor->name = class_name_leaf(this->type->Name()); + ctor->statements = new StatementBlock; + ctor->parameters.push_back(broker); + ctor->parameters.push_back(listener); + this->elements.push_back(ctor); + + ctor->statements->Add(new MethodCall("super", 2, broker, listener)); + ctor->statements->Add(new Assignment(this->_listener, listener)); +} + +// ================================================= +class ListenerClass : public Class +{ +public: + ListenerClass(const interface_type* iface); + virtual ~ListenerClass(); + + bool needed; + +private: + void generate_ctor(); +}; + +ListenerClass::ListenerClass(const interface_type* iface) + :Class(), + needed(false) +{ + this->comment = "/** Extend this to listen to the events from this class. */"; + this->modifiers = STATIC | PUBLIC ; + this->what = Class::CLASS; + this->type = new Type(iface->package ? iface->package : "", + append(iface->name.data, ".Listener"), + Type::GENERATED, false, false, false); + this->extends = PRESENTER_LISTENER_BASE_TYPE; +} + +ListenerClass::~ListenerClass() +{ +} + +// ================================================= +class EndpointBaseClass : public DispatcherClass +{ +public: + EndpointBaseClass(const interface_type* iface); + virtual ~EndpointBaseClass(); + + bool needed; + +private: + void generate_ctor(); +}; + +EndpointBaseClass::EndpointBaseClass(const interface_type* iface) + :DispatcherClass(iface, THIS_VALUE), + needed(false) +{ + this->comment = "/** Extend this to implement a link service. */"; + this->modifiers = STATIC | PUBLIC | ABSTRACT; + this->what = Class::CLASS; + this->type = new Type(iface->package ? iface->package : "", + append(iface->name.data, ".EndpointBase"), + Type::GENERATED, false, false, false); + this->extends = RPC_CONNECTOR_TYPE; + + // methods + generate_ctor(); +} + +EndpointBaseClass::~EndpointBaseClass() +{ +} + +void +EndpointBaseClass::generate_ctor() +{ + Variable* container = new Variable(RPC_CONTAINER_TYPE, "container"); + Variable* broker = new Variable(RPC_BROKER_TYPE, "broker"); + Variable* place = new Variable(PLACE_INFO_TYPE, "placeInfo"); + Method* ctor = new Method; + ctor->modifiers = PUBLIC; + ctor->name = class_name_leaf(this->type->Name()); + ctor->statements = new StatementBlock; + ctor->parameters.push_back(container); + ctor->parameters.push_back(broker); + ctor->parameters.push_back(place); + this->elements.push_back(ctor); + + ctor->statements->Add(new MethodCall("super", 3, container, broker, place)); +} + +// ================================================= +class ResultDispatcherClass : public Class +{ +public: + ResultDispatcherClass(); + virtual ~ResultDispatcherClass(); + + void AddMethod(int index, const string& name, Method** method, Variable** param); + + bool needed; + Variable* methodId; + Variable* callback; + Method* onResultMethod; + Variable* resultParam; + SwitchStatement* methodSwitch; + +private: + void generate_ctor(); + void generate_onResult(); +}; + +ResultDispatcherClass::ResultDispatcherClass() + :Class(), + needed(false) +{ + this->modifiers = PRIVATE | FINAL; + this->what = Class::CLASS; + this->type = new Type("_ResultDispatcher", Type::GENERATED, false, false, false); + this->interfaces.push_back(RPC_RESULT_HANDLER_TYPE); + + // methodId + this->methodId = new Variable(INT_TYPE, "methodId"); + this->elements.push_back(new Field(PRIVATE, this->methodId)); + this->callback = new Variable(OBJECT_TYPE, "callback"); + this->elements.push_back(new Field(PRIVATE, this->callback)); + + // methods + generate_ctor(); + generate_onResult(); +} + +ResultDispatcherClass::~ResultDispatcherClass() +{ +} + +void +ResultDispatcherClass::generate_ctor() +{ + Variable* methodIdParam = new Variable(INT_TYPE, "methId"); + Variable* callbackParam = new Variable(OBJECT_TYPE, "cbObj"); + Method* ctor = new Method; + ctor->modifiers = PUBLIC; + ctor->name = class_name_leaf(this->type->Name()); + ctor->statements = new StatementBlock; + ctor->parameters.push_back(methodIdParam); + ctor->parameters.push_back(callbackParam); + this->elements.push_back(ctor); + + ctor->statements->Add(new Assignment(this->methodId, methodIdParam)); + ctor->statements->Add(new Assignment(this->callback, callbackParam)); +} + +void +ResultDispatcherClass::generate_onResult() +{ + this->onResultMethod = new Method; + this->onResultMethod->modifiers = PUBLIC; + this->onResultMethod->returnType = VOID_TYPE; + this->onResultMethod->returnTypeDimension = 0; + this->onResultMethod->name = "onResult"; + this->onResultMethod->statements = new StatementBlock; + this->elements.push_back(this->onResultMethod); + + this->resultParam = new Variable(BYTE_TYPE, "result", 1); + this->onResultMethod->parameters.push_back(this->resultParam); + + this->methodSwitch = new SwitchStatement(this->methodId); + this->onResultMethod->statements->Add(this->methodSwitch); +} + +void +ResultDispatcherClass::AddMethod(int index, const string& name, Method** method, Variable** param) +{ + Method* m = new Method; + m->modifiers = PUBLIC; + m->returnType = VOID_TYPE; + m->returnTypeDimension = 0; + m->name = name; + m->statements = new StatementBlock; + *param = new Variable(BYTE_TYPE, "result", 1); + m->parameters.push_back(*param); + this->elements.push_back(m); + *method = m; + + Case* c = new Case(format_int(index)); + c->statements->Add(new MethodCall(new LiteralExpression("this"), name, 1, this->resultParam)); + c->statements->Add(new Break()); + + this->methodSwitch->cases.push_back(c); +} + +// ================================================= +static void +generate_new_array(Type* t, StatementBlock* addTo, Variable* v, Variable* from) +{ + fprintf(stderr, "aidl: implement generate_new_array %s:%d\n", __FILE__, __LINE__); + exit(1); +} + +static void +generate_create_from_data(Type* t, StatementBlock* addTo, const string& key, Variable* v, + Variable* data, Variable** cl) +{ + Expression* k = new StringLiteralExpression(key); + if (v->dimension == 0) { + t->CreateFromRpcData(addTo, k, v, data, cl); + } + if (v->dimension == 1) { + //t->ReadArrayFromRpcData(addTo, v, data, cl); + fprintf(stderr, "aidl: implement generate_create_from_data for arrays%s:%d\n", + __FILE__, __LINE__); + } +} + +static void +generate_write_to_data(Type* t, StatementBlock* addTo, Expression* k, Variable* v, Variable* data) +{ + if (v->dimension == 0) { + t->WriteToRpcData(addTo, k, v, data, 0); + } + if (v->dimension == 1) { + //t->WriteArrayToParcel(addTo, v, data); + fprintf(stderr, "aidl: implement generate_write_to_data for arrays%s:%d\n", + __FILE__, __LINE__); + } +} + +// ================================================= +static Type* +generate_results_method(const method_type* method, RpcProxyClass* proxyClass) +{ + arg_type* arg; + + string resultsMethodName = results_method_name(method->name.data); + Type* resultsInterfaceType = new Type(results_class_name(method->name.data), + Type::GENERATED, false, false, false); + + if (!method->oneway) { + Class* resultsClass = new Class; + resultsClass->modifiers = STATIC | PUBLIC; + resultsClass->what = Class::INTERFACE; + resultsClass->type = resultsInterfaceType; + + Method* resultMethod = new Method; + resultMethod->comment = gather_comments(method->comments_token->extra); + resultMethod->modifiers = PUBLIC; + resultMethod->returnType = VOID_TYPE; + resultMethod->returnTypeDimension = 0; + resultMethod->name = resultsMethodName; + if (0 != strcmp("void", method->type.type.data)) { + resultMethod->parameters.push_back(new Variable(NAMES.Search(method->type.type.data), + "_result", method->type.dimension)); + } + arg = method->args; + while (arg != NULL) { + if (convert_direction(arg->direction.data) & OUT_PARAMETER) { + resultMethod->parameters.push_back(new Variable( + NAMES.Search(arg->type.type.data), arg->name.data, + arg->type.dimension)); + } + arg = arg->next; + } + resultsClass->elements.push_back(resultMethod); + + if (resultMethod->parameters.size() > 0) { + proxyClass->elements.push_back(resultsClass); + return resultsInterfaceType; + } + } + //delete resultsInterfaceType; + return NULL; +} + +static void +generate_proxy_method(const method_type* method, RpcProxyClass* proxyClass, + ResultDispatcherClass* resultsDispatcherClass, Type* resultsInterfaceType, int index) +{ + arg_type* arg; + Method* proxyMethod = new Method; + proxyMethod->comment = gather_comments(method->comments_token->extra); + proxyMethod->modifiers = PUBLIC; + proxyMethod->returnType = VOID_TYPE; + proxyMethod->returnTypeDimension = 0; + proxyMethod->name = method->name.data; + proxyMethod->statements = new StatementBlock; + proxyClass->elements.push_back(proxyMethod); + + // The local variables + Variable* _data = new Variable(RPC_DATA_TYPE, "_data"); + proxyMethod->statements->Add(new VariableDeclaration(_data, new NewExpression(RPC_DATA_TYPE))); + + // Add the arguments + arg = method->args; + while (arg != NULL) { + if (convert_direction(arg->direction.data) & IN_PARAMETER) { + // Function signature + Type* t = NAMES.Search(arg->type.type.data); + Variable* v = new Variable(t, arg->name.data, arg->type.dimension); + proxyMethod->parameters.push_back(v); + + // Input parameter marshalling + generate_write_to_data(t, proxyMethod->statements, + new StringLiteralExpression(arg->name.data), v, _data); + } + arg = arg->next; + } + + // If there is a results interface for this class + Expression* resultParameter; + if (resultsInterfaceType != NULL) { + // Result interface parameter + Variable* resultListener = new Variable(resultsInterfaceType, "_result"); + proxyMethod->parameters.push_back(resultListener); + + // Add the results dispatcher callback + resultsDispatcherClass->needed = true; + resultParameter = new NewExpression(resultsDispatcherClass->type, 2, + new LiteralExpression(format_int(index)), resultListener); + } else { + resultParameter = NULL_VALUE; + } + + // All proxy methods take an error parameter + Variable* errorListener = new Variable(RPC_ERROR_LISTENER_TYPE, "_errors"); + proxyMethod->parameters.push_back(errorListener); + + // Call the broker + proxyMethod->statements->Add(new MethodCall(new FieldVariable(THIS_VALUE, "_broker"), + "sendRpc", 5, + proxyClass->endpoint, + new StringLiteralExpression(method->name.data), + new MethodCall(_data, "serialize"), + resultParameter, + errorListener)); +} + +static void +generate_result_dispatcher_method(const method_type* method, + ResultDispatcherClass* resultsDispatcherClass, Type* resultsInterfaceType, int index) +{ + arg_type* arg; + Method* dispatchMethod; + Variable* dispatchParam; + resultsDispatcherClass->AddMethod(index, method->name.data, &dispatchMethod, &dispatchParam); + + Variable* classLoader = NULL; + Variable* resultData = new Variable(RPC_DATA_TYPE, "resultData"); + dispatchMethod->statements->Add(new VariableDeclaration(resultData, + new NewExpression(RPC_DATA_TYPE, 1, dispatchParam))); + + // The callback method itself + MethodCall* realCall = new MethodCall( + new Cast(resultsInterfaceType, new FieldVariable(THIS_VALUE, "callback")), + results_method_name(method->name.data)); + + // The return value + { + Type* t = NAMES.Search(method->type.type.data); + if (t != VOID_TYPE) { + Variable* rv = new Variable(t, "rv"); + dispatchMethod->statements->Add(new VariableDeclaration(rv)); + generate_create_from_data(t, dispatchMethod->statements, "_result", rv, + resultData, &classLoader); + realCall->arguments.push_back(rv); + } + } + + VariableFactory stubArgs("arg"); + arg = method->args; + while (arg != NULL) { + if (convert_direction(arg->direction.data) & OUT_PARAMETER) { + // Unmarshall the results + Type* t = NAMES.Search(arg->type.type.data); + Variable* v = stubArgs.Get(t); + dispatchMethod->statements->Add(new VariableDeclaration(v)); + + generate_create_from_data(t, dispatchMethod->statements, arg->name.data, v, + resultData, &classLoader); + + // Add the argument to the callback + realCall->arguments.push_back(v); + } + arg = arg->next; + } + + // Call the callback method + IfStatement* ifst = new IfStatement; + ifst->expression = new Comparison(new FieldVariable(THIS_VALUE, "callback"), "!=", NULL_VALUE); + dispatchMethod->statements->Add(ifst); + ifst->statements->Add(realCall); +} + +static void +generate_regular_method(const method_type* method, RpcProxyClass* proxyClass, + EndpointBaseClass* serviceBaseClass, ResultDispatcherClass* resultsDispatcherClass, + int index) +{ + arg_type* arg; + + // == the callback interface for results ================================ + // the service base class + Type* resultsInterfaceType = generate_results_method(method, proxyClass); + + // == the method in the proxy class ===================================== + generate_proxy_method(method, proxyClass, resultsDispatcherClass, resultsInterfaceType, index); + + // == the method in the result dispatcher class ========================= + if (resultsInterfaceType != NULL) { + generate_result_dispatcher_method(method, resultsDispatcherClass, resultsInterfaceType, + index); + } + + // == The abstract method that the service developers implement ========== + Method* decl = new Method; + decl->comment = gather_comments(method->comments_token->extra); + decl->modifiers = PUBLIC | ABSTRACT; + decl->returnType = NAMES.Search(method->type.type.data); + decl->returnTypeDimension = method->type.dimension; + decl->name = method->name.data; + arg = method->args; + while (arg != NULL) { + decl->parameters.push_back(new Variable( + NAMES.Search(arg->type.type.data), arg->name.data, + arg->type.dimension)); + arg = arg->next; + } + + // Add the default RpcContext param to all methods + decl->parameters.push_back(new Variable(RPC_CONTEXT_TYPE, "context", 0)); + + serviceBaseClass->elements.push_back(decl); + + + // == the dispatch method in the service base class ====================== + serviceBaseClass->AddMethod(method); +} + +static void +generate_event_method(const method_type* method, RpcProxyClass* proxyClass, + EndpointBaseClass* serviceBaseClass, ListenerClass* listenerClass, + EventListenerClass* presenterClass, int index) +{ + arg_type* arg; + listenerClass->needed = true; + + // == the push method in the service base class ========================= + Method* push = new Method; + push->modifiers = PUBLIC; + push->name = push_method_name(method->name.data); + push->statements = new StatementBlock; + push->returnType = VOID_TYPE; + serviceBaseClass->elements.push_back(push); + + // The local variables + Variable* _data = new Variable(RPC_DATA_TYPE, "_data"); + push->statements->Add(new VariableDeclaration(_data, new NewExpression(RPC_DATA_TYPE))); + + // Add the arguments + arg = method->args; + while (arg != NULL) { + // Function signature + Type* t = NAMES.Search(arg->type.type.data); + Variable* v = new Variable(t, arg->name.data, arg->type.dimension); + push->parameters.push_back(v); + + // Input parameter marshalling + generate_write_to_data(t, push->statements, + new StringLiteralExpression(arg->name.data), v, _data); + + arg = arg->next; + } + + // Send the notifications + push->statements->Add(new MethodCall("pushEvent", 2, + new StringLiteralExpression(method->name.data), + new MethodCall(_data, "serialize"))); + + // == the event callback dispatcher method ==================================== + presenterClass->AddMethod(method); + + // == the event method in the listener base class ===================== + Method* event = new Method; + event->modifiers = PUBLIC; + event->name = method->name.data; + event->statements = new StatementBlock; + event->returnType = VOID_TYPE; + listenerClass->elements.push_back(event); + arg = method->args; + while (arg != NULL) { + event->parameters.push_back(new Variable( + NAMES.Search(arg->type.type.data), arg->name.data, + arg->type.dimension)); + arg = arg->next; + } + + // Add a final parameter: RpcContext. Contains data about + // incoming request (e.g., certificate) + event->parameters.push_back(new Variable(RPC_CONTEXT_TYPE, "context", 0)); +} + +static void +generate_listener_methods(RpcProxyClass* proxyClass, Type* presenterType, Type* listenerType) +{ + // AndroidAtHomePresenter _presenter; + // void startListening(Listener listener) { + // stopListening(); + // _presenter = new Presenter(_broker, listener); + // _presenter.startListening(_endpoint); + // } + // void stopListening() { + // if (_presenter != null) { + // _presenter.stopListening(); + // } + // } + + Variable* _presenter = new Variable(presenterType, "_presenter"); + proxyClass->elements.push_back(new Field(PRIVATE, _presenter)); + + Variable* listener = new Variable(listenerType, "listener"); + + Method* startListeningMethod = new Method; + startListeningMethod->modifiers = PUBLIC; + startListeningMethod->returnType = VOID_TYPE; + startListeningMethod->name = "startListening"; + startListeningMethod->statements = new StatementBlock; + startListeningMethod->parameters.push_back(listener); + proxyClass->elements.push_back(startListeningMethod); + + startListeningMethod->statements->Add(new MethodCall(THIS_VALUE, "stopListening")); + startListeningMethod->statements->Add(new Assignment(_presenter, + new NewExpression(presenterType, 2, proxyClass->broker, listener))); + startListeningMethod->statements->Add(new MethodCall(_presenter, + "startListening", 1, proxyClass->endpoint)); + + Method* stopListeningMethod = new Method; + stopListeningMethod->modifiers = PUBLIC; + stopListeningMethod->returnType = VOID_TYPE; + stopListeningMethod->name = "stopListening"; + stopListeningMethod->statements = new StatementBlock; + proxyClass->elements.push_back(stopListeningMethod); + + IfStatement* ifst = new IfStatement; + ifst->expression = new Comparison(_presenter, "!=", NULL_VALUE); + stopListeningMethod->statements->Add(ifst); + + ifst->statements->Add(new MethodCall(_presenter, "stopListening")); + ifst->statements->Add(new Assignment(_presenter, NULL_VALUE)); +} + +Class* +generate_rpc_interface_class(const interface_type* iface) +{ + // the proxy class + InterfaceType* interfaceType = static_cast( + NAMES.Find(iface->package, iface->name.data)); + RpcProxyClass* proxy = new RpcProxyClass(iface, interfaceType); + + // the listener class + ListenerClass* listener = new ListenerClass(iface); + + // the presenter class + EventListenerClass* presenter = new EventListenerClass(iface, listener->type); + + // the service base class + EndpointBaseClass* base = new EndpointBaseClass(iface); + proxy->elements.push_back(base); + + // the result dispatcher + ResultDispatcherClass* results = new ResultDispatcherClass(); + + // all the declared methods of the proxy + int index = 0; + interface_item_type* item = iface->interface_items; + while (item != NULL) { + if (item->item_type == METHOD_TYPE) { + if (NAMES.Search(((method_type*)item)->type.type.data) == EVENT_FAKE_TYPE) { + generate_event_method((method_type*)item, proxy, base, listener, presenter, index); + } else { + generate_regular_method((method_type*)item, proxy, base, results, index); + } + } + item = item->next; + index++; + } + presenter->DoneWithMethods(); + base->DoneWithMethods(); + + // only add this if there are methods with results / out parameters + if (results->needed) { + proxy->elements.push_back(results); + } + if (listener->needed) { + proxy->elements.push_back(listener); + proxy->elements.push_back(presenter); + generate_listener_methods(proxy, presenter->type, listener->type); + } + + return proxy; +} diff --git a/tools/aidl/options.cpp b/tools/aidl/options.cpp new file mode 100644 index 0000000000000..7b2daebec09e1 --- /dev/null +++ b/tools/aidl/options.cpp @@ -0,0 +1,154 @@ + +#include "options.h" + +#include +#include +#include + +static int +usage() +{ + fprintf(stderr, + "usage: aidl OPTIONS INPUT [OUTPUT]\n" + " aidl --preprocess OUTPUT INPUT...\n" + "\n" + "OPTIONS:\n" + " -I search path for import statements.\n" + " -d generate dependency file.\n" + " -a generate dependency file next to the output file with the name based on the input file.\n" + " -p file created by --preprocess to import.\n" + " -o base output folder for generated files.\n" + " -b fail when trying to compile a parcelable.\n" + "\n" + "INPUT:\n" + " An aidl interface file.\n" + "\n" + "OUTPUT:\n" + " The generated interface files.\n" + " If omitted and the -o option is not used, the input filename is used, with the .aidl extension changed to a .java extension.\n" + " If the -o option is used, the generated files will be placed in the base output folder, under their package folder\n" + ); + return 1; +} + +int +parse_options(int argc, const char* const* argv, Options *options) +{ + int i = 1; + + if (argc >= 2 && 0 == strcmp(argv[1], "--preprocess")) { + if (argc < 4) { + return usage(); + } + options->outputFileName = argv[2]; + for (int i=3; ifilesToPreprocess.push_back(argv[i]); + } + options->task = PREPROCESS_AIDL; + return 0; + } + + options->task = COMPILE_AIDL; + options->failOnParcelable = false; + options->autoDepFile = false; + + // OPTIONS + while (i < argc) { + const char* s = argv[i]; + int len = strlen(s); + if (s[0] == '-') { + if (len > 1) { + // -I + if (s[1] == 'I') { + if (len > 2) { + options->importPaths.push_back(s+2); + } else { + fprintf(stderr, "-I option (%d) requires a path.\n", i); + return usage(); + } + } + else if (s[1] == 'd') { + if (len > 2) { + options->depFileName = s+2; + } else { + fprintf(stderr, "-d option (%d) requires a file.\n", i); + return usage(); + } + } + else if (s[1] == 'a') { + options->autoDepFile = true; + } + else if (s[1] == 'p') { + if (len > 2) { + options->preprocessedFiles.push_back(s+2); + } else { + fprintf(stderr, "-p option (%d) requires a file.\n", i); + return usage(); + } + } + else if (s[1] == 'o') { + if (len > 2) { + options->outputBaseFolder = s+2; + } else { + fprintf(stderr, "-o option (%d) requires a path.\n", i); + return usage(); + } + } + else if (len == 2 && s[1] == 'b') { + options->failOnParcelable = true; + } + else { + // s[1] is not known + fprintf(stderr, "unknown option (%d): %s\n", i, s); + return usage(); + } + } else { + // len <= 1 + fprintf(stderr, "unknown option (%d): %s\n", i, s); + return usage(); + } + } else { + // s[0] != '-' + break; + } + i++; + } + + // INPUT + if (i < argc) { + options->inputFileName = argv[i]; + i++; + } else { + fprintf(stderr, "INPUT required\n"); + return usage(); + } + + // OUTPUT + if (i < argc) { + options->outputFileName = argv[i]; + i++; + } else if (options->outputBaseFolder.length() == 0) { + // copy input into output and change the extension from .aidl to .java + options->outputFileName = options->inputFileName; + string::size_type pos = options->outputFileName.size()-5; + if (options->outputFileName.compare(pos, 5, ".aidl") == 0) { // 5 = strlen(".aidl") + options->outputFileName.replace(pos, 5, ".java"); // 5 = strlen(".aidl") + } else { + fprintf(stderr, "INPUT is not an .aidl file.\n"); + return usage(); + } + } + + // anything remaining? + if (i != argc) { + fprintf(stderr, "unknown option%s:", (i==argc-1?(const char*)"":(const char*)"s")); + for (; i +#include +#include + +using namespace std; + +enum { + COMPILE_AIDL, + PREPROCESS_AIDL +}; + +// This struct is the parsed version of the command line options +struct Options +{ + int task; + bool failOnParcelable; + vector importPaths; + vector preprocessedFiles; + string inputFileName; + string outputFileName; + string outputBaseFolder; + string depFileName; + bool autoDepFile; + + vector filesToPreprocess; +}; + +// takes the inputs from the command line and fills in the Options struct +// Returns 0 on success, and nonzero on failure. +// It also prints the usage statement on failure. +int parse_options(int argc, const char* const* argv, Options *options); + +#endif // DEVICE_TOOLS_AIDL_H diff --git a/tools/aidl/options_test.cpp b/tools/aidl/options_test.cpp new file mode 100644 index 0000000000000..bd106ce54f2d2 --- /dev/null +++ b/tools/aidl/options_test.cpp @@ -0,0 +1,291 @@ +#include +#include "options.h" + +const bool VERBOSE = false; + +using namespace std; + +struct Answer { + const char* argv[8]; + int result; + const char* systemSearchPath[8]; + const char* localSearchPath[8]; + const char* inputFileName; + language_t nativeLanguage; + const char* outputH; + const char* outputCPP; + const char* outputJava; +}; + +bool +match_arrays(const char* const*expected, const vector &got) +{ + int count = 0; + while (expected[count] != NULL) { + count++; + } + if (got.size() != count) { + return false; + } + for (int i=0; i &got) +{ + size_t count = got.size(); + for (size_t i=0; i +#include "search_path.h" +#include "options.h" +#include + +#ifdef HAVE_MS_C_RUNTIME +#include +#endif + +static vector g_importPaths; + +void +set_import_paths(const vector& importPaths) +{ + g_importPaths = importPaths; +} + +char* +find_import_file(const char* given) +{ + string expected = given; + + int N = expected.length(); + for (int i=0; i& paths = g_importPaths; + for (vector::iterator it=paths.begin(); it!=paths.end(); it++) { + string f = *it; + if (f.size() == 0) { + f = "."; + f += OS_PATH_SEPARATOR; + } + else if (f[f.size()-1] != OS_PATH_SEPARATOR) { + f += OS_PATH_SEPARATOR; + } + f.append(expected); + +#ifdef HAVE_MS_C_RUNTIME + /* check that the file exists and is not write-only */ + if (0 == _access(f.c_str(), 0) && /* mode 0=exist */ + 0 == _access(f.c_str(), 4) ) { /* mode 4=readable */ +#else + if (0 == access(f.c_str(), R_OK)) { +#endif + return strdup(f.c_str()); + } + } + + return NULL; +} + diff --git a/tools/aidl/search_path.h b/tools/aidl/search_path.h new file mode 100644 index 0000000000000..2bf94b12bbf10 --- /dev/null +++ b/tools/aidl/search_path.h @@ -0,0 +1,23 @@ +#ifndef DEVICE_TOOLS_AIDL_SEARCH_PATH_H +#define DEVICE_TOOLS_AIDL_SEARCH_PATH_H + +#include + +#if __cplusplus +#include +#include +using namespace std; +extern "C" { +#endif + +// returns a FILE* and the char* for the file that it found +// given is the class name we're looking for +char* find_import_file(const char* given); + +#if __cplusplus +}; // extern "C" +void set_import_paths(const vector& importPaths); +#endif + +#endif // DEVICE_TOOLS_AIDL_SEARCH_PATH_H + diff --git a/tools/layoutlib/.gitignore b/tools/layoutlib/.gitignore new file mode 100644 index 0000000000000..c5e82d74585d1 --- /dev/null +++ b/tools/layoutlib/.gitignore @@ -0,0 +1 @@ +bin \ No newline at end of file diff --git a/tools/layoutlib/Android.mk b/tools/layoutlib/Android.mk new file mode 100644 index 0000000000000..4e735686d4fdf --- /dev/null +++ b/tools/layoutlib/Android.mk @@ -0,0 +1,65 @@ +# +# Copyright (C) 2008 The Android Open Source Project +# +# Licensed 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 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +LOCAL_PATH := $(my-dir) +include $(CLEAR_VARS) + +# +# Define rules to build temp_layoutlib.jar, which contains a subset of +# the classes in framework.jar. The layoutlib_create tool is used to +# transform the framework jar into the temp_layoutlib jar. +# + +# We need to process the framework classes.jar file, but we can't +# depend directly on it (private vars won't be inherited correctly). +# So, we depend on framework's BUILT file. +built_framework_dep := $(call java-lib-deps,framework-base) +built_framework_classes := $(call java-lib-files,framework-base) + +built_core_dep := $(call java-lib-deps,core) +built_core_classes := $(call java-lib-files,core) + +built_layoutlib_create_jar := $(call intermediates-dir-for, \ + JAVA_LIBRARIES,layoutlib_create,HOST)/javalib.jar + +# This is mostly a copy of config/host_java_library.mk +LOCAL_MODULE := temp_layoutlib +LOCAL_MODULE_CLASS := JAVA_LIBRARIES +LOCAL_MODULE_SUFFIX := $(COMMON_JAVA_PACKAGE_SUFFIX) +LOCAL_IS_HOST_MODULE := true +LOCAL_BUILT_MODULE_STEM := javalib.jar + +####################################### +include $(BUILD_SYSTEM)/base_rules.mk +####################################### + +$(LOCAL_BUILT_MODULE): $(built_core_dep) \ + $(built_framework_dep) \ + $(built_layoutlib_create_jar) + $(hide) echo "host layoutlib_create: $@" + $(hide) mkdir -p $(dir $@) + $(hide) rm -f $@ + $(hide) ls -l $(built_framework_classes) + $(hide) java -jar $(built_layoutlib_create_jar) \ + $@ \ + $(built_core_classes) \ + $(built_framework_classes) + $(hide) ls -l $(built_framework_classes) + + +# +# Include the subdir makefiles. +# +include $(call all-makefiles-under,$(LOCAL_PATH)) diff --git a/tools/layoutlib/README b/tools/layoutlib/README new file mode 100644 index 0000000000000..0fea9bd9d9ac9 --- /dev/null +++ b/tools/layoutlib/README @@ -0,0 +1,4 @@ +Layoutlib is a custom version of the android View framework designed to run inside Eclipse. +The goal of the library is to provide layout rendering in Eclipse that are very very close to their rendering on devices. + +None of the com.android.* or android.* classes in layoutlib run on devices. \ No newline at end of file diff --git a/tools/layoutlib/bridge/.classpath b/tools/layoutlib/bridge/.classpath new file mode 100644 index 0000000000000..3c124d90aaaed --- /dev/null +++ b/tools/layoutlib/bridge/.classpath @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/tools/layoutlib/bridge/.project b/tools/layoutlib/bridge/.project new file mode 100644 index 0000000000000..e36e71b23ff90 --- /dev/null +++ b/tools/layoutlib/bridge/.project @@ -0,0 +1,17 @@ + + + layoutlib_bridge + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/tools/layoutlib/bridge/.settings/README.txt b/tools/layoutlib/bridge/.settings/README.txt new file mode 100644 index 0000000000000..9120b20710a3c --- /dev/null +++ b/tools/layoutlib/bridge/.settings/README.txt @@ -0,0 +1,2 @@ +Copy this in eclipse project as a .settings folder at the root. +This ensure proper compilation compliance and warning/error levels. \ No newline at end of file diff --git a/tools/layoutlib/bridge/.settings/org.eclipse.jdt.core.prefs b/tools/layoutlib/bridge/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000000000..5381a0e16c7de --- /dev/null +++ b/tools/layoutlib/bridge/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,93 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.annotation.nonnull=com.android.annotations.NonNull +org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=com.android.annotations.NonNullByDefault +org.eclipse.jdt.core.compiler.annotation.nonnullisdefault=disabled +org.eclipse.jdt.core.compiler.annotation.nullable=com.android.annotations.Nullable +org.eclipse.jdt.core.compiler.annotation.nullanalysis=enabled +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.6 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.autoboxing=ignore +org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning +org.eclipse.jdt.core.compiler.problem.deadCode=warning +org.eclipse.jdt.core.compiler.problem.deprecation=warning +org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled +org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled +org.eclipse.jdt.core.compiler.problem.discouragedReference=warning +org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore +org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning +org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled +org.eclipse.jdt.core.compiler.problem.fieldHiding=warning +org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning +org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning +org.eclipse.jdt.core.compiler.problem.forbiddenReference=error +org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning +org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=enabled +org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning +org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore +org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore +org.eclipse.jdt.core.compiler.problem.localVariableHiding=warning +org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning +org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning +org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=warning +org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=error +org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled +org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning +org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore +org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning +org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning +org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore +org.eclipse.jdt.core.compiler.problem.nullReference=error +org.eclipse.jdt.core.compiler.problem.nullSpecInsufficientInfo=warning +org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error +org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning +org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore +org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning +org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning +org.eclipse.jdt.core.compiler.problem.potentialNullSpecViolation=error +org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=warning +org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning +org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning +org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore +org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore +org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning +org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore +org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled +org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning +org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled +org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled +org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore +org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning +org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=disabled +org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning +org.eclipse.jdt.core.compiler.problem.unclosedCloseable=error +org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore +org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning +org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore +org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning +org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled +org.eclipse.jdt.core.compiler.problem.unusedImport=warning +org.eclipse.jdt.core.compiler.problem.unusedLabel=warning +org.eclipse.jdt.core.compiler.problem.unusedLocal=warning +org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=warning +org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore +org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled +org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled +org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled +org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning +org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning +org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning +org.eclipse.jdt.core.compiler.source=1.6 diff --git a/tools/layoutlib/bridge/Android.mk b/tools/layoutlib/bridge/Android.mk new file mode 100644 index 0000000000000..687a91feeb6f5 --- /dev/null +++ b/tools/layoutlib/bridge/Android.mk @@ -0,0 +1,38 @@ +# +# Copyright (C) 2008 The Android Open Source Project +# +# Licensed 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 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +LOCAL_PATH := $(call my-dir) +include $(CLEAR_VARS) + +LOCAL_SRC_FILES := $(call all-java-files-under,src) +LOCAL_JAVA_RESOURCE_DIRS := resources + + +LOCAL_JAVA_LIBRARIES := \ + kxml2-2.3.0 \ + layoutlib_api-prebuilt \ + tools-common-prebuilt + +LOCAL_STATIC_JAVA_LIBRARIES := \ + temp_layoutlib \ + ninepatch-prebuilt + +LOCAL_MODULE := layoutlib + +include $(BUILD_HOST_JAVA_LIBRARY) + +# Build all sub-directories +include $(call all-makefiles-under,$(LOCAL_PATH)) + diff --git a/tools/layoutlib/bridge/resources/bars/action_bar.xml b/tools/layoutlib/bridge/resources/bars/action_bar.xml new file mode 100644 index 0000000000000..7adc5af44b75b --- /dev/null +++ b/tools/layoutlib/bridge/resources/bars/action_bar.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/tools/layoutlib/bridge/resources/bars/hdpi/ic_sysbar_back.png b/tools/layoutlib/bridge/resources/bars/hdpi/ic_sysbar_back.png new file mode 100644 index 0000000000000000000000000000000000000000..84e6bc89c0829a1dd61d9045baeca62b12199c4a GIT binary patch literal 1053 zcmeAS@N?(olHy`uVBq!ia0vp^6+rC4!2%?wi~sxrq?nSt-CY>|xA&jf59DzcctjR6 zFmMZjFyp1Wb$=Kbn8iF@978H@y`5p5ArdIkwtwc$s~HAv!WY##ZmgKgrIoQdL6vQb zprC8A;*luF9F@HqON1RgS{6iTnJFz1;MQ$X(0ayb_#|=O?3_t=f9j@PThruu;!bIM z!9LApGk1Qk`Cj>s^{@dCGFseKk=Gskstuu(xVi=GW|) z^vD0wWVMd(+8409=+)INd27n=dc5xgGS|H0OnstSnn*C2QVT!D6kl)@}mr@t{Oxp5r`=?spET`}m zqm#;|SJL7{7P4>o)b{qzlHSQ8AFl7yt6KWw7w3shXMLBPW9wuWcw~Iov?^m!qn@A8 zq(2Q34ZHtbI;iloc|wDuUSXTf);BF%-=9$WS8eX<ib;2Fw{V%q%|)T>`K7Kc z;M*O!WzM&Pnrii$8i5z@qfg(zUZXAk^yvKUo7!FXeJFhSz0||TFRR2``Bku=c&w`2 zy5}Fdln$_&>0J(&bKQ37fF9qaGj(b=UDf?R2&t^TDy-(*DE7{1kIz{p=V?-A6Vn^r ztTIX^5By&~&FxTXc3;{C_XFl~mmDwN{kTEukfodC-}JLe36nh4UM!q#e&*rhf}Ow4 zzx<)~%%DOiXn{n%u)wlcUCWcs3Z+K)rLI=k^Qv}7j==Iw{>Vu*=!kylgijU|gQQe| z*+#U)HKN41C^fMpGe1uuBr`Xa!BF4OSl`g_-^F$1Kn1EG1u2OosaDA#RjCX{28M>Z zh6cJuW+8^AR>qcA#s<0u=2iv<>wT@7Q8eV{r(~v8qH8d>GBkx~xNu}v7*K-@$cEtj uw370~qErUQl>DSr1-Hzi)bjkI>|zDyVAH~_kIjJU7(8A5T-G@yGywp7CCL>4 literal 0 HcmV?d00001 diff --git a/tools/layoutlib/bridge/resources/bars/hdpi/ic_sysbar_home.png b/tools/layoutlib/bridge/resources/bars/hdpi/ic_sysbar_home.png new file mode 100644 index 0000000000000000000000000000000000000000..38e4f45719e7fe43e350c20d6b1078391392ca61 GIT binary patch literal 1064 zcmeAS@N?(olHy`uVBq!ia0vp^6+rC4!2%?wi~sxrq?nSt-CY>|xA&jf59DzcctjR6 zFmMZjFyp1Wb$=Kbm=!%;978H@y`6bFTR2eUSbcd~)N;>P%v?bQ3p*4vI2K*$?eY=~ zTI?PE?$6^pot{^sL{_?fWOQ1XbdZ;!&<&uaUc?tc7>kQ91K4AWS^7AaIgaXcJvlrF}WrI{Fl}wR|?0fi` zoslQg>rByfruhxK*oFMcm`eY9u6C4AJuT|DdAbmz9dpgG#3@>#Y#)A}Gv=~+z&)X0 z)7r2%lddJ|6-@p7CVi@woMu>s>qI4HAA^IMZJNRl9&bF6{K+S{FGYP)j`!AUp05=b zv^dY=%HQGM`19F)-s30S%=815T~Dy9-JW!JMcUe{H$u%OTvKf6w^?+cxM>;Btjkl5 zOBTgEGH5g6(*(M#zeea}UufdoE$=d=N;}o>B+iO=Xb+s7B=yYxyy-bZF9%Wn`S~_W z4~WG7w>9>=ECy7bx72jOAqG3`Jqu1SPcz`q%l;M?tAE47^4JacRtEWYSGk}BwW!V8 zqc$A4wPo1~gX6JXdzh_sc9tE`o7kZ2GvO(V=BX3Kw@( zKW)=Fv1!lL9)*p0lad{`A6$A!ci#h-N?t*O*<1QE=ST`A6%<51G!u=HzFQ^6vR%tn zZQDjygN6oyq!sz*Yqw^$ADDK=fwKHB;tOvzw5Z%!7wV z&llAkJjB1D`0M}Muls*Q_Wi$dX~MA^vqP@E4Sl7bS@pYV>-mkJV|JD29Mmpx4HSW) zDR0lkN3K)rpY{0AW?&8yEpd$~aV||xA&jf59DzcctjR6 zFmMZjFyp1Wb$=Kb7!P>5IEGZ*dOOoGPsEYOb$&XR$dzWcB^}HK0y}u;H1nz_94~ZlPaATUWXk&O*wC~oZn8J^P0^gZT+8aF8_8<*>)()qv;8E zb{S8^TJt#vMBlTz|C*+J??X#z;+A%2w@I^Y&Th6j>pRK$sp5$b|EB!a?U|_lByQ(x zzeNrj?|$q%es)D2o8|ZW%!YF|zwVT%U;4*!LX4MaXdCCGPXCHsm)+n|c^#{m-;b=rCvBv7IYX|z%MUBP)PAyvr+n9<^ZJRlEF5tKXR`L}nx0S* zXMEqV@T6$7=st$Sj0I=edv7t_x-|Fp`G?V`S+^|RYkM(ik=dSy>bmakr+Y0{DIK2M zDLnC-N~|e24|^}$riuG6XSDB?dpF_gO*^B5OW)M8{7?KU+P`0gcj2i5U!_f6HxOa1 z_>tRgXT`lRL2F)M1dEoqMwB=gr6!hS=I1GdWag$a80s4u>l+&WyST0#s6Z8@ASJOR z)hZdJDwV;=z|c_F&_LJ7EX2^%%GlD%*g)67+{(aUy{}a>iiX_$l+3hBbPeWKhNch= z7mmyd18R@~*$|wcR#Ki=l*-_klAn~S;FejGTAp8&U98|7Y+AVWu^CVugQu&X%Q~lo FCIA(u8jAn` literal 0 HcmV?d00001 diff --git a/tools/layoutlib/bridge/resources/bars/hdpi/stat_sys_wifi_signal_4_fully.png b/tools/layoutlib/bridge/resources/bars/hdpi/stat_sys_wifi_signal_4_fully.png new file mode 100644 index 0000000000000000000000000000000000000000..bd44b529ee74a5915f7bc57d9c11adfcacf39c32 GIT binary patch literal 1195 zcmeAS@N?(olHy`uVBq!ia0vp^DnM+&!3HEN-EW8jDYhhUcNd2LAh=-f^2tCE&H|6f zVg?3oArNM~bhqvgNU*HHF&#*Q^)rO6JadbIfw|k$#W5t}@Y@-&c~=ZXTKBhzXe9A} zV9;T>7IH;Zv{X2U`6Cm*$DgigpVlj}Y$-{b)LFS9|Jjj3qr*P8mPc)xbm)lPzjI%| z`aakcyX|Zg+lI~I%qfx6QXk%5qkR2yhM$$g+_!J8YN)-C{I1)24 zuYUCk!)V#BmInGthS3g!>$G&_BYT2YHqDr1u#?kBF?=adUUTIPt{FFfsGU%|$Fz>| z`r%N|-qg7l4YgFc*|UUG7Iis1Gb?y4b7YB&Z=?FdeOib3A1zqdz^=?Ck+q(=L)&2< z*EN|Ryfyn29M?~f2z4x+R8`EF)YmxQs@$)dJL^BooEV0=*Y;T6eG=kn@9$OL*l!d* zS;DhpcK(7|t~XeIcv){V6HHD%^HDL-wKmS;dCaub zRWY2AVtcJO#mXGrSQ>>J#`SFoWmc0QA0Y(lc=gKy=Z%ht*? z?bhF*ZFbs|z4K#K$%6eA@d&XRrW zCr`ezj!!l=VPaL)$;N0V{SO;MF4P{r${HzH?_<8+wB^h?m4z%ze^{*iu=PwzXX&<2 zixmw&I=jBlm=`2-$LfVxL3(GX>W4Xvi=7@XpFUxYz^~U!w(Ib}JM6GYf5F^arWzha zla5Y$w@vZ`d%Q2-*6StN^Wv;db3}4^+%)5^eWCim`h)VK#bs9w=PqsX5x-mhQL^s4 z%p?92c2>cH`BNqx+%svxk-XI@O`LYj`+aPzj_%*+<2og3+7@oMvYEHULK#wL9QkxU z_<>}1(UBJaOm3}-E;BY|tDY8OUl&={R)5oaY4qbcZT~MvE$^IfXQeGDymV6s@#{g#xzzck8;Daeva6$@9aww=txL z@m_5FU*qpzbKXyOjn*o`=W~+l&EuoCt@-*eA$`4?aER?=i^E)JpY6zz-d-QdKDS0O zYZ((TkBXMKMwB=gr6!hS=I1GdWag$a80s4u>l+&WyST0#s6Z8@ASJOR)hZdJDwV;= zz|c_Fz);u7JjBq<%D~vl#7Nh`!pgwFb#hYISzQ2XkOA2coS#-w ro>-L1;Fyx1l&avCS(I9yUzA;};2dmPxb?9aP#uG(tDnm{r-UW|SsnPU literal 0 HcmV?d00001 diff --git a/tools/layoutlib/bridge/resources/bars/hdpi/status_bar_background.9.png b/tools/layoutlib/bridge/resources/bars/hdpi/status_bar_background.9.png new file mode 100644 index 0000000000000000000000000000000000000000..a4be298796632accec380d660b1ff1589d920515 GIT binary patch literal 3233 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 literal 0 HcmV?d00001 diff --git a/tools/layoutlib/bridge/resources/bars/mdpi/ic_sysbar_recent.png b/tools/layoutlib/bridge/resources/bars/mdpi/ic_sysbar_recent.png new file mode 100644 index 0000000000000000000000000000000000000000..b07f611ab98c121a12873d2c6a8e2b9b351967fd GIT binary patch literal 591 zcmeAS@N?(olHy`uVBq!ia0vp^0YGfP!2%?8-k8<^DW)WEcNd2L?fqx=19_YU9+AZi z4BSE>%y{W;-5&-9Mh{OH$B>A_Z>Qh&JLDkHy5I3#%aL!b1|N6&K56aR_&~I5PsD@= z{zmEAy)%BUyKTEXJw0vv1QpLoDxO7WBmSk^kp# zc;~?_vqFVU#OAM3R|=O}yhLNsl?4xVDwd=ssO>4w;+b+*SHtOOins7vhX*$#a^E@x z@4g}VBI4s2o0Ltf43A0Z%>2G5No>NJ?4Ck4Z#{vJ;jg~knKL70t|Pn6ln3G7iym!J z=d_SsBC`B$Qu1-z4c)WnRCJ%Mytt&Knfcfx^Jj9h#-}e&u)MRWg?n|@g&7w&@U4$O zvnA)$=dzD_WmX4Tg-=M_xNwy(E3x5UL1f2DkL@p3JNa&~Yx)00eL5&G_8+%CZ=0dn z{<>~GFrYH4pg8DQjn5Zl4_LT(UZvc>ap>5qpqQ{Gr*inSc^2;Vq)wq^0T znLEw?yccBH^>>nhQ%2qX#1n6vT%5MYv-!#~%KqhvZr}*G)n!`Ae&eF3^#b3?;tqUE zHmcoX)MF5D{9KjqbB*;xBhL(`gR4v%VjoOulK8RfYV;?*fMZdq>=x`X>~c9P_VzPB zkTm!z%9g-V^Pig`-{%p>^BwE9N2~caEPSTLvmoGY&;w(GdrS|Mr?P8KIDTfXzo;!^ z9D{kp-3((3#(O($BJU(j*il-3^oiX*CjGDfH7B?#DeX9TLB78sU;2b`iKWqk4z|4~ zG;TFWG(Vhm(m3J#>E>BI$qyO7eW|Ye{CQqJIo zYe&b{H8X7kBYkGI-in^{GwJHvaNmm+O1WOtyPEOAau#iI%uVlsFfq zCYEI8=P86_=B6?j>KhvC8yfz*xUL+iKoz7QC9x#cDjB3ImBGls&`{UFP}j&j#L&#j zz}U*fNY}u^%D}*NaudizgofPwl+3hB+!{>ISzQ2XkOA2coS#-wo>-L1;Fyx1l&avC fS(I9yUzA;};2dmPxb?9aP#uG(tDnm{r-UW|q_t)8 literal 0 HcmV?d00001 diff --git a/tools/layoutlib/bridge/resources/bars/mdpi/status_bar_background.9.png b/tools/layoutlib/bridge/resources/bars/mdpi/status_bar_background.9.png new file mode 100644 index 0000000000000000000000000000000000000000..eb7c1a4d7819f098ba762706f9765453c010e75c GIT binary patch literal 204 zcmeAS@N?(olHy`uVBq!ia0vp^!ayv|!3HGfF>hH2q$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~-c73F!lIEGZ*dUG|9i$Rft<-(S&@9N_M%O~euU^!?e@Yhzv zMN{ciR)@x?*%1r}J}qHck;l^ATNf%CK6CefM&r%5pUL*Vy)iMm* zjQO(HKHPB6nooG5^TsG`meZ26#Va+F`(7 BM!En1 literal 0 HcmV?d00001 diff --git a/tools/layoutlib/bridge/resources/bars/navigation_bar.xml b/tools/layoutlib/bridge/resources/bars/navigation_bar.xml new file mode 100644 index 0000000000000..599ca08bf02cb --- /dev/null +++ b/tools/layoutlib/bridge/resources/bars/navigation_bar.xml @@ -0,0 +1,20 @@ + + + + + + + + diff --git a/tools/layoutlib/bridge/resources/bars/status_bar.xml b/tools/layoutlib/bridge/resources/bars/status_bar.xml new file mode 100644 index 0000000000000..d3c492eacf43a --- /dev/null +++ b/tools/layoutlib/bridge/resources/bars/status_bar.xml @@ -0,0 +1,15 @@ + + + + + + diff --git a/tools/layoutlib/bridge/resources/bars/title_bar.xml b/tools/layoutlib/bridge/resources/bars/title_bar.xml new file mode 100644 index 0000000000000..76d78d9169d46 --- /dev/null +++ b/tools/layoutlib/bridge/resources/bars/title_bar.xml @@ -0,0 +1,6 @@ + + + + diff --git a/tools/layoutlib/bridge/resources/bars/xhdpi/ic_sysbar_back.png b/tools/layoutlib/bridge/resources/bars/xhdpi/ic_sysbar_back.png new file mode 100644 index 0000000000000000000000000000000000000000..bd60cd65878a39a6389697084a3843d0ef727f81 GIT binary patch literal 1421 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 + * This does not actually start an animation, instead it fakes a looper that will play whatever + * animation is sending messages to its own {@link Handler}. + *

+ * Classes should implement {@link #preAnimation()} and {@link #postAnimation()}. + *

+ * If {@link #preAnimation()} does not start an animation somehow then the thread doesn't do + * anything. + * + */ +public abstract class AnimationThread extends Thread { + + private static class MessageBundle implements Comparable { + final Handler mTarget; + final Message mMessage; + final long mUptimeMillis; + + MessageBundle(Handler target, Message message, long uptimeMillis) { + mTarget = target; + mMessage = message; + mUptimeMillis = uptimeMillis; + } + + @Override + public int compareTo(MessageBundle bundle) { + if (mUptimeMillis < bundle.mUptimeMillis) { + return -1; + } + return 1; + } + } + + private final RenderSessionImpl mSession; + + private Queue mQueue = new PriorityQueue(); + private final IAnimationListener mListener; + + public AnimationThread(RenderSessionImpl scene, String threadName, + IAnimationListener listener) { + super(threadName); + mSession = scene; + mListener = listener; + } + + public abstract Result preAnimation(); + public abstract void postAnimation(); + + @Override + public void run() { + Bridge.prepareThread(); + try { + /* FIXME: The ANIMATION_FRAME message no longer exists. Instead, the + * animation timing loop is completely based on a Choreographer objects + * that schedules animation and drawing frames. The animation handler is + * no longer even a handler; it is just a Runnable enqueued on the Choreographer. + Handler_Delegate.setCallback(new IHandlerCallback() { + @Override + public void sendMessageAtTime(Handler handler, Message msg, long uptimeMillis) { + if (msg.what == ValueAnimator.ANIMATION_START || + msg.what == ValueAnimator.ANIMATION_FRAME) { + mQueue.add(new MessageBundle(handler, msg, uptimeMillis)); + } else { + // just ignore. + } + } + }); + */ + + // call out to the pre-animation work, which should start an animation or more. + Result result = preAnimation(); + if (result.isSuccess() == false) { + mListener.done(result); + } + + // loop the animation + RenderSession session = mSession.getSession(); + do { + // check early. + if (mListener.isCanceled()) { + break; + } + + // get the next message. + MessageBundle bundle = mQueue.poll(); + if (bundle == null) { + break; + } + + // sleep enough for this bundle to be on time + long currentTime = System.currentTimeMillis(); + if (currentTime < bundle.mUptimeMillis) { + try { + sleep(bundle.mUptimeMillis - currentTime); + } catch (InterruptedException e) { + // FIXME log/do something/sleep again? + e.printStackTrace(); + } + } + + // check after sleeping. + if (mListener.isCanceled()) { + break; + } + + // ready to do the work, acquire the scene. + result = mSession.acquire(250); + if (result.isSuccess() == false) { + mListener.done(result); + return; + } + + // process the bundle. If the animation is not finished, this will enqueue + // the next message, so mQueue will have another one. + try { + // check after acquiring in case it took a while. + if (mListener.isCanceled()) { + break; + } + + bundle.mTarget.handleMessage(bundle.mMessage); + if (mSession.render(false /*freshRender*/).isSuccess()) { + mListener.onNewFrame(session); + } + } finally { + mSession.release(); + } + } while (mListener.isCanceled() == false && mQueue.size() > 0); + + mListener.done(Status.SUCCESS.createResult()); + + } catch (Throwable throwable) { + // can't use Bridge.getLog() as the exception might be thrown outside + // of an acquire/release block. + mListener.done(Status.ERROR_UNKNOWN.createResult("Error playing animation", throwable)); + + } finally { + postAnimation(); + Handler_Delegate.setCallback(null); + Bridge.cleanupThread(); + } + } +} diff --git a/tools/layoutlib/bridge/src/android/animation/PropertyValuesHolder_Delegate.java b/tools/layoutlib/bridge/src/android/animation/PropertyValuesHolder_Delegate.java new file mode 100644 index 0000000000000..7b444aadb3037 --- /dev/null +++ b/tools/layoutlib/bridge/src/android/animation/PropertyValuesHolder_Delegate.java @@ -0,0 +1,59 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.animation; + +import com.android.layoutlib.bridge.impl.DelegateManager; +import com.android.tools.layoutlib.annotations.LayoutlibDelegate; + +/** + * Delegate implementing the native methods of android.animation.PropertyValuesHolder + * + * Through the layoutlib_create tool, the original native methods of PropertyValuesHolder have been + * replaced by calls to methods of the same name in this delegate class. + * + * Because it's a stateless class to start with, there's no need to keep a {@link DelegateManager} + * around to map int to instance of the delegate. + * + * The main goal of this class' methods are to provide a native way to access setters and getters + * on some object. In this case we want to default to using Java reflection instead so the native + * methods do nothing. + * + */ +/*package*/ class PropertyValuesHolder_Delegate { + + @LayoutlibDelegate + /*package*/ static int nGetIntMethod(Class targetClass, String methodName) { + // return 0 to force PropertyValuesHolder to use Java reflection. + return 0; + } + + @LayoutlibDelegate + /*package*/ static int nGetFloatMethod(Class targetClass, String methodName) { + // return 0 to force PropertyValuesHolder to use Java reflection. + return 0; + } + + @LayoutlibDelegate + /*package*/ static void nCallIntMethod(Object target, int methodID, int arg) { + // do nothing + } + + @LayoutlibDelegate + /*package*/ static void nCallFloatMethod(Object target, int methodID, float arg) { + // do nothing + } +} diff --git a/tools/layoutlib/bridge/src/android/app/Fragment_Delegate.java b/tools/layoutlib/bridge/src/android/app/Fragment_Delegate.java new file mode 100644 index 0000000000000..aabd3f1fbd4ed --- /dev/null +++ b/tools/layoutlib/bridge/src/android/app/Fragment_Delegate.java @@ -0,0 +1,104 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.app; + +import com.android.ide.common.rendering.api.IProjectCallback; +import com.android.tools.layoutlib.annotations.LayoutlibDelegate; + +import android.content.Context; +import android.os.Bundle; + +/** + * Delegate used to provide new implementation of a select few methods of {@link Fragment} + * + * Through the layoutlib_create tool, the original methods of Fragment have been replaced + * by calls to methods of the same name in this delegate class. + * + * The methods being re-implemented are the ones responsible for instantiating Fragment objects. + * Because the classes of these objects are found in the project, these methods need access to + * {@link IProjectCallback} object. They are however static methods, so the callback is set + * before the inflation through {@link #setProjectCallback(IProjectCallback)}. + */ +public class Fragment_Delegate { + + private static IProjectCallback sProjectCallback; + + /** + * Sets the current {@link IProjectCallback} to be used to instantiate classes coming + * from the project being rendered. + */ + public static void setProjectCallback(IProjectCallback projectCallback) { + sProjectCallback = projectCallback; + } + + /** + * Like {@link #instantiate(Context, String, Bundle)} but with a null + * argument Bundle. + */ + @LayoutlibDelegate + /*package*/ static Fragment instantiate(Context context, String fname) { + return instantiate(context, fname, null); + } + + /** + * Create a new instance of a Fragment with the given class name. This is + * the same as calling its empty constructor. + * + * @param context The calling context being used to instantiate the fragment. + * This is currently just used to get its ClassLoader. + * @param fname The class name of the fragment to instantiate. + * @param args Bundle of arguments to supply to the fragment, which it + * can retrieve with {@link #getArguments()}. May be null. + * @return Returns a new fragment instance. + * @throws InstantiationException If there is a failure in instantiating + * the given fragment class. This is a runtime exception; it is not + * normally expected to happen. + */ + @LayoutlibDelegate + /*package*/ static Fragment instantiate(Context context, String fname, Bundle args) { + try { + if (sProjectCallback != null) { + Fragment f = (Fragment) sProjectCallback.loadView(fname, + new Class[0], new Object[0]); + + if (args != null) { + args.setClassLoader(f.getClass().getClassLoader()); + f.mArguments = args; + } + return f; + } + + return null; + } catch (ClassNotFoundException e) { + throw new Fragment.InstantiationException("Unable to instantiate fragment " + fname + + ": make sure class name exists, is public, and has an" + + " empty constructor that is public", e); + } catch (java.lang.InstantiationException e) { + throw new Fragment.InstantiationException("Unable to instantiate fragment " + fname + + ": make sure class name exists, is public, and has an" + + " empty constructor that is public", e); + } catch (IllegalAccessException e) { + throw new Fragment.InstantiationException("Unable to instantiate fragment " + fname + + ": make sure class name exists, is public, and has an" + + " empty constructor that is public", e); + } catch (Exception e) { + throw new Fragment.InstantiationException("Unable to instantiate fragment " + fname + + ": make sure class name exists, is public, and has an" + + " empty constructor that is public", e); + } + } +} diff --git a/tools/layoutlib/bridge/src/android/content/res/BridgeAssetManager.java b/tools/layoutlib/bridge/src/android/content/res/BridgeAssetManager.java new file mode 100644 index 0000000000000..a95391885444e --- /dev/null +++ b/tools/layoutlib/bridge/src/android/content/res/BridgeAssetManager.java @@ -0,0 +1,53 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.content.res; + +import com.android.layoutlib.bridge.Bridge; + +import android.content.res.AssetManager; + +public class BridgeAssetManager extends AssetManager { + + /** + * This initializes the static field {@link AssetManager#mSystem} which is used + * by methods who get a global asset manager using {@link AssetManager#getSystem()}. + *

+ * They will end up using our bridge asset manager. + *

+ * {@link Bridge} calls this method after setting up a new bridge. + */ + public static AssetManager initSystem() { + if (!(AssetManager.sSystem instanceof BridgeAssetManager)) { + // Note that AssetManager() creates a system AssetManager and we override it + // with our BridgeAssetManager. + AssetManager.sSystem = new BridgeAssetManager(); + AssetManager.sSystem.makeStringBlocks(false); + } + return AssetManager.sSystem; + } + + /** + * Clears the static {@link AssetManager#sSystem} to make sure we don't leave objects + * around that would prevent us from unloading the library. + */ + public static void clearSystem() { + AssetManager.sSystem = null; + } + + private BridgeAssetManager() { + } +} diff --git a/tools/layoutlib/bridge/src/android/content/res/BridgeResources.java b/tools/layoutlib/bridge/src/android/content/res/BridgeResources.java new file mode 100644 index 0000000000000..879445297ed42 --- /dev/null +++ b/tools/layoutlib/bridge/src/android/content/res/BridgeResources.java @@ -0,0 +1,695 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.content.res; + +import com.android.ide.common.rendering.api.IProjectCallback; +import com.android.ide.common.rendering.api.LayoutLog; +import com.android.ide.common.rendering.api.ResourceValue; +import com.android.layoutlib.bridge.Bridge; +import com.android.layoutlib.bridge.BridgeConstants; +import com.android.layoutlib.bridge.android.BridgeContext; +import com.android.layoutlib.bridge.android.BridgeXmlBlockParser; +import com.android.layoutlib.bridge.impl.ParserFactory; +import com.android.layoutlib.bridge.impl.ResourceHelper; +import com.android.ninepatch.NinePatch; +import com.android.resources.ResourceType; +import com.android.util.Pair; + +import org.xmlpull.v1.XmlPullParser; +import org.xmlpull.v1.XmlPullParserException; + +import android.graphics.drawable.Drawable; +import android.util.AttributeSet; +import android.util.DisplayMetrics; +import android.util.TypedValue; +import android.view.ViewGroup.LayoutParams; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.InputStream; + +/** + * + */ +public final class BridgeResources extends Resources { + + private BridgeContext mContext; + private IProjectCallback mProjectCallback; + private boolean[] mPlatformResourceFlag = new boolean[1]; + + /** + * Simpler wrapper around FileInputStream. This is used when the input stream represent + * not a normal bitmap but a nine patch. + * This is useful when the InputStream is created in a method but used in another that needs + * to know whether this is 9-patch or not, such as BitmapFactory. + */ + public class NinePatchInputStream extends FileInputStream { + private boolean mFakeMarkSupport = true; + public NinePatchInputStream(File file) throws FileNotFoundException { + super(file); + } + + @Override + public boolean markSupported() { + if (mFakeMarkSupport) { + // this is needed so that BitmapFactory doesn't wrap this in a BufferedInputStream. + return true; + } + + return super.markSupported(); + } + + public void disableFakeMarkSupport() { + // disable fake mark support so that in case codec actually try to use them + // we don't lie to them. + mFakeMarkSupport = false; + } + } + + /** + * This initializes the static field {@link Resources#mSystem} which is used + * by methods who get global resources using {@link Resources#getSystem()}. + *

+ * They will end up using our bridge resources. + *

+ * {@link Bridge} calls this method after setting up a new bridge. + */ + public static Resources initSystem(BridgeContext context, + AssetManager assets, + DisplayMetrics metrics, + Configuration config, + IProjectCallback projectCallback) { + return Resources.mSystem = new BridgeResources(context, + assets, + metrics, + config, + projectCallback); + } + + /** + * Disposes the static {@link Resources#mSystem} to make sure we don't leave objects + * around that would prevent us from unloading the library. + */ + public static void disposeSystem() { + if (Resources.mSystem instanceof BridgeResources) { + ((BridgeResources)(Resources.mSystem)).mContext = null; + ((BridgeResources)(Resources.mSystem)).mProjectCallback = null; + } + Resources.mSystem = null; + } + + private BridgeResources(BridgeContext context, AssetManager assets, DisplayMetrics metrics, + Configuration config, IProjectCallback projectCallback) { + super(assets, metrics, config); + mContext = context; + mProjectCallback = projectCallback; + } + + public BridgeTypedArray newTypeArray(int numEntries, boolean platformFile) { + return new BridgeTypedArray(this, mContext, numEntries, platformFile); + } + + private Pair getResourceValue(int id, boolean[] platformResFlag_out) { + // first get the String related to this id in the framework + Pair resourceInfo = Bridge.resolveResourceId(id); + + if (resourceInfo != null) { + platformResFlag_out[0] = true; + String attributeName = resourceInfo.getSecond(); + + return Pair.of(attributeName, mContext.getRenderResources().getFrameworkResource( + resourceInfo.getFirst(), attributeName)); + } + + // didn't find a match in the framework? look in the project. + if (mProjectCallback != null) { + resourceInfo = mProjectCallback.resolveResourceId(id); + + if (resourceInfo != null) { + platformResFlag_out[0] = false; + String attributeName = resourceInfo.getSecond(); + + return Pair.of(attributeName, mContext.getRenderResources().getProjectResource( + resourceInfo.getFirst(), attributeName)); + } + } + + return null; + } + + @Override + public Drawable getDrawable(int id) throws NotFoundException { + Pair value = getResourceValue(id, mPlatformResourceFlag); + + if (value != null) { + return ResourceHelper.getDrawable(value.getSecond(), mContext); + } + + // id was not found or not resolved. Throw a NotFoundException. + throwException(id); + + // this is not used since the method above always throws + return null; + } + + @Override + public int getColor(int id) throws NotFoundException { + Pair value = getResourceValue(id, mPlatformResourceFlag); + + if (value != null) { + try { + return ResourceHelper.getColor(value.getSecond().getValue()); + } catch (NumberFormatException e) { + Bridge.getLog().error(LayoutLog.TAG_RESOURCES_FORMAT, e.getMessage(), e, + null /*data*/); + return 0; + } + } + + // id was not found or not resolved. Throw a NotFoundException. + throwException(id); + + // this is not used since the method above always throws + return 0; + } + + @Override + public ColorStateList getColorStateList(int id) throws NotFoundException { + Pair resValue = getResourceValue(id, mPlatformResourceFlag); + + if (resValue != null) { + ColorStateList stateList = ResourceHelper.getColorStateList(resValue.getSecond(), + mContext); + if (stateList != null) { + return stateList; + } + } + + // id was not found or not resolved. Throw a NotFoundException. + throwException(id); + + // this is not used since the method above always throws + return null; + } + + @Override + public CharSequence getText(int id) throws NotFoundException { + Pair value = getResourceValue(id, mPlatformResourceFlag); + + if (value != null) { + ResourceValue resValue = value.getSecond(); + + assert resValue != null; + if (resValue != null) { + String v = resValue.getValue(); + if (v != null) { + return v; + } + } + } + + // id was not found or not resolved. Throw a NotFoundException. + throwException(id); + + // this is not used since the method above always throws + return null; + } + + @Override + public XmlResourceParser getLayout(int id) throws NotFoundException { + Pair v = getResourceValue(id, mPlatformResourceFlag); + + if (v != null) { + ResourceValue value = v.getSecond(); + XmlPullParser parser = null; + + try { + // check if the current parser can provide us with a custom parser. + if (mPlatformResourceFlag[0] == false) { + parser = mProjectCallback.getParser(value); + } + + // create a new one manually if needed. + if (parser == null) { + File xml = new File(value.getValue()); + if (xml.isFile()) { + // we need to create a pull parser around the layout XML file, and then + // give that to our XmlBlockParser + parser = ParserFactory.create(xml); + } + } + + if (parser != null) { + return new BridgeXmlBlockParser(parser, mContext, mPlatformResourceFlag[0]); + } + } catch (XmlPullParserException e) { + Bridge.getLog().error(LayoutLog.TAG_BROKEN, + "Failed to configure parser for " + value.getValue(), e, null /*data*/); + // we'll return null below. + } catch (FileNotFoundException e) { + // this shouldn't happen since we check above. + } + + } + + // id was not found or not resolved. Throw a NotFoundException. + throwException(id); + + // this is not used since the method above always throws + return null; + } + + @Override + public XmlResourceParser getAnimation(int id) throws NotFoundException { + Pair v = getResourceValue(id, mPlatformResourceFlag); + + if (v != null) { + ResourceValue value = v.getSecond(); + XmlPullParser parser = null; + + try { + File xml = new File(value.getValue()); + if (xml.isFile()) { + // we need to create a pull parser around the layout XML file, and then + // give that to our XmlBlockParser + parser = ParserFactory.create(xml); + + return new BridgeXmlBlockParser(parser, mContext, mPlatformResourceFlag[0]); + } + } catch (XmlPullParserException e) { + Bridge.getLog().error(LayoutLog.TAG_BROKEN, + "Failed to configure parser for " + value.getValue(), e, null /*data*/); + // we'll return null below. + } catch (FileNotFoundException e) { + // this shouldn't happen since we check above. + } + + } + + // id was not found or not resolved. Throw a NotFoundException. + throwException(id); + + // this is not used since the method above always throws + return null; + } + + @Override + public TypedArray obtainAttributes(AttributeSet set, int[] attrs) { + return mContext.obtainStyledAttributes(set, attrs); + } + + @Override + public TypedArray obtainTypedArray(int id) throws NotFoundException { + throw new UnsupportedOperationException(); + } + + + @Override + public float getDimension(int id) throws NotFoundException { + Pair value = getResourceValue(id, mPlatformResourceFlag); + + if (value != null) { + ResourceValue resValue = value.getSecond(); + + assert resValue != null; + if (resValue != null) { + String v = resValue.getValue(); + if (v != null) { + if (v.equals(BridgeConstants.MATCH_PARENT) || + v.equals(BridgeConstants.FILL_PARENT)) { + return LayoutParams.MATCH_PARENT; + } else if (v.equals(BridgeConstants.WRAP_CONTENT)) { + return LayoutParams.WRAP_CONTENT; + } + + if (ResourceHelper.parseFloatAttribute( + value.getFirst(), v, mTmpValue, true /*requireUnit*/) && + mTmpValue.type == TypedValue.TYPE_DIMENSION) { + return mTmpValue.getDimension(getDisplayMetrics()); + } + } + } + } + + // id was not found or not resolved. Throw a NotFoundException. + throwException(id); + + // this is not used since the method above always throws + return 0; + } + + @Override + public int getDimensionPixelOffset(int id) throws NotFoundException { + Pair value = getResourceValue(id, mPlatformResourceFlag); + + if (value != null) { + ResourceValue resValue = value.getSecond(); + + assert resValue != null; + if (resValue != null) { + String v = resValue.getValue(); + if (v != null) { + if (ResourceHelper.parseFloatAttribute( + value.getFirst(), v, mTmpValue, true /*requireUnit*/) && + mTmpValue.type == TypedValue.TYPE_DIMENSION) { + return TypedValue.complexToDimensionPixelOffset(mTmpValue.data, + getDisplayMetrics()); + } + } + } + } + + // id was not found or not resolved. Throw a NotFoundException. + throwException(id); + + // this is not used since the method above always throws + return 0; + } + + @Override + public int getDimensionPixelSize(int id) throws NotFoundException { + Pair value = getResourceValue(id, mPlatformResourceFlag); + + if (value != null) { + ResourceValue resValue = value.getSecond(); + + assert resValue != null; + if (resValue != null) { + String v = resValue.getValue(); + if (v != null) { + if (ResourceHelper.parseFloatAttribute( + value.getFirst(), v, mTmpValue, true /*requireUnit*/) && + mTmpValue.type == TypedValue.TYPE_DIMENSION) { + return TypedValue.complexToDimensionPixelSize(mTmpValue.data, + getDisplayMetrics()); + } + } + } + } + + // id was not found or not resolved. Throw a NotFoundException. + throwException(id); + + // this is not used since the method above always throws + return 0; + } + + @Override + public int getInteger(int id) throws NotFoundException { + Pair value = getResourceValue(id, mPlatformResourceFlag); + + if (value != null) { + ResourceValue resValue = value.getSecond(); + + assert resValue != null; + if (resValue != null) { + String v = resValue.getValue(); + if (v != null) { + int radix = 10; + if (v.startsWith("0x")) { + v = v.substring(2); + radix = 16; + } + try { + return Integer.parseInt(v, radix); + } catch (NumberFormatException e) { + // return exception below + } + } + } + } + + // id was not found or not resolved. Throw a NotFoundException. + throwException(id); + + // this is not used since the method above always throws + return 0; + } + + @Override + public boolean getBoolean(int id) throws NotFoundException { + Pair value = getResourceValue(id, mPlatformResourceFlag); + + if (value != null) { + ResourceValue resValue = value.getSecond(); + + assert resValue != null; + if (resValue != null) { + String v = resValue.getValue(); + if (v != null) { + return Boolean.parseBoolean(v); + } + } + } + + // id was not found or not resolved. Throw a NotFoundException. + throwException(id); + + // this is not used since the method above always throws + return false; + } + + @Override + public String getResourceEntryName(int resid) throws NotFoundException { + throw new UnsupportedOperationException(); + } + + @Override + public String getResourceName(int resid) throws NotFoundException { + throw new UnsupportedOperationException(); + } + + @Override + public String getResourceTypeName(int resid) throws NotFoundException { + throw new UnsupportedOperationException(); + } + + @Override + public String getString(int id, Object... formatArgs) throws NotFoundException { + String s = getString(id); + if (s != null) { + return String.format(s, formatArgs); + + } + + // id was not found or not resolved. Throw a NotFoundException. + throwException(id); + + // this is not used since the method above always throws + return null; + } + + @Override + public String getString(int id) throws NotFoundException { + Pair value = getResourceValue(id, mPlatformResourceFlag); + + if (value != null && value.getSecond().getValue() != null) { + return value.getSecond().getValue(); + } + + // id was not found or not resolved. Throw a NotFoundException. + throwException(id); + + // this is not used since the method above always throws + return null; + } + + @Override + public void getValue(int id, TypedValue outValue, boolean resolveRefs) + throws NotFoundException { + Pair value = getResourceValue(id, mPlatformResourceFlag); + + if (value != null) { + String v = value.getSecond().getValue(); + + if (v != null) { + if (ResourceHelper.parseFloatAttribute(value.getFirst(), v, outValue, + false /*requireUnit*/)) { + return; + } + + // else it's a string + outValue.type = TypedValue.TYPE_STRING; + outValue.string = v; + return; + } + } + + // id was not found or not resolved. Throw a NotFoundException. + throwException(id); + } + + @Override + public void getValue(String name, TypedValue outValue, boolean resolveRefs) + throws NotFoundException { + throw new UnsupportedOperationException(); + } + + @Override + public XmlResourceParser getXml(int id) throws NotFoundException { + Pair value = getResourceValue(id, mPlatformResourceFlag); + + if (value != null) { + String v = value.getSecond().getValue(); + + if (v != null) { + // check this is a file + File f = new File(v); + if (f.isFile()) { + try { + XmlPullParser parser = ParserFactory.create(f); + + return new BridgeXmlBlockParser(parser, mContext, mPlatformResourceFlag[0]); + } catch (XmlPullParserException e) { + NotFoundException newE = new NotFoundException(); + newE.initCause(e); + throw newE; + } catch (FileNotFoundException e) { + NotFoundException newE = new NotFoundException(); + newE.initCause(e); + throw newE; + } + } + } + } + + // id was not found or not resolved. Throw a NotFoundException. + throwException(id); + + // this is not used since the method above always throws + return null; + } + + @Override + public XmlResourceParser loadXmlResourceParser(String file, int id, + int assetCookie, String type) throws NotFoundException { + // even though we know the XML file to load directly, we still need to resolve the + // id so that we can know if it's a platform or project resource. + // (mPlatformResouceFlag will get the result and will be used later). + getResourceValue(id, mPlatformResourceFlag); + + File f = new File(file); + try { + XmlPullParser parser = ParserFactory.create(f); + + return new BridgeXmlBlockParser(parser, mContext, mPlatformResourceFlag[0]); + } catch (XmlPullParserException e) { + NotFoundException newE = new NotFoundException(); + newE.initCause(e); + throw newE; + } catch (FileNotFoundException e) { + NotFoundException newE = new NotFoundException(); + newE.initCause(e); + throw newE; + } + } + + + @Override + public InputStream openRawResource(int id) throws NotFoundException { + Pair value = getResourceValue(id, mPlatformResourceFlag); + + if (value != null) { + String path = value.getSecond().getValue(); + + if (path != null) { + // check this is a file + File f = new File(path); + if (f.isFile()) { + try { + // if it's a nine-patch return a custom input stream so that + // other methods (mainly bitmap factory) can detect it's a 9-patch + // and actually load it as a 9-patch instead of a normal bitmap + if (path.toLowerCase().endsWith(NinePatch.EXTENSION_9PATCH)) { + return new NinePatchInputStream(f); + } + return new FileInputStream(f); + } catch (FileNotFoundException e) { + NotFoundException newE = new NotFoundException(); + newE.initCause(e); + throw newE; + } + } + } + } + + // id was not found or not resolved. Throw a NotFoundException. + throwException(id); + + // this is not used since the method above always throws + return null; + } + + @Override + public InputStream openRawResource(int id, TypedValue value) throws NotFoundException { + getValue(id, value, true); + + String path = value.string.toString(); + + File f = new File(path); + if (f.isFile()) { + try { + // if it's a nine-patch return a custom input stream so that + // other methods (mainly bitmap factory) can detect it's a 9-patch + // and actually load it as a 9-patch instead of a normal bitmap + if (path.toLowerCase().endsWith(NinePatch.EXTENSION_9PATCH)) { + return new NinePatchInputStream(f); + } + return new FileInputStream(f); + } catch (FileNotFoundException e) { + NotFoundException exception = new NotFoundException(); + exception.initCause(e); + throw exception; + } + } + + throw new NotFoundException(); + } + + @Override + public AssetFileDescriptor openRawResourceFd(int id) throws NotFoundException { + throw new UnsupportedOperationException(); + } + + /** + * Builds and throws a {@link Resources.NotFoundException} based on a resource id and a resource type. + * @param id the id of the resource + * @throws NotFoundException + */ + private void throwException(int id) throws NotFoundException { + // first get the String related to this id in the framework + Pair resourceInfo = Bridge.resolveResourceId(id); + + // if the name is unknown in the framework, get it from the custom view loader. + if (resourceInfo == null && mProjectCallback != null) { + resourceInfo = mProjectCallback.resolveResourceId(id); + } + + String message = null; + if (resourceInfo != null) { + message = String.format( + "Could not find %1$s resource matching value 0x%2$X (resolved name: %3$s) in current configuration.", + resourceInfo.getFirst(), id, resourceInfo.getSecond()); + } else { + message = String.format( + "Could not resolve resource value: 0x%1$X.", id); + } + + throw new NotFoundException(message); + } +} diff --git a/tools/layoutlib/bridge/src/android/content/res/BridgeTypedArray.java b/tools/layoutlib/bridge/src/android/content/res/BridgeTypedArray.java new file mode 100644 index 0000000000000..446d139b21615 --- /dev/null +++ b/tools/layoutlib/bridge/src/android/content/res/BridgeTypedArray.java @@ -0,0 +1,908 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.content.res; + +import com.android.ide.common.rendering.api.AttrResourceValue; +import com.android.ide.common.rendering.api.LayoutLog; +import com.android.ide.common.rendering.api.RenderResources; +import com.android.ide.common.rendering.api.ResourceValue; +import com.android.ide.common.rendering.api.StyleResourceValue; +import com.android.internal.util.XmlUtils; +import com.android.layoutlib.bridge.Bridge; +import com.android.layoutlib.bridge.BridgeConstants; +import com.android.layoutlib.bridge.android.BridgeContext; +import com.android.layoutlib.bridge.android.BridgeXmlBlockParser; +import com.android.layoutlib.bridge.impl.ParserFactory; +import com.android.layoutlib.bridge.impl.ResourceHelper; +import com.android.resources.ResourceType; + +import org.xmlpull.v1.XmlPullParser; +import org.xmlpull.v1.XmlPullParserException; + +import android.graphics.drawable.Drawable; +import android.util.DisplayMetrics; +import android.util.TypedValue; +import android.view.LayoutInflater_Delegate; +import android.view.ViewGroup.LayoutParams; + +import java.io.File; +import java.util.Arrays; +import java.util.Map; + +/** + * Custom implementation of TypedArray to handle non compiled resources. + */ +public final class BridgeTypedArray extends TypedArray { + + private final BridgeResources mBridgeResources; + private final BridgeContext mContext; + private final boolean mPlatformFile; + + private ResourceValue[] mResourceData; + private String[] mNames; + private boolean[] mIsFramework; + + public BridgeTypedArray(BridgeResources resources, BridgeContext context, int len, + boolean platformFile) { + super(null, null, null, 0); + mBridgeResources = resources; + mContext = context; + mPlatformFile = platformFile; + mResourceData = new ResourceValue[len]; + mNames = new String[len]; + mIsFramework = new boolean[len]; + } + + /** + * A bridge-specific method that sets a value in the type array + * @param index the index of the value in the TypedArray + * @param name the name of the attribute + * @param isFramework whether the attribute is in the android namespace. + * @param value the value of the attribute + */ + public void bridgeSetValue(int index, String name, boolean isFramework, ResourceValue value) { + mResourceData[index] = value; + mNames[index] = name; + mIsFramework[index] = isFramework; + } + + /** + * Seals the array after all calls to {@link #bridgeSetValue(int, String, ResourceValue)} have + * been done. + *

This allows to compute the list of non default values, permitting + * {@link #getIndexCount()} to return the proper value. + */ + public void sealArray() { + // fills TypedArray.mIndices which is used to implement getIndexCount/getIndexAt + // first count the array size + int count = 0; + for (ResourceValue data : mResourceData) { + if (data != null) { + count++; + } + } + + // allocate the table with an extra to store the size + mIndices = new int[count+1]; + mIndices[0] = count; + + // fill the array with the indices. + int index = 1; + for (int i = 0 ; i < mResourceData.length ; i++) { + if (mResourceData[i] != null) { + mIndices[index++] = i; + } + } + } + + /** + * Return the number of values in this array. + */ + @Override + public int length() { + return mResourceData.length; + } + + /** + * Return the Resources object this array was loaded from. + */ + @Override + public Resources getResources() { + return mBridgeResources; + } + + /** + * Retrieve the styled string value for the attribute at index. + * + * @param index Index of attribute to retrieve. + * + * @return CharSequence holding string data. May be styled. Returns + * null if the attribute is not defined. + */ + @Override + public CharSequence getText(int index) { + if (index < 0 || index >= mResourceData.length) { + return null; + } + + if (mResourceData[index] != null) { + // FIXME: handle styled strings! + return mResourceData[index].getValue(); + } + + return null; + } + + /** + * Retrieve the string value for the attribute at index. + * + * @param index Index of attribute to retrieve. + * + * @return String holding string data. Any styling information is + * removed. Returns null if the attribute is not defined. + */ + @Override + public String getString(int index) { + if (index < 0 || index >= mResourceData.length) { + return null; + } + + if (mResourceData[index] != null) { + return mResourceData[index].getValue(); + } + + return null; + } + + /** + * Retrieve the boolean value for the attribute at index. + * + * @param index Index of attribute to retrieve. + * @param defValue Value to return if the attribute is not defined. + * + * @return Attribute boolean value, or defValue if not defined. + */ + @Override + public boolean getBoolean(int index, boolean defValue) { + if (index < 0 || index >= mResourceData.length) { + return defValue; + } + + if (mResourceData[index] == null) { + return defValue; + } + + String s = mResourceData[index].getValue(); + if (s != null) { + return XmlUtils.convertValueToBoolean(s, defValue); + } + + return defValue; + } + + /** + * Retrieve the integer value for the attribute at index. + * + * @param index Index of attribute to retrieve. + * @param defValue Value to return if the attribute is not defined. + * + * @return Attribute int value, or defValue if not defined. + */ + @Override + public int getInt(int index, int defValue) { + if (index < 0 || index >= mResourceData.length) { + return defValue; + } + + if (mResourceData[index] == null) { + return defValue; + } + + String s = mResourceData[index].getValue(); + + if (RenderResources.REFERENCE_NULL.equals(s)) { + return defValue; + } + + if (s == null || s.length() == 0) { + return defValue; + } + + try { + return XmlUtils.convertValueToInt(s, defValue); + } catch (NumberFormatException e) { + // pass + } + + // Field is not null and is not an integer. + // Check for possible constants and try to find them. + // Get the map of attribute-constant -> IntegerValue + Map map = null; + if (mIsFramework[index]) { + map = Bridge.getEnumValues(mNames[index]); + } else { + // get the styleable matching the resolved name + RenderResources res = mContext.getRenderResources(); + ResourceValue attr = res.getProjectResource(ResourceType.ATTR, mNames[index]); + if (attr instanceof AttrResourceValue) { + map = ((AttrResourceValue) attr).getAttributeValues(); + } + } + + if (map != null) { + // accumulator to store the value of the 1+ constants. + int result = 0; + + // split the value in case this is a mix of several flags. + String[] keywords = s.split("\\|"); + for (String keyword : keywords) { + Integer i = map.get(keyword.trim()); + if (i != null) { + result |= i.intValue(); + } else { + Bridge.getLog().warning(LayoutLog.TAG_RESOURCES_FORMAT, + String.format( + "\"%s\" in attribute \"%2$s\" is not a valid value", + keyword, mNames[index]), null /*data*/); + } + } + return result; + } + + return defValue; + } + + /** + * Retrieve the float value for the attribute at index. + * + * @param index Index of attribute to retrieve. + * + * @return Attribute float value, or defValue if not defined.. + */ + @Override + public float getFloat(int index, float defValue) { + if (index < 0 || index >= mResourceData.length) { + return defValue; + } + + if (mResourceData[index] == null) { + return defValue; + } + + String s = mResourceData[index].getValue(); + + if (s != null) { + try { + return Float.parseFloat(s); + } catch (NumberFormatException e) { + Bridge.getLog().warning(LayoutLog.TAG_RESOURCES_FORMAT, + String.format( + "\"%s\" in attribute \"%2$s\" cannot be converted to float.", + s, mNames[index]), null /*data*/); + + // we'll return the default value below. + } + } + return defValue; + } + + /** + * Retrieve the color value for the attribute at index. If + * the attribute references a color resource holding a complex + * {@link android.content.res.ColorStateList}, then the default color from + * the set is returned. + * + * @param index Index of attribute to retrieve. + * @param defValue Value to return if the attribute is not defined or + * not a resource. + * + * @return Attribute color value, or defValue if not defined. + */ + @Override + public int getColor(int index, int defValue) { + if (index < 0 || index >= mResourceData.length) { + return defValue; + } + + if (mResourceData[index] == null) { + return defValue; + } + + ColorStateList colorStateList = ResourceHelper.getColorStateList( + mResourceData[index], mContext); + if (colorStateList != null) { + return colorStateList.getDefaultColor(); + } + + return defValue; + } + + /** + * Retrieve the ColorStateList for the attribute at index. + * The value may be either a single solid color or a reference to + * a color or complex {@link android.content.res.ColorStateList} description. + * + * @param index Index of attribute to retrieve. + * + * @return ColorStateList for the attribute, or null if not defined. + */ + @Override + public ColorStateList getColorStateList(int index) { + if (index < 0 || index >= mResourceData.length) { + return null; + } + + if (mResourceData[index] == null) { + return null; + } + + ResourceValue resValue = mResourceData[index]; + String value = resValue.getValue(); + + if (value == null) { + return null; + } + + if (RenderResources.REFERENCE_NULL.equals(value)) { + return null; + } + + // let the framework inflate the ColorStateList from the XML file. + File f = new File(value); + if (f.isFile()) { + try { + XmlPullParser parser = ParserFactory.create(f); + + BridgeXmlBlockParser blockParser = new BridgeXmlBlockParser( + parser, mContext, resValue.isFramework()); + try { + return ColorStateList.createFromXml(mContext.getResources(), blockParser); + } finally { + blockParser.ensurePopped(); + } + } catch (XmlPullParserException e) { + Bridge.getLog().error(LayoutLog.TAG_BROKEN, + "Failed to configure parser for " + value, e, null /*data*/); + return null; + } catch (Exception e) { + // this is an error and not warning since the file existence is checked before + // attempting to parse it. + Bridge.getLog().error(LayoutLog.TAG_RESOURCES_READ, + "Failed to parse file " + value, e, null /*data*/); + + return null; + } + } + + try { + int color = ResourceHelper.getColor(value); + return ColorStateList.valueOf(color); + } catch (NumberFormatException e) { + Bridge.getLog().error(LayoutLog.TAG_RESOURCES_FORMAT, e.getMessage(), e, null /*data*/); + } + + return null; + } + + /** + * Retrieve the integer value for the attribute at index. + * + * @param index Index of attribute to retrieve. + * @param defValue Value to return if the attribute is not defined or + * not a resource. + * + * @return Attribute integer value, or defValue if not defined. + */ + @Override + public int getInteger(int index, int defValue) { + return getInt(index, defValue); + } + + /** + * Retrieve a dimensional unit attribute at index. Unit + * conversions are based on the current {@link DisplayMetrics} + * associated with the resources this {@link TypedArray} object + * came from. + * + * @param index Index of attribute to retrieve. + * @param defValue Value to return if the attribute is not defined or + * not a resource. + * + * @return Attribute dimension value multiplied by the appropriate + * metric, or defValue if not defined. + * + * @see #getDimensionPixelOffset + * @see #getDimensionPixelSize + */ + @Override + public float getDimension(int index, float defValue) { + if (index < 0 || index >= mResourceData.length) { + return defValue; + } + + if (mResourceData[index] == null) { + return defValue; + } + + String s = mResourceData[index].getValue(); + + if (s == null) { + return defValue; + } else if (s.equals(BridgeConstants.MATCH_PARENT) || + s.equals(BridgeConstants.FILL_PARENT)) { + return LayoutParams.MATCH_PARENT; + } else if (s.equals(BridgeConstants.WRAP_CONTENT)) { + return LayoutParams.WRAP_CONTENT; + } else if (RenderResources.REFERENCE_NULL.equals(s)) { + return defValue; + } + + if (ResourceHelper.parseFloatAttribute(mNames[index], s, mValue, true /*requireUnit*/)) { + return mValue.getDimension(mBridgeResources.getDisplayMetrics()); + } + + // looks like we were unable to resolve the dimension value + Bridge.getLog().warning(LayoutLog.TAG_RESOURCES_FORMAT, + String.format( + "\"%1$s\" in attribute \"%2$s\" is not a valid format.", + s, mNames[index]), null /*data*/); + + return defValue; + } + + /** + * Retrieve a dimensional unit attribute at index for use + * as an offset in raw pixels. This is the same as + * {@link #getDimension}, except the returned value is converted to + * integer pixels for you. An offset conversion involves simply + * truncating the base value to an integer. + * + * @param index Index of attribute to retrieve. + * @param defValue Value to return if the attribute is not defined or + * not a resource. + * + * @return Attribute dimension value multiplied by the appropriate + * metric and truncated to integer pixels, or defValue if not defined. + * + * @see #getDimension + * @see #getDimensionPixelSize + */ + @Override + public int getDimensionPixelOffset(int index, int defValue) { + return (int) getDimension(index, defValue); + } + + /** + * Retrieve a dimensional unit attribute at index for use + * as a size in raw pixels. This is the same as + * {@link #getDimension}, except the returned value is converted to + * integer pixels for use as a size. A size conversion involves + * rounding the base value, and ensuring that a non-zero base value + * is at least one pixel in size. + * + * @param index Index of attribute to retrieve. + * @param defValue Value to return if the attribute is not defined or + * not a resource. + * + * @return Attribute dimension value multiplied by the appropriate + * metric and truncated to integer pixels, or defValue if not defined. + * + * @see #getDimension + * @see #getDimensionPixelOffset + */ + @Override + public int getDimensionPixelSize(int index, int defValue) { + try { + return getDimension(index); + } catch (RuntimeException e) { + if (mResourceData[index] != null) { + String s = mResourceData[index].getValue(); + + if (s != null) { + // looks like we were unable to resolve the dimension value + Bridge.getLog().warning(LayoutLog.TAG_RESOURCES_FORMAT, + String.format( + "\"%1$s\" in attribute \"%2$s\" is not a valid format.", + s, mNames[index]), null /*data*/); + } + } + + return defValue; + } + } + + /** + * Special version of {@link #getDimensionPixelSize} for retrieving + * {@link android.view.ViewGroup}'s layout_width and layout_height + * attributes. This is only here for performance reasons; applications + * should use {@link #getDimensionPixelSize}. + * + * @param index Index of the attribute to retrieve. + * @param name Textual name of attribute for error reporting. + * + * @return Attribute dimension value multiplied by the appropriate + * metric and truncated to integer pixels. + */ + @Override + public int getLayoutDimension(int index, String name) { + try { + // this will throw an exception + return getDimension(index); + } catch (RuntimeException e) { + + if (LayoutInflater_Delegate.sIsInInclude) { + throw new RuntimeException(); + } + + Bridge.getLog().warning(LayoutLog.TAG_RESOURCES_FORMAT, + "You must supply a " + name + " attribute.", null); + + return 0; + } + } + + @Override + public int getLayoutDimension(int index, int defValue) { + return getDimensionPixelSize(index, defValue); + } + + private int getDimension(int index) { + if (mResourceData[index] == null) { + throw new RuntimeException(); + } + + String s = mResourceData[index].getValue(); + + if (s == null) { + throw new RuntimeException(); + } else if (s.equals(BridgeConstants.MATCH_PARENT) || + s.equals(BridgeConstants.FILL_PARENT)) { + return LayoutParams.MATCH_PARENT; + } else if (s.equals(BridgeConstants.WRAP_CONTENT)) { + return LayoutParams.WRAP_CONTENT; + } else if (RenderResources.REFERENCE_NULL.equals(s)) { + throw new RuntimeException(); + } + + if (ResourceHelper.parseFloatAttribute(mNames[index], s, mValue, true /*requireUnit*/)) { + float f = mValue.getDimension(mBridgeResources.getDisplayMetrics()); + + final int res = (int)(f+0.5f); + if (res != 0) return res; + if (f == 0) return 0; + if (f > 0) return 1; + } + + throw new RuntimeException(); + } + + /** + * Retrieve a fractional unit attribute at index. + * + * @param index Index of attribute to retrieve. + * @param base The base value of this fraction. In other words, a + * standard fraction is multiplied by this value. + * @param pbase The parent base value of this fraction. In other + * words, a parent fraction (nn%p) is multiplied by this + * value. + * @param defValue Value to return if the attribute is not defined or + * not a resource. + * + * @return Attribute fractional value multiplied by the appropriate + * base value, or defValue if not defined. + */ + @Override + public float getFraction(int index, int base, int pbase, float defValue) { + if (index < 0 || index >= mResourceData.length) { + return defValue; + } + + if (mResourceData[index] == null) { + return defValue; + } + + String value = mResourceData[index].getValue(); + if (value == null) { + return defValue; + } + + if (ResourceHelper.parseFloatAttribute(mNames[index], value, mValue, + false /*requireUnit*/)) { + return mValue.getFraction(base, pbase); + } + + // looks like we were unable to resolve the fraction value + Bridge.getLog().warning(LayoutLog.TAG_RESOURCES_FORMAT, + String.format( + "\"%1$s\" in attribute \"%2$s\" cannot be converted to a fraction.", + value, mNames[index]), null /*data*/); + + return defValue; + } + + /** + * Retrieve the resource identifier for the attribute at + * index. Note that attribute resource as resolved when + * the overall {@link TypedArray} object is retrieved. As a + * result, this function will return the resource identifier of the + * final resource value that was found, not necessarily the + * original resource that was specified by the attribute. + * + * @param index Index of attribute to retrieve. + * @param defValue Value to return if the attribute is not defined or + * not a resource. + * + * @return Attribute resource identifier, or defValue if not defined. + */ + @Override + public int getResourceId(int index, int defValue) { + if (index < 0 || index >= mResourceData.length) { + return defValue; + } + + // get the Resource for this index + ResourceValue resValue = mResourceData[index]; + + // no data, return the default value. + if (resValue == null) { + return defValue; + } + + // check if this is a style resource + if (resValue instanceof StyleResourceValue) { + // get the id that will represent this style. + return mContext.getDynamicIdByStyle((StyleResourceValue)resValue); + } + + if (RenderResources.REFERENCE_NULL.equals(resValue.getValue())) { + return defValue; + } + + // if the attribute was a reference to a resource, and not a declaration of an id (@+id), + // then the xml attribute value was "resolved" which leads us to a ResourceValue with a + // valid getType() and getName() returning a resource name. + // (and getValue() returning null!). We need to handle this! + if (resValue.getResourceType() != null) { + // if this is a framework id + if (mPlatformFile || resValue.isFramework()) { + // look for idName in the android R classes + return mContext.getFrameworkResourceValue( + resValue.getResourceType(), resValue.getName(), defValue); + } + + // look for idName in the project R class. + return mContext.getProjectResourceValue( + resValue.getResourceType(), resValue.getName(), defValue); + } + + // else, try to get the value, and resolve it somehow. + String value = resValue.getValue(); + if (value == null) { + return defValue; + } + + // if the value is just an integer, return it. + try { + int i = Integer.parseInt(value); + if (Integer.toString(i).equals(value)) { + return i; + } + } catch (NumberFormatException e) { + // pass + } + + // Handle the @id/, @+id/ and @android:id/ + // We need to return the exact value that was compiled (from the various R classes), + // as these values can be reused internally with calls to findViewById(). + // There's a trick with platform layouts that not use "android:" but their IDs are in + // fact in the android.R and com.android.internal.R classes. + // The field mPlatformFile will indicate that all IDs are to be looked up in the android R + // classes exclusively. + + // if this is a reference to an id, find it. + if (value.startsWith("@id/") || value.startsWith("@+") || + value.startsWith("@android:id/")) { + + int pos = value.indexOf('/'); + String idName = value.substring(pos + 1); + + // if this is a framework id + if (mPlatformFile || value.startsWith("@android") || value.startsWith("@+android")) { + // look for idName in the android R classes + return mContext.getFrameworkResourceValue(ResourceType.ID, idName, defValue); + } + + // look for idName in the project R class. + return mContext.getProjectResourceValue(ResourceType.ID, idName, defValue); + } + + // not a direct id valid reference? resolve it + Integer idValue = null; + + if (resValue.isFramework()) { + idValue = Bridge.getResourceId(resValue.getResourceType(), + resValue.getName()); + } else { + idValue = mContext.getProjectCallback().getResourceId( + resValue.getResourceType(), resValue.getName()); + } + + if (idValue != null) { + return idValue.intValue(); + } + + Bridge.getLog().warning(LayoutLog.TAG_RESOURCES_RESOLVE, + String.format( + "Unable to resolve id \"%1$s\" for attribute \"%2$s\"", value, mNames[index]), + resValue); + + return defValue; + } + + /** + * Retrieve the Drawable for the attribute at index. This + * gets the resource ID of the selected attribute, and uses + * {@link Resources#getDrawable Resources.getDrawable} of the owning + * Resources object to retrieve its Drawable. + * + * @param index Index of attribute to retrieve. + * + * @return Drawable for the attribute, or null if not defined. + */ + @Override + public Drawable getDrawable(int index) { + if (index < 0 || index >= mResourceData.length) { + return null; + } + + if (mResourceData[index] == null) { + return null; + } + + ResourceValue value = mResourceData[index]; + String stringValue = value.getValue(); + if (stringValue == null || RenderResources.REFERENCE_NULL.equals(stringValue)) { + return null; + } + + return ResourceHelper.getDrawable(value, mContext); + } + + + /** + * Retrieve the CharSequence[] for the attribute at index. + * This gets the resource ID of the selected attribute, and uses + * {@link Resources#getTextArray Resources.getTextArray} of the owning + * Resources object to retrieve its String[]. + * + * @param index Index of attribute to retrieve. + * + * @return CharSequence[] for the attribute, or null if not defined. + */ + @Override + public CharSequence[] getTextArray(int index) { + if (index < 0 || index >= mResourceData.length) { + return null; + } + + if (mResourceData[index] == null) { + return null; + } + + String value = mResourceData[index].getValue(); + if (value != null) { + if (RenderResources.REFERENCE_NULL.equals(value)) { + return null; + } + + return new CharSequence[] { value }; + } + + Bridge.getLog().warning(LayoutLog.TAG_RESOURCES_FORMAT, + String.format( + String.format("Unknown value for getTextArray(%d) => %s", //DEBUG + index, mResourceData[index].getName())), null /*data*/); + + return null; + } + + /** + * Retrieve the raw TypedValue for the attribute at index. + * + * @param index Index of attribute to retrieve. + * @param outValue TypedValue object in which to place the attribute's + * data. + * + * @return Returns true if the value was retrieved, else false. + */ + @Override + public boolean getValue(int index, TypedValue outValue) { + if (index < 0 || index >= mResourceData.length) { + return false; + } + + if (mResourceData[index] == null) { + return false; + } + + String s = mResourceData[index].getValue(); + + return ResourceHelper.parseFloatAttribute(mNames[index], s, outValue, + false /*requireUnit*/); + } + + /** + * Determines whether there is an attribute at index. + * + * @param index Index of attribute to retrieve. + * + * @return True if the attribute has a value, false otherwise. + */ + @Override + public boolean hasValue(int index) { + if (index < 0 || index >= mResourceData.length) { + return false; + } + + return mResourceData[index] != null; + } + + /** + * Retrieve the raw TypedValue for the attribute at index + * and return a temporary object holding its data. This object is only + * valid until the next call on to {@link TypedArray}. + * + * @param index Index of attribute to retrieve. + * + * @return Returns a TypedValue object if the attribute is defined, + * containing its data; otherwise returns null. (You will not + * receive a TypedValue whose type is TYPE_NULL.) + */ + @Override + public TypedValue peekValue(int index) { + if (index < 0 || index >= mResourceData.length) { + return null; + } + + if (getValue(index, mValue)) { + return mValue; + } + + return null; + } + + /** + * Returns a message about the parser state suitable for printing error messages. + */ + @Override + public String getPositionDescription() { + return ""; + } + + /** + * Give back a previously retrieved TypedArray, for later re-use. + */ + @Override + public void recycle() { + // pass + } + + @Override + public String toString() { + return Arrays.toString(mResourceData); + } + } diff --git a/tools/layoutlib/bridge/src/android/content/res/Resources_Theme_Delegate.java b/tools/layoutlib/bridge/src/android/content/res/Resources_Theme_Delegate.java new file mode 100644 index 0000000000000..c9d615c6ec6fb --- /dev/null +++ b/tools/layoutlib/bridge/src/android/content/res/Resources_Theme_Delegate.java @@ -0,0 +1,67 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.content.res; + +import com.android.layoutlib.bridge.impl.RenderSessionImpl; +import com.android.tools.layoutlib.annotations.LayoutlibDelegate; + +import android.content.res.Resources.NotFoundException; +import android.content.res.Resources.Theme; +import android.util.AttributeSet; +import android.util.TypedValue; + +/** + * Delegate used to provide new implementation of a select few methods of {@link Resources$Theme} + * + * Through the layoutlib_create tool, the original methods of Theme have been replaced + * by calls to methods of the same name in this delegate class. + * + */ +public class Resources_Theme_Delegate { + + @LayoutlibDelegate + /*package*/ static TypedArray obtainStyledAttributes( + Resources thisResources, Theme thisTheme, + int[] attrs) { + return RenderSessionImpl.getCurrentContext().obtainStyledAttributes(attrs); + } + + @LayoutlibDelegate + /*package*/ static TypedArray obtainStyledAttributes( + Resources thisResources, Theme thisTheme, + int resid, int[] attrs) + throws NotFoundException { + return RenderSessionImpl.getCurrentContext().obtainStyledAttributes(resid, attrs); + } + + @LayoutlibDelegate + /*package*/ static TypedArray obtainStyledAttributes( + Resources thisResources, Theme thisTheme, + AttributeSet set, int[] attrs, int defStyleAttr, int defStyleRes) { + return RenderSessionImpl.getCurrentContext().obtainStyledAttributes( + set, attrs, defStyleAttr, defStyleRes); + } + + @LayoutlibDelegate + /*package*/ static boolean resolveAttribute( + Resources thisResources, Theme thisTheme, + int resid, TypedValue outValue, + boolean resolveRefs) { + return RenderSessionImpl.getCurrentContext().resolveThemeAttribute( + resid, outValue, resolveRefs); + } +} diff --git a/tools/layoutlib/bridge/src/android/content/res/TypedArray_Delegate.java b/tools/layoutlib/bridge/src/android/content/res/TypedArray_Delegate.java new file mode 100644 index 0000000000000..0a7899a09beb6 --- /dev/null +++ b/tools/layoutlib/bridge/src/android/content/res/TypedArray_Delegate.java @@ -0,0 +1,30 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.content.res; + +import com.android.tools.layoutlib.annotations.LayoutlibDelegate; + +import android.util.TypedValue; + +public class TypedArray_Delegate { + + @LayoutlibDelegate + public static boolean getValueAt(TypedArray theTypedArray, int index, TypedValue outValue) { + // pass + return false; + } +} diff --git a/tools/layoutlib/bridge/src/android/graphics/AvoidXfermode_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/AvoidXfermode_Delegate.java new file mode 100644 index 0000000000000..a50a2bd039f56 --- /dev/null +++ b/tools/layoutlib/bridge/src/android/graphics/AvoidXfermode_Delegate.java @@ -0,0 +1,70 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.graphics; + +import com.android.layoutlib.bridge.impl.DelegateManager; +import com.android.tools.layoutlib.annotations.LayoutlibDelegate; + +import java.awt.Composite; + +/** + * Delegate implementing the native methods of android.graphics.AvoidXfermode + * + * Through the layoutlib_create tool, the original native methods of AvoidXfermode have been + * replaced by calls to methods of the same name in this delegate class. + * + * This class behaves like the original native implementation, but in Java, keeping previously + * native data into its own objects and mapping them to int that are sent back and forth between + * it and the original AvoidXfermode class. + * + * Because this extends {@link Xfermode_Delegate}, there's no need to use a + * {@link DelegateManager}, as all the PathEffect classes will be added to the manager owned by + * {@link Xfermode_Delegate}. + * + */ +public class AvoidXfermode_Delegate extends Xfermode_Delegate { + + // ---- delegate data ---- + + // ---- Public Helper methods ---- + + @Override + public Composite getComposite(int alpha) { + // FIXME + return null; + } + + @Override + public boolean isSupported() { + return false; + } + + @Override + public String getSupportMessage() { + return "Avoid Xfermodes are not supported in Layout Preview mode."; + } + + // ---- native methods ---- + + @LayoutlibDelegate + /*package*/ static int nativeCreate(int opColor, int tolerance, int nativeMode) { + AvoidXfermode_Delegate newDelegate = new AvoidXfermode_Delegate(); + return sManager.addNewDelegate(newDelegate); + } + + // ---- Private delegate/helper methods ---- +} diff --git a/tools/layoutlib/bridge/src/android/graphics/BitmapFactory_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/BitmapFactory_Delegate.java new file mode 100644 index 0000000000000..5256b583f8d3e --- /dev/null +++ b/tools/layoutlib/bridge/src/android/graphics/BitmapFactory_Delegate.java @@ -0,0 +1,177 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.graphics; + +import com.android.layoutlib.bridge.Bridge; +import com.android.layoutlib.bridge.impl.DelegateManager; +import com.android.ninepatch.NinePatchChunk; +import com.android.resources.Density; +import com.android.tools.layoutlib.annotations.LayoutlibDelegate; + +import android.content.res.BridgeResources.NinePatchInputStream; +import android.graphics.BitmapFactory.Options; + +import java.io.FileDescriptor; +import java.io.IOException; +import java.io.InputStream; + +/** + * Delegate implementing the native methods of android.graphics.BitmapFactory + * + * Through the layoutlib_create tool, the original native methods of BitmapFactory have been + * replaced by calls to methods of the same name in this delegate class. + * + * Because it's a stateless class to start with, there's no need to keep a {@link DelegateManager} + * around to map int to instance of the delegate. + * + */ +/*package*/ class BitmapFactory_Delegate { + + // ------ Java delegates ------ + + @LayoutlibDelegate + /*package*/ static Bitmap finishDecode(Bitmap bm, Rect outPadding, Options opts) { + if (bm == null || opts == null) { + return bm; + } + + final int density = opts.inDensity; + if (density == 0) { + return bm; + } + + bm.setDensity(density); + final int targetDensity = opts.inTargetDensity; + if (targetDensity == 0 || density == targetDensity || density == opts.inScreenDensity) { + return bm; + } + + byte[] np = bm.getNinePatchChunk(); + final boolean isNinePatch = np != null && NinePatch.isNinePatchChunk(np); + // DELEGATE CHANGE: never scale 9-patch + if (opts.inScaled && isNinePatch == false) { + float scale = targetDensity / (float)density; + // TODO: This is very inefficient and should be done in native by Skia + final Bitmap oldBitmap = bm; + bm = Bitmap.createScaledBitmap(oldBitmap, (int) (bm.getWidth() * scale + 0.5f), + (int) (bm.getHeight() * scale + 0.5f), true); + oldBitmap.recycle(); + + if (isNinePatch) { + np = nativeScaleNinePatch(np, scale, outPadding); + bm.setNinePatchChunk(np); + } + bm.setDensity(targetDensity); + } + + return bm; + } + + + // ------ Native Delegates ------ + + @LayoutlibDelegate + /*package*/ static Bitmap nativeDecodeStream(InputStream is, byte[] storage, + Rect padding, Options opts) { + return nativeDecodeStream(is, storage, padding, opts, false, 1.f); + } + + @LayoutlibDelegate + /*package*/ static Bitmap nativeDecodeStream(InputStream is, byte[] storage, + Rect padding, Options opts, boolean applyScale, float scale) { + Bitmap bm = null; + + //TODO support rescaling + + Density density = Density.MEDIUM; + if (opts != null) { + density = Density.getEnum(opts.inDensity); + } + + try { + if (is instanceof NinePatchInputStream) { + NinePatchInputStream npis = (NinePatchInputStream) is; + npis.disableFakeMarkSupport(); + + // load the bitmap as a nine patch + com.android.ninepatch.NinePatch ninePatch = com.android.ninepatch.NinePatch.load( + npis, true /*is9Patch*/, false /*convert*/); + + // get the bitmap and chunk objects. + bm = Bitmap_Delegate.createBitmap(ninePatch.getImage(), true /*isMutable*/, + density); + NinePatchChunk chunk = ninePatch.getChunk(); + + // put the chunk in the bitmap + bm.setNinePatchChunk(NinePatch_Delegate.serialize(chunk)); + + // read the padding + int[] paddingarray = chunk.getPadding(); + padding.left = paddingarray[0]; + padding.top = paddingarray[1]; + padding.right = paddingarray[2]; + padding.bottom = paddingarray[3]; + } else { + // load the bitmap directly. + bm = Bitmap_Delegate.createBitmap(is, true, density); + } + } catch (IOException e) { + Bridge.getLog().error(null,"Failed to load image" , e, null); + } + + return bm; + } + + @LayoutlibDelegate + /*package*/ static Bitmap nativeDecodeFileDescriptor(FileDescriptor fd, + Rect padding, Options opts) { + opts.inBitmap = null; + return null; + } + + @LayoutlibDelegate + /*package*/ static Bitmap nativeDecodeAsset(int asset, Rect padding, Options opts) { + opts.inBitmap = null; + return null; + } + + @LayoutlibDelegate + /*package*/ static Bitmap nativeDecodeAsset(int asset, Rect padding, Options opts, + boolean applyScale, float scale) { + opts.inBitmap = null; + return null; + } + + @LayoutlibDelegate + /*package*/ static Bitmap nativeDecodeByteArray(byte[] data, int offset, + int length, Options opts) { + opts.inBitmap = null; + return null; + } + + @LayoutlibDelegate + /*package*/ static byte[] nativeScaleNinePatch(byte[] chunk, float scale, Rect pad) { + // don't scale for now. This should not be called anyway since we re-implement + // BitmapFactory.finishDecode(); + return chunk; + } + + @LayoutlibDelegate + /*package*/ static boolean nativeIsSeekable(FileDescriptor fd) { + return true; + } +} diff --git a/tools/layoutlib/bridge/src/android/graphics/BitmapShader_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/BitmapShader_Delegate.java new file mode 100644 index 0000000000000..65a75b0ab25dd --- /dev/null +++ b/tools/layoutlib/bridge/src/android/graphics/BitmapShader_Delegate.java @@ -0,0 +1,252 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.graphics; + +import com.android.ide.common.rendering.api.LayoutLog; +import com.android.layoutlib.bridge.Bridge; +import com.android.layoutlib.bridge.impl.DelegateManager; +import com.android.tools.layoutlib.annotations.LayoutlibDelegate; + +import android.graphics.Shader.TileMode; + +/** + * Delegate implementing the native methods of android.graphics.BitmapShader + * + * Through the layoutlib_create tool, the original native methods of BitmapShader have been + * replaced by calls to methods of the same name in this delegate class. + * + * This class behaves like the original native implementation, but in Java, keeping previously + * native data into its own objects and mapping them to int that are sent back and forth between + * it and the original BitmapShader class. + * + * Because this extends {@link Shader_Delegate}, there's no need to use a {@link DelegateManager}, + * as all the Shader classes will be added to the manager owned by {@link Shader_Delegate}. + * + * @see Shader_Delegate + * + */ +public class BitmapShader_Delegate extends Shader_Delegate { + + // ---- delegate data ---- + private java.awt.Paint mJavaPaint; + + // ---- Public Helper methods ---- + + @Override + public java.awt.Paint getJavaPaint() { + return mJavaPaint; + } + + @Override + public boolean isSupported() { + return true; + } + + @Override + public String getSupportMessage() { + // no message since isSupported returns true; + return null; + } + + // ---- native methods ---- + + @LayoutlibDelegate + /*package*/ static int nativeCreate(int native_bitmap, int shaderTileModeX, + int shaderTileModeY) { + Bitmap_Delegate bitmap = Bitmap_Delegate.getDelegate(native_bitmap); + if (bitmap == null) { + return 0; + } + + BitmapShader_Delegate newDelegate = new BitmapShader_Delegate( + bitmap.getImage(), + Shader_Delegate.getTileMode(shaderTileModeX), + Shader_Delegate.getTileMode(shaderTileModeY)); + return sManager.addNewDelegate(newDelegate); + } + + @LayoutlibDelegate + /*package*/ static int nativePostCreate(int native_shader, int native_bitmap, + int shaderTileModeX, int shaderTileModeY) { + // pass, not needed. + return 0; + } + + // ---- Private delegate/helper methods ---- + + private BitmapShader_Delegate(java.awt.image.BufferedImage image, + TileMode tileModeX, TileMode tileModeY) { + mJavaPaint = new BitmapShaderPaint(image, tileModeX, tileModeY); + } + + private class BitmapShaderPaint implements java.awt.Paint { + private final java.awt.image.BufferedImage mImage; + private final TileMode mTileModeX; + private final TileMode mTileModeY; + + BitmapShaderPaint(java.awt.image.BufferedImage image, + TileMode tileModeX, TileMode tileModeY) { + mImage = image; + mTileModeX = tileModeX; + mTileModeY = tileModeY; + } + + @Override + public java.awt.PaintContext createContext( + java.awt.image.ColorModel colorModel, + java.awt.Rectangle deviceBounds, + java.awt.geom.Rectangle2D userBounds, + java.awt.geom.AffineTransform xform, + java.awt.RenderingHints hints) { + + java.awt.geom.AffineTransform canvasMatrix; + try { + canvasMatrix = xform.createInverse(); + } catch (java.awt.geom.NoninvertibleTransformException e) { + Bridge.getLog().fidelityWarning(LayoutLog.TAG_MATRIX_INVERSE, + "Unable to inverse matrix in BitmapShader", e, null /*data*/); + canvasMatrix = new java.awt.geom.AffineTransform(); + } + + java.awt.geom.AffineTransform localMatrix = getLocalMatrix(); + try { + localMatrix = localMatrix.createInverse(); + } catch (java.awt.geom.NoninvertibleTransformException e) { + Bridge.getLog().fidelityWarning(LayoutLog.TAG_MATRIX_INVERSE, + "Unable to inverse matrix in BitmapShader", e, null /*data*/); + localMatrix = new java.awt.geom.AffineTransform(); + } + + return new BitmapShaderContext(canvasMatrix, localMatrix, colorModel); + } + + private class BitmapShaderContext implements java.awt.PaintContext { + + private final java.awt.geom.AffineTransform mCanvasMatrix; + private final java.awt.geom.AffineTransform mLocalMatrix; + private final java.awt.image.ColorModel mColorModel; + + public BitmapShaderContext( + java.awt.geom.AffineTransform canvasMatrix, + java.awt.geom.AffineTransform localMatrix, + java.awt.image.ColorModel colorModel) { + mCanvasMatrix = canvasMatrix; + mLocalMatrix = localMatrix; + mColorModel = colorModel; + } + + @Override + public void dispose() { + } + + @Override + public java.awt.image.ColorModel getColorModel() { + return mColorModel; + } + + @Override + public java.awt.image.Raster getRaster(int x, int y, int w, int h) { + java.awt.image.BufferedImage image = new java.awt.image.BufferedImage(w, h, + java.awt.image.BufferedImage.TYPE_INT_ARGB); + + int[] data = new int[w*h]; + + int index = 0; + float[] pt1 = new float[2]; + float[] pt2 = new float[2]; + for (int iy = 0 ; iy < h ; iy++) { + for (int ix = 0 ; ix < w ; ix++) { + // handle the canvas transform + pt1[0] = x + ix; + pt1[1] = y + iy; + mCanvasMatrix.transform(pt1, 0, pt2, 0, 1); + + // handle the local matrix. + pt1[0] = pt2[0]; + pt1[1] = pt2[1]; + mLocalMatrix.transform(pt1, 0, pt2, 0, 1); + + data[index++] = getColor(pt2[0], pt2[1]); + } + } + + image.setRGB(0 /*startX*/, 0 /*startY*/, w, h, data, 0 /*offset*/, w /*scansize*/); + + return image.getRaster(); + } + } + + /** + * Returns a color for an arbitrary point. + */ + private int getColor(float fx, float fy) { + int x = getCoordinate(Math.round(fx), mImage.getWidth(), mTileModeX); + int y = getCoordinate(Math.round(fy), mImage.getHeight(), mTileModeY); + + return mImage.getRGB(x, y); + } + + private int getCoordinate(int i, int size, TileMode mode) { + if (i < 0) { + switch (mode) { + case CLAMP: + i = 0; + break; + case REPEAT: + i = size - 1 - (-i % size); + break; + case MIRROR: + // this is the same as the positive side, just make the value positive + // first. + i = -i; + int count = i / size; + i = i % size; + + if ((count % 2) == 1) { + i = size - 1 - i; + } + break; + } + } else if (i >= size) { + switch (mode) { + case CLAMP: + i = size - 1; + break; + case REPEAT: + i = i % size; + break; + case MIRROR: + int count = i / size; + i = i % size; + + if ((count % 2) == 1) { + i = size - 1 - i; + } + break; + } + } + + return i; + } + + + @Override + public int getTransparency() { + return java.awt.Paint.TRANSLUCENT; + } + } +} diff --git a/tools/layoutlib/bridge/src/android/graphics/Bitmap_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/Bitmap_Delegate.java new file mode 100644 index 0000000000000..4121f798ba9a0 --- /dev/null +++ b/tools/layoutlib/bridge/src/android/graphics/Bitmap_Delegate.java @@ -0,0 +1,592 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.graphics; + +import com.android.ide.common.rendering.api.LayoutLog; +import com.android.layoutlib.bridge.Bridge; +import com.android.layoutlib.bridge.impl.DelegateManager; +import com.android.resources.Density; +import com.android.tools.layoutlib.annotations.LayoutlibDelegate; + +import android.graphics.Bitmap.Config; +import android.os.Parcel; + +import java.awt.Graphics2D; +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.nio.Buffer; +import java.util.Arrays; + +import javax.imageio.ImageIO; + +/** + * Delegate implementing the native methods of android.graphics.Bitmap + * + * Through the layoutlib_create tool, the original native methods of Bitmap have been replaced + * by calls to methods of the same name in this delegate class. + * + * This class behaves like the original native implementation, but in Java, keeping previously + * native data into its own objects and mapping them to int that are sent back and forth between + * it and the original Bitmap class. + * + * @see DelegateManager + * + */ +public final class Bitmap_Delegate { + + // ---- delegate manager ---- + private static final DelegateManager sManager = + new DelegateManager(Bitmap_Delegate.class); + + // ---- delegate helper data ---- + + // ---- delegate data ---- + private final Config mConfig; + private BufferedImage mImage; + private boolean mHasAlpha = true; + private boolean mHasMipMap = false; // TODO: check the default. + private int mGenerationId = 0; + + + // ---- Public Helper methods ---- + + /** + * Returns the native delegate associated to a given {@link Bitmap_Delegate} object. + */ + public static Bitmap_Delegate getDelegate(Bitmap bitmap) { + return sManager.getDelegate(bitmap.mNativeBitmap); + } + + /** + * Returns the native delegate associated to a given an int referencing a {@link Bitmap} object. + */ + public static Bitmap_Delegate getDelegate(int native_bitmap) { + return sManager.getDelegate(native_bitmap); + } + + /** + * Creates and returns a {@link Bitmap} initialized with the given file content. + * + * @param input the file from which to read the bitmap content + * @param isMutable whether the bitmap is mutable + * @param density the density associated with the bitmap + * + * @see Bitmap#isMutable() + * @see Bitmap#getDensity() + */ + public static Bitmap createBitmap(File input, boolean isMutable, Density density) + throws IOException { + // create a delegate with the content of the file. + Bitmap_Delegate delegate = new Bitmap_Delegate(ImageIO.read(input), Config.ARGB_8888); + + return createBitmap(delegate, isMutable, density.getDpiValue()); + } + + /** + * Creates and returns a {@link Bitmap} initialized with the given stream content. + * + * @param input the stream from which to read the bitmap content + * @param isMutable whether the bitmap is mutable + * @param density the density associated with the bitmap + * + * @see Bitmap#isMutable() + * @see Bitmap#getDensity() + */ + public static Bitmap createBitmap(InputStream input, boolean isMutable, Density density) + throws IOException { + // create a delegate with the content of the stream. + Bitmap_Delegate delegate = new Bitmap_Delegate(ImageIO.read(input), Config.ARGB_8888); + + return createBitmap(delegate, isMutable, density.getDpiValue()); + } + + /** + * Creates and returns a {@link Bitmap} initialized with the given {@link BufferedImage} + * + * @param image the bitmap content + * @param isMutable whether the bitmap is mutable + * @param density the density associated with the bitmap + * + * @see Bitmap#isMutable() + * @see Bitmap#getDensity() + */ + public static Bitmap createBitmap(BufferedImage image, boolean isMutable, + Density density) throws IOException { + // create a delegate with the given image. + Bitmap_Delegate delegate = new Bitmap_Delegate(image, Config.ARGB_8888); + + return createBitmap(delegate, isMutable, density.getDpiValue()); + } + + /** + * Returns the {@link BufferedImage} used by the delegate of the given {@link Bitmap}. + */ + public static BufferedImage getImage(Bitmap bitmap) { + // get the delegate from the native int. + Bitmap_Delegate delegate = sManager.getDelegate(bitmap.mNativeBitmap); + if (delegate == null) { + return null; + } + + return delegate.mImage; + } + + public static int getBufferedImageType(int nativeBitmapConfig) { + switch (Config.nativeToConfig(nativeBitmapConfig)) { + case ALPHA_8: + return BufferedImage.TYPE_INT_ARGB; + case RGB_565: + return BufferedImage.TYPE_INT_ARGB; + case ARGB_4444: + return BufferedImage.TYPE_INT_ARGB; + case ARGB_8888: + return BufferedImage.TYPE_INT_ARGB; + } + + return BufferedImage.TYPE_INT_ARGB; + } + + /** + * Returns the {@link BufferedImage} used by the delegate of the given {@link Bitmap}. + */ + public BufferedImage getImage() { + return mImage; + } + + /** + * Returns the Android bitmap config. Note that this not the config of the underlying + * Java2D bitmap. + */ + public Config getConfig() { + return mConfig; + } + + /** + * Returns the hasAlpha rendering hint + * @return true if the bitmap alpha should be used at render time + */ + public boolean hasAlpha() { + return mHasAlpha && mConfig != Config.RGB_565; + } + + public boolean hasMipMap() { + // TODO: check if more checks are required as in hasAlpha. + return mHasMipMap; + } + /** + * Update the generationId. + * + * @see Bitmap#getGenerationId() + */ + public void change() { + mGenerationId++; + } + + // ---- native methods ---- + + @LayoutlibDelegate + /*package*/ static Bitmap nativeCreate(int[] colors, int offset, int stride, int width, + int height, int nativeConfig, boolean mutable) { + int imageType = getBufferedImageType(nativeConfig); + + // create the image + BufferedImage image = new BufferedImage(width, height, imageType); + + if (colors != null) { + image.setRGB(0, 0, width, height, colors, offset, stride); + } + + // create a delegate with the content of the stream. + Bitmap_Delegate delegate = new Bitmap_Delegate(image, Config.nativeToConfig(nativeConfig)); + + return createBitmap(delegate, mutable, Bitmap.getDefaultDensity()); + } + + @LayoutlibDelegate + /*package*/ static Bitmap nativeCopy(int srcBitmap, int nativeConfig, boolean isMutable) { + Bitmap_Delegate srcBmpDelegate = sManager.getDelegate(srcBitmap); + if (srcBmpDelegate == null) { + return null; + } + + BufferedImage srcImage = srcBmpDelegate.getImage(); + + int width = srcImage.getWidth(); + int height = srcImage.getHeight(); + + int imageType = getBufferedImageType(nativeConfig); + + // create the image + BufferedImage image = new BufferedImage(width, height, imageType); + + // copy the source image into the image. + int[] argb = new int[width * height]; + srcImage.getRGB(0, 0, width, height, argb, 0, width); + image.setRGB(0, 0, width, height, argb, 0, width); + + // create a delegate with the content of the stream. + Bitmap_Delegate delegate = new Bitmap_Delegate(image, Config.nativeToConfig(nativeConfig)); + + return createBitmap(delegate, isMutable, Bitmap.getDefaultDensity()); + } + + @LayoutlibDelegate + /*package*/ static void nativeDestructor(int nativeBitmap) { + sManager.removeJavaReferenceFor(nativeBitmap); + } + + @LayoutlibDelegate + /*package*/ static void nativeRecycle(int nativeBitmap) { + sManager.removeJavaReferenceFor(nativeBitmap); + } + + @LayoutlibDelegate + /*package*/ static boolean nativeCompress(int nativeBitmap, int format, int quality, + OutputStream stream, byte[] tempStorage) { + Bridge.getLog().error(LayoutLog.TAG_UNSUPPORTED, + "Bitmap.compress() is not supported", null /*data*/); + return true; + } + + @LayoutlibDelegate + /*package*/ static void nativeErase(int nativeBitmap, int color) { + // get the delegate from the native int. + Bitmap_Delegate delegate = sManager.getDelegate(nativeBitmap); + if (delegate == null) { + return; + } + + BufferedImage image = delegate.mImage; + + Graphics2D g = image.createGraphics(); + try { + g.setColor(new java.awt.Color(color, true)); + + g.fillRect(0, 0, image.getWidth(), image.getHeight()); + } finally { + g.dispose(); + } + } + + @LayoutlibDelegate + /*package*/ static int nativeWidth(int nativeBitmap) { + // get the delegate from the native int. + Bitmap_Delegate delegate = sManager.getDelegate(nativeBitmap); + if (delegate == null) { + return 0; + } + + return delegate.mImage.getWidth(); + } + + @LayoutlibDelegate + /*package*/ static int nativeHeight(int nativeBitmap) { + // get the delegate from the native int. + Bitmap_Delegate delegate = sManager.getDelegate(nativeBitmap); + if (delegate == null) { + return 0; + } + + return delegate.mImage.getHeight(); + } + + @LayoutlibDelegate + /*package*/ static int nativeRowBytes(int nativeBitmap) { + // get the delegate from the native int. + Bitmap_Delegate delegate = sManager.getDelegate(nativeBitmap); + if (delegate == null) { + return 0; + } + + return delegate.mImage.getWidth(); + } + + @LayoutlibDelegate + /*package*/ static int nativeConfig(int nativeBitmap) { + // get the delegate from the native int. + Bitmap_Delegate delegate = sManager.getDelegate(nativeBitmap); + if (delegate == null) { + return 0; + } + + return delegate.mConfig.nativeInt; + } + + @LayoutlibDelegate + /*package*/ static boolean nativeHasAlpha(int nativeBitmap) { + // get the delegate from the native int. + Bitmap_Delegate delegate = sManager.getDelegate(nativeBitmap); + if (delegate == null) { + return true; + } + + return delegate.mHasAlpha; + } + + @LayoutlibDelegate + /*package*/ static boolean nativeHasMipMap(int nativeBitmap) { + // get the delegate from the native int. + Bitmap_Delegate delegate = sManager.getDelegate(nativeBitmap); + if (delegate == null) { + return true; + } + + return delegate.mHasMipMap; + } + + @LayoutlibDelegate + /*package*/ static int nativeGetPixel(int nativeBitmap, int x, int y) { + // get the delegate from the native int. + Bitmap_Delegate delegate = sManager.getDelegate(nativeBitmap); + if (delegate == null) { + return 0; + } + + return delegate.mImage.getRGB(x, y); + } + + @LayoutlibDelegate + /*package*/ static void nativeGetPixels(int nativeBitmap, int[] pixels, int offset, + int stride, int x, int y, int width, int height) { + Bitmap_Delegate delegate = sManager.getDelegate(nativeBitmap); + if (delegate == null) { + return; + } + + delegate.getImage().getRGB(x, y, width, height, pixels, offset, stride); + } + + + @LayoutlibDelegate + /*package*/ static void nativeSetPixel(int nativeBitmap, int x, int y, int color) { + Bitmap_Delegate delegate = sManager.getDelegate(nativeBitmap); + if (delegate == null) { + return; + } + + delegate.getImage().setRGB(x, y, color); + } + + @LayoutlibDelegate + /*package*/ static void nativeSetPixels(int nativeBitmap, int[] colors, int offset, + int stride, int x, int y, int width, int height) { + Bitmap_Delegate delegate = sManager.getDelegate(nativeBitmap); + if (delegate == null) { + return; + } + + delegate.getImage().setRGB(x, y, width, height, colors, offset, stride); + } + + @LayoutlibDelegate + /*package*/ static void nativeCopyPixelsToBuffer(int nativeBitmap, Buffer dst) { + // FIXME implement native delegate + Bridge.getLog().fidelityWarning(LayoutLog.TAG_UNSUPPORTED, + "Bitmap.copyPixelsToBuffer is not supported.", null, null /*data*/); + } + + @LayoutlibDelegate + /*package*/ static void nativeCopyPixelsFromBuffer(int nb, Buffer src) { + // FIXME implement native delegate + Bridge.getLog().fidelityWarning(LayoutLog.TAG_UNSUPPORTED, + "Bitmap.copyPixelsFromBuffer is not supported.", null, null /*data*/); + } + + @LayoutlibDelegate + /*package*/ static int nativeGenerationId(int nativeBitmap) { + Bitmap_Delegate delegate = sManager.getDelegate(nativeBitmap); + if (delegate == null) { + return 0; + } + + return delegate.mGenerationId; + } + + @LayoutlibDelegate + /*package*/ static Bitmap nativeCreateFromParcel(Parcel p) { + // This is only called by Bitmap.CREATOR (Parcelable.Creator), which is only + // used during aidl call so really this should not be called. + Bridge.getLog().error(LayoutLog.TAG_UNSUPPORTED, + "AIDL is not suppored, and therefore Bitmaps cannot be created from parcels.", + null /*data*/); + return null; + } + + @LayoutlibDelegate + /*package*/ static boolean nativeWriteToParcel(int nativeBitmap, boolean isMutable, + int density, Parcel p) { + // This is only called when sending a bitmap through aidl, so really this should not + // be called. + Bridge.getLog().error(LayoutLog.TAG_UNSUPPORTED, + "AIDL is not suppored, and therefore Bitmaps cannot be written to parcels.", + null /*data*/); + return false; + } + + @LayoutlibDelegate + /*package*/ static Bitmap nativeExtractAlpha(int nativeBitmap, int nativePaint, + int[] offsetXY) { + Bitmap_Delegate bitmap = sManager.getDelegate(nativeBitmap); + if (bitmap == null) { + return null; + } + + // get the paint which can be null if nativePaint is 0. + Paint_Delegate paint = Paint_Delegate.getDelegate(nativePaint); + + if (paint != null && paint.getMaskFilter() != null) { + Bridge.getLog().fidelityWarning(LayoutLog.TAG_MASKFILTER, + "MaskFilter not supported in Bitmap.extractAlpha", + null, null /*data*/); + } + + int alpha = paint != null ? paint.getAlpha() : 0xFF; + BufferedImage image = createCopy(bitmap.getImage(), BufferedImage.TYPE_INT_ARGB, alpha); + + // create the delegate. The actual Bitmap config is only an alpha channel + Bitmap_Delegate delegate = new Bitmap_Delegate(image, Config.ALPHA_8); + + // the density doesn't matter, it's set by the Java method. + return createBitmap(delegate, false /*isMutable*/, + Density.DEFAULT_DENSITY /*density*/); + } + + @LayoutlibDelegate + /*package*/ static void nativePrepareToDraw(int nativeBitmap) { + // nothing to be done here. + } + + @LayoutlibDelegate + /*package*/ static void nativeSetHasAlpha(int nativeBitmap, boolean hasAlpha) { + // get the delegate from the native int. + Bitmap_Delegate delegate = sManager.getDelegate(nativeBitmap); + if (delegate == null) { + return; + } + + delegate.mHasAlpha = hasAlpha; + } + + @LayoutlibDelegate + /*package*/ static void nativeSetHasMipMap(int nativeBitmap, boolean hasMipMap) { + // get the delegate from the native int. + Bitmap_Delegate delegate = sManager.getDelegate(nativeBitmap); + if (delegate == null) { + return; + } + + delegate.mHasMipMap = hasMipMap; + } + + @LayoutlibDelegate + /*package*/ static boolean nativeSameAs(int nb0, int nb1) { + Bitmap_Delegate delegate1 = sManager.getDelegate(nb0); + if (delegate1 == null) { + return false; + } + + Bitmap_Delegate delegate2 = sManager.getDelegate(nb1); + if (delegate2 == null) { + return false; + } + + BufferedImage image1 = delegate1.getImage(); + BufferedImage image2 = delegate2.getImage(); + if (delegate1.mConfig != delegate2.mConfig || + image1.getWidth() != image2.getWidth() || + image1.getHeight() != image2.getHeight()) { + return false; + } + + // get the internal data + int w = image1.getWidth(); + int h = image2.getHeight(); + int[] argb1 = new int[w*h]; + int[] argb2 = new int[w*h]; + + image1.getRGB(0, 0, w, h, argb1, 0, w); + image2.getRGB(0, 0, w, h, argb2, 0, w); + + // compares + if (delegate1.mConfig == Config.ALPHA_8) { + // in this case we have to manually compare the alpha channel as the rest is garbage. + final int length = w*h; + for (int i = 0 ; i < length ; i++) { + if ((argb1[i] & 0xFF000000) != (argb2[i] & 0xFF000000)) { + return false; + } + } + return true; + } + + return Arrays.equals(argb1, argb2); + } + + // ---- Private delegate/helper methods ---- + + private Bitmap_Delegate(BufferedImage image, Config config) { + mImage = image; + mConfig = config; + } + + private static Bitmap createBitmap(Bitmap_Delegate delegate, boolean isMutable, int density) { + // get its native_int + int nativeInt = sManager.addNewDelegate(delegate); + + // and create/return a new Bitmap with it + // TODO: pass correct width, height, isPremultiplied + return new Bitmap(nativeInt, null /* buffer */, -1 /* width */, -1 /* height */, density, + isMutable, true /* isPremultiplied */, + null /*ninePatchChunk*/, null /* layoutBounds */); + } + + /** + * Creates and returns a copy of a given BufferedImage. + *

+ * if alpha is different than 255, then it is applied to the alpha channel of each pixel. + * + * @param image the image to copy + * @param imageType the type of the new image + * @param alpha an optional alpha modifier + * @return a new BufferedImage + */ + /*package*/ static BufferedImage createCopy(BufferedImage image, int imageType, int alpha) { + int w = image.getWidth(); + int h = image.getHeight(); + + BufferedImage result = new BufferedImage(w, h, imageType); + + int[] argb = new int[w * h]; + image.getRGB(0, 0, image.getWidth(), image.getHeight(), argb, 0, image.getWidth()); + + if (alpha != 255) { + final int length = argb.length; + for (int i = 0 ; i < length; i++) { + int a = (argb[i] >>> 24 * alpha) / 255; + argb[i] = (a << 24) | (argb[i] & 0x00FFFFFF); + } + } + + result.setRGB(0, 0, w, h, argb, 0, w); + + return result; + } + +} diff --git a/tools/layoutlib/bridge/src/android/graphics/BlurMaskFilter_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/BlurMaskFilter_Delegate.java new file mode 100644 index 0000000000000..4becba130127e --- /dev/null +++ b/tools/layoutlib/bridge/src/android/graphics/BlurMaskFilter_Delegate.java @@ -0,0 +1,64 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.graphics; + +import com.android.layoutlib.bridge.impl.DelegateManager; +import com.android.tools.layoutlib.annotations.LayoutlibDelegate; + +/** + * Delegate implementing the native methods of android.graphics.BlurMaskFilter + * + * Through the layoutlib_create tool, the original native methods of BlurMaskFilter have + * been replaced by calls to methods of the same name in this delegate class. + * + * This class behaves like the original native implementation, but in Java, keeping previously + * native data into its own objects and mapping them to int that are sent back and forth between + * it and the original BlurMaskFilter class. + * + * Because this extends {@link MaskFilter_Delegate}, there's no need to use a + * {@link DelegateManager}, as all the Shader classes will be added to the manager + * owned by {@link MaskFilter_Delegate}. + * + * @see MaskFilter_Delegate + * + */ +public class BlurMaskFilter_Delegate extends MaskFilter_Delegate { + + // ---- delegate data ---- + + // ---- Public Helper methods ---- + + @Override + public boolean isSupported() { + return false; + } + + @Override + public String getSupportMessage() { + return "Blur Mask Filters are not supported."; + } + + // ---- native methods ---- + + @LayoutlibDelegate + /*package*/ static int nativeConstructor(float radius, int style) { + BlurMaskFilter_Delegate newDelegate = new BlurMaskFilter_Delegate(); + return sManager.addNewDelegate(newDelegate); + } + + // ---- Private delegate/helper methods ---- +} diff --git a/tools/layoutlib/bridge/src/android/graphics/Canvas_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/Canvas_Delegate.java new file mode 100644 index 0000000000000..361f5d7a8bef6 --- /dev/null +++ b/tools/layoutlib/bridge/src/android/graphics/Canvas_Delegate.java @@ -0,0 +1,1362 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.graphics; + +import com.android.ide.common.rendering.api.LayoutLog; +import com.android.layoutlib.bridge.Bridge; +import com.android.layoutlib.bridge.impl.DelegateManager; +import com.android.layoutlib.bridge.impl.GcSnapshot; +import com.android.tools.layoutlib.annotations.LayoutlibDelegate; + +import android.graphics.Bitmap.Config; +import android.graphics.Paint_Delegate.FontInfo; +import android.text.TextUtils; + +import java.awt.Color; +import java.awt.Composite; +import java.awt.Graphics2D; +import java.awt.Rectangle; +import java.awt.RenderingHints; +import java.awt.Shape; +import java.awt.geom.AffineTransform; +import java.awt.geom.Arc2D; +import java.awt.image.BufferedImage; +import java.util.List; + + +/** + * Delegate implementing the native methods of android.graphics.Canvas + * + * Through the layoutlib_create tool, the original native methods of Canvas have been replaced + * by calls to methods of the same name in this delegate class. + * + * This class behaves like the original native implementation, but in Java, keeping previously + * native data into its own objects and mapping them to int that are sent back and forth between + * it and the original Canvas class. + * + * @see DelegateManager + * + */ +public final class Canvas_Delegate { + + // ---- delegate manager ---- + private static final DelegateManager sManager = + new DelegateManager(Canvas_Delegate.class); + + // ---- delegate helper data ---- + + private final static boolean[] sBoolOut = new boolean[1]; + + // ---- delegate data ---- + private Bitmap_Delegate mBitmap; + private GcSnapshot mSnapshot; + + private DrawFilter_Delegate mDrawFilter = null; + + // ---- Public Helper methods ---- + + /** + * Returns the native delegate associated to a given {@link Canvas} object. + */ + public static Canvas_Delegate getDelegate(Canvas canvas) { + return sManager.getDelegate(canvas.mNativeCanvas); + } + + /** + * Returns the native delegate associated to a given an int referencing a {@link Canvas} object. + */ + public static Canvas_Delegate getDelegate(int native_canvas) { + return sManager.getDelegate(native_canvas); + } + + /** + * Returns the current {@link Graphics2D} used to draw. + */ + public GcSnapshot getSnapshot() { + return mSnapshot; + } + + /** + * Returns the {@link DrawFilter} delegate or null if none have been set. + * + * @return the delegate or null. + */ + public DrawFilter_Delegate getDrawFilter() { + return mDrawFilter; + } + + // ---- native methods ---- + + @LayoutlibDelegate + /*package*/ static boolean isOpaque(Canvas thisCanvas) { + // get the delegate from the native int. + Canvas_Delegate canvasDelegate = sManager.getDelegate(thisCanvas.mNativeCanvas); + if (canvasDelegate == null) { + return false; + } + + return canvasDelegate.mBitmap.getConfig() == Config.RGB_565; + } + + @LayoutlibDelegate + /*package*/ static int getWidth(Canvas thisCanvas) { + // get the delegate from the native int. + Canvas_Delegate canvasDelegate = sManager.getDelegate(thisCanvas.mNativeCanvas); + if (canvasDelegate == null) { + return 0; + } + + return canvasDelegate.mBitmap.getImage().getWidth(); + } + + @LayoutlibDelegate + /*package*/ static int getHeight(Canvas thisCanvas) { + // get the delegate from the native int. + Canvas_Delegate canvasDelegate = sManager.getDelegate(thisCanvas.mNativeCanvas); + if (canvasDelegate == null) { + return 0; + } + + return canvasDelegate.mBitmap.getImage().getHeight(); + } + + @LayoutlibDelegate + /*package*/ static void translate(Canvas thisCanvas, float dx, float dy) { + // get the delegate from the native int. + Canvas_Delegate canvasDelegate = sManager.getDelegate(thisCanvas.mNativeCanvas); + if (canvasDelegate == null) { + return; + } + + canvasDelegate.getSnapshot().translate(dx, dy); + } + + @LayoutlibDelegate + /*package*/ static void rotate(Canvas thisCanvas, float degrees) { + // get the delegate from the native int. + Canvas_Delegate canvasDelegate = sManager.getDelegate(thisCanvas.mNativeCanvas); + if (canvasDelegate == null) { + return; + } + + canvasDelegate.getSnapshot().rotate(Math.toRadians(degrees)); + } + + @LayoutlibDelegate + /*package*/ static void scale(Canvas thisCanvas, float sx, float sy) { + // get the delegate from the native int. + Canvas_Delegate canvasDelegate = sManager.getDelegate(thisCanvas.mNativeCanvas); + if (canvasDelegate == null) { + return; + } + + canvasDelegate.getSnapshot().scale(sx, sy); + } + + @LayoutlibDelegate + /*package*/ static void skew(Canvas thisCanvas, float kx, float ky) { + // get the delegate from the native int. + Canvas_Delegate canvasDelegate = sManager.getDelegate(thisCanvas.mNativeCanvas); + if (canvasDelegate == null) { + return; + } + + // get the current top graphics2D object. + GcSnapshot g = canvasDelegate.getSnapshot(); + + // get its current matrix + AffineTransform currentTx = g.getTransform(); + // get the AffineTransform for the given skew. + float[] mtx = Matrix_Delegate.getSkew(kx, ky); + AffineTransform matrixTx = Matrix_Delegate.getAffineTransform(mtx); + + // combine them so that the given matrix is applied after. + currentTx.preConcatenate(matrixTx); + + // give it to the graphics2D as a new matrix replacing all previous transform + g.setTransform(currentTx); + } + + @LayoutlibDelegate + /*package*/ static boolean clipRect(Canvas thisCanvas, RectF rect) { + return clipRect(thisCanvas, rect.left, rect.top, rect.right, rect.bottom); + } + + @LayoutlibDelegate + /*package*/ static boolean clipRect(Canvas thisCanvas, Rect rect) { + return clipRect(thisCanvas, (float) rect.left, (float) rect.top, + (float) rect.right, (float) rect.bottom); + } + + @LayoutlibDelegate + /*package*/ static boolean clipRect(Canvas thisCanvas, float left, float top, float right, + float bottom) { + // get the delegate from the native int. + Canvas_Delegate canvasDelegate = sManager.getDelegate(thisCanvas.mNativeCanvas); + if (canvasDelegate == null) { + return false; + } + + return canvasDelegate.clipRect(left, top, right, bottom, Region.Op.INTERSECT.nativeInt); + } + + @LayoutlibDelegate + /*package*/ static boolean clipRect(Canvas thisCanvas, int left, int top, int right, + int bottom) { + + return clipRect(thisCanvas, (float) left, (float) top, (float) right, (float) bottom); + } + + @LayoutlibDelegate + /*package*/ static int save(Canvas thisCanvas) { + return save(thisCanvas, Canvas.MATRIX_SAVE_FLAG | Canvas.CLIP_SAVE_FLAG); + } + + @LayoutlibDelegate + /*package*/ static int save(Canvas thisCanvas, int saveFlags) { + // get the delegate from the native int. + Canvas_Delegate canvasDelegate = sManager.getDelegate(thisCanvas.mNativeCanvas); + if (canvasDelegate == null) { + return 0; + } + + return canvasDelegate.save(saveFlags); + } + + @LayoutlibDelegate + /*package*/ static void restore(Canvas thisCanvas) { + // get the delegate from the native int. + Canvas_Delegate canvasDelegate = sManager.getDelegate(thisCanvas.mNativeCanvas); + if (canvasDelegate == null) { + return; + } + + canvasDelegate.restore(); + } + + @LayoutlibDelegate + /*package*/ static int getSaveCount(Canvas thisCanvas) { + // get the delegate from the native int. + Canvas_Delegate canvasDelegate = sManager.getDelegate(thisCanvas.mNativeCanvas); + if (canvasDelegate == null) { + return 0; + } + + return canvasDelegate.getSnapshot().size(); + } + + @LayoutlibDelegate + /*package*/ static void restoreToCount(Canvas thisCanvas, int saveCount) { + // get the delegate from the native int. + Canvas_Delegate canvasDelegate = sManager.getDelegate(thisCanvas.mNativeCanvas); + if (canvasDelegate == null) { + return; + } + + canvasDelegate.restoreTo(saveCount); + } + + @LayoutlibDelegate + /*package*/ static void drawPoints(Canvas thisCanvas, float[] pts, int offset, int count, + Paint paint) { + // FIXME + Bridge.getLog().fidelityWarning(LayoutLog.TAG_UNSUPPORTED, + "Canvas.drawPoint is not supported.", null, null /*data*/); + } + + @LayoutlibDelegate + /*package*/ static void drawPoint(Canvas thisCanvas, float x, float y, Paint paint) { + // FIXME + Bridge.getLog().fidelityWarning(LayoutLog.TAG_UNSUPPORTED, + "Canvas.drawPoint is not supported.", null, null /*data*/); + } + + @LayoutlibDelegate + /*package*/ static void drawLines(Canvas thisCanvas, + final float[] pts, final int offset, final int count, + Paint paint) { + draw(thisCanvas.mNativeCanvas, paint.mNativePaint, false /*compositeOnly*/, + false /*forceSrcMode*/, new GcSnapshot.Drawable() { + @Override + public void draw(Graphics2D graphics, Paint_Delegate paintDelegate) { + for (int i = 0 ; i < count ; i += 4) { + graphics.drawLine((int)pts[i + offset], (int)pts[i + offset + 1], + (int)pts[i + offset + 2], (int)pts[i + offset + 3]); + } + } + }); + } + + @LayoutlibDelegate + /*package*/ static void freeCaches() { + // nothing to be done here. + } + + @LayoutlibDelegate + /*package*/ static void freeTextLayoutCaches() { + // nothing to be done here yet. + } + + @LayoutlibDelegate + /*package*/ static int initRaster(int nativeBitmapOrZero) { + if (nativeBitmapOrZero > 0) { + // get the Bitmap from the int + Bitmap_Delegate bitmapDelegate = Bitmap_Delegate.getDelegate(nativeBitmapOrZero); + + // create a new Canvas_Delegate with the given bitmap and return its new native int. + Canvas_Delegate newDelegate = new Canvas_Delegate(bitmapDelegate); + + return sManager.addNewDelegate(newDelegate); + } + + // create a new Canvas_Delegate and return its new native int. + Canvas_Delegate newDelegate = new Canvas_Delegate(); + + return sManager.addNewDelegate(newDelegate); + } + + @LayoutlibDelegate + /*package*/ static void copyNativeCanvasState(int srcCanvas, int dstCanvas) { + // get the delegate from the native int. + Canvas_Delegate srcCanvasDelegate = sManager.getDelegate(srcCanvas); + if (srcCanvasDelegate == null) { + return; + } + + // get the delegate from the native int. + Canvas_Delegate dstCanvasDelegate = sManager.getDelegate(dstCanvas); + if (dstCanvasDelegate == null) { + return; + } + // TODO: actually copy the canvas state. + } + + @LayoutlibDelegate + /*package*/ static int native_saveLayer(int nativeCanvas, RectF bounds, + int paint, int layerFlags) { + // get the delegate from the native int. + Canvas_Delegate canvasDelegate = sManager.getDelegate(nativeCanvas); + if (canvasDelegate == null) { + return 0; + } + + Paint_Delegate paintDelegate = Paint_Delegate.getDelegate(paint); + if (paintDelegate == null) { + return 0; + } + + return canvasDelegate.saveLayer(bounds, paintDelegate, layerFlags); + } + + @LayoutlibDelegate + /*package*/ static int native_saveLayer(int nativeCanvas, float l, + float t, float r, float b, + int paint, int layerFlags) { + // get the delegate from the native int. + Canvas_Delegate canvasDelegate = sManager.getDelegate(nativeCanvas); + if (canvasDelegate == null) { + return 0; + } + + Paint_Delegate paintDelegate = Paint_Delegate.getDelegate(paint); + if (paintDelegate == null) { + return 0; + } + + return canvasDelegate.saveLayer(new RectF(l, t, r, b), + paintDelegate, layerFlags); + } + + @LayoutlibDelegate + /*package*/ static int native_saveLayerAlpha(int nativeCanvas, + RectF bounds, int alpha, + int layerFlags) { + // get the delegate from the native int. + Canvas_Delegate canvasDelegate = sManager.getDelegate(nativeCanvas); + if (canvasDelegate == null) { + return 0; + } + + return canvasDelegate.saveLayerAlpha(bounds, alpha, layerFlags); + } + + @LayoutlibDelegate + /*package*/ static int native_saveLayerAlpha(int nativeCanvas, float l, + float t, float r, float b, + int alpha, int layerFlags) { + // get the delegate from the native int. + Canvas_Delegate canvasDelegate = sManager.getDelegate(nativeCanvas); + if (canvasDelegate == null) { + return 0; + } + + return canvasDelegate.saveLayerAlpha(new RectF(l, t, r, b), alpha, layerFlags); + } + + + @LayoutlibDelegate + /*package*/ static void native_concat(int nCanvas, int nMatrix) { + // get the delegate from the native int. + Canvas_Delegate canvasDelegate = sManager.getDelegate(nCanvas); + if (canvasDelegate == null) { + return; + } + + Matrix_Delegate matrixDelegate = Matrix_Delegate.getDelegate(nMatrix); + if (matrixDelegate == null) { + return; + } + + // get the current top graphics2D object. + GcSnapshot snapshot = canvasDelegate.getSnapshot(); + + // get its current matrix + AffineTransform currentTx = snapshot.getTransform(); + // get the AffineTransform of the given matrix + AffineTransform matrixTx = matrixDelegate.getAffineTransform(); + + // combine them so that the given matrix is applied after. + currentTx.concatenate(matrixTx); + + // give it to the graphics2D as a new matrix replacing all previous transform + snapshot.setTransform(currentTx); + } + + @LayoutlibDelegate + /*package*/ static void native_setMatrix(int nCanvas, int nMatrix) { + // get the delegate from the native int. + Canvas_Delegate canvasDelegate = sManager.getDelegate(nCanvas); + if (canvasDelegate == null) { + return; + } + + Matrix_Delegate matrixDelegate = Matrix_Delegate.getDelegate(nMatrix); + if (matrixDelegate == null) { + return; + } + + // get the current top graphics2D object. + GcSnapshot snapshot = canvasDelegate.getSnapshot(); + + // get the AffineTransform of the given matrix + AffineTransform matrixTx = matrixDelegate.getAffineTransform(); + + // give it to the graphics2D as a new matrix replacing all previous transform + snapshot.setTransform(matrixTx); + + if (matrixDelegate.hasPerspective()) { + assert false; + Bridge.getLog().fidelityWarning(LayoutLog.TAG_MATRIX_AFFINE, + "android.graphics.Canvas#setMatrix(android.graphics.Matrix) only " + + "supports affine transformations.", null, null /*data*/); + } + } + + @LayoutlibDelegate + /*package*/ static boolean native_clipRect(int nCanvas, + float left, float top, + float right, float bottom, + int regionOp) { + + // get the delegate from the native int. + Canvas_Delegate canvasDelegate = sManager.getDelegate(nCanvas); + if (canvasDelegate == null) { + return false; + } + + return canvasDelegate.clipRect(left, top, right, bottom, regionOp); + } + + @LayoutlibDelegate + /*package*/ static boolean native_clipPath(int nativeCanvas, + int nativePath, + int regionOp) { + Canvas_Delegate canvasDelegate = sManager.getDelegate(nativeCanvas); + if (canvasDelegate == null) { + return true; + } + + Path_Delegate pathDelegate = Path_Delegate.getDelegate(nativePath); + if (pathDelegate == null) { + return true; + } + + return canvasDelegate.mSnapshot.clip(pathDelegate.getJavaShape(), regionOp); + } + + @LayoutlibDelegate + /*package*/ static boolean native_clipRegion(int nativeCanvas, + int nativeRegion, + int regionOp) { + Canvas_Delegate canvasDelegate = sManager.getDelegate(nativeCanvas); + if (canvasDelegate == null) { + return true; + } + + Region_Delegate region = Region_Delegate.getDelegate(nativeRegion); + if (region == null) { + return true; + } + + return canvasDelegate.mSnapshot.clip(region.getJavaArea(), regionOp); + } + + @LayoutlibDelegate + /*package*/ static void nativeSetDrawFilter(int nativeCanvas, int nativeFilter) { + Canvas_Delegate canvasDelegate = sManager.getDelegate(nativeCanvas); + if (canvasDelegate == null) { + return; + } + + canvasDelegate.mDrawFilter = DrawFilter_Delegate.getDelegate(nativeFilter); + + if (canvasDelegate.mDrawFilter != null && + canvasDelegate.mDrawFilter.isSupported() == false) { + Bridge.getLog().fidelityWarning(LayoutLog.TAG_DRAWFILTER, + canvasDelegate.mDrawFilter.getSupportMessage(), null, null /*data*/); + } + } + + @LayoutlibDelegate + /*package*/ static boolean native_getClipBounds(int nativeCanvas, + Rect bounds) { + // get the delegate from the native int. + Canvas_Delegate canvasDelegate = sManager.getDelegate(nativeCanvas); + if (canvasDelegate == null) { + return false; + } + + Rectangle rect = canvasDelegate.getSnapshot().getClip().getBounds(); + if (rect != null && rect.isEmpty() == false) { + bounds.left = rect.x; + bounds.top = rect.y; + bounds.right = rect.x + rect.width; + bounds.bottom = rect.y + rect.height; + return true; + } + + return false; + } + + @LayoutlibDelegate + /*package*/ static void native_getCTM(int canvas, int matrix) { + // get the delegate from the native int. + Canvas_Delegate canvasDelegate = sManager.getDelegate(canvas); + if (canvasDelegate == null) { + return; + } + + Matrix_Delegate matrixDelegate = Matrix_Delegate.getDelegate(matrix); + if (matrixDelegate == null) { + return; + } + + AffineTransform transform = canvasDelegate.getSnapshot().getTransform(); + matrixDelegate.set(Matrix_Delegate.makeValues(transform)); + } + + @LayoutlibDelegate + /*package*/ static boolean native_quickReject(int nativeCanvas, + RectF rect) { + // FIXME properly implement quickReject + return false; + } + + @LayoutlibDelegate + /*package*/ static boolean native_quickReject(int nativeCanvas, + int path) { + // FIXME properly implement quickReject + return false; + } + + @LayoutlibDelegate + /*package*/ static boolean native_quickReject(int nativeCanvas, + float left, float top, + float right, float bottom) { + // FIXME properly implement quickReject + return false; + } + + @LayoutlibDelegate + /*package*/ static void native_drawRGB(int nativeCanvas, int r, int g, int b) { + native_drawColor(nativeCanvas, 0xFF000000 | r << 16 | (g&0xFF) << 8 | (b&0xFF), + PorterDuff.Mode.SRC_OVER.nativeInt); + + } + + @LayoutlibDelegate + /*package*/ static void native_drawARGB(int nativeCanvas, int a, int r, int g, int b) { + native_drawColor(nativeCanvas, a << 24 | (r&0xFF) << 16 | (g&0xFF) << 8 | (b&0xFF), + PorterDuff.Mode.SRC_OVER.nativeInt); + } + + @LayoutlibDelegate + /*package*/ static void native_drawColor(int nativeCanvas, int color) { + native_drawColor(nativeCanvas, color, PorterDuff.Mode.SRC_OVER.nativeInt); + } + + @LayoutlibDelegate + /*package*/ static void native_drawColor(int nativeCanvas, final int color, final int mode) { + // get the delegate from the native int. + Canvas_Delegate canvasDelegate = sManager.getDelegate(nativeCanvas); + if (canvasDelegate == null) { + return; + } + + final int w = canvasDelegate.mBitmap.getImage().getWidth(); + final int h = canvasDelegate.mBitmap.getImage().getHeight(); + draw(nativeCanvas, new GcSnapshot.Drawable() { + + @Override + public void draw(Graphics2D graphics, Paint_Delegate paint) { + // reset its transform just in case + graphics.setTransform(new AffineTransform()); + + // set the color + graphics.setColor(new Color(color, true /*alpha*/)); + + Composite composite = PorterDuffXfermode_Delegate.getComposite( + PorterDuffXfermode_Delegate.getPorterDuffMode(mode), 0xFF); + if (composite != null) { + graphics.setComposite(composite); + } + + graphics.fillRect(0, 0, w, h); + } + }); + } + + @LayoutlibDelegate + /*package*/ static void native_drawPaint(int nativeCanvas, int paint) { + // FIXME + Bridge.getLog().fidelityWarning(LayoutLog.TAG_UNSUPPORTED, + "Canvas.drawPaint is not supported.", null, null /*data*/); + } + + @LayoutlibDelegate + /*package*/ static void native_drawLine(int nativeCanvas, + final float startX, final float startY, final float stopX, final float stopY, + int paint) { + + draw(nativeCanvas, paint, false /*compositeOnly*/, false /*forceSrcMode*/, + new GcSnapshot.Drawable() { + @Override + public void draw(Graphics2D graphics, Paint_Delegate paintDelegate) { + graphics.drawLine((int)startX, (int)startY, (int)stopX, (int)stopY); + } + }); + } + + @LayoutlibDelegate + /*package*/ static void native_drawRect(int nativeCanvas, RectF rect, + int paint) { + native_drawRect(nativeCanvas, rect.left, rect.top, rect.right, rect.bottom, paint); + } + + @LayoutlibDelegate + /*package*/ static void native_drawRect(int nativeCanvas, + final float left, final float top, final float right, final float bottom, int paint) { + + draw(nativeCanvas, paint, false /*compositeOnly*/, false /*forceSrcMode*/, + new GcSnapshot.Drawable() { + @Override + public void draw(Graphics2D graphics, Paint_Delegate paintDelegate) { + int style = paintDelegate.getStyle(); + + // draw + if (style == Paint.Style.FILL.nativeInt || + style == Paint.Style.FILL_AND_STROKE.nativeInt) { + graphics.fillRect((int)left, (int)top, + (int)(right-left), (int)(bottom-top)); + } + + if (style == Paint.Style.STROKE.nativeInt || + style == Paint.Style.FILL_AND_STROKE.nativeInt) { + graphics.drawRect((int)left, (int)top, + (int)(right-left), (int)(bottom-top)); + } + } + }); + } + + @LayoutlibDelegate + /*package*/ static void native_drawOval(int nativeCanvas, final RectF oval, int paint) { + if (oval.right > oval.left && oval.bottom > oval.top) { + draw(nativeCanvas, paint, false /*compositeOnly*/, false /*forceSrcMode*/, + new GcSnapshot.Drawable() { + @Override + public void draw(Graphics2D graphics, Paint_Delegate paintDelegate) { + int style = paintDelegate.getStyle(); + + // draw + if (style == Paint.Style.FILL.nativeInt || + style == Paint.Style.FILL_AND_STROKE.nativeInt) { + graphics.fillOval((int)oval.left, (int)oval.top, + (int)oval.width(), (int)oval.height()); + } + + if (style == Paint.Style.STROKE.nativeInt || + style == Paint.Style.FILL_AND_STROKE.nativeInt) { + graphics.drawOval((int)oval.left, (int)oval.top, + (int)oval.width(), (int)oval.height()); + } + } + }); + } + } + + @LayoutlibDelegate + /*package*/ static void native_drawCircle(int nativeCanvas, + float cx, float cy, float radius, int paint) { + native_drawOval(nativeCanvas, + new RectF(cx - radius, cy - radius, cx + radius, cy + radius), + paint); + } + + @LayoutlibDelegate + /*package*/ static void native_drawArc(int nativeCanvas, + final RectF oval, final float startAngle, final float sweep, + final boolean useCenter, int paint) { + if (oval.right > oval.left && oval.bottom > oval.top) { + draw(nativeCanvas, paint, false /*compositeOnly*/, false /*forceSrcMode*/, + new GcSnapshot.Drawable() { + @Override + public void draw(Graphics2D graphics, Paint_Delegate paintDelegate) { + int style = paintDelegate.getStyle(); + + Arc2D.Float arc = new Arc2D.Float( + oval.left, oval.top, oval.width(), oval.height(), + -startAngle, -sweep, + useCenter ? Arc2D.PIE : Arc2D.OPEN); + + // draw + if (style == Paint.Style.FILL.nativeInt || + style == Paint.Style.FILL_AND_STROKE.nativeInt) { + graphics.fill(arc); + } + + if (style == Paint.Style.STROKE.nativeInt || + style == Paint.Style.FILL_AND_STROKE.nativeInt) { + graphics.draw(arc); + } + } + }); + } + } + + @LayoutlibDelegate + /*package*/ static void native_drawRoundRect(int nativeCanvas, + final RectF rect, final float rx, final float ry, int paint) { + + draw(nativeCanvas, paint, false /*compositeOnly*/, false /*forceSrcMode*/, + new GcSnapshot.Drawable() { + @Override + public void draw(Graphics2D graphics, Paint_Delegate paintDelegate) { + int style = paintDelegate.getStyle(); + + // draw + if (style == Paint.Style.FILL.nativeInt || + style == Paint.Style.FILL_AND_STROKE.nativeInt) { + graphics.fillRoundRect( + (int)rect.left, (int)rect.top, + (int)rect.width(), (int)rect.height(), + (int)rx, (int)ry); + } + + if (style == Paint.Style.STROKE.nativeInt || + style == Paint.Style.FILL_AND_STROKE.nativeInt) { + graphics.drawRoundRect( + (int)rect.left, (int)rect.top, + (int)rect.width(), (int)rect.height(), + (int)rx, (int)ry); + } + } + }); + } + + @LayoutlibDelegate + /*package*/ static void native_drawPath(int nativeCanvas, int path, int paint) { + final Path_Delegate pathDelegate = Path_Delegate.getDelegate(path); + if (pathDelegate == null) { + return; + } + + draw(nativeCanvas, paint, false /*compositeOnly*/, false /*forceSrcMode*/, + new GcSnapshot.Drawable() { + @Override + public void draw(Graphics2D graphics, Paint_Delegate paintDelegate) { + Shape shape = pathDelegate.getJavaShape(); + int style = paintDelegate.getStyle(); + + if (style == Paint.Style.FILL.nativeInt || + style == Paint.Style.FILL_AND_STROKE.nativeInt) { + graphics.fill(shape); + } + + if (style == Paint.Style.STROKE.nativeInt || + style == Paint.Style.FILL_AND_STROKE.nativeInt) { + graphics.draw(shape); + } + } + }); + } + + @LayoutlibDelegate + /*package*/ static void native_drawBitmap(Canvas thisCanvas, int nativeCanvas, int bitmap, + float left, float top, + int nativePaintOrZero, + int canvasDensity, + int screenDensity, + int bitmapDensity) { + // get the delegate from the native int. + Bitmap_Delegate bitmapDelegate = Bitmap_Delegate.getDelegate(bitmap); + if (bitmapDelegate == null) { + return; + } + + BufferedImage image = bitmapDelegate.getImage(); + float right = left + image.getWidth(); + float bottom = top + image.getHeight(); + + drawBitmap(nativeCanvas, bitmapDelegate, nativePaintOrZero, + 0, 0, image.getWidth(), image.getHeight(), + (int)left, (int)top, (int)right, (int)bottom); + } + + @LayoutlibDelegate + /*package*/ static void native_drawBitmap(Canvas thisCanvas, int nativeCanvas, int bitmap, + Rect src, RectF dst, + int nativePaintOrZero, + int screenDensity, + int bitmapDensity) { + // get the delegate from the native int. + Bitmap_Delegate bitmapDelegate = Bitmap_Delegate.getDelegate(bitmap); + if (bitmapDelegate == null) { + return; + } + + BufferedImage image = bitmapDelegate.getImage(); + + if (src == null) { + drawBitmap(nativeCanvas, bitmapDelegate, nativePaintOrZero, + 0, 0, image.getWidth(), image.getHeight(), + (int)dst.left, (int)dst.top, (int)dst.right, (int)dst.bottom); + } else { + drawBitmap(nativeCanvas, bitmapDelegate, nativePaintOrZero, + src.left, src.top, src.width(), src.height(), + (int)dst.left, (int)dst.top, (int)dst.right, (int)dst.bottom); + } + } + + @LayoutlibDelegate + /*package*/ static void native_drawBitmap(int nativeCanvas, int bitmap, + Rect src, Rect dst, + int nativePaintOrZero, + int screenDensity, + int bitmapDensity) { + // get the delegate from the native int. + Bitmap_Delegate bitmapDelegate = Bitmap_Delegate.getDelegate(bitmap); + if (bitmapDelegate == null) { + return; + } + + BufferedImage image = bitmapDelegate.getImage(); + + if (src == null) { + drawBitmap(nativeCanvas, bitmapDelegate, nativePaintOrZero, + 0, 0, image.getWidth(), image.getHeight(), + dst.left, dst.top, dst.right, dst.bottom); + } else { + drawBitmap(nativeCanvas, bitmapDelegate, nativePaintOrZero, + src.left, src.top, src.width(), src.height(), + dst.left, dst.top, dst.right, dst.bottom); + } + } + + @LayoutlibDelegate + /*package*/ static void native_drawBitmap(int nativeCanvas, int[] colors, + int offset, int stride, final float x, + final float y, int width, int height, + boolean hasAlpha, + int nativePaintOrZero) { + + // create a temp BufferedImage containing the content. + final BufferedImage image = new BufferedImage(width, height, + hasAlpha ? BufferedImage.TYPE_INT_ARGB : BufferedImage.TYPE_INT_RGB); + image.setRGB(0, 0, width, height, colors, offset, stride); + + draw(nativeCanvas, nativePaintOrZero, true /*compositeOnly*/, false /*forceSrcMode*/, + new GcSnapshot.Drawable() { + @Override + public void draw(Graphics2D graphics, Paint_Delegate paint) { + if (paint != null && paint.isFilterBitmap()) { + graphics.setRenderingHint(RenderingHints.KEY_INTERPOLATION, + RenderingHints.VALUE_INTERPOLATION_BILINEAR); + } + + graphics.drawImage(image, (int) x, (int) y, null); + } + }); + } + + @LayoutlibDelegate + /*package*/ static void nativeDrawBitmapMatrix(int nCanvas, int nBitmap, + int nMatrix, int nPaint) { + // get the delegate from the native int. + Canvas_Delegate canvasDelegate = sManager.getDelegate(nCanvas); + if (canvasDelegate == null) { + return; + } + + // get the delegate from the native int, which can be null + Paint_Delegate paintDelegate = Paint_Delegate.getDelegate(nPaint); + + // get the delegate from the native int. + Bitmap_Delegate bitmapDelegate = Bitmap_Delegate.getDelegate(nBitmap); + if (bitmapDelegate == null) { + return; + } + + final BufferedImage image = getImageToDraw(bitmapDelegate, paintDelegate, sBoolOut); + + Matrix_Delegate matrixDelegate = Matrix_Delegate.getDelegate(nMatrix); + if (matrixDelegate == null) { + return; + } + + final AffineTransform mtx = matrixDelegate.getAffineTransform(); + + canvasDelegate.getSnapshot().draw(new GcSnapshot.Drawable() { + @Override + public void draw(Graphics2D graphics, Paint_Delegate paint) { + if (paint != null && paint.isFilterBitmap()) { + graphics.setRenderingHint(RenderingHints.KEY_INTERPOLATION, + RenderingHints.VALUE_INTERPOLATION_BILINEAR); + } + + //FIXME add support for canvas, screen and bitmap densities. + graphics.drawImage(image, mtx, null); + } + }, paintDelegate, true /*compositeOnly*/, false /*forceSrcMode*/); + } + + @LayoutlibDelegate + /*package*/ static void nativeDrawBitmapMesh(int nCanvas, int nBitmap, + int meshWidth, int meshHeight, float[] verts, int vertOffset, int[] colors, + int colorOffset, int nPaint) { + // FIXME + Bridge.getLog().fidelityWarning(LayoutLog.TAG_UNSUPPORTED, + "Canvas.drawBitmapMesh is not supported.", null, null /*data*/); + } + + @LayoutlibDelegate + /*package*/ static void nativeDrawVertices(int nCanvas, int mode, int n, + float[] verts, int vertOffset, + float[] texs, int texOffset, + int[] colors, int colorOffset, + short[] indices, int indexOffset, + int indexCount, int nPaint) { + // FIXME + Bridge.getLog().fidelityWarning(LayoutLog.TAG_UNSUPPORTED, + "Canvas.drawVertices is not supported.", null, null /*data*/); + } + + @LayoutlibDelegate + /*package*/ static void native_drawText(int nativeCanvas, + final char[] text, final int index, final int count, + final float startX, final float startY, int flags, int paint) { + draw(nativeCanvas, paint, false /*compositeOnly*/, false /*forceSrcMode*/, + new GcSnapshot.Drawable() { + @Override + public void draw(Graphics2D graphics, Paint_Delegate paintDelegate) { + // WARNING: the logic in this method is similar to Paint_Delegate.measureText. + // Any change to this method should be reflected in Paint.measureText + // Paint.TextAlign indicates how the text is positioned relative to X. + // LEFT is the default and there's nothing to do. + float x = startX; + float y = startY; + if (paintDelegate.getTextAlign() != Paint.Align.LEFT.nativeInt) { + // TODO: check the value of bidiFlags. + float m = paintDelegate.measureText(text, index, count, 0); + if (paintDelegate.getTextAlign() == Paint.Align.CENTER.nativeInt) { + x -= m / 2; + } else if (paintDelegate.getTextAlign() == Paint.Align.RIGHT.nativeInt) { + x -= m; + } + } + + List fonts = paintDelegate.getFonts(); + + if (fonts.size() > 0) { + FontInfo mainFont = fonts.get(0); + int i = index; + int lastIndex = index + count; + while (i < lastIndex) { + // always start with the main font. + int upTo = mainFont.mFont.canDisplayUpTo(text, i, lastIndex); + if (upTo == -1) { + // draw all the rest and exit. + graphics.setFont(mainFont.mFont); + graphics.drawChars(text, i, lastIndex - i, (int)x, (int)y); + return; + } else if (upTo > 0) { + // draw what's possible + graphics.setFont(mainFont.mFont); + graphics.drawChars(text, i, upTo - i, (int)x, (int)y); + + // compute the width that was drawn to increase x + x += mainFont.mMetrics.charsWidth(text, i, upTo - i); + + // move index to the first non displayed char. + i = upTo; + + // don't call continue at this point. Since it is certain the main font + // cannot display the font a index upTo (now ==i), we move on to the + // fallback fonts directly. + } + + // no char supported, attempt to read the next char(s) with the + // fallback font. In this case we only test the first character + // and then go back to test with the main font. + // Special test for 2-char characters. + boolean foundFont = false; + for (int f = 1 ; f < fonts.size() ; f++) { + FontInfo fontInfo = fonts.get(f); + + // need to check that the font can display the character. We test + // differently if the char is a high surrogate. + int charCount = Character.isHighSurrogate(text[i]) ? 2 : 1; + upTo = fontInfo.mFont.canDisplayUpTo(text, i, i + charCount); + if (upTo == -1) { + // draw that char + graphics.setFont(fontInfo.mFont); + graphics.drawChars(text, i, charCount, (int)x, (int)y); + + // update x + x += fontInfo.mMetrics.charsWidth(text, i, charCount); + + // update the index in the text, and move on + i += charCount; + foundFont = true; + break; + + } + } + + // in case no font can display the char, display it with the main font. + // (it'll put a square probably) + if (foundFont == false) { + int charCount = Character.isHighSurrogate(text[i]) ? 2 : 1; + + graphics.setFont(mainFont.mFont); + graphics.drawChars(text, i, charCount, (int)x, (int)y); + + // measure it to advance x + x += mainFont.mMetrics.charsWidth(text, i, charCount); + + // and move to the next chars. + i += charCount; + } + } + } + } + }); + } + + @LayoutlibDelegate + /*package*/ static void native_drawText(int nativeCanvas, String text, + int start, int end, float x, float y, int flags, int paint) { + int count = end - start; + char[] buffer = TemporaryBuffer.obtain(count); + TextUtils.getChars(text, start, end, buffer, 0); + + native_drawText(nativeCanvas, buffer, 0, count, x, y, flags, paint); + } + + @LayoutlibDelegate + /*package*/ static void native_drawTextRun(int nativeCanvas, String text, + int start, int end, int contextStart, int contextEnd, + float x, float y, int flags, int paint) { + int count = end - start; + char[] buffer = TemporaryBuffer.obtain(count); + TextUtils.getChars(text, start, end, buffer, 0); + + native_drawText(nativeCanvas, buffer, 0, count, x, y, flags, paint); + } + + @LayoutlibDelegate + /*package*/ static void native_drawTextRun(int nativeCanvas, char[] text, + int start, int count, int contextStart, int contextCount, + float x, float y, int flags, int paint) { + native_drawText(nativeCanvas, text, start, count, x, y, flags, paint); + } + + @LayoutlibDelegate + /*package*/ static void native_drawPosText(int nativeCanvas, + char[] text, int index, + int count, float[] pos, + int paint) { + // FIXME + Bridge.getLog().fidelityWarning(LayoutLog.TAG_UNSUPPORTED, + "Canvas.drawPosText is not supported.", null, null /*data*/); + } + + @LayoutlibDelegate + /*package*/ static void native_drawPosText(int nativeCanvas, + String text, float[] pos, + int paint) { + // FIXME + Bridge.getLog().fidelityWarning(LayoutLog.TAG_UNSUPPORTED, + "Canvas.drawPosText is not supported.", null, null /*data*/); + } + + @LayoutlibDelegate + /*package*/ static void native_drawTextOnPath(int nativeCanvas, + char[] text, int index, + int count, int path, + float hOffset, + float vOffset, int bidiFlags, + int paint) { + // FIXME + Bridge.getLog().fidelityWarning(LayoutLog.TAG_UNSUPPORTED, + "Canvas.drawTextOnPath is not supported.", null, null /*data*/); + } + + @LayoutlibDelegate + /*package*/ static void native_drawTextOnPath(int nativeCanvas, + String text, int path, + float hOffset, + float vOffset, + int flags, int paint) { + // FIXME + Bridge.getLog().fidelityWarning(LayoutLog.TAG_UNSUPPORTED, + "Canvas.drawTextOnPath is not supported.", null, null /*data*/); + } + + @LayoutlibDelegate + /*package*/ static void finalizer(int nativeCanvas) { + // get the delegate from the native int so that it can be disposed. + Canvas_Delegate canvasDelegate = sManager.getDelegate(nativeCanvas); + if (canvasDelegate == null) { + return; + } + + canvasDelegate.dispose(); + + // remove it from the manager. + sManager.removeJavaReferenceFor(nativeCanvas); + } + + // ---- Private delegate/helper methods ---- + + /** + * Executes a {@link GcSnapshot.Drawable} with a given canvas and paint. + *

Note that the drawable may actually be executed several times if there are + * layers involved (see {@link #saveLayer(RectF, int, int)}. + */ + private static void draw(int nCanvas, int nPaint, boolean compositeOnly, boolean forceSrcMode, + GcSnapshot.Drawable drawable) { + // get the delegate from the native int. + Canvas_Delegate canvasDelegate = sManager.getDelegate(nCanvas); + if (canvasDelegate == null) { + return; + } + + // get the paint which can be null if nPaint is 0; + Paint_Delegate paintDelegate = Paint_Delegate.getDelegate(nPaint); + + canvasDelegate.getSnapshot().draw(drawable, paintDelegate, compositeOnly, forceSrcMode); + } + + /** + * Executes a {@link GcSnapshot.Drawable} with a given canvas. No paint object will be provided + * to {@link GcSnapshot.Drawable#draw(Graphics2D, Paint_Delegate)}. + *

Note that the drawable may actually be executed several times if there are + * layers involved (see {@link #saveLayer(RectF, int, int)}. + */ + private static void draw(int nCanvas, GcSnapshot.Drawable drawable) { + // get the delegate from the native int. + Canvas_Delegate canvasDelegate = sManager.getDelegate(nCanvas); + if (canvasDelegate == null) { + return; + } + + canvasDelegate.mSnapshot.draw(drawable); + } + + private Canvas_Delegate(Bitmap_Delegate bitmap) { + mSnapshot = GcSnapshot.createDefaultSnapshot(mBitmap = bitmap); + } + + private Canvas_Delegate() { + mSnapshot = GcSnapshot.createDefaultSnapshot(null /*image*/); + } + + /** + * Disposes of the {@link Graphics2D} stack. + */ + private void dispose() { + mSnapshot.dispose(); + } + + private int save(int saveFlags) { + // get the current save count + int count = mSnapshot.size(); + + mSnapshot = mSnapshot.save(saveFlags); + + // return the old save count + return count; + } + + private int saveLayerAlpha(RectF rect, int alpha, int saveFlags) { + Paint_Delegate paint = new Paint_Delegate(); + paint.setAlpha(alpha); + return saveLayer(rect, paint, saveFlags); + } + + private int saveLayer(RectF rect, Paint_Delegate paint, int saveFlags) { + // get the current save count + int count = mSnapshot.size(); + + mSnapshot = mSnapshot.saveLayer(rect, paint, saveFlags); + + // return the old save count + return count; + } + + /** + * Restores the {@link GcSnapshot} to saveCount + * @param saveCount the saveCount + */ + private void restoreTo(int saveCount) { + mSnapshot = mSnapshot.restoreTo(saveCount); + } + + /** + * Restores the {@link GcSnapshot} to saveCount + * @param saveCount the saveCount + */ + private void restore() { + mSnapshot = mSnapshot.restore(); + } + + private boolean clipRect(float left, float top, float right, float bottom, int regionOp) { + return mSnapshot.clipRect(left, top, right, bottom, regionOp); + } + + private void setBitmap(Bitmap_Delegate bitmap) { + mBitmap = bitmap; + assert mSnapshot.size() == 1; + mSnapshot.setBitmap(mBitmap); + } + + private static void drawBitmap( + int nativeCanvas, + Bitmap_Delegate bitmap, + int nativePaintOrZero, + final int sleft, final int stop, final int sright, final int sbottom, + final int dleft, final int dtop, final int dright, final int dbottom) { + // get the delegate from the native int. + Canvas_Delegate canvasDelegate = sManager.getDelegate(nativeCanvas); + if (canvasDelegate == null) { + return; + } + + // get the paint, which could be null if the int is 0 + Paint_Delegate paintDelegate = Paint_Delegate.getDelegate(nativePaintOrZero); + + final BufferedImage image = getImageToDraw(bitmap, paintDelegate, sBoolOut); + + draw(nativeCanvas, nativePaintOrZero, true /*compositeOnly*/, sBoolOut[0], + new GcSnapshot.Drawable() { + @Override + public void draw(Graphics2D graphics, Paint_Delegate paint) { + if (paint != null && paint.isFilterBitmap()) { + graphics.setRenderingHint(RenderingHints.KEY_INTERPOLATION, + RenderingHints.VALUE_INTERPOLATION_BILINEAR); + } + + //FIXME add support for canvas, screen and bitmap densities. + graphics.drawImage(image, dleft, dtop, dright, dbottom, + sleft, stop, sright, sbottom, null); + } + }); + } + + + /** + * Returns a BufferedImage ready for drawing, based on the bitmap and paint delegate. + * The image returns, through a 1-size boolean array, whether the drawing code should + * use a SRC composite no matter what the paint says. + * + * @param bitmap the bitmap + * @param paint the paint that will be used to draw + * @param forceSrcMode whether the composite will have to be SRC + * @return the image to draw + */ + private static BufferedImage getImageToDraw(Bitmap_Delegate bitmap, Paint_Delegate paint, + boolean[] forceSrcMode) { + BufferedImage image = bitmap.getImage(); + forceSrcMode[0] = false; + + // if the bitmap config is alpha_8, then we erase all color value from it + // before drawing it. + if (bitmap.getConfig() == Bitmap.Config.ALPHA_8) { + fixAlpha8Bitmap(image); + } else if (bitmap.hasAlpha() == false) { + // hasAlpha is merely a rendering hint. There can in fact be alpha values + // in the bitmap but it should be ignored at drawing time. + // There is two ways to do this: + // - override the composite to be SRC. This can only be used if the composite + // was going to be SRC or SRC_OVER in the first place + // - Create a different bitmap to draw in which all the alpha channel values is set + // to 0xFF. + if (paint != null) { + Xfermode_Delegate xfermodeDelegate = paint.getXfermode(); + if (xfermodeDelegate instanceof PorterDuffXfermode_Delegate) { + PorterDuff.Mode mode = + ((PorterDuffXfermode_Delegate)xfermodeDelegate).getMode(); + + forceSrcMode[0] = mode == PorterDuff.Mode.SRC_OVER || + mode == PorterDuff.Mode.SRC; + } + } + + // if we can't force SRC mode, then create a temp bitmap of TYPE_RGB + if (forceSrcMode[0] == false) { + image = Bitmap_Delegate.createCopy(image, BufferedImage.TYPE_INT_RGB, 0xFF); + } + } + + return image; + } + + private static void fixAlpha8Bitmap(final BufferedImage image) { + int w = image.getWidth(); + int h = image.getHeight(); + int[] argb = new int[w * h]; + image.getRGB(0, 0, image.getWidth(), image.getHeight(), argb, 0, image.getWidth()); + + final int length = argb.length; + for (int i = 0 ; i < length; i++) { + argb[i] &= 0xFF000000; + } + image.setRGB(0, 0, w, h, argb, 0, w); + } +} + diff --git a/tools/layoutlib/bridge/src/android/graphics/ColorFilter_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/ColorFilter_Delegate.java new file mode 100644 index 0000000000000..e5a7ab6d0d234 --- /dev/null +++ b/tools/layoutlib/bridge/src/android/graphics/ColorFilter_Delegate.java @@ -0,0 +1,64 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.graphics; + +import com.android.layoutlib.bridge.impl.DelegateManager; +import com.android.tools.layoutlib.annotations.LayoutlibDelegate; + +/** + * Delegate implementing the native methods of android.graphics.ColorFilter + * + * Through the layoutlib_create tool, the original native methods of ColorFilter have been replaced + * by calls to methods of the same name in this delegate class. + * + * This class behaves like the original native implementation, but in Java, keeping previously + * native data into its own objects and mapping them to int that are sent back and forth between + * it and the original ColorFilter class. + * + * This also serve as a base class for all ColorFilter delegate classes. + * + * @see DelegateManager + * + */ +public abstract class ColorFilter_Delegate { + + // ---- delegate manager ---- + protected static final DelegateManager sManager = + new DelegateManager(ColorFilter_Delegate.class); + + // ---- delegate helper data ---- + + // ---- delegate data ---- + + // ---- Public Helper methods ---- + + public static ColorFilter_Delegate getDelegate(int nativeShader) { + return sManager.getDelegate(nativeShader); + } + + public abstract boolean isSupported(); + public abstract String getSupportMessage(); + + // ---- native methods ---- + + @LayoutlibDelegate + /*package*/ static void finalizer(int native_instance, int nativeColorFilter) { + sManager.removeJavaReferenceFor(native_instance); + } + + // ---- Private delegate/helper methods ---- +} diff --git a/tools/layoutlib/bridge/src/android/graphics/ColorMatrixColorFilter_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/ColorMatrixColorFilter_Delegate.java new file mode 100644 index 0000000000000..2de344b41f8ac --- /dev/null +++ b/tools/layoutlib/bridge/src/android/graphics/ColorMatrixColorFilter_Delegate.java @@ -0,0 +1,70 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.graphics; + +import com.android.layoutlib.bridge.impl.DelegateManager; +import com.android.tools.layoutlib.annotations.LayoutlibDelegate; + +/** + * Delegate implementing the native methods of android.graphics.ColorMatrixColorFilter + * + * Through the layoutlib_create tool, the original native methods of ColorMatrixColorFilter have + * been replaced by calls to methods of the same name in this delegate class. + * + * This class behaves like the original native implementation, but in Java, keeping previously + * native data into its own objects and mapping them to int that are sent back and forth between + * it and the original ColorMatrixColorFilter class. + * + * Because this extends {@link ColorFilter_Delegate}, there's no need to use a + * {@link DelegateManager}, as all the Shader classes will be added to the manager + * owned by {@link ColorFilter_Delegate}. + * + * @see ColorFilter_Delegate + * + */ +public class ColorMatrixColorFilter_Delegate extends ColorFilter_Delegate { + + // ---- delegate data ---- + + // ---- Public Helper methods ---- + + @Override + public boolean isSupported() { + return false; + } + + @Override + public String getSupportMessage() { + return "ColorMatrix Color Filters are not supported."; + } + + // ---- native methods ---- + + @LayoutlibDelegate + /*package*/ static int nativeColorMatrixFilter(float[] array) { + ColorMatrixColorFilter_Delegate newDelegate = new ColorMatrixColorFilter_Delegate(); + return sManager.addNewDelegate(newDelegate); + } + + @LayoutlibDelegate + /*package*/ static int nColorMatrixFilter(int nativeFilter, float[] array) { + // pass + return 0; + } + + // ---- Private delegate/helper methods ---- +} diff --git a/tools/layoutlib/bridge/src/android/graphics/ComposePathEffect_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/ComposePathEffect_Delegate.java new file mode 100644 index 0000000000000..7c04a8709db22 --- /dev/null +++ b/tools/layoutlib/bridge/src/android/graphics/ComposePathEffect_Delegate.java @@ -0,0 +1,71 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.graphics; + +import com.android.layoutlib.bridge.impl.DelegateManager; +import com.android.tools.layoutlib.annotations.LayoutlibDelegate; + +import java.awt.Stroke; + +/** + * Delegate implementing the native methods of android.graphics.ComposePathEffect + * + * Through the layoutlib_create tool, the original native methods of ComposePathEffect have been + * replaced by calls to methods of the same name in this delegate class. + * + * This class behaves like the original native implementation, but in Java, keeping previously + * native data into its own objects and mapping them to int that are sent back and forth between + * it and the original ComposePathEffect class. + * + * Because this extends {@link PathEffect_Delegate}, there's no need to use a {@link DelegateManager}, + * as all the Shader classes will be added to the manager owned by {@link PathEffect_Delegate}. + * + * @see PathEffect_Delegate + * + */ +public class ComposePathEffect_Delegate extends PathEffect_Delegate { + + // ---- delegate data ---- + + // ---- Public Helper methods ---- + + @Override + public Stroke getStroke(Paint_Delegate paint) { + // FIXME + return null; + } + + @Override + public boolean isSupported() { + return false; + } + + @Override + public String getSupportMessage() { + return "Compose Path Effects are not supported in Layout Preview mode."; + } + + // ---- native methods ---- + + @LayoutlibDelegate + /*package*/ static int nativeCreate(int outerpe, int innerpe) { + ComposePathEffect_Delegate newDelegate = new ComposePathEffect_Delegate(); + return sManager.addNewDelegate(newDelegate); + } + + // ---- Private delegate/helper methods ---- +} diff --git a/tools/layoutlib/bridge/src/android/graphics/ComposeShader_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/ComposeShader_Delegate.java new file mode 100644 index 0000000000000..f6e1d00949255 --- /dev/null +++ b/tools/layoutlib/bridge/src/android/graphics/ComposeShader_Delegate.java @@ -0,0 +1,97 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.graphics; + +import com.android.layoutlib.bridge.impl.DelegateManager; +import com.android.tools.layoutlib.annotations.LayoutlibDelegate; + +import java.awt.Paint; + +/** + * Delegate implementing the native methods of android.graphics.ComposeShader + * + * Through the layoutlib_create tool, the original native methods of ComposeShader have been + * replaced by calls to methods of the same name in this delegate class. + * + * This class behaves like the original native implementation, but in Java, keeping previously + * native data into its own objects and mapping them to int that are sent back and forth between + * it and the original ComposeShader class. + * + * Because this extends {@link Shader_Delegate}, there's no need to use a {@link DelegateManager}, + * as all the Shader classes will be added to the manager owned by {@link Shader_Delegate}. + * + * @see Shader_Delegate + * + */ +public class ComposeShader_Delegate extends Shader_Delegate { + + // ---- delegate data ---- + + // ---- Public Helper methods ---- + + @Override + public Paint getJavaPaint() { + // FIXME + return null; + } + + @Override + public boolean isSupported() { + return false; + } + + @Override + public String getSupportMessage() { + return "Compose Shaders are not supported in Layout Preview mode."; + } + + + // ---- native methods ---- + + @LayoutlibDelegate + /*package*/ static int nativeCreate1(int native_shaderA, int native_shaderB, + int native_mode) { + // FIXME not supported yet. + ComposeShader_Delegate newDelegate = new ComposeShader_Delegate(); + return sManager.addNewDelegate(newDelegate); + } + + @LayoutlibDelegate + /*package*/ static int nativeCreate2(int native_shaderA, int native_shaderB, + int porterDuffMode) { + // FIXME not supported yet. + ComposeShader_Delegate newDelegate = new ComposeShader_Delegate(); + return sManager.addNewDelegate(newDelegate); + } + + @LayoutlibDelegate + /*package*/ static int nativePostCreate1(int native_shader, int native_skiaShaderA, + int native_skiaShaderB, int native_mode) { + // pass, not needed. + return 0; + } + + @LayoutlibDelegate + /*package*/ static int nativePostCreate2(int native_shader, int native_skiaShaderA, + int native_skiaShaderB, int porterDuffMode) { + // pass, not needed. + return 0; + } + + // ---- Private delegate/helper methods ---- + +} diff --git a/tools/layoutlib/bridge/src/android/graphics/CornerPathEffect_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/CornerPathEffect_Delegate.java new file mode 100644 index 0000000000000..b0f8168aa3a02 --- /dev/null +++ b/tools/layoutlib/bridge/src/android/graphics/CornerPathEffect_Delegate.java @@ -0,0 +1,71 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.graphics; + +import com.android.layoutlib.bridge.impl.DelegateManager; +import com.android.tools.layoutlib.annotations.LayoutlibDelegate; + +import java.awt.Stroke; + +/** + * Delegate implementing the native methods of android.graphics.CornerPathEffect + * + * Through the layoutlib_create tool, the original native methods of CornerPathEffect have been + * replaced by calls to methods of the same name in this delegate class. + * + * This class behaves like the original native implementation, but in Java, keeping previously + * native data into its own objects and mapping them to int that are sent back and forth between + * it and the original CornerPathEffect class. + * + * Because this extends {@link PathEffect_Delegate}, there's no need to use a {@link DelegateManager}, + * as all the Shader classes will be added to the manager owned by {@link PathEffect_Delegate}. + * + * @see PathEffect_Delegate + * + */ +public class CornerPathEffect_Delegate extends PathEffect_Delegate { + + // ---- delegate data ---- + + // ---- Public Helper methods ---- + + @Override + public Stroke getStroke(Paint_Delegate paint) { + // FIXME + return null; + } + + @Override + public boolean isSupported() { + return false; + } + + @Override + public String getSupportMessage() { + return "Corner Path Effects are not supported in Layout Preview mode."; + } + + // ---- native methods ---- + + @LayoutlibDelegate + /*package*/ static int nativeCreate(float radius) { + CornerPathEffect_Delegate newDelegate = new CornerPathEffect_Delegate(); + return sManager.addNewDelegate(newDelegate); + } + + // ---- Private delegate/helper methods ---- +} diff --git a/tools/layoutlib/bridge/src/android/graphics/DashPathEffect_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/DashPathEffect_Delegate.java new file mode 100644 index 0000000000000..d97c2eccd5081 --- /dev/null +++ b/tools/layoutlib/bridge/src/android/graphics/DashPathEffect_Delegate.java @@ -0,0 +1,89 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.graphics; + +import com.android.layoutlib.bridge.impl.DelegateManager; +import com.android.tools.layoutlib.annotations.LayoutlibDelegate; + +import java.awt.BasicStroke; +import java.awt.Stroke; + +/** + * Delegate implementing the native methods of android.graphics.DashPathEffect + * + * Through the layoutlib_create tool, the original native methods of DashPathEffect have been + * replaced by calls to methods of the same name in this delegate class. + * + * This class behaves like the original native implementation, but in Java, keeping previously + * native data into its own objects and mapping them to int that are sent back and forth between + * it and the original DashPathEffect class. + * + * Because this extends {@link PathEffect_Delegate}, there's no need to use a + * {@link DelegateManager}, as all the PathEffect classes will be added to the manager owned by + * {@link PathEffect_Delegate}. + * + * @see PathEffect_Delegate + * + */ +public final class DashPathEffect_Delegate extends PathEffect_Delegate { + + // ---- delegate data ---- + + private final float[] mIntervals; + private final float mPhase; + + // ---- Public Helper methods ---- + + @Override + public Stroke getStroke(Paint_Delegate paint) { + return new BasicStroke( + paint.getStrokeWidth(), + paint.getJavaCap(), + paint.getJavaJoin(), + paint.getJavaStrokeMiter(), + mIntervals, + mPhase); + } + + @Override + public boolean isSupported() { + return true; + } + + @Override + public String getSupportMessage() { + // no message since isSupported returns true; + return null; + } + + // ---- native methods ---- + + @LayoutlibDelegate + /*package*/ static int nativeCreate(float intervals[], float phase) { + DashPathEffect_Delegate newDelegate = new DashPathEffect_Delegate(intervals, phase); + return sManager.addNewDelegate(newDelegate); + } + + // ---- Private delegate/helper methods ---- + + private DashPathEffect_Delegate(float intervals[], float phase) { + mIntervals = new float[intervals.length]; + System.arraycopy(intervals, 0, mIntervals, 0, intervals.length); + mPhase = phase; + } +} + diff --git a/tools/layoutlib/bridge/src/android/graphics/DiscretePathEffect_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/DiscretePathEffect_Delegate.java new file mode 100644 index 0000000000000..ec4a810fbda58 --- /dev/null +++ b/tools/layoutlib/bridge/src/android/graphics/DiscretePathEffect_Delegate.java @@ -0,0 +1,71 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.graphics; + +import com.android.layoutlib.bridge.impl.DelegateManager; +import com.android.tools.layoutlib.annotations.LayoutlibDelegate; + +import java.awt.Stroke; + +/** + * Delegate implementing the native methods of android.graphics.DiscretePathEffect + * + * Through the layoutlib_create tool, the original native methods of DiscretePathEffect have been + * replaced by calls to methods of the same name in this delegate class. + * + * This class behaves like the original native implementation, but in Java, keeping previously + * native data into its own objects and mapping them to int that are sent back and forth between + * it and the original DiscretePathEffect class. + * + * Because this extends {@link PathEffect_Delegate}, there's no need to use a {@link DelegateManager}, + * as all the Shader classes will be added to the manager owned by {@link PathEffect_Delegate}. + * + * @see PathEffect_Delegate + * + */ +public class DiscretePathEffect_Delegate extends PathEffect_Delegate { + + // ---- delegate data ---- + + // ---- Public Helper methods ---- + + @Override + public Stroke getStroke(Paint_Delegate paint) { + // FIXME + return null; + } + + @Override + public boolean isSupported() { + return false; + } + + @Override + public String getSupportMessage() { + return "Discrete Path Effects are not supported in Layout Preview mode."; + } + + // ---- native methods ---- + + @LayoutlibDelegate + /*package*/ static int nativeCreate(float length, float deviation) { + DiscretePathEffect_Delegate newDelegate = new DiscretePathEffect_Delegate(); + return sManager.addNewDelegate(newDelegate); + } + + // ---- Private delegate/helper methods ---- +} diff --git a/tools/layoutlib/bridge/src/android/graphics/DrawFilter_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/DrawFilter_Delegate.java new file mode 100644 index 0000000000000..870c46b8f5dd1 --- /dev/null +++ b/tools/layoutlib/bridge/src/android/graphics/DrawFilter_Delegate.java @@ -0,0 +1,64 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.graphics; + +import com.android.layoutlib.bridge.impl.DelegateManager; +import com.android.tools.layoutlib.annotations.LayoutlibDelegate; + +/** + * Delegate implementing the native methods of android.graphics.DrawFilter + * + * Through the layoutlib_create tool, the original native methods of DrawFilter have been replaced + * by calls to methods of the same name in this delegate class. + * + * This class behaves like the original native implementation, but in Java, keeping previously + * native data into its own objects and mapping them to int that are sent back and forth between + * it and the original DrawFilter class. + * + * This also serve as a base class for all DrawFilter delegate classes. + * + * @see DelegateManager + * + */ +public abstract class DrawFilter_Delegate { + + // ---- delegate manager ---- + protected static final DelegateManager sManager = + new DelegateManager(DrawFilter_Delegate.class); + + // ---- delegate helper data ---- + + // ---- delegate data ---- + + // ---- Public Helper methods ---- + + public static DrawFilter_Delegate getDelegate(int nativeDrawFilter) { + return sManager.getDelegate(nativeDrawFilter); + } + + public abstract boolean isSupported(); + public abstract String getSupportMessage(); + + // ---- native methods ---- + + @LayoutlibDelegate + /*package*/ static void nativeDestructor(int nativeDrawFilter) { + sManager.removeJavaReferenceFor(nativeDrawFilter); + } + + // ---- Private delegate/helper methods ---- +} diff --git a/tools/layoutlib/bridge/src/android/graphics/EmbossMaskFilter_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/EmbossMaskFilter_Delegate.java new file mode 100644 index 0000000000000..ebc1c1d2eca4f --- /dev/null +++ b/tools/layoutlib/bridge/src/android/graphics/EmbossMaskFilter_Delegate.java @@ -0,0 +1,65 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.graphics; + +import com.android.layoutlib.bridge.impl.DelegateManager; +import com.android.tools.layoutlib.annotations.LayoutlibDelegate; + +/** + * Delegate implementing the native methods of android.graphics.EmbossMaskFilter + * + * Through the layoutlib_create tool, the original native methods of EmbossMaskFilter have + * been replaced by calls to methods of the same name in this delegate class. + * + * This class behaves like the original native implementation, but in Java, keeping previously + * native data into its own objects and mapping them to int that are sent back and forth between + * it and the original EmbossMaskFilter class. + * + * Because this extends {@link MaskFilter_Delegate}, there's no need to use a + * {@link DelegateManager}, as all the Shader classes will be added to the manager + * owned by {@link MaskFilter_Delegate}. + * + * @see MaskFilter_Delegate + * + */ +public class EmbossMaskFilter_Delegate extends MaskFilter_Delegate { + + // ---- delegate data ---- + + // ---- Public Helper methods ---- + + @Override + public boolean isSupported() { + return false; + } + + @Override + public String getSupportMessage() { + return "Emboss Mask Filters are not supported."; + } + + // ---- native methods ---- + + @LayoutlibDelegate + /*package*/ static int nativeConstructor(float[] direction, float ambient, + float specular, float blurRadius) { + EmbossMaskFilter_Delegate newDelegate = new EmbossMaskFilter_Delegate(); + return sManager.addNewDelegate(newDelegate); + } + + // ---- Private delegate/helper methods ---- +} diff --git a/tools/layoutlib/bridge/src/android/graphics/Gradient_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/Gradient_Delegate.java new file mode 100644 index 0000000000000..7475c22bf58c1 --- /dev/null +++ b/tools/layoutlib/bridge/src/android/graphics/Gradient_Delegate.java @@ -0,0 +1,212 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.graphics; + +import android.graphics.Shader.TileMode; + +/** + * Base class for true Gradient shader delegate. + */ +public abstract class Gradient_Delegate extends Shader_Delegate { + + protected final int[] mColors; + protected final float[] mPositions; + + @Override + public boolean isSupported() { + // all gradient shaders are supported. + return true; + } + + @Override + public String getSupportMessage() { + // all gradient shaders are supported, no need for a gradient support + return null; + } + + /** + * Creates the base shader and do some basic test on the parameters. + * + * @param colors The colors to be distributed along the gradient line + * @param positions May be null. The relative positions [0..1] of each + * corresponding color in the colors array. If this is null, the + * the colors are distributed evenly along the gradient line. + */ + protected Gradient_Delegate(int colors[], float positions[]) { + if (colors.length < 2) { + throw new IllegalArgumentException("needs >= 2 number of colors"); + } + if (positions != null && colors.length != positions.length) { + throw new IllegalArgumentException("color and position arrays must be of equal length"); + } + + if (positions == null) { + float spacing = 1.f / (colors.length - 1); + positions = new float[colors.length]; + positions[0] = 0.f; + positions[colors.length-1] = 1.f; + for (int i = 1; i < colors.length - 1 ; i++) { + positions[i] = spacing * i; + } + } + + mColors = colors; + mPositions = positions; + } + + /** + * Base class for (Java) Gradient Paints. This handles computing the gradient colors based + * on the color and position lists, as well as the {@link TileMode} + * + */ + protected abstract static class GradientPaint implements java.awt.Paint { + private final static int GRADIENT_SIZE = 100; + + private final int[] mColors; + private final float[] mPositions; + private final TileMode mTileMode; + private int[] mGradient; + + protected GradientPaint(int[] colors, float[] positions, TileMode tileMode) { + mColors = colors; + mPositions = positions; + mTileMode = tileMode; + } + + @Override + public int getTransparency() { + return java.awt.Paint.TRANSLUCENT; + } + + /** + * Pre-computes the colors for the gradient. This must be called once before any call + * to {@link #getGradientColor(float)} + */ + protected void precomputeGradientColors() { + if (mGradient == null) { + // actually create an array with an extra size, so that we can really go + // from 0 to SIZE (100%), or currentPos in the loop below will never equal 1.0 + mGradient = new int[GRADIENT_SIZE+1]; + + int prevPos = 0; + int nextPos = 1; + for (int i = 0 ; i <= GRADIENT_SIZE ; i++) { + // compute current position + float currentPos = (float)i/GRADIENT_SIZE; + while (currentPos > mPositions[nextPos]) { + prevPos = nextPos++; + } + + float percent = (currentPos - mPositions[prevPos]) / + (mPositions[nextPos] - mPositions[prevPos]); + + mGradient[i] = computeColor(mColors[prevPos], mColors[nextPos], percent); + } + } + } + + /** + * Returns the color based on the position in the gradient. + * pos can be anything, even < 0 or > > 1, as the gradient + * will use {@link TileMode} value to convert it into a [0,1] value. + */ + protected int getGradientColor(float pos) { + if (pos < 0.f) { + if (mTileMode != null) { + switch (mTileMode) { + case CLAMP: + pos = 0.f; + break; + case REPEAT: + // remove the integer part to stay in the [0,1] range. + // we also need to invert the value from [-1,0] to [0, 1] + pos = pos - (float)Math.floor(pos); + break; + case MIRROR: + // this is the same as the positive side, just make the value positive + // first. + pos = Math.abs(pos); + + // get the integer and the decimal part + int intPart = (int)Math.floor(pos); + pos = pos - intPart; + // 0 -> 1 : normal order + // 1 -> 2: mirrored + // etc.. + // this means if the intpart is odd we invert + if ((intPart % 2) == 1) { + pos = 1.f - pos; + } + break; + } + } else { + pos = 0.0f; + } + } else if (pos > 1f) { + if (mTileMode != null) { + switch (mTileMode) { + case CLAMP: + pos = 1.f; + break; + case REPEAT: + // remove the integer part to stay in the [0,1] range + pos = pos - (float)Math.floor(pos); + break; + case MIRROR: + // get the integer and the decimal part + int intPart = (int)Math.floor(pos); + pos = pos - intPart; + // 0 -> 1 : normal order + // 1 -> 2: mirrored + // etc.. + // this means if the intpart is odd we invert + if ((intPart % 2) == 1) { + pos = 1.f - pos; + } + break; + } + } else { + pos = 1.0f; + } + } + + int index = (int)((pos * GRADIENT_SIZE) + .5); + + return mGradient[index]; + } + + /** + * Returns the color between c1, and c2, based on the percent of the distance + * between c1 and c2. + */ + private int computeColor(int c1, int c2, float percent) { + int a = computeChannel((c1 >> 24) & 0xFF, (c2 >> 24) & 0xFF, percent); + int r = computeChannel((c1 >> 16) & 0xFF, (c2 >> 16) & 0xFF, percent); + int g = computeChannel((c1 >> 8) & 0xFF, (c2 >> 8) & 0xFF, percent); + int b = computeChannel((c1 ) & 0xFF, (c2 ) & 0xFF, percent); + return a << 24 | r << 16 | g << 8 | b; + } + + /** + * Returns the channel value between 2 values based on the percent of the distance between + * the 2 values.. + */ + private int computeChannel(int c1, int c2, float percent) { + return c1 + (int)((percent * (c2-c1)) + .5); + } + } +} diff --git a/tools/layoutlib/bridge/src/android/graphics/LayerRasterizer_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/LayerRasterizer_Delegate.java new file mode 100644 index 0000000000000..51e0576169c49 --- /dev/null +++ b/tools/layoutlib/bridge/src/android/graphics/LayerRasterizer_Delegate.java @@ -0,0 +1,69 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.graphics; + +import com.android.layoutlib.bridge.impl.DelegateManager; +import com.android.tools.layoutlib.annotations.LayoutlibDelegate; + +/** + * Delegate implementing the native methods of android.graphics.LayerRasterizer + * + * Through the layoutlib_create tool, the original native methods of LayerRasterizer have + * been replaced by calls to methods of the same name in this delegate class. + * + * This class behaves like the original native implementation, but in Java, keeping previously + * native data into its own objects and mapping them to int that are sent back and forth between + * it and the original LayerRasterizer class. + * + * Because this extends {@link Rasterizer_Delegate}, there's no need to use a + * {@link DelegateManager}, as all the Shader classes will be added to the manager + * owned by {@link Rasterizer_Delegate}. + * + * @see Rasterizer_Delegate + * + */ +public class LayerRasterizer_Delegate extends Rasterizer_Delegate { + + // ---- delegate data ---- + + // ---- Public Helper methods ---- + + @Override + public boolean isSupported() { + return false; + } + + @Override + public String getSupportMessage() { + return "Layer Rasterizers are not supported."; + } + + // ---- native methods ---- + + @LayoutlibDelegate + /*package*/ static int nativeConstructor() { + LayerRasterizer_Delegate newDelegate = new LayerRasterizer_Delegate(); + return sManager.addNewDelegate(newDelegate); + } + + @LayoutlibDelegate + /*package*/ static void nativeAddLayer(int native_layer, int native_paint, float dx, float dy) { + + } + + // ---- Private delegate/helper methods ---- +} diff --git a/tools/layoutlib/bridge/src/android/graphics/LightingColorFilter_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/LightingColorFilter_Delegate.java new file mode 100644 index 0000000000000..0ee883dcd68c0 --- /dev/null +++ b/tools/layoutlib/bridge/src/android/graphics/LightingColorFilter_Delegate.java @@ -0,0 +1,70 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.graphics; + +import com.android.layoutlib.bridge.impl.DelegateManager; +import com.android.tools.layoutlib.annotations.LayoutlibDelegate; + +/** + * Delegate implementing the native methods of android.graphics.LightingColorFilter + * + * Through the layoutlib_create tool, the original native methods of LightingColorFilter have + * been replaced by calls to methods of the same name in this delegate class. + * + * This class behaves like the original native implementation, but in Java, keeping previously + * native data into its own objects and mapping them to int that are sent back and forth between + * it and the original LightingColorFilter class. + * + * Because this extends {@link ColorFilter_Delegate}, there's no need to use a + * {@link DelegateManager}, as all the Shader classes will be added to the manager + * owned by {@link ColorFilter_Delegate}. + * + * @see ColorFilter_Delegate + * + */ +public class LightingColorFilter_Delegate extends ColorFilter_Delegate { + + // ---- delegate data ---- + + // ---- Public Helper methods ---- + + @Override + public boolean isSupported() { + return false; + } + + @Override + public String getSupportMessage() { + return "Lighting Color Filters are not supported."; + } + + // ---- native methods ---- + + @LayoutlibDelegate + /*package*/ static int native_CreateLightingFilter(int mul, int add) { + LightingColorFilter_Delegate newDelegate = new LightingColorFilter_Delegate(); + return sManager.addNewDelegate(newDelegate); + } + + @LayoutlibDelegate + /*package*/ static int nCreateLightingFilter(int nativeFilter, int mul, int add) { + // pass + return 0; + } + + // ---- Private delegate/helper methods ---- +} diff --git a/tools/layoutlib/bridge/src/android/graphics/LinearGradient_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/LinearGradient_Delegate.java new file mode 100644 index 0000000000000..f117fca52cc13 --- /dev/null +++ b/tools/layoutlib/bridge/src/android/graphics/LinearGradient_Delegate.java @@ -0,0 +1,240 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.graphics; + +import com.android.ide.common.rendering.api.LayoutLog; +import com.android.layoutlib.bridge.Bridge; +import com.android.layoutlib.bridge.impl.DelegateManager; +import com.android.tools.layoutlib.annotations.LayoutlibDelegate; + +import android.graphics.Shader.TileMode; + +/** + * Delegate implementing the native methods of android.graphics.LinearGradient + * + * Through the layoutlib_create tool, the original native methods of LinearGradient have been + * replaced by calls to methods of the same name in this delegate class. + * + * This class behaves like the original native implementation, but in Java, keeping previously + * native data into its own objects and mapping them to int that are sent back and forth between + * it and the original LinearGradient class. + * + * Because this extends {@link Shader_Delegate}, there's no need to use a {@link DelegateManager}, + * as all the Shader classes will be added to the manager owned by {@link Shader_Delegate}. + * + * @see Shader_Delegate + * + */ +public final class LinearGradient_Delegate extends Gradient_Delegate { + + // ---- delegate data ---- + private java.awt.Paint mJavaPaint; + + // ---- Public Helper methods ---- + + @Override + public java.awt.Paint getJavaPaint() { + return mJavaPaint; + } + + // ---- native methods ---- + + @LayoutlibDelegate + /*package*/ static int nativeCreate1(LinearGradient thisGradient, + float x0, float y0, float x1, float y1, + int colors[], float positions[], int tileMode) { + LinearGradient_Delegate newDelegate = new LinearGradient_Delegate(x0, y0, x1, y1, + colors, positions, Shader_Delegate.getTileMode(tileMode)); + return sManager.addNewDelegate(newDelegate); + } + + @LayoutlibDelegate + /*package*/ static int nativeCreate2(LinearGradient thisGradient, + float x0, float y0, float x1, float y1, + int color0, int color1, int tileMode) { + return nativeCreate1(thisGradient, + x0, y0, x1, y1, new int[] { color0, color1}, null /*positions*/, + tileMode); + } + + @LayoutlibDelegate + /*package*/ static int nativePostCreate1(LinearGradient thisGradient, + int native_shader, float x0, float y0, float x1, float y1, + int colors[], float positions[], int tileMode) { + // nothing to be done here. + return 0; + } + + @LayoutlibDelegate + /*package*/ static int nativePostCreate2(LinearGradient thisGradient, + int native_shader, float x0, float y0, float x1, float y1, + int color0, int color1, int tileMode) { + // nothing to be done here. + return 0; + } + + // ---- Private delegate/helper methods ---- + + /** + * Create a shader that draws a linear gradient along a line. + * + * @param x0 The x-coordinate for the start of the gradient line + * @param y0 The y-coordinate for the start of the gradient line + * @param x1 The x-coordinate for the end of the gradient line + * @param y1 The y-coordinate for the end of the gradient line + * @param colors The colors to be distributed along the gradient line + * @param positions May be null. The relative positions [0..1] of each + * corresponding color in the colors array. If this is null, the + * the colors are distributed evenly along the gradient line. + * @param tile The Shader tiling mode + */ + private LinearGradient_Delegate(float x0, float y0, float x1, float y1, + int colors[], float positions[], TileMode tile) { + super(colors, positions); + mJavaPaint = new LinearGradientPaint(x0, y0, x1, y1, mColors, mPositions, tile); + } + + // ---- Custom Java Paint ---- + /** + * Linear Gradient (Java) Paint able to handle more than 2 points, as + * {@link java.awt.GradientPaint} only supports 2 points and does not support Android's tile + * modes. + */ + private class LinearGradientPaint extends GradientPaint { + + private final float mX0; + private final float mY0; + private final float mDx; + private final float mDy; + private final float mDSize2; + + public LinearGradientPaint(float x0, float y0, float x1, float y1, int colors[], + float positions[], TileMode tile) { + super(colors, positions, tile); + mX0 = x0; + mY0 = y0; + mDx = x1 - x0; + mDy = y1 - y0; + mDSize2 = mDx * mDx + mDy * mDy; + } + + @Override + public java.awt.PaintContext createContext( + java.awt.image.ColorModel colorModel, + java.awt.Rectangle deviceBounds, + java.awt.geom.Rectangle2D userBounds, + java.awt.geom.AffineTransform xform, + java.awt.RenderingHints hints) { + precomputeGradientColors(); + + java.awt.geom.AffineTransform canvasMatrix; + try { + canvasMatrix = xform.createInverse(); + } catch (java.awt.geom.NoninvertibleTransformException e) { + Bridge.getLog().fidelityWarning(LayoutLog.TAG_MATRIX_INVERSE, + "Unable to inverse matrix in LinearGradient", e, null /*data*/); + canvasMatrix = new java.awt.geom.AffineTransform(); + } + + java.awt.geom.AffineTransform localMatrix = getLocalMatrix(); + try { + localMatrix = localMatrix.createInverse(); + } catch (java.awt.geom.NoninvertibleTransformException e) { + Bridge.getLog().fidelityWarning(LayoutLog.TAG_MATRIX_INVERSE, + "Unable to inverse matrix in LinearGradient", e, null /*data*/); + localMatrix = new java.awt.geom.AffineTransform(); + } + + return new LinearGradientPaintContext(canvasMatrix, localMatrix, colorModel); + } + + private class LinearGradientPaintContext implements java.awt.PaintContext { + + private final java.awt.geom.AffineTransform mCanvasMatrix; + private final java.awt.geom.AffineTransform mLocalMatrix; + private final java.awt.image.ColorModel mColorModel; + + private LinearGradientPaintContext( + java.awt.geom.AffineTransform canvasMatrix, + java.awt.geom.AffineTransform localMatrix, + java.awt.image.ColorModel colorModel) { + mCanvasMatrix = canvasMatrix; + mLocalMatrix = localMatrix; + mColorModel = colorModel; + } + + @Override + public void dispose() { + } + + @Override + public java.awt.image.ColorModel getColorModel() { + return mColorModel; + } + + @Override + public java.awt.image.Raster getRaster(int x, int y, int w, int h) { + java.awt.image.BufferedImage image = new java.awt.image.BufferedImage(w, h, + java.awt.image.BufferedImage.TYPE_INT_ARGB); + + int[] data = new int[w*h]; + + int index = 0; + float[] pt1 = new float[2]; + float[] pt2 = new float[2]; + for (int iy = 0 ; iy < h ; iy++) { + for (int ix = 0 ; ix < w ; ix++) { + // handle the canvas transform + pt1[0] = x + ix; + pt1[1] = y + iy; + mCanvasMatrix.transform(pt1, 0, pt2, 0, 1); + + // handle the local matrix. + pt1[0] = pt2[0]; + pt1[1] = pt2[1]; + mLocalMatrix.transform(pt1, 0, pt2, 0, 1); + + data[index++] = getColor(pt2[0], pt2[1]); + } + } + + image.setRGB(0 /*startX*/, 0 /*startY*/, w, h, data, 0 /*offset*/, w /*scansize*/); + + return image.getRaster(); + } + } + + /** + * Returns a color for an arbitrary point. + */ + private int getColor(float x, float y) { + float pos; + if (mDx == 0) { + pos = (y - mY0) / mDy; + } else if (mDy == 0) { + pos = (x - mX0) / mDx; + } else { + // find the x position on the gradient vector. + float _x = (mDx*mDy*(y-mY0) + mDy*mDy*mX0 + mDx*mDx*x) / mDSize2; + // from it get the position relative to the vector + pos = (_x - mX0) / mDx; + } + + return getGradientColor(pos); + } + } +} diff --git a/tools/layoutlib/bridge/src/android/graphics/MaskFilter_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/MaskFilter_Delegate.java new file mode 100644 index 0000000000000..c2f27e43c7bf5 --- /dev/null +++ b/tools/layoutlib/bridge/src/android/graphics/MaskFilter_Delegate.java @@ -0,0 +1,64 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.graphics; + +import com.android.layoutlib.bridge.impl.DelegateManager; +import com.android.tools.layoutlib.annotations.LayoutlibDelegate; + +/** + * Delegate implementing the native methods of android.graphics.MaskFilter + * + * Through the layoutlib_create tool, the original native methods of MaskFilter have been replaced + * by calls to methods of the same name in this delegate class. + * + * This class behaves like the original native implementation, but in Java, keeping previously + * native data into its own objects and mapping them to int that are sent back and forth between + * it and the original MaskFilter class. + * + * This also serve as a base class for all MaskFilter delegate classes. + * + * @see DelegateManager + * + */ +public abstract class MaskFilter_Delegate { + + // ---- delegate manager ---- + protected static final DelegateManager sManager = + new DelegateManager(MaskFilter_Delegate.class); + + // ---- delegate helper data ---- + + // ---- delegate data ---- + + // ---- Public Helper methods ---- + + public static MaskFilter_Delegate getDelegate(int nativeShader) { + return sManager.getDelegate(nativeShader); + } + + public abstract boolean isSupported(); + public abstract String getSupportMessage(); + + // ---- native methods ---- + + @LayoutlibDelegate + /*package*/ static void nativeDestructor(int native_filter) { + sManager.removeJavaReferenceFor(native_filter); + } + + // ---- Private delegate/helper methods ---- +} diff --git a/tools/layoutlib/bridge/src/android/graphics/Matrix_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/Matrix_Delegate.java new file mode 100644 index 0000000000000..5df2a21567cf6 --- /dev/null +++ b/tools/layoutlib/bridge/src/android/graphics/Matrix_Delegate.java @@ -0,0 +1,1129 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.graphics; + + +import com.android.ide.common.rendering.api.LayoutLog; +import com.android.layoutlib.bridge.Bridge; +import com.android.layoutlib.bridge.impl.DelegateManager; +import com.android.tools.layoutlib.annotations.LayoutlibDelegate; + +import android.graphics.Matrix.ScaleToFit; + +import java.awt.geom.AffineTransform; +import java.awt.geom.NoninvertibleTransformException; + +/** + * Delegate implementing the native methods of android.graphics.Matrix + * + * Through the layoutlib_create tool, the original native methods of Matrix have been replaced + * by calls to methods of the same name in this delegate class. + * + * This class behaves like the original native implementation, but in Java, keeping previously + * native data into its own objects and mapping them to int that are sent back and forth between + * it and the original Matrix class. + * + * @see DelegateManager + * + */ +public final class Matrix_Delegate { + + private final static int MATRIX_SIZE = 9; + + // ---- delegate manager ---- + private static final DelegateManager sManager = + new DelegateManager(Matrix_Delegate.class); + + // ---- delegate data ---- + private float mValues[] = new float[MATRIX_SIZE]; + + // ---- Public Helper methods ---- + + public static Matrix_Delegate getDelegate(int native_instance) { + return sManager.getDelegate(native_instance); + } + + /** + * Returns an {@link AffineTransform} matching the given Matrix. + */ + public static AffineTransform getAffineTransform(Matrix m) { + Matrix_Delegate delegate = sManager.getDelegate(m.native_instance); + if (delegate == null) { + return null; + } + + return delegate.getAffineTransform(); + } + + public static boolean hasPerspective(Matrix m) { + Matrix_Delegate delegate = sManager.getDelegate(m.native_instance); + if (delegate == null) { + return false; + } + + return delegate.hasPerspective(); + } + + /** + * Sets the content of the matrix with the content of another matrix. + */ + public void set(Matrix_Delegate matrix) { + System.arraycopy(matrix.mValues, 0, mValues, 0, MATRIX_SIZE); + } + + /** + * Sets the content of the matrix with the content of another matrix represented as an array + * of values. + */ + public void set(float[] values) { + System.arraycopy(values, 0, mValues, 0, MATRIX_SIZE); + } + + /** + * Resets the matrix to be the identity matrix. + */ + public void reset() { + reset(mValues); + } + + /** + * Returns whether or not the matrix is identity. + */ + public boolean isIdentity() { + for (int i = 0, k = 0; i < 3; i++) { + for (int j = 0; j < 3; j++, k++) { + if (mValues[k] != ((i==j) ? 1 : 0)) { + return false; + } + } + } + + return true; + } + + public static float[] makeValues(AffineTransform matrix) { + float[] values = new float[MATRIX_SIZE]; + values[0] = (float) matrix.getScaleX(); + values[1] = (float) matrix.getShearX(); + values[2] = (float) matrix.getTranslateX(); + values[3] = (float) matrix.getShearY(); + values[4] = (float) matrix.getScaleY(); + values[5] = (float) matrix.getTranslateY(); + values[6] = 0.f; + values[7] = 0.f; + values[8] = 1.f; + + return values; + } + + public static Matrix_Delegate make(AffineTransform matrix) { + return new Matrix_Delegate(makeValues(matrix)); + } + + public boolean mapRect(RectF dst, RectF src) { + // array with 4 corners + float[] corners = new float[] { + src.left, src.top, + src.right, src.top, + src.right, src.bottom, + src.left, src.bottom, + }; + + // apply the transform to them. + mapPoints(corners); + + // now put the result in the rect. We take the min/max of Xs and min/max of Ys + dst.left = Math.min(Math.min(corners[0], corners[2]), Math.min(corners[4], corners[6])); + dst.right = Math.max(Math.max(corners[0], corners[2]), Math.max(corners[4], corners[6])); + + dst.top = Math.min(Math.min(corners[1], corners[3]), Math.min(corners[5], corners[7])); + dst.bottom = Math.max(Math.max(corners[1], corners[3]), Math.max(corners[5], corners[7])); + + + return (computeTypeMask() & kRectStaysRect_Mask) != 0; + } + + + /** + * Returns an {@link AffineTransform} matching the matrix. + */ + public AffineTransform getAffineTransform() { + return getAffineTransform(mValues); + } + + public boolean hasPerspective() { + return (mValues[6] != 0 || mValues[7] != 0 || mValues[8] != 1); + } + + + + // ---- native methods ---- + + @LayoutlibDelegate + /*package*/ static int native_create(int native_src_or_zero) { + // create the delegate + Matrix_Delegate newDelegate = new Matrix_Delegate(); + + // copy from values if needed. + if (native_src_or_zero > 0) { + Matrix_Delegate oldDelegate = sManager.getDelegate(native_src_or_zero); + if (oldDelegate != null) { + System.arraycopy( + oldDelegate.mValues, 0, + newDelegate.mValues, 0, + MATRIX_SIZE); + } + } + + return sManager.addNewDelegate(newDelegate); + } + + @LayoutlibDelegate + /*package*/ static boolean native_isIdentity(int native_object) { + Matrix_Delegate d = sManager.getDelegate(native_object); + if (d == null) { + return false; + } + + return d.isIdentity(); + } + + @LayoutlibDelegate + /*package*/ static boolean native_rectStaysRect(int native_object) { + Matrix_Delegate d = sManager.getDelegate(native_object); + if (d == null) { + return true; + } + + return (d.computeTypeMask() & kRectStaysRect_Mask) != 0; + } + + @LayoutlibDelegate + /*package*/ static void native_reset(int native_object) { + Matrix_Delegate d = sManager.getDelegate(native_object); + if (d == null) { + return; + } + + reset(d.mValues); + } + + @LayoutlibDelegate + /*package*/ static void native_set(int native_object, int other) { + Matrix_Delegate d = sManager.getDelegate(native_object); + if (d == null) { + return; + } + + Matrix_Delegate src = sManager.getDelegate(other); + if (src == null) { + return; + } + + System.arraycopy(src.mValues, 0, d.mValues, 0, MATRIX_SIZE); + } + + @LayoutlibDelegate + /*package*/ static void native_setTranslate(int native_object, float dx, float dy) { + Matrix_Delegate d = sManager.getDelegate(native_object); + if (d == null) { + return; + } + + setTranslate(d.mValues, dx, dy); + } + + @LayoutlibDelegate + /*package*/ static void native_setScale(int native_object, float sx, float sy, + float px, float py) { + Matrix_Delegate d = sManager.getDelegate(native_object); + if (d == null) { + return; + } + + d.mValues = getScale(sx, sy, px, py); + } + + @LayoutlibDelegate + /*package*/ static void native_setScale(int native_object, float sx, float sy) { + Matrix_Delegate d = sManager.getDelegate(native_object); + if (d == null) { + return; + } + + d.mValues[0] = sx; + d.mValues[1] = 0; + d.mValues[2] = 0; + d.mValues[3] = 0; + d.mValues[4] = sy; + d.mValues[5] = 0; + d.mValues[6] = 0; + d.mValues[7] = 0; + d.mValues[8] = 1; + } + + @LayoutlibDelegate + /*package*/ static void native_setRotate(int native_object, float degrees, float px, float py) { + Matrix_Delegate d = sManager.getDelegate(native_object); + if (d == null) { + return; + } + + d.mValues = getRotate(degrees, px, py); + } + + @LayoutlibDelegate + /*package*/ static void native_setRotate(int native_object, float degrees) { + Matrix_Delegate d = sManager.getDelegate(native_object); + if (d == null) { + return; + } + + setRotate(d.mValues, degrees); + } + + @LayoutlibDelegate + /*package*/ static void native_setSinCos(int native_object, float sinValue, float cosValue, + float px, float py) { + Matrix_Delegate d = sManager.getDelegate(native_object); + if (d == null) { + return; + } + + // TODO: do it in one pass + + // translate so that the pivot is in 0,0 + setTranslate(d.mValues, -px, -py); + + // scale + d.postTransform(getRotate(sinValue, cosValue)); + // translate back the pivot + d.postTransform(getTranslate(px, py)); + } + + @LayoutlibDelegate + /*package*/ static void native_setSinCos(int native_object, float sinValue, float cosValue) { + Matrix_Delegate d = sManager.getDelegate(native_object); + if (d == null) { + return; + } + + setRotate(d.mValues, sinValue, cosValue); + } + + @LayoutlibDelegate + /*package*/ static void native_setSkew(int native_object, float kx, float ky, + float px, float py) { + Matrix_Delegate d = sManager.getDelegate(native_object); + if (d == null) { + return; + } + + d.mValues = getSkew(kx, ky, px, py); + } + + @LayoutlibDelegate + /*package*/ static void native_setSkew(int native_object, float kx, float ky) { + Matrix_Delegate d = sManager.getDelegate(native_object); + if (d == null) { + return; + } + + d.mValues[0] = 1; + d.mValues[1] = kx; + d.mValues[2] = -0; + d.mValues[3] = ky; + d.mValues[4] = 1; + d.mValues[5] = 0; + d.mValues[6] = 0; + d.mValues[7] = 0; + d.mValues[8] = 1; + } + + @LayoutlibDelegate + /*package*/ static boolean native_setConcat(int native_object, int a, int b) { + if (a == native_object) { + return native_preConcat(native_object, b); + } else if (b == native_object) { + return native_postConcat(native_object, a); + } + + Matrix_Delegate d = sManager.getDelegate(native_object); + if (d == null) { + return false; + } + + Matrix_Delegate a_mtx = sManager.getDelegate(a); + if (a_mtx == null) { + return false; + } + + Matrix_Delegate b_mtx = sManager.getDelegate(b); + if (b_mtx == null) { + return false; + } + + multiply(d.mValues, a_mtx.mValues, b_mtx.mValues); + + return true; + } + + @LayoutlibDelegate + /*package*/ static boolean native_preTranslate(int native_object, float dx, float dy) { + Matrix_Delegate d = sManager.getDelegate(native_object); + if (d == null) { + return false; + } + + d.preTransform(getTranslate(dx, dy)); + return true; + } + + @LayoutlibDelegate + /*package*/ static boolean native_preScale(int native_object, float sx, float sy, + float px, float py) { + Matrix_Delegate d = sManager.getDelegate(native_object); + if (d == null) { + return false; + } + + d.preTransform(getScale(sx, sy, px, py)); + return true; + } + + @LayoutlibDelegate + /*package*/ static boolean native_preScale(int native_object, float sx, float sy) { + Matrix_Delegate d = sManager.getDelegate(native_object); + if (d == null) { + return false; + } + + d.preTransform(getScale(sx, sy)); + return true; + } + + @LayoutlibDelegate + /*package*/ static boolean native_preRotate(int native_object, float degrees, + float px, float py) { + Matrix_Delegate d = sManager.getDelegate(native_object); + if (d == null) { + return false; + } + + d.preTransform(getRotate(degrees, px, py)); + return true; + } + + @LayoutlibDelegate + /*package*/ static boolean native_preRotate(int native_object, float degrees) { + Matrix_Delegate d = sManager.getDelegate(native_object); + if (d == null) { + return false; + } + + double rad = Math.toRadians(degrees); + float sin = (float)Math.sin(rad); + float cos = (float)Math.cos(rad); + + d.preTransform(getRotate(sin, cos)); + return true; + } + + @LayoutlibDelegate + /*package*/ static boolean native_preSkew(int native_object, float kx, float ky, + float px, float py) { + Matrix_Delegate d = sManager.getDelegate(native_object); + if (d == null) { + return false; + } + + d.preTransform(getSkew(kx, ky, px, py)); + return true; + } + + @LayoutlibDelegate + /*package*/ static boolean native_preSkew(int native_object, float kx, float ky) { + Matrix_Delegate d = sManager.getDelegate(native_object); + if (d == null) { + return false; + } + + d.preTransform(getSkew(kx, ky)); + return true; + } + + @LayoutlibDelegate + /*package*/ static boolean native_preConcat(int native_object, int other_matrix) { + Matrix_Delegate d = sManager.getDelegate(native_object); + if (d == null) { + return false; + } + + Matrix_Delegate other = sManager.getDelegate(other_matrix); + if (other == null) { + return false; + } + + d.preTransform(other.mValues); + return true; + } + + @LayoutlibDelegate + /*package*/ static boolean native_postTranslate(int native_object, float dx, float dy) { + Matrix_Delegate d = sManager.getDelegate(native_object); + if (d == null) { + return false; + } + + d.postTransform(getTranslate(dx, dy)); + return true; + } + + @LayoutlibDelegate + /*package*/ static boolean native_postScale(int native_object, float sx, float sy, + float px, float py) { + Matrix_Delegate d = sManager.getDelegate(native_object); + if (d == null) { + return false; + } + + d.postTransform(getScale(sx, sy, px, py)); + return true; + } + + @LayoutlibDelegate + /*package*/ static boolean native_postScale(int native_object, float sx, float sy) { + Matrix_Delegate d = sManager.getDelegate(native_object); + if (d == null) { + return false; + } + + d.postTransform(getScale(sx, sy)); + return true; + } + + @LayoutlibDelegate + /*package*/ static boolean native_postRotate(int native_object, float degrees, + float px, float py) { + Matrix_Delegate d = sManager.getDelegate(native_object); + if (d == null) { + return false; + } + + d.postTransform(getRotate(degrees, px, py)); + return true; + } + + @LayoutlibDelegate + /*package*/ static boolean native_postRotate(int native_object, float degrees) { + Matrix_Delegate d = sManager.getDelegate(native_object); + if (d == null) { + return false; + } + + d.postTransform(getRotate(degrees)); + return true; + } + + @LayoutlibDelegate + /*package*/ static boolean native_postSkew(int native_object, float kx, float ky, + float px, float py) { + Matrix_Delegate d = sManager.getDelegate(native_object); + if (d == null) { + return false; + } + + d.postTransform(getSkew(kx, ky, px, py)); + return true; + } + + @LayoutlibDelegate + /*package*/ static boolean native_postSkew(int native_object, float kx, float ky) { + Matrix_Delegate d = sManager.getDelegate(native_object); + if (d == null) { + return false; + } + + d.postTransform(getSkew(kx, ky)); + return true; + } + + @LayoutlibDelegate + /*package*/ static boolean native_postConcat(int native_object, int other_matrix) { + Matrix_Delegate d = sManager.getDelegate(native_object); + if (d == null) { + return false; + } + + Matrix_Delegate other = sManager.getDelegate(other_matrix); + if (other == null) { + return false; + } + + d.postTransform(other.mValues); + return true; + } + + @LayoutlibDelegate + /*package*/ static boolean native_setRectToRect(int native_object, RectF src, + RectF dst, int stf) { + Matrix_Delegate d = sManager.getDelegate(native_object); + if (d == null) { + return false; + } + + if (src.isEmpty()) { + reset(d.mValues); + return false; + } + + if (dst.isEmpty()) { + d.mValues[0] = d.mValues[1] = d.mValues[2] = d.mValues[3] = d.mValues[4] = d.mValues[5] + = d.mValues[6] = d.mValues[7] = 0; + d.mValues[8] = 1; + } else { + float tx, sx = dst.width() / src.width(); + float ty, sy = dst.height() / src.height(); + boolean xLarger = false; + + if (stf != ScaleToFit.FILL.nativeInt) { + if (sx > sy) { + xLarger = true; + sx = sy; + } else { + sy = sx; + } + } + + tx = dst.left - src.left * sx; + ty = dst.top - src.top * sy; + if (stf == ScaleToFit.CENTER.nativeInt || stf == ScaleToFit.END.nativeInt) { + float diff; + + if (xLarger) { + diff = dst.width() - src.width() * sy; + } else { + diff = dst.height() - src.height() * sy; + } + + if (stf == ScaleToFit.CENTER.nativeInt) { + diff = diff / 2; + } + + if (xLarger) { + tx += diff; + } else { + ty += diff; + } + } + + d.mValues[0] = sx; + d.mValues[4] = sy; + d.mValues[2] = tx; + d.mValues[5] = ty; + d.mValues[1] = d.mValues[3] = d.mValues[6] = d.mValues[7] = 0; + + } + // shared cleanup + d.mValues[8] = 1; + return true; + } + + @LayoutlibDelegate + /*package*/ static boolean native_setPolyToPoly(int native_object, float[] src, int srcIndex, + float[] dst, int dstIndex, int pointCount) { + // FIXME + Bridge.getLog().fidelityWarning(LayoutLog.TAG_UNSUPPORTED, + "Matrix.setPolyToPoly is not supported.", + null, null /*data*/); + return false; + } + + @LayoutlibDelegate + /*package*/ static boolean native_invert(int native_object, int inverse) { + Matrix_Delegate d = sManager.getDelegate(native_object); + if (d == null) { + return false; + } + + Matrix_Delegate inv_mtx = sManager.getDelegate(inverse); + if (inv_mtx == null) { + return false; + } + + try { + AffineTransform affineTransform = d.getAffineTransform(); + AffineTransform inverseTransform = affineTransform.createInverse(); + inv_mtx.mValues[0] = (float)inverseTransform.getScaleX(); + inv_mtx.mValues[1] = (float)inverseTransform.getShearX(); + inv_mtx.mValues[2] = (float)inverseTransform.getTranslateX(); + inv_mtx.mValues[3] = (float)inverseTransform.getScaleX(); + inv_mtx.mValues[4] = (float)inverseTransform.getShearY(); + inv_mtx.mValues[5] = (float)inverseTransform.getTranslateY(); + + return true; + } catch (NoninvertibleTransformException e) { + return false; + } + } + + @LayoutlibDelegate + /*package*/ static void native_mapPoints(int native_object, float[] dst, int dstIndex, + float[] src, int srcIndex, int ptCount, boolean isPts) { + Matrix_Delegate d = sManager.getDelegate(native_object); + if (d == null) { + return; + } + + if (isPts) { + d.mapPoints(dst, dstIndex, src, srcIndex, ptCount); + } else { + d.mapVectors(dst, dstIndex, src, srcIndex, ptCount); + } + } + + @LayoutlibDelegate + /*package*/ static boolean native_mapRect(int native_object, RectF dst, RectF src) { + Matrix_Delegate d = sManager.getDelegate(native_object); + if (d == null) { + return false; + } + + return d.mapRect(dst, src); + } + + @LayoutlibDelegate + /*package*/ static float native_mapRadius(int native_object, float radius) { + Matrix_Delegate d = sManager.getDelegate(native_object); + if (d == null) { + return 0.f; + } + + float[] src = new float[] { radius, 0.f, 0.f, radius }; + d.mapVectors(src, 0, src, 0, 2); + + float l1 = getPointLength(src, 0); + float l2 = getPointLength(src, 2); + + return (float) Math.sqrt(l1 * l2); + } + + @LayoutlibDelegate + /*package*/ static void native_getValues(int native_object, float[] values) { + Matrix_Delegate d = sManager.getDelegate(native_object); + if (d == null) { + return; + } + + System.arraycopy(d.mValues, 0, d.mValues, 0, MATRIX_SIZE); + } + + @LayoutlibDelegate + /*package*/ static void native_setValues(int native_object, float[] values) { + Matrix_Delegate d = sManager.getDelegate(native_object); + if (d == null) { + return; + } + + System.arraycopy(values, 0, d.mValues, 0, MATRIX_SIZE); + } + + @LayoutlibDelegate + /*package*/ static boolean native_equals(int native_a, int native_b) { + Matrix_Delegate a = sManager.getDelegate(native_a); + if (a == null) { + return false; + } + + Matrix_Delegate b = sManager.getDelegate(native_b); + if (b == null) { + return false; + } + + for (int i = 0 ; i < MATRIX_SIZE ; i++) { + if (a.mValues[i] != b.mValues[i]) { + return false; + } + } + + return true; + } + + @LayoutlibDelegate + /*package*/ static void finalizer(int native_instance) { + sManager.removeJavaReferenceFor(native_instance); + } + + // ---- Private helper methods ---- + + /*package*/ static AffineTransform getAffineTransform(float[] matrix) { + // the AffineTransform constructor takes the value in a different order + // for a matrix [ 0 1 2 ] + // [ 3 4 5 ] + // the order is 0, 3, 1, 4, 2, 5... + return new AffineTransform( + matrix[0], matrix[3], matrix[1], + matrix[4], matrix[2], matrix[5]); + } + + /** + * Reset a matrix to the identity + */ + private static void reset(float[] mtx) { + for (int i = 0, k = 0; i < 3; i++) { + for (int j = 0; j < 3; j++, k++) { + mtx[k] = ((i==j) ? 1 : 0); + } + } + } + + @SuppressWarnings("unused") + private final static int kIdentity_Mask = 0; + private final static int kTranslate_Mask = 0x01; //!< set if the matrix has translation + private final static int kScale_Mask = 0x02; //!< set if the matrix has X or Y scale + private final static int kAffine_Mask = 0x04; //!< set if the matrix skews or rotates + private final static int kPerspective_Mask = 0x08; //!< set if the matrix is in perspective + private final static int kRectStaysRect_Mask = 0x10; + @SuppressWarnings("unused") + private final static int kUnknown_Mask = 0x80; + + @SuppressWarnings("unused") + private final static int kAllMasks = kTranslate_Mask | + kScale_Mask | + kAffine_Mask | + kPerspective_Mask | + kRectStaysRect_Mask; + + // these guys align with the masks, so we can compute a mask from a variable 0/1 + @SuppressWarnings("unused") + private final static int kTranslate_Shift = 0; + @SuppressWarnings("unused") + private final static int kScale_Shift = 1; + @SuppressWarnings("unused") + private final static int kAffine_Shift = 2; + @SuppressWarnings("unused") + private final static int kPerspective_Shift = 3; + private final static int kRectStaysRect_Shift = 4; + + private int computeTypeMask() { + int mask = 0; + + if (mValues[6] != 0. || mValues[7] != 0. || mValues[8] != 1.) { + mask |= kPerspective_Mask; + } + + if (mValues[2] != 0. || mValues[5] != 0.) { + mask |= kTranslate_Mask; + } + + float m00 = mValues[0]; + float m01 = mValues[1]; + float m10 = mValues[3]; + float m11 = mValues[4]; + + if (m01 != 0. || m10 != 0.) { + mask |= kAffine_Mask; + } + + if (m00 != 1. || m11 != 1.) { + mask |= kScale_Mask; + } + + if ((mask & kPerspective_Mask) == 0) { + // map non-zero to 1 + int im00 = m00 != 0 ? 1 : 0; + int im01 = m01 != 0 ? 1 : 0; + int im10 = m10 != 0 ? 1 : 0; + int im11 = m11 != 0 ? 1 : 0; + + // record if the (p)rimary and (s)econdary diagonals are all 0 or + // all non-zero (answer is 0 or 1) + int dp0 = (im00 | im11) ^ 1; // true if both are 0 + int dp1 = im00 & im11; // true if both are 1 + int ds0 = (im01 | im10) ^ 1; // true if both are 0 + int ds1 = im01 & im10; // true if both are 1 + + // return 1 if primary is 1 and secondary is 0 or + // primary is 0 and secondary is 1 + mask |= ((dp0 & ds1) | (dp1 & ds0)) << kRectStaysRect_Shift; + } + + return mask; + } + + private Matrix_Delegate() { + reset(); + } + + private Matrix_Delegate(float[] values) { + System.arraycopy(values, 0, mValues, 0, MATRIX_SIZE); + } + + /** + * Adds the given transformation to the current Matrix + *

This in effect does this = this*matrix + * @param matrix + */ + private void postTransform(float[] matrix) { + float[] tmp = new float[9]; + multiply(tmp, mValues, matrix); + mValues = tmp; + } + + /** + * Adds the given transformation to the current Matrix + *

This in effect does this = matrix*this + * @param matrix + */ + private void preTransform(float[] matrix) { + float[] tmp = new float[9]; + multiply(tmp, matrix, mValues); + mValues = tmp; + } + + /** + * Apply this matrix to the array of 2D points specified by src, and write + * the transformed points into the array of points specified by dst. The + * two arrays represent their "points" as pairs of floats [x, y]. + * + * @param dst The array of dst points (x,y pairs) + * @param dstIndex The index of the first [x,y] pair of dst floats + * @param src The array of src points (x,y pairs) + * @param srcIndex The index of the first [x,y] pair of src floats + * @param pointCount The number of points (x,y pairs) to transform + */ + + private void mapPoints(float[] dst, int dstIndex, float[] src, int srcIndex, + int pointCount) { + final int count = pointCount * 2; + + float[] tmpDest = dst; + boolean inPlace = dst == src; + if (inPlace) { + tmpDest = new float[dstIndex + count]; + } + + for (int i = 0 ; i < count ; i += 2) { + // just in case we are doing in place, we better put this in temp vars + float x = mValues[0] * src[i + srcIndex] + + mValues[1] * src[i + srcIndex + 1] + + mValues[2]; + float y = mValues[3] * src[i + srcIndex] + + mValues[4] * src[i + srcIndex + 1] + + mValues[5]; + + tmpDest[i + dstIndex] = x; + tmpDest[i + dstIndex + 1] = y; + } + + if (inPlace) { + System.arraycopy(tmpDest, dstIndex, dst, dstIndex, count); + } + } + + /** + * Apply this matrix to the array of 2D points, and write the transformed + * points back into the array + * + * @param pts The array [x0, y0, x1, y1, ...] of points to transform. + */ + + private void mapPoints(float[] pts) { + mapPoints(pts, 0, pts, 0, pts.length >> 1); + } + + private void mapVectors(float[] dst, int dstIndex, float[] src, int srcIndex, int ptCount) { + if (hasPerspective()) { + // transform the (0,0) point + float[] origin = new float[] { 0.f, 0.f}; + mapPoints(origin); + + // translate the vector data as points + mapPoints(dst, dstIndex, src, srcIndex, ptCount); + + // then substract the transformed origin. + final int count = ptCount * 2; + for (int i = 0 ; i < count ; i += 2) { + dst[dstIndex + i] = dst[dstIndex + i] - origin[0]; + dst[dstIndex + i + 1] = dst[dstIndex + i + 1] - origin[1]; + } + } else { + // make a copy of the matrix + Matrix_Delegate copy = new Matrix_Delegate(mValues); + + // remove the translation + setTranslate(copy.mValues, 0, 0); + + // map the content as points. + copy.mapPoints(dst, dstIndex, src, srcIndex, ptCount); + } + } + + private static float getPointLength(float[] src, int index) { + return (float) Math.sqrt(src[index] * src[index] + src[index + 1] * src[index + 1]); + } + + /** + * multiply two matrices and store them in a 3rd. + *

This in effect does dest = a*b + * dest cannot be the same as a or b. + */ + /*package*/ static void multiply(float dest[], float[] a, float[] b) { + // first row + dest[0] = b[0] * a[0] + b[1] * a[3] + b[2] * a[6]; + dest[1] = b[0] * a[1] + b[1] * a[4] + b[2] * a[7]; + dest[2] = b[0] * a[2] + b[1] * a[5] + b[2] * a[8]; + + // 2nd row + dest[3] = b[3] * a[0] + b[4] * a[3] + b[5] * a[6]; + dest[4] = b[3] * a[1] + b[4] * a[4] + b[5] * a[7]; + dest[5] = b[3] * a[2] + b[4] * a[5] + b[5] * a[8]; + + // 3rd row + dest[6] = b[6] * a[0] + b[7] * a[3] + b[8] * a[6]; + dest[7] = b[6] * a[1] + b[7] * a[4] + b[8] * a[7]; + dest[8] = b[6] * a[2] + b[7] * a[5] + b[8] * a[8]; + } + + /** + * Returns a matrix that represents a given translate + * @param dx + * @param dy + * @return + */ + /*package*/ static float[] getTranslate(float dx, float dy) { + return setTranslate(new float[9], dx, dy); + } + + /*package*/ static float[] setTranslate(float[] dest, float dx, float dy) { + dest[0] = 1; + dest[1] = 0; + dest[2] = dx; + dest[3] = 0; + dest[4] = 1; + dest[5] = dy; + dest[6] = 0; + dest[7] = 0; + dest[8] = 1; + return dest; + } + + /*package*/ static float[] getScale(float sx, float sy) { + return new float[] { sx, 0, 0, 0, sy, 0, 0, 0, 1 }; + } + + /** + * Returns a matrix that represents the given scale info. + * @param sx + * @param sy + * @param px + * @param py + */ + /*package*/ static float[] getScale(float sx, float sy, float px, float py) { + float[] tmp = new float[9]; + float[] tmp2 = new float[9]; + + // TODO: do it in one pass + + // translate tmp so that the pivot is in 0,0 + setTranslate(tmp, -px, -py); + + // scale into tmp2 + multiply(tmp2, tmp, getScale(sx, sy)); + + // translate back the pivot back into tmp + multiply(tmp, tmp2, getTranslate(px, py)); + + return tmp; + } + + + /*package*/ static float[] getRotate(float degrees) { + double rad = Math.toRadians(degrees); + float sin = (float)Math.sin(rad); + float cos = (float)Math.cos(rad); + + return getRotate(sin, cos); + } + + /*package*/ static float[] getRotate(float sin, float cos) { + return setRotate(new float[9], sin, cos); + } + + /*package*/ static float[] setRotate(float[] dest, float degrees) { + double rad = Math.toRadians(degrees); + float sin = (float)Math.sin(rad); + float cos = (float)Math.cos(rad); + + return setRotate(dest, sin, cos); + } + + /*package*/ static float[] setRotate(float[] dest, float sin, float cos) { + dest[0] = cos; + dest[1] = -sin; + dest[2] = 0; + dest[3] = sin; + dest[4] = cos; + dest[5] = 0; + dest[6] = 0; + dest[7] = 0; + dest[8] = 1; + return dest; + } + + /*package*/ static float[] getRotate(float degrees, float px, float py) { + float[] tmp = new float[9]; + float[] tmp2 = new float[9]; + + // TODO: do it in one pass + + // translate so that the pivot is in 0,0 + setTranslate(tmp, -px, -py); + + // rotate into tmp2 + double rad = Math.toRadians(degrees); + float cos = (float)Math.cos(rad); + float sin = (float)Math.sin(rad); + multiply(tmp2, tmp, getRotate(sin, cos)); + + // translate back the pivot back into tmp + multiply(tmp, tmp2, getTranslate(px, py)); + + return tmp; + } + + /*package*/ static float[] getSkew(float kx, float ky) { + return new float[] { 1, kx, 0, ky, 1, 0, 0, 0, 1 }; + } + + /*package*/ static float[] getSkew(float kx, float ky, float px, float py) { + float[] tmp = new float[9]; + float[] tmp2 = new float[9]; + + // TODO: do it in one pass + + // translate so that the pivot is in 0,0 + setTranslate(tmp, -px, -py); + + // skew into tmp2 + multiply(tmp2, tmp, new float[] { 1, kx, 0, ky, 1, 0, 0, 0, 1 }); + // translate back the pivot back into tmp + multiply(tmp, tmp2, getTranslate(px, py)); + + return tmp; + } +} diff --git a/tools/layoutlib/bridge/src/android/graphics/NinePatch_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/NinePatch_Delegate.java new file mode 100644 index 0000000000000..be27b54bb828d --- /dev/null +++ b/tools/layoutlib/bridge/src/android/graphics/NinePatch_Delegate.java @@ -0,0 +1,226 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.graphics; + +import com.android.ide.common.rendering.api.LayoutLog; +import com.android.layoutlib.bridge.Bridge; +import com.android.layoutlib.bridge.impl.DelegateManager; +import com.android.layoutlib.bridge.impl.GcSnapshot; +import com.android.ninepatch.NinePatchChunk; +import com.android.tools.layoutlib.annotations.LayoutlibDelegate; + +import android.graphics.drawable.NinePatchDrawable; + +import java.awt.Graphics2D; +import java.awt.image.BufferedImage; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.lang.ref.SoftReference; +import java.util.HashMap; +import java.util.Map; + +/** + * Delegate implementing the native methods of android.graphics.NinePatch + * + * Through the layoutlib_create tool, the original native methods of NinePatch have been replaced + * by calls to methods of the same name in this delegate class. + * + * Because it's a stateless class to start with, there's no need to keep a {@link DelegateManager} + * around to map int to instance of the delegate. + * + */ +public final class NinePatch_Delegate { + + /** + * Cache map for {@link NinePatchChunk}. + * When the chunks are created they are serialized into a byte[], and both are put + * in the cache, using a {@link SoftReference} for the chunk. The default Java classes + * for {@link NinePatch} and {@link NinePatchDrawable} only reference to the byte[] data, and + * provide this for drawing. + * Using the cache map allows us to not have to deserialize the byte[] back into a + * {@link NinePatchChunk} every time a rendering is done. + */ + private final static Map> sChunkCache = + new HashMap>(); + + // ---- Public Helper methods ---- + + /** + * Serializes the given chunk. + * + * @return the serialized data for the chunk. + */ + public static byte[] serialize(NinePatchChunk chunk) { + // serialize the chunk to get a byte[] + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + ObjectOutputStream oos = null; + try { + oos = new ObjectOutputStream(baos); + oos.writeObject(chunk); + } catch (IOException e) { + Bridge.getLog().error(null, "Failed to serialize NinePatchChunk.", e, null /*data*/); + return null; + } finally { + if (oos != null) { + try { + oos.close(); + } catch (IOException e) { + } + } + } + + // get the array and add it to the cache + byte[] array = baos.toByteArray(); + sChunkCache.put(array, new SoftReference(chunk)); + return array; + } + + /** + * Returns a {@link NinePatchChunk} object for the given serialized representation. + * + * If the chunk is present in the cache then the object from the cache is returned, otherwise + * the array is deserialized into a {@link NinePatchChunk} object. + * + * @param array the serialized representation of the chunk. + * @return the NinePatchChunk or null if deserialization failed. + */ + public static NinePatchChunk getChunk(byte[] array) { + SoftReference chunkRef = sChunkCache.get(array); + NinePatchChunk chunk = chunkRef.get(); + if (chunk == null) { + ByteArrayInputStream bais = new ByteArrayInputStream(array); + ObjectInputStream ois = null; + try { + ois = new ObjectInputStream(bais); + chunk = (NinePatchChunk) ois.readObject(); + + // put back the chunk in the cache + if (chunk != null) { + sChunkCache.put(array, new SoftReference(chunk)); + } + } catch (IOException e) { + Bridge.getLog().error(LayoutLog.TAG_BROKEN, + "Failed to deserialize NinePatchChunk content.", e, null /*data*/); + return null; + } catch (ClassNotFoundException e) { + Bridge.getLog().error(LayoutLog.TAG_BROKEN, + "Failed to deserialize NinePatchChunk class.", e, null /*data*/); + return null; + } finally { + if (ois != null) { + try { + ois.close(); + } catch (IOException e) { + } + } + } + } + + return chunk; + } + + // ---- native methods ---- + + @LayoutlibDelegate + /*package*/ static boolean isNinePatchChunk(byte[] chunk) { + NinePatchChunk chunkObject = getChunk(chunk); + if (chunkObject != null) { + return true; + } + + return false; + } + + @LayoutlibDelegate + /*package*/ static void validateNinePatchChunk(int bitmap, byte[] chunk) { + // the default JNI implementation only checks that the byte[] has the same + // size as the C struct it represent. Since we cannot do the same check (serialization + // will return different size depending on content), we do nothing. + } + + @LayoutlibDelegate + /*package*/ static void nativeDraw(int canvas_instance, RectF loc, int bitmap_instance, + byte[] c, int paint_instance_or_null, int destDensity, int srcDensity) { + draw(canvas_instance, + (int) loc.left, (int) loc.top, (int) loc.width(), (int) loc.height(), + bitmap_instance, c, paint_instance_or_null, + destDensity, srcDensity); + } + + @LayoutlibDelegate + /*package*/ static void nativeDraw(int canvas_instance, Rect loc, int bitmap_instance, + byte[] c, int paint_instance_or_null, int destDensity, int srcDensity) { + draw(canvas_instance, + loc.left, loc.top, loc.width(), loc.height(), + bitmap_instance, c, paint_instance_or_null, + destDensity, srcDensity); + } + + @LayoutlibDelegate + /*package*/ static int nativeGetTransparentRegion(int bitmap, byte[] chunk, Rect location) { + return 0; + } + + // ---- Private Helper methods ---- + + private static void draw(int canvas_instance, + final int left, final int top, final int right, final int bottom, + int bitmap_instance, byte[] c, int paint_instance_or_null, + final int destDensity, final int srcDensity) { + // get the delegate from the native int. + final Bitmap_Delegate bitmap_delegate = Bitmap_Delegate.getDelegate(bitmap_instance); + if (bitmap_delegate == null) { + return; + } + + if (c == null) { + // not a 9-patch? + BufferedImage image = bitmap_delegate.getImage(); + Canvas_Delegate.native_drawBitmap(canvas_instance, bitmap_instance, + new Rect(0, 0, image.getWidth(), image.getHeight()), + new Rect(left, top, right, bottom), + paint_instance_or_null, destDensity, srcDensity); + return; + } + + final NinePatchChunk chunkObject = getChunk(c); + assert chunkObject != null; + if (chunkObject == null) { + return; + } + + Canvas_Delegate canvas_delegate = Canvas_Delegate.getDelegate(canvas_instance); + if (canvas_delegate == null) { + return; + } + + // this one can be null + Paint_Delegate paint_delegate = Paint_Delegate.getDelegate(paint_instance_or_null); + + canvas_delegate.getSnapshot().draw(new GcSnapshot.Drawable() { + @Override + public void draw(Graphics2D graphics, Paint_Delegate paint) { + chunkObject.draw(bitmap_delegate.getImage(), graphics, + left, top, right - left, bottom - top, destDensity, srcDensity); + } + }, paint_delegate, true /*compositeOnly*/, false /*forceSrcMode*/); + + } +} diff --git a/tools/layoutlib/bridge/src/android/graphics/PaintFlagsDrawFilter_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/PaintFlagsDrawFilter_Delegate.java new file mode 100644 index 0000000000000..71d346a935536 --- /dev/null +++ b/tools/layoutlib/bridge/src/android/graphics/PaintFlagsDrawFilter_Delegate.java @@ -0,0 +1,64 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.graphics; + +import com.android.layoutlib.bridge.impl.DelegateManager; +import com.android.tools.layoutlib.annotations.LayoutlibDelegate; + +/** + * Delegate implementing the native methods of android.graphics.PaintFlagsDrawFilter + * + * Through the layoutlib_create tool, the original native methods of PaintFlagsDrawFilter have been + * replaced by calls to methods of the same name in this delegate class. + * + * This class behaves like the original native implementation, but in Java, keeping previously + * native data into its own objects and mapping them to int that are sent back and forth between + * it and the original PaintFlagsDrawFilter class. + * + * Because this extends {@link DrawFilter_Delegate}, there's no need to use a + * {@link DelegateManager}, as all the DrawFilter classes will be added to the manager owned by + * {@link DrawFilter_Delegate}. + * + * @see DrawFilter_Delegate + * + */ +public class PaintFlagsDrawFilter_Delegate extends DrawFilter_Delegate { + + // ---- delegate data ---- + + // ---- Public Helper methods ---- + + @Override + public boolean isSupported() { + return false; + } + + @Override + public String getSupportMessage() { + return "Paint Flags Draw Filters are not supported."; + } + + // ---- native methods ---- + + @LayoutlibDelegate + /*package*/ static int nativeConstructor(int clearBits, int setBits) { + PaintFlagsDrawFilter_Delegate newDelegate = new PaintFlagsDrawFilter_Delegate(); + return sManager.addNewDelegate(newDelegate); + } + + // ---- Private delegate/helper methods ---- +} diff --git a/tools/layoutlib/bridge/src/android/graphics/Paint_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/Paint_Delegate.java new file mode 100644 index 0000000000000..c9c98007556fb --- /dev/null +++ b/tools/layoutlib/bridge/src/android/graphics/Paint_Delegate.java @@ -0,0 +1,1284 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.graphics; + +import com.android.ide.common.rendering.api.LayoutLog; +import com.android.layoutlib.bridge.Bridge; +import com.android.layoutlib.bridge.impl.DelegateManager; +import com.android.tools.layoutlib.annotations.LayoutlibDelegate; + +import android.graphics.Paint.FontMetrics; +import android.graphics.Paint.FontMetricsInt; +import android.text.TextUtils; + +import java.awt.BasicStroke; +import java.awt.Font; +import java.awt.Shape; +import java.awt.Stroke; +import java.awt.Toolkit; +import java.awt.font.FontRenderContext; +import java.awt.geom.AffineTransform; +import java.awt.geom.Rectangle2D; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Locale; + +/** + * Delegate implementing the native methods of android.graphics.Paint + * + * Through the layoutlib_create tool, the original native methods of Paint have been replaced + * by calls to methods of the same name in this delegate class. + * + * This class behaves like the original native implementation, but in Java, keeping previously + * native data into its own objects and mapping them to int that are sent back and forth between + * it and the original Paint class. + * + * @see DelegateManager + * + */ +public class Paint_Delegate { + + /** + * Class associating a {@link Font} and it's {@link java.awt.FontMetrics}. + */ + /*package*/ static final class FontInfo { + Font mFont; + java.awt.FontMetrics mMetrics; + } + + // ---- delegate manager ---- + private static final DelegateManager sManager = + new DelegateManager(Paint_Delegate.class); + + // ---- delegate helper data ---- + private List mFonts; + private final FontRenderContext mFontContext = new FontRenderContext( + new AffineTransform(), true, true); + + // ---- delegate data ---- + private int mFlags; + private int mColor; + private int mStyle; + private int mCap; + private int mJoin; + private int mTextAlign; + private Typeface_Delegate mTypeface; + private float mStrokeWidth; + private float mStrokeMiter; + private float mTextSize; + private float mTextScaleX; + private float mTextSkewX; + private int mHintingMode = Paint.HINTING_ON; + + private Xfermode_Delegate mXfermode; + private ColorFilter_Delegate mColorFilter; + private Shader_Delegate mShader; + private PathEffect_Delegate mPathEffect; + private MaskFilter_Delegate mMaskFilter; + private Rasterizer_Delegate mRasterizer; + + private Locale mLocale = Locale.getDefault(); + + + // ---- Public Helper methods ---- + + public static Paint_Delegate getDelegate(int native_paint) { + return sManager.getDelegate(native_paint); + } + + /** + * Returns the list of {@link Font} objects. The first item is the main font, the rest + * are fall backs for characters not present in the main font. + */ + public List getFonts() { + return mFonts; + } + + public boolean isAntiAliased() { + return (mFlags & Paint.ANTI_ALIAS_FLAG) != 0; + } + + public boolean isFilterBitmap() { + return (mFlags & Paint.FILTER_BITMAP_FLAG) != 0; + } + + public int getStyle() { + return mStyle; + } + + public int getColor() { + return mColor; + } + + public int getAlpha() { + return mColor >>> 24; + } + + public void setAlpha(int alpha) { + mColor = (alpha << 24) | (mColor & 0x00FFFFFF); + } + + public int getTextAlign() { + return mTextAlign; + } + + public float getStrokeWidth() { + return mStrokeWidth; + } + + /** + * returns the value of stroke miter needed by the java api. + */ + public float getJavaStrokeMiter() { + float miter = mStrokeMiter * mStrokeWidth; + if (miter < 1.f) { + miter = 1.f; + } + return miter; + } + + public int getJavaCap() { + switch (Paint.sCapArray[mCap]) { + case BUTT: + return BasicStroke.CAP_BUTT; + case ROUND: + return BasicStroke.CAP_ROUND; + default: + case SQUARE: + return BasicStroke.CAP_SQUARE; + } + } + + public int getJavaJoin() { + switch (Paint.sJoinArray[mJoin]) { + default: + case MITER: + return BasicStroke.JOIN_MITER; + case ROUND: + return BasicStroke.JOIN_ROUND; + case BEVEL: + return BasicStroke.JOIN_BEVEL; + } + } + + public Stroke getJavaStroke() { + if (mPathEffect != null) { + if (mPathEffect.isSupported()) { + Stroke stroke = mPathEffect.getStroke(this); + assert stroke != null; + if (stroke != null) { + return stroke; + } + } else { + Bridge.getLog().fidelityWarning(LayoutLog.TAG_PATHEFFECT, + mPathEffect.getSupportMessage(), + null, null /*data*/); + } + } + + // if no custom stroke as been set, set the default one. + return new BasicStroke( + getStrokeWidth(), + getJavaCap(), + getJavaJoin(), + getJavaStrokeMiter()); + } + + /** + * Returns the {@link Xfermode} delegate or null if none have been set + * + * @return the delegate or null. + */ + public Xfermode_Delegate getXfermode() { + return mXfermode; + } + + /** + * Returns the {@link ColorFilter} delegate or null if none have been set + * + * @return the delegate or null. + */ + public ColorFilter_Delegate getColorFilter() { + return mColorFilter; + } + + /** + * Returns the {@link Shader} delegate or null if none have been set + * + * @return the delegate or null. + */ + public Shader_Delegate getShader() { + return mShader; + } + + /** + * Returns the {@link MaskFilter} delegate or null if none have been set + * + * @return the delegate or null. + */ + public MaskFilter_Delegate getMaskFilter() { + return mMaskFilter; + } + + /** + * Returns the {@link Rasterizer} delegate or null if none have been set + * + * @return the delegate or null. + */ + public Rasterizer_Delegate getRasterizer() { + return mRasterizer; + } + + // ---- native methods ---- + + @LayoutlibDelegate + /*package*/ static int getFlags(Paint thisPaint) { + // get the delegate from the native int. + Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); + if (delegate == null) { + return 0; + } + + return delegate.mFlags; + } + + + + @LayoutlibDelegate + /*package*/ static void setFlags(Paint thisPaint, int flags) { + // get the delegate from the native int. + Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); + if (delegate == null) { + return; + } + + delegate.mFlags = flags; + } + + @LayoutlibDelegate + /*package*/ static void setFilterBitmap(Paint thisPaint, boolean filter) { + setFlag(thisPaint, Paint.FILTER_BITMAP_FLAG, filter); + } + + @LayoutlibDelegate + /*package*/ static int getHinting(Paint thisPaint) { + // get the delegate from the native int. + Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); + if (delegate == null) { + return Paint.HINTING_ON; + } + + return delegate.mHintingMode; + } + + @LayoutlibDelegate + /*package*/ static void setHinting(Paint thisPaint, int mode) { + // get the delegate from the native int. + Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); + if (delegate == null) { + return; + } + + delegate.mHintingMode = mode; + } + + @LayoutlibDelegate + /*package*/ static void setAntiAlias(Paint thisPaint, boolean aa) { + setFlag(thisPaint, Paint.ANTI_ALIAS_FLAG, aa); + } + + @LayoutlibDelegate + /*package*/ static void setSubpixelText(Paint thisPaint, boolean subpixelText) { + setFlag(thisPaint, Paint.SUBPIXEL_TEXT_FLAG, subpixelText); + } + + @LayoutlibDelegate + /*package*/ static void setUnderlineText(Paint thisPaint, boolean underlineText) { + setFlag(thisPaint, Paint.UNDERLINE_TEXT_FLAG, underlineText); + } + + @LayoutlibDelegate + /*package*/ static void setStrikeThruText(Paint thisPaint, boolean strikeThruText) { + setFlag(thisPaint, Paint.STRIKE_THRU_TEXT_FLAG, strikeThruText); + } + + @LayoutlibDelegate + /*package*/ static void setFakeBoldText(Paint thisPaint, boolean fakeBoldText) { + setFlag(thisPaint, Paint.FAKE_BOLD_TEXT_FLAG, fakeBoldText); + } + + @LayoutlibDelegate + /*package*/ static void setDither(Paint thisPaint, boolean dither) { + setFlag(thisPaint, Paint.DITHER_FLAG, dither); + } + + @LayoutlibDelegate + /*package*/ static void setLinearText(Paint thisPaint, boolean linearText) { + setFlag(thisPaint, Paint.LINEAR_TEXT_FLAG, linearText); + } + + @LayoutlibDelegate + /*package*/ static int getColor(Paint thisPaint) { + // get the delegate from the native int. + Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); + if (delegate == null) { + return 0; + } + + return delegate.mColor; + } + + @LayoutlibDelegate + /*package*/ static void setColor(Paint thisPaint, int color) { + // get the delegate from the native int. + Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); + if (delegate == null) { + return; + } + + delegate.mColor = color; + } + + @LayoutlibDelegate + /*package*/ static int getAlpha(Paint thisPaint) { + // get the delegate from the native int. + Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); + if (delegate == null) { + return 0; + } + + return delegate.getAlpha(); + } + + @LayoutlibDelegate + /*package*/ static void setAlpha(Paint thisPaint, int a) { + // get the delegate from the native int. + Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); + if (delegate == null) { + return; + } + + delegate.setAlpha(a); + } + + @LayoutlibDelegate + /*package*/ static float getStrokeWidth(Paint thisPaint) { + // get the delegate from the native int. + Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); + if (delegate == null) { + return 1.f; + } + + return delegate.mStrokeWidth; + } + + @LayoutlibDelegate + /*package*/ static void setStrokeWidth(Paint thisPaint, float width) { + // get the delegate from the native int. + Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); + if (delegate == null) { + return; + } + + delegate.mStrokeWidth = width; + } + + @LayoutlibDelegate + /*package*/ static float getStrokeMiter(Paint thisPaint) { + // get the delegate from the native int. + Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); + if (delegate == null) { + return 1.f; + } + + return delegate.mStrokeMiter; + } + + @LayoutlibDelegate + /*package*/ static void setStrokeMiter(Paint thisPaint, float miter) { + // get the delegate from the native int. + Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); + if (delegate == null) { + return; + } + + delegate.mStrokeMiter = miter; + } + + @LayoutlibDelegate + /*package*/ static void nSetShadowLayer(Paint thisPaint, float radius, float dx, float dy, + int color) { + // FIXME + Bridge.getLog().fidelityWarning(LayoutLog.TAG_UNSUPPORTED, + "Paint.setShadowLayer is not supported.", null, null /*data*/); + } + + @LayoutlibDelegate + /*package*/ static float getTextSize(Paint thisPaint) { + // get the delegate from the native int. + Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); + if (delegate == null) { + return 1.f; + } + + return delegate.mTextSize; + } + + @LayoutlibDelegate + /*package*/ static void setTextSize(Paint thisPaint, float textSize) { + // get the delegate from the native int. + Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); + if (delegate == null) { + return; + } + + delegate.mTextSize = textSize; + delegate.updateFontObject(); + } + + @LayoutlibDelegate + /*package*/ static float getTextScaleX(Paint thisPaint) { + // get the delegate from the native int. + Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); + if (delegate == null) { + return 1.f; + } + + return delegate.mTextScaleX; + } + + @LayoutlibDelegate + /*package*/ static void setTextScaleX(Paint thisPaint, float scaleX) { + // get the delegate from the native int. + Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); + if (delegate == null) { + return; + } + + delegate.mTextScaleX = scaleX; + delegate.updateFontObject(); + } + + @LayoutlibDelegate + /*package*/ static float getTextSkewX(Paint thisPaint) { + // get the delegate from the native int. + Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); + if (delegate == null) { + return 1.f; + } + + return delegate.mTextSkewX; + } + + @LayoutlibDelegate + /*package*/ static void setTextSkewX(Paint thisPaint, float skewX) { + // get the delegate from the native int. + Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); + if (delegate == null) { + return; + } + + delegate.mTextSkewX = skewX; + delegate.updateFontObject(); + } + + @LayoutlibDelegate + /*package*/ static float ascent(Paint thisPaint) { + // get the delegate + Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); + if (delegate == null) { + return 0; + } + + if (delegate.mFonts.size() > 0) { + java.awt.FontMetrics javaMetrics = delegate.mFonts.get(0).mMetrics; + // Android expects negative ascent so we invert the value from Java. + return - javaMetrics.getAscent(); + } + + return 0; + } + + @LayoutlibDelegate + /*package*/ static float descent(Paint thisPaint) { + // get the delegate + Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); + if (delegate == null) { + return 0; + } + + if (delegate.mFonts.size() > 0) { + java.awt.FontMetrics javaMetrics = delegate.mFonts.get(0).mMetrics; + return javaMetrics.getDescent(); + } + + return 0; + + } + + @LayoutlibDelegate + /*package*/ static float getFontMetrics(Paint thisPaint, FontMetrics metrics) { + // get the delegate + Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); + if (delegate == null) { + return 0; + } + + return delegate.getFontMetrics(metrics); + } + + @LayoutlibDelegate + /*package*/ static int getFontMetricsInt(Paint thisPaint, FontMetricsInt fmi) { + // get the delegate + Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); + if (delegate == null) { + return 0; + } + + if (delegate.mFonts.size() > 0) { + java.awt.FontMetrics javaMetrics = delegate.mFonts.get(0).mMetrics; + if (fmi != null) { + // Android expects negative ascent so we invert the value from Java. + fmi.top = - javaMetrics.getMaxAscent(); + fmi.ascent = - javaMetrics.getAscent(); + fmi.descent = javaMetrics.getDescent(); + fmi.bottom = javaMetrics.getMaxDescent(); + fmi.leading = javaMetrics.getLeading(); + } + + return javaMetrics.getHeight(); + } + + return 0; + } + + @LayoutlibDelegate + /*package*/ static float native_measureText(Paint thisPaint, char[] text, int index, + int count, int bidiFlags) { + // get the delegate + Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); + if (delegate == null) { + return 0; + } + + return delegate.measureText(text, index, count, bidiFlags); + } + + @LayoutlibDelegate + /*package*/ static float native_measureText(Paint thisPaint, String text, int start, int end, + int bidiFlags) { + return native_measureText(thisPaint, text.toCharArray(), start, end - start, bidiFlags); + } + + @LayoutlibDelegate + /*package*/ static float native_measureText(Paint thisPaint, String text, int bidiFlags) { + return native_measureText(thisPaint, text.toCharArray(), 0, text.length(), bidiFlags); + } + + @LayoutlibDelegate + /*package*/ static int native_breakText(Paint thisPaint, char[] text, int index, int count, + float maxWidth, int bidiFlags, float[] measuredWidth) { + + // get the delegate + Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); + if (delegate == null) { + return 0; + } + + int inc = count > 0 ? 1 : -1; + + int measureIndex = 0; + float measureAcc = 0; + for (int i = index; i != index + count; i += inc, measureIndex++) { + int start, end; + if (i < index) { + start = i; + end = index; + } else { + start = index; + end = i; + } + + // measure from start to end + float res = delegate.measureText(text, start, end - start + 1, bidiFlags); + + if (measuredWidth != null) { + measuredWidth[measureIndex] = res; + } + + measureAcc += res; + if (res > maxWidth) { + // we should not return this char index, but since it's 0-based + // and we need to return a count, we simply return measureIndex; + return measureIndex; + } + + } + + return measureIndex; + } + + @LayoutlibDelegate + /*package*/ static int native_breakText(Paint thisPaint, String text, boolean measureForwards, + float maxWidth, int bidiFlags, float[] measuredWidth) { + return native_breakText(thisPaint, text.toCharArray(), 0, text.length(), maxWidth, + bidiFlags, measuredWidth); + } + + @LayoutlibDelegate + /*package*/ static int native_init() { + Paint_Delegate newDelegate = new Paint_Delegate(); + return sManager.addNewDelegate(newDelegate); + } + + @LayoutlibDelegate + /*package*/ static int native_initWithPaint(int paint) { + // get the delegate from the native int. + Paint_Delegate delegate = sManager.getDelegate(paint); + if (delegate == null) { + return 0; + } + + Paint_Delegate newDelegate = new Paint_Delegate(delegate); + return sManager.addNewDelegate(newDelegate); + } + + @LayoutlibDelegate + /*package*/ static void native_reset(int native_object) { + // get the delegate from the native int. + Paint_Delegate delegate = sManager.getDelegate(native_object); + if (delegate == null) { + return; + } + + delegate.reset(); + } + + @LayoutlibDelegate + /*package*/ static void native_set(int native_dst, int native_src) { + // get the delegate from the native int. + Paint_Delegate delegate_dst = sManager.getDelegate(native_dst); + if (delegate_dst == null) { + return; + } + + // get the delegate from the native int. + Paint_Delegate delegate_src = sManager.getDelegate(native_src); + if (delegate_src == null) { + return; + } + + delegate_dst.set(delegate_src); + } + + @LayoutlibDelegate + /*package*/ static int native_getStyle(int native_object) { + // get the delegate from the native int. + Paint_Delegate delegate = sManager.getDelegate(native_object); + if (delegate == null) { + return 0; + } + + return delegate.mStyle; + } + + @LayoutlibDelegate + /*package*/ static void native_setStyle(int native_object, int style) { + // get the delegate from the native int. + Paint_Delegate delegate = sManager.getDelegate(native_object); + if (delegate == null) { + return; + } + + delegate.mStyle = style; + } + + @LayoutlibDelegate + /*package*/ static int native_getStrokeCap(int native_object) { + // get the delegate from the native int. + Paint_Delegate delegate = sManager.getDelegate(native_object); + if (delegate == null) { + return 0; + } + + return delegate.mCap; + } + + @LayoutlibDelegate + /*package*/ static void native_setStrokeCap(int native_object, int cap) { + // get the delegate from the native int. + Paint_Delegate delegate = sManager.getDelegate(native_object); + if (delegate == null) { + return; + } + + delegate.mCap = cap; + } + + @LayoutlibDelegate + /*package*/ static int native_getStrokeJoin(int native_object) { + // get the delegate from the native int. + Paint_Delegate delegate = sManager.getDelegate(native_object); + if (delegate == null) { + return 0; + } + + return delegate.mJoin; + } + + @LayoutlibDelegate + /*package*/ static void native_setStrokeJoin(int native_object, int join) { + // get the delegate from the native int. + Paint_Delegate delegate = sManager.getDelegate(native_object); + if (delegate == null) { + return; + } + + delegate.mJoin = join; + } + + @LayoutlibDelegate + /*package*/ static boolean native_getFillPath(int native_object, int src, int dst) { + Paint_Delegate paint = sManager.getDelegate(native_object); + if (paint == null) { + return false; + } + + Path_Delegate srcPath = Path_Delegate.getDelegate(src); + if (srcPath == null) { + return true; + } + + Path_Delegate dstPath = Path_Delegate.getDelegate(dst); + if (dstPath == null) { + return true; + } + + Stroke stroke = paint.getJavaStroke(); + Shape strokeShape = stroke.createStrokedShape(srcPath.getJavaShape()); + + dstPath.setJavaShape(strokeShape); + + // FIXME figure out the return value? + return true; + } + + @LayoutlibDelegate + /*package*/ static int native_setShader(int native_object, int shader) { + // get the delegate from the native int. + Paint_Delegate delegate = sManager.getDelegate(native_object); + if (delegate == null) { + return shader; + } + + delegate.mShader = Shader_Delegate.getDelegate(shader); + + return shader; + } + + @LayoutlibDelegate + /*package*/ static int native_setColorFilter(int native_object, int filter) { + // get the delegate from the native int. + Paint_Delegate delegate = sManager.getDelegate(native_object); + if (delegate == null) { + return filter; + } + + delegate.mColorFilter = ColorFilter_Delegate.getDelegate(filter);; + + // since none of those are supported, display a fidelity warning right away + if (delegate.mColorFilter != null && delegate.mColorFilter.isSupported() == false) { + Bridge.getLog().fidelityWarning(LayoutLog.TAG_COLORFILTER, + delegate.mColorFilter.getSupportMessage(), null, null /*data*/); + } + + return filter; + } + + @LayoutlibDelegate + /*package*/ static int native_setXfermode(int native_object, int xfermode) { + // get the delegate from the native int. + Paint_Delegate delegate = sManager.getDelegate(native_object); + if (delegate == null) { + return xfermode; + } + + delegate.mXfermode = Xfermode_Delegate.getDelegate(xfermode); + + return xfermode; + } + + @LayoutlibDelegate + /*package*/ static int native_setPathEffect(int native_object, int effect) { + // get the delegate from the native int. + Paint_Delegate delegate = sManager.getDelegate(native_object); + if (delegate == null) { + return effect; + } + + delegate.mPathEffect = PathEffect_Delegate.getDelegate(effect); + + return effect; + } + + @LayoutlibDelegate + /*package*/ static int native_setMaskFilter(int native_object, int maskfilter) { + // get the delegate from the native int. + Paint_Delegate delegate = sManager.getDelegate(native_object); + if (delegate == null) { + return maskfilter; + } + + delegate.mMaskFilter = MaskFilter_Delegate.getDelegate(maskfilter); + + // since none of those are supported, display a fidelity warning right away + if (delegate.mMaskFilter != null && delegate.mMaskFilter.isSupported() == false) { + Bridge.getLog().fidelityWarning(LayoutLog.TAG_MASKFILTER, + delegate.mMaskFilter.getSupportMessage(), null, null /*data*/); + } + + return maskfilter; + } + + @LayoutlibDelegate + /*package*/ static int native_setTypeface(int native_object, int typeface) { + // get the delegate from the native int. + Paint_Delegate delegate = sManager.getDelegate(native_object); + if (delegate == null) { + return 0; + } + + delegate.mTypeface = Typeface_Delegate.getDelegate(typeface); + delegate.updateFontObject(); + return typeface; + } + + @LayoutlibDelegate + /*package*/ static int native_setRasterizer(int native_object, int rasterizer) { + // get the delegate from the native int. + Paint_Delegate delegate = sManager.getDelegate(native_object); + if (delegate == null) { + return rasterizer; + } + + delegate.mRasterizer = Rasterizer_Delegate.getDelegate(rasterizer); + + // since none of those are supported, display a fidelity warning right away + if (delegate.mRasterizer != null && delegate.mRasterizer.isSupported() == false) { + Bridge.getLog().fidelityWarning(LayoutLog.TAG_RASTERIZER, + delegate.mRasterizer.getSupportMessage(), null, null /*data*/); + } + + return rasterizer; + } + + @LayoutlibDelegate + /*package*/ static int native_getTextAlign(int native_object) { + // get the delegate from the native int. + Paint_Delegate delegate = sManager.getDelegate(native_object); + if (delegate == null) { + return 0; + } + + return delegate.mTextAlign; + } + + @LayoutlibDelegate + /*package*/ static void native_setTextAlign(int native_object, int align) { + // get the delegate from the native int. + Paint_Delegate delegate = sManager.getDelegate(native_object); + if (delegate == null) { + return; + } + + delegate.mTextAlign = align; + } + + @LayoutlibDelegate + /*package*/ static void native_setTextLocale(int native_object, String locale) { + // get the delegate from the native int. + Paint_Delegate delegate = sManager.getDelegate(native_object); + if (delegate == null) { + return; + } + + delegate.setTextLocale(locale); + } + + @LayoutlibDelegate + /*package*/ static int native_getTextWidths(int native_object, char[] text, int index, + int count, int bidiFlags, float[] widths) { + // get the delegate from the native int. + Paint_Delegate delegate = sManager.getDelegate(native_object); + if (delegate == null) { + return 0; + } + + if (delegate.mFonts.size() > 0) { + // FIXME: handle multi-char characters (see measureText) + float totalAdvance = 0; + for (int i = 0; i < count; i++) { + char c = text[i + index]; + boolean found = false; + for (FontInfo info : delegate.mFonts) { + if (info.mFont.canDisplay(c)) { + float adv = info.mMetrics.charWidth(c); + totalAdvance += adv; + if (widths != null) { + widths[i] = adv; + } + + found = true; + break; + } + } + + if (found == false) { + // no advance for this char. + if (widths != null) { + widths[i] = 0.f; + } + } + } + + return (int) totalAdvance; + } + + return 0; + } + + @LayoutlibDelegate + /*package*/ static int native_getTextWidths(int native_object, String text, int start, + int end, int bidiFlags, float[] widths) { + return native_getTextWidths(native_object, text.toCharArray(), start, end - start, + bidiFlags, widths); + } + + @LayoutlibDelegate + /* package */static int native_getTextGlyphs(int native_object, String text, int start, + int end, int contextStart, int contextEnd, int flags, char[] glyphs) { + // FIXME + return 0; + } + + @LayoutlibDelegate + /*package*/ static float native_getTextRunAdvances(int native_object, + char[] text, int index, int count, int contextIndex, int contextCount, + int flags, float[] advances, int advancesIndex) { + // get the delegate from the native int. + Paint_Delegate delegate = sManager.getDelegate(native_object); + if (delegate == null) { + return 0.f; + } + + if (delegate.mFonts.size() > 0) { + // FIXME: handle multi-char characters (see measureText) + float totalAdvance = 0; + for (int i = 0; i < count; i++) { + char c = text[i + index]; + boolean found = false; + for (FontInfo info : delegate.mFonts) { + if (info.mFont.canDisplay(c)) { + float adv = info.mMetrics.charWidth(c); + totalAdvance += adv; + if (advances != null) { + advances[i] = adv; + } + + found = true; + break; + } + } + + if (found == false) { + // no advance for this char. + if (advances != null) { + advances[i] = 0.f; + } + } + } + + return totalAdvance; + } + + return 0; + + } + + @LayoutlibDelegate + /*package*/ static float native_getTextRunAdvances(int native_object, + String text, int start, int end, int contextStart, int contextEnd, + int flags, float[] advances, int advancesIndex) { + // FIXME: support contextStart, contextEnd and direction flag + int count = end - start; + char[] buffer = TemporaryBuffer.obtain(count); + TextUtils.getChars(text, start, end, buffer, 0); + + return native_getTextRunAdvances(native_object, buffer, 0, count, contextStart, + contextEnd - contextStart, flags, advances, advancesIndex); + } + + @LayoutlibDelegate + /*package*/ static int native_getTextRunCursor(Paint thisPaint, int native_object, char[] text, + int contextStart, int contextLength, int flags, int offset, int cursorOpt) { + // FIXME + Bridge.getLog().fidelityWarning(LayoutLog.TAG_UNSUPPORTED, + "Paint.getTextRunCursor is not supported.", null, null /*data*/); + return 0; + } + + @LayoutlibDelegate + /*package*/ static int native_getTextRunCursor(Paint thisPaint, int native_object, String text, + int contextStart, int contextEnd, int flags, int offset, int cursorOpt) { + // FIXME + Bridge.getLog().fidelityWarning(LayoutLog.TAG_UNSUPPORTED, + "Paint.getTextRunCursor is not supported.", null, null /*data*/); + return 0; + } + + @LayoutlibDelegate + /*package*/ static void native_getTextPath(int native_object, int bidiFlags, + char[] text, int index, int count, float x, float y, int path) { + // FIXME + Bridge.getLog().fidelityWarning(LayoutLog.TAG_UNSUPPORTED, + "Paint.getTextPath is not supported.", null, null /*data*/); + } + + @LayoutlibDelegate + /*package*/ static void native_getTextPath(int native_object, int bidiFlags, + String text, int start, int end, float x, float y, int path) { + // FIXME + Bridge.getLog().fidelityWarning(LayoutLog.TAG_UNSUPPORTED, + "Paint.getTextPath is not supported.", null, null /*data*/); + } + + @LayoutlibDelegate + /*package*/ static void nativeGetStringBounds(int nativePaint, String text, int start, + int end, int bidiFlags, Rect bounds) { + nativeGetCharArrayBounds(nativePaint, text.toCharArray(), start, end - start, bidiFlags, + bounds); + } + + @LayoutlibDelegate + /*package*/ static void nativeGetCharArrayBounds(int nativePaint, char[] text, int index, + int count, int bidiFlags, Rect bounds) { + + // get the delegate from the native int. + Paint_Delegate delegate = sManager.getDelegate(nativePaint); + if (delegate == null) { + return; + } + + // FIXME should test if the main font can display all those characters. + // See MeasureText + if (delegate.mFonts.size() > 0) { + FontInfo mainInfo = delegate.mFonts.get(0); + + Rectangle2D rect = mainInfo.mFont.getStringBounds(text, index, index + count, + delegate.mFontContext); + bounds.set(0, 0, (int) rect.getWidth(), (int) rect.getHeight()); + } + } + + @LayoutlibDelegate + /*package*/ static void finalizer(int nativePaint) { + sManager.removeJavaReferenceFor(nativePaint); + } + + // ---- Private delegate/helper methods ---- + + /*package*/ Paint_Delegate() { + reset(); + } + + private Paint_Delegate(Paint_Delegate paint) { + set(paint); + } + + private void set(Paint_Delegate paint) { + mFlags = paint.mFlags; + mColor = paint.mColor; + mStyle = paint.mStyle; + mCap = paint.mCap; + mJoin = paint.mJoin; + mTextAlign = paint.mTextAlign; + mTypeface = paint.mTypeface; + mStrokeWidth = paint.mStrokeWidth; + mStrokeMiter = paint.mStrokeMiter; + mTextSize = paint.mTextSize; + mTextScaleX = paint.mTextScaleX; + mTextSkewX = paint.mTextSkewX; + mXfermode = paint.mXfermode; + mColorFilter = paint.mColorFilter; + mShader = paint.mShader; + mPathEffect = paint.mPathEffect; + mMaskFilter = paint.mMaskFilter; + mRasterizer = paint.mRasterizer; + mHintingMode = paint.mHintingMode; + updateFontObject(); + } + + private void reset() { + mFlags = Paint.DEFAULT_PAINT_FLAGS; + mColor = 0xFF000000; + mStyle = Paint.Style.FILL.nativeInt; + mCap = Paint.Cap.BUTT.nativeInt; + mJoin = Paint.Join.MITER.nativeInt; + mTextAlign = 0; + mTypeface = Typeface_Delegate.getDelegate(Typeface.sDefaults[0].native_instance); + mStrokeWidth = 1.f; + mStrokeMiter = 4.f; + mTextSize = 20.f; + mTextScaleX = 1.f; + mTextSkewX = 0.f; + mXfermode = null; + mColorFilter = null; + mShader = null; + mPathEffect = null; + mMaskFilter = null; + mRasterizer = null; + updateFontObject(); + mHintingMode = Paint.HINTING_ON; + } + + /** + * Update the {@link Font} object from the typeface, text size and scaling + */ + @SuppressWarnings("deprecation") + private void updateFontObject() { + if (mTypeface != null) { + // Get the fonts from the TypeFace object. + List fonts = mTypeface.getFonts(); + + // create new font objects as well as FontMetrics, based on the current text size + // and skew info. + ArrayList infoList = new ArrayList(fonts.size()); + for (Font font : fonts) { + FontInfo info = new FontInfo(); + info.mFont = font.deriveFont(mTextSize); + if (mTextScaleX != 1.0 || mTextSkewX != 0) { + // TODO: support skew + info.mFont = info.mFont.deriveFont(new AffineTransform( + mTextScaleX, mTextSkewX, 0, 1, 0, 0)); + } + info.mMetrics = Toolkit.getDefaultToolkit().getFontMetrics(info.mFont); + + infoList.add(info); + } + + mFonts = Collections.unmodifiableList(infoList); + } + } + + /*package*/ float measureText(char[] text, int index, int count, int bidiFlags) { + // TODO: find out what bidiFlags actually does. + + // WARNING: the logic in this method is similar to Canvas_Delegate.native_drawText + // Any change to this method should be reflected there as well + + if (mFonts.size() > 0) { + FontInfo mainFont = mFonts.get(0); + int i = index; + int lastIndex = index + count; + float total = 0f; + while (i < lastIndex) { + // always start with the main font. + int upTo = mainFont.mFont.canDisplayUpTo(text, i, lastIndex); + if (upTo == -1) { + // shortcut to exit + return total + mainFont.mMetrics.charsWidth(text, i, lastIndex - i); + } else if (upTo > 0) { + total += mainFont.mMetrics.charsWidth(text, i, upTo - i); + i = upTo; + // don't call continue at this point. Since it is certain the main font + // cannot display the font a index upTo (now ==i), we move on to the + // fallback fonts directly. + } + + // no char supported, attempt to read the next char(s) with the + // fallback font. In this case we only test the first character + // and then go back to test with the main font. + // Special test for 2-char characters. + boolean foundFont = false; + for (int f = 1 ; f < mFonts.size() ; f++) { + FontInfo fontInfo = mFonts.get(f); + + // need to check that the font can display the character. We test + // differently if the char is a high surrogate. + int charCount = Character.isHighSurrogate(text[i]) ? 2 : 1; + upTo = fontInfo.mFont.canDisplayUpTo(text, i, i + charCount); + if (upTo == -1) { + total += fontInfo.mMetrics.charsWidth(text, i, charCount); + i += charCount; + foundFont = true; + break; + + } + } + + // in case no font can display the char, measure it with the main font. + if (foundFont == false) { + int size = Character.isHighSurrogate(text[i]) ? 2 : 1; + total += mainFont.mMetrics.charsWidth(text, i, size); + i += size; + } + } + + return total; + } + + return 0; + } + + private float getFontMetrics(FontMetrics metrics) { + if (mFonts.size() > 0) { + java.awt.FontMetrics javaMetrics = mFonts.get(0).mMetrics; + if (metrics != null) { + // Android expects negative ascent so we invert the value from Java. + metrics.top = - javaMetrics.getMaxAscent(); + metrics.ascent = - javaMetrics.getAscent(); + metrics.descent = javaMetrics.getDescent(); + metrics.bottom = javaMetrics.getMaxDescent(); + metrics.leading = javaMetrics.getLeading(); + } + + return javaMetrics.getHeight(); + } + + return 0; + } + + private void setTextLocale(String locale) { + mLocale = new Locale(locale); + } + + private static void setFlag(Paint thisPaint, int flagMask, boolean flagValue) { + // get the delegate from the native int. + Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); + if (delegate == null) { + return; + } + + if (flagValue) { + delegate.mFlags |= flagMask; + } else { + delegate.mFlags &= ~flagMask; + } + } + +} diff --git a/tools/layoutlib/bridge/src/android/graphics/PathDashPathEffect_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/PathDashPathEffect_Delegate.java new file mode 100644 index 0000000000000..c448f0ec0f20b --- /dev/null +++ b/tools/layoutlib/bridge/src/android/graphics/PathDashPathEffect_Delegate.java @@ -0,0 +1,72 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.graphics; + +import com.android.layoutlib.bridge.impl.DelegateManager; +import com.android.tools.layoutlib.annotations.LayoutlibDelegate; + +import java.awt.Stroke; + +/** + * Delegate implementing the native methods of android.graphics.PathDashPathEffect + * + * Through the layoutlib_create tool, the original native methods of PathDashPathEffect have been + * replaced by calls to methods of the same name in this delegate class. + * + * This class behaves like the original native implementation, but in Java, keeping previously + * native data into its own objects and mapping them to int that are sent back and forth between + * it and the original PathDashPathEffect class. + * + * Because this extends {@link PathEffect_Delegate}, there's no need to use a {@link DelegateManager}, + * as all the Shader classes will be added to the manager owned by {@link PathEffect_Delegate}. + * + * @see PathEffect_Delegate + * + */ +public class PathDashPathEffect_Delegate extends PathEffect_Delegate { + + // ---- delegate data ---- + + // ---- Public Helper methods ---- + + @Override + public Stroke getStroke(Paint_Delegate paint) { + // FIXME + return null; + } + + @Override + public boolean isSupported() { + return false; + } + + @Override + public String getSupportMessage() { + return "Path Dash Path Effects are not supported in Layout Preview mode."; + } + + // ---- native methods ---- + + @LayoutlibDelegate + /*package*/ static int nativeCreate(int native_path, float advance, float phase, + int native_style) { + PathDashPathEffect_Delegate newDelegate = new PathDashPathEffect_Delegate(); + return sManager.addNewDelegate(newDelegate); + } + + // ---- Private delegate/helper methods ---- +} diff --git a/tools/layoutlib/bridge/src/android/graphics/PathEffect_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/PathEffect_Delegate.java new file mode 100644 index 0000000000000..bd2b6de480da2 --- /dev/null +++ b/tools/layoutlib/bridge/src/android/graphics/PathEffect_Delegate.java @@ -0,0 +1,69 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.graphics; + +import com.android.layoutlib.bridge.impl.DelegateManager; +import com.android.tools.layoutlib.annotations.LayoutlibDelegate; + +import java.awt.Stroke; + +/** + * Delegate implementing the native methods of android.graphics.PathEffect + * + * Through the layoutlib_create tool, the original native methods of PathEffect have been replaced + * by calls to methods of the same name in this delegate class. + * + * This class behaves like the original native implementation, but in Java, keeping previously + * native data into its own objects and mapping them to int that are sent back and forth between + * it and the original PathEffect class. + * + * This also serve as a base class for all PathEffect delegate classes. + * + * @see DelegateManager + * + */ +public abstract class PathEffect_Delegate { + + // ---- delegate manager ---- + protected static final DelegateManager sManager = + new DelegateManager(PathEffect_Delegate.class); + + // ---- delegate helper data ---- + + // ---- delegate data ---- + + // ---- Public Helper methods ---- + + public static PathEffect_Delegate getDelegate(int nativeShader) { + return sManager.getDelegate(nativeShader); + } + + public abstract Stroke getStroke(Paint_Delegate paint); + public abstract boolean isSupported(); + public abstract String getSupportMessage(); + + + // ---- native methods ---- + + @LayoutlibDelegate + /*package*/ static void nativeDestructor(int native_patheffect) { + sManager.removeJavaReferenceFor(native_patheffect); + } + + // ---- Private delegate/helper methods ---- + +} diff --git a/tools/layoutlib/bridge/src/android/graphics/Path_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/Path_Delegate.java new file mode 100644 index 0000000000000..64f19d310d2f2 --- /dev/null +++ b/tools/layoutlib/bridge/src/android/graphics/Path_Delegate.java @@ -0,0 +1,815 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.graphics; + +import com.android.ide.common.rendering.api.LayoutLog; +import com.android.layoutlib.bridge.Bridge; +import com.android.layoutlib.bridge.impl.DelegateManager; +import com.android.tools.layoutlib.annotations.LayoutlibDelegate; + +import android.graphics.Path.Direction; +import android.graphics.Path.FillType; + +import java.awt.Shape; +import java.awt.geom.AffineTransform; +import java.awt.geom.Arc2D; +import java.awt.geom.Area; +import java.awt.geom.Ellipse2D; +import java.awt.geom.GeneralPath; +import java.awt.geom.PathIterator; +import java.awt.geom.Point2D; +import java.awt.geom.Rectangle2D; +import java.awt.geom.RoundRectangle2D; + +/** + * Delegate implementing the native methods of android.graphics.Path + * + * Through the layoutlib_create tool, the original native methods of Path have been replaced + * by calls to methods of the same name in this delegate class. + * + * This class behaves like the original native implementation, but in Java, keeping previously + * native data into its own objects and mapping them to int that are sent back and forth between + * it and the original Path class. + * + * @see DelegateManager + * + */ +public final class Path_Delegate { + + // ---- delegate manager ---- + private static final DelegateManager sManager = + new DelegateManager(Path_Delegate.class); + + // ---- delegate data ---- + private FillType mFillType = FillType.WINDING; + private GeneralPath mPath = new GeneralPath(); + + private float mLastX = 0; + private float mLastY = 0; + + // ---- Public Helper methods ---- + + public static Path_Delegate getDelegate(int nPath) { + return sManager.getDelegate(nPath); + } + + public Shape getJavaShape() { + return mPath; + } + + public void setJavaShape(Shape shape) { + mPath.reset(); + mPath.append(shape, false /*connect*/); + } + + public void reset() { + mPath.reset(); + } + + public void setPathIterator(PathIterator iterator) { + mPath.reset(); + mPath.append(iterator, false /*connect*/); + } + + // ---- native methods ---- + + @LayoutlibDelegate + /*package*/ static int init1() { + // create the delegate + Path_Delegate newDelegate = new Path_Delegate(); + + return sManager.addNewDelegate(newDelegate); + } + + @LayoutlibDelegate + /*package*/ static int init2(int nPath) { + // create the delegate + Path_Delegate newDelegate = new Path_Delegate(); + + // get the delegate to copy, which could be null if nPath is 0 + Path_Delegate pathDelegate = sManager.getDelegate(nPath); + if (pathDelegate != null) { + newDelegate.set(pathDelegate); + } + + return sManager.addNewDelegate(newDelegate); + } + + @LayoutlibDelegate + /*package*/ static void native_reset(int nPath) { + Path_Delegate pathDelegate = sManager.getDelegate(nPath); + if (pathDelegate == null) { + return; + } + + pathDelegate.mPath.reset(); + } + + @LayoutlibDelegate + /*package*/ static void native_rewind(int nPath) { + // call out to reset since there's nothing to optimize in + // terms of data structs. + native_reset(nPath); + } + + @LayoutlibDelegate + /*package*/ static void native_set(int native_dst, int native_src) { + Path_Delegate pathDstDelegate = sManager.getDelegate(native_dst); + if (pathDstDelegate == null) { + return; + } + + Path_Delegate pathSrcDelegate = sManager.getDelegate(native_src); + if (pathSrcDelegate == null) { + return; + } + + pathDstDelegate.set(pathSrcDelegate); + } + + @LayoutlibDelegate + /*package*/ static int native_getFillType(int nPath) { + Path_Delegate pathDelegate = sManager.getDelegate(nPath); + if (pathDelegate == null) { + return 0; + } + + return pathDelegate.mFillType.nativeInt; + } + + @LayoutlibDelegate + /*package*/ static void native_setFillType(int nPath, int ft) { + Path_Delegate pathDelegate = sManager.getDelegate(nPath); + if (pathDelegate == null) { + return; + } + + pathDelegate.mFillType = Path.sFillTypeArray[ft]; + } + + @LayoutlibDelegate + /*package*/ static boolean native_isEmpty(int nPath) { + Path_Delegate pathDelegate = sManager.getDelegate(nPath); + if (pathDelegate == null) { + return true; + } + + return pathDelegate.isEmpty(); + } + + @LayoutlibDelegate + /*package*/ static boolean native_isRect(int nPath, RectF rect) { + Path_Delegate pathDelegate = sManager.getDelegate(nPath); + if (pathDelegate == null) { + return false; + } + + // create an Area that can test if the path is a rect + Area area = new Area(pathDelegate.mPath); + if (area.isRectangular()) { + if (rect != null) { + pathDelegate.fillBounds(rect); + } + + return true; + } + + return false; + } + + @LayoutlibDelegate + /*package*/ static void native_computeBounds(int nPath, RectF bounds) { + Path_Delegate pathDelegate = sManager.getDelegate(nPath); + if (pathDelegate == null) { + return; + } + + pathDelegate.fillBounds(bounds); + } + + @LayoutlibDelegate + /*package*/ static void native_incReserve(int nPath, int extraPtCount) { + // since we use a java2D path, there's no way to pre-allocate new points, + // so we do nothing. + } + + @LayoutlibDelegate + /*package*/ static void native_moveTo(int nPath, float x, float y) { + Path_Delegate pathDelegate = sManager.getDelegate(nPath); + if (pathDelegate == null) { + return; + } + + pathDelegate.moveTo(x, y); + } + + @LayoutlibDelegate + /*package*/ static void native_rMoveTo(int nPath, float dx, float dy) { + Path_Delegate pathDelegate = sManager.getDelegate(nPath); + if (pathDelegate == null) { + return; + } + + pathDelegate.rMoveTo(dx, dy); + } + + @LayoutlibDelegate + /*package*/ static void native_lineTo(int nPath, float x, float y) { + Path_Delegate pathDelegate = sManager.getDelegate(nPath); + if (pathDelegate == null) { + return; + } + + pathDelegate.lineTo(x, y); + } + + @LayoutlibDelegate + /*package*/ static void native_rLineTo(int nPath, float dx, float dy) { + Path_Delegate pathDelegate = sManager.getDelegate(nPath); + if (pathDelegate == null) { + return; + } + + pathDelegate.rLineTo(dx, dy); + } + + @LayoutlibDelegate + /*package*/ static void native_quadTo(int nPath, float x1, float y1, float x2, float y2) { + Path_Delegate pathDelegate = sManager.getDelegate(nPath); + if (pathDelegate == null) { + return; + } + + pathDelegate.quadTo(x1, y1, x2, y2); + } + + @LayoutlibDelegate + /*package*/ static void native_rQuadTo(int nPath, float dx1, float dy1, float dx2, float dy2) { + Path_Delegate pathDelegate = sManager.getDelegate(nPath); + if (pathDelegate == null) { + return; + } + + pathDelegate.rQuadTo(dx1, dy1, dx2, dy2); + } + + @LayoutlibDelegate + /*package*/ static void native_cubicTo(int nPath, float x1, float y1, + float x2, float y2, float x3, float y3) { + Path_Delegate pathDelegate = sManager.getDelegate(nPath); + if (pathDelegate == null) { + return; + } + + pathDelegate.cubicTo(x1, y1, x2, y2, x3, y3); + } + + @LayoutlibDelegate + /*package*/ static void native_rCubicTo(int nPath, float x1, float y1, + float x2, float y2, float x3, float y3) { + Path_Delegate pathDelegate = sManager.getDelegate(nPath); + if (pathDelegate == null) { + return; + } + + pathDelegate.rCubicTo(x1, y1, x2, y2, x3, y3); + } + + @LayoutlibDelegate + /*package*/ static void native_arcTo(int nPath, RectF oval, + float startAngle, float sweepAngle, boolean forceMoveTo) { + Path_Delegate pathDelegate = sManager.getDelegate(nPath); + if (pathDelegate == null) { + return; + } + + pathDelegate.arcTo(oval, startAngle, sweepAngle, forceMoveTo); + } + + @LayoutlibDelegate + /*package*/ static void native_close(int nPath) { + Path_Delegate pathDelegate = sManager.getDelegate(nPath); + if (pathDelegate == null) { + return; + } + + pathDelegate.close(); + } + + @LayoutlibDelegate + /*package*/ static void native_addRect(int nPath, RectF rect, int dir) { + Path_Delegate pathDelegate = sManager.getDelegate(nPath); + if (pathDelegate == null) { + return; + } + + pathDelegate.addRect(rect.left, rect.top, rect.right, rect.bottom, dir); + } + + @LayoutlibDelegate + /*package*/ static void native_addRect(int nPath, + float left, float top, float right, float bottom, int dir) { + Path_Delegate pathDelegate = sManager.getDelegate(nPath); + if (pathDelegate == null) { + return; + } + + pathDelegate.addRect(left, top, right, bottom, dir); + } + + @LayoutlibDelegate + /*package*/ static void native_addOval(int nPath, RectF oval, int dir) { + Path_Delegate pathDelegate = sManager.getDelegate(nPath); + if (pathDelegate == null) { + return; + } + + pathDelegate.mPath.append(new Ellipse2D.Float( + oval.left, oval.top, oval.width(), oval.height()), false); + } + + @LayoutlibDelegate + /*package*/ static void native_addCircle(int nPath, float x, float y, float radius, int dir) { + Path_Delegate pathDelegate = sManager.getDelegate(nPath); + if (pathDelegate == null) { + return; + } + + // because x/y is the center of the circle, need to offset this by the radius + pathDelegate.mPath.append(new Ellipse2D.Float( + x - radius, y - radius, radius * 2, radius * 2), false); + } + + @LayoutlibDelegate + /*package*/ static void native_addArc(int nPath, RectF oval, + float startAngle, float sweepAngle) { + Path_Delegate pathDelegate = sManager.getDelegate(nPath); + if (pathDelegate == null) { + return; + } + + // because x/y is the center of the circle, need to offset this by the radius + pathDelegate.mPath.append(new Arc2D.Float( + oval.left, oval.top, oval.width(), oval.height(), + -startAngle, -sweepAngle, Arc2D.OPEN), false); + } + + @LayoutlibDelegate + /*package*/ static void native_addRoundRect( + int nPath, RectF rect, float rx, float ry, int dir) { + + Path_Delegate pathDelegate = sManager.getDelegate(nPath); + if (pathDelegate == null) { + return; + } + + pathDelegate.mPath.append(new RoundRectangle2D.Float( + rect.left, rect.top, rect.width(), rect.height(), rx * 2, ry * 2), false); + } + + @LayoutlibDelegate + /*package*/ static void native_addRoundRect(int nPath, RectF rect, float[] radii, int dir) { + // Java2D doesn't support different rounded corners in each corner, so just use the + // first value. + native_addRoundRect(nPath, rect, radii[0], radii[1], dir); + + // there can be a case where this API is used but with similar values for all corners, so + // in that case we don't warn. + // we only care if 2 corners are different so just compare to the next one. + for (int i = 0 ; i < 3 ; i++) { + if (radii[i * 2] != radii[(i + 1) * 2] || radii[i * 2 + 1] != radii[(i + 1) * 2 + 1]) { + Bridge.getLog().fidelityWarning(LayoutLog.TAG_UNSUPPORTED, + "Different corner sizes are not supported in Path.addRoundRect.", + null, null /*data*/); + break; + } + } + } + + @LayoutlibDelegate + /*package*/ static void native_addPath(int nPath, int src, float dx, float dy) { + addPath(nPath, src, AffineTransform.getTranslateInstance(dx, dy)); + } + + @LayoutlibDelegate + /*package*/ static void native_addPath(int nPath, int src) { + addPath(nPath, src, null /*transform*/); + } + + @LayoutlibDelegate + /*package*/ static void native_addPath(int nPath, int src, int matrix) { + Matrix_Delegate matrixDelegate = Matrix_Delegate.getDelegate(matrix); + if (matrixDelegate == null) { + return; + } + + addPath(nPath, src, matrixDelegate.getAffineTransform()); + } + + @LayoutlibDelegate + /*package*/ static void native_offset(int nPath, float dx, float dy, int dst_path) { + Path_Delegate pathDelegate = sManager.getDelegate(nPath); + if (pathDelegate == null) { + return; + } + + // could be null if the int is 0; + Path_Delegate dstDelegate = sManager.getDelegate(dst_path); + + pathDelegate.offset(dx, dy, dstDelegate); + } + + @LayoutlibDelegate + /*package*/ static void native_offset(int nPath, float dx, float dy) { + native_offset(nPath, dx, dy, 0); + } + + @LayoutlibDelegate + /*package*/ static void native_setLastPoint(int nPath, float dx, float dy) { + Path_Delegate pathDelegate = sManager.getDelegate(nPath); + if (pathDelegate == null) { + return; + } + + pathDelegate.mLastX = dx; + pathDelegate.mLastY = dy; + } + + @LayoutlibDelegate + /*package*/ static void native_transform(int nPath, int matrix, + int dst_path) { + Path_Delegate pathDelegate = sManager.getDelegate(nPath); + if (pathDelegate == null) { + return; + } + + Matrix_Delegate matrixDelegate = Matrix_Delegate.getDelegate(matrix); + if (matrixDelegate == null) { + return; + } + + // this can be null if dst_path is 0 + Path_Delegate dstDelegate = sManager.getDelegate(dst_path); + + pathDelegate.transform(matrixDelegate, dstDelegate); + } + + @LayoutlibDelegate + /*package*/ static void native_transform(int nPath, int matrix) { + native_transform(nPath, matrix, 0); + } + + @LayoutlibDelegate + /*package*/ static void finalizer(int nPath) { + sManager.removeJavaReferenceFor(nPath); + } + + + // ---- Private helper methods ---- + + private void set(Path_Delegate delegate) { + mPath.reset(); + setFillType(delegate.mFillType); + mPath.append(delegate.mPath, false /*connect*/); + } + + private void setFillType(FillType fillType) { + mFillType = fillType; + mPath.setWindingRule(getWindingRule(fillType)); + } + + /** + * Returns the Java2D winding rules matching a given Android {@link FillType}. + * @param type the android fill type + * @return the matching java2d winding rule. + */ + private static int getWindingRule(FillType type) { + switch (type) { + case WINDING: + case INVERSE_WINDING: + return GeneralPath.WIND_NON_ZERO; + case EVEN_ODD: + case INVERSE_EVEN_ODD: + return GeneralPath.WIND_EVEN_ODD; + } + + assert false; + throw new IllegalArgumentException(); + } + + private static Direction getDirection(int direction) { + for (Direction d : Direction.values()) { + if (direction == d.nativeInt) { + return d; + } + } + + assert false; + return null; + } + + private static void addPath(int destPath, int srcPath, AffineTransform transform) { + Path_Delegate destPathDelegate = sManager.getDelegate(destPath); + if (destPathDelegate == null) { + return; + } + + Path_Delegate srcPathDelegate = sManager.getDelegate(srcPath); + if (srcPathDelegate == null) { + return; + } + + if (transform != null) { + destPathDelegate.mPath.append( + srcPathDelegate.mPath.getPathIterator(transform), false); + } else { + destPathDelegate.mPath.append(srcPathDelegate.mPath, false); + } + } + + + /** + * Returns whether the path is empty. + * @return true if the path is empty. + */ + private boolean isEmpty() { + return mPath.getCurrentPoint() == null; + } + + /** + * Fills the given {@link RectF} with the path bounds. + * @param bounds the RectF to be filled. + */ + private void fillBounds(RectF bounds) { + Rectangle2D rect = mPath.getBounds2D(); + bounds.left = (float)rect.getMinX(); + bounds.right = (float)rect.getMaxX(); + bounds.top = (float)rect.getMinY(); + bounds.bottom = (float)rect.getMaxY(); + } + + /** + * Set the beginning of the next contour to the point (x,y). + * + * @param x The x-coordinate of the start of a new contour + * @param y The y-coordinate of the start of a new contour + */ + private void moveTo(float x, float y) { + mPath.moveTo(mLastX = x, mLastY = y); + } + + /** + * Set the beginning of the next contour relative to the last point on the + * previous contour. If there is no previous contour, this is treated the + * same as moveTo(). + * + * @param dx The amount to add to the x-coordinate of the end of the + * previous contour, to specify the start of a new contour + * @param dy The amount to add to the y-coordinate of the end of the + * previous contour, to specify the start of a new contour + */ + private void rMoveTo(float dx, float dy) { + dx += mLastX; + dy += mLastY; + mPath.moveTo(mLastX = dx, mLastY = dy); + } + + /** + * Add a line from the last point to the specified point (x,y). + * If no moveTo() call has been made for this contour, the first point is + * automatically set to (0,0). + * + * @param x The x-coordinate of the end of a line + * @param y The y-coordinate of the end of a line + */ + private void lineTo(float x, float y) { + mPath.lineTo(mLastX = x, mLastY = y); + } + + /** + * Same as lineTo, but the coordinates are considered relative to the last + * point on this contour. If there is no previous point, then a moveTo(0,0) + * is inserted automatically. + * + * @param dx The amount to add to the x-coordinate of the previous point on + * this contour, to specify a line + * @param dy The amount to add to the y-coordinate of the previous point on + * this contour, to specify a line + */ + private void rLineTo(float dx, float dy) { + if (isEmpty()) { + mPath.moveTo(mLastX = 0, mLastY = 0); + } + dx += mLastX; + dy += mLastY; + mPath.lineTo(mLastX = dx, mLastY = dy); + } + + /** + * Add a quadratic bezier from the last point, approaching control point + * (x1,y1), and ending at (x2,y2). If no moveTo() call has been made for + * this contour, the first point is automatically set to (0,0). + * + * @param x1 The x-coordinate of the control point on a quadratic curve + * @param y1 The y-coordinate of the control point on a quadratic curve + * @param x2 The x-coordinate of the end point on a quadratic curve + * @param y2 The y-coordinate of the end point on a quadratic curve + */ + private void quadTo(float x1, float y1, float x2, float y2) { + mPath.quadTo(x1, y1, mLastX = x2, mLastY = y2); + } + + /** + * Same as quadTo, but the coordinates are considered relative to the last + * point on this contour. If there is no previous point, then a moveTo(0,0) + * is inserted automatically. + * + * @param dx1 The amount to add to the x-coordinate of the last point on + * this contour, for the control point of a quadratic curve + * @param dy1 The amount to add to the y-coordinate of the last point on + * this contour, for the control point of a quadratic curve + * @param dx2 The amount to add to the x-coordinate of the last point on + * this contour, for the end point of a quadratic curve + * @param dy2 The amount to add to the y-coordinate of the last point on + * this contour, for the end point of a quadratic curve + */ + private void rQuadTo(float dx1, float dy1, float dx2, float dy2) { + if (isEmpty()) { + mPath.moveTo(mLastX = 0, mLastY = 0); + } + dx1 += mLastX; + dy1 += mLastY; + dx2 += mLastX; + dy2 += mLastY; + mPath.quadTo(dx1, dy1, mLastX = dx2, mLastY = dy2); + } + + /** + * Add a cubic bezier from the last point, approaching control points + * (x1,y1) and (x2,y2), and ending at (x3,y3). If no moveTo() call has been + * made for this contour, the first point is automatically set to (0,0). + * + * @param x1 The x-coordinate of the 1st control point on a cubic curve + * @param y1 The y-coordinate of the 1st control point on a cubic curve + * @param x2 The x-coordinate of the 2nd control point on a cubic curve + * @param y2 The y-coordinate of the 2nd control point on a cubic curve + * @param x3 The x-coordinate of the end point on a cubic curve + * @param y3 The y-coordinate of the end point on a cubic curve + */ + private void cubicTo(float x1, float y1, float x2, float y2, + float x3, float y3) { + mPath.curveTo(x1, y1, x2, y2, mLastX = x3, mLastY = y3); + } + + /** + * Same as cubicTo, but the coordinates are considered relative to the + * current point on this contour. If there is no previous point, then a + * moveTo(0,0) is inserted automatically. + */ + private void rCubicTo(float dx1, float dy1, float dx2, float dy2, + float dx3, float dy3) { + if (isEmpty()) { + mPath.moveTo(mLastX = 0, mLastY = 0); + } + dx1 += mLastX; + dy1 += mLastY; + dx2 += mLastX; + dy2 += mLastY; + dx3 += mLastX; + dy3 += mLastY; + mPath.curveTo(dx1, dy1, dx2, dy2, mLastX = dx3, mLastY = dy3); + } + + /** + * Append the specified arc to the path as a new contour. If the start of + * the path is different from the path's current last point, then an + * automatic lineTo() is added to connect the current contour to the + * start of the arc. However, if the path is empty, then we call moveTo() + * with the first point of the arc. The sweep angle is tread mod 360. + * + * @param oval The bounds of oval defining shape and size of the arc + * @param startAngle Starting angle (in degrees) where the arc begins + * @param sweepAngle Sweep angle (in degrees) measured clockwise, treated + * mod 360. + * @param forceMoveTo If true, always begin a new contour with the arc + */ + private void arcTo(RectF oval, float startAngle, float sweepAngle, boolean forceMoveTo) { + Arc2D arc = new Arc2D.Float(oval.left, oval.top, oval.width(), oval.height(), -startAngle, + -sweepAngle, Arc2D.OPEN); + mPath.append(arc, true /*connect*/); + + resetLastPointFromPath(); + } + + /** + * Close the current contour. If the current point is not equal to the + * first point of the contour, a line segment is automatically added. + */ + private void close() { + mPath.closePath(); + } + + private void resetLastPointFromPath() { + Point2D last = mPath.getCurrentPoint(); + mLastX = (float) last.getX(); + mLastY = (float) last.getY(); + } + + /** + * Add a closed rectangle contour to the path + * + * @param left The left side of a rectangle to add to the path + * @param top The top of a rectangle to add to the path + * @param right The right side of a rectangle to add to the path + * @param bottom The bottom of a rectangle to add to the path + * @param dir The direction to wind the rectangle's contour + */ + private void addRect(float left, float top, float right, float bottom, + int dir) { + moveTo(left, top); + + Direction direction = getDirection(dir); + + switch (direction) { + case CW: + lineTo(right, top); + lineTo(right, bottom); + lineTo(left, bottom); + break; + case CCW: + lineTo(left, bottom); + lineTo(right, bottom); + lineTo(right, top); + break; + } + + close(); + + resetLastPointFromPath(); + } + + /** + * Offset the path by (dx,dy), returning true on success + * + * @param dx The amount in the X direction to offset the entire path + * @param dy The amount in the Y direction to offset the entire path + * @param dst The translated path is written here. If this is null, then + * the original path is modified. + */ + public void offset(float dx, float dy, Path_Delegate dst) { + GeneralPath newPath = new GeneralPath(); + + PathIterator iterator = mPath.getPathIterator(new AffineTransform(0, 0, dx, 0, 0, dy)); + + newPath.append(iterator, false /*connect*/); + + if (dst != null) { + dst.mPath = newPath; + } else { + mPath = newPath; + } + } + + /** + * Transform the points in this path by matrix, and write the answer + * into dst. If dst is null, then the the original path is modified. + * + * @param matrix The matrix to apply to the path + * @param dst The transformed path is written here. If dst is null, + * then the the original path is modified + */ + public void transform(Matrix_Delegate matrix, Path_Delegate dst) { + if (matrix.hasPerspective()) { + assert false; + Bridge.getLog().fidelityWarning(LayoutLog.TAG_MATRIX_AFFINE, + "android.graphics.Path#transform() only " + + "supports affine transformations.", null, null /*data*/); + } + + GeneralPath newPath = new GeneralPath(); + + PathIterator iterator = mPath.getPathIterator(matrix.getAffineTransform()); + + newPath.append(iterator, false /*connect*/); + + if (dst != null) { + dst.mPath = newPath; + } else { + mPath = newPath; + } + } +} diff --git a/tools/layoutlib/bridge/src/android/graphics/PixelXorXfermode_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/PixelXorXfermode_Delegate.java new file mode 100644 index 0000000000000..4ab044bd107ab --- /dev/null +++ b/tools/layoutlib/bridge/src/android/graphics/PixelXorXfermode_Delegate.java @@ -0,0 +1,70 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.graphics; + +import com.android.layoutlib.bridge.impl.DelegateManager; +import com.android.tools.layoutlib.annotations.LayoutlibDelegate; + +import java.awt.Composite; + +/** + * Delegate implementing the native methods of android.graphics.PixelXorXfermode + * + * Through the layoutlib_create tool, the original native methods of PixelXorXfermode have been + * replaced by calls to methods of the same name in this delegate class. + * + * This class behaves like the original native implementation, but in Java, keeping previously + * native data into its own objects and mapping them to int that are sent back and forth between + * it and the original PixelXorXfermode class. + * + * Because this extends {@link Xfermode_Delegate}, there's no need to use a + * {@link DelegateManager}, as all the PathEffect classes will be added to the manager owned by + * {@link Xfermode_Delegate}. + * + * @see Xfermode_Delegate + */ +public class PixelXorXfermode_Delegate extends Xfermode_Delegate { + // ---- delegate data ---- + + // ---- Public Helper methods ---- + + @Override + public Composite getComposite(int alpha) { + // FIXME + return null; + } + + @Override + public boolean isSupported() { + return false; + } + + @Override + public String getSupportMessage() { + return "Pixel XOR Xfermodes are not supported in Layout Preview mode."; + } + + // ---- native methods ---- + + @LayoutlibDelegate + /*package*/ static int nativeCreate(int opColor) { + PixelXorXfermode_Delegate newDelegate = new PixelXorXfermode_Delegate(); + return sManager.addNewDelegate(newDelegate); + } + + // ---- Private delegate/helper methods ---- +} diff --git a/tools/layoutlib/bridge/src/android/graphics/PorterDuffColorFilter_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/PorterDuffColorFilter_Delegate.java new file mode 100644 index 0000000000000..c45dbaad344d2 --- /dev/null +++ b/tools/layoutlib/bridge/src/android/graphics/PorterDuffColorFilter_Delegate.java @@ -0,0 +1,71 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.graphics; + +import com.android.layoutlib.bridge.impl.DelegateManager; +import com.android.tools.layoutlib.annotations.LayoutlibDelegate; + +/** + * Delegate implementing the native methods of android.graphics.PorterDuffColorFilter + * + * Through the layoutlib_create tool, the original native methods of PorterDuffColorFilter have + * been replaced by calls to methods of the same name in this delegate class. + * + * This class behaves like the original native implementation, but in Java, keeping previously + * native data into its own objects and mapping them to int that are sent back and forth between + * it and the original PorterDuffColorFilter class. + * + * Because this extends {@link ColorFilter_Delegate}, there's no need to use a + * {@link DelegateManager}, as all the Shader classes will be added to the manager + * owned by {@link ColorFilter_Delegate}. + * + * @see ColorFilter_Delegate + * + */ +public class PorterDuffColorFilter_Delegate extends ColorFilter_Delegate { + + // ---- delegate data ---- + + // ---- Public Helper methods ---- + + @Override + public boolean isSupported() { + return false; + } + + @Override + public String getSupportMessage() { + return "PorterDuff Color Filters are not supported."; + } + + // ---- native methods ---- + + @LayoutlibDelegate + /*package*/ static int native_CreatePorterDuffFilter(int srcColor, int porterDuffMode) { + PorterDuffColorFilter_Delegate newDelegate = new PorterDuffColorFilter_Delegate(); + return sManager.addNewDelegate(newDelegate); + } + + @LayoutlibDelegate + /*package*/ static int nCreatePorterDuffFilter(int nativeFilter, int srcColor, + int porterDuffMode) { + // pass + return 0; + } + + // ---- Private delegate/helper methods ---- +} diff --git a/tools/layoutlib/bridge/src/android/graphics/PorterDuffXfermode_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/PorterDuffXfermode_Delegate.java new file mode 100644 index 0000000000000..4301c1a2c5d73 --- /dev/null +++ b/tools/layoutlib/bridge/src/android/graphics/PorterDuffXfermode_Delegate.java @@ -0,0 +1,140 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.graphics; + +import com.android.ide.common.rendering.api.LayoutLog; +import com.android.layoutlib.bridge.Bridge; +import com.android.layoutlib.bridge.impl.DelegateManager; +import com.android.tools.layoutlib.annotations.LayoutlibDelegate; + +import java.awt.AlphaComposite; +import java.awt.Composite; + +/** + * Delegate implementing the native methods of android.graphics.PorterDuffXfermode + * + * Through the layoutlib_create tool, the original native methods of PorterDuffXfermode have been + * replaced by calls to methods of the same name in this delegate class. + * + * This class behaves like the original native implementation, but in Java, keeping previously + * native data into its own objects and mapping them to int that are sent back and forth between + * it and the original PorterDuffXfermode class. + * + * Because this extends {@link Xfermode_Delegate}, there's no need to use a + * {@link DelegateManager}, as all the PathEffect classes will be added to the manager owned by + * {@link Xfermode_Delegate}. + * + */ +public class PorterDuffXfermode_Delegate extends Xfermode_Delegate { + + // ---- delegate data ---- + + private final int mMode; + + // ---- Public Helper methods ---- + + public PorterDuff.Mode getMode() { + return getPorterDuffMode(mMode); + } + + @Override + public Composite getComposite(int alpha) { + return getComposite(getPorterDuffMode(mMode), alpha); + } + + @Override + public boolean isSupported() { + return true; + } + + @Override + public String getSupportMessage() { + // no message since isSupported returns true; + return null; + } + + public static PorterDuff.Mode getPorterDuffMode(int mode) { + for (PorterDuff.Mode m : PorterDuff.Mode.values()) { + if (m.nativeInt == mode) { + return m; + } + } + + Bridge.getLog().error(LayoutLog.TAG_BROKEN, + String.format("Unknown PorterDuff.Mode: %d", mode), null /*data*/); + assert false; + return PorterDuff.Mode.SRC_OVER; + } + + public static Composite getComposite(PorterDuff.Mode mode, int alpha) { + float falpha = alpha != 0xFF ? (float)alpha / 255.f : 1.f; + switch (mode) { + case CLEAR: + return AlphaComposite.getInstance(AlphaComposite.CLEAR, falpha); + case DARKEN: + break; + case DST: + return AlphaComposite.getInstance(AlphaComposite.DST, falpha); + case DST_ATOP: + return AlphaComposite.getInstance(AlphaComposite.DST_ATOP, falpha); + case DST_IN: + return AlphaComposite.getInstance(AlphaComposite.DST_IN, falpha); + case DST_OUT: + return AlphaComposite.getInstance(AlphaComposite.DST_OUT, falpha); + case DST_OVER: + return AlphaComposite.getInstance(AlphaComposite.DST_OVER, falpha); + case LIGHTEN: + break; + case MULTIPLY: + break; + case SCREEN: + break; + case SRC: + return AlphaComposite.getInstance(AlphaComposite.SRC, falpha); + case SRC_ATOP: + return AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, falpha); + case SRC_IN: + return AlphaComposite.getInstance(AlphaComposite.SRC_IN, falpha); + case SRC_OUT: + return AlphaComposite.getInstance(AlphaComposite.SRC_OUT, falpha); + case SRC_OVER: + return AlphaComposite.getInstance(AlphaComposite.SRC_OVER, falpha); + case XOR: + return AlphaComposite.getInstance(AlphaComposite.XOR, falpha); + } + + Bridge.getLog().fidelityWarning(LayoutLog.TAG_BROKEN, + String.format("Unsupported PorterDuff Mode: %s", mode.name()), + null, null /*data*/); + + return AlphaComposite.getInstance(AlphaComposite.SRC_OVER, falpha); + } + + // ---- native methods ---- + + @LayoutlibDelegate + /*package*/ static int nativeCreateXfermode(int mode) { + PorterDuffXfermode_Delegate newDelegate = new PorterDuffXfermode_Delegate(mode); + return sManager.addNewDelegate(newDelegate); + } + + // ---- Private delegate/helper methods ---- + + private PorterDuffXfermode_Delegate(int mode) { + mMode = mode; + } +} diff --git a/tools/layoutlib/bridge/src/android/graphics/RadialGradient_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/RadialGradient_Delegate.java new file mode 100644 index 0000000000000..3fe45fae2a3df --- /dev/null +++ b/tools/layoutlib/bridge/src/android/graphics/RadialGradient_Delegate.java @@ -0,0 +1,215 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.graphics; + +import com.android.ide.common.rendering.api.LayoutLog; +import com.android.layoutlib.bridge.Bridge; +import com.android.layoutlib.bridge.impl.DelegateManager; +import com.android.tools.layoutlib.annotations.LayoutlibDelegate; + +import android.graphics.Shader.TileMode; + +/** + * Delegate implementing the native methods of android.graphics.RadialGradient + * + * Through the layoutlib_create tool, the original native methods of RadialGradient have been + * replaced by calls to methods of the same name in this delegate class. + * + * This class behaves like the original native implementation, but in Java, keeping previously + * native data into its own objects and mapping them to int that are sent back and forth between + * it and the original RadialGradient class. + * + * Because this extends {@link Shader_Delegate}, there's no need to use a {@link DelegateManager}, + * as all the Shader classes will be added to the manager owned by {@link Shader_Delegate}. + * + * @see Shader_Delegate + * + */ +public class RadialGradient_Delegate extends Gradient_Delegate { + + // ---- delegate data ---- + private java.awt.Paint mJavaPaint; + + // ---- Public Helper methods ---- + + @Override + public java.awt.Paint getJavaPaint() { + return mJavaPaint; + } + + // ---- native methods ---- + + @LayoutlibDelegate + /*package*/ static int nativeCreate1(float x, float y, float radius, + int colors[], float positions[], int tileMode) { + RadialGradient_Delegate newDelegate = new RadialGradient_Delegate(x, y, radius, + colors, positions, Shader_Delegate.getTileMode(tileMode)); + return sManager.addNewDelegate(newDelegate); + } + + @LayoutlibDelegate + /*package*/ static int nativeCreate2(float x, float y, float radius, + int color0, int color1, int tileMode) { + return nativeCreate1(x, y, radius, new int[] { color0, color1 }, null /*positions*/, + tileMode); + } + + @LayoutlibDelegate + /*package*/ static int nativePostCreate1(int native_shader, float x, float y, float radius, + int colors[], float positions[], int tileMode) { + // nothing to be done here. + return 0; + } + + @LayoutlibDelegate + /*package*/ static int nativePostCreate2(int native_shader, float x, float y, float radius, + int color0, int color1, int tileMode) { + // nothing to be done here. + return 0; + } + + // ---- Private delegate/helper methods ---- + + /** + * Create a shader that draws a radial gradient given the center and radius. + * + * @param x The x-coordinate of the center of the radius + * @param y The y-coordinate of the center of the radius + * @param radius Must be positive. The radius of the circle for this + * gradient + * @param colors The colors to be distributed between the center and edge of + * the circle + * @param positions May be NULL. The relative position of each corresponding + * color in the colors array. If this is NULL, the the colors are + * distributed evenly between the center and edge of the circle. + * @param tile The Shader tiling mode + */ + private RadialGradient_Delegate(float x, float y, float radius, int colors[], float positions[], + TileMode tile) { + super(colors, positions); + mJavaPaint = new RadialGradientPaint(x, y, radius, mColors, mPositions, tile); + } + + private class RadialGradientPaint extends GradientPaint { + + private final float mX; + private final float mY; + private final float mRadius; + + public RadialGradientPaint(float x, float y, float radius, + int[] colors, float[] positions, TileMode mode) { + super(colors, positions, mode); + mX = x; + mY = y; + mRadius = radius; + } + + @Override + public java.awt.PaintContext createContext( + java.awt.image.ColorModel colorModel, + java.awt.Rectangle deviceBounds, + java.awt.geom.Rectangle2D userBounds, + java.awt.geom.AffineTransform xform, + java.awt.RenderingHints hints) { + precomputeGradientColors(); + + java.awt.geom.AffineTransform canvasMatrix; + try { + canvasMatrix = xform.createInverse(); + } catch (java.awt.geom.NoninvertibleTransformException e) { + Bridge.getLog().fidelityWarning(LayoutLog.TAG_MATRIX_INVERSE, + "Unable to inverse matrix in RadialGradient", e, null /*data*/); + canvasMatrix = new java.awt.geom.AffineTransform(); + } + + java.awt.geom.AffineTransform localMatrix = getLocalMatrix(); + try { + localMatrix = localMatrix.createInverse(); + } catch (java.awt.geom.NoninvertibleTransformException e) { + Bridge.getLog().fidelityWarning(LayoutLog.TAG_MATRIX_INVERSE, + "Unable to inverse matrix in RadialGradient", e, null /*data*/); + localMatrix = new java.awt.geom.AffineTransform(); + } + + return new RadialGradientPaintContext(canvasMatrix, localMatrix, colorModel); + } + + private class RadialGradientPaintContext implements java.awt.PaintContext { + + private final java.awt.geom.AffineTransform mCanvasMatrix; + private final java.awt.geom.AffineTransform mLocalMatrix; + private final java.awt.image.ColorModel mColorModel; + + public RadialGradientPaintContext( + java.awt.geom.AffineTransform canvasMatrix, + java.awt.geom.AffineTransform localMatrix, + java.awt.image.ColorModel colorModel) { + mCanvasMatrix = canvasMatrix; + mLocalMatrix = localMatrix; + mColorModel = colorModel; + } + + @Override + public void dispose() { + } + + @Override + public java.awt.image.ColorModel getColorModel() { + return mColorModel; + } + + @Override + public java.awt.image.Raster getRaster(int x, int y, int w, int h) { + java.awt.image.BufferedImage image = new java.awt.image.BufferedImage(w, h, + java.awt.image.BufferedImage.TYPE_INT_ARGB); + + int[] data = new int[w*h]; + + // compute distance from each point to the center, and figure out the distance from + // it. + int index = 0; + float[] pt1 = new float[2]; + float[] pt2 = new float[2]; + for (int iy = 0 ; iy < h ; iy++) { + for (int ix = 0 ; ix < w ; ix++) { + // handle the canvas transform + pt1[0] = x + ix; + pt1[1] = y + iy; + mCanvasMatrix.transform(pt1, 0, pt2, 0, 1); + + // handle the local matrix + pt1[0] = pt2[0] - mX; + pt1[1] = pt2[1] - mY; + mLocalMatrix.transform(pt1, 0, pt2, 0, 1); + + float _x = pt2[0]; + float _y = pt2[1]; + float distance = (float) Math.sqrt(_x * _x + _y * _y); + + data[index++] = getGradientColor(distance / mRadius); + } + } + + image.setRGB(0 /*startX*/, 0 /*startY*/, w, h, data, 0 /*offset*/, w /*scansize*/); + + return image.getRaster(); + } + + } + } + +} diff --git a/tools/layoutlib/bridge/src/android/graphics/Rasterizer_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/Rasterizer_Delegate.java new file mode 100644 index 0000000000000..2812b6b2539bd --- /dev/null +++ b/tools/layoutlib/bridge/src/android/graphics/Rasterizer_Delegate.java @@ -0,0 +1,64 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.graphics; + +import com.android.layoutlib.bridge.impl.DelegateManager; +import com.android.tools.layoutlib.annotations.LayoutlibDelegate; + +/** + * Delegate implementing the native methods of android.graphics.Rasterizer + * + * Through the layoutlib_create tool, the original native methods of Rasterizer have been replaced + * by calls to methods of the same name in this delegate class. + * + * This class behaves like the original native implementation, but in Java, keeping previously + * native data into its own objects and mapping them to int that are sent back and forth between + * it and the original Rasterizer class. + * + * This also serve as a base class for all Rasterizer delegate classes. + * + * @see DelegateManager + * + */ +public abstract class Rasterizer_Delegate { + + // ---- delegate manager ---- + protected static final DelegateManager sManager = + new DelegateManager(Rasterizer_Delegate.class); + + // ---- delegate helper data ---- + + // ---- delegate data ---- + + // ---- Public Helper methods ---- + + public static Rasterizer_Delegate getDelegate(int nativeShader) { + return sManager.getDelegate(nativeShader); + } + + public abstract boolean isSupported(); + public abstract String getSupportMessage(); + + // ---- native methods ---- + + @LayoutlibDelegate + /*package*/ static void finalizer(int native_instance) { + sManager.removeJavaReferenceFor(native_instance); + } + + // ---- Private delegate/helper methods ---- +} diff --git a/tools/layoutlib/bridge/src/android/graphics/Region_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/Region_Delegate.java new file mode 100644 index 0000000000000..cb31b8fdb7115 --- /dev/null +++ b/tools/layoutlib/bridge/src/android/graphics/Region_Delegate.java @@ -0,0 +1,484 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.graphics; + +import com.android.ide.common.rendering.api.LayoutLog; +import com.android.layoutlib.bridge.Bridge; +import com.android.layoutlib.bridge.impl.DelegateManager; +import com.android.tools.layoutlib.annotations.LayoutlibDelegate; + +import android.os.Parcel; + +import java.awt.Rectangle; +import java.awt.Shape; +import java.awt.geom.AffineTransform; +import java.awt.geom.Area; +import java.awt.geom.Rectangle2D; + +/** + * Delegate implementing the native methods of android.graphics.Region + * + * Through the layoutlib_create tool, the original native methods of Region have been replaced + * by calls to methods of the same name in this delegate class. + * + * This class behaves like the original native implementation, but in Java, keeping previously + * native data into its own objects and mapping them to int that are sent back and forth between + * it and the original Region class. + * + * This also serve as a base class for all Region delegate classes. + * + * @see DelegateManager + * + */ +public class Region_Delegate { + + // ---- delegate manager ---- + protected static final DelegateManager sManager = + new DelegateManager(Region_Delegate.class); + + // ---- delegate helper data ---- + + // ---- delegate data ---- + private Area mArea = new Area(); + + // ---- Public Helper methods ---- + + public static Region_Delegate getDelegate(int nativeShader) { + return sManager.getDelegate(nativeShader); + } + + public Area getJavaArea() { + return mArea; + } + + /** + * Combines two {@link Shape} into another one (actually an {@link Area}), according + * to the given {@link Region.Op}. + * + * If the Op is not one that combines two shapes, then this return null + * + * @param shape1 the firt shape to combine which can be null if there's no original clip. + * @param shape2 the 2nd shape to combine + * @param regionOp the operande for the combine + * @return a new area or null. + */ + public static Area combineShapes(Shape shape1, Shape shape2, int regionOp) { + if (regionOp == Region.Op.DIFFERENCE.nativeInt) { + // if shape1 is null (empty), then the result is null. + if (shape1 == null) { + return null; + } + + // result is always a new area. + Area result = new Area(shape1); + result.subtract(shape2 instanceof Area ? (Area) shape2 : new Area(shape2)); + return result; + + } else if (regionOp == Region.Op.INTERSECT.nativeInt) { + // if shape1 is null, then the result is simply shape2. + if (shape1 == null) { + return new Area(shape2); + } + + // result is always a new area. + Area result = new Area(shape1); + result.intersect(shape2 instanceof Area ? (Area) shape2 : new Area(shape2)); + return result; + + } else if (regionOp == Region.Op.UNION.nativeInt) { + // if shape1 is null, then the result is simply shape2. + if (shape1 == null) { + return new Area(shape2); + } + + // result is always a new area. + Area result = new Area(shape1); + result.add(shape2 instanceof Area ? (Area) shape2 : new Area(shape2)); + return result; + + } else if (regionOp == Region.Op.XOR.nativeInt) { + // if shape1 is null, then the result is simply shape2 + if (shape1 == null) { + return new Area(shape2); + } + + // result is always a new area. + Area result = new Area(shape1); + result.exclusiveOr(shape2 instanceof Area ? (Area) shape2 : new Area(shape2)); + return result; + + } else if (regionOp == Region.Op.REVERSE_DIFFERENCE.nativeInt) { + // result is always a new area. + Area result = new Area(shape2); + + if (shape1 != null) { + result.subtract(shape1 instanceof Area ? (Area) shape1 : new Area(shape1)); + } + + return result; + } + + return null; + } + + // ---- native methods ---- + + @LayoutlibDelegate + /*package*/ static boolean isEmpty(Region thisRegion) { + Region_Delegate regionDelegate = sManager.getDelegate(thisRegion.mNativeRegion); + if (regionDelegate == null) { + return true; + } + + return regionDelegate.mArea.isEmpty(); + } + + @LayoutlibDelegate + /*package*/ static boolean isRect(Region thisRegion) { + Region_Delegate regionDelegate = sManager.getDelegate(thisRegion.mNativeRegion); + if (regionDelegate == null) { + return true; + } + + return regionDelegate.mArea.isRectangular(); + } + + @LayoutlibDelegate + /*package*/ static boolean isComplex(Region thisRegion) { + Region_Delegate regionDelegate = sManager.getDelegate(thisRegion.mNativeRegion); + if (regionDelegate == null) { + return true; + } + + return regionDelegate.mArea.isSingular() == false; + } + + @LayoutlibDelegate + /*package*/ static boolean contains(Region thisRegion, int x, int y) { + Region_Delegate regionDelegate = sManager.getDelegate(thisRegion.mNativeRegion); + if (regionDelegate == null) { + return false; + } + + return regionDelegate.mArea.contains(x, y); + } + + @LayoutlibDelegate + /*package*/ static boolean quickContains(Region thisRegion, + int left, int top, int right, int bottom) { + Region_Delegate regionDelegate = sManager.getDelegate(thisRegion.mNativeRegion); + if (regionDelegate == null) { + return false; + } + + return regionDelegate.mArea.isRectangular() && + regionDelegate.mArea.contains(left, top, right - left, bottom - top); + } + + @LayoutlibDelegate + /*package*/ static boolean quickReject(Region thisRegion, + int left, int top, int right, int bottom) { + Region_Delegate regionDelegate = sManager.getDelegate(thisRegion.mNativeRegion); + if (regionDelegate == null) { + return false; + } + + return regionDelegate.mArea.isEmpty() || + regionDelegate.mArea.intersects(left, top, right - left, bottom - top) == false; + } + + @LayoutlibDelegate + /*package*/ static boolean quickReject(Region thisRegion, Region rgn) { + Region_Delegate regionDelegate = sManager.getDelegate(thisRegion.mNativeRegion); + if (regionDelegate == null) { + return false; + } + + Region_Delegate targetRegionDelegate = sManager.getDelegate(rgn.mNativeRegion); + if (targetRegionDelegate == null) { + return false; + } + + return regionDelegate.mArea.isEmpty() || + regionDelegate.mArea.getBounds().intersects( + targetRegionDelegate.mArea.getBounds()) == false; + + } + + @LayoutlibDelegate + /*package*/ static void translate(Region thisRegion, int dx, int dy, Region dst) { + Region_Delegate regionDelegate = sManager.getDelegate(thisRegion.mNativeRegion); + if (regionDelegate == null) { + return; + } + + Region_Delegate targetRegionDelegate = sManager.getDelegate(dst.mNativeRegion); + if (targetRegionDelegate == null) { + return; + } + + if (regionDelegate.mArea.isEmpty()) { + targetRegionDelegate.mArea = new Area(); + } else { + targetRegionDelegate.mArea = new Area(regionDelegate.mArea); + AffineTransform mtx = new AffineTransform(); + mtx.translate(dx, dy); + targetRegionDelegate.mArea.transform(mtx); + } + } + + @LayoutlibDelegate + /*package*/ static void scale(Region thisRegion, float scale, Region dst) { + Region_Delegate regionDelegate = sManager.getDelegate(thisRegion.mNativeRegion); + if (regionDelegate == null) { + return; + } + + Region_Delegate targetRegionDelegate = sManager.getDelegate(dst.mNativeRegion); + if (targetRegionDelegate == null) { + return; + } + + if (regionDelegate.mArea.isEmpty()) { + targetRegionDelegate.mArea = new Area(); + } else { + targetRegionDelegate.mArea = new Area(regionDelegate.mArea); + AffineTransform mtx = new AffineTransform(); + mtx.scale(scale, scale); + targetRegionDelegate.mArea.transform(mtx); + } + } + + @LayoutlibDelegate + /*package*/ static int nativeConstructor() { + Region_Delegate newDelegate = new Region_Delegate(); + return sManager.addNewDelegate(newDelegate); + } + + @LayoutlibDelegate + /*package*/ static void nativeDestructor(int native_region) { + sManager.removeJavaReferenceFor(native_region); + } + + @LayoutlibDelegate + /*package*/ static boolean nativeSetRegion(int native_dst, int native_src) { + Region_Delegate dstRegion = sManager.getDelegate(native_dst); + if (dstRegion == null) { + return true; + } + + Region_Delegate srcRegion = sManager.getDelegate(native_src); + if (srcRegion == null) { + return true; + } + + dstRegion.mArea.reset(); + dstRegion.mArea.add(srcRegion.mArea); + + return true; + } + + @LayoutlibDelegate + /*package*/ static boolean nativeSetRect(int native_dst, + int left, int top, int right, int bottom) { + Region_Delegate dstRegion = sManager.getDelegate(native_dst); + if (dstRegion == null) { + return true; + } + + dstRegion.mArea = new Area(new Rectangle2D.Float(left, top, right - left, bottom - top)); + return dstRegion.mArea.getBounds().isEmpty() == false; + } + + @LayoutlibDelegate + /*package*/ static boolean nativeSetPath(int native_dst, int native_path, int native_clip) { + Region_Delegate dstRegion = sManager.getDelegate(native_dst); + if (dstRegion == null) { + return true; + } + + Path_Delegate path = Path_Delegate.getDelegate(native_path); + if (path == null) { + return true; + } + + dstRegion.mArea = new Area(path.getJavaShape()); + + Region_Delegate clip = sManager.getDelegate(native_clip); + if (clip != null) { + dstRegion.mArea.subtract(clip.getJavaArea()); + } + + return dstRegion.mArea.getBounds().isEmpty() == false; + } + + @LayoutlibDelegate + /*package*/ static boolean nativeGetBounds(int native_region, Rect rect) { + Region_Delegate region = sManager.getDelegate(native_region); + if (region == null) { + return true; + } + + Rectangle bounds = region.mArea.getBounds(); + if (bounds.isEmpty()) { + rect.left = rect.top = rect.right = rect.bottom = 0; + return false; + } + + rect.left = bounds.x; + rect.top = bounds.y; + rect.right = bounds.x + bounds.width; + rect.bottom = bounds.y + bounds.height; + return true; + } + + @LayoutlibDelegate + /*package*/ static boolean nativeGetBoundaryPath(int native_region, int native_path) { + Region_Delegate region = sManager.getDelegate(native_region); + if (region == null) { + return false; + } + + Path_Delegate path = Path_Delegate.getDelegate(native_path); + if (path == null) { + return false; + } + + if (region.mArea.isEmpty()) { + path.reset(); + return false; + } + + path.setPathIterator(region.mArea.getPathIterator(new AffineTransform())); + return true; + } + + @LayoutlibDelegate + /*package*/ static boolean nativeOp(int native_dst, + int left, int top, int right, int bottom, int op) { + Region_Delegate region = sManager.getDelegate(native_dst); + if (region == null) { + return false; + } + + region.mArea = combineShapes(region.mArea, + new Rectangle2D.Float(left, top, right - left, bottom - top), op); + + assert region.mArea != null; + if (region.mArea != null) { + region.mArea = new Area(); + } + + return region.mArea.getBounds().isEmpty() == false; + } + + @LayoutlibDelegate + /*package*/ static boolean nativeOp(int native_dst, Rect rect, int native_region, int op) { + Region_Delegate region = sManager.getDelegate(native_dst); + if (region == null) { + return false; + } + + region.mArea = combineShapes(region.mArea, + new Rectangle2D.Float(rect.left, rect.top, rect.width(), rect.height()), op); + + assert region.mArea != null; + if (region.mArea != null) { + region.mArea = new Area(); + } + + return region.mArea.getBounds().isEmpty() == false; + } + + @LayoutlibDelegate + /*package*/ static boolean nativeOp(int native_dst, + int native_region1, int native_region2, int op) { + Region_Delegate dstRegion = sManager.getDelegate(native_dst); + if (dstRegion == null) { + return true; + } + + Region_Delegate region1 = sManager.getDelegate(native_region1); + if (region1 == null) { + return false; + } + + Region_Delegate region2 = sManager.getDelegate(native_region2); + if (region2 == null) { + return false; + } + + dstRegion.mArea = combineShapes(region1.mArea, region2.mArea, op); + + assert dstRegion.mArea != null; + if (dstRegion.mArea != null) { + dstRegion.mArea = new Area(); + } + + return dstRegion.mArea.getBounds().isEmpty() == false; + + } + + @LayoutlibDelegate + /*package*/ static int nativeCreateFromParcel(Parcel p) { + // This is only called by Region.CREATOR (Parcelable.Creator), which is only + // used during aidl call so really this should not be called. + Bridge.getLog().error(LayoutLog.TAG_UNSUPPORTED, + "AIDL is not suppored, and therefore Regions cannot be created from parcels.", + null /*data*/); + return 0; + } + + @LayoutlibDelegate + /*package*/ static boolean nativeWriteToParcel(int native_region, + Parcel p) { + // This is only called when sending a region through aidl, so really this should not + // be called. + Bridge.getLog().error(LayoutLog.TAG_UNSUPPORTED, + "AIDL is not suppored, and therefore Regions cannot be written to parcels.", + null /*data*/); + return false; + } + + @LayoutlibDelegate + /*package*/ static boolean nativeEquals(int native_r1, int native_r2) { + Region_Delegate region1 = sManager.getDelegate(native_r1); + if (region1 == null) { + return false; + } + + Region_Delegate region2 = sManager.getDelegate(native_r2); + if (region2 == null) { + return false; + } + + return region1.mArea.equals(region2.mArea); + } + + @LayoutlibDelegate + /*package*/ static String nativeToString(int native_region) { + Region_Delegate region = sManager.getDelegate(native_region); + if (region == null) { + return "not found"; + } + + return region.mArea.toString(); + } + + // ---- Private delegate/helper methods ---- + +} diff --git a/tools/layoutlib/bridge/src/android/graphics/Shader_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/Shader_Delegate.java new file mode 100644 index 0000000000000..368c0384ded57 --- /dev/null +++ b/tools/layoutlib/bridge/src/android/graphics/Shader_Delegate.java @@ -0,0 +1,105 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.graphics; + +import com.android.layoutlib.bridge.impl.DelegateManager; +import com.android.tools.layoutlib.annotations.LayoutlibDelegate; + +import android.graphics.Shader.TileMode; + +/** + * Delegate implementing the native methods of android.graphics.Shader + * + * Through the layoutlib_create tool, the original native methods of Shader have been replaced + * by calls to methods of the same name in this delegate class. + * + * This class behaves like the original native implementation, but in Java, keeping previously + * native data into its own objects and mapping them to int that are sent back and forth between + * it and the original Shader class. + * + * This also serve as a base class for all Shader delegate classes. + * + * @see DelegateManager + * + */ +public abstract class Shader_Delegate { + + // ---- delegate manager ---- + protected static final DelegateManager sManager = + new DelegateManager(Shader_Delegate.class); + + // ---- delegate helper data ---- + + // ---- delegate data ---- + private Matrix_Delegate mLocalMatrix = null; + + // ---- Public Helper methods ---- + + public static Shader_Delegate getDelegate(int nativeShader) { + return sManager.getDelegate(nativeShader); + } + + /** + * Returns the {@link TileMode} matching the given int. + * @param tileMode the tile mode int value + * @return the TileMode enum. + */ + public static TileMode getTileMode(int tileMode) { + for (TileMode tm : TileMode.values()) { + if (tm.nativeInt == tileMode) { + return tm; + } + } + + assert false; + return TileMode.CLAMP; + } + + public abstract java.awt.Paint getJavaPaint(); + public abstract boolean isSupported(); + public abstract String getSupportMessage(); + + // ---- native methods ---- + + @LayoutlibDelegate + /*package*/ static void nativeDestructor(int native_shader, int native_skiaShader) { + sManager.removeJavaReferenceFor(native_shader); + } + + @LayoutlibDelegate + /*package*/ static void nativeSetLocalMatrix(int native_shader, int native_skiaShader, + int matrix_instance) { + // get the delegate from the native int. + Shader_Delegate shaderDelegate = sManager.getDelegate(native_shader); + if (shaderDelegate == null) { + return; + } + + shaderDelegate.mLocalMatrix = Matrix_Delegate.getDelegate(matrix_instance); + } + + // ---- Private delegate/helper methods ---- + + protected java.awt.geom.AffineTransform getLocalMatrix() { + if (mLocalMatrix != null) { + return mLocalMatrix.getAffineTransform(); + } + + return new java.awt.geom.AffineTransform(); + } + +} diff --git a/tools/layoutlib/bridge/src/android/graphics/SumPathEffect_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/SumPathEffect_Delegate.java new file mode 100644 index 0000000000000..410df0cf72f50 --- /dev/null +++ b/tools/layoutlib/bridge/src/android/graphics/SumPathEffect_Delegate.java @@ -0,0 +1,71 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.graphics; + +import com.android.layoutlib.bridge.impl.DelegateManager; +import com.android.tools.layoutlib.annotations.LayoutlibDelegate; + +import java.awt.Stroke; + +/** + * Delegate implementing the native methods of android.graphics.SumPathEffect + * + * Through the layoutlib_create tool, the original native methods of SumPathEffect have been + * replaced by calls to methods of the same name in this delegate class. + * + * This class behaves like the original native implementation, but in Java, keeping previously + * native data into its own objects and mapping them to int that are sent back and forth between + * it and the original SumPathEffect class. + * + * Because this extends {@link PathEffect_Delegate}, there's no need to use a {@link DelegateManager}, + * as all the Shader classes will be added to the manager owned by {@link PathEffect_Delegate}. + * + * @see PathEffect_Delegate + * + */ +public class SumPathEffect_Delegate extends PathEffect_Delegate { + + // ---- delegate data ---- + + // ---- Public Helper methods ---- + + @Override + public Stroke getStroke(Paint_Delegate paint) { + // FIXME + return null; + } + + @Override + public boolean isSupported() { + return false; + } + + @Override + public String getSupportMessage() { + return "Sum Path Effects are not supported in Layout Preview mode."; + } + + // ---- native methods ---- + + @LayoutlibDelegate + /*package*/ static int nativeCreate(int first, int second) { + SumPathEffect_Delegate newDelegate = new SumPathEffect_Delegate(); + return sManager.addNewDelegate(newDelegate); + } + + // ---- Private delegate/helper methods ---- +} diff --git a/tools/layoutlib/bridge/src/android/graphics/SweepGradient_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/SweepGradient_Delegate.java new file mode 100644 index 0000000000000..13ae12e5a9fa0 --- /dev/null +++ b/tools/layoutlib/bridge/src/android/graphics/SweepGradient_Delegate.java @@ -0,0 +1,222 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.graphics; + +import com.android.ide.common.rendering.api.LayoutLog; +import com.android.layoutlib.bridge.Bridge; +import com.android.layoutlib.bridge.impl.DelegateManager; +import com.android.tools.layoutlib.annotations.LayoutlibDelegate; + +/** + * Delegate implementing the native methods of android.graphics.SweepGradient + * + * Through the layoutlib_create tool, the original native methods of SweepGradient have been + * replaced by calls to methods of the same name in this delegate class. + * + * This class behaves like the original native implementation, but in Java, keeping previously + * native data into its own objects and mapping them to int that are sent back and forth between + * it and the original SweepGradient class. + * + * Because this extends {@link Shader_Delegate}, there's no need to use a {@link DelegateManager}, + * as all the Shader classes will be added to the manager owned by {@link Shader_Delegate}. + * + * @see Shader_Delegate + * + */ +public class SweepGradient_Delegate extends Gradient_Delegate { + + // ---- delegate data ---- + private java.awt.Paint mJavaPaint; + + // ---- Public Helper methods ---- + + @Override + public java.awt.Paint getJavaPaint() { + return mJavaPaint; + } + + // ---- native methods ---- + + @LayoutlibDelegate + /*package*/ static int nativeCreate1(float x, float y, int colors[], float positions[]) { + SweepGradient_Delegate newDelegate = new SweepGradient_Delegate(x, y, colors, positions); + return sManager.addNewDelegate(newDelegate); + } + + @LayoutlibDelegate + /*package*/ static int nativeCreate2(float x, float y, int color0, int color1) { + return nativeCreate1(x, y, new int[] { color0, color1 }, null /*positions*/); + } + + @LayoutlibDelegate + /*package*/ static int nativePostCreate1(int native_shader, float cx, float cy, + int[] colors, float[] positions) { + // nothing to be done here. + return 0; + } + + @LayoutlibDelegate + /*package*/ static int nativePostCreate2(int native_shader, float cx, float cy, + int color0, int color1) { + // nothing to be done here. + return 0; + } + + // ---- Private delegate/helper methods ---- + + /** + * A subclass of Shader that draws a sweep gradient around a center point. + * + * @param cx The x-coordinate of the center + * @param cy The y-coordinate of the center + * @param colors The colors to be distributed between around the center. + * There must be at least 2 colors in the array. + * @param positions May be NULL. The relative position of + * each corresponding color in the colors array, beginning + * with 0 and ending with 1.0. If the values are not + * monotonic, the drawing may produce unexpected results. + * If positions is NULL, then the colors are automatically + * spaced evenly. + */ + private SweepGradient_Delegate(float cx, float cy, + int colors[], float positions[]) { + super(colors, positions); + mJavaPaint = new SweepGradientPaint(cx, cy, mColors, mPositions); + } + + private class SweepGradientPaint extends GradientPaint { + + private final float mCx; + private final float mCy; + + public SweepGradientPaint(float cx, float cy, int[] colors, + float[] positions) { + super(colors, positions, null /*tileMode*/); + mCx = cx; + mCy = cy; + } + + @Override + public java.awt.PaintContext createContext( + java.awt.image.ColorModel colorModel, + java.awt.Rectangle deviceBounds, + java.awt.geom.Rectangle2D userBounds, + java.awt.geom.AffineTransform xform, + java.awt.RenderingHints hints) { + precomputeGradientColors(); + + java.awt.geom.AffineTransform canvasMatrix; + try { + canvasMatrix = xform.createInverse(); + } catch (java.awt.geom.NoninvertibleTransformException e) { + Bridge.getLog().fidelityWarning(LayoutLog.TAG_MATRIX_INVERSE, + "Unable to inverse matrix in SweepGradient", e, null /*data*/); + canvasMatrix = new java.awt.geom.AffineTransform(); + } + + java.awt.geom.AffineTransform localMatrix = getLocalMatrix(); + try { + localMatrix = localMatrix.createInverse(); + } catch (java.awt.geom.NoninvertibleTransformException e) { + Bridge.getLog().fidelityWarning(LayoutLog.TAG_MATRIX_INVERSE, + "Unable to inverse matrix in SweepGradient", e, null /*data*/); + localMatrix = new java.awt.geom.AffineTransform(); + } + + return new SweepGradientPaintContext(canvasMatrix, localMatrix, colorModel); + } + + private class SweepGradientPaintContext implements java.awt.PaintContext { + + private final java.awt.geom.AffineTransform mCanvasMatrix; + private final java.awt.geom.AffineTransform mLocalMatrix; + private final java.awt.image.ColorModel mColorModel; + + public SweepGradientPaintContext( + java.awt.geom.AffineTransform canvasMatrix, + java.awt.geom.AffineTransform localMatrix, + java.awt.image.ColorModel colorModel) { + mCanvasMatrix = canvasMatrix; + mLocalMatrix = localMatrix; + mColorModel = colorModel; + } + + @Override + public void dispose() { + } + + @Override + public java.awt.image.ColorModel getColorModel() { + return mColorModel; + } + + @Override + public java.awt.image.Raster getRaster(int x, int y, int w, int h) { + java.awt.image.BufferedImage image = new java.awt.image.BufferedImage(w, h, + java.awt.image.BufferedImage.TYPE_INT_ARGB); + + int[] data = new int[w*h]; + + // compute angle from each point to the center, and figure out the distance from + // it. + int index = 0; + float[] pt1 = new float[2]; + float[] pt2 = new float[2]; + for (int iy = 0 ; iy < h ; iy++) { + for (int ix = 0 ; ix < w ; ix++) { + // handle the canvas transform + pt1[0] = x + ix; + pt1[1] = y + iy; + mCanvasMatrix.transform(pt1, 0, pt2, 0, 1); + + // handle the local matrix + pt1[0] = pt2[0] - mCx; + pt1[1] = pt2[1] - mCy; + mLocalMatrix.transform(pt1, 0, pt2, 0, 1); + + float dx = pt2[0]; + float dy = pt2[1]; + + float angle; + if (dx == 0) { + angle = (float) (dy < 0 ? 3 * Math.PI / 2 : Math.PI / 2); + } else if (dy == 0) { + angle = (float) (dx < 0 ? Math.PI : 0); + } else { + angle = (float) Math.atan(dy / dx); + if (dx > 0) { + if (dy < 0) { + angle += Math.PI * 2; + } + } else { + angle += Math.PI; + } + } + + // convert to 0-1. value and get color + data[index++] = getGradientColor((float) (angle / (2 * Math.PI))); + } + } + + image.setRGB(0 /*startX*/, 0 /*startY*/, w, h, data, 0 /*offset*/, w /*scansize*/); + + return image.getRaster(); + } + + } + } +} diff --git a/tools/layoutlib/bridge/src/android/graphics/Typeface_Accessor.java b/tools/layoutlib/bridge/src/android/graphics/Typeface_Accessor.java new file mode 100644 index 0000000000000..adad2ac55f276 --- /dev/null +++ b/tools/layoutlib/bridge/src/android/graphics/Typeface_Accessor.java @@ -0,0 +1,27 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.graphics; + +/** + * Class allowing access to package-protected methods/fields. + */ +public class Typeface_Accessor { + + public static void resetDefaults() { + Typeface.sDefaults = null; + } +} diff --git a/tools/layoutlib/bridge/src/android/graphics/Typeface_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/Typeface_Delegate.java new file mode 100644 index 0000000000000..8701cc8068a65 --- /dev/null +++ b/tools/layoutlib/bridge/src/android/graphics/Typeface_Delegate.java @@ -0,0 +1,211 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.graphics; + +import com.android.ide.common.rendering.api.LayoutLog; +import com.android.layoutlib.bridge.Bridge; +import com.android.layoutlib.bridge.impl.DelegateManager; +import com.android.layoutlib.bridge.impl.FontLoader; +import com.android.tools.layoutlib.annotations.LayoutlibDelegate; + +import android.content.res.AssetManager; + +import java.awt.Font; +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +/** + * Delegate implementing the native methods of android.graphics.Typeface + * + * Through the layoutlib_create tool, the original native methods of Typeface have been replaced + * by calls to methods of the same name in this delegate class. + * + * This class behaves like the original native implementation, but in Java, keeping previously + * native data into its own objects and mapping them to int that are sent back and forth between + * it and the original Typeface class. + * + * @see DelegateManager + * + */ +public final class Typeface_Delegate { + + private static final String SYSTEM_FONTS = "/system/fonts/"; + + // ---- delegate manager ---- + private static final DelegateManager sManager = + new DelegateManager(Typeface_Delegate.class); + + // ---- delegate helper data ---- + private static final String DEFAULT_FAMILY = "sans-serif"; + + private static FontLoader sFontLoader; + private static final List sPostInitDelegate = + new ArrayList(); + + // ---- delegate data ---- + + private final String mFamily; + private int mStyle; + private List mFonts; + + + // ---- Public Helper methods ---- + + public static synchronized void init(FontLoader fontLoader) { + sFontLoader = fontLoader; + + for (Typeface_Delegate delegate : sPostInitDelegate) { + delegate.init(); + } + sPostInitDelegate.clear(); + } + + public static Typeface_Delegate getDelegate(int nativeTypeface) { + return sManager.getDelegate(nativeTypeface); + } + + public static List getFonts(Typeface typeface) { + return getFonts(typeface.native_instance); + } + + public static List getFonts(int native_int) { + Typeface_Delegate delegate = sManager.getDelegate(native_int); + if (delegate == null) { + return null; + } + + return delegate.getFonts(); + } + + public List getFonts() { + return mFonts; + } + + // ---- native methods ---- + + @LayoutlibDelegate + /*package*/ static synchronized int nativeCreate(String familyName, int style) { + if (familyName == null) { + familyName = DEFAULT_FAMILY; + } + + Typeface_Delegate newDelegate = new Typeface_Delegate(familyName, style); + if (sFontLoader != null) { + newDelegate.init(); + } else { + // font loader has not been initialized yet, add the delegate to a list of delegates + // to init when the font loader is initialized. + // There won't be any rendering before this happens anyway. + sPostInitDelegate.add(newDelegate); + } + + return sManager.addNewDelegate(newDelegate); + } + + @LayoutlibDelegate + /*package*/ static synchronized int nativeCreateFromTypeface(int native_instance, int style) { + Typeface_Delegate delegate = sManager.getDelegate(native_instance); + if (delegate == null) { + return 0; + } + + Typeface_Delegate newDelegate = new Typeface_Delegate(delegate.mFamily, style); + if (sFontLoader != null) { + newDelegate.init(); + } else { + // font loader has not been initialized yet, add the delegate to a list of delegates + // to init when the font loader is initialized. + // There won't be any rendering before this happens anyway. + sPostInitDelegate.add(newDelegate); + } + + return sManager.addNewDelegate(newDelegate); + } + + @LayoutlibDelegate + /*package*/ static synchronized int nativeCreateFromAsset(AssetManager mgr, String path) { + Bridge.getLog().fidelityWarning(LayoutLog.TAG_UNSUPPORTED, + "Typeface.createFromAsset() is not supported.", null /*throwable*/, null /*data*/); + return 0; + } + + @LayoutlibDelegate + /*package*/ static synchronized int nativeCreateFromFile(String path) { + if (path.startsWith(SYSTEM_FONTS) ) { + String relativePath = path.substring(SYSTEM_FONTS.length()); + File f = new File(sFontLoader.getOsFontsLocation(), relativePath); + + try { + Font font = Font.createFont(Font.TRUETYPE_FONT, f); + if (font != null) { + Typeface_Delegate newDelegate = new Typeface_Delegate(font); + return sManager.addNewDelegate(newDelegate); + } + } catch (Exception e) { + Bridge.getLog().fidelityWarning(LayoutLog.TAG_BROKEN, + String.format("Unable to load font %1$s", relativePath), + null /*throwable*/, null /*data*/); + } + } else { + Bridge.getLog().fidelityWarning(LayoutLog.TAG_UNSUPPORTED, + "Typeface.createFromFile() can only work with platform fonts located in " + + SYSTEM_FONTS, + null /*throwable*/, null /*data*/); + } + + + // return a copy of the base font + return nativeCreate(null, 0); + } + + @LayoutlibDelegate + /*package*/ static void nativeUnref(int native_instance) { + sManager.removeJavaReferenceFor(native_instance); + } + + @LayoutlibDelegate + /*package*/ static int nativeGetStyle(int native_instance) { + Typeface_Delegate delegate = sManager.getDelegate(native_instance); + if (delegate == null) { + return 0; + } + + return delegate.mStyle; + } + + // ---- Private delegate/helper methods ---- + + private Typeface_Delegate(String family, int style) { + mFamily = family; + mStyle = style; + } + + private Typeface_Delegate(Font font) { + mFamily = font.getFamily(); + mStyle = Typeface.NORMAL; + + mFonts = sFontLoader.getFallbackFonts(mStyle); + + // insert the font glyph first. + mFonts.add(0, font); + } + + private void init() { + mFonts = sFontLoader.getFont(mFamily, mStyle); + } +} diff --git a/tools/layoutlib/bridge/src/android/graphics/Xfermode_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/Xfermode_Delegate.java new file mode 100644 index 0000000000000..962d69cb6e8d1 --- /dev/null +++ b/tools/layoutlib/bridge/src/android/graphics/Xfermode_Delegate.java @@ -0,0 +1,69 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.graphics; + +import com.android.layoutlib.bridge.impl.DelegateManager; +import com.android.tools.layoutlib.annotations.LayoutlibDelegate; + +import java.awt.Composite; + +/** + * Delegate implementing the native methods of android.graphics.Xfermode + * + * Through the layoutlib_create tool, the original native methods of Xfermode have been replaced + * by calls to methods of the same name in this delegate class. + * + * This class behaves like the original native implementation, but in Java, keeping previously + * native data into its own objects and mapping them to int that are sent back and forth between + * it and the original Xfermode class. + * + * This also serve as a base class for all Xfermode delegate classes. + * + * @see DelegateManager + * + */ +public abstract class Xfermode_Delegate { + + // ---- delegate manager ---- + protected static final DelegateManager sManager = + new DelegateManager(Xfermode_Delegate.class); + + // ---- delegate helper data ---- + + // ---- delegate data ---- + + // ---- Public Helper methods ---- + + public static Xfermode_Delegate getDelegate(int native_instance) { + return sManager.getDelegate(native_instance); + } + + public abstract Composite getComposite(int alpha); + public abstract boolean isSupported(); + public abstract String getSupportMessage(); + + + // ---- native methods ---- + + @LayoutlibDelegate + /*package*/ static void finalizer(int native_instance) { + sManager.removeJavaReferenceFor(native_instance); + } + + // ---- Private delegate/helper methods ---- + +} diff --git a/tools/layoutlib/bridge/src/android/os/Build_Delegate.java b/tools/layoutlib/bridge/src/android/os/Build_Delegate.java new file mode 100644 index 0000000000000..ff82a5e25f551 --- /dev/null +++ b/tools/layoutlib/bridge/src/android/os/Build_Delegate.java @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.os; + +import com.android.layoutlib.bridge.Bridge; +import com.android.layoutlib.bridge.impl.DelegateManager; +import com.android.tools.layoutlib.annotations.LayoutlibDelegate; + +import java.util.Map; + +/** + * Delegate implementing the native methods of android.os.Build + * + * Through the layoutlib_create tool, the original native methods of Build have been replaced + * by calls to methods of the same name in this delegate class. + * + * Because it's a stateless class to start with, there's no need to keep a {@link DelegateManager} + * around to map int to instance of the delegate. + * + */ +public class Build_Delegate { + + @LayoutlibDelegate + /*package*/ static String getString(String property) { + Map properties = Bridge.getPlatformProperties(); + String value = properties.get(property); + if (value != null) { + return value; + } + + return Build.UNKNOWN; + } + +} diff --git a/tools/layoutlib/bridge/src/android/os/HandlerThread_Delegate.java b/tools/layoutlib/bridge/src/android/os/HandlerThread_Delegate.java new file mode 100644 index 0000000000000..afbe97c06ebb5 --- /dev/null +++ b/tools/layoutlib/bridge/src/android/os/HandlerThread_Delegate.java @@ -0,0 +1,80 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.os; + +import com.android.layoutlib.bridge.android.BridgeContext; +import com.android.layoutlib.bridge.impl.RenderAction; +import com.android.tools.layoutlib.annotations.LayoutlibDelegate; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Delegate overriding selected methods of android.os.HandlerThread + * + * Through the layoutlib_create tool, selected methods of Handler have been replaced + * by calls to methods of the same name in this delegate class. + * + * + */ +public class HandlerThread_Delegate { + + private static Map> sThreads = + new HashMap>(); + + public static void cleanUp(BridgeContext context) { + List list = sThreads.get(context); + if (list != null) { + for (HandlerThread thread : list) { + thread.quit(); + } + + list.clear(); + sThreads.remove(context); + } + } + + // -------- Delegate methods + + @LayoutlibDelegate + /*package*/ static void run(HandlerThread theThread) { + // record the thread so that it can be quit() on clean up. + BridgeContext context = RenderAction.getCurrentContext(); + List list = sThreads.get(context); + if (list == null) { + list = new ArrayList(); + sThreads.put(context, list); + } + + list.add(theThread); + + // ---- START DEFAULT IMPLEMENTATION. + + theThread.mTid = Process.myTid(); + Looper.prepare(); + synchronized (theThread) { + theThread.mLooper = Looper.myLooper(); + theThread.notifyAll(); + } + Process.setThreadPriority(theThread.mPriority); + theThread.onLooperPrepared(); + Looper.loop(); + theThread.mTid = -1; + } +} diff --git a/tools/layoutlib/bridge/src/android/os/Handler_Delegate.java b/tools/layoutlib/bridge/src/android/os/Handler_Delegate.java new file mode 100644 index 0000000000000..2152c8ad19aee --- /dev/null +++ b/tools/layoutlib/bridge/src/android/os/Handler_Delegate.java @@ -0,0 +1,57 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.os; + +import com.android.tools.layoutlib.annotations.LayoutlibDelegate; + + +/** + * Delegate overriding selected methods of android.os.Handler + * + * Through the layoutlib_create tool, selected methods of Handler have been replaced + * by calls to methods of the same name in this delegate class. + * + * + */ +public class Handler_Delegate { + + // -------- Delegate methods + + @LayoutlibDelegate + /*package*/ static boolean sendMessageAtTime(Handler handler, Message msg, long uptimeMillis) { + // get the callback + IHandlerCallback callback = sCallbacks.get(); + if (callback != null) { + callback.sendMessageAtTime(handler, msg, uptimeMillis); + } + return true; + } + + // -------- Delegate implementation + + public interface IHandlerCallback { + void sendMessageAtTime(Handler handler, Message msg, long uptimeMillis); + } + + private final static ThreadLocal sCallbacks = + new ThreadLocal(); + + public static void setCallback(IHandlerCallback callback) { + sCallbacks.set(callback); + } + +} diff --git a/tools/layoutlib/bridge/src/android/os/Looper_Accessor.java b/tools/layoutlib/bridge/src/android/os/Looper_Accessor.java new file mode 100644 index 0000000000000..09f3e47d7a146 --- /dev/null +++ b/tools/layoutlib/bridge/src/android/os/Looper_Accessor.java @@ -0,0 +1,47 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package android.os; + +import java.lang.reflect.Field; + +/** + * Class allowing access to package-protected methods/fields. + */ +public class Looper_Accessor { + + public static void cleanupThread() { + // clean up the looper + Looper.sThreadLocal.remove(); + try { + Field sMainLooper = Looper.class.getDeclaredField("sMainLooper"); + sMainLooper.setAccessible(true); + sMainLooper.set(null, null); + } catch (SecurityException e) { + catchReflectionException(); + } catch (IllegalArgumentException e) { + catchReflectionException(); + } catch (NoSuchFieldException e) { + catchReflectionException(); + } catch (IllegalAccessException e) { + catchReflectionException(); + } + + } + + private static void catchReflectionException() { + assert(false); + } +} diff --git a/tools/layoutlib/bridge/src/android/os/ServiceManager.java b/tools/layoutlib/bridge/src/android/os/ServiceManager.java new file mode 100644 index 0000000000000..6a68ee29c9cb1 --- /dev/null +++ b/tools/layoutlib/bridge/src/android/os/ServiceManager.java @@ -0,0 +1,72 @@ +/* + * Copyright (C) 2009 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.os; + +import java.util.Map; + +public final class ServiceManager { + + /** + * Returns a reference to a service with the given name. + * + * @param name the name of the service to get + * @return a reference to the service, or null if the service doesn't exist + */ + public static IBinder getService(String name) { + return null; + } + + /** + * Place a new @a service called @a name into the service + * manager. + * + * @param name the name of the new service + * @param service the service object + */ + public static void addService(String name, IBinder service) { + // pass + } + + /** + * Retrieve an existing service called @a name from the + * service manager. Non-blocking. + */ + public static IBinder checkService(String name) { + return null; + } + + /** + * Return a list of all currently running services. + */ + public static String[] listServices() throws RemoteException { + // actual implementation returns null sometimes, so it's ok + // to return null instead of an empty list. + return null; + } + + /** + * This is only intended to be called when the process is first being brought + * up and bound by the activity manager. There is only one thread in the process + * at that time, so no locking is done. + * + * @param cache the cache of service references + * @hide + */ + public static void initServiceCache(Map cache) { + // pass + } +} diff --git a/tools/layoutlib/bridge/src/android/os/SystemClock_Delegate.java b/tools/layoutlib/bridge/src/android/os/SystemClock_Delegate.java new file mode 100644 index 0000000000000..fd594f79c2373 --- /dev/null +++ b/tools/layoutlib/bridge/src/android/os/SystemClock_Delegate.java @@ -0,0 +1,106 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.os; + +import com.android.layoutlib.bridge.impl.DelegateManager; +import com.android.tools.layoutlib.annotations.LayoutlibDelegate; + +/** + * Delegate implementing the native methods of android.os.SystemClock + * + * Through the layoutlib_create tool, the original native methods of SystemClock have been replaced + * by calls to methods of the same name in this delegate class. + * + * Because it's a stateless class to start with, there's no need to keep a {@link DelegateManager} + * around to map int to instance of the delegate. + * + */ +public class SystemClock_Delegate { + private static long sBootTime = System.currentTimeMillis(); + private static long sBootTimeNano = System.nanoTime(); + + @LayoutlibDelegate + /*package*/ static boolean setCurrentTimeMillis(long millis) { + return true; + } + + /** + * Returns milliseconds since boot, not counting time spent in deep sleep. + * Note: This value may get reset occasionally (before it would + * otherwise wrap around). + * + * @return milliseconds of non-sleep uptime since boot. + */ + @LayoutlibDelegate + /*package*/ static long uptimeMillis() { + return System.currentTimeMillis() - sBootTime; + } + + /** + * Returns milliseconds since boot, including time spent in sleep. + * + * @return elapsed milliseconds since boot. + */ + @LayoutlibDelegate + /*package*/ static long elapsedRealtime() { + return System.currentTimeMillis() - sBootTime; + } + + /** + * Returns nanoseconds since boot, including time spent in sleep. + * + * @return elapsed nanoseconds since boot. + */ + @LayoutlibDelegate + /*package*/ static long elapsedRealtimeNanos() { + return System.nanoTime() - sBootTimeNano; + } + + /** + * Returns milliseconds running in the current thread. + * + * @return elapsed milliseconds in the thread + */ + @LayoutlibDelegate + /*package*/ static long currentThreadTimeMillis() { + return System.currentTimeMillis(); + } + + /** + * Returns microseconds running in the current thread. + * + * @return elapsed microseconds in the thread + * + * @hide + */ + @LayoutlibDelegate + /*package*/ static long currentThreadTimeMicro() { + return System.currentTimeMillis() * 1000; + } + + /** + * Returns current wall time in microseconds. + * + * @return elapsed microseconds in wall time + * + * @hide + */ + @LayoutlibDelegate + /*package*/ static long currentTimeMicro() { + return elapsedRealtime() * 1000; + } +} diff --git a/tools/layoutlib/bridge/src/android/text/AndroidBidi_Delegate.java b/tools/layoutlib/bridge/src/android/text/AndroidBidi_Delegate.java new file mode 100644 index 0000000000000..52b8f348adf0c --- /dev/null +++ b/tools/layoutlib/bridge/src/android/text/AndroidBidi_Delegate.java @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.text; + +import com.android.tools.layoutlib.annotations.LayoutlibDelegate; + + +/** + * Delegate used to provide new implementation for the native methods of {@link AndroidBidi} + * + * Through the layoutlib_create tool, the original methods of AndroidBidi have been replaced + * by calls to methods of the same name in this delegate class. + * + */ +public class AndroidBidi_Delegate { + + @LayoutlibDelegate + /*package*/ static int runBidi(int dir, char[] chs, byte[] chInfo, int n, boolean haveInfo) { + // return the equivalent of Layout.DIR_LEFT_TO_RIGHT + // TODO: actually figure the direction. + return 0; + } +} diff --git a/tools/layoutlib/bridge/src/android/text/format/DateFormat_Delegate.java b/tools/layoutlib/bridge/src/android/text/format/DateFormat_Delegate.java new file mode 100644 index 0000000000000..8cd1a695eabc7 --- /dev/null +++ b/tools/layoutlib/bridge/src/android/text/format/DateFormat_Delegate.java @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.text.format; + +import com.android.tools.layoutlib.annotations.LayoutlibDelegate; + +import android.content.Context; + + +/** + * Delegate used to provide new implementation for the native methods of {@link DateFormat} + * + * Through the layoutlib_create tool, the original methods of DateFormat have been replaced + * by calls to methods of the same name in this delegate class. + * + */ +public class DateFormat_Delegate { + + @LayoutlibDelegate + /*package*/ static boolean is24HourFormat(Context context) { + return false; + } +} diff --git a/tools/layoutlib/bridge/src/android/util/BridgeXmlPullAttributes.java b/tools/layoutlib/bridge/src/android/util/BridgeXmlPullAttributes.java new file mode 100644 index 0000000000000..6ac5b02916ae8 --- /dev/null +++ b/tools/layoutlib/bridge/src/android/util/BridgeXmlPullAttributes.java @@ -0,0 +1,283 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.util; + +import com.android.ide.common.rendering.api.RenderResources; +import com.android.ide.common.rendering.api.ResourceValue; +import com.android.internal.util.XmlUtils; +import com.android.layoutlib.bridge.Bridge; +import com.android.layoutlib.bridge.BridgeConstants; +import com.android.layoutlib.bridge.android.BridgeContext; +import com.android.resources.ResourceType; + +import org.xmlpull.v1.XmlPullParser; + +/** + * A correct implementation of the {@link AttributeSet} interface on top of a XmlPullParser + */ +public class BridgeXmlPullAttributes extends XmlPullAttributes { + + private final BridgeContext mContext; + private final boolean mPlatformFile; + + public BridgeXmlPullAttributes(XmlPullParser parser, BridgeContext context, + boolean platformFile) { + super(parser); + mContext = context; + mPlatformFile = platformFile; + } + + /* + * (non-Javadoc) + * @see android.util.XmlPullAttributes#getAttributeNameResource(int) + * + * This methods must return com.android.internal.R.attr. matching + * the name of the attribute. + * It returns 0 if it doesn't find anything. + */ + @Override + public int getAttributeNameResource(int index) { + // get the attribute name. + String name = getAttributeName(index); + + // get the attribute namespace + String ns = mParser.getAttributeNamespace(index); + + if (BridgeConstants.NS_RESOURCES.equals(ns)) { + Integer v = Bridge.getResourceId(ResourceType.ATTR, name); + if (v != null) { + return v.intValue(); + } + + return 0; + } + + // this is not an attribute in the android namespace, we query the customviewloader, if + // the namespaces match. + if (mContext.getProjectCallback().getNamespace().equals(ns)) { + Integer v = mContext.getProjectCallback().getResourceId(ResourceType.ATTR, name); + if (v != null) { + return v.intValue(); + } + } + + return 0; + } + + @Override + public int getAttributeListValue(String namespace, String attribute, + String[] options, int defaultValue) { + String value = getAttributeValue(namespace, attribute); + if (value != null) { + ResourceValue r = getResourceValue(value); + + if (r != null) { + value = r.getValue(); + } + + return XmlUtils.convertValueToList(value, options, defaultValue); + } + + return defaultValue; + } + + @Override + public boolean getAttributeBooleanValue(String namespace, String attribute, + boolean defaultValue) { + String value = getAttributeValue(namespace, attribute); + if (value != null) { + ResourceValue r = getResourceValue(value); + + if (r != null) { + value = r.getValue(); + } + + return XmlUtils.convertValueToBoolean(value, defaultValue); + } + + return defaultValue; + } + + @Override + public int getAttributeResourceValue(String namespace, String attribute, int defaultValue) { + String value = getAttributeValue(namespace, attribute); + + return resolveResourceValue(value, defaultValue); + } + + @Override + public int getAttributeIntValue(String namespace, String attribute, + int defaultValue) { + String value = getAttributeValue(namespace, attribute); + if (value != null) { + ResourceValue r = getResourceValue(value); + + if (r != null) { + value = r.getValue(); + } + + return XmlUtils.convertValueToInt(value, defaultValue); + } + + return defaultValue; + } + + @Override + public int getAttributeUnsignedIntValue(String namespace, String attribute, + int defaultValue) { + String value = getAttributeValue(namespace, attribute); + if (value != null) { + ResourceValue r = getResourceValue(value); + + if (r != null) { + value = r.getValue(); + } + + return XmlUtils.convertValueToUnsignedInt(value, defaultValue); + } + + return defaultValue; + } + + @Override + public float getAttributeFloatValue(String namespace, String attribute, + float defaultValue) { + String s = getAttributeValue(namespace, attribute); + if (s != null) { + ResourceValue r = getResourceValue(s); + + if (r != null) { + s = r.getValue(); + } + + return Float.parseFloat(s); + } + + return defaultValue; + } + + @Override + public int getAttributeListValue(int index, + String[] options, int defaultValue) { + return XmlUtils.convertValueToList( + getAttributeValue(index), options, defaultValue); + } + + @Override + public boolean getAttributeBooleanValue(int index, boolean defaultValue) { + String value = getAttributeValue(index); + if (value != null) { + ResourceValue r = getResourceValue(value); + + if (r != null) { + value = r.getValue(); + } + + return XmlUtils.convertValueToBoolean(value, defaultValue); + } + + return defaultValue; + } + + @Override + public int getAttributeResourceValue(int index, int defaultValue) { + String value = getAttributeValue(index); + + return resolveResourceValue(value, defaultValue); + } + + @Override + public int getAttributeIntValue(int index, int defaultValue) { + String value = getAttributeValue(index); + if (value != null) { + ResourceValue r = getResourceValue(value); + + if (r != null) { + value = r.getValue(); + } + + return XmlUtils.convertValueToInt(value, defaultValue); + } + + return defaultValue; + } + + @Override + public int getAttributeUnsignedIntValue(int index, int defaultValue) { + String value = getAttributeValue(index); + if (value != null) { + ResourceValue r = getResourceValue(value); + + if (r != null) { + value = r.getValue(); + } + + return XmlUtils.convertValueToUnsignedInt(value, defaultValue); + } + + return defaultValue; + } + + @Override + public float getAttributeFloatValue(int index, float defaultValue) { + String s = getAttributeValue(index); + if (s != null) { + ResourceValue r = getResourceValue(s); + + if (r != null) { + s = r.getValue(); + } + + return Float.parseFloat(s); + } + + return defaultValue; + } + + // -- private helper methods + + /** + * Returns a resolved {@link ResourceValue} from a given value. + */ + private ResourceValue getResourceValue(String value) { + // now look for this particular value + RenderResources resources = mContext.getRenderResources(); + return resources.resolveResValue(resources.findResValue(value, mPlatformFile)); + } + + /** + * Resolves and return a value to its associated integer. + */ + private int resolveResourceValue(String value, int defaultValue) { + ResourceValue resource = getResourceValue(value); + if (resource != null) { + Integer id = null; + if (mPlatformFile || resource.isFramework()) { + id = Bridge.getResourceId(resource.getResourceType(), resource.getName()); + } else { + id = mContext.getProjectCallback().getResourceId( + resource.getResourceType(), resource.getName()); + } + + if (id != null) { + return id; + } + } + + return defaultValue; + } +} diff --git a/tools/layoutlib/bridge/src/android/util/FloatMath_Delegate.java b/tools/layoutlib/bridge/src/android/util/FloatMath_Delegate.java new file mode 100644 index 0000000000000..8b4c60b5fead3 --- /dev/null +++ b/tools/layoutlib/bridge/src/android/util/FloatMath_Delegate.java @@ -0,0 +1,132 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.util; + +import com.android.layoutlib.bridge.impl.DelegateManager; +import com.android.tools.layoutlib.annotations.LayoutlibDelegate; + +/** + * Delegate implementing the native methods of android.util.FloatMath + * + * Through the layoutlib_create tool, the original native methods of FloatMath have been replaced + * by calls to methods of the same name in this delegate class. + * + * Because it's a stateless class to start with, there's no need to keep a {@link DelegateManager} + * around to map int to instance of the delegate. + * + */ +/*package*/ final class FloatMath_Delegate { + + /** Prevents instantiation. */ + private FloatMath_Delegate() {} + + /** + * Returns the float conversion of the most positive (i.e. closest to + * positive infinity) integer value which is less than the argument. + * + * @param value to be converted + * @return the floor of value + */ + @LayoutlibDelegate + /*package*/ static float floor(float value) { + return (float)Math.floor(value); + } + + /** + * Returns the float conversion of the most negative (i.e. closest to + * negative infinity) integer value which is greater than the argument. + * + * @param value to be converted + * @return the ceiling of value + */ + @LayoutlibDelegate + /*package*/ static float ceil(float value) { + return (float)Math.ceil(value); + } + + /** + * Returns the closest float approximation of the sine of the argument. + * + * @param angle to compute the cosine of, in radians + * @return the sine of angle + */ + @LayoutlibDelegate + /*package*/ static float sin(float angle) { + return (float)Math.sin(angle); + } + + /** + * Returns the closest float approximation of the cosine of the argument. + * + * @param angle to compute the cosine of, in radians + * @return the cosine of angle + */ + @LayoutlibDelegate + /*package*/ static float cos(float angle) { + return (float)Math.cos(angle); + } + + /** + * Returns the closest float approximation of the square root of the + * argument. + * + * @param value to compute sqrt of + * @return the square root of value + */ + @LayoutlibDelegate + /*package*/ static float sqrt(float value) { + return (float)Math.sqrt(value); + } + + /** + * Returns the closest float approximation of the raising "e" to the power + * of the argument. + * + * @param value to compute the exponential of + * @return the exponential of value + */ + @LayoutlibDelegate + /*package*/ static float exp(float value) { + return (float)Math.exp(value); + } + + /** + * Returns the closest float approximation of the result of raising {@code + * x} to the power of {@code y}. + * + * @param x the base of the operation. + * @param y the exponent of the operation. + * @return {@code x} to the power of {@code y}. + */ + @LayoutlibDelegate + /*package*/ static float pow(float x, float y) { + return (float)Math.pow(x, y); + } + + /** + * Returns {@code sqrt(}{@code x}{@code 2}{@code +} + * {@code y}{@code 2}{@code )}. + * + * @param x a float number + * @param y a float number + * @return the hypotenuse + */ + @LayoutlibDelegate + /*package*/ static float hypot(float x, float y) { + return (float)Math.sqrt(x*x + y*y); + } +} diff --git a/tools/layoutlib/bridge/src/android/util/Log_Delegate.java b/tools/layoutlib/bridge/src/android/util/Log_Delegate.java new file mode 100644 index 0000000000000..7f432abdda9fc --- /dev/null +++ b/tools/layoutlib/bridge/src/android/util/Log_Delegate.java @@ -0,0 +1,51 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.util; + +import com.android.tools.layoutlib.annotations.LayoutlibDelegate; + +class Log_Delegate { + // to replicate prefix visible when using 'adb logcat' + private static char priorityChar(int priority) { + switch (priority) { + case Log.VERBOSE: + return 'V'; + case Log.DEBUG: + return 'D'; + case Log.INFO: + return 'I'; + case Log.WARN: + return 'W'; + case Log.ERROR: + return 'E'; + case Log.ASSERT: + return 'A'; + default: + return '?'; + } + } + + @LayoutlibDelegate + static int println_native(int bufID, int priority, String tag, String msgs) { + String prefix = priorityChar(priority) + "/" + tag + ": "; + for (String msg: msgs.split("\n")) { + System.out.println(prefix + msg); + } + return 0; + } + +} diff --git a/tools/layoutlib/bridge/src/android/util/LruCache.java b/tools/layoutlib/bridge/src/android/util/LruCache.java new file mode 100644 index 0000000000000..520860655abdc --- /dev/null +++ b/tools/layoutlib/bridge/src/android/util/LruCache.java @@ -0,0 +1,391 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.util; + +import java.util.LinkedHashMap; +import java.util.Map; + +/** + * BEGIN LAYOUTLIB CHANGE + * This is a custom version that doesn't use the non standard LinkedHashMap#eldest. + * END LAYOUTLIB CHANGE + * + * A cache that holds strong references to a limited number of values. Each time + * a value is accessed, it is moved to the head of a queue. When a value is + * added to a full cache, the value at the end of that queue is evicted and may + * become eligible for garbage collection. + * + *

If your cached values hold resources that need to be explicitly released, + * override {@link #entryRemoved}. + * + *

If a cache miss should be computed on demand for the corresponding keys, + * override {@link #create}. This simplifies the calling code, allowing it to + * assume a value will always be returned, even when there's a cache miss. + * + *

By default, the cache size is measured in the number of entries. Override + * {@link #sizeOf} to size the cache in different units. For example, this cache + * is limited to 4MiB of bitmaps: + *

   {@code
+ *   int cacheSize = 4 * 1024 * 1024; // 4MiB
+ *   LruCache bitmapCache = new LruCache(cacheSize) {
+ *       protected int sizeOf(String key, Bitmap value) {
+ *           return value.getByteCount();
+ *       }
+ *   }}
+ * + *

This class is thread-safe. Perform multiple cache operations atomically by + * synchronizing on the cache:

   {@code
+ *   synchronized (cache) {
+ *     if (cache.get(key) == null) {
+ *         cache.put(key, value);
+ *     }
+ *   }}
+ * + *

This class does not allow null to be used as a key or value. A return + * value of null from {@link #get}, {@link #put} or {@link #remove} is + * unambiguous: the key was not in the cache. + * + *

This class appeared in Android 3.1 (Honeycomb MR1); it's available as part + * of Android's + * Support Package for earlier releases. + */ +public class LruCache { + private final LinkedHashMap map; + + /** Size of this cache in units. Not necessarily the number of elements. */ + private int size; + private int maxSize; + + private int putCount; + private int createCount; + private int evictionCount; + private int hitCount; + private int missCount; + + /** + * @param maxSize for caches that do not override {@link #sizeOf}, this is + * the maximum number of entries in the cache. For all other caches, + * this is the maximum sum of the sizes of the entries in this cache. + */ + public LruCache(int maxSize) { + if (maxSize <= 0) { + throw new IllegalArgumentException("maxSize <= 0"); + } + this.maxSize = maxSize; + this.map = new LinkedHashMap(0, 0.75f, true); + } + + /** + * Sets the size of the cache. + * @param maxSize The new maximum size. + * + * @hide + */ + public void resize(int maxSize) { + if (maxSize <= 0) { + throw new IllegalArgumentException("maxSize <= 0"); + } + + synchronized (this) { + this.maxSize = maxSize; + } + trimToSize(maxSize); + } + + /** + * Returns the value for {@code key} if it exists in the cache or can be + * created by {@code #create}. If a value was returned, it is moved to the + * head of the queue. This returns null if a value is not cached and cannot + * be created. + */ + public final V get(K key) { + if (key == null) { + throw new NullPointerException("key == null"); + } + + V mapValue; + synchronized (this) { + mapValue = map.get(key); + if (mapValue != null) { + hitCount++; + return mapValue; + } + missCount++; + } + + /* + * Attempt to create a value. This may take a long time, and the map + * may be different when create() returns. If a conflicting value was + * added to the map while create() was working, we leave that value in + * the map and release the created value. + */ + + V createdValue = create(key); + if (createdValue == null) { + return null; + } + + synchronized (this) { + createCount++; + mapValue = map.put(key, createdValue); + + if (mapValue != null) { + // There was a conflict so undo that last put + map.put(key, mapValue); + } else { + size += safeSizeOf(key, createdValue); + } + } + + if (mapValue != null) { + entryRemoved(false, key, createdValue, mapValue); + return mapValue; + } else { + trimToSize(maxSize); + return createdValue; + } + } + + /** + * Caches {@code value} for {@code key}. The value is moved to the head of + * the queue. + * + * @return the previous value mapped by {@code key}. + */ + public final V put(K key, V value) { + if (key == null || value == null) { + throw new NullPointerException("key == null || value == null"); + } + + V previous; + synchronized (this) { + putCount++; + size += safeSizeOf(key, value); + previous = map.put(key, value); + if (previous != null) { + size -= safeSizeOf(key, previous); + } + } + + if (previous != null) { + entryRemoved(false, key, previous, value); + } + + trimToSize(maxSize); + return previous; + } + + /** + * @param maxSize the maximum size of the cache before returning. May be -1 + * to evict even 0-sized elements. + */ + private void trimToSize(int maxSize) { + while (true) { + K key; + V value; + synchronized (this) { + if (size < 0 || (map.isEmpty() && size != 0)) { + throw new IllegalStateException(getClass().getName() + + ".sizeOf() is reporting inconsistent results!"); + } + + if (size <= maxSize) { + break; + } + + // BEGIN LAYOUTLIB CHANGE + // get the last item in the linked list. + // This is not efficient, the goal here is to minimize the changes + // compared to the platform version. + Map.Entry toEvict = null; + for (Map.Entry entry : map.entrySet()) { + toEvict = entry; + } + // END LAYOUTLIB CHANGE + + if (toEvict == null) { + break; + } + + key = toEvict.getKey(); + value = toEvict.getValue(); + map.remove(key); + size -= safeSizeOf(key, value); + evictionCount++; + } + + entryRemoved(true, key, value, null); + } + } + + /** + * Removes the entry for {@code key} if it exists. + * + * @return the previous value mapped by {@code key}. + */ + public final V remove(K key) { + if (key == null) { + throw new NullPointerException("key == null"); + } + + V previous; + synchronized (this) { + previous = map.remove(key); + if (previous != null) { + size -= safeSizeOf(key, previous); + } + } + + if (previous != null) { + entryRemoved(false, key, previous, null); + } + + return previous; + } + + /** + * Called for entries that have been evicted or removed. This method is + * invoked when a value is evicted to make space, removed by a call to + * {@link #remove}, or replaced by a call to {@link #put}. The default + * implementation does nothing. + * + *

The method is called without synchronization: other threads may + * access the cache while this method is executing. + * + * @param evicted true if the entry is being removed to make space, false + * if the removal was caused by a {@link #put} or {@link #remove}. + * @param newValue the new value for {@code key}, if it exists. If non-null, + * this removal was caused by a {@link #put}. Otherwise it was caused by + * an eviction or a {@link #remove}. + */ + protected void entryRemoved(boolean evicted, K key, V oldValue, V newValue) {} + + /** + * Called after a cache miss to compute a value for the corresponding key. + * Returns the computed value or null if no value can be computed. The + * default implementation returns null. + * + *

The method is called without synchronization: other threads may + * access the cache while this method is executing. + * + *

If a value for {@code key} exists in the cache when this method + * returns, the created value will be released with {@link #entryRemoved} + * and discarded. This can occur when multiple threads request the same key + * at the same time (causing multiple values to be created), or when one + * thread calls {@link #put} while another is creating a value for the same + * key. + */ + protected V create(K key) { + return null; + } + + private int safeSizeOf(K key, V value) { + int result = sizeOf(key, value); + if (result < 0) { + throw new IllegalStateException("Negative size: " + key + "=" + value); + } + return result; + } + + /** + * Returns the size of the entry for {@code key} and {@code value} in + * user-defined units. The default implementation returns 1 so that size + * is the number of entries and max size is the maximum number of entries. + * + *

An entry's size must not change while it is in the cache. + */ + protected int sizeOf(K key, V value) { + return 1; + } + + /** + * Clear the cache, calling {@link #entryRemoved} on each removed entry. + */ + public final void evictAll() { + trimToSize(-1); // -1 will evict 0-sized elements + } + + /** + * For caches that do not override {@link #sizeOf}, this returns the number + * of entries in the cache. For all other caches, this returns the sum of + * the sizes of the entries in this cache. + */ + public synchronized final int size() { + return size; + } + + /** + * For caches that do not override {@link #sizeOf}, this returns the maximum + * number of entries in the cache. For all other caches, this returns the + * maximum sum of the sizes of the entries in this cache. + */ + public synchronized final int maxSize() { + return maxSize; + } + + /** + * Returns the number of times {@link #get} returned a value that was + * already present in the cache. + */ + public synchronized final int hitCount() { + return hitCount; + } + + /** + * Returns the number of times {@link #get} returned null or required a new + * value to be created. + */ + public synchronized final int missCount() { + return missCount; + } + + /** + * Returns the number of times {@link #create(Object)} returned a value. + */ + public synchronized final int createCount() { + return createCount; + } + + /** + * Returns the number of times {@link #put} was called. + */ + public synchronized final int putCount() { + return putCount; + } + + /** + * Returns the number of values that have been evicted. + */ + public synchronized final int evictionCount() { + return evictionCount; + } + + /** + * Returns a copy of the current contents of the cache, ordered from least + * recently accessed to most recently accessed. + */ + public synchronized final Map snapshot() { + return new LinkedHashMap(map); + } + + @Override public synchronized final String toString() { + int accesses = hitCount + missCount; + int hitPercent = accesses != 0 ? (100 * hitCount / accesses) : 0; + return String.format("LruCache[maxSize=%d,hits=%d,misses=%d,hitRate=%d%%]", + maxSize, hitCount, missCount, hitPercent); + } +} diff --git a/tools/layoutlib/bridge/src/android/view/AttachInfo_Accessor.java b/tools/layoutlib/bridge/src/android/view/AttachInfo_Accessor.java new file mode 100644 index 0000000000000..4901f72b23d6b --- /dev/null +++ b/tools/layoutlib/bridge/src/android/view/AttachInfo_Accessor.java @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.view; + +import com.android.layoutlib.bridge.android.BridgeWindow; +import com.android.layoutlib.bridge.android.BridgeWindowSession; + +import android.content.Context; +import android.os.Handler; +import android.view.View.AttachInfo; + +/** + * Class allowing access to package-protected methods/fields. + */ +public class AttachInfo_Accessor { + + public static void setAttachInfo(View view) { + Context context = view.getContext(); + WindowManager wm = (WindowManager)context.getSystemService(Context.WINDOW_SERVICE); + Display display = wm.getDefaultDisplay(); + ViewRootImpl root = new ViewRootImpl(context, display); + AttachInfo info = new AttachInfo(new BridgeWindowSession(), new BridgeWindow(), + display, root, new Handler(), null); + info.mHasWindowFocus = true; + info.mWindowVisibility = View.VISIBLE; + info.mInTouchMode = false; // this is so that we can display selections. + info.mHardwareAccelerated = false; + view.dispatchAttachedToWindow(info, 0); + } + + public static void dispatchOnPreDraw(View view) { + view.mAttachInfo.mTreeObserver.dispatchOnPreDraw(); + } +} diff --git a/tools/layoutlib/bridge/src/android/view/BridgeInflater.java b/tools/layoutlib/bridge/src/android/view/BridgeInflater.java new file mode 100644 index 0000000000000..941f1ce6ef228 --- /dev/null +++ b/tools/layoutlib/bridge/src/android/view/BridgeInflater.java @@ -0,0 +1,272 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.view; + +import com.android.ide.common.rendering.api.IProjectCallback; +import com.android.ide.common.rendering.api.LayoutLog; +import com.android.ide.common.rendering.api.MergeCookie; +import com.android.ide.common.rendering.api.ResourceReference; +import com.android.ide.common.rendering.api.ResourceValue; +import com.android.layoutlib.bridge.Bridge; +import com.android.layoutlib.bridge.android.BridgeContext; +import com.android.layoutlib.bridge.android.BridgeXmlBlockParser; +import com.android.layoutlib.bridge.impl.ParserFactory; +import com.android.resources.ResourceType; +import com.android.util.Pair; + +import org.xmlpull.v1.XmlPullParser; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.InflateException; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import java.io.File; + +/** + * Custom implementation of {@link LayoutInflater} to handle custom views. + */ +public final class BridgeInflater extends LayoutInflater { + + private final IProjectCallback mProjectCallback; + private boolean mIsInMerge = false; + private ResourceReference mResourceReference; + + /** + * List of class prefixes which are tried first by default. + *

+ * This should match the list in com.android.internal.policy.impl.PhoneLayoutInflater. + */ + private static final String[] sClassPrefixList = { + "android.widget.", + "android.webkit." + }; + + protected BridgeInflater(LayoutInflater original, Context newContext) { + super(original, newContext); + mProjectCallback = null; + } + + /** + * Instantiate a new BridgeInflater with an {@link IProjectCallback} object. + * + * @param context The Android application context. + * @param projectCallback the {@link IProjectCallback} object. + */ + public BridgeInflater(Context context, IProjectCallback projectCallback) { + super(context); + mProjectCallback = projectCallback; + mConstructorArgs[0] = context; + } + + @Override + public View onCreateView(String name, AttributeSet attrs) throws ClassNotFoundException { + View view = null; + + try { + // First try to find a class using the default Android prefixes + for (String prefix : sClassPrefixList) { + try { + view = createView(name, prefix, attrs); + if (view != null) { + break; + } + } catch (ClassNotFoundException e) { + // Ignore. We'll try again using the base class below. + } + } + + // Next try using the parent loader. This will most likely only work for + // fully-qualified class names. + try { + if (view == null) { + view = super.onCreateView(name, attrs); + } + } catch (ClassNotFoundException e) { + // Ignore. We'll try again using the custom view loader below. + } + + // Finally try again using the custom view loader + try { + if (view == null) { + view = loadCustomView(name, attrs); + } + } catch (ClassNotFoundException e) { + // If the class was not found, we throw the exception directly, because this + // method is already expected to throw it. + throw e; + } + } catch (Exception e) { + // Wrap the real exception in a ClassNotFoundException, so that the calling method + // can deal with it. + ClassNotFoundException exception = new ClassNotFoundException("onCreateView", e); + throw exception; + } + + setupViewInContext(view, attrs); + + return view; + } + + @Override + public View createViewFromTag(View parent, String name, AttributeSet attrs) { + View view = null; + try { + view = super.createViewFromTag(parent, name, attrs); + } catch (InflateException e) { + // try to load the class from using the custom view loader + try { + view = loadCustomView(name, attrs); + } catch (Exception e2) { + // Wrap the real exception in an InflateException so that the calling + // method can deal with it. + InflateException exception = new InflateException(); + if (e2.getClass().equals(ClassNotFoundException.class) == false) { + exception.initCause(e2); + } else { + exception.initCause(e); + } + throw exception; + } + } + + setupViewInContext(view, attrs); + + return view; + } + + @Override + public View inflate(int resource, ViewGroup root) { + Context context = getContext(); + if (context instanceof BridgeContext) { + BridgeContext bridgeContext = (BridgeContext)context; + + ResourceValue value = null; + + Pair layoutInfo = Bridge.resolveResourceId(resource); + if (layoutInfo != null) { + value = bridgeContext.getRenderResources().getFrameworkResource( + ResourceType.LAYOUT, layoutInfo.getSecond()); + } else { + layoutInfo = mProjectCallback.resolveResourceId(resource); + + if (layoutInfo != null) { + value = bridgeContext.getRenderResources().getProjectResource( + ResourceType.LAYOUT, layoutInfo.getSecond()); + } + } + + if (value != null) { + File f = new File(value.getValue()); + if (f.isFile()) { + try { + XmlPullParser parser = ParserFactory.create(f); + + BridgeXmlBlockParser bridgeParser = new BridgeXmlBlockParser( + parser, bridgeContext, false); + + return inflate(bridgeParser, root); + } catch (Exception e) { + Bridge.getLog().error(LayoutLog.TAG_RESOURCES_READ, + "Failed to parse file " + f.getAbsolutePath(), e, null /*data*/); + + return null; + } + } + } + } + return null; + } + + private View loadCustomView(String name, AttributeSet attrs) throws ClassNotFoundException, + Exception{ + if (mProjectCallback != null) { + // first get the classname in case it's not the node name + if (name.equals("view")) { + name = attrs.getAttributeValue(null, "class"); + } + + mConstructorArgs[1] = attrs; + + Object customView = mProjectCallback.loadView(name, mConstructorSignature, + mConstructorArgs); + + if (customView instanceof View) { + return (View)customView; + } + } + + return null; + } + + private void setupViewInContext(View view, AttributeSet attrs) { + if (getContext() instanceof BridgeContext) { + BridgeContext bc = (BridgeContext) getContext(); + if (attrs instanceof BridgeXmlBlockParser) { + BridgeXmlBlockParser parser = (BridgeXmlBlockParser) attrs; + + // get the view key + Object viewKey = parser.getViewCookie(); + + if (viewKey == null) { + int currentDepth = parser.getDepth(); + + // test whether we are in an included file or in a adapter binding view. + BridgeXmlBlockParser previousParser = bc.getPreviousParser(); + if (previousParser != null) { + // looks like we inside an embedded layout. + // only apply the cookie of the calling node () if we are at the + // top level of the embedded layout. If there is a merge tag, then + // skip it and look for the 2nd level + int testDepth = mIsInMerge ? 2 : 1; + if (currentDepth == testDepth) { + viewKey = previousParser.getViewCookie(); + // if we are in a merge, wrap the cookie in a MergeCookie. + if (viewKey != null && mIsInMerge) { + viewKey = new MergeCookie(viewKey); + } + } + } else if (mResourceReference != null && currentDepth == 1) { + // else if there's a resource reference, this means we are in an adapter + // binding case. Set the resource ref as the view cookie only for the top + // level view. + viewKey = mResourceReference; + } + } + + if (viewKey != null) { + bc.addViewKey(view, viewKey); + } + } + } + } + + public void setIsInMerge(boolean isInMerge) { + mIsInMerge = isInMerge; + } + + public void setResourceReference(ResourceReference reference) { + mResourceReference = reference; + } + + @Override + public LayoutInflater cloneInContext(Context newContext) { + return new BridgeInflater(this, newContext); + } +} diff --git a/tools/layoutlib/bridge/src/android/view/Choreographer_Delegate.java b/tools/layoutlib/bridge/src/android/view/Choreographer_Delegate.java new file mode 100644 index 0000000000000..f75ee50306744 --- /dev/null +++ b/tools/layoutlib/bridge/src/android/view/Choreographer_Delegate.java @@ -0,0 +1,33 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package android.view; + +import com.android.tools.layoutlib.annotations.LayoutlibDelegate; + +/** + * Delegate used to provide new implementation of a select few methods of {@link Choreographer} + * + * Through the layoutlib_create tool, the original methods of Choreographer have been + * replaced by calls to methods of the same name in this delegate class. + * + */ +public class Choreographer_Delegate { + + @LayoutlibDelegate + public static float getRefreshRate() { + return 60.f; + } +} diff --git a/tools/layoutlib/bridge/src/android/view/Display_Delegate.java b/tools/layoutlib/bridge/src/android/view/Display_Delegate.java new file mode 100644 index 0000000000000..53dc821f65d22 --- /dev/null +++ b/tools/layoutlib/bridge/src/android/view/Display_Delegate.java @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.view; + +import com.android.tools.layoutlib.annotations.LayoutlibDelegate; + + +/** + * Delegate used to provide new implementation of a select few methods of {@link Display} + * + * Through the layoutlib_create tool, the original methods of Display have been replaced + * by calls to methods of the same name in this delegate class. + * + */ +public class Display_Delegate { + + @LayoutlibDelegate + static void updateDisplayInfoLocked(Display theDisplay) { + // do nothing + } + +} diff --git a/tools/layoutlib/bridge/src/android/view/IWindowManagerImpl.java b/tools/layoutlib/bridge/src/android/view/IWindowManagerImpl.java new file mode 100644 index 0000000000000..f0c3a758fa3ed --- /dev/null +++ b/tools/layoutlib/bridge/src/android/view/IWindowManagerImpl.java @@ -0,0 +1,502 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.view; + +import android.graphics.Point; +import com.android.internal.view.IInputContext; +import com.android.internal.view.IInputMethodClient; + +import android.content.res.CompatibilityInfo; +import android.content.res.Configuration; +import android.graphics.Bitmap; +import android.graphics.Rect; +import android.os.Bundle; +import android.os.IBinder; +import android.os.IRemoteCallback; +import android.os.RemoteException; +import android.util.DisplayMetrics; +import android.view.Display; +import android.view.Gravity; +import android.view.IApplicationToken; +import android.view.IInputFilter; +import android.view.IOnKeyguardExitResult; +import android.view.IRotationWatcher; +import android.view.IWindowManager; +import android.view.IWindowSession; + +import java.util.List; + +/** + * Basic implementation of {@link IWindowManager} so that {@link Display} (and + * {@link Display_Delegate}) can return a valid instance. + */ +public class IWindowManagerImpl implements IWindowManager { + + private final Configuration mConfig; + private final DisplayMetrics mMetrics; + private final int mRotation; + private final boolean mHasNavigationBar; + + public IWindowManagerImpl(Configuration config, DisplayMetrics metrics, int rotation, + boolean hasNavigationBar) { + mConfig = config; + mMetrics = metrics; + mRotation = rotation; + mHasNavigationBar = hasNavigationBar; + } + + // custom API. + + public DisplayMetrics getMetrics() { + return mMetrics; + } + + // ---- implementation of IWindowManager that we care about ---- + + @Override + public int getRotation() throws RemoteException { + return mRotation; + } + + @Override + public boolean hasNavigationBar() { + return mHasNavigationBar; + } + + // ---- unused implementation of IWindowManager ---- + + @Override + public void addAppToken(int arg0, IApplicationToken arg1, int arg2, int arg3, int arg4, + boolean arg5, boolean arg6, int arg7) + throws RemoteException { + // TODO Auto-generated method stub + + } + + @Override + public void addWindowToken(IBinder arg0, int arg1) throws RemoteException { + // TODO Auto-generated method stub + + } + + @Override + public void clearForcedDisplaySize(int displayId) throws RemoteException { + // TODO Auto-generated method stub + } + + @Override + public void clearForcedDisplayDensity(int displayId) throws RemoteException { + // TODO Auto-generated method stub + } + + @Override + public void setOverscan(int displayId, int left, int top, int right, int bottom) + throws RemoteException { + // TODO Auto-generated method stub + } + + @Override + public void closeSystemDialogs(String arg0) throws RemoteException { + // TODO Auto-generated method stub + + } + + @Override + public void startFreezingScreen(int exitAnim, int enterAnim) { + // TODO Auto-generated method stub + } + + @Override + public void stopFreezingScreen() { + // TODO Auto-generated method stub + } + + @Override + public void disableKeyguard(IBinder arg0, String arg1) throws RemoteException { + // TODO Auto-generated method stub + + } + + @Override + public void executeAppTransition() throws RemoteException { + // TODO Auto-generated method stub + + } + + @Override + public void exitKeyguardSecurely(IOnKeyguardExitResult arg0) throws RemoteException { + // TODO Auto-generated method stub + + } + + @Override + public void freezeRotation(int arg0) throws RemoteException { + // TODO Auto-generated method stub + + } + + @Override + public float getAnimationScale(int arg0) throws RemoteException { + // TODO Auto-generated method stub + return 0; + } + + @Override + public float[] getAnimationScales() throws RemoteException { + // TODO Auto-generated method stub + return null; + } + + @Override + public int getAppOrientation(IApplicationToken arg0) throws RemoteException { + // TODO Auto-generated method stub + return 0; + } + + @Override + public int getPendingAppTransition() throws RemoteException { + // TODO Auto-generated method stub + return 0; + } + + @Override + public boolean inKeyguardRestrictedInputMode() throws RemoteException { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean inputMethodClientHasFocus(IInputMethodClient arg0) throws RemoteException { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean isKeyguardLocked() throws RemoteException { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean isKeyguardSecure() throws RemoteException { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean isViewServerRunning() throws RemoteException { + // TODO Auto-generated method stub + return false; + } + + @Override + public IWindowSession openSession(IInputMethodClient arg0, IInputContext arg1) + throws RemoteException { + // TODO Auto-generated method stub + return null; + } + + @Override + public void overridePendingAppTransition(String arg0, int arg1, int arg2, + IRemoteCallback startedCallback) throws RemoteException { + // TODO Auto-generated method stub + + } + + @Override + public void overridePendingAppTransitionScaleUp(int startX, int startY, int startWidth, + int startHeight) throws RemoteException { + // TODO Auto-generated method stub + } + + @Override + public void overridePendingAppTransitionThumb(Bitmap srcThumb, int startX, int startY, + IRemoteCallback startedCallback, boolean scaleUp) throws RemoteException { + // TODO Auto-generated method stub + } + + @Override + public void pauseKeyDispatching(IBinder arg0) throws RemoteException { + // TODO Auto-generated method stub + + } + + @Override + public void prepareAppTransition(int arg0, boolean arg1) throws RemoteException { + // TODO Auto-generated method stub + + } + + @Override + public void reenableKeyguard(IBinder arg0) throws RemoteException { + // TODO Auto-generated method stub + + } + + @Override + public void removeAppToken(IBinder arg0) throws RemoteException { + // TODO Auto-generated method stub + + } + + @Override + public void removeWindowToken(IBinder arg0) throws RemoteException { + // TODO Auto-generated method stub + + } + + @Override + public void resumeKeyDispatching(IBinder arg0) throws RemoteException { + // TODO Auto-generated method stub + + } + + @Override + public Bitmap screenshotApplications(IBinder arg0, int displayId, int arg1, int arg2) + throws RemoteException { + // TODO Auto-generated method stub + return null; + } + + @Override + public void setAnimationScale(int arg0, float arg1) throws RemoteException { + // TODO Auto-generated method stub + + } + + @Override + public void setAnimationScales(float[] arg0) throws RemoteException { + // TODO Auto-generated method stub + + } + + @Override + public void setAppGroupId(IBinder arg0, int arg1) throws RemoteException { + // TODO Auto-generated method stub + + } + + @Override + public void setAppOrientation(IApplicationToken arg0, int arg1) throws RemoteException { + // TODO Auto-generated method stub + } + + @Override + public void setAppStartingWindow(IBinder arg0, String arg1, int arg2, CompatibilityInfo arg3, + CharSequence arg4, int arg5, int arg6, int arg7, int arg8, IBinder arg9, boolean arg10) + throws RemoteException { + // TODO Auto-generated method stub + } + + @Override + public void setAppVisibility(IBinder arg0, boolean arg1) throws RemoteException { + // TODO Auto-generated method stub + + } + + @Override + public void setAppWillBeHidden(IBinder arg0) throws RemoteException { + // TODO Auto-generated method stub + } + + @Override + public void setEventDispatching(boolean arg0) throws RemoteException { + // TODO Auto-generated method stub + } + + @Override + public void setFocusedApp(IBinder arg0, boolean arg1) throws RemoteException { + // TODO Auto-generated method stub + } + + @Override + public void getInitialDisplaySize(int displayId, Point size) { + // TODO Auto-generated method stub + } + + @Override + public void getBaseDisplaySize(int displayId, Point size) { + // TODO Auto-generated method stub + } + + @Override + public void setForcedDisplaySize(int displayId, int arg0, int arg1) throws RemoteException { + // TODO Auto-generated method stub + } + + @Override + public int getInitialDisplayDensity(int displayId) { + return -1; + } + + @Override + public int getBaseDisplayDensity(int displayId) { + return -1; + } + + @Override + public void setForcedDisplayDensity(int displayId, int density) throws RemoteException { + // TODO Auto-generated method stub + } + + @Override + public void setInTouchMode(boolean arg0) throws RemoteException { + // TODO Auto-generated method stub + } + + @Override + public void setNewConfiguration(Configuration arg0) throws RemoteException { + // TODO Auto-generated method stub + } + + @Override + public void updateRotation(boolean arg0, boolean arg1) throws RemoteException { + // TODO Auto-generated method stub + } + + @Override + public void setStrictModeVisualIndicatorPreference(String arg0) throws RemoteException { + // TODO Auto-generated method stub + } + + @Override + public void showStrictModeViolation(boolean arg0) throws RemoteException { + // TODO Auto-generated method stub + } + + @Override + public void startAppFreezingScreen(IBinder arg0, int arg1) throws RemoteException { + // TODO Auto-generated method stub + } + + @Override + public boolean startViewServer(int arg0) throws RemoteException { + // TODO Auto-generated method stub + return false; + } + + @Override + public void statusBarVisibilityChanged(int arg0) throws RemoteException { + // TODO Auto-generated method stub + } + + @Override + public void stopAppFreezingScreen(IBinder arg0, boolean arg1) throws RemoteException { + // TODO Auto-generated method stub + } + + @Override + public boolean stopViewServer() throws RemoteException { + // TODO Auto-generated method stub + return false; + } + + @Override + public void thawRotation() throws RemoteException { + // TODO Auto-generated method stub + } + + @Override + public Configuration updateOrientationFromAppTokens(Configuration arg0, IBinder arg1) + throws RemoteException { + // TODO Auto-generated method stub + return null; + } + + @Override + public int watchRotation(IRotationWatcher arg0) throws RemoteException { + // TODO Auto-generated method stub + return 0; + } + + @Override + public void removeRotationWatcher(IRotationWatcher arg0) throws RemoteException { + } + + @Override + public boolean waitForWindowDrawn(IBinder token, IRemoteCallback callback) { + return false; + } + + @Override + public IBinder asBinder() { + // TODO Auto-generated method stub + return null; + } + + @Override + public int getPreferredOptionsPanelGravity() throws RemoteException { + return Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM; + } + + @Override + public void dismissKeyguard() { + } + + @Override + public void lockNow(Bundle options) { + // TODO Auto-generated method stub + } + + @Override + public boolean isSafeModeEnabled() { + return false; + } + + @Override + public void showAssistant() { + + } + + @Override + public IBinder getFocusedWindowToken() { + // TODO Auto-generated method stub + return null; + } + + @Override + public void setInputFilter(IInputFilter filter) throws RemoteException { + // TODO Auto-generated method stub + } + + @Override + public void getWindowFrame(IBinder token, Rect outFrame) { + // TODO Auto-generated method stub + } + + @Override + public void setMagnificationCallbacks(IMagnificationCallbacks callbacks) { + // TODO Auto-generated method stub + } + + @Override + public void setMagnificationSpec(MagnificationSpec spec) { + // TODO Auto-generated method stub + } + + @Override + public MagnificationSpec getCompatibleMagnificationSpecForWindow(IBinder windowToken) { + // TODO Auto-generated method stub + return null; + } + + @Override + public boolean isRotationFrozen() throws RemoteException { + // TODO Auto-generated method stub + return false; + } +} diff --git a/tools/layoutlib/bridge/src/android/view/LayoutInflater_Delegate.java b/tools/layoutlib/bridge/src/android/view/LayoutInflater_Delegate.java new file mode 100644 index 0000000000000..3db3a1b0857bd --- /dev/null +++ b/tools/layoutlib/bridge/src/android/view/LayoutInflater_Delegate.java @@ -0,0 +1,199 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.view; + +import com.android.tools.layoutlib.annotations.LayoutlibDelegate; + +import org.xmlpull.v1.XmlPullParser; +import org.xmlpull.v1.XmlPullParserException; + +import android.content.res.TypedArray; +import android.content.res.XmlResourceParser; +import android.util.AttributeSet; +import android.util.Xml; + +import java.io.IOException; + +/** + * Delegate used to provide new implementation of a select few methods of {@link LayoutInflater} + * + * Through the layoutlib_create tool, the original methods of LayoutInflater have been replaced + * by calls to methods of the same name in this delegate class. + * + */ +public class LayoutInflater_Delegate { + + private static final String TAG_MERGE = "merge"; + + public static boolean sIsInInclude = false; + + /** + * Recursive method used to descend down the xml hierarchy and instantiate + * views, instantiate their children, and then call onFinishInflate(). + * + * This implementation just records the merge status before calling the default implementation. + */ + @LayoutlibDelegate + /*package*/ static void rInflate(LayoutInflater thisInflater, + XmlPullParser parser, View parent, final AttributeSet attrs, + boolean finishInflate) throws XmlPullParserException, IOException { + + if (finishInflate == false) { + // this is a merge rInflate! + if (thisInflater instanceof BridgeInflater) { + ((BridgeInflater) thisInflater).setIsInMerge(true); + } + } + + // ---- START DEFAULT IMPLEMENTATION. + + thisInflater.rInflate_Original(parser, parent, attrs, finishInflate); + + // ---- END DEFAULT IMPLEMENTATION. + + if (finishInflate == false) { + // this is a merge rInflate! + if (thisInflater instanceof BridgeInflater) { + ((BridgeInflater) thisInflater).setIsInMerge(false); + } + } + } + + @LayoutlibDelegate + public static void parseInclude( + LayoutInflater thisInflater, + XmlPullParser parser, View parent, AttributeSet attrs) + throws XmlPullParserException, IOException { + + int type; + + if (parent instanceof ViewGroup) { + final int layout = attrs.getAttributeResourceValue(null, "layout", 0); + if (layout == 0) { + final String value = attrs.getAttributeValue(null, "layout"); + if (value == null) { + throw new InflateException("You must specifiy a layout in the" + + " include tag: "); + } else { + throw new InflateException("You must specifiy a valid layout " + + "reference. The layout ID " + value + " is not valid."); + } + } else { + final XmlResourceParser childParser = + thisInflater.getContext().getResources().getLayout(layout); + + try { + final AttributeSet childAttrs = Xml.asAttributeSet(childParser); + + while ((type = childParser.next()) != XmlPullParser.START_TAG && + type != XmlPullParser.END_DOCUMENT) { + // Empty. + } + + if (type != XmlPullParser.START_TAG) { + throw new InflateException(childParser.getPositionDescription() + + ": No start tag found!"); + } + + final String childName = childParser.getName(); + + if (TAG_MERGE.equals(childName)) { + // Inflate all children. + thisInflater.rInflate(childParser, parent, childAttrs, false); + } else { + final View view = thisInflater.createViewFromTag(parent, childName, childAttrs); + final ViewGroup group = (ViewGroup) parent; + + // We try to load the layout params set in the tag. If + // they don't exist, we will rely on the layout params set in the + // included XML file. + // During a layoutparams generation, a runtime exception is thrown + // if either layout_width or layout_height is missing. We catch + // this exception and set localParams accordingly: true means we + // successfully loaded layout params from the tag, + // false means we need to rely on the included layout params. + ViewGroup.LayoutParams params = null; + try { + // ---- START CHANGES + sIsInInclude = true; + // ---- END CHANGES + + params = group.generateLayoutParams(attrs); + + } catch (RuntimeException e) { + // ---- START CHANGES + sIsInInclude = false; + // ---- END CHANGES + + params = group.generateLayoutParams(childAttrs); + } finally { + // ---- START CHANGES + sIsInInclude = false; + // ---- END CHANGES + + if (params != null) { + view.setLayoutParams(params); + } + } + + // Inflate all children. + thisInflater.rInflate(childParser, view, childAttrs, true); + + // Attempt to override the included layout's android:id with the + // one set on the tag itself. + TypedArray a = thisInflater.mContext.obtainStyledAttributes(attrs, + com.android.internal.R.styleable.View, 0, 0); + int id = a.getResourceId(com.android.internal.R.styleable.View_id, View.NO_ID); + // While we're at it, let's try to override android:visibility. + int visibility = a.getInt(com.android.internal.R.styleable.View_visibility, -1); + a.recycle(); + + if (id != View.NO_ID) { + view.setId(id); + } + + switch (visibility) { + case 0: + view.setVisibility(View.VISIBLE); + break; + case 1: + view.setVisibility(View.INVISIBLE); + break; + case 2: + view.setVisibility(View.GONE); + break; + } + + group.addView(view); + } + } finally { + childParser.close(); + } + } + } else { + throw new InflateException(" can only be used inside of a ViewGroup"); + } + + final int currentDepth = parser.getDepth(); + while (((type = parser.next()) != XmlPullParser.END_TAG || + parser.getDepth() > currentDepth) && type != XmlPullParser.END_DOCUMENT) { + // Empty + } + } + + +} diff --git a/tools/layoutlib/bridge/src/android/view/SurfaceView.java b/tools/layoutlib/bridge/src/android/view/SurfaceView.java new file mode 100644 index 0000000000000..6aa4b3b2eb266 --- /dev/null +++ b/tools/layoutlib/bridge/src/android/view/SurfaceView.java @@ -0,0 +1,112 @@ +/* + * Copyright (C) 2006 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.view; + +import com.android.layoutlib.bridge.MockView; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Rect; +import android.util.AttributeSet; + +/** + * Mock version of the SurfaceView. + * Only non override public methods from the real SurfaceView have been added in there. + * Methods that take an unknown class as parameter or as return object, have been removed for now. + * + * TODO: generate automatically. + * + */ +public class SurfaceView extends MockView { + + public SurfaceView(Context context) { + this(context, null); + } + + public SurfaceView(Context context, AttributeSet attrs) { + this(context, attrs , 0); + } + + public SurfaceView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + } + + public SurfaceHolder getHolder() { + return mSurfaceHolder; + } + + private SurfaceHolder mSurfaceHolder = new SurfaceHolder() { + + @Override + public boolean isCreating() { + return false; + } + + @Override + public void addCallback(Callback callback) { + } + + @Override + public void removeCallback(Callback callback) { + } + + @Override + public void setFixedSize(int width, int height) { + } + + @Override + public void setSizeFromLayout() { + } + + @Override + public void setFormat(int format) { + } + + @Override + public void setType(int type) { + } + + @Override + public void setKeepScreenOn(boolean screenOn) { + } + + @Override + public Canvas lockCanvas() { + return null; + } + + @Override + public Canvas lockCanvas(Rect dirty) { + return null; + } + + @Override + public void unlockCanvasAndPost(Canvas canvas) { + } + + @Override + public Surface getSurface() { + return null; + } + + @Override + public Rect getSurfaceFrame() { + return null; + } + }; +} + diff --git a/tools/layoutlib/bridge/src/android/view/ViewConfiguration_Accessor.java b/tools/layoutlib/bridge/src/android/view/ViewConfiguration_Accessor.java new file mode 100644 index 0000000000000..c3533e0182c4b --- /dev/null +++ b/tools/layoutlib/bridge/src/android/view/ViewConfiguration_Accessor.java @@ -0,0 +1,29 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.view; + +/** + * Class allowing access to package-protected methods/fields. + */ +public class ViewConfiguration_Accessor { + + public static void clearConfigurations() { + // clear the stored ViewConfiguration since the map is per density and not per context. + ViewConfiguration.sConfigurations.clear(); + } + +} diff --git a/tools/layoutlib/bridge/src/android/view/ViewRootImpl_Delegate.java b/tools/layoutlib/bridge/src/android/view/ViewRootImpl_Delegate.java new file mode 100644 index 0000000000000..14b84ef5b20c9 --- /dev/null +++ b/tools/layoutlib/bridge/src/android/view/ViewRootImpl_Delegate.java @@ -0,0 +1,34 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.view; + +import com.android.tools.layoutlib.annotations.LayoutlibDelegate; + +/** + * Delegate used to provide new implementation of a select few methods of {@link ViewRootImpl} + * + * Through the layoutlib_create tool, the original methods of ViewRootImpl have been replaced + * by calls to methods of the same name in this delegate class. + * + */ +public class ViewRootImpl_Delegate { + + @LayoutlibDelegate + /*package*/ static boolean isInTouchMode() { + return false; // this allows displaying selection. + } +} diff --git a/tools/layoutlib/bridge/src/android/view/View_Delegate.java b/tools/layoutlib/bridge/src/android/view/View_Delegate.java new file mode 100644 index 0000000000000..8215f7c7a2147 --- /dev/null +++ b/tools/layoutlib/bridge/src/android/view/View_Delegate.java @@ -0,0 +1,34 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.view; + +import com.android.tools.layoutlib.annotations.LayoutlibDelegate; + +/** + * Delegate used to provide new implementation of a select few methods of {@link View} + * + * Through the layoutlib_create tool, the original methods of View have been replaced + * by calls to methods of the same name in this delegate class. + * + */ +public class View_Delegate { + + @LayoutlibDelegate + /*package*/ static boolean isInEditMode(View thisView) { + return true; + } +} diff --git a/tools/layoutlib/bridge/src/android/view/WindowManagerGlobal_Delegate.java b/tools/layoutlib/bridge/src/android/view/WindowManagerGlobal_Delegate.java new file mode 100644 index 0000000000000..2606e55e5dbe9 --- /dev/null +++ b/tools/layoutlib/bridge/src/android/view/WindowManagerGlobal_Delegate.java @@ -0,0 +1,43 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.view; + +import com.android.tools.layoutlib.annotations.LayoutlibDelegate; + +/** + * Delegate used to provide new implementation of a select few methods of + * {@link WindowManagerGlobal} + * + * Through the layoutlib_create tool, the original methods of WindowManagerGlobal have been + * replaced by calls to methods of the same name in this delegate class. + * + */ +public class WindowManagerGlobal_Delegate { + + private static IWindowManager sService; + + @LayoutlibDelegate + public static IWindowManager getWindowManagerService() { + return sService; + } + + // ---- internal implementation stuff ---- + + public static void setWindowManagerService(IWindowManager service) { + sService = service; + } +} diff --git a/tools/layoutlib/bridge/src/android/view/accessibility/AccessibilityManager.java b/tools/layoutlib/bridge/src/android/view/accessibility/AccessibilityManager.java new file mode 100644 index 0000000000000..1fd78369e5a82 --- /dev/null +++ b/tools/layoutlib/bridge/src/android/view/accessibility/AccessibilityManager.java @@ -0,0 +1,137 @@ +/* + * Copyright (C) 2009 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.view.accessibility; + +import android.accessibilityservice.AccessibilityServiceInfo; +import android.content.Context; +import android.content.pm.ServiceInfo; +import android.view.IWindow; +import android.view.View; + +import java.util.Collections; +import java.util.List; + +/** + * System level service that serves as an event dispatch for {@link AccessibilityEvent}s. + * Such events are generated when something notable happens in the user interface, + * for example an {@link android.app.Activity} starts, the focus or selection of a + * {@link android.view.View} changes etc. Parties interested in handling accessibility + * events implement and register an accessibility service which extends + * {@link android.accessibilityservice.AccessibilityService}. + * + * @see AccessibilityEvent + * @see android.accessibilityservice.AccessibilityService + * @see android.content.Context#getSystemService + */ +public final class AccessibilityManager { + private static AccessibilityManager sInstance = new AccessibilityManager(); + + /** + * Listener for the accessibility state. + */ + public interface AccessibilityStateChangeListener { + + /** + * Called back on change in the accessibility state. + * + * @param enabled Whether accessibility is enabled. + */ + public void onAccessibilityStateChanged(boolean enabled); + } + + /** + * Get an AccessibilityManager instance (create one if necessary). + * + * @hide + */ + public static AccessibilityManager getInstance(Context context) { + return sInstance; + } + + /** + * Create an instance. + * + * @param context A {@link Context}. + */ + private AccessibilityManager() { + } + + /** + * Returns if the {@link AccessibilityManager} is enabled. + * + * @return True if this {@link AccessibilityManager} is enabled, false otherwise. + */ + public boolean isEnabled() { + return false; + } + + /** + * Sends an {@link AccessibilityEvent}. If this {@link AccessibilityManager} is not + * enabled the call is a NOOP. + * + * @param event The {@link AccessibilityEvent}. + * + * @throws IllegalStateException if a client tries to send an {@link AccessibilityEvent} + * while accessibility is not enabled. + */ + public void sendAccessibilityEvent(AccessibilityEvent event) { + } + + /** + * Requests interruption of the accessibility feedback from all accessibility services. + */ + public void interrupt() { + } + + /** + * Returns the {@link ServiceInfo}s of the installed accessibility services. + * + * @return An unmodifiable list with {@link ServiceInfo}s. + */ + public List getAccessibilityServiceList() { + // normal implementation does this in some case, so let's do the same + // (unmodifiableList wrapped around null). + List services = null; + return Collections.unmodifiableList(services); + } + + public List getInstalledAccessibilityServiceList() { + // normal implementation does this in some case, so let's do the same + // (unmodifiableList wrapped around null). + List services = null; + return Collections.unmodifiableList(services); + } + + public boolean addAccessibilityStateChangeListener( + AccessibilityStateChangeListener listener) { + return true; + } + + public boolean removeAccessibilityStateChangeListener( + AccessibilityStateChangeListener listener) { + return true; + } + + public int addAccessibilityInteractionConnection(IWindow windowToken, + IAccessibilityInteractionConnection connection) { + return View.NO_ID; + } + + public void removeAccessibilityInteractionConnection(IWindow windowToken) { + } + +} diff --git a/tools/layoutlib/bridge/src/android/view/inputmethod/InputMethodManager_Accessor.java b/tools/layoutlib/bridge/src/android/view/inputmethod/InputMethodManager_Accessor.java new file mode 100644 index 0000000000000..dc4f9c8681858 --- /dev/null +++ b/tools/layoutlib/bridge/src/android/view/inputmethod/InputMethodManager_Accessor.java @@ -0,0 +1,27 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.view.inputmethod; + +/** + * Class allowing access to package-protected methods/fields. + */ +public class InputMethodManager_Accessor { + + public static void resetInstance() { + InputMethodManager.sInstance = null; + } +} diff --git a/tools/layoutlib/bridge/src/android/view/inputmethod/InputMethodManager_Delegate.java b/tools/layoutlib/bridge/src/android/view/inputmethod/InputMethodManager_Delegate.java new file mode 100644 index 0000000000000..7c98847a4cf30 --- /dev/null +++ b/tools/layoutlib/bridge/src/android/view/inputmethod/InputMethodManager_Delegate.java @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.view.inputmethod; + +import com.android.layoutlib.bridge.android.BridgeIInputMethodManager; +import com.android.tools.layoutlib.annotations.LayoutlibDelegate; + +import android.content.Context; +import android.os.Looper; + + +/** + * Delegate used to provide new implementation of a select few methods of {@link InputMethodManager} + * + * Through the layoutlib_create tool, the original methods of InputMethodManager have been replaced + * by calls to methods of the same name in this delegate class. + * + */ +public class InputMethodManager_Delegate { + + // ---- Overridden methods ---- + + @LayoutlibDelegate + /*package*/ static InputMethodManager getInstance() { + synchronized (InputMethodManager.class) { + InputMethodManager imm = InputMethodManager.peekInstance(); + if (imm == null) { + imm = new InputMethodManager( + new BridgeIInputMethodManager(), Looper.getMainLooper()); + InputMethodManager.sInstance = imm; + } + return imm; + } + } +} diff --git a/tools/layoutlib/bridge/src/android/webkit/WebView.java b/tools/layoutlib/bridge/src/android/webkit/WebView.java new file mode 100644 index 0000000000000..3b6618831113f --- /dev/null +++ b/tools/layoutlib/bridge/src/android/webkit/WebView.java @@ -0,0 +1,254 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.webkit; + +import com.android.layoutlib.bridge.MockView; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.Picture; +import android.os.Bundle; +import android.os.Message; +import android.util.AttributeSet; +import android.view.View; + +/** + * Mock version of the WebView. + * Only non override public methods from the real WebView have been added in there. + * Methods that take an unknown class as parameter or as return object, have been removed for now. + * + * TODO: generate automatically. + * + */ +public class WebView extends MockView { + + /** + * Construct a new WebView with a Context object. + * @param context A Context object used to access application assets. + */ + public WebView(Context context) { + this(context, null); + } + + /** + * Construct a new WebView with layout parameters. + * @param context A Context object used to access application assets. + * @param attrs An AttributeSet passed to our parent. + */ + public WebView(Context context, AttributeSet attrs) { + this(context, attrs, com.android.internal.R.attr.webViewStyle); + } + + /** + * Construct a new WebView with layout parameters and a default style. + * @param context A Context object used to access application assets. + * @param attrs An AttributeSet passed to our parent. + * @param defStyle The default style resource ID. + */ + public WebView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + } + + // START FAKE PUBLIC METHODS + + public void setHorizontalScrollbarOverlay(boolean overlay) { + } + + public void setVerticalScrollbarOverlay(boolean overlay) { + } + + public boolean overlayHorizontalScrollbar() { + return false; + } + + public boolean overlayVerticalScrollbar() { + return false; + } + + public void savePassword(String host, String username, String password) { + } + + public void setHttpAuthUsernamePassword(String host, String realm, + String username, String password) { + } + + public String[] getHttpAuthUsernamePassword(String host, String realm) { + return null; + } + + public void destroy() { + } + + public static void enablePlatformNotifications() { + } + + public static void disablePlatformNotifications() { + } + + public WebBackForwardList saveState(Bundle outState) { + return null; + } + + public WebBackForwardList restoreState(Bundle inState) { + return null; + } + + public void loadUrl(String url) { + } + + public void loadData(String data, String mimeType, String encoding) { + } + + public void loadDataWithBaseURL(String baseUrl, String data, + String mimeType, String encoding, String failUrl) { + } + + public void stopLoading() { + } + + public void reload() { + } + + public boolean canGoBack() { + return false; + } + + public void goBack() { + } + + public boolean canGoForward() { + return false; + } + + public void goForward() { + } + + public boolean canGoBackOrForward(int steps) { + return false; + } + + public void goBackOrForward(int steps) { + } + + public boolean pageUp(boolean top) { + return false; + } + + public boolean pageDown(boolean bottom) { + return false; + } + + public void clearView() { + } + + public Picture capturePicture() { + return null; + } + + public float getScale() { + return 0; + } + + public void setInitialScale(int scaleInPercent) { + } + + public void invokeZoomPicker() { + } + + public void requestFocusNodeHref(Message hrefMsg) { + } + + public void requestImageRef(Message msg) { + } + + public String getUrl() { + return null; + } + + public String getTitle() { + return null; + } + + public Bitmap getFavicon() { + return null; + } + + public int getProgress() { + return 0; + } + + public int getContentHeight() { + return 0; + } + + public void pauseTimers() { + } + + public void resumeTimers() { + } + + public void clearCache() { + } + + public void clearFormData() { + } + + public void clearHistory() { + } + + public void clearSslPreferences() { + } + + public WebBackForwardList copyBackForwardList() { + return null; + } + + public static String findAddress(String addr) { + return null; + } + + public void documentHasImages(Message response) { + } + + public void setWebViewClient(WebViewClient client) { + } + + public void setDownloadListener(DownloadListener listener) { + } + + public void setWebChromeClient(WebChromeClient client) { + } + + public void addJavascriptInterface(Object obj, String interfaceName) { + } + + public WebSettings getSettings() { + return null; + } + + public View getZoomControls() { + return null; + } + + public boolean zoomIn() { + return false; + } + + public boolean zoomOut() { + return false; + } +} diff --git a/tools/layoutlib/bridge/src/com/android/internal/policy/PolicyManager.java b/tools/layoutlib/bridge/src/com/android/internal/policy/PolicyManager.java new file mode 100644 index 0000000000000..0100dc5910396 --- /dev/null +++ b/tools/layoutlib/bridge/src/com/android/internal/policy/PolicyManager.java @@ -0,0 +1,72 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.internal.policy; + +import com.android.ide.common.rendering.api.LayoutLog; +import com.android.layoutlib.bridge.Bridge; +import com.android.layoutlib.bridge.impl.RenderAction; + +import android.content.Context; +import android.view.BridgeInflater; +import android.view.FallbackEventHandler; +import android.view.KeyEvent; +import android.view.LayoutInflater; +import android.view.View; +import android.view.Window; +import android.view.WindowManagerPolicy; + +/** + * Custom implementation of PolicyManager that does nothing to run in LayoutLib. + * + */ +public class PolicyManager { + + public static Window makeNewWindow(Context context) { + // this will likely crash somewhere beyond so we log it. + Bridge.getLog().error(LayoutLog.TAG_UNSUPPORTED, + "Call to PolicyManager.makeNewWindow is not supported", null); + return null; + } + + public static LayoutInflater makeNewLayoutInflater(Context context) { + return new BridgeInflater(context, RenderAction.getCurrentContext().getProjectCallback()); + } + + public static WindowManagerPolicy makeNewWindowManager() { + // this will likely crash somewhere beyond so we log it. + Bridge.getLog().error(LayoutLog.TAG_UNSUPPORTED, + "Call to PolicyManager.makeNewWindowManager is not supported", null); + return null; + } + + public static FallbackEventHandler makeNewFallbackEventHandler(Context context) { + return new FallbackEventHandler() { + @Override + public void setView(View v) { + } + + @Override + public void preDispatchKeyEvent(KeyEvent event) { + } + + @Override + public boolean dispatchKeyEvent(KeyEvent event) { + return false; + } + }; + } +} diff --git a/tools/layoutlib/bridge/src/com/android/internal/textservice/ITextServicesManager_Stub_Delegate.java b/tools/layoutlib/bridge/src/com/android/internal/textservice/ITextServicesManager_Stub_Delegate.java new file mode 100644 index 0000000000000..3017292d8337f --- /dev/null +++ b/tools/layoutlib/bridge/src/com/android/internal/textservice/ITextServicesManager_Stub_Delegate.java @@ -0,0 +1,111 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.internal.textservice; + +import com.android.tools.layoutlib.annotations.LayoutlibDelegate; + +import android.os.Bundle; +import android.os.IBinder; +import android.os.RemoteException; +import android.view.textservice.SpellCheckerInfo; +import android.view.textservice.SpellCheckerSubtype; + + +/** + * Delegate used to provide new implementation of a select few methods of + * {@link ITextServicesManager$Stub} + * + * Through the layoutlib_create tool, the original methods of Stub have been replaced + * by calls to methods of the same name in this delegate class. + * + */ +public class ITextServicesManager_Stub_Delegate { + + @LayoutlibDelegate + public static ITextServicesManager asInterface(IBinder obj) { + // ignore the obj and return a fake interface implementation + return new FakeTextServicesManager(); + } + + private static class FakeTextServicesManager implements ITextServicesManager { + + @Override + public void finishSpellCheckerService(ISpellCheckerSessionListener arg0) + throws RemoteException { + // TODO Auto-generated method stub + + } + + @Override + public SpellCheckerInfo getCurrentSpellChecker(String arg0) throws RemoteException { + // TODO Auto-generated method stub + return null; + } + + @Override + public SpellCheckerSubtype getCurrentSpellCheckerSubtype(String arg0, boolean arg1) + throws RemoteException { + // TODO Auto-generated method stub + return null; + } + + @Override + public SpellCheckerInfo[] getEnabledSpellCheckers() throws RemoteException { + // TODO Auto-generated method stub + return null; + } + + @Override + public void getSpellCheckerService(String arg0, String arg1, + ITextServicesSessionListener arg2, ISpellCheckerSessionListener arg3, Bundle arg4) + throws RemoteException { + // TODO Auto-generated method stub + + } + + @Override + public boolean isSpellCheckerEnabled() throws RemoteException { + // TODO Auto-generated method stub + return false; + } + + @Override + public void setCurrentSpellChecker(String arg0, String arg1) throws RemoteException { + // TODO Auto-generated method stub + + } + + @Override + public void setCurrentSpellCheckerSubtype(String arg0, int arg1) throws RemoteException { + // TODO Auto-generated method stub + + } + + @Override + public void setSpellCheckerEnabled(boolean arg0) throws RemoteException { + // TODO Auto-generated method stub + + } + + @Override + public IBinder asBinder() { + // TODO Auto-generated method stub + return null; + } + + } + } diff --git a/tools/layoutlib/bridge/src/com/android/internal/util/XmlUtils_Delegate.java b/tools/layoutlib/bridge/src/com/android/internal/util/XmlUtils_Delegate.java new file mode 100644 index 0000000000000..bf998b8737cd3 --- /dev/null +++ b/tools/layoutlib/bridge/src/com/android/internal/util/XmlUtils_Delegate.java @@ -0,0 +1,74 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.internal.util; + +import com.android.tools.layoutlib.annotations.LayoutlibDelegate; + + +/** + * Delegate used to provide new implementation of a select few methods of {@link XmlUtils} + * + * Through the layoutlib_create tool, the original methods of XmlUtils have been replaced + * by calls to methods of the same name in this delegate class. + * + */ +public class XmlUtils_Delegate { + + @LayoutlibDelegate + /*package*/ static final int convertValueToInt(CharSequence charSeq, int defaultValue) { + if (null == charSeq) + return defaultValue; + + String nm = charSeq.toString(); + + // This code is copied from the original implementation. The issue is that + // The Dalvik libraries are able to handle Integer.parse("XXXXXXXX", 16) where XXXXXXX + // is > 80000000 but the Java VM cannot. + + int sign = 1; + int index = 0; + int len = nm.length(); + int base = 10; + + if ('-' == nm.charAt(0)) { + sign = -1; + index++; + } + + if ('0' == nm.charAt(index)) { + // Quick check for a zero by itself + if (index == (len - 1)) + return 0; + + char c = nm.charAt(index + 1); + + if ('x' == c || 'X' == c) { + index += 2; + base = 16; + } else { + index++; + base = 8; + } + } + else if ('#' == nm.charAt(index)) { + index++; + base = 16; + } + + return ((int)Long.parseLong(nm.substring(index), base)) * sign; + } +} diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/Bridge.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/Bridge.java new file mode 100644 index 0000000000000..42257c560a7f8 --- /dev/null +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/Bridge.java @@ -0,0 +1,621 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.layoutlib.bridge; + +import static com.android.ide.common.rendering.api.Result.Status.ERROR_UNKNOWN; +import static com.android.ide.common.rendering.api.Result.Status.SUCCESS; + +import com.android.ide.common.rendering.api.Capability; +import com.android.ide.common.rendering.api.DrawableParams; +import com.android.ide.common.rendering.api.LayoutLog; +import com.android.ide.common.rendering.api.RenderSession; +import com.android.ide.common.rendering.api.Result; +import com.android.ide.common.rendering.api.Result.Status; +import com.android.ide.common.rendering.api.SessionParams; +import com.android.layoutlib.bridge.impl.FontLoader; +import com.android.layoutlib.bridge.impl.RenderDrawable; +import com.android.layoutlib.bridge.impl.RenderSessionImpl; +import com.android.layoutlib.bridge.util.DynamicIdMap; +import com.android.ninepatch.NinePatchChunk; +import com.android.resources.ResourceType; +import com.android.tools.layoutlib.create.MethodAdapter; +import com.android.tools.layoutlib.create.OverrideMethod; +import com.android.util.Pair; + +import android.content.res.BridgeAssetManager; +import android.graphics.Bitmap; +import android.graphics.Typeface_Accessor; +import android.graphics.Typeface_Delegate; +import android.os.Looper; +import android.os.Looper_Accessor; +import android.view.View; +import android.view.ViewGroup; +import android.view.ViewParent; + +import java.io.File; +import java.lang.ref.SoftReference; +import java.lang.reflect.Field; +import java.lang.reflect.Modifier; +import java.util.Arrays; +import java.util.EnumMap; +import java.util.EnumSet; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.locks.ReentrantLock; + +/** + * Main entry point of the LayoutLib Bridge. + *

To use this bridge, simply instantiate an object of type {@link Bridge} and call + * {@link #createScene(SceneParams)} + */ +public final class Bridge extends com.android.ide.common.rendering.api.Bridge { + + public static class StaticMethodNotImplementedException extends RuntimeException { + private static final long serialVersionUID = 1L; + + public StaticMethodNotImplementedException(String msg) { + super(msg); + } + } + + /** + * Lock to ensure only one rendering/inflating happens at a time. + * This is due to some singleton in the Android framework. + */ + private final static ReentrantLock sLock = new ReentrantLock(); + + /** + * Maps from id to resource type/name. This is for com.android.internal.R + */ + private final static Map> sRMap = + new HashMap>(); + + /** + * Same as sRMap except for int[] instead of int resources. This is for android.R only. + */ + private final static Map sRArrayMap = new HashMap(); + /** + * Reverse map compared to sRMap, resource type -> (resource name -> id). + * This is for com.android.internal.R. + */ + private final static Map> sRevRMap = + new EnumMap>(ResourceType.class); + + // framework resources are defined as 0x01XX#### where XX is the resource type (layout, + // drawable, etc...). Using FF as the type allows for 255 resource types before we get a + // collision which should be fine. + private final static int DYNAMIC_ID_SEED_START = 0x01ff0000; + private final static DynamicIdMap sDynamicIds = new DynamicIdMap(DYNAMIC_ID_SEED_START); + + private final static Map>> sProjectBitmapCache = + new HashMap>>(); + private final static Map>> sProject9PatchCache = + new HashMap>>(); + + private final static Map> sFrameworkBitmapCache = + new HashMap>(); + private final static Map> sFramework9PatchCache = + new HashMap>(); + + private static Map> sEnumValueMap; + private static Map sPlatformProperties; + + /** + * int[] wrapper to use as keys in maps. + */ + private final static class IntArray { + private int[] mArray; + + private IntArray() { + // do nothing + } + + private IntArray(int[] a) { + mArray = a; + } + + private void set(int[] a) { + mArray = a; + } + + @Override + public int hashCode() { + return Arrays.hashCode(mArray); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) return true; + if (obj == null) return false; + if (getClass() != obj.getClass()) return false; + + IntArray other = (IntArray) obj; + if (!Arrays.equals(mArray, other.mArray)) return false; + return true; + } + } + + /** Instance of IntArrayWrapper to be reused in {@link #resolveResourceId(int[])}. */ + private final static IntArray sIntArrayWrapper = new IntArray(); + + /** + * A default log than prints to stdout/stderr. + */ + private final static LayoutLog sDefaultLog = new LayoutLog() { + @Override + public void error(String tag, String message, Object data) { + System.err.println(message); + } + + @Override + public void error(String tag, String message, Throwable throwable, Object data) { + System.err.println(message); + } + + @Override + public void warning(String tag, String message, Object data) { + System.out.println(message); + } + }; + + /** + * Current log. + */ + private static LayoutLog sCurrentLog = sDefaultLog; + + private EnumSet mCapabilities; + + @Override + public int getApiLevel() { + return com.android.ide.common.rendering.api.Bridge.API_CURRENT; + } + + @Override + public EnumSet getCapabilities() { + return mCapabilities; + } + + @Override + public boolean init(Map platformProperties, + File fontLocation, + Map> enumValueMap, + LayoutLog log) { + sPlatformProperties = platformProperties; + sEnumValueMap = enumValueMap; + + // don't use EnumSet.allOf(), because the bridge doesn't come with its specific version + // of layoutlib_api. It is provided by the client which could have a more recent version + // with newer, unsupported capabilities. + mCapabilities = EnumSet.of( + Capability.UNBOUND_RENDERING, + Capability.CUSTOM_BACKGROUND_COLOR, + Capability.RENDER, + Capability.LAYOUT_ONLY, + Capability.EMBEDDED_LAYOUT, + Capability.VIEW_MANIPULATION, + Capability.PLAY_ANIMATION, + Capability.ANIMATED_VIEW_MANIPULATION, + Capability.ADAPTER_BINDING, + Capability.EXTENDED_VIEWINFO, + Capability.FIXED_SCALABLE_NINE_PATCH); + + + BridgeAssetManager.initSystem(); + + // When DEBUG_LAYOUT is set and is not 0 or false, setup a default listener + // on static (native) methods which prints the signature on the console and + // throws an exception. + // This is useful when testing the rendering in ADT to identify static native + // methods that are ignored -- layoutlib_create makes them returns 0/false/null + // which is generally OK yet might be a problem, so this is how you'd find out. + // + // Currently layoutlib_create only overrides static native method. + // Static non-natives are not overridden and thus do not get here. + final String debug = System.getenv("DEBUG_LAYOUT"); + if (debug != null && !debug.equals("0") && !debug.equals("false")) { + + OverrideMethod.setDefaultListener(new MethodAdapter() { + @Override + public void onInvokeV(String signature, boolean isNative, Object caller) { + sDefaultLog.error(null, "Missing Stub: " + signature + + (isNative ? " (native)" : ""), null /*data*/); + + if (debug.equalsIgnoreCase("throw")) { + // Throwing this exception doesn't seem that useful. It breaks + // the layout editor yet doesn't display anything meaningful to the + // user. Having the error in the console is just as useful. We'll + // throw it only if the environment variable is "throw" or "THROW". + throw new StaticMethodNotImplementedException(signature); + } + } + }); + } + + // load the fonts. + FontLoader fontLoader = FontLoader.create(fontLocation.getAbsolutePath()); + if (fontLoader != null) { + Typeface_Delegate.init(fontLoader); + } else { + log.error(LayoutLog.TAG_BROKEN, + "Failed create FontLoader in layout lib.", null); + return false; + } + + // now parse com.android.internal.R (and only this one as android.R is a subset of + // the internal version), and put the content in the maps. + try { + Class r = com.android.internal.R.class; + + for (Class inner : r.getDeclaredClasses()) { + String resTypeName = inner.getSimpleName(); + ResourceType resType = ResourceType.getEnum(resTypeName); + if (resType != null) { + Map fullMap = new HashMap(); + sRevRMap.put(resType, fullMap); + + for (Field f : inner.getDeclaredFields()) { + // only process static final fields. Since the final attribute may have + // been altered by layoutlib_create, we only check static + int modifiers = f.getModifiers(); + if (Modifier.isStatic(modifiers)) { + Class type = f.getType(); + if (type.isArray() && type.getComponentType() == int.class) { + // if the object is an int[] we put it in sRArrayMap using an IntArray + // wrapper that properly implements equals and hashcode for the array + // objects, as required by the map contract. + sRArrayMap.put(new IntArray((int[]) f.get(null)), f.getName()); + } else if (type == int.class) { + Integer value = (Integer) f.get(null); + sRMap.put(value, Pair.of(resType, f.getName())); + fullMap.put(f.getName(), value); + } else { + assert false; + } + } + } + } + } + } catch (Throwable throwable) { + if (log != null) { + log.error(LayoutLog.TAG_BROKEN, + "Failed to load com.android.internal.R from the layout library jar", + throwable); + } + return false; + } + + return true; + } + + @Override + public boolean dispose() { + BridgeAssetManager.clearSystem(); + + // dispose of the default typeface. + Typeface_Accessor.resetDefaults(); + + return true; + } + + /** + * Starts a layout session by inflating and rendering it. The method returns a + * {@link RenderSession} on which further actions can be taken. + * + * @param params the {@link SessionParams} object with all the information necessary to create + * the scene. + * @return a new {@link RenderSession} object that contains the result of the layout. + * @since 5 + */ + @Override + public RenderSession createSession(SessionParams params) { + try { + Result lastResult = SUCCESS.createResult(); + RenderSessionImpl scene = new RenderSessionImpl(params); + try { + prepareThread(); + lastResult = scene.init(params.getTimeout()); + if (lastResult.isSuccess()) { + lastResult = scene.inflate(); + if (lastResult.isSuccess()) { + lastResult = scene.render(true /*freshRender*/); + } + } + } finally { + scene.release(); + cleanupThread(); + } + + return new BridgeRenderSession(scene, lastResult); + } catch (Throwable t) { + // get the real cause of the exception. + Throwable t2 = t; + while (t2.getCause() != null) { + t2 = t.getCause(); + } + return new BridgeRenderSession(null, + ERROR_UNKNOWN.createResult(t2.getMessage(), t)); + } + } + + @Override + public Result renderDrawable(DrawableParams params) { + try { + Result lastResult = SUCCESS.createResult(); + RenderDrawable action = new RenderDrawable(params); + try { + prepareThread(); + lastResult = action.init(params.getTimeout()); + if (lastResult.isSuccess()) { + lastResult = action.render(); + } + } finally { + action.release(); + cleanupThread(); + } + + return lastResult; + } catch (Throwable t) { + // get the real cause of the exception. + Throwable t2 = t; + while (t2.getCause() != null) { + t2 = t.getCause(); + } + return ERROR_UNKNOWN.createResult(t2.getMessage(), t); + } + } + + @Override + public void clearCaches(Object projectKey) { + if (projectKey != null) { + sProjectBitmapCache.remove(projectKey); + sProject9PatchCache.remove(projectKey); + } + } + + @Override + public Result getViewParent(Object viewObject) { + if (viewObject instanceof View) { + return Status.SUCCESS.createResult(((View)viewObject).getParent()); + } + + throw new IllegalArgumentException("viewObject is not a View"); + } + + @Override + public Result getViewIndex(Object viewObject) { + if (viewObject instanceof View) { + View view = (View) viewObject; + ViewParent parentView = view.getParent(); + + if (parentView instanceof ViewGroup) { + Status.SUCCESS.createResult(((ViewGroup) parentView).indexOfChild(view)); + } + + return Status.SUCCESS.createResult(); + } + + throw new IllegalArgumentException("viewObject is not a View"); + } + + /** + * Returns the lock for the bridge + */ + public static ReentrantLock getLock() { + return sLock; + } + + /** + * Prepares the current thread for rendering. + * + * Note that while this can be called several time, the first call to {@link #cleanupThread()} + * will do the clean-up, and make the thread unable to do further scene actions. + */ + public static void prepareThread() { + // we need to make sure the Looper has been initialized for this thread. + // this is required for View that creates Handler objects. + if (Looper.myLooper() == null) { + Looper.prepareMainLooper(); + } + } + + /** + * Cleans up thread-specific data. After this, the thread cannot be used for scene actions. + *

+ * Note that it doesn't matter how many times {@link #prepareThread()} was called, a single + * call to this will prevent the thread from doing further scene actions + */ + public static void cleanupThread() { + // clean up the looper + Looper_Accessor.cleanupThread(); + } + + public static LayoutLog getLog() { + return sCurrentLog; + } + + public static void setLog(LayoutLog log) { + // check only the thread currently owning the lock can do this. + if (sLock.isHeldByCurrentThread() == false) { + throw new IllegalStateException("scene must be acquired first. see #acquire(long)"); + } + + if (log != null) { + sCurrentLog = log; + } else { + sCurrentLog = sDefaultLog; + } + } + + /** + * Returns details of a framework resource from its integer value. + * @param value the integer value + * @return a Pair containing the resource type and name, or null if the id + * does not match any resource. + */ + public static Pair resolveResourceId(int value) { + Pair pair = sRMap.get(value); + if (pair == null) { + pair = sDynamicIds.resolveId(value); + if (pair == null) { + //System.out.println(String.format("Missing id: %1$08X (%1$d)", value)); + } + } + return pair; + } + + /** + * Returns the name of a framework resource whose value is an int array. + * @param array + */ + public static String resolveResourceId(int[] array) { + sIntArrayWrapper.set(array); + return sRArrayMap.get(sIntArrayWrapper); + } + + /** + * Returns the integer id of a framework resource, from a given resource type and resource name. + * @param type the type of the resource + * @param name the name of the resource. + * @return an {@link Integer} containing the resource id, or null if no resource were found. + */ + public static Integer getResourceId(ResourceType type, String name) { + Map map = sRevRMap.get(type); + Integer value = null; + if (map != null) { + value = map.get(name); + } + + if (value == null) { + value = sDynamicIds.getId(type, name); + } + + return value; + } + + /** + * Returns the list of possible enums for a given attribute name. + */ + public static Map getEnumValues(String attributeName) { + if (sEnumValueMap != null) { + return sEnumValueMap.get(attributeName); + } + + return null; + } + + /** + * Returns the platform build properties. + */ + public static Map getPlatformProperties() { + return sPlatformProperties; + } + + /** + * Returns the bitmap for a specific path, from a specific project cache, or from the + * framework cache. + * @param value the path of the bitmap + * @param projectKey the key of the project, or null to query the framework cache. + * @return the cached Bitmap or null if not found. + */ + public static Bitmap getCachedBitmap(String value, Object projectKey) { + if (projectKey != null) { + Map> map = sProjectBitmapCache.get(projectKey); + if (map != null) { + SoftReference ref = map.get(value); + if (ref != null) { + return ref.get(); + } + } + } else { + SoftReference ref = sFrameworkBitmapCache.get(value); + if (ref != null) { + return ref.get(); + } + } + + return null; + } + + /** + * Sets a bitmap in a project cache or in the framework cache. + * @param value the path of the bitmap + * @param bmp the Bitmap object + * @param projectKey the key of the project, or null to put the bitmap in the framework cache. + */ + public static void setCachedBitmap(String value, Bitmap bmp, Object projectKey) { + if (projectKey != null) { + Map> map = sProjectBitmapCache.get(projectKey); + + if (map == null) { + map = new HashMap>(); + sProjectBitmapCache.put(projectKey, map); + } + + map.put(value, new SoftReference(bmp)); + } else { + sFrameworkBitmapCache.put(value, new SoftReference(bmp)); + } + } + + /** + * Returns the 9 patch chunk for a specific path, from a specific project cache, or from the + * framework cache. + * @param value the path of the 9 patch + * @param projectKey the key of the project, or null to query the framework cache. + * @return the cached 9 patch or null if not found. + */ + public static NinePatchChunk getCached9Patch(String value, Object projectKey) { + if (projectKey != null) { + Map> map = sProject9PatchCache.get(projectKey); + + if (map != null) { + SoftReference ref = map.get(value); + if (ref != null) { + return ref.get(); + } + } + } else { + SoftReference ref = sFramework9PatchCache.get(value); + if (ref != null) { + return ref.get(); + } + } + + return null; + } + + /** + * Sets a 9 patch chunk in a project cache or in the framework cache. + * @param value the path of the 9 patch + * @param ninePatch the 9 patch object + * @param projectKey the key of the project, or null to put the bitmap in the framework cache. + */ + public static void setCached9Patch(String value, NinePatchChunk ninePatch, Object projectKey) { + if (projectKey != null) { + Map> map = sProject9PatchCache.get(projectKey); + + if (map == null) { + map = new HashMap>(); + sProject9PatchCache.put(projectKey, map); + } + + map.put(value, new SoftReference(ninePatch)); + } else { + sFramework9PatchCache.put(value, new SoftReference(ninePatch)); + } + } +} diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/BridgeConstants.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/BridgeConstants.java new file mode 100644 index 0000000000000..eb9e7f1dafb3d --- /dev/null +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/BridgeConstants.java @@ -0,0 +1,51 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.layoutlib.bridge; + +/** + * Constant definition class.
+ *
+ * Most constants have a prefix defining the content. + *

    + *
  • WS_ Workspace path constant. Those are absolute paths, + * from the project root.
  • + *
  • OS_ OS path constant. These paths are different depending on the platform.
  • + *
  • FN_ File name constant.
  • + *
  • FD_ Folder name constant.
  • + *
  • EXT_ File extension constant. This does NOT include a dot.
  • + *
  • DOT_ File extension constant. This start with a dot.
  • + *
  • RE_ Regexp constant.
  • + *
  • NS_ Namespace constant.
  • + *
  • CLASS_ Fully qualified class name.
  • + *
+ * + */ +public class BridgeConstants { + + /** Namespace for the resource XML */ + public final static String NS_RESOURCES = "http://schemas.android.com/apk/res/android"; + + /** App auto namespace */ + public final static String NS_APP_RES_AUTO = "http://schemas.android.com/apk/res-auto"; + + public final static String R = "com.android.internal.R"; + + + public final static String MATCH_PARENT = "match_parent"; + public final static String FILL_PARENT = "fill_parent"; + public final static String WRAP_CONTENT = "wrap_content"; +} diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/BridgeRenderSession.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/BridgeRenderSession.java new file mode 100644 index 0000000000000..f9f4b3a86b3ee --- /dev/null +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/BridgeRenderSession.java @@ -0,0 +1,196 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.layoutlib.bridge; + +import com.android.ide.common.rendering.api.IAnimationListener; +import com.android.ide.common.rendering.api.ILayoutPullParser; +import com.android.ide.common.rendering.api.RenderParams; +import com.android.ide.common.rendering.api.RenderSession; +import com.android.ide.common.rendering.api.Result; +import com.android.ide.common.rendering.api.ViewInfo; +import com.android.layoutlib.bridge.impl.RenderSessionImpl; + +import android.view.View; +import android.view.ViewGroup; + +import java.awt.image.BufferedImage; +import java.util.List; +import java.util.Map; + +/** + * An implementation of {@link RenderSession}. + * + * This is a pretty basic class that does almost nothing. All of the work is done in + * {@link RenderSessionImpl}. + * + */ +public class BridgeRenderSession extends RenderSession { + + private final RenderSessionImpl mSession; + private Result mLastResult; + + @Override + public Result getResult() { + return mLastResult; + } + + @Override + public BufferedImage getImage() { + return mSession.getImage(); + } + + @Override + public boolean isAlphaChannelImage() { + return mSession.isAlphaChannelImage(); + } + + @Override + public List getRootViews() { + return mSession.getViewInfos(); + } + + @Override + public Map getDefaultProperties(Object viewObject) { + return mSession.getDefaultProperties(viewObject); + } + + @Override + public Result getProperty(Object objectView, String propertyName) { + // pass + return super.getProperty(objectView, propertyName); + } + + @Override + public Result setProperty(Object objectView, String propertyName, String propertyValue) { + // pass + return super.setProperty(objectView, propertyName, propertyValue); + } + + @Override + public Result render(long timeout) { + try { + Bridge.prepareThread(); + mLastResult = mSession.acquire(timeout); + if (mLastResult.isSuccess()) { + mLastResult = mSession.render(false /*freshRender*/); + } + } finally { + mSession.release(); + Bridge.cleanupThread(); + } + + return mLastResult; + } + + @Override + public Result animate(Object targetObject, String animationName, + boolean isFrameworkAnimation, IAnimationListener listener) { + try { + Bridge.prepareThread(); + mLastResult = mSession.acquire(RenderParams.DEFAULT_TIMEOUT); + if (mLastResult.isSuccess()) { + mLastResult = mSession.animate(targetObject, animationName, isFrameworkAnimation, + listener); + } + } finally { + mSession.release(); + Bridge.cleanupThread(); + } + + return mLastResult; + } + + @Override + public Result insertChild(Object parentView, ILayoutPullParser childXml, int index, + IAnimationListener listener) { + if (parentView instanceof ViewGroup == false) { + throw new IllegalArgumentException("parentView is not a ViewGroup"); + } + + try { + Bridge.prepareThread(); + mLastResult = mSession.acquire(RenderParams.DEFAULT_TIMEOUT); + if (mLastResult.isSuccess()) { + mLastResult = mSession.insertChild((ViewGroup) parentView, childXml, index, + listener); + } + } finally { + mSession.release(); + Bridge.cleanupThread(); + } + + return mLastResult; + } + + + @Override + public Result moveChild(Object parentView, Object childView, int index, + Map layoutParams, IAnimationListener listener) { + if (parentView instanceof ViewGroup == false) { + throw new IllegalArgumentException("parentView is not a ViewGroup"); + } + if (childView instanceof View == false) { + throw new IllegalArgumentException("childView is not a View"); + } + + try { + Bridge.prepareThread(); + mLastResult = mSession.acquire(RenderParams.DEFAULT_TIMEOUT); + if (mLastResult.isSuccess()) { + mLastResult = mSession.moveChild((ViewGroup) parentView, (View) childView, index, + layoutParams, listener); + } + } finally { + mSession.release(); + Bridge.cleanupThread(); + } + + return mLastResult; + } + + @Override + public Result removeChild(Object childView, IAnimationListener listener) { + if (childView instanceof View == false) { + throw new IllegalArgumentException("childView is not a View"); + } + + try { + Bridge.prepareThread(); + mLastResult = mSession.acquire(RenderParams.DEFAULT_TIMEOUT); + if (mLastResult.isSuccess()) { + mLastResult = mSession.removeChild((View) childView, listener); + } + } finally { + mSession.release(); + Bridge.cleanupThread(); + } + + return mLastResult; + } + + @Override + public void dispose() { + } + + /*package*/ BridgeRenderSession(RenderSessionImpl scene, Result lastResult) { + mSession = scene; + if (scene != null) { + mSession.setScene(this); + } + mLastResult = lastResult; + } +} diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/MockView.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/MockView.java new file mode 100644 index 0000000000000..3d50b2a8c0e73 --- /dev/null +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/MockView.java @@ -0,0 +1,47 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.layoutlib.bridge; + +import android.content.Context; +import android.graphics.Canvas; +import android.util.AttributeSet; +import android.view.Gravity; +import android.widget.TextView; + +/** + * Base class for mocked views. + * + * TODO: implement onDraw and draw a rectangle in a random color with the name of the class + * (or better the id of the view). + */ +public class MockView extends TextView { + + public MockView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + + setText(this.getClass().getSimpleName()); + setTextColor(0xFF000000); + setGravity(Gravity.CENTER); + } + + @Override + public void onDraw(Canvas canvas) { + canvas.drawARGB(0xFF, 0x7F, 0x7F, 0x7F); + + super.onDraw(canvas); + } +} diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContentProvider.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContentProvider.java new file mode 100644 index 0000000000000..688cc87f20a3b --- /dev/null +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContentProvider.java @@ -0,0 +1,137 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.layoutlib.bridge.android; + +import android.content.ContentProviderOperation; +import android.content.ContentProviderResult; +import android.content.ContentValues; +import android.content.IContentProvider; +import android.content.OperationApplicationException; +import android.content.res.AssetFileDescriptor; +import android.database.Cursor; +import android.net.Uri; +import android.os.Bundle; +import android.os.IBinder; +import android.os.ICancellationSignal; +import android.os.ParcelFileDescriptor; +import android.os.RemoteException; + +import java.io.FileNotFoundException; +import java.util.ArrayList; + +/** + * Mock implementation of {@link IContentProvider}. + * + * TODO: never return null when the method is not supposed to. Return fake data instead. + */ +public final class BridgeContentProvider implements IContentProvider { + @Override + public ContentProviderResult[] applyBatch(String callingPackage, + ArrayList arg0) + throws RemoteException, OperationApplicationException { + // TODO Auto-generated method stub + return null; + } + + @Override + public int bulkInsert(String callingPackage, Uri arg0, ContentValues[] arg1) + throws RemoteException { + // TODO Auto-generated method stub + return 0; + } + + @Override + public Bundle call(String callingPackage, String arg0, String arg1, Bundle arg2) + throws RemoteException { + // TODO Auto-generated method stub + return null; + } + + @Override + public int delete(String callingPackage, Uri arg0, String arg1, String[] arg2) + throws RemoteException { + // TODO Auto-generated method stub + return 0; + } + + @Override + public String getType(Uri arg0) throws RemoteException { + // TODO Auto-generated method stub + return null; + } + + @Override + public Uri insert(String callingPackage, Uri arg0, ContentValues arg1) throws RemoteException { + // TODO Auto-generated method stub + return null; + } + + @Override + public AssetFileDescriptor openAssetFile( + String callingPackage, Uri arg0, String arg1, ICancellationSignal signal) + throws RemoteException, FileNotFoundException { + // TODO Auto-generated method stub + return null; + } + + @Override + public ParcelFileDescriptor openFile( + String callingPackage, Uri arg0, String arg1, ICancellationSignal signal) + throws RemoteException, FileNotFoundException { + // TODO Auto-generated method stub + return null; + } + + @Override + public Cursor query(String callingPackage, Uri arg0, String[] arg1, String arg2, String[] arg3, + String arg4, ICancellationSignal arg5) throws RemoteException { + // TODO Auto-generated method stub + return null; + } + + @Override + public int update(String callingPackage, Uri arg0, ContentValues arg1, String arg2, + String[] arg3) throws RemoteException { + // TODO Auto-generated method stub + return 0; + } + + @Override + public IBinder asBinder() { + // TODO Auto-generated method stub + return null; + } + + @Override + public String[] getStreamTypes(Uri arg0, String arg1) throws RemoteException { + // TODO Auto-generated method stub + return null; + } + + @Override + public AssetFileDescriptor openTypedAssetFile(String callingPackage, Uri arg0, String arg1, + Bundle arg2, ICancellationSignal signal) throws RemoteException, FileNotFoundException { + // TODO Auto-generated method stub + return null; + } + + @Override + public ICancellationSignal createCancellationSignal() throws RemoteException { + // TODO Auto-generated method stub + return null; + } +} diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContentResolver.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContentResolver.java new file mode 100644 index 0000000000000..8d259d70121e2 --- /dev/null +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContentResolver.java @@ -0,0 +1,120 @@ +/* + * Copyright (C) 2009 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.layoutlib.bridge.android; + +import android.content.ContentResolver; +import android.content.Context; +import android.content.IContentProvider; +import android.database.ContentObserver; +import android.net.Uri; +import android.os.Bundle; + +/** + * A mock content resolver for the LayoutLib Bridge. + *

+ * It won't serve any actual data but it's good enough for all + * the widgets which expect to have a content resolver available via + * {@link BridgeContext#getContentResolver()}. + */ +public class BridgeContentResolver extends ContentResolver { + + private BridgeContentProvider mProvider = null; + + public BridgeContentResolver(Context context) { + super(context); + } + + @Override + public IContentProvider acquireProvider(Context c, String name) { + if (mProvider == null) { + mProvider = new BridgeContentProvider(); + } + + return mProvider; + } + + @Override + public IContentProvider acquireExistingProvider(Context c, String name) { + if (mProvider == null) { + mProvider = new BridgeContentProvider(); + } + + return mProvider; + } + + @Override + public boolean releaseProvider(IContentProvider icp) { + // ignore + return false; + } + + @Override + protected IContentProvider acquireUnstableProvider(Context c, String name) { + return acquireProvider(c, name); + } + + @Override + public boolean releaseUnstableProvider(IContentProvider icp) { + return releaseProvider(icp); + } + + /** @hide */ + @Override + public void unstableProviderDied(IContentProvider icp) { + } + + /** + * Stub for the layoutlib bridge content resolver. + */ + @Override + public void registerContentObserver(Uri uri, boolean notifyForDescendents, + ContentObserver observer) { + // pass + } + + /** + * Stub for the layoutlib bridge content resolver. + */ + @Override + public void unregisterContentObserver(ContentObserver observer) { + // pass + } + + /** + * Stub for the layoutlib bridge content resolver. + */ + @Override + public void notifyChange(Uri uri, ContentObserver observer, boolean syncToNetwork) { + // pass + } + + /** + * Stub for the layoutlib bridge content resolver. + */ + @Override + public void startSync(Uri uri, Bundle extras) { + // pass + } + + /** + * Stub for the layoutlib bridge content resolver. + */ + @Override + public void cancelSync(Uri uri) { + // pass + } +} diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java new file mode 100644 index 0000000000000..d63dcac1f218f --- /dev/null +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java @@ -0,0 +1,1427 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.layoutlib.bridge.android; + +import com.android.ide.common.rendering.api.ILayoutPullParser; +import com.android.ide.common.rendering.api.IProjectCallback; +import com.android.ide.common.rendering.api.LayoutLog; +import com.android.ide.common.rendering.api.RenderResources; +import com.android.ide.common.rendering.api.ResourceReference; +import com.android.ide.common.rendering.api.ResourceValue; +import com.android.ide.common.rendering.api.StyleResourceValue; +import com.android.layoutlib.bridge.Bridge; +import com.android.layoutlib.bridge.BridgeConstants; +import com.android.layoutlib.bridge.android.view.WindowManagerImpl; +import com.android.layoutlib.bridge.impl.ParserFactory; +import com.android.layoutlib.bridge.impl.Stack; +import com.android.resources.ResourceType; +import com.android.util.Pair; + +import org.xmlpull.v1.XmlPullParser; +import org.xmlpull.v1.XmlPullParserException; + +import android.content.BroadcastReceiver; +import android.content.ComponentName; +import android.content.ContentResolver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.content.IntentSender; +import android.content.ServiceConnection; +import android.content.SharedPreferences; +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageManager; +import android.content.res.AssetManager; +import android.content.res.BridgeResources; +import android.content.res.BridgeTypedArray; +import android.content.res.Configuration; +import android.content.res.Resources; +import android.content.res.Resources.Theme; +import android.content.res.TypedArray; +import android.database.DatabaseErrorHandler; +import android.database.sqlite.SQLiteDatabase; +import android.database.sqlite.SQLiteDatabase.CursorFactory; +import android.graphics.Bitmap; +import android.graphics.drawable.Drawable; +import android.net.Uri; +import android.os.Bundle; +import android.os.Handler; +import android.os.Looper; +import android.os.PowerManager; +import android.os.UserHandle; +import android.util.AttributeSet; +import android.util.DisplayMetrics; +import android.util.TypedValue; +import android.view.BridgeInflater; +import android.view.Display; +import android.view.DisplayAdjustments; +import android.view.View; +import android.view.ViewGroup; +import android.view.WindowManager; +import android.view.textservice.TextServicesManager; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.IdentityHashMap; +import java.util.List; +import java.util.Map; + +/** + * Custom implementation of Context/Activity to handle non compiled resources. + */ +public final class BridgeContext extends Context { + + private Resources mSystemResources; + private final HashMap mViewKeyMap = new HashMap(); + private final Object mProjectKey; + private final DisplayMetrics mMetrics; + private final RenderResources mRenderResources; + private final Configuration mConfig; + private final ApplicationInfo mApplicationInfo; + private final IProjectCallback mProjectCallback; + private final WindowManager mWindowManager; + + private Resources.Theme mTheme; + + private final Map> mDefaultPropMaps = + new IdentityHashMap>(); + + // maps for dynamically generated id representing style objects (StyleResourceValue) + private Map mDynamicIdToStyleMap; + private Map mStyleToDynamicIdMap; + private int mDynamicIdGenerator = 0x01030000; // Base id for framework R.style + + // cache for TypedArray generated from IStyleResourceValue object + private Map> mTypedArrayCache; + private BridgeInflater mBridgeInflater; + + private BridgeContentResolver mContentResolver; + + private final Stack mParserStack = new Stack(); + + /** + * @param projectKey An Object identifying the project. This is used for the cache mechanism. + * @param metrics the {@link DisplayMetrics}. + * @param renderResources the configured resources (both framework and projects) for this + * render. + * @param projectCallback + * @param config the Configuration object for this render. + * @param targetSdkVersion the targetSdkVersion of the application. + */ + public BridgeContext(Object projectKey, DisplayMetrics metrics, + RenderResources renderResources, + IProjectCallback projectCallback, + Configuration config, + int targetSdkVersion) { + mProjectKey = projectKey; + mMetrics = metrics; + mProjectCallback = projectCallback; + + mRenderResources = renderResources; + mConfig = config; + + mApplicationInfo = new ApplicationInfo(); + mApplicationInfo.targetSdkVersion = targetSdkVersion; + + mWindowManager = new WindowManagerImpl(mMetrics); + } + + /** + * Initializes the {@link Resources} singleton to be linked to this {@link Context}, its + * {@link DisplayMetrics}, {@link Configuration}, and {@link IProjectCallback}. + * + * @see #disposeResources() + */ + public void initResources() { + AssetManager assetManager = AssetManager.getSystem(); + + mSystemResources = BridgeResources.initSystem( + this, + assetManager, + mMetrics, + mConfig, + mProjectCallback); + mTheme = mSystemResources.newTheme(); + } + + /** + * Disposes the {@link Resources} singleton. + */ + public void disposeResources() { + BridgeResources.disposeSystem(); + } + + public void setBridgeInflater(BridgeInflater inflater) { + mBridgeInflater = inflater; + } + + public void addViewKey(View view, Object viewKey) { + mViewKeyMap.put(view, viewKey); + } + + public Object getViewKey(View view) { + return mViewKeyMap.get(view); + } + + public Object getProjectKey() { + return mProjectKey; + } + + public DisplayMetrics getMetrics() { + return mMetrics; + } + + public IProjectCallback getProjectCallback() { + return mProjectCallback; + } + + public RenderResources getRenderResources() { + return mRenderResources; + } + + public Map getDefaultPropMap(Object key) { + return mDefaultPropMaps.get(key); + } + + public Configuration getConfiguration() { + return mConfig; + } + + /** + * Adds a parser to the stack. + * @param parser the parser to add. + */ + public void pushParser(BridgeXmlBlockParser parser) { + if (ParserFactory.LOG_PARSER) { + System.out.println("PUSH " + parser.getParser().toString()); + } + mParserStack.push(parser); + } + + /** + * Removes the parser at the top of the stack + */ + public void popParser() { + BridgeXmlBlockParser parser = mParserStack.pop(); + if (ParserFactory.LOG_PARSER) { + System.out.println("POPD " + parser.getParser().toString()); + } + } + + /** + * Returns the current parser at the top the of the stack. + * @return a parser or null. + */ + public BridgeXmlBlockParser getCurrentParser() { + return mParserStack.peek(); + } + + /** + * Returns the previous parser. + * @return a parser or null if there isn't any previous parser + */ + public BridgeXmlBlockParser getPreviousParser() { + if (mParserStack.size() < 2) { + return null; + } + return mParserStack.get(mParserStack.size() - 2); + } + + public boolean resolveThemeAttribute(int resid, TypedValue outValue, boolean resolveRefs) { + Pair resourceInfo = Bridge.resolveResourceId(resid); + boolean isFrameworkRes = true; + if (resourceInfo == null) { + resourceInfo = mProjectCallback.resolveResourceId(resid); + isFrameworkRes = false; + } + + if (resourceInfo == null) { + return false; + } + + ResourceValue value = mRenderResources.findItemInTheme(resourceInfo.getSecond(), + isFrameworkRes); + if (resolveRefs) { + value = mRenderResources.resolveResValue(value); + } + + // check if this is a style resource + if (value instanceof StyleResourceValue) { + // get the id that will represent this style. + outValue.resourceId = getDynamicIdByStyle((StyleResourceValue)value); + return true; + } + + + int a; + // if this is a framework value. + if (value.isFramework()) { + // look for idName in the android R classes. + // use 0 a default res value as it's not a valid id value. + a = getFrameworkResourceValue(value.getResourceType(), value.getName(), 0 /*defValue*/); + } else { + // look for idName in the project R class. + // use 0 a default res value as it's not a valid id value. + a = getProjectResourceValue(value.getResourceType(), value.getName(), 0 /*defValue*/); + } + + if (a != 0) { + outValue.resourceId = a; + return true; + } + + return false; + } + + + public ResourceReference resolveId(int id) { + // first get the String related to this id in the framework + Pair resourceInfo = Bridge.resolveResourceId(id); + + if (resourceInfo != null) { + return new ResourceReference(resourceInfo.getSecond(), true); + } + + // didn't find a match in the framework? look in the project. + if (mProjectCallback != null) { + resourceInfo = mProjectCallback.resolveResourceId(id); + + if (resourceInfo != null) { + return new ResourceReference(resourceInfo.getSecond(), false); + } + } + + return null; + } + + public Pair inflateView(ResourceReference resource, ViewGroup parent, + boolean attachToRoot, boolean skipCallbackParser) { + boolean isPlatformLayout = resource.isFramework(); + + if (isPlatformLayout == false && skipCallbackParser == false) { + // check if the project callback can provide us with a custom parser. + ILayoutPullParser parser = getParser(resource); + + if (parser != null) { + BridgeXmlBlockParser blockParser = new BridgeXmlBlockParser(parser, + this, resource.isFramework()); + try { + pushParser(blockParser); + return Pair.of( + mBridgeInflater.inflate(blockParser, parent, attachToRoot), + true); + } finally { + popParser(); + } + } + } + + ResourceValue resValue; + if (resource instanceof ResourceValue) { + resValue = (ResourceValue) resource; + } else { + if (isPlatformLayout) { + resValue = mRenderResources.getFrameworkResource(ResourceType.LAYOUT, + resource.getName()); + } else { + resValue = mRenderResources.getProjectResource(ResourceType.LAYOUT, + resource.getName()); + } + } + + if (resValue != null) { + + File xml = new File(resValue.getValue()); + if (xml.isFile()) { + // we need to create a pull parser around the layout XML file, and then + // give that to our XmlBlockParser + try { + XmlPullParser parser = ParserFactory.create(xml); + + // set the resource ref to have correct view cookies + mBridgeInflater.setResourceReference(resource); + + BridgeXmlBlockParser blockParser = new BridgeXmlBlockParser(parser, + this, resource.isFramework()); + try { + pushParser(blockParser); + return Pair.of( + mBridgeInflater.inflate(blockParser, parent, attachToRoot), + false); + } finally { + popParser(); + } + } catch (XmlPullParserException e) { + Bridge.getLog().error(LayoutLog.TAG_BROKEN, + "Failed to configure parser for " + xml, e, null /*data*/); + // we'll return null below. + } catch (FileNotFoundException e) { + // this shouldn't happen since we check above. + } finally { + mBridgeInflater.setResourceReference(null); + } + } else { + Bridge.getLog().error(LayoutLog.TAG_BROKEN, + String.format("File %s is missing!", xml), null); + } + } else { + Bridge.getLog().error(LayoutLog.TAG_BROKEN, + String.format("Layout %s%s does not exist.", isPlatformLayout ? "android:" : "", + resource.getName()), null); + } + + return Pair.of(null, false); + } + + @SuppressWarnings("deprecation") + private ILayoutPullParser getParser(ResourceReference resource) { + ILayoutPullParser parser; + if (resource instanceof ResourceValue) { + parser = mProjectCallback.getParser((ResourceValue) resource); + } else { + parser = mProjectCallback.getParser(resource.getName()); + } + return parser; + } + + // ------------ Context methods + + @Override + public Resources getResources() { + return mSystemResources; + } + + @Override + public Theme getTheme() { + return mTheme; + } + + @Override + public ClassLoader getClassLoader() { + return this.getClass().getClassLoader(); + } + + @Override + public Object getSystemService(String service) { + if (LAYOUT_INFLATER_SERVICE.equals(service)) { + return mBridgeInflater; + } + + if (TEXT_SERVICES_MANAGER_SERVICE.equals(service)) { + // we need to return a valid service to avoid NPE + return TextServicesManager.getInstance(); + } + + if (WINDOW_SERVICE.equals(service)) { + return mWindowManager; + } + + // needed by SearchView + if (INPUT_METHOD_SERVICE.equals(service)) { + return null; + } + + if (POWER_SERVICE.equals(service)) { + return new PowerManager(this, new BridgePowerManager(), new Handler()); + } + + throw new UnsupportedOperationException("Unsupported Service: " + service); + } + + + @Override + public final TypedArray obtainStyledAttributes(int[] attrs) { + return createStyleBasedTypedArray(mRenderResources.getCurrentTheme(), attrs); + } + + @Override + public final TypedArray obtainStyledAttributes(int resid, int[] attrs) + throws Resources.NotFoundException { + // get the StyleResourceValue based on the resId; + StyleResourceValue style = getStyleByDynamicId(resid); + + if (style == null) { + throw new Resources.NotFoundException(); + } + + if (mTypedArrayCache == null) { + mTypedArrayCache = new HashMap>(); + + Map map = new HashMap(); + mTypedArrayCache.put(attrs, map); + + BridgeTypedArray ta = createStyleBasedTypedArray(style, attrs); + map.put(resid, ta); + + return ta; + } + + // get the 2nd map + Map map = mTypedArrayCache.get(attrs); + if (map == null) { + map = new HashMap(); + mTypedArrayCache.put(attrs, map); + } + + // get the array from the 2nd map + TypedArray ta = map.get(resid); + + if (ta == null) { + ta = createStyleBasedTypedArray(style, attrs); + map.put(resid, ta); + } + + return ta; + } + + @Override + public final TypedArray obtainStyledAttributes(AttributeSet set, int[] attrs) { + return obtainStyledAttributes(set, attrs, 0, 0); + } + + @Override + public TypedArray obtainStyledAttributes(AttributeSet set, int[] attrs, + int defStyleAttr, int defStyleRes) { + + Map defaultPropMap = null; + boolean isPlatformFile = true; + + // Hint: for XmlPullParser, attach source //DEVICE_SRC/dalvik/libcore/xml/src/java + if (set instanceof BridgeXmlBlockParser) { + BridgeXmlBlockParser parser = null; + parser = (BridgeXmlBlockParser)set; + + isPlatformFile = parser.isPlatformFile(); + + Object key = parser.getViewCookie(); + if (key != null) { + defaultPropMap = mDefaultPropMaps.get(key); + if (defaultPropMap == null) { + defaultPropMap = new HashMap(); + mDefaultPropMaps.put(key, defaultPropMap); + } + } + + } else if (set instanceof BridgeLayoutParamsMapAttributes) { + // this is only for temp layout params generated dynamically, so this is never + // platform content. + isPlatformFile = false; + } else if (set != null) { // null parser is ok + // really this should not be happening since its instantiated in Bridge + Bridge.getLog().error(LayoutLog.TAG_BROKEN, + "Parser is not a BridgeXmlBlockParser!", null /*data*/); + return null; + } + + List> attributeList = searchAttrs(attrs); + + BridgeTypedArray ta = ((BridgeResources) mSystemResources).newTypeArray(attrs.length, + isPlatformFile); + + // look for a custom style. + String customStyle = null; + if (set != null) { + customStyle = set.getAttributeValue(null /* namespace*/, "style"); + } + + StyleResourceValue customStyleValues = null; + if (customStyle != null) { + ResourceValue item = mRenderResources.findResValue(customStyle, + false /*forceFrameworkOnly*/); + + // resolve it in case it links to something else + item = mRenderResources.resolveResValue(item); + + if (item instanceof StyleResourceValue) { + customStyleValues = (StyleResourceValue)item; + } + } + + // resolve the defStyleAttr value into a IStyleResourceValue + StyleResourceValue defStyleValues = null; + + if (defStyleAttr != 0) { + // get the name from the int. + Pair defStyleAttribute = searchAttr(defStyleAttr); + + if (defaultPropMap != null) { + String defStyleName = defStyleAttribute.getFirst(); + if (defStyleAttribute.getSecond()) { + defStyleName = "android:" + defStyleName; + } + defaultPropMap.put("style", defStyleName); + } + + // look for the style in the current theme, and its parent: + ResourceValue item = mRenderResources.findItemInTheme(defStyleAttribute.getFirst(), + defStyleAttribute.getSecond()); + + if (item != null) { + // item is a reference to a style entry. Search for it. + item = mRenderResources.findResValue(item.getValue(), + false /*forceFrameworkOnly*/); + + if (item instanceof StyleResourceValue) { + defStyleValues = (StyleResourceValue)item; + } + } else { + Bridge.getLog().error(LayoutLog.TAG_RESOURCES_RESOLVE_THEME_ATTR, + String.format( + "Failed to find style '%s' in current theme", + defStyleAttribute.getFirst()), + null /*data*/); + } + } else if (defStyleRes != 0) { + boolean isFrameworkRes = true; + Pair value = Bridge.resolveResourceId(defStyleRes); + if (value == null) { + value = mProjectCallback.resolveResourceId(defStyleRes); + isFrameworkRes = false; + } + + if (value != null) { + if (value.getFirst() == ResourceType.STYLE) { + // look for the style in the current theme, and its parent: + ResourceValue item = mRenderResources.findItemInTheme(value.getSecond(), + isFrameworkRes); + if (item != null) { + if (item instanceof StyleResourceValue) { + if (defaultPropMap != null) { + defaultPropMap.put("style", item.getName()); + } + + defStyleValues = (StyleResourceValue)item; + } + } else { + Bridge.getLog().error(null, + String.format( + "Style with id 0x%x (resolved to '%s') does not exist.", + defStyleRes, value.getSecond()), + null /*data*/); + } + } else { + Bridge.getLog().error(null, + String.format( + "Resouce id 0x%x is not of type STYLE (instead %s)", + defStyleRes, value.getFirst().toString()), + null /*data*/); + } + } else { + Bridge.getLog().error(null, + String.format( + "Failed to find style with id 0x%x in current theme", + defStyleRes), + null /*data*/); + } + } + + String appNamespace = mProjectCallback.getNamespace(); + + if (attributeList != null) { + for (int index = 0 ; index < attributeList.size() ; index++) { + Pair attribute = attributeList.get(index); + + if (attribute == null) { + continue; + } + + String attrName = attribute.getFirst(); + boolean frameworkAttr = attribute.getSecond().booleanValue(); + String value = null; + if (set != null) { + value = set.getAttributeValue( + frameworkAttr ? BridgeConstants.NS_RESOURCES : appNamespace, + attrName); + + // if this is an app attribute, and the first get fails, try with the + // new res-auto namespace as well + if (frameworkAttr == false && value == null) { + value = set.getAttributeValue(BridgeConstants.NS_APP_RES_AUTO, attrName); + } + } + + // if there's no direct value for this attribute in the XML, we look for default + // values in the widget defStyle, and then in the theme. + if (value == null) { + ResourceValue resValue = null; + + // look for the value in the custom style first (and its parent if needed) + if (customStyleValues != null) { + resValue = mRenderResources.findItemInStyle(customStyleValues, + attrName, frameworkAttr); + } + + // then look for the value in the default Style (and its parent if needed) + if (resValue == null && defStyleValues != null) { + resValue = mRenderResources.findItemInStyle(defStyleValues, + attrName, frameworkAttr); + } + + // if the item is not present in the defStyle, we look in the main theme (and + // its parent themes) + if (resValue == null) { + resValue = mRenderResources.findItemInTheme(attrName, frameworkAttr); + } + + // if we found a value, we make sure this doesn't reference another value. + // So we resolve it. + if (resValue != null) { + // put the first default value, before the resolution. + if (defaultPropMap != null) { + defaultPropMap.put(attrName, resValue.getValue()); + } + + resValue = mRenderResources.resolveResValue(resValue); + } + + ta.bridgeSetValue(index, attrName, frameworkAttr, resValue); + } else { + // there is a value in the XML, but we need to resolve it in case it's + // referencing another resource or a theme value. + ta.bridgeSetValue(index, attrName, frameworkAttr, + mRenderResources.resolveValue(null, attrName, value, isPlatformFile)); + } + } + } + + ta.sealArray(); + + return ta; + } + + @Override + public Looper getMainLooper() { + return Looper.myLooper(); + } + + + // ------------- private new methods + + /** + * Creates a {@link BridgeTypedArray} by filling the values defined by the int[] with the + * values found in the given style. + * @see #obtainStyledAttributes(int, int[]) + */ + private BridgeTypedArray createStyleBasedTypedArray(StyleResourceValue style, int[] attrs) + throws Resources.NotFoundException { + + List> attributes = searchAttrs(attrs); + + BridgeTypedArray ta = ((BridgeResources) mSystemResources).newTypeArray(attrs.length, + false); + + // for each attribute, get its name so that we can search it in the style + for (int i = 0 ; i < attrs.length ; i++) { + Pair attribute = attributes.get(i); + + if (attribute != null) { + // look for the value in the given style + ResourceValue resValue = mRenderResources.findItemInStyle(style, + attribute.getFirst(), attribute.getSecond()); + + if (resValue != null) { + // resolve it to make sure there are no references left. + ta.bridgeSetValue(i, attribute.getFirst(), attribute.getSecond(), + mRenderResources.resolveResValue(resValue)); + } + } + } + + ta.sealArray(); + + return ta; + } + + + /** + * The input int[] attrs is a list of attributes. The returns a list of information about + * each attributes. The information is (name, isFramework) + *

+ * + * @param attrs An attribute array reference given to obtainStyledAttributes. + * @return List of attribute information. + */ + private List> searchAttrs(int[] attrs) { + List> results = new ArrayList>(attrs.length); + + // for each attribute, get its name so that we can search it in the style + for (int i = 0 ; i < attrs.length ; i++) { + Pair resolvedResource = Bridge.resolveResourceId(attrs[i]); + boolean isFramework = false; + if (resolvedResource != null) { + isFramework = true; + } else { + resolvedResource = mProjectCallback.resolveResourceId(attrs[i]); + } + + if (resolvedResource != null) { + results.add(Pair.of(resolvedResource.getSecond(), isFramework)); + } else { + results.add(null); + } + } + + return results; + } + + /** + * Searches for the attribute referenced by its internal id. + * + * @param attr An attribute reference given to obtainStyledAttributes such as defStyle. + * @return A (name, isFramework) pair describing the attribute if found. Returns null + * if nothing is found. + */ + public Pair searchAttr(int attr) { + Pair info = Bridge.resolveResourceId(attr); + if (info != null) { + return Pair.of(info.getSecond(), Boolean.TRUE); + } + + info = mProjectCallback.resolveResourceId(attr); + if (info != null) { + return Pair.of(info.getSecond(), Boolean.FALSE); + } + + return null; + } + + public int getDynamicIdByStyle(StyleResourceValue resValue) { + if (mDynamicIdToStyleMap == null) { + // create the maps. + mDynamicIdToStyleMap = new HashMap(); + mStyleToDynamicIdMap = new HashMap(); + } + + // look for an existing id + Integer id = mStyleToDynamicIdMap.get(resValue); + + if (id == null) { + // generate a new id + id = Integer.valueOf(++mDynamicIdGenerator); + + // and add it to the maps. + mDynamicIdToStyleMap.put(id, resValue); + mStyleToDynamicIdMap.put(resValue, id); + } + + return id; + } + + private StyleResourceValue getStyleByDynamicId(int i) { + if (mDynamicIdToStyleMap != null) { + return mDynamicIdToStyleMap.get(i); + } + + return null; + } + + public int getFrameworkResourceValue(ResourceType resType, String resName, int defValue) { + Integer value = Bridge.getResourceId(resType, resName); + if (value != null) { + return value.intValue(); + } + + return defValue; + } + + public int getProjectResourceValue(ResourceType resType, String resName, int defValue) { + if (mProjectCallback != null) { + Integer value = mProjectCallback.getResourceId(resType, resName); + if (value != null) { + return value.intValue(); + } + } + + return defValue; + } + + //------------ NOT OVERRIDEN -------------------- + + @Override + public boolean bindService(Intent arg0, ServiceConnection arg1, int arg2) { + // pass + return false; + } + + @Override + public int checkCallingOrSelfPermission(String arg0) { + // pass + return 0; + } + + @Override + public int checkCallingOrSelfUriPermission(Uri arg0, int arg1) { + // pass + return 0; + } + + @Override + public int checkCallingPermission(String arg0) { + // pass + return 0; + } + + @Override + public int checkCallingUriPermission(Uri arg0, int arg1) { + // pass + return 0; + } + + @Override + public int checkPermission(String arg0, int arg1, int arg2) { + // pass + return 0; + } + + @Override + public int checkUriPermission(Uri arg0, int arg1, int arg2, int arg3) { + // pass + return 0; + } + + @Override + public int checkUriPermission(Uri arg0, String arg1, String arg2, int arg3, + int arg4, int arg5) { + // pass + return 0; + } + + @Override + public void clearWallpaper() { + // pass + + } + + @Override + public Context createPackageContext(String arg0, int arg1) { + // pass + return null; + } + + @Override + public Context createPackageContextAsUser(String arg0, int arg1, UserHandle user) { + // pass + return null; + } + + @Override + public Context createConfigurationContext(Configuration overrideConfiguration) { + // pass + return null; + } + + @Override + public Context createDisplayContext(Display display) { + // pass + return null; + } + + @Override + public String[] databaseList() { + // pass + return null; + } + + @Override + public boolean deleteDatabase(String arg0) { + // pass + return false; + } + + @Override + public boolean deleteFile(String arg0) { + // pass + return false; + } + + @Override + public void enforceCallingOrSelfPermission(String arg0, String arg1) { + // pass + + } + + @Override + public void enforceCallingOrSelfUriPermission(Uri arg0, int arg1, + String arg2) { + // pass + + } + + @Override + public void enforceCallingPermission(String arg0, String arg1) { + // pass + + } + + @Override + public void enforceCallingUriPermission(Uri arg0, int arg1, String arg2) { + // pass + + } + + @Override + public void enforcePermission(String arg0, int arg1, int arg2, String arg3) { + // pass + + } + + @Override + public void enforceUriPermission(Uri arg0, int arg1, int arg2, int arg3, + String arg4) { + // pass + + } + + @Override + public void enforceUriPermission(Uri arg0, String arg1, String arg2, + int arg3, int arg4, int arg5, String arg6) { + // pass + + } + + @Override + public String[] fileList() { + // pass + return null; + } + + @Override + public AssetManager getAssets() { + // pass + return null; + } + + @Override + public File getCacheDir() { + // pass + return null; + } + + @Override + public File getExternalCacheDir() { + // pass + return null; + } + + @Override + public ContentResolver getContentResolver() { + if (mContentResolver == null) { + mContentResolver = new BridgeContentResolver(this); + } + return mContentResolver; + } + + @Override + public File getDatabasePath(String arg0) { + // pass + return null; + } + + @Override + public File getDir(String arg0, int arg1) { + // pass + return null; + } + + @Override + public File getFileStreamPath(String arg0) { + // pass + return null; + } + + @Override + public File getFilesDir() { + // pass + return null; + } + + @Override + public File getExternalFilesDir(String type) { + // pass + return null; + } + + @Override + public String getPackageCodePath() { + // pass + return null; + } + + @Override + public PackageManager getPackageManager() { + // pass + return null; + } + + @Override + public String getPackageName() { + // pass + return null; + } + + @Override + public String getBasePackageName() { + // pass + return null; + } + + @Override + public ApplicationInfo getApplicationInfo() { + return mApplicationInfo; + } + + @Override + public String getPackageResourcePath() { + // pass + return null; + } + + @Override + public File getSharedPrefsFile(String name) { + // pass + return null; + } + + @Override + public SharedPreferences getSharedPreferences(String arg0, int arg1) { + // pass + return null; + } + + @Override + public Drawable getWallpaper() { + // pass + return null; + } + + @Override + public int getWallpaperDesiredMinimumWidth() { + return -1; + } + + @Override + public int getWallpaperDesiredMinimumHeight() { + return -1; + } + + @Override + public void grantUriPermission(String arg0, Uri arg1, int arg2) { + // pass + + } + + @Override + public FileInputStream openFileInput(String arg0) throws FileNotFoundException { + // pass + return null; + } + + @Override + public FileOutputStream openFileOutput(String arg0, int arg1) throws FileNotFoundException { + // pass + return null; + } + + @Override + public SQLiteDatabase openOrCreateDatabase(String arg0, int arg1, CursorFactory arg2) { + // pass + return null; + } + + @Override + public SQLiteDatabase openOrCreateDatabase(String arg0, int arg1, + CursorFactory arg2, DatabaseErrorHandler arg3) { + // pass + return null; + } + + @Override + public Drawable peekWallpaper() { + // pass + return null; + } + + @Override + public Intent registerReceiver(BroadcastReceiver arg0, IntentFilter arg1) { + // pass + return null; + } + + @Override + public Intent registerReceiver(BroadcastReceiver arg0, IntentFilter arg1, + String arg2, Handler arg3) { + // pass + return null; + } + + @Override + public Intent registerReceiverAsUser(BroadcastReceiver arg0, UserHandle arg0p5, + IntentFilter arg1, String arg2, Handler arg3) { + // pass + return null; + } + + @Override + public void removeStickyBroadcast(Intent arg0) { + // pass + + } + + @Override + public void revokeUriPermission(Uri arg0, int arg1) { + // pass + + } + + @Override + public void sendBroadcast(Intent arg0) { + // pass + + } + + @Override + public void sendBroadcast(Intent arg0, String arg1) { + // pass + + } + + @Override + public void sendBroadcast(Intent intent, String receiverPermission, int appOp) { + // pass + } + + @Override + public void sendOrderedBroadcast(Intent arg0, String arg1) { + // pass + + } + + @Override + public void sendOrderedBroadcast(Intent arg0, String arg1, + BroadcastReceiver arg2, Handler arg3, int arg4, String arg5, + Bundle arg6) { + // pass + + } + + @Override + public void sendOrderedBroadcast(Intent intent, String receiverPermission, int appOp, + BroadcastReceiver resultReceiver, Handler scheduler, int initialCode, + String initialData, Bundle initialExtras) { + // pass + } + + @Override + public void sendBroadcastAsUser(Intent intent, UserHandle user) { + // pass + } + + @Override + public void sendBroadcastAsUser(Intent intent, UserHandle user, + String receiverPermission) { + // pass + } + + @Override + public void sendOrderedBroadcastAsUser(Intent intent, UserHandle user, + String receiverPermission, BroadcastReceiver resultReceiver, Handler scheduler, + int initialCode, String initialData, Bundle initialExtras) { + // pass + } + + @Override + public void sendStickyBroadcast(Intent arg0) { + // pass + + } + + @Override + public void sendStickyOrderedBroadcast(Intent intent, + BroadcastReceiver resultReceiver, Handler scheduler, int initialCode, String initialData, + Bundle initialExtras) { + // pass + } + + @Override + public void sendStickyBroadcastAsUser(Intent intent, UserHandle user) { + // pass + } + + @Override + public void sendStickyOrderedBroadcastAsUser(Intent intent, + UserHandle user, BroadcastReceiver resultReceiver, + Handler scheduler, int initialCode, String initialData, + Bundle initialExtras) { + // pass + } + + @Override + public void removeStickyBroadcastAsUser(Intent intent, UserHandle user) { + // pass + } + + @Override + public void setTheme(int arg0) { + // pass + + } + + @Override + public void setWallpaper(Bitmap arg0) throws IOException { + // pass + + } + + @Override + public void setWallpaper(InputStream arg0) throws IOException { + // pass + + } + + @Override + public void startActivity(Intent arg0) { + // pass + } + + @Override + public void startActivity(Intent arg0, Bundle arg1) { + // pass + } + + @Override + public void startIntentSender(IntentSender intent, + Intent fillInIntent, int flagsMask, int flagsValues, int extraFlags) + throws IntentSender.SendIntentException { + // pass + } + + @Override + public void startIntentSender(IntentSender intent, + Intent fillInIntent, int flagsMask, int flagsValues, int extraFlags, + Bundle options) throws IntentSender.SendIntentException { + // pass + } + + @Override + public boolean startInstrumentation(ComponentName arg0, String arg1, + Bundle arg2) { + // pass + return false; + } + + @Override + public ComponentName startService(Intent arg0) { + // pass + return null; + } + + @Override + public boolean stopService(Intent arg0) { + // pass + return false; + } + + @Override + public ComponentName startServiceAsUser(Intent arg0, UserHandle arg1) { + // pass + return null; + } + + @Override + public boolean stopServiceAsUser(Intent arg0, UserHandle arg1) { + // pass + return false; + } + + @Override + public void unbindService(ServiceConnection arg0) { + // pass + + } + + @Override + public void unregisterReceiver(BroadcastReceiver arg0) { + // pass + + } + + @Override + public Context getApplicationContext() { + return this; + } + + @Override + public void startActivities(Intent[] arg0) { + // pass + + } + + @Override + public void startActivities(Intent[] arg0, Bundle arg1) { + // pass + + } + + @Override + public boolean isRestricted() { + return false; + } + + @Override + public File getObbDir() { + Bridge.getLog().error(LayoutLog.TAG_UNSUPPORTED, "OBB not supported", null); + return null; + } + + @Override + public DisplayAdjustments getDisplayAdjustments(int displayId) { + // pass + return null; + } + + /** + * @hide + */ + @Override + public int getUserId() { + return 0; // not used + } + + @Override + public File[] getExternalFilesDirs(String type) { + // pass + return new File[0]; + } + + @Override + public File[] getObbDirs() { + // pass + return new File[0]; + } + + @Override + public File[] getExternalCacheDirs() { + // pass + return new File[0]; + } +} diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeIInputMethodManager.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeIInputMethodManager.java new file mode 100644 index 0000000000000..3cf5ed515fdac --- /dev/null +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeIInputMethodManager.java @@ -0,0 +1,230 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.layoutlib.bridge.android; + +import com.android.internal.view.IInputContext; +import com.android.internal.view.IInputMethodClient; +import com.android.internal.view.IInputMethodManager; +import com.android.internal.view.InputBindResult; + +import android.os.IBinder; +import android.os.RemoteException; +import android.os.ResultReceiver; +import android.text.style.SuggestionSpan; +import android.view.inputmethod.EditorInfo; +import android.view.inputmethod.InputMethodInfo; +import android.view.inputmethod.InputMethodSubtype; + +import java.util.List; + +/** + * Basic implementation of IInputMethodManager that does nothing. + * + */ +public class BridgeIInputMethodManager implements IInputMethodManager { + + @Override + public void addClient(IInputMethodClient arg0, IInputContext arg1, int arg2, int arg3) + throws RemoteException { + // TODO Auto-generated method stub + + } + + @Override + public void finishInput(IInputMethodClient arg0) throws RemoteException { + // TODO Auto-generated method stub + + } + + @Override + public InputMethodSubtype getCurrentInputMethodSubtype() throws RemoteException { + // TODO Auto-generated method stub + return null; + } + + @Override + public List getEnabledInputMethodList() throws RemoteException { + // TODO Auto-generated method stub + return null; + } + + @Override + public List getEnabledInputMethodSubtypeList(String arg0, + boolean arg1) throws RemoteException { + // TODO Auto-generated method stub + return null; + } + + @Override + public List getInputMethodList() throws RemoteException { + // TODO Auto-generated method stub + return null; + } + + @Override + public InputMethodSubtype getLastInputMethodSubtype() throws RemoteException { + // TODO Auto-generated method stub + return null; + } + + @Override + public List getShortcutInputMethodsAndSubtypes() throws RemoteException { + // TODO Auto-generated method stub + return null; + } + + @Override + public void hideMySoftInput(IBinder arg0, int arg1) throws RemoteException { + // TODO Auto-generated method stub + + } + + @Override + public boolean hideSoftInput(IInputMethodClient arg0, int arg1, ResultReceiver arg2) + throws RemoteException { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean notifySuggestionPicked(SuggestionSpan arg0, String arg1, int arg2) + throws RemoteException { + // TODO Auto-generated method stub + return false; + } + + @Override + public void registerSuggestionSpansForNotification(SuggestionSpan[] arg0) + throws RemoteException { + // TODO Auto-generated method stub + + } + + @Override + public void removeClient(IInputMethodClient arg0) throws RemoteException { + // TODO Auto-generated method stub + + } + + @Override + public void setAdditionalInputMethodSubtypes(String arg0, InputMethodSubtype[] arg1) + throws RemoteException { + // TODO Auto-generated method stub + } + + @Override + public boolean setCurrentInputMethodSubtype(InputMethodSubtype arg0) throws RemoteException { + // TODO Auto-generated method stub + return false; + } + + @Override + public void setImeWindowStatus(IBinder arg0, int arg1, int arg2) throws RemoteException { + // TODO Auto-generated method stub + + } + + @Override + public void setInputMethod(IBinder arg0, String arg1) throws RemoteException { + // TODO Auto-generated method stub + + } + + @Override + public void setInputMethodAndSubtype(IBinder arg0, String arg1, InputMethodSubtype arg2) + throws RemoteException { + // TODO Auto-generated method stub + + } + + @Override + public boolean setInputMethodEnabled(String arg0, boolean arg1) throws RemoteException { + // TODO Auto-generated method stub + return false; + } + + @Override + public void showInputMethodAndSubtypeEnablerFromClient(IInputMethodClient arg0, String arg1) + throws RemoteException { + // TODO Auto-generated method stub + + } + + @Override + public void showInputMethodPickerFromClient(IInputMethodClient arg0) throws RemoteException { + // TODO Auto-generated method stub + + } + + @Override + public void showMySoftInput(IBinder arg0, int arg1) throws RemoteException { + // TODO Auto-generated method stub + + } + + @Override + public boolean showSoftInput(IInputMethodClient arg0, int arg1, ResultReceiver arg2) + throws RemoteException { + // TODO Auto-generated method stub + return false; + } + + @Override + public InputBindResult startInput(IInputMethodClient client, IInputContext inputContext, + EditorInfo attribute, int controlFlags) throws RemoteException { + // TODO Auto-generated method stub + return null; + } + + @Override + public boolean switchToLastInputMethod(IBinder arg0) throws RemoteException { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean switchToNextInputMethod(IBinder arg0, boolean arg1) throws RemoteException { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean shouldOfferSwitchingToNextInputMethod(IBinder arg0) throws RemoteException { + // TODO Auto-generated method stub + return false; + } + + @Override + public void updateStatusIcon(IBinder arg0, String arg1, int arg2) throws RemoteException { + // TODO Auto-generated method stub + + } + + @Override + public InputBindResult windowGainedFocus(IInputMethodClient client, IBinder windowToken, + int controlFlags, int softInputMode, int windowFlags, EditorInfo attribute, + IInputContext inputContext) throws RemoteException { + // TODO Auto-generated method stub + return null; + } + + @Override + public IBinder asBinder() { + // TODO Auto-generated method stub + return null; + } +} diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeLayoutParamsMapAttributes.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeLayoutParamsMapAttributes.java new file mode 100644 index 0000000000000..f5912e7bdb24f --- /dev/null +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeLayoutParamsMapAttributes.java @@ -0,0 +1,164 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.layoutlib.bridge.android; + +import com.android.layoutlib.bridge.BridgeConstants; + +import android.util.AttributeSet; + +import java.util.Map; + +/** + * An implementation of the {@link AttributeSet} interface on top of a map of attribute in the form + * of (name, value). + * + * This is meant to be called only from {@link BridgeContext#obtainStyledAttributes(AttributeSet, int[], int, int)} + * in the case of LayoutParams and therefore isn't a full implementation. + */ +public class BridgeLayoutParamsMapAttributes implements AttributeSet { + + private final Map mAttributes; + + public BridgeLayoutParamsMapAttributes(Map attributes) { + mAttributes = attributes; + } + + @Override + public String getAttributeValue(String namespace, String name) { + if (BridgeConstants.NS_RESOURCES.equals(namespace)) { + return mAttributes.get(name); + } + + return null; + } + + // ---- the following methods are not called from + // BridgeContext#obtainStyledAttributes(AttributeSet, int[], int, int) + // Should they ever be called, we'll just implement them on a need basis. + + @Override + public int getAttributeCount() { + throw new UnsupportedOperationException(); + } + + @Override + public String getAttributeName(int index) { + throw new UnsupportedOperationException(); + } + + @Override + public String getAttributeValue(int index) { + throw new UnsupportedOperationException(); + } + + @Override + public String getPositionDescription() { + throw new UnsupportedOperationException(); + } + + @Override + public int getAttributeNameResource(int index) { + throw new UnsupportedOperationException(); + } + + @Override + public int getAttributeListValue(String namespace, String attribute, + String[] options, int defaultValue) { + throw new UnsupportedOperationException(); + } + + @Override + public boolean getAttributeBooleanValue(String namespace, String attribute, + boolean defaultValue) { + throw new UnsupportedOperationException(); + } + + @Override + public int getAttributeResourceValue(String namespace, String attribute, + int defaultValue) { + throw new UnsupportedOperationException(); + } + + @Override + public int getAttributeIntValue(String namespace, String attribute, + int defaultValue) { + throw new UnsupportedOperationException(); + } + + @Override + public int getAttributeUnsignedIntValue(String namespace, String attribute, + int defaultValue) { + throw new UnsupportedOperationException(); + } + + @Override + public float getAttributeFloatValue(String namespace, String attribute, + float defaultValue) { + throw new UnsupportedOperationException(); + } + + @Override + public int getAttributeListValue(int index, + String[] options, int defaultValue) { + throw new UnsupportedOperationException(); + } + + @Override + public boolean getAttributeBooleanValue(int index, boolean defaultValue) { + throw new UnsupportedOperationException(); + } + + @Override + public int getAttributeResourceValue(int index, int defaultValue) { + throw new UnsupportedOperationException(); + } + + @Override + public int getAttributeIntValue(int index, int defaultValue) { + throw new UnsupportedOperationException(); + } + + @Override + public int getAttributeUnsignedIntValue(int index, int defaultValue) { + throw new UnsupportedOperationException(); + } + + @Override + public float getAttributeFloatValue(int index, float defaultValue) { + throw new UnsupportedOperationException(); + } + + @Override + public String getIdAttribute() { + throw new UnsupportedOperationException(); + } + + @Override + public String getClassAttribute() { + throw new UnsupportedOperationException(); + } + + @Override + public int getIdAttributeResourceValue(int defaultValue) { + throw new UnsupportedOperationException(); + } + + @Override + public int getStyleAttribute() { + throw new UnsupportedOperationException(); + } +} diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgePowerManager.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgePowerManager.java new file mode 100644 index 0000000000000..6fd5acc4e04bb --- /dev/null +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgePowerManager.java @@ -0,0 +1,122 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.layoutlib.bridge.android; + +import android.os.IBinder; +import android.os.IPowerManager; +import android.os.RemoteException; +import android.os.WorkSource; + +/** + * Fake implementation of IPowerManager. + * + */ +public class BridgePowerManager implements IPowerManager { + + @Override + public boolean isScreenOn() throws RemoteException { + return true; + } + + @Override + public IBinder asBinder() { + // pass for now. + return null; + } + + @Override + public void acquireWakeLock(IBinder arg0, int arg1, String arg2, String arg2_5, WorkSource arg3) + throws RemoteException { + // pass for now. + } + + @Override + public void crash(String arg0) throws RemoteException { + // pass for now. + } + + @Override + public void goToSleep(long arg0, int arg1) throws RemoteException { + // pass for now. + } + + @Override + public void nap(long arg0) throws RemoteException { + // pass for now. + } + + @Override + public void reboot(boolean confirm, String reason, boolean wait) { + // pass for now. + } + + @Override + public void shutdown(boolean confirm, boolean wait) { + // pass for now. + } + + @Override + public void releaseWakeLock(IBinder arg0, int arg1) throws RemoteException { + // pass for now. + } + + @Override + public void setAttentionLight(boolean arg0, int arg1) throws RemoteException { + // pass for now. + } + + @Override + public void setTemporaryScreenAutoBrightnessAdjustmentSettingOverride(float arg0) throws RemoteException { + // pass for now. + } + + @Override + public void setTemporaryScreenBrightnessSettingOverride(int arg0) throws RemoteException { + // pass for now. + } + + @Override + public void setMaximumScreenOffTimeoutFromDeviceAdmin(int arg0) throws RemoteException { + // pass for now. + } + + @Override + public void setStayOnSetting(int arg0) throws RemoteException { + // pass for now. + } + + @Override + public void updateWakeLockWorkSource(IBinder arg0, WorkSource arg1) throws RemoteException { + // pass for now. + } + + @Override + public boolean isWakeLockLevelSupported(int level) throws RemoteException { + // pass for now. + return true; + } + + @Override + public void userActivity(long time, int event, int flags) throws RemoteException { + // pass for now. + } + + @Override + public void wakeUp(long time) throws RemoteException { + // pass for now. + } +} diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeWindow.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeWindow.java new file mode 100644 index 0000000000000..df576d242291a --- /dev/null +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeWindow.java @@ -0,0 +1,107 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.layoutlib.bridge.android; + +import android.content.res.Configuration; +import android.graphics.Rect; +import android.os.Bundle; +import android.os.IBinder; +import android.os.ParcelFileDescriptor; +import android.os.RemoteException; +import android.view.DragEvent; +import android.view.IWindow; + +/** + * Implementation of {@link IWindow} to pass to the AttachInfo. + */ +public final class BridgeWindow implements IWindow { + + @Override + public void dispatchAppVisibility(boolean arg0) throws RemoteException { + // pass for now. + } + + @Override + public void dispatchGetNewSurface() throws RemoteException { + // pass for now. + } + + @Override + public void executeCommand(String arg0, String arg1, ParcelFileDescriptor arg2) + throws RemoteException { + // pass for now. + } + + @Override + public void resized(Rect arg1, Rect arg1p5, Rect arg2, Rect arg3, + boolean arg4, Configuration arg5) throws RemoteException { + // pass for now. + } + + @Override + public void moved(int arg0, int arg1) throws RemoteException { + // pass for now. + } + + @Override + public void dispatchScreenState(boolean on) throws RemoteException { + // pass for now. + } + + @Override + public void windowFocusChanged(boolean arg0, boolean arg1) throws RemoteException { + // pass for now. + } + + @Override + public void dispatchWallpaperOffsets(float x, float y, float xStep, float yStep, + boolean sync) { + // pass for now. + } + + @Override + public void dispatchWallpaperCommand(String action, int x, int y, + int z, Bundle extras, boolean sync) { + // pass for now. + } + + @Override + public void closeSystemDialogs(String reason) { + // pass for now. + } + + @Override + public void dispatchDragEvent(DragEvent event) { + // pass for now. + } + + @Override + public void dispatchSystemUiVisibilityChanged(int seq, int globalUi, + int localValue, int localChanges) { + // pass for now. + } + + @Override + public void doneAnimating() { + } + + @Override + public IBinder asBinder() { + // pass for now. + return null; + } +} diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeWindowSession.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeWindowSession.java new file mode 100644 index 0000000000000..09e68785231d1 --- /dev/null +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeWindowSession.java @@ -0,0 +1,209 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.layoutlib.bridge.android; + +import android.content.ClipData; +import android.content.res.Configuration; +import android.graphics.Rect; +import android.graphics.Region; +import android.os.Bundle; +import android.os.IBinder; +import android.os.RemoteException; +import android.view.IWindow; +import android.view.IWindowId; +import android.view.IWindowSession; +import android.view.InputChannel; +import android.view.Surface; +import android.view.SurfaceView; +import android.view.WindowManager.LayoutParams; + +/** + * Implementation of {@link IWindowSession} so that mSession is not null in + * the {@link SurfaceView}. + */ +public final class BridgeWindowSession implements IWindowSession { + + @Override + public int add(IWindow arg0, int seq, LayoutParams arg1, int arg2, Rect arg3, + InputChannel outInputchannel) + throws RemoteException { + // pass for now. + return 0; + } + + @Override + public int addToDisplay(IWindow arg0, int seq, LayoutParams arg1, int arg2, int displayId, + Rect arg3, InputChannel outInputchannel) + throws RemoteException { + // pass for now. + return 0; + } + + @Override + public int addWithoutInputChannel(IWindow arg0, int seq, LayoutParams arg1, int arg2, + Rect arg3) + throws RemoteException { + // pass for now. + return 0; + } + + @Override + public int addToDisplayWithoutInputChannel(IWindow arg0, int seq, LayoutParams arg1, int arg2, + int displayId, Rect arg3) + throws RemoteException { + // pass for now. + return 0; + } + + @Override + public void finishDrawing(IWindow arg0) throws RemoteException { + // pass for now. + } + + @Override + public boolean getInTouchMode() throws RemoteException { + // pass for now. + return false; + } + + @Override + public boolean performHapticFeedback(IWindow window, int effectId, boolean always) { + // pass for now. + return false; + } + @Override + public int relayout(IWindow arg0, int seq, LayoutParams arg1, int arg2, int arg3, int arg4, + int arg4_5, Rect arg5Z, Rect arg5, Rect arg6, Rect arg7, Configuration arg7b, + Surface arg8) throws RemoteException { + // pass for now. + return 0; + } + + @Override + public void performDeferredDestroy(IWindow window) { + // pass for now. + } + + @Override + public boolean outOfMemory(IWindow window) throws RemoteException { + return false; + } + + @Override + public void getDisplayFrame(IWindow window, Rect outDisplayFrame) { + // pass for now. + } + + @Override + public void remove(IWindow arg0) throws RemoteException { + // pass for now. + } + + @Override + public void setInTouchMode(boolean arg0) throws RemoteException { + // pass for now. + } + + @Override + public void setTransparentRegion(IWindow arg0, Region arg1) throws RemoteException { + // pass for now. + } + + @Override + public void setInsets(IWindow window, int touchable, Rect contentInsets, + Rect visibleInsets, Region touchableRegion) { + // pass for now. + } + + @Override + public IBinder prepareDrag(IWindow window, int flags, + int thumbnailWidth, int thumbnailHeight, Surface outSurface) + throws RemoteException { + // pass for now + return null; + } + + @Override + public boolean performDrag(IWindow window, IBinder dragToken, + float touchX, float touchY, float thumbCenterX, float thumbCenterY, + ClipData data) + throws RemoteException { + // pass for now + return false; + } + + @Override + public void reportDropResult(IWindow window, boolean consumed) throws RemoteException { + // pass for now + } + + @Override + public void dragRecipientEntered(IWindow window) throws RemoteException { + // pass for now + } + + @Override + public void dragRecipientExited(IWindow window) throws RemoteException { + // pass for now + } + + @Override + public void setWallpaperPosition(IBinder window, float x, float y, + float xStep, float yStep) { + // pass for now. + } + + @Override + public void wallpaperOffsetsComplete(IBinder window) { + // pass for now. + } + + @Override + public Bundle sendWallpaperCommand(IBinder window, String action, int x, int y, + int z, Bundle extras, boolean sync) { + // pass for now. + return null; + } + + @Override + public void wallpaperCommandComplete(IBinder window, Bundle result) { + // pass for now. + } + + @Override + public void setUniverseTransform(IBinder window, float alpha, float offx, float offy, + float dsdx, float dtdx, float dsdy, float dtdy) { + // pass for now. + } + + @Override + public IBinder asBinder() { + // pass for now. + return null; + } + + @Override + public void onRectangleOnScreenRequested(IBinder window, Rect rectangle, boolean immediate) { + // pass for now. + } + + @Override + public IWindowId getWindowId(IBinder window) throws RemoteException { + // pass for now. + return null; + } +} diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeXmlBlockParser.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeXmlBlockParser.java new file mode 100644 index 0000000000000..ac8712eaa0257 --- /dev/null +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeXmlBlockParser.java @@ -0,0 +1,494 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.layoutlib.bridge.android; + + +import com.android.ide.common.rendering.api.ILayoutPullParser; +import com.android.layoutlib.bridge.impl.ParserFactory; + +import org.xmlpull.v1.XmlPullParser; +import org.xmlpull.v1.XmlPullParserException; + +import android.content.res.XmlResourceParser; +import android.util.AttributeSet; +import android.util.BridgeXmlPullAttributes; + +import java.io.IOException; +import java.io.InputStream; +import java.io.Reader; + +/** + * {@link BridgeXmlBlockParser} reimplements most of android.xml.XmlBlock.Parser. + * It delegates to both an instance of {@link XmlPullParser} and an instance of + * XmlPullAttributes (for the {@link AttributeSet} part). + */ +public class BridgeXmlBlockParser implements XmlResourceParser { + + private final XmlPullParser mParser; + private final BridgeXmlPullAttributes mAttrib; + private final BridgeContext mContext; + private final boolean mPlatformFile; + + private boolean mStarted = false; + private int mEventType = START_DOCUMENT; + + private boolean mPopped = true; // default to true in case it's not pushed. + + /** + * Builds a {@link BridgeXmlBlockParser}. + * @param parser The XmlPullParser to get the content from. + * @param context the Context. + * @param platformFile Indicates whether the the file is a platform file or not. + */ + public BridgeXmlBlockParser(XmlPullParser parser, BridgeContext context, boolean platformFile) { + if (ParserFactory.LOG_PARSER) { + System.out.println("CRTE " + parser.toString()); + } + + mParser = parser; + mContext = context; + mPlatformFile = platformFile; + mAttrib = new BridgeXmlPullAttributes(parser, context, mPlatformFile); + + if (mContext != null) { + mContext.pushParser(this); + mPopped = false; + } + } + + public XmlPullParser getParser() { + return mParser; + } + + public boolean isPlatformFile() { + return mPlatformFile; + } + + public Object getViewCookie() { + if (mParser instanceof ILayoutPullParser) { + return ((ILayoutPullParser)mParser).getViewCookie(); + } + + return null; + } + + public void ensurePopped() { + if (mContext != null && mPopped == false) { + mContext.popParser(); + mPopped = true; + } + } + + // ------- XmlResourceParser implementation + + @Override + public void setFeature(String name, boolean state) + throws XmlPullParserException { + if (FEATURE_PROCESS_NAMESPACES.equals(name) && state) { + return; + } + if (FEATURE_REPORT_NAMESPACE_ATTRIBUTES.equals(name) && state) { + return; + } + throw new XmlPullParserException("Unsupported feature: " + name); + } + + @Override + public boolean getFeature(String name) { + if (FEATURE_PROCESS_NAMESPACES.equals(name)) { + return true; + } + if (FEATURE_REPORT_NAMESPACE_ATTRIBUTES.equals(name)) { + return true; + } + return false; + } + + @Override + public void setProperty(String name, Object value) throws XmlPullParserException { + throw new XmlPullParserException("setProperty() not supported"); + } + + @Override + public Object getProperty(String name) { + return null; + } + + @Override + public void setInput(Reader in) throws XmlPullParserException { + mParser.setInput(in); + } + + @Override + public void setInput(InputStream inputStream, String inputEncoding) + throws XmlPullParserException { + mParser.setInput(inputStream, inputEncoding); + } + + @Override + public void defineEntityReplacementText(String entityName, + String replacementText) throws XmlPullParserException { + throw new XmlPullParserException( + "defineEntityReplacementText() not supported"); + } + + @Override + public String getNamespacePrefix(int pos) throws XmlPullParserException { + throw new XmlPullParserException("getNamespacePrefix() not supported"); + } + + @Override + public String getInputEncoding() { + return null; + } + + @Override + public String getNamespace(String prefix) { + throw new RuntimeException("getNamespace() not supported"); + } + + @Override + public int getNamespaceCount(int depth) throws XmlPullParserException { + throw new XmlPullParserException("getNamespaceCount() not supported"); + } + + @Override + public String getPositionDescription() { + return "Binary XML file line #" + getLineNumber(); + } + + @Override + public String getNamespaceUri(int pos) throws XmlPullParserException { + throw new XmlPullParserException("getNamespaceUri() not supported"); + } + + @Override + public int getColumnNumber() { + return -1; + } + + @Override + public int getDepth() { + return mParser.getDepth(); + } + + @Override + public String getText() { + return mParser.getText(); + } + + @Override + public int getLineNumber() { + return mParser.getLineNumber(); + } + + @Override + public int getEventType() { + return mEventType; + } + + @Override + public boolean isWhitespace() throws XmlPullParserException { + // Original comment: whitespace was stripped by aapt. + return mParser.isWhitespace(); + } + + @Override + public String getPrefix() { + throw new RuntimeException("getPrefix not supported"); + } + + @Override + public char[] getTextCharacters(int[] holderForStartAndLength) { + String txt = getText(); + char[] chars = null; + if (txt != null) { + holderForStartAndLength[0] = 0; + holderForStartAndLength[1] = txt.length(); + chars = new char[txt.length()]; + txt.getChars(0, txt.length(), chars, 0); + } + return chars; + } + + @Override + public String getNamespace() { + return mParser.getNamespace(); + } + + @Override + public String getName() { + return mParser.getName(); + } + + @Override + public String getAttributeNamespace(int index) { + return mParser.getAttributeNamespace(index); + } + + @Override + public String getAttributeName(int index) { + return mParser.getAttributeName(index); + } + + @Override + public String getAttributePrefix(int index) { + throw new RuntimeException("getAttributePrefix not supported"); + } + + @Override + public boolean isEmptyElementTag() { + // XXX Need to detect this. + return false; + } + + @Override + public int getAttributeCount() { + return mParser.getAttributeCount(); + } + + @Override + public String getAttributeValue(int index) { + return mParser.getAttributeValue(index); + } + + @Override + public String getAttributeType(int index) { + return "CDATA"; + } + + @Override + public boolean isAttributeDefault(int index) { + return false; + } + + @Override + public int nextToken() throws XmlPullParserException, IOException { + return next(); + } + + @Override + public String getAttributeValue(String namespace, String name) { + return mParser.getAttributeValue(namespace, name); + } + + @Override + public int next() throws XmlPullParserException, IOException { + if (!mStarted) { + mStarted = true; + + if (ParserFactory.LOG_PARSER) { + System.out.println("STRT " + mParser.toString()); + } + + return START_DOCUMENT; + } + + int ev = mParser.next(); + + if (ParserFactory.LOG_PARSER) { + System.out.println("NEXT " + mParser.toString() + " " + + eventTypeToString(mEventType) + " -> " + eventTypeToString(ev)); + } + + if (ev == END_TAG && mParser.getDepth() == 1) { + // done with parser remove it from the context stack. + ensurePopped(); + + if (ParserFactory.LOG_PARSER) { + System.out.println(""); + } + } + + mEventType = ev; + return ev; + } + + public static String eventTypeToString(int eventType) { + switch (eventType) { + case START_DOCUMENT: + return "START_DOC"; + case END_DOCUMENT: + return "END_DOC"; + case START_TAG: + return "START_TAG"; + case END_TAG: + return "END_TAG"; + case TEXT: + return "TEXT"; + case CDSECT: + return "CDSECT"; + case ENTITY_REF: + return "ENTITY_REF"; + case IGNORABLE_WHITESPACE: + return "IGNORABLE_WHITESPACE"; + case PROCESSING_INSTRUCTION: + return "PROCESSING_INSTRUCTION"; + case COMMENT: + return "COMMENT"; + case DOCDECL: + return "DOCDECL"; + } + + return "????"; + } + + @Override + public void require(int type, String namespace, String name) + throws XmlPullParserException { + if (type != getEventType() + || (namespace != null && !namespace.equals(getNamespace())) + || (name != null && !name.equals(getName()))) + throw new XmlPullParserException("expected " + TYPES[type] + + getPositionDescription()); + } + + @Override + public String nextText() throws XmlPullParserException, IOException { + if (getEventType() != START_TAG) { + throw new XmlPullParserException(getPositionDescription() + + ": parser must be on START_TAG to read next text", this, + null); + } + int eventType = next(); + if (eventType == TEXT) { + String result = getText(); + eventType = next(); + if (eventType != END_TAG) { + throw new XmlPullParserException( + getPositionDescription() + + ": event TEXT it must be immediately followed by END_TAG", + this, null); + } + return result; + } else if (eventType == END_TAG) { + return ""; + } else { + throw new XmlPullParserException(getPositionDescription() + + ": parser must be on START_TAG or TEXT to read text", + this, null); + } + } + + @Override + public int nextTag() throws XmlPullParserException, IOException { + int eventType = next(); + if (eventType == TEXT && isWhitespace()) { // skip whitespace + eventType = next(); + } + if (eventType != START_TAG && eventType != END_TAG) { + throw new XmlPullParserException(getPositionDescription() + + ": expected start or end tag", this, null); + } + return eventType; + } + + // AttributeSet implementation + + + @Override + public void close() { + // pass + } + + @Override + public boolean getAttributeBooleanValue(int index, boolean defaultValue) { + return mAttrib.getAttributeBooleanValue(index, defaultValue); + } + + @Override + public boolean getAttributeBooleanValue(String namespace, String attribute, + boolean defaultValue) { + return mAttrib.getAttributeBooleanValue(namespace, attribute, defaultValue); + } + + @Override + public float getAttributeFloatValue(int index, float defaultValue) { + return mAttrib.getAttributeFloatValue(index, defaultValue); + } + + @Override + public float getAttributeFloatValue(String namespace, String attribute, float defaultValue) { + return mAttrib.getAttributeFloatValue(namespace, attribute, defaultValue); + } + + @Override + public int getAttributeIntValue(int index, int defaultValue) { + return mAttrib.getAttributeIntValue(index, defaultValue); + } + + @Override + public int getAttributeIntValue(String namespace, String attribute, int defaultValue) { + return mAttrib.getAttributeIntValue(namespace, attribute, defaultValue); + } + + @Override + public int getAttributeListValue(int index, String[] options, int defaultValue) { + return mAttrib.getAttributeListValue(index, options, defaultValue); + } + + @Override + public int getAttributeListValue(String namespace, String attribute, + String[] options, int defaultValue) { + return mAttrib.getAttributeListValue(namespace, attribute, options, defaultValue); + } + + @Override + public int getAttributeNameResource(int index) { + return mAttrib.getAttributeNameResource(index); + } + + @Override + public int getAttributeResourceValue(int index, int defaultValue) { + return mAttrib.getAttributeResourceValue(index, defaultValue); + } + + @Override + public int getAttributeResourceValue(String namespace, String attribute, int defaultValue) { + return mAttrib.getAttributeResourceValue(namespace, attribute, defaultValue); + } + + @Override + public int getAttributeUnsignedIntValue(int index, int defaultValue) { + return mAttrib.getAttributeUnsignedIntValue(index, defaultValue); + } + + @Override + public int getAttributeUnsignedIntValue(String namespace, String attribute, int defaultValue) { + return mAttrib.getAttributeUnsignedIntValue(namespace, attribute, defaultValue); + } + + @Override + public String getClassAttribute() { + return mAttrib.getClassAttribute(); + } + + @Override + public String getIdAttribute() { + return mAttrib.getIdAttribute(); + } + + @Override + public int getIdAttributeResourceValue(int defaultValue) { + return mAttrib.getIdAttributeResourceValue(defaultValue); + } + + @Override + public int getStyleAttribute() { + return mAttrib.getStyleAttribute(); + } +} diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/view/WindowManagerImpl.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/view/WindowManagerImpl.java new file mode 100644 index 0000000000000..9a633bf27f74a --- /dev/null +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/view/WindowManagerImpl.java @@ -0,0 +1,64 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.android.layoutlib.bridge.android.view; + +import android.util.DisplayMetrics; +import android.view.Display; +import android.view.DisplayInfo; +import android.view.View; +import android.view.WindowManager; + +public class WindowManagerImpl implements WindowManager { + + private final DisplayMetrics mMetrics; + private final Display mDisplay; + + public WindowManagerImpl(DisplayMetrics metrics) { + mMetrics = metrics; + + DisplayInfo info = new DisplayInfo(); + info.logicalHeight = mMetrics.heightPixels; + info.logicalWidth = mMetrics.widthPixels; + mDisplay = new Display(null, Display.DEFAULT_DISPLAY, info, null); + } + + @Override + public Display getDefaultDisplay() { + return mDisplay; + } + + + @Override + public void addView(View arg0, android.view.ViewGroup.LayoutParams arg1) { + // pass + } + + @Override + public void removeView(View arg0) { + // pass + } + + @Override + public void updateViewLayout(View arg0, android.view.ViewGroup.LayoutParams arg1) { + // pass + } + + + @Override + public void removeViewImmediate(View arg0) { + // pass + } +} diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/CustomBar.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/CustomBar.java new file mode 100644 index 0000000000000..ea9d8d929bc82 --- /dev/null +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/CustomBar.java @@ -0,0 +1,307 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.layoutlib.bridge.bars; + +import com.android.ide.common.rendering.api.RenderResources; +import com.android.ide.common.rendering.api.ResourceValue; +import com.android.ide.common.rendering.api.StyleResourceValue; +import com.android.layoutlib.bridge.Bridge; +import com.android.layoutlib.bridge.android.BridgeContext; +import com.android.layoutlib.bridge.android.BridgeXmlBlockParser; +import com.android.layoutlib.bridge.impl.ParserFactory; +import com.android.layoutlib.bridge.impl.ResourceHelper; +import com.android.resources.Density; +import com.android.resources.ResourceType; + +import org.xmlpull.v1.XmlPullParser; +import org.xmlpull.v1.XmlPullParserException; + +import android.content.Context; +import android.content.res.ColorStateList; +import android.graphics.Bitmap; +import android.graphics.Bitmap_Delegate; +import android.graphics.drawable.BitmapDrawable; +import android.graphics.drawable.Drawable; +import android.util.TypedValue; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import java.io.IOException; +import java.io.InputStream; + +/** + * Base "bar" class for the window decor around the the edited layout. + * This is basically an horizontal layout that loads a given layout on creation (it is read + * through {@link Class#getResourceAsStream(String)}). + * + * The given layout should be a merge layout so that all the children belong to this class directly. + * + * It also provides a few utility methods to configure the content of the layout. + */ +abstract class CustomBar extends LinearLayout { + + protected abstract TextView getStyleableTextView(); + + protected CustomBar(Context context, Density density, int orientation, String layoutPath, + String name) throws XmlPullParserException { + super(context); + setOrientation(orientation); + if (orientation == LinearLayout.HORIZONTAL) { + setGravity(Gravity.CENTER_VERTICAL); + } else { + setGravity(Gravity.CENTER_HORIZONTAL); + } + + LayoutInflater inflater = (LayoutInflater) getContext().getSystemService( + Context.LAYOUT_INFLATER_SERVICE); + + XmlPullParser parser = ParserFactory.create(getClass().getResourceAsStream(layoutPath), + name); + + BridgeXmlBlockParser bridgeParser = new BridgeXmlBlockParser( + parser, (BridgeContext) context, false /*platformFile*/); + + try { + inflater.inflate(bridgeParser, this, true); + } finally { + bridgeParser.ensurePopped(); + } + } + + private InputStream getIcon(String iconName, Density[] densityInOut, String[] pathOut, + boolean tryOtherDensities) { + // current density + Density density = densityInOut[0]; + + // bitmap url relative to this class + pathOut[0] = "/bars/" + density.getResourceValue() + "/" + iconName; + + InputStream stream = getClass().getResourceAsStream(pathOut[0]); + if (stream == null && tryOtherDensities) { + for (Density d : Density.values()) { + if (d != density) { + densityInOut[0] = d; + stream = getIcon(iconName, densityInOut, pathOut, false /*tryOtherDensities*/); + if (stream != null) { + return stream; + } + } + } + } + + return stream; + } + + protected void loadIcon(int index, String iconName, Density density) { + View child = getChildAt(index); + if (child instanceof ImageView) { + ImageView imageView = (ImageView) child; + + String[] pathOut = new String[1]; + Density[] densityInOut = new Density[] { density }; + InputStream stream = getIcon(iconName, densityInOut, pathOut, + true /*tryOtherDensities*/); + density = densityInOut[0]; + + if (stream != null) { + // look for a cached bitmap + Bitmap bitmap = Bridge.getCachedBitmap(pathOut[0], true /*isFramework*/); + if (bitmap == null) { + try { + bitmap = Bitmap_Delegate.createBitmap(stream, false /*isMutable*/, density); + Bridge.setCachedBitmap(pathOut[0], bitmap, true /*isFramework*/); + } catch (IOException e) { + return; + } + } + + if (bitmap != null) { + BitmapDrawable drawable = new BitmapDrawable(getContext().getResources(), + bitmap); + imageView.setImageDrawable(drawable); + } + } + } + } + + protected void loadIcon(int index, String iconReference) { + ResourceValue value = getResourceValue(iconReference); + if (value != null) { + loadIcon(index, value); + } + } + + protected void loadIconById(int id, String iconReference) { + ResourceValue value = getResourceValue(iconReference); + if (value != null) { + loadIconById(id, value); + } + } + + + protected Drawable loadIcon(int index, ResourceType type, String name) { + BridgeContext bridgeContext = (BridgeContext) mContext; + RenderResources res = bridgeContext.getRenderResources(); + + // find the resource + ResourceValue value = res.getFrameworkResource(type, name); + + // resolve it if needed + value = res.resolveResValue(value); + return loadIcon(index, value); + } + + private Drawable loadIcon(int index, ResourceValue value) { + View child = getChildAt(index); + if (child instanceof ImageView) { + ImageView imageView = (ImageView) child; + + return loadIcon(imageView, value); + } + + return null; + } + + private Drawable loadIconById(int id, ResourceValue value) { + View child = findViewById(id); + if (child instanceof ImageView) { + ImageView imageView = (ImageView) child; + + return loadIcon(imageView, value); + } + + return null; + } + + + private Drawable loadIcon(ImageView imageView, ResourceValue value) { + Drawable drawable = ResourceHelper.getDrawable(value, (BridgeContext) mContext); + if (drawable != null) { + imageView.setImageDrawable(drawable); + } + + return drawable; + } + + protected TextView setText(int index, String stringReference) { + View child = getChildAt(index); + if (child instanceof TextView) { + TextView textView = (TextView) child; + setText(textView, stringReference); + return textView; + } + + return null; + } + + protected TextView setTextById(int id, String stringReference) { + View child = findViewById(id); + if (child instanceof TextView) { + TextView textView = (TextView) child; + setText(textView, stringReference); + return textView; + } + + return null; + } + + private void setText(TextView textView, String stringReference) { + ResourceValue value = getResourceValue(stringReference); + if (value != null) { + textView.setText(value.getValue()); + } else { + textView.setText(stringReference); + } + } + + protected void setStyle(String themeEntryName) { + + BridgeContext bridgeContext = (BridgeContext) mContext; + RenderResources res = bridgeContext.getRenderResources(); + + ResourceValue value = res.findItemInTheme(themeEntryName, true /*isFrameworkAttr*/); + value = res.resolveResValue(value); + + if (value instanceof StyleResourceValue == false) { + return; + } + + StyleResourceValue style = (StyleResourceValue) value; + + // get the background + ResourceValue backgroundValue = res.findItemInStyle(style, "background", + true /*isFrameworkAttr*/); + backgroundValue = res.resolveResValue(backgroundValue); + if (backgroundValue != null) { + Drawable d = ResourceHelper.getDrawable(backgroundValue, bridgeContext); + if (d != null) { + setBackground(d); + } + } + + TextView textView = getStyleableTextView(); + if (textView != null) { + // get the text style + ResourceValue textStyleValue = res.findItemInStyle(style, "titleTextStyle", + true /*isFrameworkAttr*/); + textStyleValue = res.resolveResValue(textStyleValue); + if (textStyleValue instanceof StyleResourceValue) { + StyleResourceValue textStyle = (StyleResourceValue) textStyleValue; + + ResourceValue textSize = res.findItemInStyle(textStyle, "textSize", + true /*isFrameworkAttr*/); + textSize = res.resolveResValue(textSize); + + if (textSize != null) { + TypedValue out = new TypedValue(); + if (ResourceHelper.parseFloatAttribute("textSize", textSize.getValue(), out, + true /*requireUnit*/)) { + textView.setTextSize( + out.getDimension(bridgeContext.getResources().getDisplayMetrics())); + } + } + + + ResourceValue textColor = res.findItemInStyle(textStyle, "textColor", + true /*isFrameworkAttr*/); + textColor = res.resolveResValue(textColor); + if (textColor != null) { + ColorStateList stateList = ResourceHelper.getColorStateList( + textColor, bridgeContext); + if (stateList != null) { + textView.setTextColor(stateList); + } + } + } + } + } + + private ResourceValue getResourceValue(String reference) { + BridgeContext bridgeContext = (BridgeContext) mContext; + RenderResources res = bridgeContext.getRenderResources(); + + // find the resource + ResourceValue value = res.findResValue(reference, false /*isFramework*/); + + // resolve it if needed + return res.resolveResValue(value); + } +} diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/FakeActionBar.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/FakeActionBar.java new file mode 100644 index 0000000000000..226649dbc4069 --- /dev/null +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/FakeActionBar.java @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.layoutlib.bridge.bars; + +import com.android.resources.Density; + +import org.xmlpull.v1.XmlPullParserException; + +import android.content.Context; +import android.widget.LinearLayout; +import android.widget.TextView; + +public class FakeActionBar extends CustomBar { + + private TextView mTextView; + + public FakeActionBar(Context context, Density density, String label, String icon) + throws XmlPullParserException { + super(context, density, LinearLayout.HORIZONTAL, "/bars/action_bar.xml", "action_bar.xml"); + + // Cannot access the inside items through id because no R.id values have been + // created for them. + // We do know the order though. + loadIconById(android.R.id.home, icon); + mTextView = setText(1, label); + + setStyle("actionBarStyle"); + } + + @Override + protected TextView getStyleableTextView() { + return mTextView; + } +} diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/NavigationBar.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/NavigationBar.java new file mode 100644 index 0000000000000..cc90d6b33abed --- /dev/null +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/NavigationBar.java @@ -0,0 +1,54 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.layoutlib.bridge.bars; + +import com.android.resources.Density; + +import org.xmlpull.v1.XmlPullParserException; + +import android.content.Context; +import android.widget.LinearLayout; +import android.widget.TextView; + +public class NavigationBar extends CustomBar { + + public NavigationBar(Context context, Density density, int orientation) throws XmlPullParserException { + super(context, density, orientation, "/bars/navigation_bar.xml", "navigation_bar.xml"); + + setBackgroundColor(0xFF000000); + + // Cannot access the inside items through id because no R.id values have been + // created for them. + // We do know the order though. + // 0 is a spacer. + int back = 1; + int recent = 3; + if (orientation == LinearLayout.VERTICAL) { + back = 3; + recent = 1; + } + + loadIcon(back, "ic_sysbar_back.png", density); + loadIcon(2, "ic_sysbar_home.png", density); + loadIcon(recent, "ic_sysbar_recent.png", density); + } + + @Override + protected TextView getStyleableTextView() { + return null; + } +} diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/StatusBar.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/StatusBar.java new file mode 100644 index 0000000000000..5c084121d123a --- /dev/null +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/StatusBar.java @@ -0,0 +1,55 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.layoutlib.bridge.bars; + +import com.android.resources.Density; +import com.android.resources.ResourceType; + +import org.xmlpull.v1.XmlPullParserException; + +import android.content.Context; +import android.graphics.drawable.Drawable; +import android.graphics.drawable.LevelListDrawable; +import android.view.Gravity; +import android.widget.LinearLayout; +import android.widget.TextView; + +public class StatusBar extends CustomBar { + + public StatusBar(Context context, Density density) throws XmlPullParserException { + super(context, density, LinearLayout.HORIZONTAL, "/bars/status_bar.xml", "status_bar.xml"); + + // FIXME: use FILL_H? + setGravity(Gravity.START | Gravity.TOP | Gravity.RIGHT); + setBackgroundColor(0xFF000000); + + // Cannot access the inside items through id because no R.id values have been + // created for them. + // We do know the order though. + // 0 is the spacer + loadIcon(1, "stat_sys_wifi_signal_4_fully.png", density); + Drawable drawable = loadIcon(2, ResourceType.DRAWABLE, "stat_sys_battery_charge"); + if (drawable instanceof LevelListDrawable) { + ((LevelListDrawable) drawable).setLevel(100); + } + } + + @Override + protected TextView getStyleableTextView() { + return null; + } +} diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/TitleBar.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/TitleBar.java new file mode 100644 index 0000000000000..c27859f901c19 --- /dev/null +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/TitleBar.java @@ -0,0 +1,47 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.layoutlib.bridge.bars; + +import com.android.resources.Density; + +import org.xmlpull.v1.XmlPullParserException; + +import android.content.Context; +import android.widget.LinearLayout; +import android.widget.TextView; + +public class TitleBar extends CustomBar { + + private TextView mTextView; + + public TitleBar(Context context, Density density, String label) + throws XmlPullParserException { + super(context, density, LinearLayout.HORIZONTAL, "/bars/title_bar.xml", "title_bar.xml"); + + // Cannot access the inside items through id because no R.id values have been + // created for them. + // We do know the order though. + mTextView = setText(0, label); + + setStyle("windowTitleBackgroundStyle"); + } + + @Override + protected TextView getStyleableTextView() { + return mTextView; + } +} diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/DelegateManager.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/DelegateManager.java new file mode 100644 index 0000000000000..ae1217d5c5d88 --- /dev/null +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/DelegateManager.java @@ -0,0 +1,146 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.layoutlib.bridge.impl; + +import com.android.layoutlib.bridge.util.Debug; +import com.android.layoutlib.bridge.util.SparseWeakArray; + +import android.util.SparseArray; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.List; + +/** + * Manages native delegates. + * + * This is used in conjunction with layoublib_create: certain Android java classes are mere + * wrappers around a heavily native based implementation, and we need a way to run these classes + * in our Eclipse rendering framework without bringing all the native code from the Android + * platform. + * + * Thus we instruct layoutlib_create to modify the bytecode of these classes to replace their + * native methods by "delegate calls". + * + * For example, a native method android.graphics.Matrix.init(...) will actually become + * a call to android.graphics.Matrix_Delegate.init(...). + * + * The Android java classes that use native code uses an int (Java side) to reference native + * objects. This int is generally directly the pointer to the C structure counterpart. + * Typically a creation method will return such an int, and then this int will be passed later + * to a Java method to identify the C object to manipulate. + * + * Since we cannot use the Java object reference as the int directly, DelegateManager manages the + * int -> Delegate class link. + * + * Native methods usually always have the int as parameters. The first thing the delegate method + * will do is call {@link #getDelegate(int)} to get the Java object matching the int. + * + * Typical native init methods are returning a new int back to the Java class, so + * {@link #addNewDelegate(Object)} does the same. + * + * The JNI references are counted, so we do the same through a {@link WeakReference}. Because + * the Java object needs to count as a reference (even though it only holds an int), we use the + * following mechanism: + * + * - {@link #addNewDelegate(Object)} and {@link #removeJavaReferenceFor(int)} adds and removes + * the delegate to/from a list. This list hold the reference and prevents the GC from reclaiming + * the delegate. + * + * - {@link #addNewDelegate(Object)} also adds the delegate to a {@link SparseArray} that holds a + * {@link WeakReference} to the delegate. This allows the delegate to be deleted automatically + * when nothing references it. This means that any class that holds a delegate (except for the + * Java main class) must not use the int but the Delegate class instead. The integers must + * only be used in the API between the main Java class and the Delegate. + * + * @param the delegate class to manage + */ +public final class DelegateManager { + private final Class mClass; + private final SparseWeakArray mDelegates = new SparseWeakArray(); + /** list used to store delegates when their main object holds a reference to them. + * This is to ensure that the WeakReference in the SparseWeakArray doesn't get GC'ed + * @see #addNewDelegate(Object) + * @see #removeJavaReferenceFor(int) + */ + private final List mJavaReferences = new ArrayList(); + private int mDelegateCounter = 0; + + public DelegateManager(Class theClass) { + mClass = theClass; + } + + /** + * Returns the delegate from the given native int. + *

+ * If the int is zero, then this will always return null. + *

+ * If the int is non zero and the delegate is not found, this will throw an assert. + * + * @param native_object the native int. + * @return the delegate or null if not found. + */ + public T getDelegate(int native_object) { + if (native_object > 0) { + T delegate = mDelegates.get(native_object); + + if (Debug.DEBUG) { + if (delegate == null) { + System.out.println("Unknown " + mClass.getSimpleName() + " with int " + + native_object); + } + } + + assert delegate != null; + return delegate; + } + return null; + } + + /** + * Adds a delegate to the manager and returns the native int used to identify it. + * @param newDelegate the delegate to add + * @return a unique native int to identify the delegate + */ + public int addNewDelegate(T newDelegate) { + int native_object = ++mDelegateCounter; + mDelegates.put(native_object, newDelegate); + assert !mJavaReferences.contains(newDelegate); + mJavaReferences.add(newDelegate); + + if (Debug.DEBUG) { + System.out.println("New " + mClass.getSimpleName() + " with int " + native_object); + } + + return native_object; + } + + /** + * Removes the main reference on the given delegate. + * @param native_object the native integer representing the delegate. + */ + public void removeJavaReferenceFor(int native_object) { + T delegate = getDelegate(native_object); + + if (Debug.DEBUG) { + System.out.println("Removing main Java ref on " + mClass.getSimpleName() + + " with int " + native_object); + } + + mJavaReferences.remove(delegate); + } +} diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/FontLoader.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/FontLoader.java new file mode 100644 index 0000000000000..081ce67c7950c --- /dev/null +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/FontLoader.java @@ -0,0 +1,378 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.layoutlib.bridge.impl; + +import org.xml.sax.Attributes; +import org.xml.sax.SAXException; +import org.xml.sax.helpers.DefaultHandler; + +import android.graphics.Typeface; + +import java.awt.Font; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.parsers.SAXParser; +import javax.xml.parsers.SAXParserFactory; + +/** + * Provides {@link Font} object to the layout lib. + *

+ * The fonts are loaded from the SDK directory. Family/style mapping is done by parsing the + * fonts.xml file located alongside the ttf files. + */ +public final class FontLoader { + private static final String FONTS_SYSTEM = "system_fonts.xml"; + private static final String FONTS_VENDOR = "vendor_fonts.xml"; + private static final String FONTS_FALLBACK = "fallback_fonts.xml"; + + private static final String NODE_FAMILYSET = "familyset"; + private static final String NODE_FAMILY = "family"; + private static final String NODE_NAME = "name"; + private static final String NODE_FILE = "file"; + + private static final String FONT_SUFFIX_NONE = ".ttf"; + private static final String FONT_SUFFIX_REGULAR = "-Regular.ttf"; + private static final String FONT_SUFFIX_BOLD = "-Bold.ttf"; + private static final String FONT_SUFFIX_ITALIC = "-Italic.ttf"; + private static final String FONT_SUFFIX_BOLDITALIC = "-BoldItalic.ttf"; + + // This must match the values of Typeface styles so that we can use them for indices in this + // array. + private static final int[] AWT_STYLES = new int[] { + Font.PLAIN, + Font.BOLD, + Font.ITALIC, + Font.BOLD | Font.ITALIC + }; + private static int[] DERIVE_BOLD_ITALIC = new int[] { + Typeface.ITALIC, Typeface.BOLD, Typeface.NORMAL + }; + private static int[] DERIVE_ITALIC = new int[] { Typeface.NORMAL }; + private static int[] DERIVE_BOLD = new int[] { Typeface.NORMAL }; + + private static final List mMainFonts = new ArrayList(); + private static final List mFallbackFonts = new ArrayList(); + + private final String mOsFontsLocation; + + public static FontLoader create(String fontOsLocation) { + try { + SAXParserFactory parserFactory = SAXParserFactory.newInstance(); + parserFactory.setNamespaceAware(true); + + // parse the system fonts + FontHandler handler = parseFontFile(parserFactory, fontOsLocation, FONTS_SYSTEM); + List systemFonts = handler.getFontList(); + + + // parse the fallback fonts + handler = parseFontFile(parserFactory, fontOsLocation, FONTS_FALLBACK); + List fallbackFonts = handler.getFontList(); + + return new FontLoader(fontOsLocation, systemFonts, fallbackFonts); + } catch (ParserConfigurationException e) { + // return null below + } catch (SAXException e) { + // return null below + } catch (FileNotFoundException e) { + // return null below + } catch (IOException e) { + // return null below + } + + return null; + } + + private static FontHandler parseFontFile(SAXParserFactory parserFactory, + String fontOsLocation, String fontFileName) + throws ParserConfigurationException, SAXException, IOException, FileNotFoundException { + + SAXParser parser = parserFactory.newSAXParser(); + File f = new File(fontOsLocation, fontFileName); + + FontHandler definitionParser = new FontHandler( + fontOsLocation + File.separator); + parser.parse(new FileInputStream(f), definitionParser); + return definitionParser; + } + + private FontLoader(String fontOsLocation, + List fontList, List fallBackList) { + mOsFontsLocation = fontOsLocation; + mMainFonts.addAll(fontList); + mFallbackFonts.addAll(fallBackList); + } + + + public String getOsFontsLocation() { + return mOsFontsLocation; + } + + /** + * Returns a {@link Font} object given a family name and a style value (constant in + * {@link Typeface}). + * @param family the family name + * @param style a 1-item array containing the requested style. Based on the font being read + * the actual style may be different. The array contains the actual style after + * the method returns. + * @return the font object or null if no match could be found. + */ + public synchronized List getFont(String family, int style) { + List result = new ArrayList(); + + if (family == null) { + return result; + } + + + // get the font objects from the main list based on family. + for (FontInfo info : mMainFonts) { + if (info.families.contains(family)) { + result.add(info.font[style]); + break; + } + } + + // add all the fallback fonts for the given style + for (FontInfo info : mFallbackFonts) { + result.add(info.font[style]); + } + + return result; + } + + + public synchronized List getFallbackFonts(int style) { + List result = new ArrayList(); + // add all the fallback fonts + for (FontInfo info : mFallbackFonts) { + result.add(info.font[style]); + } + return result; + } + + + private final static class FontInfo { + final Font[] font = new Font[4]; // Matches the 4 type-face styles. + final Set families; + + FontInfo() { + families = new HashSet(); + } + } + + private final static class FontHandler extends DefaultHandler { + private final String mOsFontsLocation; + + private FontInfo mFontInfo = null; + private final StringBuilder mBuilder = new StringBuilder(); + private List mFontList = new ArrayList(); + + private FontHandler(String osFontsLocation) { + super(); + mOsFontsLocation = osFontsLocation; + } + + public List getFontList() { + return mFontList; + } + + /* (non-Javadoc) + * @see org.xml.sax.helpers.DefaultHandler#startElement(java.lang.String, java.lang.String, java.lang.String, org.xml.sax.Attributes) + */ + @Override + public void startElement(String uri, String localName, String name, Attributes attributes) + throws SAXException { + if (NODE_FAMILYSET.equals(localName)) { + mFontList = new ArrayList(); + } else if (NODE_FAMILY.equals(localName)) { + if (mFontList != null) { + mFontInfo = new FontInfo(); + } + } + + mBuilder.setLength(0); + + super.startElement(uri, localName, name, attributes); + } + + /* (non-Javadoc) + * @see org.xml.sax.helpers.DefaultHandler#characters(char[], int, int) + */ + @Override + public void characters(char[] ch, int start, int length) throws SAXException { + mBuilder.append(ch, start, length); + } + + /* (non-Javadoc) + * @see org.xml.sax.helpers.DefaultHandler#endElement(java.lang.String, java.lang.String, java.lang.String) + */ + @Override + public void endElement(String uri, String localName, String name) throws SAXException { + if (NODE_FAMILY.equals(localName)) { + if (mFontInfo != null) { + // if has a normal font file, add to the list + if (mFontInfo.font[Typeface.NORMAL] != null) { + mFontList.add(mFontInfo); + + // create missing font styles, order is important. + if (mFontInfo.font[Typeface.BOLD_ITALIC] == null) { + computeDerivedFont(Typeface.BOLD_ITALIC, DERIVE_BOLD_ITALIC); + } + if (mFontInfo.font[Typeface.ITALIC] == null) { + computeDerivedFont(Typeface.ITALIC, DERIVE_ITALIC); + } + if (mFontInfo.font[Typeface.BOLD] == null) { + computeDerivedFont(Typeface.BOLD, DERIVE_BOLD); + } + } + + mFontInfo = null; + } + } else if (NODE_NAME.equals(localName)) { + // handle a new name for an existing Font Info + if (mFontInfo != null) { + String family = trimXmlWhitespaces(mBuilder.toString()); + mFontInfo.families.add(family); + } + } else if (NODE_FILE.equals(localName)) { + // handle a new file for an existing Font Info + if (mFontInfo != null) { + String fileName = trimXmlWhitespaces(mBuilder.toString()); + Font font = getFont(fileName); + if (font != null) { + if (fileName.endsWith(FONT_SUFFIX_REGULAR)) { + mFontInfo.font[Typeface.NORMAL] = font; + } else if (fileName.endsWith(FONT_SUFFIX_BOLD)) { + mFontInfo.font[Typeface.BOLD] = font; + } else if (fileName.endsWith(FONT_SUFFIX_ITALIC)) { + mFontInfo.font[Typeface.ITALIC] = font; + } else if (fileName.endsWith(FONT_SUFFIX_BOLDITALIC)) { + mFontInfo.font[Typeface.BOLD_ITALIC] = font; + } else if (fileName.endsWith(FONT_SUFFIX_NONE)) { + mFontInfo.font[Typeface.NORMAL] = font; + } + } + } + } + } + + private Font getFont(String fileName) { + try { + File file = new File(mOsFontsLocation, fileName); + if (file.exists()) { + return Font.createFont(Font.TRUETYPE_FONT, file); + } + } catch (Exception e) { + + } + + return null; + } + + private void computeDerivedFont( int toCompute, int[] basedOnList) { + for (int basedOn : basedOnList) { + if (mFontInfo.font[basedOn] != null) { + mFontInfo.font[toCompute] = + mFontInfo.font[basedOn].deriveFont(AWT_STYLES[toCompute]); + return; + } + } + + // we really shouldn't stop there. This means we don't have a NORMAL font... + assert false; + } + + private String trimXmlWhitespaces(String value) { + if (value == null) { + return null; + } + + // look for carriage return and replace all whitespace around it by just 1 space. + int index; + + while ((index = value.indexOf('\n')) != -1) { + // look for whitespace on each side + int left = index - 1; + while (left >= 0) { + if (Character.isWhitespace(value.charAt(left))) { + left--; + } else { + break; + } + } + + int right = index + 1; + int count = value.length(); + while (right < count) { + if (Character.isWhitespace(value.charAt(right))) { + right++; + } else { + break; + } + } + + // remove all between left and right (non inclusive) and replace by a single space. + String leftString = null; + if (left >= 0) { + leftString = value.substring(0, left + 1); + } + String rightString = null; + if (right < count) { + rightString = value.substring(right); + } + + if (leftString != null) { + value = leftString; + if (rightString != null) { + value += " " + rightString; + } + } else { + value = rightString != null ? rightString : ""; + } + } + + // now we un-escape the string + int length = value.length(); + char[] buffer = value.toCharArray(); + + for (int i = 0 ; i < length ; i++) { + if (buffer[i] == '\\') { + if (buffer[i+1] == 'n') { + // replace the char with \n + buffer[i+1] = '\n'; + } + + // offset the rest of the buffer since we go from 2 to 1 char + System.arraycopy(buffer, i+1, buffer, i, length - i - 1); + length--; + } + } + + return new String(buffer, 0, length); + } + + } +} diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/GcSnapshot.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/GcSnapshot.java new file mode 100644 index 0000000000000..21d6b1a675056 --- /dev/null +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/GcSnapshot.java @@ -0,0 +1,803 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.layoutlib.bridge.impl; + +import com.android.ide.common.rendering.api.LayoutLog; +import com.android.layoutlib.bridge.Bridge; + +import android.graphics.Bitmap_Delegate; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.Paint_Delegate; +import android.graphics.Rect; +import android.graphics.RectF; +import android.graphics.Region; +import android.graphics.Region_Delegate; +import android.graphics.Shader_Delegate; +import android.graphics.Xfermode_Delegate; + +import java.awt.AlphaComposite; +import java.awt.Color; +import java.awt.Composite; +import java.awt.Graphics2D; +import java.awt.RenderingHints; +import java.awt.Shape; +import java.awt.geom.AffineTransform; +import java.awt.geom.Area; +import java.awt.geom.Rectangle2D; +import java.awt.image.BufferedImage; +import java.util.ArrayList; + +/** + * Class representing a graphics context snapshot, as well as a context stack as a linked list. + *

+ * This is based on top of {@link Graphics2D} but can operate independently if none are available + * yet when setting transforms and clip information. + *

+ * This allows for drawing through {@link #draw(Drawable, Paint_Delegate)} and + * {@link #draw(Drawable, Paint_Delegate)} + * + * Handling of layers (created with {@link Canvas#saveLayer(RectF, Paint, int)}) is handled through + * a list of Graphics2D for each layers. The class actually maintains a list of {@link Layer} + * for each layer. Doing a save() will duplicate this list so that each graphics2D object + * ({@link Layer#getGraphics()}) is configured only for the new snapshot. + */ +public class GcSnapshot { + + private final GcSnapshot mPrevious; + private final int mFlags; + + /** list of layers. The first item in the list is always the */ + private final ArrayList mLayers = new ArrayList(); + + /** temp transform in case transformation are set before a Graphics2D exists */ + private AffineTransform mTransform = null; + /** temp clip in case clipping is set before a Graphics2D exists */ + private Area mClip = null; + + // local layer data + /** a local layer created with {@link Canvas#saveLayer(RectF, Paint, int)}. + * If this is null, this does not mean there's no layer, just that the snapshot is not the + * one that created the layer. + * @see #getLayerSnapshot() + */ + private final Layer mLocalLayer; + private final Paint_Delegate mLocalLayerPaint; + private final Rect mLayerBounds; + + public interface Drawable { + void draw(Graphics2D graphics, Paint_Delegate paint); + } + + /** + * Class containing information about a layer. + * + * This contains graphics, bitmap and layer information. + */ + private static class Layer { + private final Graphics2D mGraphics; + private final Bitmap_Delegate mBitmap; + private final BufferedImage mImage; + /** the flags that were used to configure the layer. This is never changed, and passed + * as is when {@link #makeCopy()} is called */ + private final int mFlags; + /** the original content of the layer when the next object was created. This is not + * passed in {@link #makeCopy()} and instead is recreated when a new layer is added + * (depending on its flags) */ + private BufferedImage mOriginalCopy; + + /** + * Creates a layer with a graphics and a bitmap. This is only used to create + * the base layer. + * + * @param graphics the graphics + * @param bitmap the bitmap + */ + Layer(Graphics2D graphics, Bitmap_Delegate bitmap) { + mGraphics = graphics; + mBitmap = bitmap; + mImage = mBitmap.getImage(); + mFlags = 0; + } + + /** + * Creates a layer with a graphics and an image. If the image belongs to a + * {@link Bitmap_Delegate} (case of the base layer), then + * {@link Layer#Layer(Graphics2D, Bitmap_Delegate)} should be used. + * + * @param graphics the graphics the new graphics for this layer + * @param image the image the image from which the graphics came + * @param flags the flags that were used to save this layer + */ + Layer(Graphics2D graphics, BufferedImage image, int flags) { + mGraphics = graphics; + mBitmap = null; + mImage = image; + mFlags = flags; + } + + /** The Graphics2D, guaranteed to be non null */ + Graphics2D getGraphics() { + return mGraphics; + } + + /** The BufferedImage, guaranteed to be non null */ + BufferedImage getImage() { + return mImage; + } + + /** Returns the layer save flags. This is only valid for additional layers. + * For the base layer this will always return 0; + * For a given layer, all further copies of this {@link Layer} object in new snapshots + * will always return the same value. + */ + int getFlags() { + return mFlags; + } + + Layer makeCopy() { + if (mBitmap != null) { + return new Layer((Graphics2D) mGraphics.create(), mBitmap); + } + + return new Layer((Graphics2D) mGraphics.create(), mImage, mFlags); + } + + /** sets an optional copy of the original content to be used during restore */ + void setOriginalCopy(BufferedImage image) { + mOriginalCopy = image; + } + + BufferedImage getOriginalCopy() { + return mOriginalCopy; + } + + void change() { + if (mBitmap != null) { + mBitmap.change(); + } + } + + /** + * Sets the clip for the graphics2D object associated with the layer. + * This should be used over the normal Graphics2D setClip method. + * + * @param clipShape the shape to use a the clip shape. + */ + void setClip(Shape clipShape) { + // because setClip is only guaranteed to work with rectangle shape, + // first reset the clip to max and then intersect the current (empty) + // clip with the shap. + mGraphics.setClip(null); + mGraphics.clip(clipShape); + } + + /** + * Clips the layer with the given shape. This performs an intersect between the current + * clip shape and the given shape. + * @param shape the new clip shape. + */ + public void clip(Shape shape) { + mGraphics.clip(shape); + } + } + + /** + * Creates the root snapshot associating it with a given bitmap. + *

+ * If bitmap is null, then {@link GcSnapshot#setBitmap(Bitmap_Delegate)} must be + * called before the snapshot can be used to draw. Transform and clip operations are permitted + * before. + * + * @param image the image to associate to the snapshot or null. + * @return the root snapshot + */ + public static GcSnapshot createDefaultSnapshot(Bitmap_Delegate bitmap) { + GcSnapshot snapshot = new GcSnapshot(); + if (bitmap != null) { + snapshot.setBitmap(bitmap); + } + + return snapshot; + } + + /** + * Saves the current state according to the given flags and returns the new current snapshot. + *

+ * This is the equivalent of {@link Canvas#save(int)} + * + * @param flags the save flags. + * @return the new snapshot + * + * @see Canvas#save(int) + */ + public GcSnapshot save(int flags) { + return new GcSnapshot(this, null /*layerbounds*/, null /*paint*/, flags); + } + + /** + * Saves the current state and creates a new layer, and returns the new current snapshot. + *

+ * This is the equivalent of {@link Canvas#saveLayer(RectF, Paint, int)} + * + * @param layerBounds the layer bounds + * @param paint the Paint information used to blit the layer back into the layers underneath + * upon restore + * @param flags the save flags. + * @return the new snapshot + * + * @see Canvas#saveLayer(RectF, Paint, int) + */ + public GcSnapshot saveLayer(RectF layerBounds, Paint_Delegate paint, int flags) { + return new GcSnapshot(this, layerBounds, paint, flags); + } + + /** + * Creates the root snapshot. + * {@link #setGraphics2D(Graphics2D)} will have to be called on it when possible. + */ + private GcSnapshot() { + mPrevious = null; + mFlags = 0; + mLocalLayer = null; + mLocalLayerPaint = null; + mLayerBounds = null; + } + + /** + * Creates a new {@link GcSnapshot} on top of another one, with a layer data to be restored + * into the main graphics when {@link #restore()} is called. + * + * @param previous the previous snapshot head. + * @param layerBounds the region of the layer. Optional, if null, this is a normal save() + * @param paint the Paint information used to blit the layer back into the layers underneath + * upon restore + * @param flags the flags regarding what should be saved. + */ + private GcSnapshot(GcSnapshot previous, RectF layerBounds, Paint_Delegate paint, int flags) { + assert previous != null; + mPrevious = previous; + mFlags = flags; + + // make a copy of the current layers before adding the new one. + // This keeps the same BufferedImage reference but creates new Graphics2D for this + // snapshot. + // It does not copy whatever original copy the layers have, as they will be done + // only if the new layer doesn't clip drawing to itself. + for (Layer layer : mPrevious.mLayers) { + mLayers.add(layer.makeCopy()); + } + + if (layerBounds != null) { + // get the current transform + AffineTransform matrix = mLayers.get(0).getGraphics().getTransform(); + + // transform the layerBounds with the current transform and stores it into a int rect + RectF rect2 = new RectF(); + mapRect(matrix, rect2, layerBounds); + mLayerBounds = new Rect(); + rect2.round(mLayerBounds); + + // get the base layer (always at index 0) + Layer baseLayer = mLayers.get(0); + + // create the image for the layer + BufferedImage layerImage = new BufferedImage( + baseLayer.getImage().getWidth(), + baseLayer.getImage().getHeight(), + (mFlags & Canvas.HAS_ALPHA_LAYER_SAVE_FLAG) != 0 ? + BufferedImage.TYPE_INT_ARGB : + BufferedImage.TYPE_INT_RGB); + + // create a graphics for it so that drawing can be done. + Graphics2D layerGraphics = layerImage.createGraphics(); + + // because this layer inherits the current context for transform and clip, + // set them to one from the base layer. + AffineTransform currentMtx = baseLayer.getGraphics().getTransform(); + layerGraphics.setTransform(currentMtx); + + // create a new layer for this new layer and add it to the list at the end. + mLayers.add(mLocalLayer = new Layer(layerGraphics, layerImage, flags)); + + // set the clip on it. + Shape currentClip = baseLayer.getGraphics().getClip(); + mLocalLayer.setClip(currentClip); + + // if the drawing is not clipped to the local layer only, we save the current content + // of all other layers. We are only interested in the part that will actually + // be drawn, so we create as small bitmaps as we can. + // This is so that we can erase the drawing that goes in the layers below that will + // be coming from the layer itself. + if ((mFlags & Canvas.CLIP_TO_LAYER_SAVE_FLAG) == 0) { + int w = mLayerBounds.width(); + int h = mLayerBounds.height(); + for (int i = 0 ; i < mLayers.size() - 1 ; i++) { + Layer layer = mLayers.get(i); + BufferedImage image = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB); + Graphics2D graphics = image.createGraphics(); + graphics.drawImage(layer.getImage(), + 0, 0, w, h, + mLayerBounds.left, mLayerBounds.top, + mLayerBounds.right, mLayerBounds.bottom, + null); + graphics.dispose(); + layer.setOriginalCopy(image); + } + } + } else { + mLocalLayer = null; + mLayerBounds = null; + } + + mLocalLayerPaint = paint; + } + + public void dispose() { + for (Layer layer : mLayers) { + layer.getGraphics().dispose(); + } + + if (mPrevious != null) { + mPrevious.dispose(); + } + } + + /** + * Restores the top {@link GcSnapshot}, and returns the next one. + */ + public GcSnapshot restore() { + return doRestore(); + } + + /** + * Restores the {@link GcSnapshot} to saveCount. + * @param saveCount the saveCount or -1 to only restore 1. + * + * @return the new head of the Gc snapshot stack. + */ + public GcSnapshot restoreTo(int saveCount) { + return doRestoreTo(size(), saveCount); + } + + public int size() { + if (mPrevious != null) { + return mPrevious.size() + 1; + } + + return 1; + } + + /** + * Link the snapshot to a Bitmap_Delegate. + *

+ * This is only for the case where the snapshot was created with a null image when calling + * {@link #createDefaultSnapshot(Bitmap_Delegate)}, and is therefore not yet linked to + * a previous snapshot. + *

+ * If any transform or clip information was set before, they are put into the Graphics object. + * @param bitmap the bitmap to link to. + */ + public void setBitmap(Bitmap_Delegate bitmap) { + // create a new Layer for the bitmap. This will be the base layer. + Graphics2D graphics2D = bitmap.getImage().createGraphics(); + Layer baseLayer = new Layer(graphics2D, bitmap); + + // Set the current transform and clip which can either come from mTransform/mClip if they + // were set when there was no bitmap/layers or from the current base layers if there is + // one already. + + graphics2D.setTransform(getTransform()); + // reset mTransform in case there was one. + mTransform = null; + + baseLayer.setClip(getClip()); + // reset mClip in case there was one. + mClip = null; + + // replace whatever current layers we have with this. + mLayers.clear(); + mLayers.add(baseLayer); + + } + + public void translate(float dx, float dy) { + if (mLayers.size() > 0) { + for (Layer layer : mLayers) { + layer.getGraphics().translate(dx, dy); + } + } else { + if (mTransform == null) { + mTransform = new AffineTransform(); + } + mTransform.translate(dx, dy); + } + } + + public void rotate(double radians) { + if (mLayers.size() > 0) { + for (Layer layer : mLayers) { + layer.getGraphics().rotate(radians); + } + } else { + if (mTransform == null) { + mTransform = new AffineTransform(); + } + mTransform.rotate(radians); + } + } + + public void scale(float sx, float sy) { + if (mLayers.size() > 0) { + for (Layer layer : mLayers) { + layer.getGraphics().scale(sx, sy); + } + } else { + if (mTransform == null) { + mTransform = new AffineTransform(); + } + mTransform.scale(sx, sy); + } + } + + public AffineTransform getTransform() { + if (mLayers.size() > 0) { + // all graphics2D in the list have the same transform + return mLayers.get(0).getGraphics().getTransform(); + } else { + if (mTransform == null) { + mTransform = new AffineTransform(); + } + return mTransform; + } + } + + public void setTransform(AffineTransform transform) { + if (mLayers.size() > 0) { + for (Layer layer : mLayers) { + layer.getGraphics().setTransform(transform); + } + } else { + if (mTransform == null) { + mTransform = new AffineTransform(); + } + mTransform.setTransform(transform); + } + } + + public boolean clip(Shape shape, int regionOp) { + // Simple case of intersect with existing layers. + // Because Graphics2D#setClip works a bit peculiarly, we optimize + // the case of clipping by intersection, as it's supported natively. + if (regionOp == Region.Op.INTERSECT.nativeInt && mLayers.size() > 0) { + for (Layer layer : mLayers) { + layer.clip(shape); + } + + Shape currentClip = getClip(); + return currentClip != null && currentClip.getBounds().isEmpty() == false; + } + + Area area = null; + + if (regionOp == Region.Op.REPLACE.nativeInt) { + area = new Area(shape); + } else { + area = Region_Delegate.combineShapes(getClip(), shape, regionOp); + } + + assert area != null; + + if (mLayers.size() > 0) { + if (area != null) { + for (Layer layer : mLayers) { + layer.setClip(area); + } + } + + Shape currentClip = getClip(); + return currentClip != null && currentClip.getBounds().isEmpty() == false; + } else { + if (area != null) { + mClip = area; + } else { + mClip = new Area(); + } + + return mClip.getBounds().isEmpty() == false; + } + } + + public boolean clipRect(float left, float top, float right, float bottom, int regionOp) { + return clip(new Rectangle2D.Float(left, top, right - left, bottom - top), regionOp); + } + + /** + * Returns the current clip, or null if none have been setup. + */ + public Shape getClip() { + if (mLayers.size() > 0) { + // they all have the same clip + return mLayers.get(0).getGraphics().getClip(); + } else { + return mClip; + } + } + + private GcSnapshot doRestoreTo(int size, int saveCount) { + if (size <= saveCount) { + return this; + } + + // restore the current one first. + GcSnapshot previous = doRestore(); + + if (size == saveCount + 1) { // this was the only one that needed restore. + return previous; + } else { + return previous.doRestoreTo(size - 1, saveCount); + } + } + + /** + * Executes the Drawable's draw method, with a null paint delegate. + *

+ * Note that the method can be called several times if there are more than one active layer. + * @param drawable + */ + public void draw(Drawable drawable) { + draw(drawable, null, false /*compositeOnly*/, false /*forceSrcMode*/); + } + + /** + * Executes the Drawable's draw method. + *

+ * Note that the method can be called several times if there are more than one active layer. + * @param drawable + * @param paint + * @param compositeOnly whether the paint is used for composite only. This is typically + * the case for bitmaps. + * @param forceSrcMode if true, this overrides the composite to be SRC + */ + public void draw(Drawable drawable, Paint_Delegate paint, boolean compositeOnly, + boolean forceSrcMode) { + // the current snapshot may not have a mLocalLayer (ie it was created on save() instead + // of saveLayer(), but that doesn't mean there's no layer. + // mLayers however saves all the information we need (flags). + if (mLayers.size() == 1) { + // no layer, only base layer. easy case. + drawInLayer(mLayers.get(0), drawable, paint, compositeOnly, forceSrcMode); + } else { + // draw in all the layers until the layer save flags tells us to stop (ie drawing + // in that layer is limited to the layer itself. + int flags; + int i = mLayers.size() - 1; + + do { + Layer layer = mLayers.get(i); + + drawInLayer(layer, drawable, paint, compositeOnly, forceSrcMode); + + // then go to previous layer, only if there are any left, and its flags + // doesn't restrict drawing to the layer itself. + i--; + flags = layer.getFlags(); + } while (i >= 0 && (flags & Canvas.CLIP_TO_LAYER_SAVE_FLAG) == 0); + } + } + + private void drawInLayer(Layer layer, Drawable drawable, Paint_Delegate paint, + boolean compositeOnly, boolean forceSrcMode) { + Graphics2D originalGraphics = layer.getGraphics(); + // get a Graphics2D object configured with the drawing parameters. + Graphics2D configuredGraphics2D = + paint != null ? + createCustomGraphics(originalGraphics, paint, compositeOnly, forceSrcMode) : + (Graphics2D) originalGraphics.create(); + + try { + drawable.draw(configuredGraphics2D, paint); + layer.change(); + } finally { + // dispose Graphics2D object + configuredGraphics2D.dispose(); + } + } + + private GcSnapshot doRestore() { + if (mPrevious != null) { + if (mLocalLayer != null) { + // prepare to blit the layers in which we have draw, in the layer beneath + // them, starting with the top one (which is the current local layer). + int i = mLayers.size() - 1; + int flags; + do { + Layer dstLayer = mLayers.get(i - 1); + + restoreLayer(dstLayer); + + flags = dstLayer.getFlags(); + i--; + } while (i > 0 && (flags & Canvas.CLIP_TO_LAYER_SAVE_FLAG) == 0); + } + + // if this snapshot does not save everything, then set the previous snapshot + // to this snapshot content + + // didn't save the matrix? set the current matrix on the previous snapshot + if ((mFlags & Canvas.MATRIX_SAVE_FLAG) == 0) { + AffineTransform mtx = getTransform(); + for (Layer layer : mPrevious.mLayers) { + layer.getGraphics().setTransform(mtx); + } + } + + // didn't save the clip? set the current clip on the previous snapshot + if ((mFlags & Canvas.CLIP_SAVE_FLAG) == 0) { + Shape clip = getClip(); + for (Layer layer : mPrevious.mLayers) { + layer.setClip(clip); + } + } + } + + for (Layer layer : mLayers) { + layer.getGraphics().dispose(); + } + + return mPrevious; + } + + private void restoreLayer(Layer dstLayer) { + + Graphics2D baseGfx = dstLayer.getImage().createGraphics(); + + // if the layer contains an original copy this means the flags + // didn't restrict drawing to the local layer and we need to make sure the + // layer bounds in the layer beneath didn't receive any drawing. + // so we use the originalCopy to erase the new drawings in there. + BufferedImage originalCopy = dstLayer.getOriginalCopy(); + if (originalCopy != null) { + Graphics2D g = (Graphics2D) baseGfx.create(); + g.setComposite(AlphaComposite.Src); + + g.drawImage(originalCopy, + mLayerBounds.left, mLayerBounds.top, mLayerBounds.right, mLayerBounds.bottom, + 0, 0, mLayerBounds.width(), mLayerBounds.height(), + null); + g.dispose(); + } + + // now draw put the content of the local layer onto the layer, + // using the paint information + Graphics2D g = createCustomGraphics(baseGfx, mLocalLayerPaint, + true /*alphaOnly*/, false /*forceSrcMode*/); + + g.drawImage(mLocalLayer.getImage(), + mLayerBounds.left, mLayerBounds.top, mLayerBounds.right, mLayerBounds.bottom, + mLayerBounds.left, mLayerBounds.top, mLayerBounds.right, mLayerBounds.bottom, + null); + g.dispose(); + + baseGfx.dispose(); + } + + /** + * Creates a new {@link Graphics2D} based on the {@link Paint} parameters. + *

The object must be disposed ({@link Graphics2D#dispose()}) after being used. + */ + private Graphics2D createCustomGraphics(Graphics2D original, Paint_Delegate paint, + boolean compositeOnly, boolean forceSrcMode) { + // make new one graphics + Graphics2D g = (Graphics2D) original.create(); + + // configure it + + if (paint.isAntiAliased()) { + g.setRenderingHint( + RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); + g.setRenderingHint( + RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); + } + + boolean customShader = false; + + // get the shader first, as it'll replace the color if it can be used it. + if (compositeOnly == false) { + Shader_Delegate shaderDelegate = paint.getShader(); + if (shaderDelegate != null) { + if (shaderDelegate.isSupported()) { + java.awt.Paint shaderPaint = shaderDelegate.getJavaPaint(); + assert shaderPaint != null; + if (shaderPaint != null) { + g.setPaint(shaderPaint); + customShader = true; + } + } else { + Bridge.getLog().fidelityWarning(LayoutLog.TAG_SHADER, + shaderDelegate.getSupportMessage(), + null /*throwable*/, null /*data*/); + } + } + + // if no shader, use the paint color + if (customShader == false) { + g.setColor(new Color(paint.getColor(), true /*hasAlpha*/)); + } + + // set the stroke + g.setStroke(paint.getJavaStroke()); + } + + // the alpha for the composite. Always opaque if the normal paint color is used since + // it contains the alpha + int alpha = (compositeOnly || customShader) ? paint.getAlpha() : 0xFF; + + if (forceSrcMode) { + g.setComposite(AlphaComposite.getInstance( + AlphaComposite.SRC, (float) alpha / 255.f)); + } else { + boolean customXfermode = false; + Xfermode_Delegate xfermodeDelegate = paint.getXfermode(); + if (xfermodeDelegate != null) { + if (xfermodeDelegate.isSupported()) { + Composite composite = xfermodeDelegate.getComposite(alpha); + assert composite != null; + if (composite != null) { + g.setComposite(composite); + customXfermode = true; + } + } else { + Bridge.getLog().fidelityWarning(LayoutLog.TAG_XFERMODE, + xfermodeDelegate.getSupportMessage(), + null /*throwable*/, null /*data*/); + } + } + + // if there was no custom xfermode, but we have alpha (due to a shader and a non + // opaque alpha channel in the paint color), then we create an AlphaComposite anyway + // that will handle the alpha. + if (customXfermode == false && alpha != 0xFF) { + g.setComposite(AlphaComposite.getInstance( + AlphaComposite.SRC_OVER, (float) alpha / 255.f)); + } + } + + return g; + } + + private void mapRect(AffineTransform matrix, RectF dst, RectF src) { + // array with 4 corners + float[] corners = new float[] { + src.left, src.top, + src.right, src.top, + src.right, src.bottom, + src.left, src.bottom, + }; + + // apply the transform to them. + matrix.transform(corners, 0, corners, 0, 4); + + // now put the result in the rect. We take the min/max of Xs and min/max of Ys + dst.left = Math.min(Math.min(corners[0], corners[2]), Math.min(corners[4], corners[6])); + dst.right = Math.max(Math.max(corners[0], corners[2]), Math.max(corners[4], corners[6])); + + dst.top = Math.min(Math.min(corners[1], corners[3]), Math.min(corners[5], corners[7])); + dst.bottom = Math.max(Math.max(corners[1], corners[3]), Math.max(corners[5], corners[7])); + } + +} diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/ParserFactory.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/ParserFactory.java new file mode 100644 index 0000000000000..803849fd696aa --- /dev/null +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/ParserFactory.java @@ -0,0 +1,142 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.layoutlib.bridge.impl; + + +import org.kxml2.io.KXmlParser; +import org.xmlpull.v1.XmlPullParser; +import org.xmlpull.v1.XmlPullParserException; + +import java.io.BufferedInputStream; +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; + +/** + * A factory for {@link XmlPullParser}. + * + */ +public class ParserFactory { + + private final static String ENCODING = "UTF-8"; //$NON-NLS-1$ + + public final static boolean LOG_PARSER = false; + + public static XmlPullParser create(File f) + throws XmlPullParserException, FileNotFoundException { + InputStream stream = new FileInputStream(f); + return create(stream, f.getName(), f.length()); + } + + public static XmlPullParser create(InputStream stream, String name) + throws XmlPullParserException { + return create(stream, name, -1); + } + + private static XmlPullParser create(InputStream stream, String name, long size) + throws XmlPullParserException { + KXmlParser parser = instantiateParser(name); + + stream = readAndClose(stream, name, size); + + parser.setInput(stream, ENCODING); + return parser; + } + + private static KXmlParser instantiateParser(String name) throws XmlPullParserException { + KXmlParser parser; + if (name != null) { + parser = new CustomParser(name); + } else { + parser = new KXmlParser(); + } + parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, true); + return parser; + } + + private static InputStream readAndClose(InputStream stream, String name, long size) + throws XmlPullParserException { + // just a sanity check. It's doubtful we'll have such big files! + if (size > Integer.MAX_VALUE) { + throw new XmlPullParserException("File " + name + " is too big to be parsed"); + } + int intSize = (int) size; + + // create a buffered reader to facilitate reading. + BufferedInputStream bufferedStream = new BufferedInputStream(stream); + try { + int avail; + if (intSize != -1) { + avail = intSize; + } else { + // get the size to read. + avail = bufferedStream.available(); + } + + // create the initial buffer and read it. + byte[] buffer = new byte[avail]; + int read = stream.read(buffer); + + // this is the easy case. + if (read == intSize) { + return new ByteArrayInputStream(buffer); + } + + // check if there is more to read (read() does not necessarily read all that + // available() returned!) + while ((avail = bufferedStream.available()) > 0) { + if (read + avail > buffer.length) { + // just allocate what is needed. We're mostly reading small files + // so it shouldn't be too problematic. + byte[] moreBuffer = new byte[read + avail]; + System.arraycopy(buffer, 0, moreBuffer, 0, read); + buffer = moreBuffer; + } + + read += stream.read(buffer, read, avail); + } + + // return a new stream encapsulating this buffer. + return new ByteArrayInputStream(buffer); + + } catch (IOException e) { + throw new XmlPullParserException("Failed to read " + name, null, e); + } finally { + try { + bufferedStream.close(); + } catch (IOException e) { + } + } + } + + private static class CustomParser extends KXmlParser { + private final String mName; + + CustomParser(String name) { + super(); + mName = name; + } + + @Override + public String toString() { + return mName; + } + } +} diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/PlayAnimationThread.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/PlayAnimationThread.java new file mode 100644 index 0000000000000..7b701802b9a5d --- /dev/null +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/PlayAnimationThread.java @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.layoutlib.bridge.impl; + +import com.android.ide.common.rendering.api.IAnimationListener; +import com.android.ide.common.rendering.api.Result; +import com.android.ide.common.rendering.api.Result.Status; + +import android.animation.AnimationThread; +import android.animation.Animator; + +public class PlayAnimationThread extends AnimationThread { + + private final Animator mAnimator; + + public PlayAnimationThread(Animator animator, RenderSessionImpl scene, String animName, + IAnimationListener listener) { + super(scene, animName, listener); + mAnimator = animator; + } + + @Override + public Result preAnimation() { + // start the animation. This will send a message to the handler right away, so + // the queue is filled when this method returns. + mAnimator.start(); + + return Status.SUCCESS.createResult(); + } + + @Override + public void postAnimation() { + // nothing to be done. + } +} diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/RenderAction.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/RenderAction.java new file mode 100644 index 0000000000000..b909bec6299ef --- /dev/null +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/RenderAction.java @@ -0,0 +1,380 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.layoutlib.bridge.impl; + +import static com.android.ide.common.rendering.api.Result.Status.ERROR_LOCK_INTERRUPTED; +import static com.android.ide.common.rendering.api.Result.Status.ERROR_TIMEOUT; +import static com.android.ide.common.rendering.api.Result.Status.SUCCESS; + +import com.android.ide.common.rendering.api.HardwareConfig; +import com.android.ide.common.rendering.api.LayoutLog; +import com.android.ide.common.rendering.api.RenderParams; +import com.android.ide.common.rendering.api.RenderResources; +import com.android.ide.common.rendering.api.RenderResources.FrameworkResourceIdProvider; +import com.android.ide.common.rendering.api.Result; +import com.android.layoutlib.bridge.Bridge; +import com.android.layoutlib.bridge.android.BridgeContext; +import com.android.resources.Density; +import com.android.resources.ResourceType; +import com.android.resources.ScreenOrientation; +import com.android.resources.ScreenSize; + +import android.content.res.Configuration; +import android.os.HandlerThread_Delegate; +import android.os.Looper; +import android.util.DisplayMetrics; +import android.view.ViewConfiguration_Accessor; +import android.view.inputmethod.InputMethodManager; +import android.view.inputmethod.InputMethodManager_Accessor; + +import java.util.concurrent.TimeUnit; +import java.util.concurrent.locks.ReentrantLock; + +/** + * Base class for rendering action. + * + * It provides life-cycle methods to init and stop the rendering. + * The most important methods are: + * {@link #init(long)} and {@link #acquire(long)} to start a rendering and {@link #release()} + * after the rendering. + * + * + * @param the {@link RenderParams} implementation + * + */ +public abstract class RenderAction extends FrameworkResourceIdProvider { + + /** + * The current context being rendered. This is set through {@link #acquire(long)} and + * {@link #init(long)}, and unset in {@link #release()}. + */ + private static BridgeContext sCurrentContext = null; + + private final T mParams; + + private BridgeContext mContext; + + /** + * Creates a renderAction. + *

+ * This must be followed by a call to {@link RenderAction#init()}, which act as a + * call to {@link RenderAction#acquire(long)} + * + * @param params the RenderParams. This must be a copy that the action can keep + * + */ + protected RenderAction(T params) { + mParams = params; + } + + /** + * Initializes and acquires the scene, creating various Android objects such as context, + * inflater, and parser. + * + * @param timeout the time to wait if another rendering is happening. + * + * @return whether the scene was prepared + * + * @see #acquire(long) + * @see #release() + */ + public Result init(long timeout) { + // acquire the lock. if the result is null, lock was just acquired, otherwise, return + // the result. + Result result = acquireLock(timeout); + if (result != null) { + return result; + } + + HardwareConfig hardwareConfig = mParams.getHardwareConfig(); + + // setup the display Metrics. + DisplayMetrics metrics = new DisplayMetrics(); + metrics.densityDpi = metrics.noncompatDensityDpi = + hardwareConfig.getDensity().getDpiValue(); + + metrics.density = metrics.noncompatDensity = + metrics.densityDpi / (float) DisplayMetrics.DENSITY_DEFAULT; + + metrics.scaledDensity = metrics.noncompatScaledDensity = metrics.density; + + metrics.widthPixels = metrics.noncompatWidthPixels = hardwareConfig.getScreenWidth(); + metrics.heightPixels = metrics.noncompatHeightPixels = hardwareConfig.getScreenHeight(); + metrics.xdpi = metrics.noncompatXdpi = hardwareConfig.getXdpi(); + metrics.ydpi = metrics.noncompatYdpi = hardwareConfig.getYdpi(); + + RenderResources resources = mParams.getResources(); + + // build the context + mContext = new BridgeContext(mParams.getProjectKey(), metrics, resources, + mParams.getProjectCallback(), getConfiguration(), mParams.getTargetSdkVersion()); + + setUp(); + + return SUCCESS.createResult(); + } + + + /** + * Prepares the scene for action. + *

+ * This call is blocking if another rendering/inflating is currently happening, and will return + * whether the preparation worked. + * + * The preparation can fail if another rendering took too long and the timeout was elapsed. + * + * More than one call to this from the same thread will have no effect and will return + * {@link Result#SUCCESS}. + * + * After scene actions have taken place, only one call to {@link #release()} must be + * done. + * + * @param timeout the time to wait if another rendering is happening. + * + * @return whether the scene was prepared + * + * @see #release() + * + * @throws IllegalStateException if {@link #init(long)} was never called. + */ + public Result acquire(long timeout) { + if (mContext == null) { + throw new IllegalStateException("After scene creation, #init() must be called"); + } + + // acquire the lock. if the result is null, lock was just acquired, otherwise, return + // the result. + Result result = acquireLock(timeout); + if (result != null) { + return result; + } + + setUp(); + + return SUCCESS.createResult(); + } + + /** + * Acquire the lock so that the scene can be acted upon. + *

+ * This returns null if the lock was just acquired, otherwise it returns + * {@link Result#SUCCESS} if the lock already belonged to that thread, or another + * instance (see {@link Result#getStatus()}) if an error occurred. + * + * @param timeout the time to wait if another rendering is happening. + * @return null if the lock was just acquire or another result depending on the state. + * + * @throws IllegalStateException if the current context is different than the one owned by + * the scene. + */ + private Result acquireLock(long timeout) { + ReentrantLock lock = Bridge.getLock(); + if (lock.isHeldByCurrentThread() == false) { + try { + boolean acquired = lock.tryLock(timeout, TimeUnit.MILLISECONDS); + + if (acquired == false) { + return ERROR_TIMEOUT.createResult(); + } + } catch (InterruptedException e) { + return ERROR_LOCK_INTERRUPTED.createResult(); + } + } else { + // This thread holds the lock already. Checks that this wasn't for a different context. + // If this is called by init, mContext will be null and so should sCurrentContext + // anyway + if (mContext != sCurrentContext) { + throw new IllegalStateException("Acquiring different scenes from same thread without releases"); + } + return SUCCESS.createResult(); + } + + return null; + } + + /** + * Cleans up the scene after an action. + */ + public void release() { + ReentrantLock lock = Bridge.getLock(); + + // with the use of finally blocks, it is possible to find ourself calling this + // without a successful call to prepareScene. This test makes sure that unlock() will + // not throw IllegalMonitorStateException. + if (lock.isHeldByCurrentThread()) { + tearDown(); + lock.unlock(); + } + } + + /** + * Sets up the session for rendering. + *

+ * The counterpart is {@link #tearDown()}. + */ + private void setUp() { + // make sure the Resources object references the context (and other objects) for this + // scene + mContext.initResources(); + sCurrentContext = mContext; + + // create an InputMethodManager + InputMethodManager.getInstance(); + + LayoutLog currentLog = mParams.getLog(); + Bridge.setLog(currentLog); + mContext.getRenderResources().setFrameworkResourceIdProvider(this); + mContext.getRenderResources().setLogger(currentLog); + } + + /** + * Tear down the session after rendering. + *

+ * The counterpart is {@link #setUp()}. + */ + private void tearDown() { + // Make sure to remove static references, otherwise we could not unload the lib + mContext.disposeResources(); + + // quit HandlerThread created during this session. + HandlerThread_Delegate.cleanUp(sCurrentContext); + + // clear the stored ViewConfiguration since the map is per density and not per context. + ViewConfiguration_Accessor.clearConfigurations(); + + // remove the InputMethodManager + InputMethodManager_Accessor.resetInstance(); + + sCurrentContext = null; + + Bridge.setLog(null); + mContext.getRenderResources().setFrameworkResourceIdProvider(null); + mContext.getRenderResources().setLogger(null); + } + + public static BridgeContext getCurrentContext() { + return sCurrentContext; + } + + protected T getParams() { + return mParams; + } + + protected BridgeContext getContext() { + return mContext; + } + + /** + * Returns the log associated with the session. + * @return the log or null if there are none. + */ + public LayoutLog getLog() { + if (mParams != null) { + return mParams.getLog(); + } + + return null; + } + + /** + * Checks that the lock is owned by the current thread and that the current context is the one + * from this scene. + * + * @throws IllegalStateException if the current context is different than the one owned by + * the scene, or if {@link #acquire(long)} was not called. + */ + protected void checkLock() { + ReentrantLock lock = Bridge.getLock(); + if (lock.isHeldByCurrentThread() == false) { + throw new IllegalStateException("scene must be acquired first. see #acquire(long)"); + } + if (sCurrentContext != mContext) { + throw new IllegalStateException("Thread acquired a scene but is rendering a different one"); + } + } + + private Configuration getConfiguration() { + Configuration config = new Configuration(); + + HardwareConfig hardwareConfig = mParams.getHardwareConfig(); + + ScreenSize screenSize = hardwareConfig.getScreenSize(); + if (screenSize != null) { + switch (screenSize) { + case SMALL: + config.screenLayout |= Configuration.SCREENLAYOUT_SIZE_SMALL; + break; + case NORMAL: + config.screenLayout |= Configuration.SCREENLAYOUT_SIZE_NORMAL; + break; + case LARGE: + config.screenLayout |= Configuration.SCREENLAYOUT_SIZE_LARGE; + break; + case XLARGE: + config.screenLayout |= Configuration.SCREENLAYOUT_SIZE_XLARGE; + break; + } + } + + Density density = hardwareConfig.getDensity(); + if (density == null) { + density = Density.MEDIUM; + } + + config.screenWidthDp = hardwareConfig.getScreenWidth() / density.getDpiValue(); + config.screenHeightDp = hardwareConfig.getScreenHeight() / density.getDpiValue(); + if (config.screenHeightDp < config.screenWidthDp) { + config.smallestScreenWidthDp = config.screenHeightDp; + } else { + config.smallestScreenWidthDp = config.screenWidthDp; + } + config.densityDpi = density.getDpiValue(); + + // never run in compat mode: + config.compatScreenWidthDp = config.screenWidthDp; + config.compatScreenHeightDp = config.screenHeightDp; + + ScreenOrientation orientation = hardwareConfig.getOrientation(); + if (orientation != null) { + switch (orientation) { + case PORTRAIT: + config.orientation = Configuration.ORIENTATION_PORTRAIT; + break; + case LANDSCAPE: + config.orientation = Configuration.ORIENTATION_LANDSCAPE; + break; + case SQUARE: + config.orientation = Configuration.ORIENTATION_SQUARE; + break; + } + } else { + config.orientation = Configuration.ORIENTATION_UNDEFINED; + } + + // TODO: fill in more config info. + + return config; + } + + + // --- FrameworkResourceIdProvider methods + + @Override + public Integer getId(ResourceType resType, String resName) { + return Bridge.getResourceId(resType, resName); + } +} diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/RenderDrawable.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/RenderDrawable.java new file mode 100644 index 0000000000000..b6771315b09b4 --- /dev/null +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/RenderDrawable.java @@ -0,0 +1,133 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.layoutlib.bridge.impl; + +import static com.android.ide.common.rendering.api.Result.Status.ERROR_UNKNOWN; + +import com.android.ide.common.rendering.api.DrawableParams; +import com.android.ide.common.rendering.api.HardwareConfig; +import com.android.ide.common.rendering.api.ResourceValue; +import com.android.ide.common.rendering.api.Result; +import com.android.ide.common.rendering.api.Result.Status; +import com.android.layoutlib.bridge.android.BridgeContext; +import com.android.resources.ResourceType; + +import android.graphics.Bitmap; +import android.graphics.Bitmap_Delegate; +import android.graphics.Canvas; +import android.graphics.drawable.Drawable; +import android.view.AttachInfo_Accessor; +import android.view.View.MeasureSpec; +import android.widget.FrameLayout; + +import java.awt.AlphaComposite; +import java.awt.Color; +import java.awt.Graphics2D; +import java.awt.image.BufferedImage; +import java.io.IOException; + +/** + * Action to render a given Drawable provided through {@link DrawableParams#getDrawable()}. + * + * The class only provides a simple {@link #render()} method, but the full life-cycle of the + * action must be respected. + * + * @see RenderAction + * + */ +public class RenderDrawable extends RenderAction { + + public RenderDrawable(DrawableParams params) { + super(new DrawableParams(params)); + } + + public Result render() { + checkLock(); + try { + // get the drawable resource value + DrawableParams params = getParams(); + HardwareConfig hardwareConfig = params.getHardwareConfig(); + ResourceValue drawableResource = params.getDrawable(); + + // resolve it + BridgeContext context = getContext(); + drawableResource = context.getRenderResources().resolveResValue(drawableResource); + + if (drawableResource == null || + drawableResource.getResourceType() != ResourceType.DRAWABLE) { + return Status.ERROR_NOT_A_DRAWABLE.createResult(); + } + + // create a simple FrameLayout + FrameLayout content = new FrameLayout(context); + + // get the actual Drawable object to draw + Drawable d = ResourceHelper.getDrawable(drawableResource, context); + content.setBackground(d); + + // set the AttachInfo on the root view. + AttachInfo_Accessor.setAttachInfo(content); + + + // measure + int w = hardwareConfig.getScreenWidth(); + int h = hardwareConfig.getScreenHeight(); + int w_spec = MeasureSpec.makeMeasureSpec(w, MeasureSpec.EXACTLY); + int h_spec = MeasureSpec.makeMeasureSpec(h, MeasureSpec.EXACTLY); + content.measure(w_spec, h_spec); + + // now do the layout. + content.layout(0, 0, w, h); + + // preDraw setup + AttachInfo_Accessor.dispatchOnPreDraw(content); + + // draw into a new image + BufferedImage image = getImage(w, h); + + // create an Android bitmap around the BufferedImage + Bitmap bitmap = Bitmap_Delegate.createBitmap(image, + true /*isMutable*/, hardwareConfig.getDensity()); + + // create a Canvas around the Android bitmap + Canvas canvas = new Canvas(bitmap); + canvas.setDensity(hardwareConfig.getDensity().getDpiValue()); + + // and draw + content.draw(canvas); + + return Status.SUCCESS.createResult(image); + } catch (IOException e) { + return ERROR_UNKNOWN.createResult(e.getMessage(), e); + } + } + + protected BufferedImage getImage(int w, int h) { + BufferedImage image = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB); + Graphics2D gc = image.createGraphics(); + gc.setComposite(AlphaComposite.Src); + + gc.setColor(new Color(0x00000000, true)); + gc.fillRect(0, 0, w, h); + + // done + gc.dispose(); + + return image; + } + +} diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/RenderSessionImpl.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/RenderSessionImpl.java new file mode 100644 index 0000000000000..6011fdbabcdda --- /dev/null +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/RenderSessionImpl.java @@ -0,0 +1,1471 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.layoutlib.bridge.impl; + +import static com.android.ide.common.rendering.api.Result.Status.ERROR_ANIM_NOT_FOUND; +import static com.android.ide.common.rendering.api.Result.Status.ERROR_INFLATION; +import static com.android.ide.common.rendering.api.Result.Status.ERROR_NOT_INFLATED; +import static com.android.ide.common.rendering.api.Result.Status.ERROR_UNKNOWN; +import static com.android.ide.common.rendering.api.Result.Status.ERROR_VIEWGROUP_NO_CHILDREN; +import static com.android.ide.common.rendering.api.Result.Status.SUCCESS; + +import com.android.ide.common.rendering.api.AdapterBinding; +import com.android.ide.common.rendering.api.HardwareConfig; +import com.android.ide.common.rendering.api.IAnimationListener; +import com.android.ide.common.rendering.api.ILayoutPullParser; +import com.android.ide.common.rendering.api.IProjectCallback; +import com.android.ide.common.rendering.api.RenderParams; +import com.android.ide.common.rendering.api.RenderResources; +import com.android.ide.common.rendering.api.RenderSession; +import com.android.ide.common.rendering.api.ResourceReference; +import com.android.ide.common.rendering.api.ResourceValue; +import com.android.ide.common.rendering.api.Result; +import com.android.ide.common.rendering.api.Result.Status; +import com.android.ide.common.rendering.api.SessionParams; +import com.android.ide.common.rendering.api.SessionParams.RenderingMode; +import com.android.ide.common.rendering.api.ViewInfo; +import com.android.internal.util.XmlUtils; +import com.android.layoutlib.bridge.Bridge; +import com.android.layoutlib.bridge.android.BridgeContext; +import com.android.layoutlib.bridge.android.BridgeLayoutParamsMapAttributes; +import com.android.layoutlib.bridge.android.BridgeXmlBlockParser; +import com.android.layoutlib.bridge.bars.FakeActionBar; +import com.android.layoutlib.bridge.bars.NavigationBar; +import com.android.layoutlib.bridge.bars.StatusBar; +import com.android.layoutlib.bridge.bars.TitleBar; +import com.android.layoutlib.bridge.impl.binding.FakeAdapter; +import com.android.layoutlib.bridge.impl.binding.FakeExpandableAdapter; +import com.android.resources.ResourceType; +import com.android.resources.ScreenOrientation; +import com.android.util.Pair; + +import org.xmlpull.v1.XmlPullParserException; + +import android.animation.AnimationThread; +import android.animation.Animator; +import android.animation.AnimatorInflater; +import android.animation.LayoutTransition; +import android.animation.LayoutTransition.TransitionListener; +import android.app.Fragment_Delegate; +import android.graphics.Bitmap; +import android.graphics.Bitmap_Delegate; +import android.graphics.Canvas; +import android.graphics.drawable.Drawable; +import android.util.DisplayMetrics; +import android.util.TypedValue; +import android.view.AttachInfo_Accessor; +import android.view.BridgeInflater; +import android.view.IWindowManager; +import android.view.IWindowManagerImpl; +import android.view.Surface; +import android.view.View; +import android.view.View.MeasureSpec; +import android.view.ViewGroup; +import android.view.ViewGroup.LayoutParams; +import android.view.ViewGroup.MarginLayoutParams; +import android.view.WindowManagerGlobal_Delegate; +import android.widget.AbsListView; +import android.widget.AbsSpinner; +import android.widget.AdapterView; +import android.widget.ExpandableListView; +import android.widget.FrameLayout; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.QuickContactBadge; +import android.widget.TabHost; +import android.widget.TabHost.TabSpec; +import android.widget.TabWidget; + +import java.awt.AlphaComposite; +import java.awt.Color; +import java.awt.Graphics2D; +import java.awt.image.BufferedImage; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * Class implementing the render session. + * + * A session is a stateful representation of a layout file. It is initialized with data coming + * through the {@link Bridge} API to inflate the layout. Further actions and rendering can then + * be done on the layout. + * + */ +public class RenderSessionImpl extends RenderAction { + + private static final int DEFAULT_TITLE_BAR_HEIGHT = 25; + private static final int DEFAULT_STATUS_BAR_HEIGHT = 25; + + // scene state + private RenderSession mScene; + private BridgeXmlBlockParser mBlockParser; + private BridgeInflater mInflater; + private ResourceValue mWindowBackground; + private ViewGroup mViewRoot; + private FrameLayout mContentRoot; + private Canvas mCanvas; + private int mMeasuredScreenWidth = -1; + private int mMeasuredScreenHeight = -1; + private boolean mIsAlphaChannelImage; + private boolean mWindowIsFloating; + + private int mStatusBarSize; + private int mNavigationBarSize; + private int mNavigationBarOrientation = LinearLayout.HORIZONTAL; + private int mTitleBarSize; + private int mActionBarSize; + + + // information being returned through the API + private BufferedImage mImage; + private List mViewInfoList; + + private static final class PostInflateException extends Exception { + private static final long serialVersionUID = 1L; + + public PostInflateException(String message) { + super(message); + } + } + + /** + * Creates a layout scene with all the information coming from the layout bridge API. + *

+ * This must be followed by a call to {@link RenderSessionImpl#init()}, which act as a + * call to {@link RenderSessionImpl#acquire(long)} + * + * @see LayoutBridge#createScene(com.android.layoutlib.api.SceneParams) + */ + public RenderSessionImpl(SessionParams params) { + super(new SessionParams(params)); + } + + /** + * Initializes and acquires the scene, creating various Android objects such as context, + * inflater, and parser. + * + * @param timeout the time to wait if another rendering is happening. + * + * @return whether the scene was prepared + * + * @see #acquire(long) + * @see #release() + */ + @Override + public Result init(long timeout) { + Result result = super.init(timeout); + if (result.isSuccess() == false) { + return result; + } + + SessionParams params = getParams(); + BridgeContext context = getContext(); + + RenderResources resources = getParams().getResources(); + DisplayMetrics metrics = getContext().getMetrics(); + + // use default of true in case it's not found to use alpha by default + mIsAlphaChannelImage = getBooleanThemeValue(resources, + "windowIsFloating", true /*defaultValue*/); + + mWindowIsFloating = getBooleanThemeValue(resources, "windowIsFloating", + true /*defaultValue*/); + + findBackground(resources); + findStatusBar(resources, metrics); + findActionBar(resources, metrics); + findNavigationBar(resources, metrics); + + // FIXME: find those out, and possibly add them to the render params + boolean hasNavigationBar = true; + IWindowManager iwm = new IWindowManagerImpl(getContext().getConfiguration(), + metrics, Surface.ROTATION_0, + hasNavigationBar); + WindowManagerGlobal_Delegate.setWindowManagerService(iwm); + + // build the inflater and parser. + mInflater = new BridgeInflater(context, params.getProjectCallback()); + context.setBridgeInflater(mInflater); + + mBlockParser = new BridgeXmlBlockParser( + params.getLayoutDescription(), context, false /* platformResourceFlag */); + + return SUCCESS.createResult(); + } + + /** + * Inflates the layout. + *

+ * {@link #acquire(long)} must have been called before this. + * + * @throws IllegalStateException if the current context is different than the one owned by + * the scene, or if {@link #init(long)} was not called. + */ + public Result inflate() { + checkLock(); + + try { + + SessionParams params = getParams(); + HardwareConfig hardwareConfig = params.getHardwareConfig(); + BridgeContext context = getContext(); + + + // the view group that receives the window background. + ViewGroup backgroundView = null; + + if (mWindowIsFloating || params.isForceNoDecor()) { + backgroundView = mViewRoot = mContentRoot = new FrameLayout(context); + } else { + if (hasSoftwareButtons() && mNavigationBarOrientation == LinearLayout.VERTICAL) { + /* + * This is a special case where the navigation bar is on the right. + +-------------------------------------------------+---+ + | Status bar (always) | | + +-------------------------------------------------+ | + | (Layout with background drawable) | | + | +---------------------------------------------+ | | + | | Title/Action bar (optional) | | | + | +---------------------------------------------+ | | + | | Content, vertical extending | | | + | | | | | + | +---------------------------------------------+ | | + +-------------------------------------------------+---+ + + So we create a horizontal layout, with the nav bar on the right, + and the left part is the normal layout below without the nav bar at + the bottom + */ + LinearLayout topLayout = new LinearLayout(context); + mViewRoot = topLayout; + topLayout.setOrientation(LinearLayout.HORIZONTAL); + + try { + NavigationBar navigationBar = new NavigationBar(context, + hardwareConfig.getDensity(), LinearLayout.VERTICAL); + navigationBar.setLayoutParams( + new LinearLayout.LayoutParams( + mNavigationBarSize, + LayoutParams.MATCH_PARENT)); + topLayout.addView(navigationBar); + } catch (XmlPullParserException e) { + + } + } + + /* + * we're creating the following layout + * + +-------------------------------------------------+ + | Status bar (always) | + +-------------------------------------------------+ + | (Layout with background drawable) | + | +---------------------------------------------+ | + | | Title/Action bar (optional) | | + | +---------------------------------------------+ | + | | Content, vertical extending | | + | | | | + | +---------------------------------------------+ | + +-------------------------------------------------+ + | Navigation bar for soft buttons, maybe see above| + +-------------------------------------------------+ + + */ + + LinearLayout topLayout = new LinearLayout(context); + topLayout.setOrientation(LinearLayout.VERTICAL); + // if we don't already have a view root this is it + if (mViewRoot == null) { + mViewRoot = topLayout; + } else { + LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams( + LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT); + layoutParams.weight = 1; + topLayout.setLayoutParams(layoutParams); + + // this is the case of soft buttons + vertical bar. + // this top layout is the first layout in the horizontal layout. see above) + mViewRoot.addView(topLayout, 0); + } + + if (mStatusBarSize > 0) { + // system bar + try { + StatusBar systemBar = new StatusBar(context, hardwareConfig.getDensity()); + systemBar.setLayoutParams( + new LinearLayout.LayoutParams( + LayoutParams.MATCH_PARENT, mStatusBarSize)); + topLayout.addView(systemBar); + } catch (XmlPullParserException e) { + + } + } + + LinearLayout backgroundLayout = new LinearLayout(context); + backgroundView = backgroundLayout; + backgroundLayout.setOrientation(LinearLayout.VERTICAL); + LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams( + LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); + layoutParams.weight = 1; + backgroundLayout.setLayoutParams(layoutParams); + topLayout.addView(backgroundLayout); + + + // if the theme says no title/action bar, then the size will be 0 + if (mActionBarSize > 0) { + try { + FakeActionBar actionBar = new FakeActionBar(context, + hardwareConfig.getDensity(), + params.getAppLabel(), params.getAppIcon()); + actionBar.setLayoutParams( + new LinearLayout.LayoutParams( + LayoutParams.MATCH_PARENT, mActionBarSize)); + backgroundLayout.addView(actionBar); + } catch (XmlPullParserException e) { + + } + } else if (mTitleBarSize > 0) { + try { + TitleBar titleBar = new TitleBar(context, + hardwareConfig.getDensity(), params.getAppLabel()); + titleBar.setLayoutParams( + new LinearLayout.LayoutParams( + LayoutParams.MATCH_PARENT, mTitleBarSize)); + backgroundLayout.addView(titleBar); + } catch (XmlPullParserException e) { + + } + } + + // content frame + mContentRoot = new FrameLayout(context); + layoutParams = new LinearLayout.LayoutParams( + LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); + layoutParams.weight = 1; + mContentRoot.setLayoutParams(layoutParams); + backgroundLayout.addView(mContentRoot); + + if (mNavigationBarOrientation == LinearLayout.HORIZONTAL && + mNavigationBarSize > 0) { + // system bar + try { + NavigationBar navigationBar = new NavigationBar(context, + hardwareConfig.getDensity(), LinearLayout.HORIZONTAL); + navigationBar.setLayoutParams( + new LinearLayout.LayoutParams( + LayoutParams.MATCH_PARENT, mNavigationBarSize)); + topLayout.addView(navigationBar); + } catch (XmlPullParserException e) { + + } + } + } + + + // Sets the project callback (custom view loader) to the fragment delegate so that + // it can instantiate the custom Fragment. + Fragment_Delegate.setProjectCallback(params.getProjectCallback()); + + View view = mInflater.inflate(mBlockParser, mContentRoot); + + // done with the parser, pop it. + context.popParser(); + + Fragment_Delegate.setProjectCallback(null); + + // set the AttachInfo on the root view. + AttachInfo_Accessor.setAttachInfo(mViewRoot); + + // post-inflate process. For now this supports TabHost/TabWidget + postInflateProcess(view, params.getProjectCallback()); + + // get the background drawable + if (mWindowBackground != null && backgroundView != null) { + Drawable d = ResourceHelper.getDrawable(mWindowBackground, context); + backgroundView.setBackground(d); + } + + return SUCCESS.createResult(); + } catch (PostInflateException e) { + return ERROR_INFLATION.createResult(e.getMessage(), e); + } catch (Throwable e) { + // get the real cause of the exception. + Throwable t = e; + while (t.getCause() != null) { + t = t.getCause(); + } + + return ERROR_INFLATION.createResult(t.getMessage(), t); + } + } + + /** + * Renders the scene. + *

+ * {@link #acquire(long)} must have been called before this. + * + * @param freshRender whether the render is a new one and should erase the existing bitmap (in + * the case where bitmaps are reused). This is typically needed when not playing + * animations.) + * + * @throws IllegalStateException if the current context is different than the one owned by + * the scene, or if {@link #acquire(long)} was not called. + * + * @see RenderParams#getRenderingMode() + * @see RenderSession#render(long) + */ + public Result render(boolean freshRender) { + checkLock(); + + SessionParams params = getParams(); + + try { + if (mViewRoot == null) { + return ERROR_NOT_INFLATED.createResult(); + } + + RenderingMode renderingMode = params.getRenderingMode(); + HardwareConfig hardwareConfig = params.getHardwareConfig(); + + // only do the screen measure when needed. + boolean newRenderSize = false; + if (mMeasuredScreenWidth == -1) { + newRenderSize = true; + mMeasuredScreenWidth = hardwareConfig.getScreenWidth(); + mMeasuredScreenHeight = hardwareConfig.getScreenHeight(); + + if (renderingMode != RenderingMode.NORMAL) { + int widthMeasureSpecMode = renderingMode.isHorizExpand() ? + MeasureSpec.UNSPECIFIED // this lets us know the actual needed size + : MeasureSpec.EXACTLY; + int heightMeasureSpecMode = renderingMode.isVertExpand() ? + MeasureSpec.UNSPECIFIED // this lets us know the actual needed size + : MeasureSpec.EXACTLY; + + // We used to compare the measured size of the content to the screen size but + // this does not work anymore due to the 2 following issues: + // - If the content is in a decor (system bar, title/action bar), the root view + // will not resize even with the UNSPECIFIED because of the embedded layout. + // - If there is no decor, but a dialog frame, then the dialog padding prevents + // comparing the size of the content to the screen frame (as it would not + // take into account the dialog padding). + + // The solution is to first get the content size in a normal rendering, inside + // the decor or the dialog padding. + // Then measure only the content with UNSPECIFIED to see the size difference + // and apply this to the screen size. + + // first measure the full layout, with EXACTLY to get the size of the + // content as it is inside the decor/dialog + Pair exactMeasure = measureView( + mViewRoot, mContentRoot.getChildAt(0), + mMeasuredScreenWidth, MeasureSpec.EXACTLY, + mMeasuredScreenHeight, MeasureSpec.EXACTLY); + + // now measure the content only using UNSPECIFIED (where applicable, based on + // the rendering mode). This will give us the size the content needs. + Pair result = measureView( + mContentRoot, mContentRoot.getChildAt(0), + mMeasuredScreenWidth, widthMeasureSpecMode, + mMeasuredScreenHeight, heightMeasureSpecMode); + + // now look at the difference and add what is needed. + if (renderingMode.isHorizExpand()) { + int measuredWidth = exactMeasure.getFirst(); + int neededWidth = result.getFirst(); + if (neededWidth > measuredWidth) { + mMeasuredScreenWidth += neededWidth - measuredWidth; + } + } + + if (renderingMode.isVertExpand()) { + int measuredHeight = exactMeasure.getSecond(); + int neededHeight = result.getSecond(); + if (neededHeight > measuredHeight) { + mMeasuredScreenHeight += neededHeight - measuredHeight; + } + } + } + } + + // measure again with the size we need + // This must always be done before the call to layout + measureView(mViewRoot, null /*measuredView*/, + mMeasuredScreenWidth, MeasureSpec.EXACTLY, + mMeasuredScreenHeight, MeasureSpec.EXACTLY); + + // now do the layout. + mViewRoot.layout(0, 0, mMeasuredScreenWidth, mMeasuredScreenHeight); + + if (params.isLayoutOnly()) { + // delete the canvas and image to reset them on the next full rendering + mImage = null; + mCanvas = null; + } else { + AttachInfo_Accessor.dispatchOnPreDraw(mViewRoot); + + // draw the views + // create the BufferedImage into which the layout will be rendered. + boolean newImage = false; + if (newRenderSize || mCanvas == null) { + if (params.getImageFactory() != null) { + mImage = params.getImageFactory().getImage( + mMeasuredScreenWidth, + mMeasuredScreenHeight); + } else { + mImage = new BufferedImage( + mMeasuredScreenWidth, + mMeasuredScreenHeight, + BufferedImage.TYPE_INT_ARGB); + newImage = true; + } + + if (params.isBgColorOverridden()) { + // since we override the content, it's the same as if it was a new image. + newImage = true; + Graphics2D gc = mImage.createGraphics(); + gc.setColor(new Color(params.getOverrideBgColor(), true)); + gc.setComposite(AlphaComposite.Src); + gc.fillRect(0, 0, mMeasuredScreenWidth, mMeasuredScreenHeight); + gc.dispose(); + } + + // create an Android bitmap around the BufferedImage + Bitmap bitmap = Bitmap_Delegate.createBitmap(mImage, + true /*isMutable*/, hardwareConfig.getDensity()); + + // create a Canvas around the Android bitmap + mCanvas = new Canvas(bitmap); + mCanvas.setDensity(hardwareConfig.getDensity().getDpiValue()); + } + + if (freshRender && newImage == false) { + Graphics2D gc = mImage.createGraphics(); + gc.setComposite(AlphaComposite.Src); + + gc.setColor(new Color(0x00000000, true)); + gc.fillRect(0, 0, + mMeasuredScreenWidth, mMeasuredScreenHeight); + + // done + gc.dispose(); + } + + mViewRoot.draw(mCanvas); + } + + mViewInfoList = startVisitingViews(mViewRoot, 0, params.getExtendedViewInfoMode()); + + // success! + return SUCCESS.createResult(); + } catch (Throwable e) { + // get the real cause of the exception. + Throwable t = e; + while (t.getCause() != null) { + t = t.getCause(); + } + + return ERROR_UNKNOWN.createResult(t.getMessage(), t); + } + } + + /** + * Executes {@link View#measure(int, int)} on a given view with the given parameters (used + * to create measure specs with {@link MeasureSpec#makeMeasureSpec(int, int)}. + * + * if measuredView is non null, the method returns a {@link Pair} of (width, height) + * for the view (using {@link View#getMeasuredWidth()} and {@link View#getMeasuredHeight()}). + * + * @param viewToMeasure the view on which to execute measure(). + * @param measuredView if non null, the view to query for its measured width/height. + * @param width the width to use in the MeasureSpec. + * @param widthMode the MeasureSpec mode to use for the width. + * @param height the height to use in the MeasureSpec. + * @param heightMode the MeasureSpec mode to use for the height. + * @return the measured width/height if measuredView is non-null, null otherwise. + */ + private Pair measureView(ViewGroup viewToMeasure, View measuredView, + int width, int widthMode, int height, int heightMode) { + int w_spec = MeasureSpec.makeMeasureSpec(width, widthMode); + int h_spec = MeasureSpec.makeMeasureSpec(height, heightMode); + viewToMeasure.measure(w_spec, h_spec); + + if (measuredView != null) { + return Pair.of(measuredView.getMeasuredWidth(), measuredView.getMeasuredHeight()); + } + + return null; + } + + /** + * Animate an object + *

+ * {@link #acquire(long)} must have been called before this. + * + * @throws IllegalStateException if the current context is different than the one owned by + * the scene, or if {@link #acquire(long)} was not called. + * + * @see RenderSession#animate(Object, String, boolean, IAnimationListener) + */ + public Result animate(Object targetObject, String animationName, + boolean isFrameworkAnimation, IAnimationListener listener) { + checkLock(); + + BridgeContext context = getContext(); + + // find the animation file. + ResourceValue animationResource = null; + int animationId = 0; + if (isFrameworkAnimation) { + animationResource = context.getRenderResources().getFrameworkResource( + ResourceType.ANIMATOR, animationName); + if (animationResource != null) { + animationId = Bridge.getResourceId(ResourceType.ANIMATOR, animationName); + } + } else { + animationResource = context.getRenderResources().getProjectResource( + ResourceType.ANIMATOR, animationName); + if (animationResource != null) { + animationId = context.getProjectCallback().getResourceId( + ResourceType.ANIMATOR, animationName); + } + } + + if (animationResource != null) { + try { + Animator anim = AnimatorInflater.loadAnimator(context, animationId); + if (anim != null) { + anim.setTarget(targetObject); + + new PlayAnimationThread(anim, this, animationName, listener).start(); + + return SUCCESS.createResult(); + } + } catch (Exception e) { + // get the real cause of the exception. + Throwable t = e; + while (t.getCause() != null) { + t = t.getCause(); + } + + return ERROR_UNKNOWN.createResult(t.getMessage(), t); + } + } + + return ERROR_ANIM_NOT_FOUND.createResult(); + } + + /** + * Insert a new child into an existing parent. + *

+ * {@link #acquire(long)} must have been called before this. + * + * @throws IllegalStateException if the current context is different than the one owned by + * the scene, or if {@link #acquire(long)} was not called. + * + * @see RenderSession#insertChild(Object, ILayoutPullParser, int, IAnimationListener) + */ + public Result insertChild(final ViewGroup parentView, ILayoutPullParser childXml, + final int index, IAnimationListener listener) { + checkLock(); + + BridgeContext context = getContext(); + + // create a block parser for the XML + BridgeXmlBlockParser blockParser = new BridgeXmlBlockParser( + childXml, context, false /* platformResourceFlag */); + + // inflate the child without adding it to the root since we want to control where it'll + // get added. We do pass the parentView however to ensure that the layoutParams will + // be created correctly. + final View child = mInflater.inflate(blockParser, parentView, false /*attachToRoot*/); + blockParser.ensurePopped(); + + invalidateRenderingSize(); + + if (listener != null) { + new AnimationThread(this, "insertChild", listener) { + + @Override + public Result preAnimation() { + parentView.setLayoutTransition(new LayoutTransition()); + return addView(parentView, child, index); + } + + @Override + public void postAnimation() { + parentView.setLayoutTransition(null); + } + }.start(); + + // always return success since the real status will come through the listener. + return SUCCESS.createResult(child); + } + + // add it to the parentView in the correct location + Result result = addView(parentView, child, index); + if (result.isSuccess() == false) { + return result; + } + + result = render(false /*freshRender*/); + if (result.isSuccess()) { + result = result.getCopyWithData(child); + } + + return result; + } + + /** + * Adds a given view to a given parent at a given index. + * + * @param parent the parent to receive the view + * @param view the view to add to the parent + * @param index the index where to do the add. + * + * @return a Result with {@link Status#SUCCESS} or + * {@link Status#ERROR_VIEWGROUP_NO_CHILDREN} if the given parent doesn't support + * adding views. + */ + private Result addView(ViewGroup parent, View view, int index) { + try { + parent.addView(view, index); + return SUCCESS.createResult(); + } catch (UnsupportedOperationException e) { + // looks like this is a view class that doesn't support children manipulation! + return ERROR_VIEWGROUP_NO_CHILDREN.createResult(); + } + } + + /** + * Moves a view to a new parent at a given location + *

+ * {@link #acquire(long)} must have been called before this. + * + * @throws IllegalStateException if the current context is different than the one owned by + * the scene, or if {@link #acquire(long)} was not called. + * + * @see RenderSession#moveChild(Object, Object, int, Map, IAnimationListener) + */ + public Result moveChild(final ViewGroup newParentView, final View childView, final int index, + Map layoutParamsMap, final IAnimationListener listener) { + checkLock(); + + invalidateRenderingSize(); + + LayoutParams layoutParams = null; + if (layoutParamsMap != null) { + // need to create a new LayoutParams object for the new parent. + layoutParams = newParentView.generateLayoutParams( + new BridgeLayoutParamsMapAttributes(layoutParamsMap)); + } + + // get the current parent of the view that needs to be moved. + final ViewGroup previousParent = (ViewGroup) childView.getParent(); + + if (listener != null) { + final LayoutParams params = layoutParams; + + // there is no support for animating views across layouts, so in case the new and old + // parent views are different we fake the animation through a no animation thread. + if (previousParent != newParentView) { + new Thread("not animated moveChild") { + @Override + public void run() { + Result result = moveView(previousParent, newParentView, childView, index, + params); + if (result.isSuccess() == false) { + listener.done(result); + } + + // ready to do the work, acquire the scene. + result = acquire(250); + if (result.isSuccess() == false) { + listener.done(result); + return; + } + + try { + result = render(false /*freshRender*/); + if (result.isSuccess()) { + listener.onNewFrame(RenderSessionImpl.this.getSession()); + } + } finally { + release(); + } + + listener.done(result); + } + }.start(); + } else { + new AnimationThread(this, "moveChild", listener) { + + @Override + public Result preAnimation() { + // set up the transition for the parent. + LayoutTransition transition = new LayoutTransition(); + previousParent.setLayoutTransition(transition); + + // tweak the animation durations and start delays (to match the duration of + // animation playing just before). + // Note: Cannot user Animation.setDuration() directly. Have to set it + // on the LayoutTransition. + transition.setDuration(LayoutTransition.DISAPPEARING, 100); + // CHANGE_DISAPPEARING plays after DISAPPEARING + transition.setStartDelay(LayoutTransition.CHANGE_DISAPPEARING, 100); + + transition.setDuration(LayoutTransition.CHANGE_DISAPPEARING, 100); + + transition.setDuration(LayoutTransition.CHANGE_APPEARING, 100); + // CHANGE_APPEARING plays after CHANGE_APPEARING + transition.setStartDelay(LayoutTransition.APPEARING, 100); + + transition.setDuration(LayoutTransition.APPEARING, 100); + + return moveView(previousParent, newParentView, childView, index, params); + } + + @Override + public void postAnimation() { + previousParent.setLayoutTransition(null); + newParentView.setLayoutTransition(null); + } + }.start(); + } + + // always return success since the real status will come through the listener. + return SUCCESS.createResult(layoutParams); + } + + Result result = moveView(previousParent, newParentView, childView, index, layoutParams); + if (result.isSuccess() == false) { + return result; + } + + result = render(false /*freshRender*/); + if (layoutParams != null && result.isSuccess()) { + result = result.getCopyWithData(layoutParams); + } + + return result; + } + + /** + * Moves a View from its current parent to a new given parent at a new given location, with + * an optional new {@link LayoutParams} instance + * + * @param previousParent the previous parent, still owning the child at the time of the call. + * @param newParent the new parent + * @param movedView the view to move + * @param index the new location in the new parent + * @param params an option (can be null) {@link LayoutParams} instance. + * + * @return a Result with {@link Status#SUCCESS} or + * {@link Status#ERROR_VIEWGROUP_NO_CHILDREN} if the given parent doesn't support + * adding views. + */ + private Result moveView(ViewGroup previousParent, final ViewGroup newParent, + final View movedView, final int index, final LayoutParams params) { + try { + // check if there is a transition on the previousParent. + LayoutTransition previousTransition = previousParent.getLayoutTransition(); + if (previousTransition != null) { + // in this case there is an animation. This means we have to wait for the child's + // parent reference to be null'ed out so that we can add it to the new parent. + // It is technically removed right before the DISAPPEARING animation is done (if + // the animation of this type is not null, otherwise it's after which is impossible + // to handle). + // Because there is no move animation, if the new parent is the same as the old + // parent, we need to wait until the CHANGE_DISAPPEARING animation is done before + // adding the child or the child will appear in its new location before the + // other children have made room for it. + + // add a listener to the transition to be notified of the actual removal. + previousTransition.addTransitionListener(new TransitionListener() { + private int mChangeDisappearingCount = 0; + + @Override + public void startTransition(LayoutTransition transition, ViewGroup container, + View view, int transitionType) { + if (transitionType == LayoutTransition.CHANGE_DISAPPEARING) { + mChangeDisappearingCount++; + } + } + + @Override + public void endTransition(LayoutTransition transition, ViewGroup container, + View view, int transitionType) { + if (transitionType == LayoutTransition.CHANGE_DISAPPEARING) { + mChangeDisappearingCount--; + } + + if (transitionType == LayoutTransition.CHANGE_DISAPPEARING && + mChangeDisappearingCount == 0) { + // add it to the parentView in the correct location + if (params != null) { + newParent.addView(movedView, index, params); + } else { + newParent.addView(movedView, index); + } + } + } + }); + + // remove the view from the current parent. + previousParent.removeView(movedView); + + // and return since adding the view to the new parent is done in the listener. + return SUCCESS.createResult(); + } else { + // standard code with no animation. pretty simple. + previousParent.removeView(movedView); + + // add it to the parentView in the correct location + if (params != null) { + newParent.addView(movedView, index, params); + } else { + newParent.addView(movedView, index); + } + + return SUCCESS.createResult(); + } + } catch (UnsupportedOperationException e) { + // looks like this is a view class that doesn't support children manipulation! + return ERROR_VIEWGROUP_NO_CHILDREN.createResult(); + } + } + + /** + * Removes a child from its current parent. + *

+ * {@link #acquire(long)} must have been called before this. + * + * @throws IllegalStateException if the current context is different than the one owned by + * the scene, or if {@link #acquire(long)} was not called. + * + * @see RenderSession#removeChild(Object, IAnimationListener) + */ + public Result removeChild(final View childView, IAnimationListener listener) { + checkLock(); + + invalidateRenderingSize(); + + final ViewGroup parent = (ViewGroup) childView.getParent(); + + if (listener != null) { + new AnimationThread(this, "moveChild", listener) { + + @Override + public Result preAnimation() { + parent.setLayoutTransition(new LayoutTransition()); + return removeView(parent, childView); + } + + @Override + public void postAnimation() { + parent.setLayoutTransition(null); + } + }.start(); + + // always return success since the real status will come through the listener. + return SUCCESS.createResult(); + } + + Result result = removeView(parent, childView); + if (result.isSuccess() == false) { + return result; + } + + return render(false /*freshRender*/); + } + + /** + * Removes a given view from its current parent. + * + * @param view the view to remove from its parent + * + * @return a Result with {@link Status#SUCCESS} or + * {@link Status#ERROR_VIEWGROUP_NO_CHILDREN} if the given parent doesn't support + * adding views. + */ + private Result removeView(ViewGroup parent, View view) { + try { + parent.removeView(view); + return SUCCESS.createResult(); + } catch (UnsupportedOperationException e) { + // looks like this is a view class that doesn't support children manipulation! + return ERROR_VIEWGROUP_NO_CHILDREN.createResult(); + } + } + + + private void findBackground(RenderResources resources) { + if (getParams().isBgColorOverridden() == false) { + mWindowBackground = resources.findItemInTheme("windowBackground", + true /*isFrameworkAttr*/); + if (mWindowBackground != null) { + mWindowBackground = resources.resolveResValue(mWindowBackground); + } + } + } + + private boolean hasSoftwareButtons() { + return getParams().getHardwareConfig().hasSoftwareButtons(); + } + + private void findStatusBar(RenderResources resources, DisplayMetrics metrics) { + boolean windowFullscreen = getBooleanThemeValue(resources, + "windowFullscreen", false /*defaultValue*/); + + if (windowFullscreen == false && mWindowIsFloating == false) { + // default value + mStatusBarSize = DEFAULT_STATUS_BAR_HEIGHT; + + // get the real value + ResourceValue value = resources.getFrameworkResource(ResourceType.DIMEN, + "status_bar_height"); + + if (value != null) { + TypedValue typedValue = ResourceHelper.getValue("status_bar_height", + value.getValue(), true /*requireUnit*/); + if (typedValue != null) { + // compute the pixel value based on the display metrics + mStatusBarSize = (int)typedValue.getDimension(metrics); + } + } + } + } + + private void findActionBar(RenderResources resources, DisplayMetrics metrics) { + if (mWindowIsFloating) { + return; + } + + boolean windowActionBar = getBooleanThemeValue(resources, + "windowActionBar", true /*defaultValue*/); + + // if there's a value and it's false (default is true) + if (windowActionBar) { + + // default size of the window title bar + mActionBarSize = DEFAULT_TITLE_BAR_HEIGHT; + + // get value from the theme. + ResourceValue value = resources.findItemInTheme("actionBarSize", + true /*isFrameworkAttr*/); + + // resolve it + value = resources.resolveResValue(value); + + if (value != null) { + // get the numerical value, if available + TypedValue typedValue = ResourceHelper.getValue("actionBarSize", value.getValue(), + true /*requireUnit*/); + if (typedValue != null) { + // compute the pixel value based on the display metrics + mActionBarSize = (int)typedValue.getDimension(metrics); + } + } + } else { + // action bar overrides title bar so only look for this one if action bar is hidden + boolean windowNoTitle = getBooleanThemeValue(resources, + "windowNoTitle", false /*defaultValue*/); + + if (windowNoTitle == false) { + + // default size of the window title bar + mTitleBarSize = DEFAULT_TITLE_BAR_HEIGHT; + + // get value from the theme. + ResourceValue value = resources.findItemInTheme("windowTitleSize", + true /*isFrameworkAttr*/); + + // resolve it + value = resources.resolveResValue(value); + + if (value != null) { + // get the numerical value, if available + TypedValue typedValue = ResourceHelper.getValue("windowTitleSize", + value.getValue(), true /*requireUnit*/); + if (typedValue != null) { + // compute the pixel value based on the display metrics + mTitleBarSize = (int)typedValue.getDimension(metrics); + } + } + } + + } + } + + private void findNavigationBar(RenderResources resources, DisplayMetrics metrics) { + if (hasSoftwareButtons() && mWindowIsFloating == false) { + + // default value + mNavigationBarSize = 48; // ?? + + HardwareConfig hardwareConfig = getParams().getHardwareConfig(); + + boolean barOnBottom = true; + + if (hardwareConfig.getOrientation() == ScreenOrientation.LANDSCAPE) { + // compute the dp of the screen. + int shortSize = hardwareConfig.getScreenHeight(); + + // compute in dp + int shortSizeDp = shortSize * DisplayMetrics.DENSITY_DEFAULT / hardwareConfig.getDensity().getDpiValue(); + + if (shortSizeDp < 600) { + // 0-599dp: "phone" UI with bar on the side + barOnBottom = false; + } else { + // 600+dp: "tablet" UI with bar on the bottom + barOnBottom = true; + } + } + + if (barOnBottom) { + mNavigationBarOrientation = LinearLayout.HORIZONTAL; + } else { + mNavigationBarOrientation = LinearLayout.VERTICAL; + } + + // get the real value + ResourceValue value = resources.getFrameworkResource(ResourceType.DIMEN, + barOnBottom ? "navigation_bar_height" : "navigation_bar_width"); + + if (value != null) { + TypedValue typedValue = ResourceHelper.getValue("navigation_bar_height", + value.getValue(), true /*requireUnit*/); + if (typedValue != null) { + // compute the pixel value based on the display metrics + mNavigationBarSize = (int)typedValue.getDimension(metrics); + } + } + } + } + + /** + * Looks for a attribute in the current theme. The attribute is in the android + * namespace. + * + * @param resources the render resources + * @param name the name of the attribute + * @param defaultValue the default value. + * @return the value of the attribute or the default one if not found. + */ + private boolean getBooleanThemeValue(RenderResources resources, + String name, boolean defaultValue) { + + // get the title bar flag from the current theme. + ResourceValue value = resources.findItemInTheme(name, true /*isFrameworkAttr*/); + + // because it may reference something else, we resolve it. + value = resources.resolveResValue(value); + + // if there's no value, return the default. + if (value == null || value.getValue() == null) { + return defaultValue; + } + + return XmlUtils.convertValueToBoolean(value.getValue(), defaultValue); + } + + /** + * Post process on a view hierachy that was just inflated. + *

At the moment this only support TabHost: If {@link TabHost} is detected, look for the + * {@link TabWidget}, and the corresponding {@link FrameLayout} and make new tabs automatically + * based on the content of the {@link FrameLayout}. + * @param view the root view to process. + * @param projectCallback callback to the project. + */ + private void postInflateProcess(View view, IProjectCallback projectCallback) + throws PostInflateException { + if (view instanceof TabHost) { + setupTabHost((TabHost)view, projectCallback); + } else if (view instanceof QuickContactBadge) { + QuickContactBadge badge = (QuickContactBadge) view; + badge.setImageToDefault(); + } else if (view instanceof AdapterView) { + // get the view ID. + int id = view.getId(); + + BridgeContext context = getContext(); + + // get a ResourceReference from the integer ID. + ResourceReference listRef = context.resolveId(id); + + if (listRef != null) { + SessionParams params = getParams(); + AdapterBinding binding = params.getAdapterBindings().get(listRef); + + // if there was no adapter binding, trying to get it from the call back. + if (binding == null) { + binding = params.getProjectCallback().getAdapterBinding(listRef, + context.getViewKey(view), view); + } + + if (binding != null) { + + if (view instanceof AbsListView) { + if ((binding.getFooterCount() > 0 || binding.getHeaderCount() > 0) && + view instanceof ListView) { + ListView list = (ListView) view; + + boolean skipCallbackParser = false; + + int count = binding.getHeaderCount(); + for (int i = 0 ; i < count ; i++) { + Pair pair = context.inflateView( + binding.getHeaderAt(i), + list, false /*attachToRoot*/, skipCallbackParser); + if (pair.getFirst() != null) { + list.addHeaderView(pair.getFirst()); + } + + skipCallbackParser |= pair.getSecond(); + } + + count = binding.getFooterCount(); + for (int i = 0 ; i < count ; i++) { + Pair pair = context.inflateView( + binding.getFooterAt(i), + list, false /*attachToRoot*/, skipCallbackParser); + if (pair.getFirst() != null) { + list.addFooterView(pair.getFirst()); + } + + skipCallbackParser |= pair.getSecond(); + } + } + + if (view instanceof ExpandableListView) { + ((ExpandableListView) view).setAdapter( + new FakeExpandableAdapter( + listRef, binding, params.getProjectCallback())); + } else { + ((AbsListView) view).setAdapter( + new FakeAdapter( + listRef, binding, params.getProjectCallback())); + } + } else if (view instanceof AbsSpinner) { + ((AbsSpinner) view).setAdapter( + new FakeAdapter( + listRef, binding, params.getProjectCallback())); + } + } + } + } else if (view instanceof ViewGroup) { + ViewGroup group = (ViewGroup)view; + final int count = group.getChildCount(); + for (int c = 0 ; c < count ; c++) { + View child = group.getChildAt(c); + postInflateProcess(child, projectCallback); + } + } + } + + /** + * Sets up a {@link TabHost} object. + * @param tabHost the TabHost to setup. + * @param projectCallback The project callback object to access the project R class. + * @throws PostInflateException + */ + private void setupTabHost(TabHost tabHost, IProjectCallback projectCallback) + throws PostInflateException { + // look for the TabWidget, and the FrameLayout. They have their own specific names + View v = tabHost.findViewById(android.R.id.tabs); + + if (v == null) { + throw new PostInflateException( + "TabHost requires a TabWidget with id \"android:id/tabs\".\n"); + } + + if ((v instanceof TabWidget) == false) { + throw new PostInflateException(String.format( + "TabHost requires a TabWidget with id \"android:id/tabs\".\n" + + "View found with id 'tabs' is '%s'", v.getClass().getCanonicalName())); + } + + v = tabHost.findViewById(android.R.id.tabcontent); + + if (v == null) { + // TODO: see if we can fake tabs even without the FrameLayout (same below when the framelayout is empty) + throw new PostInflateException( + "TabHost requires a FrameLayout with id \"android:id/tabcontent\"."); + } + + if ((v instanceof FrameLayout) == false) { + throw new PostInflateException(String.format( + "TabHost requires a FrameLayout with id \"android:id/tabcontent\".\n" + + "View found with id 'tabcontent' is '%s'", v.getClass().getCanonicalName())); + } + + FrameLayout content = (FrameLayout)v; + + // now process the content of the framelayout and dynamically create tabs for it. + final int count = content.getChildCount(); + + // this must be called before addTab() so that the TabHost searches its TabWidget + // and FrameLayout. + tabHost.setup(); + + if (count == 0) { + // Create a dummy child to get a single tab + TabSpec spec = tabHost.newTabSpec("tag").setIndicator("Tab Label", + tabHost.getResources().getDrawable(android.R.drawable.ic_menu_info_details)) + .setContent(new TabHost.TabContentFactory() { + @Override + public View createTabContent(String tag) { + return new LinearLayout(getContext()); + } + }); + tabHost.addTab(spec); + return; + } else { + // for each child of the framelayout, add a new TabSpec + for (int i = 0 ; i < count ; i++) { + View child = content.getChildAt(i); + String tabSpec = String.format("tab_spec%d", i+1); + int id = child.getId(); + Pair resource = projectCallback.resolveResourceId(id); + String name; + if (resource != null) { + name = resource.getSecond(); + } else { + name = String.format("Tab %d", i+1); // default name if id is unresolved. + } + tabHost.addTab(tabHost.newTabSpec(tabSpec).setIndicator(name).setContent(id)); + } + } + } + + private List startVisitingViews(View view, int offset, boolean setExtendedInfo) { + if (view == null) { + return null; + } + + // adjust the offset to this view. + offset += view.getTop(); + + if (view == mContentRoot) { + return visitAllChildren(mContentRoot, offset, setExtendedInfo); + } + + // otherwise, look for mContentRoot in the children + if (view instanceof ViewGroup) { + ViewGroup group = ((ViewGroup) view); + + for (int i = 0; i < group.getChildCount(); i++) { + List list = startVisitingViews(group.getChildAt(i), offset, + setExtendedInfo); + if (list != null) { + return list; + } + } + } + + return null; + } + + /** + * Visits a View and its children and generate a {@link ViewInfo} containing the + * bounds of all the views. + * @param view the root View + * @param offset an offset for the view bounds. + * @param setExtendedInfo whether to set the extended view info in the {@link ViewInfo} object. + */ + private ViewInfo visit(View view, int offset, boolean setExtendedInfo) { + if (view == null) { + return null; + } + + ViewInfo result = new ViewInfo(view.getClass().getName(), + getContext().getViewKey(view), + view.getLeft(), view.getTop() + offset, view.getRight(), view.getBottom() + offset, + view, view.getLayoutParams()); + + if (setExtendedInfo) { + MarginLayoutParams marginParams = null; + LayoutParams params = view.getLayoutParams(); + if (params instanceof MarginLayoutParams) { + marginParams = (MarginLayoutParams) params; + } + result.setExtendedInfo(view.getBaseline(), + marginParams != null ? marginParams.leftMargin : 0, + marginParams != null ? marginParams.topMargin : 0, + marginParams != null ? marginParams.rightMargin : 0, + marginParams != null ? marginParams.bottomMargin : 0); + } + + if (view instanceof ViewGroup) { + ViewGroup group = ((ViewGroup) view); + result.setChildren(visitAllChildren(group, 0 /*offset*/, setExtendedInfo)); + } + + return result; + } + + /** + * Visits all the children of a given ViewGroup generate a list of {@link ViewInfo} + * containing the bounds of all the views. + * @param view the root View + * @param offset an offset for the view bounds. + * @param setExtendedInfo whether to set the extended view info in the {@link ViewInfo} object. + */ + private List visitAllChildren(ViewGroup viewGroup, int offset, + boolean setExtendedInfo) { + if (viewGroup == null) { + return null; + } + + List children = new ArrayList(); + for (int i = 0; i < viewGroup.getChildCount(); i++) { + children.add(visit(viewGroup.getChildAt(i), offset, setExtendedInfo)); + } + return children; + } + + + private void invalidateRenderingSize() { + mMeasuredScreenWidth = mMeasuredScreenHeight = -1; + } + + public BufferedImage getImage() { + return mImage; + } + + public boolean isAlphaChannelImage() { + return mIsAlphaChannelImage; + } + + public List getViewInfos() { + return mViewInfoList; + } + + public Map getDefaultProperties(Object viewObject) { + return getContext().getDefaultPropMap(viewObject); + } + + public void setScene(RenderSession session) { + mScene = session; + } + + public RenderSession getSession() { + return mScene; + } +} diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/ResourceHelper.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/ResourceHelper.java new file mode 100644 index 0000000000000..6dcb69393bd48 --- /dev/null +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/ResourceHelper.java @@ -0,0 +1,493 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.layoutlib.bridge.impl; + +import com.android.ide.common.rendering.api.DensityBasedResourceValue; +import com.android.ide.common.rendering.api.LayoutLog; +import com.android.ide.common.rendering.api.RenderResources; +import com.android.ide.common.rendering.api.ResourceValue; +import com.android.layoutlib.bridge.Bridge; +import com.android.layoutlib.bridge.android.BridgeContext; +import com.android.layoutlib.bridge.android.BridgeXmlBlockParser; +import com.android.ninepatch.NinePatch; +import com.android.ninepatch.NinePatchChunk; +import com.android.resources.Density; + +import org.xmlpull.v1.XmlPullParser; +import org.xmlpull.v1.XmlPullParserException; + +import android.content.res.ColorStateList; +import android.graphics.Bitmap; +import android.graphics.Bitmap_Delegate; +import android.graphics.NinePatch_Delegate; +import android.graphics.Rect; +import android.graphics.drawable.BitmapDrawable; +import android.graphics.drawable.ColorDrawable; +import android.graphics.drawable.Drawable; +import android.graphics.drawable.NinePatchDrawable; +import android.util.TypedValue; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.net.MalformedURLException; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * Helper class to provide various conversion method used in handling android resources. + */ +public final class ResourceHelper { + + private final static Pattern sFloatPattern = Pattern.compile("(-?[0-9]+(?:\\.[0-9]+)?)(.*)"); + private final static float[] sFloatOut = new float[1]; + + private final static TypedValue mValue = new TypedValue(); + + /** + * Returns the color value represented by the given string value + * @param value the color value + * @return the color as an int + * @throw NumberFormatException if the conversion failed. + */ + public static int getColor(String value) { + if (value != null) { + if (value.startsWith("#") == false) { + throw new NumberFormatException( + String.format("Color value '%s' must start with #", value)); + } + + value = value.substring(1); + + // make sure it's not longer than 32bit + if (value.length() > 8) { + throw new NumberFormatException(String.format( + "Color value '%s' is too long. Format is either" + + "#AARRGGBB, #RRGGBB, #RGB, or #ARGB", + value)); + } + + if (value.length() == 3) { // RGB format + char[] color = new char[8]; + color[0] = color[1] = 'F'; + color[2] = color[3] = value.charAt(0); + color[4] = color[5] = value.charAt(1); + color[6] = color[7] = value.charAt(2); + value = new String(color); + } else if (value.length() == 4) { // ARGB format + char[] color = new char[8]; + color[0] = color[1] = value.charAt(0); + color[2] = color[3] = value.charAt(1); + color[4] = color[5] = value.charAt(2); + color[6] = color[7] = value.charAt(3); + value = new String(color); + } else if (value.length() == 6) { + value = "FF" + value; + } + + // this is a RRGGBB or AARRGGBB value + + // Integer.parseInt will fail to parse strings like "ff191919", so we use + // a Long, but cast the result back into an int, since we know that we're only + // dealing with 32 bit values. + return (int)Long.parseLong(value, 16); + } + + throw new NumberFormatException(); + } + + public static ColorStateList getColorStateList(ResourceValue resValue, BridgeContext context) { + String value = resValue.getValue(); + if (value != null && RenderResources.REFERENCE_NULL.equals(value) == false) { + // first check if the value is a file (xml most likely) + File f = new File(value); + if (f.isFile()) { + try { + // let the framework inflate the ColorStateList from the XML file, by + // providing an XmlPullParser + XmlPullParser parser = ParserFactory.create(f); + + BridgeXmlBlockParser blockParser = new BridgeXmlBlockParser( + parser, context, resValue.isFramework()); + try { + return ColorStateList.createFromXml(context.getResources(), blockParser); + } finally { + blockParser.ensurePopped(); + } + } catch (XmlPullParserException e) { + Bridge.getLog().error(LayoutLog.TAG_BROKEN, + "Failed to configure parser for " + value, e, null /*data*/); + // we'll return null below. + } catch (Exception e) { + // this is an error and not warning since the file existence is + // checked before attempting to parse it. + Bridge.getLog().error(LayoutLog.TAG_RESOURCES_READ, + "Failed to parse file " + value, e, null /*data*/); + + return null; + } + } else { + // try to load the color state list from an int + try { + int color = ResourceHelper.getColor(value); + return ColorStateList.valueOf(color); + } catch (NumberFormatException e) { + Bridge.getLog().error(LayoutLog.TAG_RESOURCES_FORMAT, + "Failed to convert " + value + " into a ColorStateList", e, + null /*data*/); + return null; + } + } + } + + return null; + } + + /** + * Returns a drawable from the given value. + * @param value The value that contains a path to a 9 patch, a bitmap or a xml based drawable, + * or an hexadecimal color + * @param context the current context + */ + public static Drawable getDrawable(ResourceValue value, BridgeContext context) { + String stringValue = value.getValue(); + if (RenderResources.REFERENCE_NULL.equals(stringValue)) { + return null; + } + + String lowerCaseValue = stringValue.toLowerCase(); + + Density density = Density.MEDIUM; + if (value instanceof DensityBasedResourceValue) { + density = + ((DensityBasedResourceValue)value).getResourceDensity(); + } + + + if (lowerCaseValue.endsWith(NinePatch.EXTENSION_9PATCH)) { + File file = new File(stringValue); + if (file.isFile()) { + try { + return getNinePatchDrawable( + new FileInputStream(file), density, value.isFramework(), + stringValue, context); + } catch (IOException e) { + // failed to read the file, we'll return null below. + Bridge.getLog().error(LayoutLog.TAG_RESOURCES_READ, + "Failed lot load " + file.getAbsolutePath(), e, null /*data*/); + } + } + + return null; + } else if (lowerCaseValue.endsWith(".xml")) { + // create a block parser for the file + File f = new File(stringValue); + if (f.isFile()) { + try { + // let the framework inflate the Drawable from the XML file. + XmlPullParser parser = ParserFactory.create(f); + + BridgeXmlBlockParser blockParser = new BridgeXmlBlockParser( + parser, context, value.isFramework()); + try { + return Drawable.createFromXml(context.getResources(), blockParser); + } finally { + blockParser.ensurePopped(); + } + } catch (Exception e) { + // this is an error and not warning since the file existence is checked before + // attempting to parse it. + Bridge.getLog().error(null, "Failed to parse file " + stringValue, + e, null /*data*/); + } + } else { + Bridge.getLog().error(LayoutLog.TAG_BROKEN, + String.format("File %s does not exist (or is not a file)", stringValue), + null /*data*/); + } + + return null; + } else { + File bmpFile = new File(stringValue); + if (bmpFile.isFile()) { + try { + Bitmap bitmap = Bridge.getCachedBitmap(stringValue, + value.isFramework() ? null : context.getProjectKey()); + + if (bitmap == null) { + bitmap = Bitmap_Delegate.createBitmap(bmpFile, false /*isMutable*/, + density); + Bridge.setCachedBitmap(stringValue, bitmap, + value.isFramework() ? null : context.getProjectKey()); + } + + return new BitmapDrawable(context.getResources(), bitmap); + } catch (IOException e) { + // we'll return null below + Bridge.getLog().error(LayoutLog.TAG_RESOURCES_READ, + "Failed lot load " + bmpFile.getAbsolutePath(), e, null /*data*/); + } + } else { + // attempt to get a color from the value + try { + int color = getColor(stringValue); + return new ColorDrawable(color); + } catch (NumberFormatException e) { + // we'll return null below. + Bridge.getLog().error(LayoutLog.TAG_RESOURCES_FORMAT, + "Failed to convert " + stringValue + " into a drawable", e, + null /*data*/); + } + } + } + + return null; + } + + private static Drawable getNinePatchDrawable(InputStream inputStream, Density density, + boolean isFramework, String cacheKey, BridgeContext context) throws IOException { + // see if we still have both the chunk and the bitmap in the caches + NinePatchChunk chunk = Bridge.getCached9Patch(cacheKey, + isFramework ? null : context.getProjectKey()); + Bitmap bitmap = Bridge.getCachedBitmap(cacheKey, + isFramework ? null : context.getProjectKey()); + + // if either chunk or bitmap is null, then we reload the 9-patch file. + if (chunk == null || bitmap == null) { + try { + NinePatch ninePatch = NinePatch.load(inputStream, true /*is9Patch*/, + false /* convert */); + if (ninePatch != null) { + if (chunk == null) { + chunk = ninePatch.getChunk(); + + Bridge.setCached9Patch(cacheKey, chunk, + isFramework ? null : context.getProjectKey()); + } + + if (bitmap == null) { + bitmap = Bitmap_Delegate.createBitmap(ninePatch.getImage(), + false /*isMutable*/, + density); + + Bridge.setCachedBitmap(cacheKey, bitmap, + isFramework ? null : context.getProjectKey()); + } + } + } catch (MalformedURLException e) { + // URL is wrong, we'll return null below + } + } + + if (chunk != null && bitmap != null) { + int[] padding = chunk.getPadding(); + Rect paddingRect = new Rect(padding[0], padding[1], padding[2], padding[3]); + + return new NinePatchDrawable(context.getResources(), bitmap, + NinePatch_Delegate.serialize(chunk), + paddingRect, null); + } + + return null; + } + + // ------- TypedValue stuff + // This is taken from //device/libs/utils/ResourceTypes.cpp + + private static final class UnitEntry { + String name; + int type; + int unit; + float scale; + + UnitEntry(String name, int type, int unit, float scale) { + this.name = name; + this.type = type; + this.unit = unit; + this.scale = scale; + } + } + + private final static UnitEntry[] sUnitNames = new UnitEntry[] { + new UnitEntry("px", TypedValue.TYPE_DIMENSION, TypedValue.COMPLEX_UNIT_PX, 1.0f), + new UnitEntry("dip", TypedValue.TYPE_DIMENSION, TypedValue.COMPLEX_UNIT_DIP, 1.0f), + new UnitEntry("dp", TypedValue.TYPE_DIMENSION, TypedValue.COMPLEX_UNIT_DIP, 1.0f), + new UnitEntry("sp", TypedValue.TYPE_DIMENSION, TypedValue.COMPLEX_UNIT_SP, 1.0f), + new UnitEntry("pt", TypedValue.TYPE_DIMENSION, TypedValue.COMPLEX_UNIT_PT, 1.0f), + new UnitEntry("in", TypedValue.TYPE_DIMENSION, TypedValue.COMPLEX_UNIT_IN, 1.0f), + new UnitEntry("mm", TypedValue.TYPE_DIMENSION, TypedValue.COMPLEX_UNIT_MM, 1.0f), + new UnitEntry("%", TypedValue.TYPE_FRACTION, TypedValue.COMPLEX_UNIT_FRACTION, 1.0f/100), + new UnitEntry("%p", TypedValue.TYPE_FRACTION, TypedValue.COMPLEX_UNIT_FRACTION_PARENT, 1.0f/100), + }; + + /** + * Returns the raw value from the given attribute float-type value string. + * This object is only valid until the next call on to {@link ResourceHelper}. + */ + public static TypedValue getValue(String attribute, String value, boolean requireUnit) { + if (parseFloatAttribute(attribute, value, mValue, requireUnit)) { + return mValue; + } + + return null; + } + + /** + * Parse a float attribute and return the parsed value into a given TypedValue. + * @param attribute the name of the attribute. Can be null if requireUnit is false. + * @param value the string value of the attribute + * @param outValue the TypedValue to receive the parsed value + * @param requireUnit whether the value is expected to contain a unit. + * @return true if success. + */ + public static boolean parseFloatAttribute(String attribute, String value, + TypedValue outValue, boolean requireUnit) { + assert requireUnit == false || attribute != null; + + // remove the space before and after + value = value.trim(); + int len = value.length(); + + if (len <= 0) { + return false; + } + + // check that there's no non ascii characters. + char[] buf = value.toCharArray(); + for (int i = 0 ; i < len ; i++) { + if (buf[i] > 255) { + return false; + } + } + + // check the first character + if (buf[0] < '0' && buf[0] > '9' && buf[0] != '.' && buf[0] != '-') { + return false; + } + + // now look for the string that is after the float... + Matcher m = sFloatPattern.matcher(value); + if (m.matches()) { + String f_str = m.group(1); + String end = m.group(2); + + float f; + try { + f = Float.parseFloat(f_str); + } catch (NumberFormatException e) { + // this shouldn't happen with the regexp above. + return false; + } + + if (end.length() > 0 && end.charAt(0) != ' ') { + // Might be a unit... + if (parseUnit(end, outValue, sFloatOut)) { + computeTypedValue(outValue, f, sFloatOut[0]); + return true; + } + return false; + } + + // make sure it's only spaces at the end. + end = end.trim(); + + if (end.length() == 0) { + if (outValue != null) { + if (requireUnit == false) { + outValue.type = TypedValue.TYPE_FLOAT; + outValue.data = Float.floatToIntBits(f); + } else { + // no unit when required? Use dp and out an error. + applyUnit(sUnitNames[1], outValue, sFloatOut); + computeTypedValue(outValue, f, sFloatOut[0]); + + Bridge.getLog().error(LayoutLog.TAG_RESOURCES_RESOLVE, + String.format( + "Dimension \"%1$s\" in attribute \"%2$s\" is missing unit!", + value, attribute), + null); + } + return true; + } + } + } + + return false; + } + + private static void computeTypedValue(TypedValue outValue, float value, float scale) { + value *= scale; + boolean neg = value < 0; + if (neg) { + value = -value; + } + long bits = (long)(value*(1<<23)+.5f); + int radix; + int shift; + if ((bits&0x7fffff) == 0) { + // Always use 23p0 if there is no fraction, just to make + // things easier to read. + radix = TypedValue.COMPLEX_RADIX_23p0; + shift = 23; + } else if ((bits&0xffffffffff800000L) == 0) { + // Magnitude is zero -- can fit in 0 bits of precision. + radix = TypedValue.COMPLEX_RADIX_0p23; + shift = 0; + } else if ((bits&0xffffffff80000000L) == 0) { + // Magnitude can fit in 8 bits of precision. + radix = TypedValue.COMPLEX_RADIX_8p15; + shift = 8; + } else if ((bits&0xffffff8000000000L) == 0) { + // Magnitude can fit in 16 bits of precision. + radix = TypedValue.COMPLEX_RADIX_16p7; + shift = 16; + } else { + // Magnitude needs entire range, so no fractional part. + radix = TypedValue.COMPLEX_RADIX_23p0; + shift = 23; + } + int mantissa = (int)( + (bits>>shift) & TypedValue.COMPLEX_MANTISSA_MASK); + if (neg) { + mantissa = (-mantissa) & TypedValue.COMPLEX_MANTISSA_MASK; + } + outValue.data |= + (radix< + */ +public class Stack extends ArrayList { + + private static final long serialVersionUID = 1L; + + public Stack() { + super(); + } + + public Stack(int size) { + super(size); + } + + /** + * Pushes the given object to the stack + * @param object the object to push + */ + public void push(T object) { + add(object); + } + + /** + * Remove the object at the top of the stack and returns it. + * @return the removed object or null if the stack was empty. + */ + public T pop() { + if (size() > 0) { + return remove(size() - 1); + } + + return null; + } + + /** + * Returns the object at the top of the stack. + * @return the object at the top or null if the stack is empty. + */ + public T peek() { + if (size() > 0) { + return get(size() - 1); + } + + return null; + } +} diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/binding/BaseAdapter.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/binding/BaseAdapter.java new file mode 100644 index 0000000000000..e0414fe3ee4b9 --- /dev/null +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/binding/BaseAdapter.java @@ -0,0 +1,247 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.layoutlib.bridge.impl.binding; + +import com.android.ide.common.rendering.api.AdapterBinding; +import com.android.ide.common.rendering.api.DataBindingItem; +import com.android.ide.common.rendering.api.IProjectCallback; +import com.android.ide.common.rendering.api.LayoutLog; +import com.android.ide.common.rendering.api.ResourceReference; +import com.android.ide.common.rendering.api.IProjectCallback.ViewAttribute; +import com.android.layoutlib.bridge.Bridge; +import com.android.layoutlib.bridge.android.BridgeContext; +import com.android.layoutlib.bridge.impl.RenderAction; +import com.android.util.Pair; + +import android.database.DataSetObserver; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.Checkable; +import android.widget.ImageView; +import android.widget.TextView; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +/** + * Base adapter to do fake data binding in {@link AdapterView} objects. + */ +public class BaseAdapter { + + /** + * This is the items provided by the adapter. They are dynamically generated. + */ + protected final static class AdapterItem { + private final DataBindingItem mItem; + private final int mType; + private final int mFullPosition; + private final int mPositionPerType; + private List mChildren; + + protected AdapterItem(DataBindingItem item, int type, int fullPosition, + int positionPerType) { + mItem = item; + mType = type; + mFullPosition = fullPosition; + mPositionPerType = positionPerType; + } + + void addChild(AdapterItem child) { + if (mChildren == null) { + mChildren = new ArrayList(); + } + + mChildren.add(child); + } + + List getChildren() { + if (mChildren != null) { + return mChildren; + } + + return Collections.emptyList(); + } + + int getType() { + return mType; + } + + int getFullPosition() { + return mFullPosition; + } + + int getPositionPerType() { + return mPositionPerType; + } + + DataBindingItem getDataBindingItem() { + return mItem; + } + } + + private final AdapterBinding mBinding; + private final IProjectCallback mCallback; + private final ResourceReference mAdapterRef; + private boolean mSkipCallbackParser = false; + + protected final List mItems = new ArrayList(); + + protected BaseAdapter(ResourceReference adapterRef, AdapterBinding binding, + IProjectCallback callback) { + mAdapterRef = adapterRef; + mBinding = binding; + mCallback = callback; + } + + // ------- Some Adapter method used by all children classes. + + public boolean areAllItemsEnabled() { + return true; + } + + public boolean hasStableIds() { + return true; + } + + public boolean isEmpty() { + return mItems.size() == 0; + } + + public void registerDataSetObserver(DataSetObserver observer) { + // pass + } + + public void unregisterDataSetObserver(DataSetObserver observer) { + // pass + } + + // ------- + + + protected AdapterBinding getBinding() { + return mBinding; + } + + protected View getView(AdapterItem item, AdapterItem parentItem, View convertView, + ViewGroup parent) { + // we don't care about recycling here because we never scroll. + DataBindingItem dataBindingItem = item.getDataBindingItem(); + + BridgeContext context = RenderAction.getCurrentContext(); + + Pair pair = context.inflateView(dataBindingItem.getViewReference(), + parent, false /*attachToRoot*/, mSkipCallbackParser); + + View view = pair.getFirst(); + mSkipCallbackParser |= pair.getSecond(); + + if (view != null) { + fillView(context, view, item, parentItem); + } else { + // create a text view to display an error. + TextView tv = new TextView(context); + tv.setText("Unable to find layout: " + dataBindingItem.getViewReference().getName()); + view = tv; + } + + return view; + } + + private void fillView(BridgeContext context, View view, AdapterItem item, + AdapterItem parentItem) { + if (view instanceof ViewGroup) { + ViewGroup group = (ViewGroup) view; + final int count = group.getChildCount(); + for (int i = 0 ; i < count ; i++) { + fillView(context, group.getChildAt(i), item, parentItem); + } + } else { + int id = view.getId(); + if (id != 0) { + ResourceReference resolvedRef = context.resolveId(id); + if (resolvedRef != null) { + int fullPosition = item.getFullPosition(); + int positionPerType = item.getPositionPerType(); + int fullParentPosition = parentItem != null ? parentItem.getFullPosition() : 0; + int parentPositionPerType = parentItem != null ? + parentItem.getPositionPerType() : 0; + + if (view instanceof TextView) { + TextView tv = (TextView) view; + Object value = mCallback.getAdapterItemValue( + mAdapterRef, context.getViewKey(view), + item.getDataBindingItem().getViewReference(), + fullPosition, positionPerType, + fullParentPosition, parentPositionPerType, + resolvedRef, ViewAttribute.TEXT, tv.getText().toString()); + if (value != null) { + if (value.getClass() != ViewAttribute.TEXT.getAttributeClass()) { + Bridge.getLog().error(LayoutLog.TAG_BROKEN, String.format( + "Wrong Adapter Item value class for TEXT. Expected String, got %s", + value.getClass().getName()), null); + } else { + tv.setText((String) value); + } + } + } + + if (view instanceof Checkable) { + Checkable cb = (Checkable) view; + + Object value = mCallback.getAdapterItemValue( + mAdapterRef, context.getViewKey(view), + item.getDataBindingItem().getViewReference(), + fullPosition, positionPerType, + fullParentPosition, parentPositionPerType, + resolvedRef, ViewAttribute.IS_CHECKED, cb.isChecked()); + if (value != null) { + if (value.getClass() != ViewAttribute.IS_CHECKED.getAttributeClass()) { + Bridge.getLog().error(LayoutLog.TAG_BROKEN, String.format( + "Wrong Adapter Item value class for TEXT. Expected Boolean, got %s", + value.getClass().getName()), null); + } else { + cb.setChecked((Boolean) value); + } + } + } + + if (view instanceof ImageView) { + ImageView iv = (ImageView) view; + + Object value = mCallback.getAdapterItemValue( + mAdapterRef, context.getViewKey(view), + item.getDataBindingItem().getViewReference(), + fullPosition, positionPerType, + fullParentPosition, parentPositionPerType, + resolvedRef, ViewAttribute.SRC, iv.getDrawable()); + if (value != null) { + if (value.getClass() != ViewAttribute.SRC.getAttributeClass()) { + Bridge.getLog().error(LayoutLog.TAG_BROKEN, String.format( + "Wrong Adapter Item value class for TEXT. Expected Boolean, got %s", + value.getClass().getName()), null); + } else { + // FIXME + } + } + } + } + } + } + } +} diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/binding/FakeAdapter.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/binding/FakeAdapter.java new file mode 100644 index 0000000000000..22570b9cf8652 --- /dev/null +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/binding/FakeAdapter.java @@ -0,0 +1,121 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.layoutlib.bridge.impl.binding; + +import com.android.ide.common.rendering.api.AdapterBinding; +import com.android.ide.common.rendering.api.DataBindingItem; +import com.android.ide.common.rendering.api.IProjectCallback; +import com.android.ide.common.rendering.api.ResourceReference; + +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.ListAdapter; +import android.widget.SpinnerAdapter; + +import java.util.ArrayList; +import java.util.List; + +/** + * Fake adapter to do fake data binding in {@link AdapterView} objects for {@link ListAdapter} + * and {@link SpinnerAdapter}. + * + */ +public class FakeAdapter extends BaseAdapter implements ListAdapter, SpinnerAdapter { + + // don't use a set because the order is important. + private final List mTypes = new ArrayList(); + + public FakeAdapter(ResourceReference adapterRef, AdapterBinding binding, + IProjectCallback callback) { + super(adapterRef, binding, callback); + + final int repeatCount = getBinding().getRepeatCount(); + final int itemCount = getBinding().getItemCount(); + + // Need an array to count for each type. + // This is likely too big, but is the max it can be. + int[] typeCount = new int[itemCount]; + + // We put several repeating sets. + for (int r = 0 ; r < repeatCount ; r++) { + // loop on the type of list items, and add however many for each type. + for (DataBindingItem dataBindingItem : getBinding()) { + ResourceReference viewRef = dataBindingItem.getViewReference(); + int typeIndex = mTypes.indexOf(viewRef); + if (typeIndex == -1) { + typeIndex = mTypes.size(); + mTypes.add(viewRef); + } + + int count = dataBindingItem.getCount(); + + int index = typeCount[typeIndex]; + typeCount[typeIndex] += count; + + for (int k = 0 ; k < count ; k++) { + mItems.add(new AdapterItem(dataBindingItem, typeIndex, mItems.size(), index++)); + } + } + } + } + + @Override + public boolean isEnabled(int position) { + return true; + } + + @Override + public int getCount() { + return mItems.size(); + } + + @Override + public Object getItem(int position) { + return mItems.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public int getItemViewType(int position) { + return mItems.get(position).getType(); + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // we don't care about recycling here because we never scroll. + AdapterItem item = mItems.get(position); + return getView(item, null /*parentGroup*/, convertView, parent); + } + + @Override + public int getViewTypeCount() { + return mTypes.size(); + } + + // ---- SpinnerAdapter + + @Override + public View getDropDownView(int position, View convertView, ViewGroup parent) { + // pass + return null; + } +} diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/binding/FakeExpandableAdapter.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/binding/FakeExpandableAdapter.java new file mode 100644 index 0000000000000..199e0404a16b9 --- /dev/null +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/binding/FakeExpandableAdapter.java @@ -0,0 +1,196 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.layoutlib.bridge.impl.binding; + +import com.android.ide.common.rendering.api.AdapterBinding; +import com.android.ide.common.rendering.api.DataBindingItem; +import com.android.ide.common.rendering.api.IProjectCallback; +import com.android.ide.common.rendering.api.ResourceReference; + +import android.view.View; +import android.view.ViewGroup; +import android.widget.ExpandableListAdapter; +import android.widget.HeterogeneousExpandableList; + +import java.util.ArrayList; +import java.util.List; + +public class FakeExpandableAdapter extends BaseAdapter implements ExpandableListAdapter, + HeterogeneousExpandableList { + + // don't use a set because the order is important. + private final List mGroupTypes = new ArrayList(); + private final List mChildrenTypes = new ArrayList(); + + public FakeExpandableAdapter(ResourceReference adapterRef, AdapterBinding binding, + IProjectCallback callback) { + super(adapterRef, binding, callback); + + createItems(binding, binding.getItemCount(), binding.getRepeatCount(), mGroupTypes, 1); + } + + private void createItems(Iterable iterable, final int itemCount, + final int repeatCount, List types, int depth) { + // Need an array to count for each type. + // This is likely too big, but is the max it can be. + int[] typeCount = new int[itemCount]; + + // we put several repeating sets. + for (int r = 0 ; r < repeatCount ; r++) { + // loop on the type of list items, and add however many for each type. + for (DataBindingItem dataBindingItem : iterable) { + ResourceReference viewRef = dataBindingItem.getViewReference(); + int typeIndex = types.indexOf(viewRef); + if (typeIndex == -1) { + typeIndex = types.size(); + types.add(viewRef); + } + + List children = dataBindingItem.getChildren(); + int count = dataBindingItem.getCount(); + + // if there are children, we use the count as a repeat count for the children. + if (children.size() > 0) { + count = 1; + } + + int index = typeCount[typeIndex]; + typeCount[typeIndex] += count; + + for (int k = 0 ; k < count ; k++) { + AdapterItem item = new AdapterItem(dataBindingItem, typeIndex, mItems.size(), + index++); + mItems.add(item); + + if (children.size() > 0) { + createItems(dataBindingItem, depth + 1); + } + } + } + } + } + + private void createItems(DataBindingItem item, int depth) { + if (depth == 2) { + createItems(item, item.getChildren().size(), item.getCount(), mChildrenTypes, depth); + } + } + + private AdapterItem getChildItem(int groupPosition, int childPosition) { + AdapterItem item = mItems.get(groupPosition); + + List children = item.getChildren(); + return children.get(childPosition); + } + + // ---- ExpandableListAdapter + + @Override + public int getGroupCount() { + return mItems.size(); + } + + @Override + public int getChildrenCount(int groupPosition) { + AdapterItem item = mItems.get(groupPosition); + return item.getChildren().size(); + } + + @Override + public Object getGroup(int groupPosition) { + return mItems.get(groupPosition); + } + + @Override + public Object getChild(int groupPosition, int childPosition) { + return getChildItem(groupPosition, childPosition); + } + + @Override + public View getGroupView(int groupPosition, boolean isExpanded, View convertView, + ViewGroup parent) { + // we don't care about recycling here because we never scroll. + AdapterItem item = mItems.get(groupPosition); + return getView(item, null /*parentItem*/, convertView, parent); + } + + @Override + public View getChildView(int groupPosition, int childPosition, boolean isLastChild, + View convertView, ViewGroup parent) { + // we don't care about recycling here because we never scroll. + AdapterItem parentItem = mItems.get(groupPosition); + AdapterItem item = getChildItem(groupPosition, childPosition); + return getView(item, parentItem, convertView, parent); + } + + @Override + public long getGroupId(int groupPosition) { + return groupPosition; + } + + @Override + public long getChildId(int groupPosition, int childPosition) { + return childPosition; + } + + @Override + public long getCombinedGroupId(long groupId) { + return groupId << 16 | 0x0000FFFF; + } + + @Override + public long getCombinedChildId(long groupId, long childId) { + return groupId << 16 | childId; + } + + @Override + public boolean isChildSelectable(int groupPosition, int childPosition) { + return true; + } + + @Override + public void onGroupCollapsed(int groupPosition) { + // pass + } + + @Override + public void onGroupExpanded(int groupPosition) { + // pass + } + + // ---- HeterogeneousExpandableList + + @Override + public int getChildType(int groupPosition, int childPosition) { + return getChildItem(groupPosition, childPosition).getType(); + } + + @Override + public int getChildTypeCount() { + return mChildrenTypes.size(); + } + + @Override + public int getGroupType(int groupPosition) { + return mItems.get(groupPosition).getType(); + } + + @Override + public int getGroupTypeCount() { + return mGroupTypes.size(); + } +} diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/util/Debug.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/util/Debug.java new file mode 100644 index 0000000000000..82eab8560acb8 --- /dev/null +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/util/Debug.java @@ -0,0 +1,23 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.layoutlib.bridge.util; + +public class Debug { + + public final static boolean DEBUG = false; + +} diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/util/DynamicIdMap.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/util/DynamicIdMap.java new file mode 100644 index 0000000000000..a1fae95fc1aee --- /dev/null +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/util/DynamicIdMap.java @@ -0,0 +1,76 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.layoutlib.bridge.util; + +import com.android.resources.ResourceType; +import com.android.util.Pair; + +import android.util.SparseArray; + +import java.util.HashMap; +import java.util.Map; + +public class DynamicIdMap { + + private final Map, Integer> mDynamicIds = new HashMap, Integer>(); + private final SparseArray> mRevDynamicIds = new SparseArray>(); + private int mDynamicSeed; + + public DynamicIdMap(int seed) { + mDynamicSeed = seed; + } + + public void reset(int seed) { + mDynamicIds.clear(); + mRevDynamicIds.clear(); + mDynamicSeed = seed; + } + + /** + * Returns a dynamic integer for the given resource type/name, creating it if it doesn't + * already exist. + * + * @param type the type of the resource + * @param name the name of the resource + * @return an integer. + */ + public Integer getId(ResourceType type, String name) { + return getId(Pair.of(type, name)); + } + + /** + * Returns a dynamic integer for the given resource type/name, creating it if it doesn't + * already exist. + * + * @param resource the type/name of the resource + * @return an integer. + */ + public Integer getId(Pair resource) { + Integer value = mDynamicIds.get(resource); + if (value == null) { + value = Integer.valueOf(++mDynamicSeed); + mDynamicIds.put(resource, value); + mRevDynamicIds.put(value, resource); + } + + return value; + } + + public Pair resolveId(int id) { + return mRevDynamicIds.get(id); + } +} diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/util/SparseWeakArray.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/util/SparseWeakArray.java new file mode 100644 index 0000000000000..4d0c9ce3c71e7 --- /dev/null +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/util/SparseWeakArray.java @@ -0,0 +1,376 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.layoutlib.bridge.util; + + +import com.android.internal.util.ArrayUtils; + +import android.util.SparseArray; + +import java.lang.ref.WeakReference; + +/** + * This is a custom {@link SparseArray} that uses {@link WeakReference} around the objects added + * to it. When the array is compacted, not only deleted indices but also empty references + * are removed, making the array efficient at removing references that were reclaimed. + * + * The code is taken from {@link SparseArray} directly and adapted to use weak references. + * + * Because our usage means that we never actually call {@link #remove(int)} or {@link #delete(int)}, + * we must manually check if there are reclaimed references to trigger an internal compact step + * (which is normally only triggered when an item is manually removed). + * + * SparseArrays map integers to Objects. Unlike a normal array of Objects, + * there can be gaps in the indices. It is intended to be more efficient + * than using a HashMap to map Integers to Objects. + */ +@SuppressWarnings("unchecked") +public class SparseWeakArray { + + private static final Object DELETED_REF = new Object(); + private static final WeakReference DELETED = new WeakReference(DELETED_REF); + private boolean mGarbage = false; + + /** + * Creates a new SparseArray containing no mappings. + */ + public SparseWeakArray() { + this(10); + } + + /** + * Creates a new SparseArray containing no mappings that will not + * require any additional memory allocation to store the specified + * number of mappings. + */ + public SparseWeakArray(int initialCapacity) { + initialCapacity = ArrayUtils.idealIntArraySize(initialCapacity); + + mKeys = new int[initialCapacity]; + mValues = new WeakReference[initialCapacity]; + mSize = 0; + } + + /** + * Gets the Object mapped from the specified key, or null + * if no such mapping has been made. + */ + public E get(int key) { + return get(key, null); + } + + /** + * Gets the Object mapped from the specified key, or the specified Object + * if no such mapping has been made. + */ + public E get(int key, E valueIfKeyNotFound) { + int i = binarySearch(mKeys, 0, mSize, key); + + if (i < 0 || mValues[i] == DELETED || mValues[i].get() == null) { + return valueIfKeyNotFound; + } else { + return (E) mValues[i].get(); + } + } + + /** + * Removes the mapping from the specified key, if there was any. + */ + public void delete(int key) { + int i = binarySearch(mKeys, 0, mSize, key); + + if (i >= 0) { + if (mValues[i] != DELETED) { + mValues[i] = DELETED; + mGarbage = true; + } + } + } + + /** + * Alias for {@link #delete(int)}. + */ + public void remove(int key) { + delete(key); + } + + /** + * Removes the mapping at the specified index. + */ + public void removeAt(int index) { + if (mValues[index] != DELETED) { + mValues[index] = DELETED; + mGarbage = true; + } + } + + private void gc() { + int n = mSize; + int o = 0; + int[] keys = mKeys; + WeakReference[] values = mValues; + + for (int i = 0; i < n; i++) { + WeakReference val = values[i]; + + // Don't keep any non DELETED values, but only the one that still have a valid + // reference. + if (val != DELETED && val.get() != null) { + if (i != o) { + keys[o] = keys[i]; + values[o] = val; + } + + o++; + } + } + + mGarbage = false; + mSize = o; + + int newSize = ArrayUtils.idealIntArraySize(mSize); + if (newSize < mKeys.length) { + int[] nkeys = new int[newSize]; + WeakReference[] nvalues = new WeakReference[newSize]; + + System.arraycopy(mKeys, 0, nkeys, 0, newSize); + System.arraycopy(mValues, 0, nvalues, 0, newSize); + + mKeys = nkeys; + mValues = nvalues; + } + } + + /** + * Adds a mapping from the specified key to the specified value, + * replacing the previous mapping from the specified key if there + * was one. + */ + public void put(int key, E value) { + int i = binarySearch(mKeys, 0, mSize, key); + + if (i >= 0) { + mValues[i] = new WeakReference(value); + } else { + i = ~i; + + if (i < mSize && (mValues[i] == DELETED || mValues[i].get() == null)) { + mKeys[i] = key; + mValues[i] = new WeakReference(value); + return; + } + + if (mSize >= mKeys.length && (mGarbage || hasReclaimedRefs())) { + gc(); + + // Search again because indices may have changed. + i = ~binarySearch(mKeys, 0, mSize, key); + } + + if (mSize >= mKeys.length) { + int n = ArrayUtils.idealIntArraySize(mSize + 1); + + int[] nkeys = new int[n]; + WeakReference[] nvalues = new WeakReference[n]; + + // Log.e("SparseArray", "grow " + mKeys.length + " to " + n); + System.arraycopy(mKeys, 0, nkeys, 0, mKeys.length); + System.arraycopy(mValues, 0, nvalues, 0, mValues.length); + + mKeys = nkeys; + mValues = nvalues; + } + + if (mSize - i != 0) { + // Log.e("SparseArray", "move " + (mSize - i)); + System.arraycopy(mKeys, i, mKeys, i + 1, mSize - i); + System.arraycopy(mValues, i, mValues, i + 1, mSize - i); + } + + mKeys[i] = key; + mValues[i] = new WeakReference(value); + mSize++; + } + } + + /** + * Returns the number of key-value mappings that this SparseArray + * currently stores. + */ + public int size() { + if (mGarbage) { + gc(); + } + + return mSize; + } + + /** + * Given an index in the range 0...size()-1, returns + * the key from the indexth key-value mapping that this + * SparseArray stores. + */ + public int keyAt(int index) { + if (mGarbage) { + gc(); + } + + return mKeys[index]; + } + + /** + * Given an index in the range 0...size()-1, returns + * the value from the indexth key-value mapping that this + * SparseArray stores. + */ + public E valueAt(int index) { + if (mGarbage) { + gc(); + } + + return (E) mValues[index].get(); + } + + /** + * Given an index in the range 0...size()-1, sets a new + * value for the indexth key-value mapping that this + * SparseArray stores. + */ + public void setValueAt(int index, E value) { + if (mGarbage) { + gc(); + } + + mValues[index] = new WeakReference(value); + } + + /** + * Returns the index for which {@link #keyAt} would return the + * specified key, or a negative number if the specified + * key is not mapped. + */ + public int indexOfKey(int key) { + if (mGarbage) { + gc(); + } + + return binarySearch(mKeys, 0, mSize, key); + } + + /** + * Returns an index for which {@link #valueAt} would return the + * specified key, or a negative number if no keys map to the + * specified value. + * Beware that this is a linear search, unlike lookups by key, + * and that multiple keys can map to the same value and this will + * find only one of them. + */ + public int indexOfValue(E value) { + if (mGarbage) { + gc(); + } + + for (int i = 0; i < mSize; i++) + if (mValues[i].get() == value) + return i; + + return -1; + } + + /** + * Removes all key-value mappings from this SparseArray. + */ + public void clear() { + int n = mSize; + WeakReference[] values = mValues; + + for (int i = 0; i < n; i++) { + values[i] = null; + } + + mSize = 0; + mGarbage = false; + } + + /** + * Puts a key/value pair into the array, optimizing for the case where + * the key is greater than all existing keys in the array. + */ + public void append(int key, E value) { + if (mSize != 0 && key <= mKeys[mSize - 1]) { + put(key, value); + return; + } + + if (mSize >= mKeys.length && (mGarbage || hasReclaimedRefs())) { + gc(); + } + + int pos = mSize; + if (pos >= mKeys.length) { + int n = ArrayUtils.idealIntArraySize(pos + 1); + + int[] nkeys = new int[n]; + WeakReference[] nvalues = new WeakReference[n]; + + // Log.e("SparseArray", "grow " + mKeys.length + " to " + n); + System.arraycopy(mKeys, 0, nkeys, 0, mKeys.length); + System.arraycopy(mValues, 0, nvalues, 0, mValues.length); + + mKeys = nkeys; + mValues = nvalues; + } + + mKeys[pos] = key; + mValues[pos] = new WeakReference(value); + mSize = pos + 1; + } + + private boolean hasReclaimedRefs() { + for (int i = 0 ; i < mSize ; i++) { + if (mValues[i].get() == null) { // DELETED.get() never returns null. + return true; + } + } + + return false; + } + + private static int binarySearch(int[] a, int start, int len, int key) { + int high = start + len, low = start - 1, guess; + + while (high - low > 1) { + guess = (high + low) / 2; + + if (a[guess] < key) + low = guess; + else + high = guess; + } + + if (high == start + len) + return ~(start + len); + else if (a[high] == key) + return high; + else + return ~high; + } + + private int[] mKeys; + private WeakReference[] mValues; + private int mSize; +} diff --git a/tools/layoutlib/bridge/src/com/google/android/maps/MapView.java b/tools/layoutlib/bridge/src/com/google/android/maps/MapView.java new file mode 100644 index 0000000000000..6d013bbe6b057 --- /dev/null +++ b/tools/layoutlib/bridge/src/com/google/android/maps/MapView.java @@ -0,0 +1,121 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.maps; + +import com.android.layoutlib.bridge.MockView; + +import android.content.Context; +import android.os.Bundle; +import android.util.AttributeSet; +import android.view.View; + +/** + * Mock version of the MapView. + * Only non override public methods from the real MapView have been added in there. + * Methods that take an unknown class as parameter or as return object, have been removed for now. + * + * TODO: generate automatically. + * + */ +public class MapView extends MockView { + + /** + * Construct a new WebView with a Context object. + * @param context A Context object used to access application assets. + */ + public MapView(Context context) { + this(context, null); + } + + /** + * Construct a new WebView with layout parameters. + * @param context A Context object used to access application assets. + * @param attrs An AttributeSet passed to our parent. + */ + public MapView(Context context, AttributeSet attrs) { + this(context, attrs, com.android.internal.R.attr.mapViewStyle); + } + + /** + * Construct a new WebView with layout parameters and a default style. + * @param context A Context object used to access application assets. + * @param attrs An AttributeSet passed to our parent. + * @param defStyle The default style resource ID. + */ + public MapView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + } + + // START FAKE PUBLIC METHODS + + public void displayZoomControls(boolean takeFocus) { + } + + public boolean canCoverCenter() { + return false; + } + + public void preLoad() { + } + + public int getZoomLevel() { + return 0; + } + + public void setSatellite(boolean on) { + } + + public boolean isSatellite() { + return false; + } + + public void setTraffic(boolean on) { + } + + public boolean isTraffic() { + return false; + } + + public void setStreetView(boolean on) { + } + + public boolean isStreetView() { + return false; + } + + public int getLatitudeSpan() { + return 0; + } + + public int getLongitudeSpan() { + return 0; + } + + public int getMaxZoomLevel() { + return 0; + } + + public void onSaveInstanceState(Bundle state) { + } + + public void onRestoreInstanceState(Bundle state) { + } + + public View getZoomControls() { + return null; + } +} diff --git a/tools/layoutlib/bridge/src/libcore/icu/ICU_Delegate.java b/tools/layoutlib/bridge/src/libcore/icu/ICU_Delegate.java new file mode 100644 index 0000000000000..cd4f82bee9258 --- /dev/null +++ b/tools/layoutlib/bridge/src/libcore/icu/ICU_Delegate.java @@ -0,0 +1,225 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package libcore.icu; + +import com.android.tools.layoutlib.annotations.LayoutlibDelegate; + +import java.util.Locale; + +/** + * Delegate implementing the native methods of libcore.icu.ICU + * + * Through the layoutlib_create tool, the original native methods of ICU have been replaced + * by calls to methods of the same name in this delegate class. + * + */ +public class ICU_Delegate { + + // --- Java delegates + + @LayoutlibDelegate + /*package*/ static String toLowerCase(String s, String localeName) { + return s.toLowerCase(); + } + + @LayoutlibDelegate + /*package*/ static String toUpperCase(String s, String localeName) { + return s.toUpperCase(); + } + + // --- Native methods accessing ICU's database. + + @LayoutlibDelegate + /*package*/ static String getBestDateTimePattern(String skeleton, String localeName) { + return ""; // TODO: check what the right value should be. + } + + @LayoutlibDelegate + /*package*/ static String getCldrVersion() { + return "22.1.1"; // TODO: check what the right value should be. + } + + @LayoutlibDelegate + /*package*/ static String getIcuVersion() { + return "unknown_layoutlib"; + } + + @LayoutlibDelegate + /*package*/ static String getUnicodeVersion() { + return "5.2"; + } + + @LayoutlibDelegate + /*package*/ static String[] getAvailableBreakIteratorLocalesNative() { + return new String[0]; + } + + @LayoutlibDelegate + /*package*/ static String[] getAvailableCalendarLocalesNative() { + return new String[0]; + } + + @LayoutlibDelegate + /*package*/ static String[] getAvailableCollatorLocalesNative() { + return new String[0]; + } + + @LayoutlibDelegate + /*package*/ static String[] getAvailableDateFormatLocalesNative() { + return new String[0]; + } + + @LayoutlibDelegate + /*package*/ static String[] getAvailableLocalesNative() { + return new String[0]; + } + + @LayoutlibDelegate + /*package*/ static String[] getAvailableNumberFormatLocalesNative() { + return new String[0]; + } + + @LayoutlibDelegate + /*package*/ static String[] getAvailableCurrencyCodes() { + return new String[0]; + } + + @LayoutlibDelegate + /*package*/ static String getCurrencyCode(String locale) { + return ""; + } + + @LayoutlibDelegate + /*package*/ static String getCurrencyDisplayName(String locale, String currencyCode) { + return ""; + } + + @LayoutlibDelegate + /*package*/ static int getCurrencyFractionDigits(String currencyCode) { + return 0; + } + + @LayoutlibDelegate + /*package*/ static String getCurrencySymbol(String locale, String currencyCode) { + return ""; + } + + @LayoutlibDelegate + /*package*/ static String getDisplayCountryNative(String countryCode, String locale) { + return ""; + } + + @LayoutlibDelegate + /*package*/ static String getDisplayLanguageNative(String languageCode, String locale) { + return ""; + } + + @LayoutlibDelegate + /*package*/ static String getDisplayVariantNative(String variantCode, String locale) { + return ""; + } + + @LayoutlibDelegate + /*package*/ static String getISO3CountryNative(String locale) { + return ""; + } + + @LayoutlibDelegate + /*package*/ static String getISO3LanguageNative(String locale) { + return ""; + } + + @LayoutlibDelegate + /*package*/ static String addLikelySubtags(String locale) { + return ""; + } + + @LayoutlibDelegate + /*package*/ static String getScript(String locale) { + return ""; + } + + @LayoutlibDelegate + /*package*/ static String[] getISOLanguagesNative() { + return Locale.getISOLanguages(); + } + + @LayoutlibDelegate + /*package*/ static String[] getISOCountriesNative() { + return Locale.getISOCountries(); + } + + @LayoutlibDelegate + /*package*/ static boolean initLocaleDataImpl(String locale, LocaleData result) { + + // Used by Calendar. + result.firstDayOfWeek = Integer.valueOf(1); + result.minimalDaysInFirstWeek = Integer.valueOf(1); + + // Used by DateFormatSymbols. + result.amPm = new String[] { "AM", "PM" }; + result.eras = new String[] { "BC", "AD" }; + + result.longMonthNames = new String[] { "January", "February", "March", "April", "May", + "June", "July", "August", "September", "October", "November", "December" }; + result.shortMonthNames = new String[] { "Jan", "Feb", "Mar", "Apr", "May", + "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; + result.longStandAloneMonthNames = result.longMonthNames; + result.shortStandAloneMonthNames = result.shortMonthNames; + + result.longWeekdayNames = new String[] { + "Monday" ,"Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday" }; + result.shortWeekdayNames = new String[] { + "Mon" ,"Tue", "Wed", "Thu", "Fri", "Sat", "Sun" }; + result.longStandAloneWeekdayNames = result.longWeekdayNames; + result.shortStandAloneWeekdayNames = result.shortWeekdayNames; + + result.fullTimeFormat = ""; + result.longTimeFormat = ""; + result.mediumTimeFormat = ""; + result.shortTimeFormat = ""; + + result.fullDateFormat = ""; + result.longDateFormat = ""; + result.mediumDateFormat = ""; + result.shortDateFormat = ""; + + // Used by DecimalFormatSymbols. + result.zeroDigit = '0'; + result.decimalSeparator = '.'; + result.groupingSeparator = ','; + result.patternSeparator = ' '; + result.percent = '%'; + result.perMill = '\u2030'; + result.monetarySeparator = ' '; + result.minusSign = '-'; + result.exponentSeparator = "e"; + result.infinity = "\u221E"; + result.NaN = "NaN"; + // Also used by Currency. + result.currencySymbol = "$"; + result.internationalCurrencySymbol = "USD"; + + // Used by DecimalFormat and NumberFormat. + result.numberPattern = "%f"; + result.integerPattern = "%d"; + result.currencyPattern = "%s"; + result.percentPattern = "%f"; + + return true; + } +} diff --git a/tools/layoutlib/bridge/tests/.classpath b/tools/layoutlib/bridge/tests/.classpath new file mode 100644 index 0000000000000..2b32e097de901 --- /dev/null +++ b/tools/layoutlib/bridge/tests/.classpath @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/tools/layoutlib/bridge/tests/.project b/tools/layoutlib/bridge/tests/.project new file mode 100644 index 0000000000000..2325eed166277 --- /dev/null +++ b/tools/layoutlib/bridge/tests/.project @@ -0,0 +1,17 @@ + + + layoutlib_bridge-tests + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/tools/layoutlib/bridge/tests/Android.mk b/tools/layoutlib/bridge/tests/Android.mk new file mode 100644 index 0000000000000..98cade9f681da --- /dev/null +++ b/tools/layoutlib/bridge/tests/Android.mk @@ -0,0 +1,32 @@ +# Copyright (C) 2011 The Android Open Source Project +# +# Licensed 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 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +LOCAL_PATH := $(call my-dir) + +include $(CLEAR_VARS) + +# Only compile source java files in this lib. +LOCAL_SRC_FILES := $(call all-java-files-under, src) + +LOCAL_JAVA_RESOURCE_DIRS := res + +LOCAL_MODULE := layoutlib-tests +LOCAL_MODULE_TAGS := optional + +LOCAL_JAVA_LIBRARIES := layoutlib kxml2-2.3.0 junit + +include $(BUILD_HOST_JAVA_LIBRARY) + +# Build all sub-directories +include $(call all-makefiles-under,$(LOCAL_PATH)) diff --git a/tools/layoutlib/bridge/tests/res/com/android/layoutlib/testdata/layout1.xml b/tools/layoutlib/bridge/tests/res/com/android/layoutlib/testdata/layout1.xml new file mode 100644 index 0000000000000..b8fc9472ed83b --- /dev/null +++ b/tools/layoutlib/bridge/tests/res/com/android/layoutlib/testdata/layout1.xml @@ -0,0 +1,49 @@ + + + + + + + + + diff --git a/tools/layoutlib/bridge/tests/src/android/graphics/Matrix_DelegateTest.java b/tools/layoutlib/bridge/tests/src/android/graphics/Matrix_DelegateTest.java new file mode 100644 index 0000000000000..ec4edacca5eb7 --- /dev/null +++ b/tools/layoutlib/bridge/tests/src/android/graphics/Matrix_DelegateTest.java @@ -0,0 +1,58 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.graphics; + +import junit.framework.TestCase; + +/** + * + */ +public class Matrix_DelegateTest extends TestCase { + + @Override + protected void setUp() throws Exception { + super.setUp(); + } + + @Override + protected void tearDown() throws Exception { + super.tearDown(); + } + + public void testIdentity() { + Matrix m1 = new Matrix(); + + assertTrue(m1.isIdentity()); + + m1.setValues(new float[] { 1,0,0, 0,1,0, 0,0,1 }); + assertTrue(m1.isIdentity()); + } + + public void testCopyConstructor() { + Matrix m1 = new Matrix(); + Matrix m2 = new Matrix(m1); + + float[] v1 = new float[9]; + float[] v2 = new float[9]; + m1.getValues(v1); + m2.getValues(v2); + + for (int i = 0 ; i < 9; i++) { + assertEquals(v1[i], v2[i]); + } + } +} diff --git a/tools/layoutlib/bridge/tests/src/com/android/layoutlib/bridge/TestDelegates.java b/tools/layoutlib/bridge/tests/src/com/android/layoutlib/bridge/TestDelegates.java new file mode 100644 index 0000000000000..d3218dbd5bd3d --- /dev/null +++ b/tools/layoutlib/bridge/tests/src/com/android/layoutlib/bridge/TestDelegates.java @@ -0,0 +1,197 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.layoutlib.bridge; + +import com.android.tools.layoutlib.annotations.LayoutlibDelegate; +import com.android.tools.layoutlib.create.CreateInfo; + +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.util.ArrayList; +import java.util.List; + +import junit.framework.TestCase; + +/** + * Tests that native delegate classes implement all the required methods. + * + * This looks at {@link CreateInfo#DELEGATE_CLASS_NATIVES} to get the list of classes that + * have their native methods reimplemented through a delegate. + * + * Since the reimplemented methods are not native anymore, we look for the annotation + * {@link LayoutlibDelegate}, and look for a matching method in the delegate (named the same + * as the modified class with _Delegate added as a suffix). + * If the original native method is not static, then we make sure the delegate method also + * include the original class as first parameter (to access "this"). + * + */ +public class TestDelegates extends TestCase { + + public void testNativeDelegates() { + + final String[] classes = CreateInfo.DELEGATE_CLASS_NATIVES; + final int count = classes.length; + for (int i = 0 ; i < count ; i++) { + loadAndCompareClasses(classes[i], classes[i] + "_Delegate"); + } + } + + public void testMethodDelegates() { + final String[] methods = CreateInfo.DELEGATE_METHODS; + final int count = methods.length; + for (int i = 0 ; i < count ; i++) { + String methodName = methods[i]; + + // extract the class name + String className = methodName.substring(0, methodName.indexOf('#')); + String targetClassName = className.replace('$', '_') + "_Delegate"; + + loadAndCompareClasses(className, targetClassName); + } + } + + private void loadAndCompareClasses(String originalClassName, String delegateClassName) { + // load the classes + try { + ClassLoader classLoader = TestDelegates.class.getClassLoader(); + Class originalClass = classLoader.loadClass(originalClassName); + Class delegateClass = classLoader.loadClass(delegateClassName); + + compare(originalClass, delegateClass); + } catch (ClassNotFoundException e) { + fail("Failed to load class: " + e.getMessage()); + } catch (SecurityException e) { + fail("Failed to load class: " + e.getMessage()); + } + } + + private void compare(Class originalClass, Class delegateClass) throws SecurityException { + List checkedDelegateMethods = new ArrayList(); + + // loop on the methods of the original class, and for the ones that are annotated + // with @LayoutlibDelegate, look for a matching method in the delegate class. + // The annotation is automatically added by layoutlib_create when it replace a method + // by a call to a delegate + Method[] originalMethods = originalClass.getDeclaredMethods(); + for (Method originalMethod : originalMethods) { + // look for methods that are delegated: they have the LayoutlibDelegate annotation + if (originalMethod.getAnnotation(LayoutlibDelegate.class) == null) { + continue; + } + + // get the signature. + Class[] parameters = originalMethod.getParameterTypes(); + + // if the method is not static, then the class is added as the first parameter + // (for "this") + if ((originalMethod.getModifiers() & Modifier.STATIC) == 0) { + + Class[] newParameters = new Class[parameters.length + 1]; + newParameters[0] = originalClass; + System.arraycopy(parameters, 0, newParameters, 1, parameters.length); + parameters = newParameters; + } + + // if the original class is an inner class that's not static, then + // we add this on the enclosing class at the beginning + if (originalClass.getEnclosingClass() != null && + (originalClass.getModifiers() & Modifier.STATIC) == 0) { + Class[] newParameters = new Class[parameters.length + 1]; + newParameters[0] = originalClass.getEnclosingClass(); + System.arraycopy(parameters, 0, newParameters, 1, parameters.length); + parameters = newParameters; + } + + try { + // try to load the method with the given parameter types. + Method delegateMethod = delegateClass.getDeclaredMethod(originalMethod.getName(), + parameters); + + // check that the method has the annotation + assertNotNull( + String.format( + "Delegate method %1$s for class %2$s does not have the @LayoutlibDelegate annotation", + delegateMethod.getName(), + originalClass.getName()), + delegateMethod.getAnnotation(LayoutlibDelegate.class)); + + // check that the method is static + assertTrue( + String.format( + "Delegate method %1$s for class %2$s is not static", + delegateMethod.getName(), + originalClass.getName()), + (delegateMethod.getModifiers() & Modifier.STATIC) == Modifier.STATIC); + + // add the method as checked. + checkedDelegateMethods.add(delegateMethod); + } catch (NoSuchMethodException e) { + String name = getMethodName(originalMethod, parameters); + fail(String.format("Missing %1$s.%2$s", delegateClass.getName(), name)); + } + } + + // look for dead (delegate) code. + // This looks for all methods in the delegate class, and if they have the + // @LayoutlibDelegate annotation, make sure they have been previously found as a + // match for a method in the original class. + // If not, this means the method is a delegate for a method that either doesn't exist + // anymore or is not delegated anymore. + Method[] delegateMethods = delegateClass.getDeclaredMethods(); + for (Method delegateMethod : delegateMethods) { + // look for methods that are delegates: they have the LayoutlibDelegate annotation + if (delegateMethod.getAnnotation(LayoutlibDelegate.class) == null) { + continue; + } + + assertTrue( + String.format( + "Delegate method %1$s.%2$s is not used anymore and must be removed", + delegateClass.getName(), + getMethodName(delegateMethod)), + checkedDelegateMethods.contains(delegateMethod)); + } + + } + + private String getMethodName(Method method) { + return getMethodName(method, method.getParameterTypes()); + } + + private String getMethodName(Method method, Class[] parameters) { + // compute a full class name that's long but not too long. + StringBuilder sb = new StringBuilder(method.getName() + "("); + for (int j = 0; j < parameters.length; j++) { + Class theClass = parameters[j]; + sb.append(theClass.getName()); + int dimensions = 0; + while (theClass.isArray()) { + dimensions++; + theClass = theClass.getComponentType(); + } + for (int i = 0; i < dimensions; i++) { + sb.append("[]"); + } + if (j < (parameters.length - 1)) { + sb.append(","); + } + } + sb.append(")"); + + return sb.toString(); + } +} diff --git a/tools/layoutlib/bridge/tests/src/com/android/layoutlib/bridge/android/BridgeXmlBlockParserTest.java b/tools/layoutlib/bridge/tests/src/com/android/layoutlib/bridge/android/BridgeXmlBlockParserTest.java new file mode 100644 index 0000000000000..865a008a74578 --- /dev/null +++ b/tools/layoutlib/bridge/tests/src/com/android/layoutlib/bridge/android/BridgeXmlBlockParserTest.java @@ -0,0 +1,121 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.layoutlib.bridge.android; + +import com.android.layoutlib.bridge.impl.ParserFactory; + +import org.w3c.dom.Node; +import org.xmlpull.v1.XmlPullParser; + +import junit.framework.TestCase; + +public class BridgeXmlBlockParserTest extends TestCase { + + @Override + protected void setUp() throws Exception { + super.setUp(); + } + + @Override + protected void tearDown() throws Exception { + super.tearDown(); + } + + public void testXmlBlockParser() throws Exception { + + XmlPullParser parser = ParserFactory.create( + getClass().getResourceAsStream("/com/android/layoutlib/testdata/layout1.xml"), + "layout1.xml"); + + parser = new BridgeXmlBlockParser(parser, null, false /* platformResourceFlag */); + + assertEquals(XmlPullParser.START_DOCUMENT, parser.next()); + + assertEquals(XmlPullParser.START_TAG, parser.next()); + assertEquals("LinearLayout", parser.getName()); + + assertEquals(XmlPullParser.TEXT, parser.next()); + + assertEquals(XmlPullParser.START_TAG, parser.next()); + assertEquals("Button", parser.getName()); + assertEquals(XmlPullParser.TEXT, parser.next()); + assertEquals(XmlPullParser.END_TAG, parser.next()); + + assertEquals(XmlPullParser.TEXT, parser.next()); + + assertEquals(XmlPullParser.START_TAG, parser.next()); + assertEquals("View", parser.getName()); + assertEquals(XmlPullParser.END_TAG, parser.next()); + + assertEquals(XmlPullParser.TEXT, parser.next()); + + assertEquals(XmlPullParser.START_TAG, parser.next()); + assertEquals("TextView", parser.getName()); + assertEquals(XmlPullParser.END_TAG, parser.next()); + + assertEquals(XmlPullParser.TEXT, parser.next()); + + assertEquals(XmlPullParser.END_TAG, parser.next()); + assertEquals(XmlPullParser.END_DOCUMENT, parser.next()); + } + + //------------ + + /** + * Quick'n'dirty debug helper that dumps an XML structure to stdout. + */ + @SuppressWarnings("unused") + private void dump(Node node, String prefix) { + Node n; + + String[] types = { + "unknown", + "ELEMENT_NODE", + "ATTRIBUTE_NODE", + "TEXT_NODE", + "CDATA_SECTION_NODE", + "ENTITY_REFERENCE_NODE", + "ENTITY_NODE", + "PROCESSING_INSTRUCTION_NODE", + "COMMENT_NODE", + "DOCUMENT_NODE", + "DOCUMENT_TYPE_NODE", + "DOCUMENT_FRAGMENT_NODE", + "NOTATION_NODE" + }; + + String s = String.format("%s<%s> %s %s", + prefix, + types[node.getNodeType()], + node.getNodeName(), + node.getNodeValue() == null ? "" : node.getNodeValue().trim()); + + System.out.println(s); + + n = node.getFirstChild(); + if (n != null) { + dump(n, prefix + "- "); + } + + n = node.getNextSibling(); + if (n != null) { + dump(n, prefix); + } + + } + +} diff --git a/tools/layoutlib/create/.classpath b/tools/layoutlib/create/.classpath new file mode 100644 index 0000000000000..dbc4cfd392a70 --- /dev/null +++ b/tools/layoutlib/create/.classpath @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/tools/layoutlib/create/.project b/tools/layoutlib/create/.project new file mode 100644 index 0000000000000..e100d175ee98f --- /dev/null +++ b/tools/layoutlib/create/.project @@ -0,0 +1,17 @@ + + + layoutlib_create + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/tools/layoutlib/create/.settings/README.txt b/tools/layoutlib/create/.settings/README.txt new file mode 100644 index 0000000000000..9120b20710a3c --- /dev/null +++ b/tools/layoutlib/create/.settings/README.txt @@ -0,0 +1,2 @@ +Copy this in eclipse project as a .settings folder at the root. +This ensure proper compilation compliance and warning/error levels. \ No newline at end of file diff --git a/tools/layoutlib/create/.settings/org.eclipse.jdt.core.prefs b/tools/layoutlib/create/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000000000..5381a0e16c7de --- /dev/null +++ b/tools/layoutlib/create/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,93 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.annotation.nonnull=com.android.annotations.NonNull +org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=com.android.annotations.NonNullByDefault +org.eclipse.jdt.core.compiler.annotation.nonnullisdefault=disabled +org.eclipse.jdt.core.compiler.annotation.nullable=com.android.annotations.Nullable +org.eclipse.jdt.core.compiler.annotation.nullanalysis=enabled +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.6 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.autoboxing=ignore +org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning +org.eclipse.jdt.core.compiler.problem.deadCode=warning +org.eclipse.jdt.core.compiler.problem.deprecation=warning +org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled +org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled +org.eclipse.jdt.core.compiler.problem.discouragedReference=warning +org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore +org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning +org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled +org.eclipse.jdt.core.compiler.problem.fieldHiding=warning +org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning +org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning +org.eclipse.jdt.core.compiler.problem.forbiddenReference=error +org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning +org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=enabled +org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning +org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore +org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore +org.eclipse.jdt.core.compiler.problem.localVariableHiding=warning +org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning +org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning +org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=warning +org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=error +org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled +org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning +org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore +org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning +org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning +org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore +org.eclipse.jdt.core.compiler.problem.nullReference=error +org.eclipse.jdt.core.compiler.problem.nullSpecInsufficientInfo=warning +org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error +org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning +org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore +org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning +org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning +org.eclipse.jdt.core.compiler.problem.potentialNullSpecViolation=error +org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=warning +org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning +org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning +org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore +org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore +org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning +org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore +org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled +org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning +org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled +org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled +org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore +org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning +org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=disabled +org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning +org.eclipse.jdt.core.compiler.problem.unclosedCloseable=error +org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore +org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning +org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore +org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning +org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled +org.eclipse.jdt.core.compiler.problem.unusedImport=warning +org.eclipse.jdt.core.compiler.problem.unusedLabel=warning +org.eclipse.jdt.core.compiler.problem.unusedLocal=warning +org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=warning +org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore +org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled +org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled +org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled +org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning +org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning +org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning +org.eclipse.jdt.core.compiler.source=1.6 diff --git a/tools/layoutlib/create/Android.mk b/tools/layoutlib/create/Android.mk new file mode 100644 index 0000000000000..9bd48ab7fdddd --- /dev/null +++ b/tools/layoutlib/create/Android.mk @@ -0,0 +1,28 @@ +# +# Copyright (C) 2008 The Android Open Source Project +# +# Licensed 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 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +LOCAL_PATH := $(call my-dir) +include $(CLEAR_VARS) + +LOCAL_SRC_FILES := $(call all-java-files-under,src) + +LOCAL_JAR_MANIFEST := manifest.txt +LOCAL_STATIC_JAVA_LIBRARIES := \ + asm-4.0 + +LOCAL_MODULE := layoutlib_create + +include $(BUILD_HOST_JAVA_LIBRARY) + diff --git a/tools/layoutlib/create/README.txt b/tools/layoutlib/create/README.txt new file mode 100644 index 0000000000000..894611b3e728b --- /dev/null +++ b/tools/layoutlib/create/README.txt @@ -0,0 +1,240 @@ +# Copyright (C) 2008 The Android Open Source Project + + +- Description - +--------------- + +Layoutlib_create generates a JAR library used by the Eclipse graphical layout editor +to perform layout. + + +- Usage - +--------- + + ./layoutlib_create path/to/android.jar destination.jar + + +- Design Overview - +------------------- + +Layoutlib_create uses the "android.jar" containing all the Java code used by Android +as generated by the Android build, right before the classes are converted to a DEX format. + +The Android JAR can't be used directly in Eclipse: +- it contains references to native code (which we want to avoid in Eclipse), +- some classes need to be overridden, for example all the drawing code that is + replaced by Java 2D calls in Eclipse. +- some of the classes that need to be changed are final and/or we need access + to their private internal state. + +Consequently this tool: +- parses the input JAR, +- modifies some of the classes directly using some bytecode manipulation, +- filters some packages and removes those we don't want in the output JAR, +- injects some new classes, +- generates a modified JAR file that is suitable for the Android plugin + for Eclipse to perform rendering. + +The ASM library is used to do the bytecode modification using its visitor pattern API. + +The layoutlib_create is *NOT* generic. There is no configuration file. Instead all the +configuration is done in the main() method and the CreateInfo structure is expected to +change with the Android platform as new classes are added, changed or removed. + +The resulting JAR is used by layoutlib_bridge (a.k.a. "the bridge"), also part of the +platform, that provides all the necessary missing implementation for rendering graphics +in Eclipse. + + + +- Implementation Notes - +------------------------ + +The tool works in two phases: +- first analyze the input jar (AsmAnalyzer class) +- then generate the output jar (AsmGenerator class), + + +- Analyzer +---------- + +The goal of the analyzer is to create a graph of all the classes from the input JAR +with their dependencies and then only keep the ones we want. + +To do that, the analyzer is created with a list of base classes to keep -- everything +that derives from these is kept. Currently the one such class is android.view.View: +since we want to render layouts, anything that is sort of a view needs to be kept. + +The analyzer is also given a list of class names to keep in the output. +This is done using shell-like glob patterns that filter on the fully-qualified +class names, for example "android.*.R**" ("*" does not matches dots whilst "**" does, +and "." and "$" are interpreted as-is). +In practice we almost but not quite request the inclusion of full packages. + +With this information, the analyzer parses the input zip to find all the classes. +All classes deriving from the requested bases classes are kept. +All classes which name matched the glob pattern are kept. +The analysis then finds all the dependencies of the classes that are to be kept +using an ASM visitor on the class, the field types, the method types and annotations types. +Classes that belong to the current JRE are excluded. + +The output of the analyzer is a set of ASM ClassReader instances which are then +fed to the generator. + + +- Generator +----------- + +The generator is constructed from a CreateInfo struct that acts as a config file +and lists: +- the classes to inject in the output JAR -- these classes are directly implemented + in layoutlib_create and will be used to interface with the renderer in Eclipse. +- specific methods to override (see method stubs details below). +- specific methods for which to delegate calls. +- specific methods to remove based on their return type. +- specific classes to rename. + +Each of these are specific strategies we use to be able to modify the Android code +to fit within the Eclipse renderer. These strategies are explained beow. + +The core method of the generator is transform(): it takes an input ASM ClassReader +and modifies it to produce a byte array suitable for the final JAR file. + +The first step of the transformation is changing the name of the class in case +we requested the class to be renamed. This uses the RenameClassAdapter to also rename +all inner classes and references in methods and types. Note that other classes are +not transformed and keep referencing the original name. + +The TransformClassAdapter is then used to process the potentially renamed class. +All protected or private classes are market as public. +All classes are made non-final. +Interfaces are left as-is. + +If a method has a return type that must be erased, the whole method is skipped. +Methods are also changed from protected/private to public. +The code of the methods is then kept as-is, except for native methods which are +replaced by a stub. Methods that are to be overridden are also replaced by a stub. + +The transformed class is then fed through the DelegateClassAdapter to implement +method delegates. + +Finally fields are also visited and changed from protected/private to public. + + +- Method stubs +-------------- + +As indicated above, all native and overridden methods are replaced by a stub. +We don't have the code to replace with in layoutlib_create. +Instead the StubMethodAdapter replaces the code of the method by a call to +OverrideMethod.invokeX(). When using the final JAR, the bridge can register +listeners from these overridden method calls based on the method signatures. + +The listeners are currently pretty basic: we only pass the signature of the +method being called, its caller object and a flag indicating whether the +method was native. We do not currently provide the parameters. The listener +can however specify the return value of the overridden method. + +This strategy is now obsolete and replaced by the method delegates. + + +- Strategies +------------ + +We currently have 4 strategies to deal with overriding the rendering code +and make it run in Eclipse. Most of these strategies are implemented hand-in-hand +by the bridge (which runs in Eclipse) and the generator. + + +1- Class Injection + +This is the easiest: we currently inject 4 classes, namely: +- OverrideMethod and its associated MethodListener and MethodAdapter are used + to intercept calls to some specific methods that are stubbed out and change + their return value. +- CreateInfo class, which configured the generator. Not used yet, but could + in theory help us track what the generator changed. + + +2- Overriding methods + +As explained earlier, the creator doesn't have any replacement code for +methods to override. Instead it removes the original code and replaces it +by a call to a specific OveriddeMethod.invokeX(). The bridge then registers +a listener on the method signature and can provide an implementation. + +This strategy is now obsolete and replaced by the method delegates. +See strategy 5 below. + + +3- Renaming classes + +This simply changes the name of a class in its definition, as well as all its +references in internal inner classes and methods. +Calls from other classes are not modified -- they keep referencing the original +class name. This allows the bridge to literally replace an implementation. + +An example will make this easier: android.graphics.Paint is the main drawing +class that we need to replace. To do so, the generator renames Paint to _original_Paint. +Later the bridge provides its own replacement version of Paint which will be used +by the rest of the Android stack. The replacement version of Paint can still use +(either by inheritance or delegation) all the original non-native code of _original_Paint +if it so desires. + +Some of the Android classes are basically wrappers over native objects and since +we don't have the native code in Eclipse, we need to provide a full alternate +implementation. Sub-classing doesn't work as some native methods are static and +we don't control object creation. + +This won't rename/replace the inner static methods of a given class. + + +4- Method erasure based on return type + +This is mostly an implementation detail of the bridge: in the Paint class +mentioned above, some inner static classes are used to pass around +attributes (e.g. FontMetrics, or the Style enum) and all the original implementation +is native. + +In this case we have a strategy that tells the generator that anything returning, for +example, the inner class Paint$Style in the Paint class should be discarded and the +bridge will provide its own implementation. + + +5- Method Delegates + +This strategy is used to override method implementations. +Given a method SomeClass.MethodName(), 1 or 2 methods are generated: +a- A copy of the original method named SomeClass.MethodName_Original(). + The content is the original method as-is from the reader. + This step is omitted if the method is native, since it has no Java implementation. +b- A brand new implementation of SomeClass.MethodName() which calls to a + non-existing static method named SomeClass_Delegate.MethodName(). + The implementation of this 'delegate' method is done in layoutlib_brigde. + +The delegate method is a static method. +If the original method is non-static, the delegate method receives the original 'this' +as its first argument. If the original method is an inner non-static method, it also +receives the inner 'this' as the second argument. + + + +- References - +-------------- + + +The JVM Specification 2nd edition: + http://java.sun.com/docs/books/jvms/second_edition/html/VMSpecTOC.doc.html + +Understanding bytecode: + http://www.ibm.com/developerworks/ibm/library/it-haggar_bytecode/ + +Bytecode opcode list: + http://en.wikipedia.org/wiki/Java_bytecode_instruction_listings + +ASM user guide: + http://download.forge.objectweb.org/asm/asm-guide.pdf + + +-- +end diff --git a/tools/layoutlib/create/manifest.txt b/tools/layoutlib/create/manifest.txt new file mode 100644 index 0000000000000..238e7f90639a4 --- /dev/null +++ b/tools/layoutlib/create/manifest.txt @@ -0,0 +1 @@ +Main-Class: com.android.tools.layoutlib.create.Main diff --git a/tools/layoutlib/create/src/com/android/tools/layoutlib/annotations/LayoutlibDelegate.java b/tools/layoutlib/create/src/com/android/tools/layoutlib/annotations/LayoutlibDelegate.java new file mode 100644 index 0000000000000..9a48ea6d08416 --- /dev/null +++ b/tools/layoutlib/create/src/com/android/tools/layoutlib/annotations/LayoutlibDelegate.java @@ -0,0 +1,27 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.tools.layoutlib.annotations; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +/** + * Denotes a method that has been converted to a delegate by layoutlib_create. + */ +@Retention(RetentionPolicy.RUNTIME) +public @interface LayoutlibDelegate { +} diff --git a/tools/layoutlib/create/src/com/android/tools/layoutlib/annotations/Nullable.java b/tools/layoutlib/create/src/com/android/tools/layoutlib/annotations/Nullable.java new file mode 100644 index 0000000000000..0689c92c6cbca --- /dev/null +++ b/tools/layoutlib/create/src/com/android/tools/layoutlib/annotations/Nullable.java @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.tools.layoutlib.annotations; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +/** + * Denotes a parameter or field can be null. + *

+ * When decorating a method call parameter, this denotes the parameter can + * legitimately be null and the method will gracefully deal with it. Typically used + * on optional parameters. + *

+ * When decorating a method, this denotes the method might legitimately return null. + *

+ * This is a marker annotation and it has no specific attributes. + */ +@Retention(RetentionPolicy.SOURCE) +public @interface Nullable { +} diff --git a/tools/layoutlib/create/src/com/android/tools/layoutlib/annotations/VisibleForTesting.java b/tools/layoutlib/create/src/com/android/tools/layoutlib/annotations/VisibleForTesting.java new file mode 100644 index 0000000000000..e4e016b03cbba --- /dev/null +++ b/tools/layoutlib/create/src/com/android/tools/layoutlib/annotations/VisibleForTesting.java @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.tools.layoutlib.annotations; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +/** + * Denotes that the class, method or field has its visibility relaxed so + * that unit tests can access it. + *

+ * The visibility argument can be used to specific what the original + * visibility should have been if it had not been made public or package-private for testing. + * The default is to consider the element private. + */ +@Retention(RetentionPolicy.SOURCE) +public @interface VisibleForTesting { + /** + * Intended visibility if the element had not been made public or package-private for + * testing. + */ + enum Visibility { + /** The element should be considered protected. */ + PROTECTED, + /** The element should be considered package-private. */ + PACKAGE, + /** The element should be considered private. */ + PRIVATE + } + + /** + * Intended visibility if the element had not been made public or package-private for testing. + * If not specified, one should assume the element originally intended to be private. + */ + Visibility visibility() default Visibility.PRIVATE; +} diff --git a/tools/layoutlib/create/src/com/android/tools/layoutlib/create/AsmAnalyzer.java b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/AsmAnalyzer.java new file mode 100644 index 0000000000000..412695f2661a9 --- /dev/null +++ b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/AsmAnalyzer.java @@ -0,0 +1,845 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.tools.layoutlib.create; + +import org.objectweb.asm.AnnotationVisitor; +import org.objectweb.asm.Attribute; +import org.objectweb.asm.ClassReader; +import org.objectweb.asm.ClassVisitor; +import org.objectweb.asm.FieldVisitor; +import org.objectweb.asm.Label; +import org.objectweb.asm.MethodVisitor; +import org.objectweb.asm.Opcodes; +import org.objectweb.asm.Type; +import org.objectweb.asm.signature.SignatureReader; +import org.objectweb.asm.signature.SignatureVisitor; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Enumeration; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.TreeMap; +import java.util.regex.Pattern; +import java.util.zip.ZipEntry; +import java.util.zip.ZipFile; + +/** + * Analyzes the input JAR using the ASM java bytecode manipulation library + * to list the desired classes and their dependencies. + */ +public class AsmAnalyzer { + + // Note: a bunch of stuff has package-level access for unit tests. Consider it private. + + /** Output logger. */ + private final Log mLog; + /** The input source JAR to parse. */ + private final List mOsSourceJar; + /** The generator to fill with the class list and dependency list. */ + private final AsmGenerator mGen; + /** Keep all classes that derive from these one (these included). */ + private final String[] mDeriveFrom; + /** Glob patterns of classes to keep, e.g. "com.foo.*" */ + private final String[] mIncludeGlobs; + + /** + * Creates a new analyzer. + * + * @param log The log output. + * @param osJarPath The input source JARs to parse. + * @param gen The generator to fill with the class list and dependency list. + * @param deriveFrom Keep all classes that derive from these one (these included). + * @param includeGlobs Glob patterns of classes to keep, e.g. "com.foo.*" + * ("*" does not matches dots whilst "**" does, "." and "$" are interpreted as-is) + */ + public AsmAnalyzer(Log log, List osJarPath, AsmGenerator gen, + String[] deriveFrom, String[] includeGlobs) { + mLog = log; + mGen = gen; + mOsSourceJar = osJarPath != null ? osJarPath : new ArrayList(); + mDeriveFrom = deriveFrom != null ? deriveFrom : new String[0]; + mIncludeGlobs = includeGlobs != null ? includeGlobs : new String[0]; + } + + /** + * Starts the analysis using parameters from the constructor. + * Fills the generator with classes & dependencies found. + */ + public void analyze() throws IOException, LogAbortException { + + AsmAnalyzer visitor = this; + + Map zipClasses = parseZip(mOsSourceJar); + mLog.info("Found %d classes in input JAR%s.", zipClasses.size(), + mOsSourceJar.size() > 1 ? "s" : ""); + + Map found = findIncludes(zipClasses); + Map deps = findDeps(zipClasses, found); + + if (mGen != null) { + mGen.setKeep(found); + mGen.setDeps(deps); + } + } + + /** + * Parses a JAR file and returns a list of all classes founds using a map + * class name => ASM ClassReader. Class names are in the form "android.view.View". + */ + Map parseZip(List jarPathList) throws IOException { + TreeMap classes = new TreeMap(); + + for (String jarPath : jarPathList) { + ZipFile zip = new ZipFile(jarPath); + Enumeration entries = zip.entries(); + ZipEntry entry; + while (entries.hasMoreElements()) { + entry = entries.nextElement(); + if (entry.getName().endsWith(".class")) { + ClassReader cr = new ClassReader(zip.getInputStream(entry)); + String className = classReaderToClassName(cr); + classes.put(className, cr); + } + } + } + + return classes; + } + + /** + * Utility that returns the fully qualified binary class name for a ClassReader. + * E.g. it returns something like android.view.View. + */ + static String classReaderToClassName(ClassReader classReader) { + if (classReader == null) { + return null; + } else { + return classReader.getClassName().replace('/', '.'); + } + } + + /** + * Utility that returns the fully qualified binary class name from a path-like FQCN. + * E.g. it returns android.view.View from android/view/View. + */ + static String internalToBinaryClassName(String className) { + if (className == null) { + return null; + } else { + return className.replace('/', '.'); + } + } + + /** + * Process the "includes" arrays. + *

+ * This updates the in_out_found map. + */ + Map findIncludes(Map zipClasses) + throws LogAbortException { + TreeMap found = new TreeMap(); + + mLog.debug("Find classes to include."); + + for (String s : mIncludeGlobs) { + findGlobs(s, zipClasses, found); + } + for (String s : mDeriveFrom) { + findClassesDerivingFrom(s, zipClasses, found); + } + + return found; + } + + + /** + * Uses ASM to find the class reader for the given FQCN class name. + * If found, insert it in the in_out_found map. + * Returns the class reader object. + */ + ClassReader findClass(String className, Map zipClasses, + Map inOutFound) throws LogAbortException { + ClassReader classReader = zipClasses.get(className); + if (classReader == null) { + throw new LogAbortException("Class %s not found by ASM in %s", + className, mOsSourceJar); + } + + inOutFound.put(className, classReader); + return classReader; + } + + /** + * Insert in the inOutFound map all classes found in zipClasses that match the + * given glob pattern. + *

+ * The glob pattern is not a regexp. It only accepts the "*" keyword to mean + * "anything but a period". The "." and "$" characters match themselves. + * The "**" keyword means everything including ".". + *

+ * Examples: + *

    + *
  • com.foo.* matches all classes in the package com.foo but NOT sub-packages. + *
  • com.foo*.*$Event matches all internal Event classes in a com.foo*.* class. + *
+ */ + void findGlobs(String globPattern, Map zipClasses, + Map inOutFound) throws LogAbortException { + // transforms the glob pattern in a regexp: + // - escape "." with "\." + // - replace "*" by "[^.]*" + // - escape "$" with "\$" + // - add end-of-line match $ + globPattern = globPattern.replaceAll("\\$", "\\\\\\$"); + globPattern = globPattern.replaceAll("\\.", "\\\\."); + // prevent ** from being altered by the next rule, then process the * rule and finally + // the real ** rule (which is now @) + globPattern = globPattern.replaceAll("\\*\\*", "@"); + globPattern = globPattern.replaceAll("\\*", "[^.]*"); + globPattern = globPattern.replaceAll("@", ".*"); + globPattern += "$"; + + Pattern regexp = Pattern.compile(globPattern); + + for (Entry entry : zipClasses.entrySet()) { + String class_name = entry.getKey(); + if (regexp.matcher(class_name).matches()) { + findClass(class_name, zipClasses, inOutFound); + } + } + } + + /** + * Checks all the classes defined in the JarClassName instance and uses BCEL to + * determine if they are derived from the given FQCN super class name. + * Inserts the super class and all the class objects found in the map. + */ + void findClassesDerivingFrom(String super_name, Map zipClasses, + Map inOutFound) throws LogAbortException { + ClassReader super_clazz = findClass(super_name, zipClasses, inOutFound); + + for (Entry entry : zipClasses.entrySet()) { + String className = entry.getKey(); + if (super_name.equals(className)) { + continue; + } + ClassReader classReader = entry.getValue(); + ClassReader parent_cr = classReader; + while (parent_cr != null) { + String parent_name = internalToBinaryClassName(parent_cr.getSuperName()); + if (parent_name == null) { + // not found + break; + } else if (super_name.equals(parent_name)) { + inOutFound.put(className, classReader); + break; + } + parent_cr = zipClasses.get(parent_name); + } + } + } + + /** + * Instantiates a new DependencyVisitor. Useful for unit tests. + */ + DependencyVisitor getVisitor(Map zipClasses, + Map inKeep, + Map outKeep, + Map inDeps, + Map outDeps) { + return new DependencyVisitor(zipClasses, inKeep, outKeep, inDeps, outDeps); + } + + /** + * Finds all dependencies for all classes in keepClasses which are also + * listed in zipClasses. Returns a map of all the dependencies found. + */ + Map findDeps(Map zipClasses, + Map inOutKeepClasses) { + + TreeMap deps = new TreeMap(); + TreeMap new_deps = new TreeMap(); + TreeMap new_keep = new TreeMap(); + TreeMap temp = new TreeMap(); + + DependencyVisitor visitor = getVisitor(zipClasses, + inOutKeepClasses, new_keep, + deps, new_deps); + + for (ClassReader cr : inOutKeepClasses.values()) { + cr.accept(visitor, 0 /* flags */); + } + + while (new_deps.size() > 0 || new_keep.size() > 0) { + deps.putAll(new_deps); + inOutKeepClasses.putAll(new_keep); + + temp.clear(); + temp.putAll(new_deps); + temp.putAll(new_keep); + new_deps.clear(); + new_keep.clear(); + mLog.debug("Found %1$d to keep, %2$d dependencies.", + inOutKeepClasses.size(), deps.size()); + + for (ClassReader cr : temp.values()) { + cr.accept(visitor, 0 /* flags */); + } + } + + mLog.info("Found %1$d classes to keep, %2$d class dependencies.", + inOutKeepClasses.size(), deps.size()); + + return deps; + } + + + + // ---------------------------------- + + /** + * Visitor to collect all the type dependencies from a class. + */ + public class DependencyVisitor extends ClassVisitor { + + /** All classes found in the source JAR. */ + private final Map mZipClasses; + /** Classes from which dependencies are to be found. */ + private final Map mInKeep; + /** Dependencies already known. */ + private final Map mInDeps; + /** New dependencies found by this visitor. */ + private final Map mOutDeps; + /** New classes to keep as-is found by this visitor. */ + private final Map mOutKeep; + + /** + * Creates a new visitor that will find all the dependencies for the visited class. + * Types which are already in the zipClasses, keepClasses or inDeps are not marked. + * New dependencies are marked in outDeps. + * + * @param zipClasses All classes found in the source JAR. + * @param inKeep Classes from which dependencies are to be found. + * @param inDeps Dependencies already known. + * @param outDeps New dependencies found by this visitor. + */ + public DependencyVisitor(Map zipClasses, + Map inKeep, + Map outKeep, + Map inDeps, + Map outDeps) { + super(Opcodes.ASM4); + mZipClasses = zipClasses; + mInKeep = inKeep; + mOutKeep = outKeep; + mInDeps = inDeps; + mOutDeps = outDeps; + } + + /** + * Considers the given class name as a dependency. + * If it does, add to the mOutDeps map. + */ + public void considerName(String className) { + if (className == null) { + return; + } + + className = internalToBinaryClassName(className); + + // exclude classes that have already been found + if (mInKeep.containsKey(className) || + mOutKeep.containsKey(className) || + mInDeps.containsKey(className) || + mOutDeps.containsKey(className)) { + return; + } + + // exclude classes that are not part of the JAR file being examined + ClassReader cr = mZipClasses.get(className); + if (cr == null) { + return; + } + + try { + // exclude classes that are part of the default JRE (the one executing this program) + if (getClass().getClassLoader().loadClass(className) != null) { + return; + } + } catch (ClassNotFoundException e) { + // ignore + } + + // accept this class: + // - android classes are added to dependencies + // - non-android classes are added to the list of classes to keep as-is (they don't need + // to be stubbed). + if (className.indexOf("android") >= 0) { // TODO make configurable + mOutDeps.put(className, cr); + } else { + mOutKeep.put(className, cr); + } + } + + /** + * Considers this array of names using considerName(). + */ + public void considerNames(String[] classNames) { + if (classNames != null) { + for (String className : classNames) { + considerName(className); + } + } + } + + /** + * Considers this signature or type signature by invoking the {@link SignatureVisitor} + * on it. + */ + public void considerSignature(String signature) { + if (signature != null) { + SignatureReader sr = new SignatureReader(signature); + // SignatureReader.accept will call accessType so we don't really have + // to differentiate where the signature comes from. + sr.accept(new MySignatureVisitor()); + } + } + + /** + * Considers this {@link Type}. For arrays, the element type is considered. + * If the type is an object, it's internal name is considered. + */ + public void considerType(Type t) { + if (t != null) { + if (t.getSort() == Type.ARRAY) { + t = t.getElementType(); + } + if (t.getSort() == Type.OBJECT) { + considerName(t.getInternalName()); + } + } + } + + /** + * Considers a descriptor string. The descriptor is converted to a {@link Type} + * and then considerType() is invoked. + */ + public void considerDesc(String desc) { + if (desc != null) { + try { + Type t = Type.getType(desc); + considerType(t); + } catch (ArrayIndexOutOfBoundsException e) { + // ignore, not a valid type. + } + } + } + + + // --------------------------------------------------- + // --- ClassVisitor, FieldVisitor + // --------------------------------------------------- + + // Visits a class header + @Override + public void visit(int version, int access, String name, + String signature, String superName, String[] interfaces) { + // signature is the signature of this class. May be null if the class is not a generic + // one, and does not extend or implement generic classes or interfaces. + + if (signature != null) { + considerSignature(signature); + } + + // superName is the internal of name of the super class (see getInternalName). + // For interfaces, the super class is Object. May be null but only for the Object class. + considerName(superName); + + // interfaces is the internal names of the class's interfaces (see getInternalName). + // May be null. + considerNames(interfaces); + } + + + @Override + public AnnotationVisitor visitAnnotation(String desc, boolean visible) { + // desc is the class descriptor of the annotation class. + considerDesc(desc); + return new MyAnnotationVisitor(); + } + + @Override + public void visitAttribute(Attribute attr) { + // pass + } + + // Visits the end of a class + @Override + public void visitEnd() { + // pass + } + + private class MyFieldVisitor extends FieldVisitor { + + public MyFieldVisitor() { + super(Opcodes.ASM4); + } + + @Override + public AnnotationVisitor visitAnnotation(String desc, boolean visible) { + // desc is the class descriptor of the annotation class. + considerDesc(desc); + return new MyAnnotationVisitor(); + } + + @Override + public void visitAttribute(Attribute attr) { + // pass + } + + // Visits the end of a class + @Override + public void visitEnd() { + // pass + } + } + + @Override + public FieldVisitor visitField(int access, String name, String desc, + String signature, Object value) { + // desc is the field's descriptor (see Type). + considerDesc(desc); + + // signature is the field's signature. May be null if the field's type does not use + // generic types. + considerSignature(signature); + + return new MyFieldVisitor(); + } + + @Override + public void visitInnerClass(String name, String outerName, String innerName, int access) { + // name is the internal name of an inner class (see getInternalName). + considerName(name); + } + + @Override + public MethodVisitor visitMethod(int access, String name, String desc, + String signature, String[] exceptions) { + // desc is the method's descriptor (see Type). + considerDesc(desc); + // signature is the method's signature. May be null if the method parameters, return + // type and exceptions do not use generic types. + considerSignature(signature); + + return new MyMethodVisitor(); + } + + @Override + public void visitOuterClass(String owner, String name, String desc) { + // pass + } + + @Override + public void visitSource(String source, String debug) { + // pass + } + + + // --------------------------------------------------- + // --- MethodVisitor + // --------------------------------------------------- + + private class MyMethodVisitor extends MethodVisitor { + + public MyMethodVisitor() { + super(Opcodes.ASM4); + } + + + @Override + public AnnotationVisitor visitAnnotationDefault() { + return new MyAnnotationVisitor(); + } + + @Override + public void visitCode() { + // pass + } + + // field instruction + @Override + public void visitFieldInsn(int opcode, String owner, String name, String desc) { + // name is the field's name. + considerName(name); + // desc is the field's descriptor (see Type). + considerDesc(desc); + } + + @Override + public void visitFrame(int type, int local, Object[] local2, int stack, Object[] stack2) { + // pass + } + + @Override + public void visitIincInsn(int var, int increment) { + // pass -- an IINC instruction + } + + @Override + public void visitInsn(int opcode) { + // pass -- a zero operand instruction + } + + @Override + public void visitIntInsn(int opcode, int operand) { + // pass -- a single int operand instruction + } + + @Override + public void visitJumpInsn(int opcode, Label label) { + // pass -- a jump instruction + } + + @Override + public void visitLabel(Label label) { + // pass -- a label target + } + + // instruction to load a constant from the stack + @Override + public void visitLdcInsn(Object cst) { + if (cst instanceof Type) { + considerType((Type) cst); + } + } + + @Override + public void visitLineNumber(int line, Label start) { + // pass + } + + @Override + public void visitLocalVariable(String name, String desc, + String signature, Label start, Label end, int index) { + // desc is the type descriptor of this local variable. + considerDesc(desc); + // signature is the type signature of this local variable. May be null if the local + // variable type does not use generic types. + considerSignature(signature); + } + + @Override + public void visitLookupSwitchInsn(Label dflt, int[] keys, Label[] labels) { + // pass -- a lookup switch instruction + } + + @Override + public void visitMaxs(int maxStack, int maxLocals) { + // pass + } + + // instruction that invokes a method + @Override + public void visitMethodInsn(int opcode, String owner, String name, String desc) { + + // owner is the internal name of the method's owner class + considerName(owner); + // desc is the method's descriptor (see Type). + considerDesc(desc); + } + + // instruction multianewarray, whatever that is + @Override + public void visitMultiANewArrayInsn(String desc, int dims) { + + // desc an array type descriptor. + considerDesc(desc); + } + + @Override + public AnnotationVisitor visitParameterAnnotation(int parameter, String desc, + boolean visible) { + // desc is the class descriptor of the annotation class. + considerDesc(desc); + return new MyAnnotationVisitor(); + } + + @Override + public void visitTableSwitchInsn(int min, int max, Label dflt, Label[] labels) { + // pass -- table switch instruction + + } + + @Override + public void visitTryCatchBlock(Label start, Label end, Label handler, String type) { + // type is the internal name of the type of exceptions handled by the handler, + // or null to catch any exceptions (for "finally" blocks). + considerName(type); + } + + // type instruction + @Override + public void visitTypeInsn(int opcode, String type) { + // type is the operand of the instruction to be visited. This operand must be the + // internal name of an object or array class. + considerName(type); + } + + @Override + public void visitVarInsn(int opcode, int var) { + // pass -- local variable instruction + } + } + + private class MySignatureVisitor extends SignatureVisitor { + + public MySignatureVisitor() { + super(Opcodes.ASM4); + } + + // --------------------------------------------------- + // --- SignatureVisitor + // --------------------------------------------------- + + private String mCurrentSignatureClass = null; + + // Starts the visit of a signature corresponding to a class or interface type + @Override + public void visitClassType(String name) { + mCurrentSignatureClass = name; + considerName(name); + } + + // Visits an inner class + @Override + public void visitInnerClassType(String name) { + if (mCurrentSignatureClass != null) { + mCurrentSignatureClass += "$" + name; + considerName(mCurrentSignatureClass); + } + } + + @Override + public SignatureVisitor visitArrayType() { + return new MySignatureVisitor(); + } + + @Override + public void visitBaseType(char descriptor) { + // pass -- a primitive type, ignored + } + + @Override + public SignatureVisitor visitClassBound() { + return new MySignatureVisitor(); + } + + @Override + public SignatureVisitor visitExceptionType() { + return new MySignatureVisitor(); + } + + @Override + public void visitFormalTypeParameter(String name) { + // pass + } + + @Override + public SignatureVisitor visitInterface() { + return new MySignatureVisitor(); + } + + @Override + public SignatureVisitor visitInterfaceBound() { + return new MySignatureVisitor(); + } + + @Override + public SignatureVisitor visitParameterType() { + return new MySignatureVisitor(); + } + + @Override + public SignatureVisitor visitReturnType() { + return new MySignatureVisitor(); + } + + @Override + public SignatureVisitor visitSuperclass() { + return new MySignatureVisitor(); + } + + @Override + public SignatureVisitor visitTypeArgument(char wildcard) { + return new MySignatureVisitor(); + } + + @Override + public void visitTypeVariable(String name) { + // pass + } + + @Override + public void visitTypeArgument() { + // pass + } + } + + + // --------------------------------------------------- + // --- AnnotationVisitor + // --------------------------------------------------- + + private class MyAnnotationVisitor extends AnnotationVisitor { + + public MyAnnotationVisitor() { + super(Opcodes.ASM4); + } + + // Visits a primitive value of an annotation + @Override + public void visit(String name, Object value) { + // value is the actual value, whose type must be Byte, Boolean, Character, Short, + // Integer, Long, Float, Double, String or Type + if (value instanceof Type) { + considerType((Type) value); + } + } + + @Override + public AnnotationVisitor visitAnnotation(String name, String desc) { + // desc is the class descriptor of the nested annotation class. + considerDesc(desc); + return new MyAnnotationVisitor(); + } + + @Override + public AnnotationVisitor visitArray(String name) { + return new MyAnnotationVisitor(); + } + + @Override + public void visitEnum(String name, String desc, String value) { + // desc is the class descriptor of the enumeration class. + considerDesc(desc); + } + } + } +} diff --git a/tools/layoutlib/create/src/com/android/tools/layoutlib/create/AsmGenerator.java b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/AsmGenerator.java new file mode 100644 index 0000000000000..a9ede265b5d81 --- /dev/null +++ b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/AsmGenerator.java @@ -0,0 +1,370 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.tools.layoutlib.create; + +import org.objectweb.asm.ClassReader; +import org.objectweb.asm.ClassVisitor; +import org.objectweb.asm.ClassWriter; + +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.Arrays; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; +import java.util.TreeMap; +import java.util.jar.JarEntry; +import java.util.jar.JarOutputStream; + +/** + * Class that generates a new JAR from a list of classes, some of which are to be kept as-is + * and some of which are to be stubbed partially or totally. + */ +public class AsmGenerator { + + /** Output logger. */ + private final Log mLog; + /** The path of the destination JAR to create. */ + private final String mOsDestJar; + /** List of classes to inject in the final JAR from _this_ archive. */ + private final Class[] mInjectClasses; + /** The set of methods to stub out. */ + private final Set mStubMethods; + /** All classes to output as-is, except if they have native methods. */ + private Map mKeep; + /** All dependencies that must be completely stubbed. */ + private Map mDeps; + /** Counter of number of classes renamed during transform. */ + private int mRenameCount; + /** FQCN Names of the classes to rename: map old-FQCN => new-FQCN */ + private final HashMap mRenameClasses; + /** FQCN Names of "old" classes that were NOT renamed. This starts with the full list of + * old-FQCN to rename and they get erased as they get renamed. At the end, classes still + * left here are not in the code base anymore and thus were not renamed. */ + private HashSet mClassesNotRenamed; + /** A map { FQCN => set { list of return types to delete from the FQCN } }. */ + private HashMap> mDeleteReturns; + /** A map { FQCN => set { method names } } of methods to rewrite as delegates. + * The special name {@link DelegateClassAdapter#ALL_NATIVES} can be used as in internal set. */ + private final HashMap> mDelegateMethods; + + /** + * Creates a new generator that can generate the output JAR with the stubbed classes. + * + * @param log Output logger. + * @param osDestJar The path of the destination JAR to create. + * @param createInfo Creation parameters. Must not be null. + */ + public AsmGenerator(Log log, String osDestJar, ICreateInfo createInfo) { + mLog = log; + mOsDestJar = osDestJar; + mInjectClasses = createInfo.getInjectedClasses(); + mStubMethods = new HashSet(Arrays.asList(createInfo.getOverriddenMethods())); + + // Create the map/set of methods to change to delegates + mDelegateMethods = new HashMap>(); + for (String signature : createInfo.getDelegateMethods()) { + int pos = signature.indexOf('#'); + if (pos <= 0 || pos >= signature.length() - 1) { + continue; + } + String className = binaryToInternalClassName(signature.substring(0, pos)); + String methodName = signature.substring(pos + 1); + Set methods = mDelegateMethods.get(className); + if (methods == null) { + methods = new HashSet(); + mDelegateMethods.put(className, methods); + } + methods.add(methodName); + } + for (String className : createInfo.getDelegateClassNatives()) { + className = binaryToInternalClassName(className); + Set methods = mDelegateMethods.get(className); + if (methods == null) { + methods = new HashSet(); + mDelegateMethods.put(className, methods); + } + methods.add(DelegateClassAdapter.ALL_NATIVES); + } + + // Create the map of classes to rename. + mRenameClasses = new HashMap(); + mClassesNotRenamed = new HashSet(); + String[] renameClasses = createInfo.getRenamedClasses(); + int n = renameClasses.length; + for (int i = 0; i < n; i += 2) { + assert i + 1 < n; + // The ASM class names uses "/" separators, whereas regular FQCN use "." + String oldFqcn = binaryToInternalClassName(renameClasses[i]); + String newFqcn = binaryToInternalClassName(renameClasses[i + 1]); + mRenameClasses.put(oldFqcn, newFqcn); + mClassesNotRenamed.add(oldFqcn); + } + + // create the map of renamed class -> return type of method to delete. + mDeleteReturns = new HashMap>(); + String[] deleteReturns = createInfo.getDeleteReturns(); + Set returnTypes = null; + String renamedClass = null; + for (String className : deleteReturns) { + // if we reach the end of a section, add it to the main map + if (className == null) { + if (returnTypes != null) { + mDeleteReturns.put(renamedClass, returnTypes); + } + + renamedClass = null; + continue; + } + + // if the renamed class is null, this is the beginning of a section + if (renamedClass == null) { + renamedClass = binaryToInternalClassName(className); + continue; + } + + // just a standard return type, we add it to the list. + if (returnTypes == null) { + returnTypes = new HashSet(); + } + returnTypes.add(binaryToInternalClassName(className)); + } + } + + /** + * Returns the list of classes that have not been renamed yet. + *

+ * The names are "internal class names" rather than FQCN, i.e. they use "/" instead "." + * as package separators. + */ + public Set getClassesNotRenamed() { + return mClassesNotRenamed; + } + + /** + * Utility that returns the internal ASM class name from a fully qualified binary class + * name. E.g. it returns android/view/View from android.view.View. + */ + String binaryToInternalClassName(String className) { + if (className == null) { + return null; + } else { + return className.replace('.', '/'); + } + } + + /** Sets the map of classes to output as-is, except if they have native methods */ + public void setKeep(Map keep) { + mKeep = keep; + } + + /** Sets the map of dependencies that must be completely stubbed */ + public void setDeps(Map deps) { + mDeps = deps; + } + + /** Gets the map of classes to output as-is, except if they have native methods */ + public Map getKeep() { + return mKeep; + } + + /** Gets the map of dependencies that must be completely stubbed */ + public Map getDeps() { + return mDeps; + } + + /** Generates the final JAR */ + public void generate() throws FileNotFoundException, IOException { + TreeMap all = new TreeMap(); + + for (Class clazz : mInjectClasses) { + String name = classToEntryPath(clazz); + InputStream is = ClassLoader.getSystemResourceAsStream(name); + ClassReader cr = new ClassReader(is); + byte[] b = transform(cr, true /* stubNativesOnly */); + name = classNameToEntryPath(transformName(cr.getClassName())); + all.put(name, b); + } + + for (Entry entry : mDeps.entrySet()) { + ClassReader cr = entry.getValue(); + byte[] b = transform(cr, true /* stubNativesOnly */); + String name = classNameToEntryPath(transformName(cr.getClassName())); + all.put(name, b); + } + + for (Entry entry : mKeep.entrySet()) { + ClassReader cr = entry.getValue(); + byte[] b = transform(cr, true /* stubNativesOnly */); + String name = classNameToEntryPath(transformName(cr.getClassName())); + all.put(name, b); + } + + mLog.info("# deps classes: %d", mDeps.size()); + mLog.info("# keep classes: %d", mKeep.size()); + mLog.info("# renamed : %d", mRenameCount); + + createJar(new FileOutputStream(mOsDestJar), all); + mLog.info("Created JAR file %s", mOsDestJar); + } + + /** + * Writes the JAR file. + * + * @param outStream The file output stream were to write the JAR. + * @param all The map of all classes to output. + * @throws IOException if an I/O error has occurred + */ + void createJar(FileOutputStream outStream, Map all) throws IOException { + JarOutputStream jar = new JarOutputStream(outStream); + for (Entry entry : all.entrySet()) { + String name = entry.getKey(); + JarEntry jar_entry = new JarEntry(name); + jar.putNextEntry(jar_entry); + jar.write(entry.getValue()); + jar.closeEntry(); + } + jar.flush(); + jar.close(); + } + + /** + * Utility method that converts a fully qualified java name into a JAR entry path + * e.g. for the input "android.view.View" it returns "android/view/View.class" + */ + String classNameToEntryPath(String className) { + return className.replaceAll("\\.", "/").concat(".class"); + } + + /** + * Utility method to get the JAR entry path from a Class name. + * e.g. it returns someting like "com/foo/OuterClass$InnerClass1$InnerClass2.class" + */ + private String classToEntryPath(Class clazz) { + String name = ""; + Class parent; + while ((parent = clazz.getEnclosingClass()) != null) { + name = "$" + clazz.getSimpleName() + name; + clazz = parent; + } + return classNameToEntryPath(clazz.getCanonicalName() + name); + } + + /** + * Transforms a class. + *

+ * There are 3 kind of transformations: + * + * 1- For "mock" dependencies classes, we want to remove all code from methods and replace + * by a stub. Native methods must be implemented with this stub too. Abstract methods are + * left intact. Modified classes must be overridable (non-private, non-final). + * Native methods must be made non-final, non-private. + * + * 2- For "keep" classes, we want to rewrite all native methods as indicated above. + * If a class has native methods, it must also be made non-private, non-final. + * + * Note that unfortunately static methods cannot be changed to non-static (since static and + * non-static are invoked differently.) + */ + byte[] transform(ClassReader cr, boolean stubNativesOnly) { + + boolean hasNativeMethods = hasNativeMethods(cr); + + // Get the class name, as an internal name (e.g. com/android/SomeClass$InnerClass) + String className = cr.getClassName(); + + String newName = transformName(className); + // transformName returns its input argument if there's no need to rename the class + if (newName != className) { + mRenameCount++; + // This class is being renamed, so remove it from the list of classes not renamed. + mClassesNotRenamed.remove(className); + } + + mLog.debug("Transform %s%s%s%s", className, + newName == className ? "" : " (renamed to " + newName + ")", + hasNativeMethods ? " -- has natives" : "", + stubNativesOnly ? " -- stub natives only" : ""); + + // Rewrite the new class from scratch, without reusing the constant pool from the + // original class reader. + ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS); + + ClassVisitor rv = cw; + if (newName != className) { + rv = new RenameClassAdapter(cw, className, newName); + } + + ClassVisitor cv = new TransformClassAdapter(mLog, mStubMethods, + mDeleteReturns.get(className), + newName, rv, + stubNativesOnly, stubNativesOnly || hasNativeMethods); + + Set delegateMethods = mDelegateMethods.get(className); + if (delegateMethods != null && !delegateMethods.isEmpty()) { + // If delegateMethods only contains one entry ALL_NATIVES and the class is + // known to have no native methods, just skip this step. + if (hasNativeMethods || + !(delegateMethods.size() == 1 && + delegateMethods.contains(DelegateClassAdapter.ALL_NATIVES))) { + cv = new DelegateClassAdapter(mLog, cv, className, delegateMethods); + } + } + + cr.accept(cv, 0 /* flags */); + return cw.toByteArray(); + } + + /** + * Should this class be renamed, this returns the new name. Otherwise it returns the + * original name. + * + * @param className The internal ASM name of the class that may have to be renamed + * @return A new transformed name or the original input argument. + */ + String transformName(String className) { + String newName = mRenameClasses.get(className); + if (newName != null) { + return newName; + } + int pos = className.indexOf('$'); + if (pos > 0) { + // Is this an inner class of a renamed class? + String base = className.substring(0, pos); + newName = mRenameClasses.get(base); + if (newName != null) { + return newName + className.substring(pos); + } + } + + return className; + } + + /** + * Returns true if a class has any native methods. + */ + boolean hasNativeMethods(ClassReader cr) { + ClassHasNativeVisitor cv = new ClassHasNativeVisitor(); + cr.accept(cv, 0 /* flags */); + return cv.hasNativeMethods(); + } + +} diff --git a/tools/layoutlib/create/src/com/android/tools/layoutlib/create/ClassHasNativeVisitor.java b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/ClassHasNativeVisitor.java new file mode 100644 index 0000000000000..2c955fd9d9bb2 --- /dev/null +++ b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/ClassHasNativeVisitor.java @@ -0,0 +1,102 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.tools.layoutlib.create; + +import com.android.tools.layoutlib.annotations.VisibleForTesting; +import com.android.tools.layoutlib.annotations.VisibleForTesting.Visibility; + +import org.objectweb.asm.AnnotationVisitor; +import org.objectweb.asm.Attribute; +import org.objectweb.asm.ClassVisitor; +import org.objectweb.asm.FieldVisitor; +import org.objectweb.asm.MethodVisitor; +import org.objectweb.asm.Opcodes; + +/** + * Indicates if a class contains any native methods. + */ +public class ClassHasNativeVisitor extends ClassVisitor { + public ClassHasNativeVisitor() { + super(Opcodes.ASM4); + } + + private boolean mHasNativeMethods = false; + + public boolean hasNativeMethods() { + return mHasNativeMethods; + } + + @VisibleForTesting(visibility=Visibility.PRIVATE) + protected void setHasNativeMethods(boolean hasNativeMethods, String methodName) { + mHasNativeMethods = hasNativeMethods; + } + + @Override + public void visit(int version, int access, String name, String signature, + String superName, String[] interfaces) { + // pass + } + + @Override + public AnnotationVisitor visitAnnotation(String desc, boolean visible) { + // pass + return null; + } + + @Override + public void visitAttribute(Attribute attr) { + // pass + } + + @Override + public void visitEnd() { + // pass + } + + @Override + public FieldVisitor visitField(int access, String name, String desc, + String signature, Object value) { + // pass + return null; + } + + @Override + public void visitInnerClass(String name, String outerName, + String innerName, int access) { + // pass + } + + @Override + public MethodVisitor visitMethod(int access, String name, String desc, + String signature, String[] exceptions) { + if ((access & Opcodes.ACC_NATIVE) != 0) { + setHasNativeMethods(true, name); + } + return null; + } + + @Override + public void visitOuterClass(String owner, String name, String desc) { + // pass + } + + @Override + public void visitSource(String source, String debug) { + // pass + } + +} diff --git a/tools/layoutlib/create/src/com/android/tools/layoutlib/create/CreateInfo.java b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/CreateInfo.java new file mode 100644 index 0000000000000..d9550404d48af --- /dev/null +++ b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/CreateInfo.java @@ -0,0 +1,207 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.tools.layoutlib.create; + +import com.android.tools.layoutlib.annotations.LayoutlibDelegate; + +/** + * Describes the work to be done by {@link AsmGenerator}. + */ +public final class CreateInfo implements ICreateInfo { + + /** + * Returns the list of class from layoutlib_create to inject in layoutlib. + * The list can be empty but must not be null. + */ + @Override + public Class[] getInjectedClasses() { + return INJECTED_CLASSES; + } + + /** + * Returns the list of methods to rewrite as delegates. + * The list can be empty but must not be null. + */ + @Override + public String[] getDelegateMethods() { + return DELEGATE_METHODS; + } + + /** + * Returns the list of classes on which to delegate all native methods. + * The list can be empty but must not be null. + */ + @Override + public String[] getDelegateClassNatives() { + return DELEGATE_CLASS_NATIVES; + } + + /** + * Returns The list of methods to stub out. Each entry must be in the form + * "package.package.OuterClass$InnerClass#MethodName". + * The list can be empty but must not be null. + *

+ * This usage is deprecated. Please use method 'delegates' instead. + */ + @Override + public String[] getOverriddenMethods() { + return OVERRIDDEN_METHODS; + } + + /** + * Returns the list of classes to rename, must be an even list: the binary FQCN + * of class to replace followed by the new FQCN. + * The list can be empty but must not be null. + */ + @Override + public String[] getRenamedClasses() { + return RENAMED_CLASSES; + } + + /** + * Returns the list of classes for which the methods returning them should be deleted. + * The array contains a list of null terminated section starting with the name of the class + * to rename in which the methods are deleted, followed by a list of return types identifying + * the methods to delete. + * The list can be empty but must not be null. + */ + @Override + public String[] getDeleteReturns() { + return DELETE_RETURNS; + } + + //----- + + /** + * The list of class from layoutlib_create to inject in layoutlib. + */ + private final static Class[] INJECTED_CLASSES = new Class[] { + OverrideMethod.class, + MethodListener.class, + MethodAdapter.class, + ICreateInfo.class, + CreateInfo.class, + LayoutlibDelegate.class + }; + + /** + * The list of methods to rewrite as delegates. + */ + public final static String[] DELEGATE_METHODS = new String[] { + "android.app.Fragment#instantiate", //(Landroid/content/Context;Ljava/lang/String;Landroid/os/Bundle;)Landroid/app/Fragment;", + "android.content.res.Resources$Theme#obtainStyledAttributes", + "android.content.res.Resources$Theme#resolveAttribute", + "android.content.res.TypedArray#getValueAt", + "android.graphics.BitmapFactory#finishDecode", + "android.os.Handler#sendMessageAtTime", + "android.os.HandlerThread#run", + "android.os.Build#getString", + "android.text.format.DateFormat#is24HourFormat", + "android.view.Choreographer#getRefreshRate", + "android.view.Display#updateDisplayInfoLocked", + "android.view.LayoutInflater#rInflate", + "android.view.LayoutInflater#parseInclude", + "android.view.View#isInEditMode", + "android.view.ViewRootImpl#isInTouchMode", + "android.view.WindowManagerGlobal#getWindowManagerService", + "android.view.inputmethod.InputMethodManager#getInstance", + "com.android.internal.util.XmlUtils#convertValueToInt", + "com.android.internal.textservice.ITextServicesManager$Stub#asInterface", + }; + + /** + * The list of classes on which to delegate all native methods. + */ + public final static String[] DELEGATE_CLASS_NATIVES = new String[] { + "android.animation.PropertyValuesHolder", + "android.graphics.AvoidXfermode", + "android.graphics.Bitmap", + "android.graphics.BitmapFactory", + "android.graphics.BitmapShader", + "android.graphics.BlurMaskFilter", + "android.graphics.Canvas", + "android.graphics.ColorFilter", + "android.graphics.ColorMatrixColorFilter", + "android.graphics.ComposePathEffect", + "android.graphics.ComposeShader", + "android.graphics.CornerPathEffect", + "android.graphics.DashPathEffect", + "android.graphics.DiscretePathEffect", + "android.graphics.DrawFilter", + "android.graphics.EmbossMaskFilter", + "android.graphics.LayerRasterizer", + "android.graphics.LightingColorFilter", + "android.graphics.LinearGradient", + "android.graphics.MaskFilter", + "android.graphics.Matrix", + "android.graphics.NinePatch", + "android.graphics.Paint", + "android.graphics.PaintFlagsDrawFilter", + "android.graphics.Path", + "android.graphics.PathDashPathEffect", + "android.graphics.PathEffect", + "android.graphics.PixelXorXfermode", + "android.graphics.PorterDuffColorFilter", + "android.graphics.PorterDuffXfermode", + "android.graphics.RadialGradient", + "android.graphics.Rasterizer", + "android.graphics.Region", + "android.graphics.Shader", + "android.graphics.SumPathEffect", + "android.graphics.SweepGradient", + "android.graphics.Typeface", + "android.graphics.Xfermode", + "android.os.SystemClock", + "android.text.AndroidBidi", + "android.util.FloatMath", + "android.view.Display", + "libcore.icu.ICU", + }; + + /** + * The list of methods to stub out. Each entry must be in the form + * "package.package.OuterClass$InnerClass#MethodName". + * This usage is deprecated. Please use method 'delegates' instead. + */ + private final static String[] OVERRIDDEN_METHODS = new String[] { + }; + + /** + * The list of classes to rename, must be an even list: the binary FQCN + * of class to replace followed by the new FQCN. + */ + private final static String[] RENAMED_CLASSES = + new String[] { + "android.os.ServiceManager", "android.os._Original_ServiceManager", + "android.util.LruCache", "android.util._Original_LruCache", + "android.view.SurfaceView", "android.view._Original_SurfaceView", + "android.view.accessibility.AccessibilityManager", "android.view.accessibility._Original_AccessibilityManager", + "android.webkit.WebView", "android.webkit._Original_WebView", + "com.android.internal.policy.PolicyManager", "com.android.internal.policy._Original_PolicyManager", + }; + + /** + * List of classes for which the methods returning them should be deleted. + * The array contains a list of null terminated section starting with the name of the class + * to rename in which the methods are deleted, followed by a list of return types identifying + * the methods to delete. + */ + private final static String[] DELETE_RETURNS = + new String[] { + null }; // separator, for next class/methods list. +} + diff --git a/tools/layoutlib/create/src/com/android/tools/layoutlib/create/DelegateClassAdapter.java b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/DelegateClassAdapter.java new file mode 100644 index 0000000000000..927be972fadf5 --- /dev/null +++ b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/DelegateClassAdapter.java @@ -0,0 +1,133 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.tools.layoutlib.create; + +import org.objectweb.asm.ClassVisitor; +import org.objectweb.asm.MethodVisitor; +import org.objectweb.asm.Opcodes; + +import java.util.Set; + +/** + * A {@link DelegateClassAdapter} can transform some methods from a class into + * delegates that defer the call to an associated delegate class. + *

+ * This is used to override specific methods and or all native methods in classes. + */ +public class DelegateClassAdapter extends ClassVisitor { + + /** Suffix added to original methods. */ + private static final String ORIGINAL_SUFFIX = "_Original"; + private static String CONSTRUCTOR = ""; + private static String CLASS_INIT = ""; + + public final static String ALL_NATIVES = "<>"; + + private final String mClassName; + private final Set mDelegateMethods; + private final Log mLog; + + /** + * Creates a new {@link DelegateClassAdapter} that can transform some methods + * from a class into delegates that defer the call to an associated delegate class. + *

+ * This is used to override specific methods and or all native methods in classes. + * + * @param log The logger object. Must not be null. + * @param cv the class visitor to which this adapter must delegate calls. + * @param className The internal class name of the class to visit, + * e.g. com/android/SomeClass$InnerClass. + * @param delegateMethods The set of method names to modify and/or the + * special constant {@link #ALL_NATIVES} to convert all native methods. + */ + public DelegateClassAdapter(Log log, + ClassVisitor cv, + String className, + Set delegateMethods) { + super(Opcodes.ASM4, cv); + mLog = log; + mClassName = className; + mDelegateMethods = delegateMethods; + } + + //---------------------------------- + // Methods from the ClassAdapter + + @Override + public MethodVisitor visitMethod(int access, String name, String desc, + String signature, String[] exceptions) { + + boolean isStatic = (access & Opcodes.ACC_STATIC) != 0; + boolean isNative = (access & Opcodes.ACC_NATIVE) != 0; + + boolean useDelegate = (isNative && mDelegateMethods.contains(ALL_NATIVES)) || + mDelegateMethods.contains(name); + + if (!useDelegate) { + // Not creating a delegate for this method, pass it as-is from the reader + // to the writer. + return super.visitMethod(access, name, desc, signature, exceptions); + } + + if (useDelegate) { + if (CONSTRUCTOR.equals(name) || CLASS_INIT.equals(name)) { + // We don't currently support generating delegates for constructors. + throw new UnsupportedOperationException( + String.format( + "Delegate doesn't support overriding constructor %1$s:%2$s(%3$s)", //$NON-NLS-1$ + mClassName, name, desc)); + } + } + + if (isNative) { + // Remove native flag + access = access & ~Opcodes.ACC_NATIVE; + MethodVisitor mwDelegate = super.visitMethod(access, name, desc, signature, exceptions); + + DelegateMethodAdapter2 a = new DelegateMethodAdapter2( + mLog, null /*mwOriginal*/, mwDelegate, mClassName, name, desc, isStatic); + + // A native has no code to visit, so we need to generate it directly. + a.generateDelegateCode(); + + return mwDelegate; + } + + // Given a non-native SomeClass.MethodName(), we want to generate 2 methods: + // - A copy of the original method named SomeClass.MethodName_Original(). + // The content is the original method as-is from the reader. + // - A brand new implementation of SomeClass.MethodName() which calls to a + // non-existing method named SomeClass_Delegate.MethodName(). + // The implementation of this 'delegate' method is done in layoutlib_brigde. + + int accessDelegate = access; + // change access to public for the original one + if (Main.sOptions.generatePublicAccess) { + access &= ~(Opcodes.ACC_PROTECTED | Opcodes.ACC_PRIVATE); + access |= Opcodes.ACC_PUBLIC; + } + + MethodVisitor mwOriginal = super.visitMethod(access, name + ORIGINAL_SUFFIX, + desc, signature, exceptions); + MethodVisitor mwDelegate = super.visitMethod(accessDelegate, name, + desc, signature, exceptions); + + DelegateMethodAdapter2 a = new DelegateMethodAdapter2( + mLog, mwOriginal, mwDelegate, mClassName, name, desc, isStatic); + return a; + } +} diff --git a/tools/layoutlib/create/src/com/android/tools/layoutlib/create/DelegateMethodAdapter2.java b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/DelegateMethodAdapter2.java new file mode 100644 index 0000000000000..0000b22ab57af --- /dev/null +++ b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/DelegateMethodAdapter2.java @@ -0,0 +1,461 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.tools.layoutlib.create; + +import com.android.tools.layoutlib.annotations.LayoutlibDelegate; + +import org.objectweb.asm.AnnotationVisitor; +import org.objectweb.asm.Attribute; +import org.objectweb.asm.ClassReader; +import org.objectweb.asm.ClassVisitor; +import org.objectweb.asm.Label; +import org.objectweb.asm.MethodVisitor; +import org.objectweb.asm.Opcodes; +import org.objectweb.asm.Type; + +import java.util.ArrayList; + +/** + * This method adapter generates delegate methods. + *

+ * Given a method {@code SomeClass.MethodName()}, this generates 1 or 2 methods: + *

    + *
  • A copy of the original method named {@code SomeClass.MethodName_Original()}. + * The content is the original method as-is from the reader. + * This step is omitted if the method is native, since it has no Java implementation. + *
  • A brand new implementation of {@code SomeClass.MethodName()} which calls to a + * non-existing method named {@code SomeClass_Delegate.MethodName()}. + * The implementation of this 'delegate' method is done in layoutlib_brigde. + *
+ * A method visitor is generally constructed to generate a single method; however + * here we might want to generate one or two depending on the context. To achieve + * that, the visitor here generates the 'original' method and acts as a no-op if + * no such method exists (e.g. when the original is a native method). + * The delegate method is generated after the {@code visitEnd} of the original method + * or by having the class adapter directly call {@link #generateDelegateCode()} + * for native methods. + *

+ * When generating the 'delegate', the implementation generates a call to a class + * class named <className>_Delegate with static methods matching + * the methods to be overridden here. The methods have the same return type. + * The argument type list is the same except the "this" reference is passed first + * for non-static methods. + *

+ * A new annotation is added to these 'delegate' methods so that we can easily find them + * for automated testing. + *

+ * This class isn't intended to be generic or reusable. + * It is called by {@link DelegateClassAdapter}, which takes care of properly initializing + * the two method writers for the original and the delegate class, as needed, with their + * expected names. + *

+ * The class adapter also takes care of calling {@link #generateDelegateCode()} directly for + * a native and use the visitor pattern for non-natives. + * Note that native methods have, by definition, no code so there's nothing a visitor + * can visit. + *

+ * Instances of this class are not re-usable. + * The class adapter creates a new instance for each method. + */ +class DelegateMethodAdapter2 extends MethodVisitor { + + /** Suffix added to delegate classes. */ + public static final String DELEGATE_SUFFIX = "_Delegate"; + + /** The parent method writer to copy of the original method. + * Null when dealing with a native original method. */ + private MethodVisitor mOrgWriter; + /** The parent method writer to generate the delegating method. Never null. */ + private MethodVisitor mDelWriter; + /** The original method descriptor (return type + argument types.) */ + private String mDesc; + /** True if the original method is static. */ + private final boolean mIsStatic; + /** The internal class name (e.g. com/android/SomeClass$InnerClass.) */ + private final String mClassName; + /** The method name. */ + private final String mMethodName; + /** Logger object. */ + private final Log mLog; + + /** Array used to capture the first line number information from the original method + * and duplicate it in the delegate. */ + private Object[] mDelegateLineNumber; + + /** + * Creates a new {@link DelegateMethodAdapter2} that will transform this method + * into a delegate call. + *

+ * See {@link DelegateMethodAdapter2} for more details. + * + * @param log The logger object. Must not be null. + * @param mvOriginal The parent method writer to copy of the original method. + * Must be {@code null} when dealing with a native original method. + * @param mvDelegate The parent method writer to generate the delegating method. + * Must never be null. + * @param className The internal class name of the class to visit, + * e.g. com/android/SomeClass$InnerClass. + * @param methodName The simple name of the method. + * @param desc A method descriptor (c.f. {@link Type#getReturnType(String)} + + * {@link Type#getArgumentTypes(String)}) + * @param isStatic True if the method is declared static. + */ + public DelegateMethodAdapter2(Log log, + MethodVisitor mvOriginal, + MethodVisitor mvDelegate, + String className, + String methodName, + String desc, + boolean isStatic) { + super(Opcodes.ASM4); + mLog = log; + mOrgWriter = mvOriginal; + mDelWriter = mvDelegate; + mClassName = className; + mMethodName = methodName; + mDesc = desc; + mIsStatic = isStatic; + } + + /** + * Generates the new code for the method. + *

+ * For native methods, this must be invoked directly by {@link DelegateClassAdapter} + * (since they have no code to visit). + *

+ * Otherwise for non-native methods the {@link DelegateClassAdapter} simply needs to + * return this instance of {@link DelegateMethodAdapter2} and let the normal visitor pattern + * invoke it as part of the {@link ClassReader#accept(ClassVisitor, int)} workflow and then + * this method will be invoked from {@link MethodVisitor#visitEnd()}. + */ + public void generateDelegateCode() { + /* + * The goal is to generate a call to a static delegate method. + * If this method is non-static, the first parameter will be 'this'. + * All the parameters must be passed and then the eventual return type returned. + * + * Example, let's say we have a method such as + * public void myMethod(int a, Object b, ArrayList c) { ... } + * + * We'll want to create a body that calls a delegate method like this: + * TheClass_Delegate.myMethod(this, a, b, c); + * + * If the method is non-static and the class name is an inner class (e.g. has $ in its + * last segment), we want to push the 'this' of the outer class first: + * OuterClass_InnerClass_Delegate.myMethod( + * OuterClass.this, + * OuterClass$InnerClass.this, + * a, b, c); + * + * Only one level of inner class is supported right now, for simplicity and because + * we don't need more. + * + * The generated class name is the current class name with "_Delegate" appended to it. + * One thing to realize is that we don't care about generics -- since generic types + * are erased at build time, they have no influence on the method name being called. + */ + + // Add our annotation + AnnotationVisitor aw = mDelWriter.visitAnnotation( + Type.getObjectType(Type.getInternalName(LayoutlibDelegate.class)).toString(), + true); // visible at runtime + if (aw != null) { + aw.visitEnd(); + } + + mDelWriter.visitCode(); + + if (mDelegateLineNumber != null) { + Object[] p = mDelegateLineNumber; + mDelWriter.visitLineNumber((Integer) p[0], (Label) p[1]); + } + + ArrayList paramTypes = new ArrayList(); + String delegateClassName = mClassName + DELEGATE_SUFFIX; + boolean pushedArg0 = false; + int maxStack = 0; + + // Check if the last segment of the class name has inner an class. + // Right now we only support one level of inner classes. + Type outerType = null; + int slash = mClassName.lastIndexOf('/'); + int dol = mClassName.lastIndexOf('$'); + if (dol != -1 && dol > slash && dol == mClassName.indexOf('$')) { + String outerClass = mClassName.substring(0, dol); + outerType = Type.getObjectType(outerClass); + + // Change a delegate class name to "com/foo/Outer_Inner_Delegate" + delegateClassName = delegateClassName.replace('$', '_'); + } + + // For an instance method (e.g. non-static), push the 'this' preceded + // by the 'this' of any outer class, if any. + if (!mIsStatic) { + + if (outerType != null) { + // The first-level inner class has a package-protected member called 'this$0' + // that points to the outer class. + + // Push this.getField("this$0") on the call stack. + mDelWriter.visitVarInsn(Opcodes.ALOAD, 0); // var 0 = this + mDelWriter.visitFieldInsn(Opcodes.GETFIELD, + mClassName, // class where the field is defined + "this$0", // field name + outerType.getDescriptor()); // type of the field + maxStack++; + paramTypes.add(outerType); + + } + + // Push "this" for the instance method, which is always ALOAD 0 + mDelWriter.visitVarInsn(Opcodes.ALOAD, 0); + maxStack++; + pushedArg0 = true; + paramTypes.add(Type.getObjectType(mClassName)); + } + + // Push all other arguments. Start at arg 1 if we already pushed 'this' above. + Type[] argTypes = Type.getArgumentTypes(mDesc); + int maxLocals = pushedArg0 ? 1 : 0; + for (Type t : argTypes) { + int size = t.getSize(); + mDelWriter.visitVarInsn(t.getOpcode(Opcodes.ILOAD), maxLocals); + maxLocals += size; + maxStack += size; + paramTypes.add(t); + } + + // Construct the descriptor of the delegate based on the parameters + // we pushed on the call stack. The return type remains unchanged. + String desc = Type.getMethodDescriptor( + Type.getReturnType(mDesc), + paramTypes.toArray(new Type[paramTypes.size()])); + + // Invoke the static delegate + mDelWriter.visitMethodInsn(Opcodes.INVOKESTATIC, + delegateClassName, + mMethodName, + desc); + + Type returnType = Type.getReturnType(mDesc); + mDelWriter.visitInsn(returnType.getOpcode(Opcodes.IRETURN)); + + mDelWriter.visitMaxs(maxStack, maxLocals); + mDelWriter.visitEnd(); + + // For debugging now. Maybe we should collect these and store them in + // a text file for helping create the delegates. We could also compare + // the text file to a golden and break the build on unsupported changes + // or regressions. Even better we could fancy-print something that looks + // like the expected Java method declaration. + mLog.debug("Delegate: %1$s # %2$s %3$s", delegateClassName, mMethodName, desc); + } + + /* Pass down to visitor writer. In this implementation, either do nothing. */ + @Override + public void visitCode() { + if (mOrgWriter != null) { + mOrgWriter.visitCode(); + } + } + + /* + * visitMaxs is called just before visitEnd if there was any code to rewrite. + */ + @Override + public void visitMaxs(int maxStack, int maxLocals) { + if (mOrgWriter != null) { + mOrgWriter.visitMaxs(maxStack, maxLocals); + } + } + + /** End of visiting. Generate the delegating code. */ + @Override + public void visitEnd() { + if (mOrgWriter != null) { + mOrgWriter.visitEnd(); + } + generateDelegateCode(); + } + + /* Writes all annotation from the original method. */ + @Override + public AnnotationVisitor visitAnnotation(String desc, boolean visible) { + if (mOrgWriter != null) { + return mOrgWriter.visitAnnotation(desc, visible); + } else { + return null; + } + } + + /* Writes all annotation default values from the original method. */ + @Override + public AnnotationVisitor visitAnnotationDefault() { + if (mOrgWriter != null) { + return mOrgWriter.visitAnnotationDefault(); + } else { + return null; + } + } + + @Override + public AnnotationVisitor visitParameterAnnotation(int parameter, String desc, + boolean visible) { + if (mOrgWriter != null) { + return mOrgWriter.visitParameterAnnotation(parameter, desc, visible); + } else { + return null; + } + } + + /* Writes all attributes from the original method. */ + @Override + public void visitAttribute(Attribute attr) { + if (mOrgWriter != null) { + mOrgWriter.visitAttribute(attr); + } + } + + /* + * Only writes the first line number present in the original code so that source + * viewers can direct to the correct method, even if the content doesn't match. + */ + @Override + public void visitLineNumber(int line, Label start) { + // Capture the first line values for the new delegate method + if (mDelegateLineNumber == null) { + mDelegateLineNumber = new Object[] { line, start }; + } + if (mOrgWriter != null) { + mOrgWriter.visitLineNumber(line, start); + } + } + + @Override + public void visitInsn(int opcode) { + if (mOrgWriter != null) { + mOrgWriter.visitInsn(opcode); + } + } + + @Override + public void visitLabel(Label label) { + if (mOrgWriter != null) { + mOrgWriter.visitLabel(label); + } + } + + @Override + public void visitTryCatchBlock(Label start, Label end, Label handler, String type) { + if (mOrgWriter != null) { + mOrgWriter.visitTryCatchBlock(start, end, handler, type); + } + } + + @Override + public void visitMethodInsn(int opcode, String owner, String name, String desc) { + if (mOrgWriter != null) { + mOrgWriter.visitMethodInsn(opcode, owner, name, desc); + } + } + + @Override + public void visitFieldInsn(int opcode, String owner, String name, String desc) { + if (mOrgWriter != null) { + mOrgWriter.visitFieldInsn(opcode, owner, name, desc); + } + } + + @Override + public void visitFrame(int type, int nLocal, Object[] local, int nStack, Object[] stack) { + if (mOrgWriter != null) { + mOrgWriter.visitFrame(type, nLocal, local, nStack, stack); + } + } + + @Override + public void visitIincInsn(int var, int increment) { + if (mOrgWriter != null) { + mOrgWriter.visitIincInsn(var, increment); + } + } + + @Override + public void visitIntInsn(int opcode, int operand) { + if (mOrgWriter != null) { + mOrgWriter.visitIntInsn(opcode, operand); + } + } + + @Override + public void visitJumpInsn(int opcode, Label label) { + if (mOrgWriter != null) { + mOrgWriter.visitJumpInsn(opcode, label); + } + } + + @Override + public void visitLdcInsn(Object cst) { + if (mOrgWriter != null) { + mOrgWriter.visitLdcInsn(cst); + } + } + + @Override + public void visitLocalVariable(String name, String desc, String signature, + Label start, Label end, int index) { + if (mOrgWriter != null) { + mOrgWriter.visitLocalVariable(name, desc, signature, start, end, index); + } + } + + @Override + public void visitLookupSwitchInsn(Label dflt, int[] keys, Label[] labels) { + if (mOrgWriter != null) { + mOrgWriter.visitLookupSwitchInsn(dflt, keys, labels); + } + } + + @Override + public void visitMultiANewArrayInsn(String desc, int dims) { + if (mOrgWriter != null) { + mOrgWriter.visitMultiANewArrayInsn(desc, dims); + } + } + + @Override + public void visitTableSwitchInsn(int min, int max, Label dflt, Label[] labels) { + if (mOrgWriter != null) { + mOrgWriter.visitTableSwitchInsn(min, max, dflt, labels); + } + } + + @Override + public void visitTypeInsn(int opcode, String type) { + if (mOrgWriter != null) { + mOrgWriter.visitTypeInsn(opcode, type); + } + } + + @Override + public void visitVarInsn(int opcode, int var) { + if (mOrgWriter != null) { + mOrgWriter.visitVarInsn(opcode, var); + } + } + +} diff --git a/tools/layoutlib/create/src/com/android/tools/layoutlib/create/DependencyFinder.java b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/DependencyFinder.java new file mode 100644 index 0000000000000..c988c7099cb8e --- /dev/null +++ b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/DependencyFinder.java @@ -0,0 +1,787 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.tools.layoutlib.create; + +import com.android.tools.layoutlib.annotations.VisibleForTesting; +import com.android.tools.layoutlib.annotations.VisibleForTesting.Visibility; + +import org.objectweb.asm.AnnotationVisitor; +import org.objectweb.asm.Attribute; +import org.objectweb.asm.ClassReader; +import org.objectweb.asm.ClassVisitor; +import org.objectweb.asm.FieldVisitor; +import org.objectweb.asm.Label; +import org.objectweb.asm.MethodVisitor; +import org.objectweb.asm.Opcodes; +import org.objectweb.asm.Type; +import org.objectweb.asm.signature.SignatureReader; +import org.objectweb.asm.signature.SignatureVisitor; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Enumeration; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; +import java.util.TreeMap; +import java.util.TreeSet; +import java.util.zip.ZipEntry; +import java.util.zip.ZipFile; + +/** + * Analyzes the input JAR using the ASM java bytecode manipulation library + * to list the classes and their dependencies. A "dependency" is a class + * used by another class. + */ +public class DependencyFinder { + + // Note: a bunch of stuff has package-level access for unit tests. Consider it private. + + /** Output logger. */ + private final Log mLog; + + /** + * Creates a new analyzer. + * + * @param log The log output. + */ + public DependencyFinder(Log log) { + mLog = log; + } + + /** + * Starts the analysis using parameters from the constructor. + * + * @param osJarPath The input source JARs to parse. + * @return A pair: [0]: map { class FQCN => set of FQCN class dependencies }. + * [1]: map { missing class FQCN => set of FQCN class that uses it. } + */ + public List>> findDeps(List osJarPath) throws IOException { + + Map zipClasses = parseZip(osJarPath); + mLog.info("Found %d classes in input JAR%s.", + zipClasses.size(), + osJarPath.size() > 1 ? "s" : ""); + + Map> deps = findClassesDeps(zipClasses); + + Map> missing = findMissingClasses(deps, zipClasses.keySet()); + + List>> result = new ArrayList>>(2); + result.add(deps); + result.add(missing); + return result; + } + + /** + * Prints dependencies to the current logger, found stuff and missing stuff. + */ + public void printAllDeps(List>> result) { + assert result.size() == 2; + Map> deps = result.get(0); + Map> missing = result.get(1); + + // Print all dependences found in the format: + // +Found: + // uses: FQCN + + mLog.info("++++++ %d Entries found in source JARs", deps.size()); + mLog.info(""); + + for (Entry> entry : deps.entrySet()) { + mLog.info( "+Found : %s", entry.getKey()); + for (String dep : entry.getValue()) { + mLog.info(" uses: %s", dep); + } + + mLog.info(""); + } + + + // Now print all missing dependences in the format: + // -Missing : + // used by: + + mLog.info(""); + mLog.info("------ %d Entries missing from source JARs", missing.size()); + mLog.info(""); + + for (Entry> entry : missing.entrySet()) { + mLog.info( "-Missing : %s", entry.getKey()); + for (String dep : entry.getValue()) { + mLog.info(" used by: %s", dep); + } + + mLog.info(""); + } + } + + /** + * Prints only a summary of the missing dependencies to the current logger. + */ + public void printMissingDeps(List>> result) { + assert result.size() == 2; + @SuppressWarnings("unused") Map> deps = result.get(0); + Map> missing = result.get(1); + + for (String fqcn : missing.keySet()) { + mLog.info("%s", fqcn); + } + } + + // ---------------- + + /** + * Parses a JAR file and returns a list of all classes founds using a map + * class name => ASM ClassReader. Class names are in the form "android.view.View". + */ + Map parseZip(List jarPathList) throws IOException { + TreeMap classes = new TreeMap(); + + for (String jarPath : jarPathList) { + ZipFile zip = new ZipFile(jarPath); + Enumeration entries = zip.entries(); + ZipEntry entry; + while (entries.hasMoreElements()) { + entry = entries.nextElement(); + if (entry.getName().endsWith(".class")) { + ClassReader cr = new ClassReader(zip.getInputStream(entry)); + String className = classReaderToClassName(cr); + classes.put(className, cr); + } + } + } + + return classes; + } + + /** + * Utility that returns the fully qualified binary class name for a ClassReader. + * E.g. it returns something like android.view.View. + */ + static String classReaderToClassName(ClassReader classReader) { + if (classReader == null) { + return null; + } else { + return classReader.getClassName().replace('/', '.'); + } + } + + /** + * Utility that returns the fully qualified binary class name from a path-like FQCN. + * E.g. it returns android.view.View from android/view/View. + */ + static String internalToBinaryClassName(String className) { + if (className == null) { + return null; + } else { + return className.replace('/', '.'); + } + } + + /** + * Finds all dependencies for all classes in keepClasses which are also + * listed in zipClasses. Returns a map of all the dependencies found. + */ + Map> findClassesDeps(Map zipClasses) { + + // The dependencies that we'll collect. + // It's a map Class name => uses class names. + Map> dependencyMap = new TreeMap>(); + + DependencyVisitor visitor = getVisitor(); + + int count = 0; + try { + for (Entry entry : zipClasses.entrySet()) { + String name = entry.getKey(); + + TreeSet set = new TreeSet(); + dependencyMap.put(name, set); + visitor.setDependencySet(set); + + ClassReader cr = entry.getValue(); + cr.accept(visitor, 0 /* flags */); + + visitor.setDependencySet(null); + + mLog.debugNoln("Visited %d classes\r", ++count); + } + } finally { + mLog.debugNoln("\n"); + } + + return dependencyMap; + } + + /** + * Computes which classes FQCN were found as dependencies that are NOT listed + * in the original JAR classes. + * + * @param deps The map { FQCN => dependencies[] } returned by {@link #findClassesDeps(Map)}. + * @param zipClasses The set of all classes FQCN found in the JAR files. + * @return A map { FQCN not found in the zipClasses => classes using it } + */ + private Map> findMissingClasses( + Map> deps, + Set zipClasses) { + Map> missing = new TreeMap>(); + + for (Entry> entry : deps.entrySet()) { + String name = entry.getKey(); + + for (String dep : entry.getValue()) { + if (!zipClasses.contains(dep)) { + // This dependency doesn't exist in the zip classes. + Set set = missing.get(dep); + if (set == null) { + set = new TreeSet(); + missing.put(dep, set); + } + set.add(name); + } + } + + } + + return missing; + } + + + // ---------------------------------- + + /** + * Instantiates a new DependencyVisitor. Useful for unit tests. + */ + @VisibleForTesting(visibility=Visibility.PRIVATE) + DependencyVisitor getVisitor() { + return new DependencyVisitor(); + } + + /** + * Visitor to collect all the type dependencies from a class. + */ + public class DependencyVisitor extends ClassVisitor { + + private Set mCurrentDepSet; + + /** + * Creates a new visitor that will find all the dependencies for the visited class. + */ + public DependencyVisitor() { + super(Opcodes.ASM4); + } + + /** + * Sets the {@link Set} where to record direct dependencies for this class. + * This will change before each {@link ClassReader#accept(ClassVisitor, int)} call. + */ + public void setDependencySet(Set set) { + mCurrentDepSet = set; + } + + /** + * Considers the given class name as a dependency. + */ + public void considerName(String className) { + if (className == null) { + return; + } + + className = internalToBinaryClassName(className); + + try { + // exclude classes that are part of the default JRE (the one executing this program) + if (getClass().getClassLoader().loadClass(className) != null) { + return; + } + } catch (ClassNotFoundException e) { + // ignore + } + + // Add it to the dependency set for the currently visited class, as needed. + assert mCurrentDepSet != null; + if (mCurrentDepSet != null) { + mCurrentDepSet.add(className); + } + } + + /** + * Considers this array of names using considerName(). + */ + public void considerNames(String[] classNames) { + if (classNames != null) { + for (String className : classNames) { + considerName(className); + } + } + } + + /** + * Considers this signature or type signature by invoking the {@link SignatureVisitor} + * on it. + */ + public void considerSignature(String signature) { + if (signature != null) { + SignatureReader sr = new SignatureReader(signature); + // SignatureReader.accept will call accessType so we don't really have + // to differentiate where the signature comes from. + sr.accept(new MySignatureVisitor()); + } + } + + /** + * Considers this {@link Type}. For arrays, the element type is considered. + * If the type is an object, it's internal name is considered. + */ + public void considerType(Type t) { + if (t != null) { + if (t.getSort() == Type.ARRAY) { + t = t.getElementType(); + } + if (t.getSort() == Type.OBJECT) { + considerName(t.getInternalName()); + } + } + } + + /** + * Considers a descriptor string. The descriptor is converted to a {@link Type} + * and then considerType() is invoked. + */ + public boolean considerDesc(String desc) { + if (desc != null) { + try { + if (desc.length() > 0 && desc.charAt(0) == '(') { + // This is a method descriptor with arguments and a return type. + Type t = Type.getReturnType(desc); + considerType(t); + + for (Type arg : Type.getArgumentTypes(desc)) { + considerType(arg); + } + + } else { + Type t = Type.getType(desc); + considerType(t); + } + return true; + } catch (ArrayIndexOutOfBoundsException e) { + // ignore, not a valid type. + } + } + return false; + } + + + // --------------------------------------------------- + // --- ClassVisitor, FieldVisitor + // --------------------------------------------------- + + // Visits a class header + @Override + public void visit(int version, int access, String name, + String signature, String superName, String[] interfaces) { + // signature is the signature of this class. May be null if the class is not a generic + // one, and does not extend or implement generic classes or interfaces. + + if (signature != null) { + considerSignature(signature); + } + + // superName is the internal of name of the super class (see getInternalName). + // For interfaces, the super class is Object. May be null but only for the Object class. + considerName(superName); + + // interfaces is the internal names of the class's interfaces (see getInternalName). + // May be null. + considerNames(interfaces); + } + + + @Override + public AnnotationVisitor visitAnnotation(String desc, boolean visible) { + // desc is the class descriptor of the annotation class. + considerDesc(desc); + return new MyAnnotationVisitor(); + } + + @Override + public void visitAttribute(Attribute attr) { + // pass + } + + // Visits the end of a class + @Override + public void visitEnd() { + // pass + } + + private class MyFieldVisitor extends FieldVisitor { + + public MyFieldVisitor() { + super(Opcodes.ASM4); + } + + @Override + public AnnotationVisitor visitAnnotation(String desc, boolean visible) { + // desc is the class descriptor of the annotation class. + considerDesc(desc); + return new MyAnnotationVisitor(); + } + + @Override + public void visitAttribute(Attribute attr) { + // pass + } + + // Visits the end of a class + @Override + public void visitEnd() { + // pass + } + } + + @Override + public FieldVisitor visitField(int access, String name, String desc, + String signature, Object value) { + // desc is the field's descriptor (see Type). + considerDesc(desc); + + // signature is the field's signature. May be null if the field's type does not use + // generic types. + considerSignature(signature); + + return new MyFieldVisitor(); + } + + @Override + public void visitInnerClass(String name, String outerName, String innerName, int access) { + // name is the internal name of an inner class (see getInternalName). + // Note: outerName/innerName seems to be null when we're reading the + // _Original_ClassName classes generated by layoutlib_create. + if (outerName != null) { + considerName(name); + } + } + + @Override + public MethodVisitor visitMethod(int access, String name, String desc, + String signature, String[] exceptions) { + // desc is the method's descriptor (see Type). + considerDesc(desc); + // signature is the method's signature. May be null if the method parameters, return + // type and exceptions do not use generic types. + considerSignature(signature); + + return new MyMethodVisitor(); + } + + @Override + public void visitOuterClass(String owner, String name, String desc) { + // pass + } + + @Override + public void visitSource(String source, String debug) { + // pass + } + + + // --------------------------------------------------- + // --- MethodVisitor + // --------------------------------------------------- + + private class MyMethodVisitor extends MethodVisitor { + + public MyMethodVisitor() { + super(Opcodes.ASM4); + } + + + @Override + public AnnotationVisitor visitAnnotationDefault() { + return new MyAnnotationVisitor(); + } + + @Override + public void visitCode() { + // pass + } + + // field instruction + @Override + public void visitFieldInsn(int opcode, String owner, String name, String desc) { + // name is the field's name. + // desc is the field's descriptor (see Type). + considerDesc(desc); + } + + @Override + public void visitFrame(int type, int local, Object[] local2, int stack, Object[] stack2) { + // pass + } + + @Override + public void visitIincInsn(int var, int increment) { + // pass -- an IINC instruction + } + + @Override + public void visitInsn(int opcode) { + // pass -- a zero operand instruction + } + + @Override + public void visitIntInsn(int opcode, int operand) { + // pass -- a single int operand instruction + } + + @Override + public void visitJumpInsn(int opcode, Label label) { + // pass -- a jump instruction + } + + @Override + public void visitLabel(Label label) { + // pass -- a label target + } + + // instruction to load a constant from the stack + @Override + public void visitLdcInsn(Object cst) { + if (cst instanceof Type) { + considerType((Type) cst); + } + } + + @Override + public void visitLineNumber(int line, Label start) { + // pass + } + + @Override + public void visitLocalVariable(String name, String desc, + String signature, Label start, Label end, int index) { + // desc is the type descriptor of this local variable. + considerDesc(desc); + // signature is the type signature of this local variable. May be null if the local + // variable type does not use generic types. + considerSignature(signature); + } + + @Override + public void visitLookupSwitchInsn(Label dflt, int[] keys, Label[] labels) { + // pass -- a lookup switch instruction + } + + @Override + public void visitMaxs(int maxStack, int maxLocals) { + // pass + } + + // instruction that invokes a method + @Override + public void visitMethodInsn(int opcode, String owner, String name, String desc) { + + // owner is the internal name of the method's owner class + if (!considerDesc(owner) && owner.indexOf('/') != -1) { + considerName(owner); + } + // desc is the method's descriptor (see Type). + considerDesc(desc); + } + + // instruction multianewarray, whatever that is + @Override + public void visitMultiANewArrayInsn(String desc, int dims) { + + // desc an array type descriptor. + considerDesc(desc); + } + + @Override + public AnnotationVisitor visitParameterAnnotation(int parameter, String desc, + boolean visible) { + // desc is the class descriptor of the annotation class. + considerDesc(desc); + return new MyAnnotationVisitor(); + } + + @Override + public void visitTableSwitchInsn(int min, int max, Label dflt, Label[] labels) { + // pass -- table switch instruction + + } + + @Override + public void visitTryCatchBlock(Label start, Label end, Label handler, String type) { + // type is the internal name of the type of exceptions handled by the handler, + // or null to catch any exceptions (for "finally" blocks). + considerName(type); + } + + // type instruction + @Override + public void visitTypeInsn(int opcode, String type) { + // type is the operand of the instruction to be visited. This operand must be the + // internal name of an object or array class. + considerName(type); + } + + @Override + public void visitVarInsn(int opcode, int var) { + // pass -- local variable instruction + } + } + + private class MySignatureVisitor extends SignatureVisitor { + + public MySignatureVisitor() { + super(Opcodes.ASM4); + } + + // --------------------------------------------------- + // --- SignatureVisitor + // --------------------------------------------------- + + private String mCurrentSignatureClass = null; + + // Starts the visit of a signature corresponding to a class or interface type + @Override + public void visitClassType(String name) { + mCurrentSignatureClass = name; + considerName(name); + } + + // Visits an inner class + @Override + public void visitInnerClassType(String name) { + if (mCurrentSignatureClass != null) { + mCurrentSignatureClass += "$" + name; + considerName(mCurrentSignatureClass); + } + } + + @Override + public SignatureVisitor visitArrayType() { + return new MySignatureVisitor(); + } + + @Override + public void visitBaseType(char descriptor) { + // pass -- a primitive type, ignored + } + + @Override + public SignatureVisitor visitClassBound() { + return new MySignatureVisitor(); + } + + @Override + public SignatureVisitor visitExceptionType() { + return new MySignatureVisitor(); + } + + @Override + public void visitFormalTypeParameter(String name) { + // pass + } + + @Override + public SignatureVisitor visitInterface() { + return new MySignatureVisitor(); + } + + @Override + public SignatureVisitor visitInterfaceBound() { + return new MySignatureVisitor(); + } + + @Override + public SignatureVisitor visitParameterType() { + return new MySignatureVisitor(); + } + + @Override + public SignatureVisitor visitReturnType() { + return new MySignatureVisitor(); + } + + @Override + public SignatureVisitor visitSuperclass() { + return new MySignatureVisitor(); + } + + @Override + public SignatureVisitor visitTypeArgument(char wildcard) { + return new MySignatureVisitor(); + } + + @Override + public void visitTypeVariable(String name) { + // pass + } + + @Override + public void visitTypeArgument() { + // pass + } + } + + + // --------------------------------------------------- + // --- AnnotationVisitor + // --------------------------------------------------- + + private class MyAnnotationVisitor extends AnnotationVisitor { + + public MyAnnotationVisitor() { + super(Opcodes.ASM4); + } + + // Visits a primitive value of an annotation + @Override + public void visit(String name, Object value) { + // value is the actual value, whose type must be Byte, Boolean, Character, Short, + // Integer, Long, Float, Double, String or Type + if (value instanceof Type) { + considerType((Type) value); + } + } + + @Override + public AnnotationVisitor visitAnnotation(String name, String desc) { + // desc is the class descriptor of the nested annotation class. + considerDesc(desc); + return new MyAnnotationVisitor(); + } + + @Override + public AnnotationVisitor visitArray(String name) { + return new MyAnnotationVisitor(); + } + + @Override + public void visitEnum(String name, String desc, String value) { + // desc is the class descriptor of the enumeration class. + considerDesc(desc); + } + } + } +} diff --git a/tools/layoutlib/create/src/com/android/tools/layoutlib/create/ICreateInfo.java b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/ICreateInfo.java new file mode 100644 index 0000000000000..40c1706d9ed01 --- /dev/null +++ b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/ICreateInfo.java @@ -0,0 +1,65 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.tools.layoutlib.create; + +/** + * Interface describing the work to be done by {@link AsmGenerator}. + */ +public interface ICreateInfo { + + /** + * Returns the list of class from layoutlib_create to inject in layoutlib. + * The list can be empty but must not be null. + */ + public abstract Class[] getInjectedClasses(); + + /** + * Returns the list of methods to rewrite as delegates. + * The list can be empty but must not be null. + */ + public abstract String[] getDelegateMethods(); + + /** + * Returns the list of classes on which to delegate all native methods. + * The list can be empty but must not be null. + */ + public abstract String[] getDelegateClassNatives(); + + /** + * Returns The list of methods to stub out. Each entry must be in the form + * "package.package.OuterClass$InnerClass#MethodName". + * The list can be empty but must not be null. + */ + public abstract String[] getOverriddenMethods(); + + /** + * Returns the list of classes to rename, must be an even list: the binary FQCN + * of class to replace followed by the new FQCN. + * The list can be empty but must not be null. + */ + public abstract String[] getRenamedClasses(); + + /** + * Returns the list of classes for which the methods returning them should be deleted. + * The array contains a list of null terminated section starting with the name of the class + * to rename in which the methods are deleted, followed by a list of return types identifying + * the methods to delete. + * The list can be empty but must not be null. + */ + public abstract String[] getDeleteReturns(); + +} diff --git a/tools/layoutlib/create/src/com/android/tools/layoutlib/create/Log.java b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/Log.java new file mode 100644 index 0000000000000..c3ba591513b6e --- /dev/null +++ b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/Log.java @@ -0,0 +1,72 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.tools.layoutlib.create; + +import java.io.PrintWriter; +import java.io.StringWriter; + +public class Log { + + private boolean mVerbose = false; + + public void setVerbose(boolean verbose) { + mVerbose = verbose; + } + + public void debug(String format, Object... args) { + if (mVerbose) { + info(format, args); + } + } + + /** Similar to debug() but doesn't do a \n automatically. */ + public void debugNoln(String format, Object... args) { + if (mVerbose) { + String s = String.format(format, args); + System.out.print(s); + } + } + + public void info(String format, Object... args) { + String s = String.format(format, args); + outPrintln(s); + } + + public void error(String format, Object... args) { + String s = String.format(format, args); + errPrintln(s); + } + + public void exception(Throwable t, String format, Object... args) { + StringWriter sw = new StringWriter(); + PrintWriter pw = new PrintWriter(sw); + t.printStackTrace(pw); + pw.flush(); + error(format + "\n" + sw.toString(), args); + } + + /** for unit testing */ + protected void errPrintln(String msg) { + System.err.println(msg); + } + + /** for unit testing */ + protected void outPrintln(String msg) { + System.out.println(msg); + } + +} diff --git a/tools/layoutlib/create/src/com/android/tools/layoutlib/create/LogAbortException.java b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/LogAbortException.java new file mode 100644 index 0000000000000..dc4b4a7c86dfb --- /dev/null +++ b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/LogAbortException.java @@ -0,0 +1,32 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.tools.layoutlib.create; + +public class LogAbortException extends Exception { + + private final String mFormat; + private final Object[] mArgs; + + public LogAbortException(String format, Object... args) { + mFormat = format; + mArgs = args; + } + + public void error(Log log) { + log.error(mFormat, mArgs); + } +} diff --git a/tools/layoutlib/create/src/com/android/tools/layoutlib/create/Main.java b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/Main.java new file mode 100644 index 0000000000000..9cd74db3445b8 --- /dev/null +++ b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/Main.java @@ -0,0 +1,212 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.tools.layoutlib.create; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Set; + + +/** + * Entry point for the layoutlib_create tool. + *

+ * The tool does not currently rely on any external configuration file. + * Instead the configuration is mostly done via the {@link CreateInfo} class. + *

+ * For a complete description of the tool and its implementation, please refer to + * the "README.txt" file at the root of this project. + *

+ * For a quick test, invoke this as follows: + *

+ * $ make layoutlib
+ * 
+ * which does: + *
+ * $ make layoutlib_create <bunch of framework jars>
+ * $ java -jar out/host/linux-x86/framework/layoutlib_create.jar \
+ *        out/host/common/obj/JAVA_LIBRARIES/temp_layoutlib_intermediates/javalib.jar \
+ *        out/target/common/obj/JAVA_LIBRARIES/core_intermediates/classes.jar \
+ *        out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar
+ * 
+ */ +public class Main { + + public static class Options { + public boolean generatePublicAccess = true; + public boolean listAllDeps = false; + public boolean listOnlyMissingDeps = false; + } + + public static final Options sOptions = new Options(); + + public static void main(String[] args) { + + Log log = new Log(); + + ArrayList osJarPath = new ArrayList(); + String[] osDestJar = { null }; + + if (!processArgs(log, args, osJarPath, osDestJar)) { + log.error("Usage: layoutlib_create [-v] [-p] output.jar input.jar ..."); + log.error("Usage: layoutlib_create [-v] [--list-deps|--missing-deps] input.jar ..."); + System.exit(1); + } + + if (sOptions.listAllDeps || sOptions.listOnlyMissingDeps) { + System.exit(listDeps(osJarPath, log)); + + } else { + System.exit(createLayoutLib(osDestJar[0], osJarPath, log)); + } + + + System.exit(1); + } + + private static int createLayoutLib(String osDestJar, ArrayList osJarPath, Log log) { + log.info("Output: %1$s", osDestJar); + for (String path : osJarPath) { + log.info("Input : %1$s", path); + } + + try { + AsmGenerator agen = new AsmGenerator(log, osDestJar, new CreateInfo()); + + AsmAnalyzer aa = new AsmAnalyzer(log, osJarPath, agen, + new String[] { // derived from + "android.view.View", + "android.app.Fragment" + }, + new String[] { // include classes + "android.*", // for android.R + "android.util.*", + "com.android.internal.util.*", + "android.view.*", + "android.widget.*", + "com.android.internal.widget.*", + "android.text.**", + "android.graphics.*", + "android.graphics.drawable.*", + "android.content.*", + "android.content.res.*", + "org.apache.harmony.xml.*", + "com.android.internal.R**", + "android.pim.*", // for datepicker + "android.os.*", // for android.os.Handler + "android.database.ContentObserver", // for Digital clock + }); + aa.analyze(); + agen.generate(); + + // Throw an error if any class failed to get renamed by the generator + // + // IMPORTANT: if you're building the platform and you get this error message, + // it means the renameClasses[] array in AsmGenerator needs to be updated: some + // class should have been renamed but it was not found in the input JAR files. + Set notRenamed = agen.getClassesNotRenamed(); + if (notRenamed.size() > 0) { + // (80-column guide below for error formatting) + // 01234567890123456789012345678901234567890123456789012345678901234567890123456789 + log.error( + "ERROR when running layoutlib_create: the following classes are referenced\n" + + "by tools/layoutlib/create but were not actually found in the input JAR files.\n" + + "This may be due to some platform classes having been renamed."); + for (String fqcn : notRenamed) { + log.error("- Class not found: %s", fqcn.replace('/', '.')); + } + for (String path : osJarPath) { + log.info("- Input JAR : %1$s", path); + } + return 1; + } + + return 0; + } catch (IOException e) { + log.exception(e, "Failed to load jar"); + } catch (LogAbortException e) { + e.error(log); + } + + return 1; + } + + private static int listDeps(ArrayList osJarPath, Log log) { + DependencyFinder df = new DependencyFinder(log); + try { + List>> result = df.findDeps(osJarPath); + if (sOptions.listAllDeps) { + df.printAllDeps(result); + } else if (sOptions.listOnlyMissingDeps) { + df.printMissingDeps(result); + } + } catch (IOException e) { + log.exception(e, "Failed to load jar"); + } + + return 0; + } + + /** + * Returns true if args where properly parsed. + * Returns false if program should exit with command-line usage. + *

+ * Note: the String[0] is an output parameter wrapped in an array, since there is no + * "out" parameter support. + */ + private static boolean processArgs(Log log, String[] args, + ArrayList osJarPath, String[] osDestJar) { + boolean needs_dest = true; + for (int i = 0; i < args.length; i++) { + String s = args[i]; + if (s.equals("-v")) { + log.setVerbose(true); + } else if (s.equals("-p")) { + sOptions.generatePublicAccess = false; + } else if (s.equals("--list-deps")) { + sOptions.listAllDeps = true; + needs_dest = false; + } else if (s.equals("--missing-deps")) { + sOptions.listOnlyMissingDeps = true; + needs_dest = false; + } else if (!s.startsWith("-")) { + if (needs_dest && osDestJar[0] == null) { + osDestJar[0] = s; + } else { + osJarPath.add(s); + } + } else { + log.error("Unknow argument: %s", s); + return false; + } + } + + if (osJarPath.isEmpty()) { + log.error("Missing parameter: path to input jar"); + return false; + } + if (needs_dest && osDestJar[0] == null) { + log.error("Missing parameter: path to output jar"); + return false; + } + + sOptions.generatePublicAccess = false; + + return true; + } +} diff --git a/tools/layoutlib/create/src/com/android/tools/layoutlib/create/MethodAdapter.java b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/MethodAdapter.java new file mode 100644 index 0000000000000..7d1e4cf496355 --- /dev/null +++ b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/MethodAdapter.java @@ -0,0 +1,97 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.tools.layoutlib.create; + + +/** + * An adapter to make it easier to use {@link MethodListener}. + *

+ * The adapter calls the void {@link #onInvokeV(String, boolean, Object)} listener + * for all types (I, L, F, D and A), returning 0 or null as appropriate. + */ +public class MethodAdapter implements MethodListener { + /** + * A stub method is being invoked. + *

+ * Known limitation: caller arguments are not available. + * + * @param signature The signature of the method being invoked, composed of the + * binary class name followed by the method descriptor (aka argument + * types). Example: "com/foo/MyClass/InnerClass/printInt(I)V". + * @param isNative True if the method was a native method. + * @param caller The calling object. Null for static methods, "this" for instance methods. + */ + @Override + public void onInvokeV(String signature, boolean isNative, Object caller) { + } + + /** + * Same as {@link #onInvokeV(String, boolean, Object)} but returns an integer or similar. + * @see #onInvokeV(String, boolean, Object) + * @return an integer, or a boolean, or a short or a byte. + */ + @Override + public int onInvokeI(String signature, boolean isNative, Object caller) { + onInvokeV(signature, isNative, caller); + return 0; + } + + /** + * Same as {@link #onInvokeV(String, boolean, Object)} but returns a long. + * @see #onInvokeV(String, boolean, Object) + * @return a long. + */ + @Override + public long onInvokeL(String signature, boolean isNative, Object caller) { + onInvokeV(signature, isNative, caller); + return 0; + } + + /** + * Same as {@link #onInvokeV(String, boolean, Object)} but returns a float. + * @see #onInvokeV(String, boolean, Object) + * @return a float. + */ + @Override + public float onInvokeF(String signature, boolean isNative, Object caller) { + onInvokeV(signature, isNative, caller); + return 0; + } + + /** + * Same as {@link #onInvokeV(String, boolean, Object)} but returns a double. + * @see #onInvokeV(String, boolean, Object) + * @return a double. + */ + @Override + public double onInvokeD(String signature, boolean isNative, Object caller) { + onInvokeV(signature, isNative, caller); + return 0; + } + + /** + * Same as {@link #onInvokeV(String, boolean, Object)} but returns an object. + * @see #onInvokeV(String, boolean, Object) + * @return an object. + */ + @Override + public Object onInvokeA(String signature, boolean isNative, Object caller) { + onInvokeV(signature, isNative, caller); + return null; + } +} + diff --git a/tools/layoutlib/create/src/com/android/tools/layoutlib/create/MethodListener.java b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/MethodListener.java new file mode 100644 index 0000000000000..6fc2b240b84f7 --- /dev/null +++ b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/MethodListener.java @@ -0,0 +1,76 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.tools.layoutlib.create; + + +/** + * Interface to allow a method invocation to be listened upon. + *

+ * This is used by {@link OverrideMethod} to register a listener for methods that + * have been stubbed by the {@link AsmGenerator}. At runtime the stub will call either a + * default global listener or a specific listener based on the method signature. + */ +public interface MethodListener { + /** + * A stub method is being invoked. + *

+ * Known limitation: caller arguments are not available. + * + * @param signature The signature of the method being invoked, composed of the + * binary class name followed by the method descriptor (aka argument + * types). Example: "com/foo/MyClass/InnerClass/printInt(I)V". + * @param isNative True if the method was a native method. + * @param caller The calling object. Null for static methods, "this" for instance methods. + */ + public void onInvokeV(String signature, boolean isNative, Object caller); + + /** + * Same as {@link #onInvokeV(String, boolean, Object)} but returns an integer or similar. + * @see #onInvokeV(String, boolean, Object) + * @return an integer, or a boolean, or a short or a byte. + */ + public int onInvokeI(String signature, boolean isNative, Object caller); + + /** + * Same as {@link #onInvokeV(String, boolean, Object)} but returns a long. + * @see #onInvokeV(String, boolean, Object) + * @return a long. + */ + public long onInvokeL(String signature, boolean isNative, Object caller); + + /** + * Same as {@link #onInvokeV(String, boolean, Object)} but returns a float. + * @see #onInvokeV(String, boolean, Object) + * @return a float. + */ + public float onInvokeF(String signature, boolean isNative, Object caller); + + /** + * Same as {@link #onInvokeV(String, boolean, Object)} but returns a double. + * @see #onInvokeV(String, boolean, Object) + * @return a double. + */ + public double onInvokeD(String signature, boolean isNative, Object caller); + + /** + * Same as {@link #onInvokeV(String, boolean, Object)} but returns an object. + * @see #onInvokeV(String, boolean, Object) + * @return an object. + */ + public Object onInvokeA(String signature, boolean isNative, Object caller); +} + diff --git a/tools/layoutlib/create/src/com/android/tools/layoutlib/create/OverrideMethod.java b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/OverrideMethod.java new file mode 100644 index 0000000000000..a6aff992ee765 --- /dev/null +++ b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/OverrideMethod.java @@ -0,0 +1,151 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.tools.layoutlib.create; + +import java.util.HashMap; + +/** + * Allows stub methods from LayoutLib to be overriden at runtime. + *

+ * Implementation note: all types required by this class(inner/outer classes & interfaces) + * must be referenced by the injectClass argument to {@link AsmGenerator} in Main.java; + * Otherwise they won't be accessible in layoutlib.jar at runtime. + */ +public final class OverrideMethod { + + /** Map of method overridden. */ + private static HashMap sMethods = new HashMap(); + /** Default listener for all method not listed in sMethods. Nothing if null. */ + private static MethodListener sDefaultListener = null; + + /** + * Sets the default listener for all methods not specifically handled. + * Null means to do nothing. + */ + public static void setDefaultListener(MethodListener listener) { + sDefaultListener = listener; + } + + /** + * Defines or reset a listener for the given method signature. + * + * @param signature The signature of the method being invoked, composed of the + * binary class name followed by the method descriptor (aka argument + * types). Example: "com/foo/MyClass/InnerClass/printInt(I)V" + * @param listener The new listener. Removes it if null. + */ + public static void setMethodListener(String signature, MethodListener listener) { + if (listener == null) { + sMethods.remove(signature); + } else { + sMethods.put(signature, listener); + } + } + + /** + * Invokes the specific listener for the given signature or the default one if defined. + *

+ * This version invokes the method listener for the void return type. + *

+ * Note: this is not intended to be used by the LayoutLib Bridge. It is intended to be called + * by the stubbed methods generated by the LayoutLib_create tool. + * + * @param signature The signature of the method being invoked, composed of the + * binary class name followed by the method descriptor (aka argument + * types). Example: "com/foo/MyClass/InnerClass/printInt(I)V". + * @param isNative True if the method was a native method. + * @param caller The calling object. Null for static methods, "this" for instance methods. + */ + public static void invokeV(String signature, boolean isNative, Object caller) { + MethodListener i = sMethods.get(signature); + if (i != null) { + i.onInvokeV(signature, isNative, caller); + } else if (sDefaultListener != null) { + sDefaultListener.onInvokeV(signature, isNative, caller); + } + } + + /** + * Invokes the specific listener for the int return type. + * @see #invokeV(String, boolean, Object) + */ + public static int invokeI(String signature, boolean isNative, Object caller) { + MethodListener i = sMethods.get(signature); + if (i != null) { + return i.onInvokeI(signature, isNative, caller); + } else if (sDefaultListener != null) { + return sDefaultListener.onInvokeI(signature, isNative, caller); + } + return 0; + } + + /** + * Invokes the specific listener for the long return type. + * @see #invokeV(String, boolean, Object) + */ + public static long invokeL(String signature, boolean isNative, Object caller) { + MethodListener i = sMethods.get(signature); + if (i != null) { + return i.onInvokeL(signature, isNative, caller); + } else if (sDefaultListener != null) { + return sDefaultListener.onInvokeL(signature, isNative, caller); + } + return 0; + } + + /** + * Invokes the specific listener for the float return type. + * @see #invokeV(String, boolean, Object) + */ + public static float invokeF(String signature, boolean isNative, Object caller) { + MethodListener i = sMethods.get(signature); + if (i != null) { + return i.onInvokeF(signature, isNative, caller); + } else if (sDefaultListener != null) { + return sDefaultListener.onInvokeF(signature, isNative, caller); + } + return 0; + } + + /** + * Invokes the specific listener for the double return type. + * @see #invokeV(String, boolean, Object) + */ + public static double invokeD(String signature, boolean isNative, Object caller) { + MethodListener i = sMethods.get(signature); + if (i != null) { + return i.onInvokeD(signature, isNative, caller); + } else if (sDefaultListener != null) { + return sDefaultListener.onInvokeD(signature, isNative, caller); + } + return 0; + } + + /** + * Invokes the specific listener for the object return type. + * @see #invokeV(String, boolean, Object) + */ + public static Object invokeA(String signature, boolean isNative, Object caller) { + MethodListener i = sMethods.get(signature); + if (i != null) { + return i.onInvokeA(signature, isNative, caller); + } else if (sDefaultListener != null) { + return sDefaultListener.onInvokeA(signature, isNative, caller); + } + return null; + } +} diff --git a/tools/layoutlib/create/src/com/android/tools/layoutlib/create/RenameClassAdapter.java b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/RenameClassAdapter.java new file mode 100644 index 0000000000000..383cbb8e33737 --- /dev/null +++ b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/RenameClassAdapter.java @@ -0,0 +1,463 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.tools.layoutlib.create; + +import org.objectweb.asm.AnnotationVisitor; +import org.objectweb.asm.ClassVisitor; +import org.objectweb.asm.ClassWriter; +import org.objectweb.asm.FieldVisitor; +import org.objectweb.asm.Label; +import org.objectweb.asm.MethodVisitor; +import org.objectweb.asm.Opcodes; +import org.objectweb.asm.Type; +import org.objectweb.asm.signature.SignatureReader; +import org.objectweb.asm.signature.SignatureVisitor; +import org.objectweb.asm.signature.SignatureWriter; + +/** + * This class visitor renames a class from a given old name to a given new name. + * The class visitor will also rename all inner classes and references in the methods. + *

+ * + * For inner classes, this handles only the case where the outer class name changes. + * The inner class name should remain the same. + */ +public class RenameClassAdapter extends ClassVisitor { + + + private final String mOldName; + private final String mNewName; + private String mOldBase; + private String mNewBase; + + /** + * Creates a class visitor that renames a class from a given old name to a given new name. + * The class visitor will also rename all inner classes and references in the methods. + * The names must be full qualified internal ASM names (e.g. com/blah/MyClass$InnerClass). + */ + public RenameClassAdapter(ClassWriter cv, String oldName, String newName) { + super(Opcodes.ASM4, cv); + mOldBase = mOldName = oldName; + mNewBase = mNewName = newName; + + int pos = mOldName.indexOf('$'); + if (pos > 0) { + mOldBase = mOldName.substring(0, pos); + } + pos = mNewName.indexOf('$'); + if (pos > 0) { + mNewBase = mNewName.substring(0, pos); + } + + assert (mOldBase == null && mNewBase == null) || (mOldBase != null && mNewBase != null); + } + + + /** + * Renames a type descriptor, e.g. "Lcom.package.MyClass;" + * If the type doesn't need to be renamed, returns the input string as-is. + */ + String renameTypeDesc(String desc) { + if (desc == null) { + return null; + } + + return renameType(Type.getType(desc)); + } + + /** + * Renames an object type, e.g. "Lcom.package.MyClass;" or an array type that has an + * object element, e.g. "[Lcom.package.MyClass;" + * If the type doesn't need to be renamed, returns the internal name of the input type. + */ + String renameType(Type type) { + if (type == null) { + return null; + } + + if (type.getSort() == Type.OBJECT) { + String in = type.getInternalName(); + return "L" + renameInternalType(in) + ";"; + } else if (type.getSort() == Type.ARRAY) { + StringBuilder sb = new StringBuilder(); + for (int n = type.getDimensions(); n > 0; n--) { + sb.append('['); + } + sb.append(renameType(type.getElementType())); + return sb.toString(); + } + return type.getDescriptor(); + } + + /** + * Renames an object type, e.g. "Lcom.package.MyClass;" or an array type that has an + * object element, e.g. "[Lcom.package.MyClass;". + * This is like renameType() except that it returns a Type object. + * If the type doesn't need to be renamed, returns the input type object. + */ + Type renameTypeAsType(Type type) { + if (type == null) { + return null; + } + + if (type.getSort() == Type.OBJECT) { + String in = type.getInternalName(); + String newIn = renameInternalType(in); + if (newIn != in) { + return Type.getType("L" + newIn + ";"); + } + } else if (type.getSort() == Type.ARRAY) { + StringBuilder sb = new StringBuilder(); + for (int n = type.getDimensions(); n > 0; n--) { + sb.append('['); + } + sb.append(renameType(type.getElementType())); + return Type.getType(sb.toString()); + } + return type; + } + + /** + * Renames an internal type name, e.g. "com.package.MyClass". + * If the type doesn't need to be renamed, returns the input string as-is. + *

+ * The internal type of some of the MethodVisitor turns out to be a type + descriptor sometimes so descriptors are renamed too. + */ + String renameInternalType(String type) { + if (type == null) { + return null; + } + + if (type.equals(mOldName)) { + return mNewName; + } + + if (mOldBase != mOldName && type.equals(mOldBase)) { + return mNewBase; + } + + int pos = type.indexOf('$'); + if (pos == mOldBase.length() && type.startsWith(mOldBase)) { + return mNewBase + type.substring(pos); + } + + // The internal type of some of the MethodVisitor turns out to be a type + // descriptor sometimes. This is the case with visitTypeInsn(type) and + // visitMethodInsn(owner). We try to detect it and adjust it here. + if (type.indexOf(';') > 0) { + type = renameTypeDesc(type); + } + + return type; + } + + /** + * Renames a method descriptor, i.e. applies renameType to all arguments and to the + * return value. + */ + String renameMethodDesc(String desc) { + if (desc == null) { + return null; + } + + Type[] args = Type.getArgumentTypes(desc); + + StringBuilder sb = new StringBuilder("("); + for (Type arg : args) { + String name = renameType(arg); + sb.append(name); + } + sb.append(')'); + + Type ret = Type.getReturnType(desc); + String name = renameType(ret); + sb.append(name); + + return sb.toString(); + } + + + /** + * Renames the ClassSignature handled by ClassVisitor.visit + * or the MethodTypeSignature handled by ClassVisitor.visitMethod. + */ + String renameTypeSignature(String sig) { + if (sig == null) { + return null; + } + SignatureReader reader = new SignatureReader(sig); + SignatureWriter writer = new SignatureWriter(); + reader.accept(new RenameSignatureAdapter(writer)); + sig = writer.toString(); + return sig; + } + + + /** + * Renames the FieldTypeSignature handled by ClassVisitor.visitField + * or MethodVisitor.visitLocalVariable. + */ + String renameFieldSignature(String sig) { + if (sig == null) { + return null; + } + SignatureReader reader = new SignatureReader(sig); + SignatureWriter writer = new SignatureWriter(); + reader.acceptType(new RenameSignatureAdapter(writer)); + sig = writer.toString(); + return sig; + } + + + //---------------------------------- + // Methods from the ClassAdapter + + @Override + public void visit(int version, int access, String name, String signature, + String superName, String[] interfaces) { + name = renameInternalType(name); + superName = renameInternalType(superName); + signature = renameTypeSignature(signature); + + super.visit(version, access, name, signature, superName, interfaces); + } + + @Override + public void visitInnerClass(String name, String outerName, String innerName, int access) { + assert outerName.equals(mOldName); + outerName = renameInternalType(outerName); + name = outerName + "$" + innerName; + super.visitInnerClass(name, outerName, innerName, access); + } + + @Override + public MethodVisitor visitMethod(int access, String name, String desc, + String signature, String[] exceptions) { + desc = renameMethodDesc(desc); + signature = renameTypeSignature(signature); + MethodVisitor mw = super.visitMethod(access, name, desc, signature, exceptions); + return new RenameMethodAdapter(mw); + } + + @Override + public AnnotationVisitor visitAnnotation(String desc, boolean visible) { + desc = renameTypeDesc(desc); + return super.visitAnnotation(desc, visible); + } + + @Override + public FieldVisitor visitField(int access, String name, String desc, + String signature, Object value) { + desc = renameTypeDesc(desc); + signature = renameFieldSignature(signature); + return super.visitField(access, name, desc, signature, value); + } + + + //---------------------------------- + + /** + * A method visitor that renames all references from an old class name to a new class name. + */ + public class RenameMethodAdapter extends MethodVisitor { + + /** + * Creates a method visitor that renames all references from a given old name to a given new + * name. The method visitor will also rename all inner classes. + * The names must be full qualified internal ASM names (e.g. com/blah/MyClass$InnerClass). + */ + public RenameMethodAdapter(MethodVisitor mv) { + super(Opcodes.ASM4, mv); + } + + @Override + public AnnotationVisitor visitAnnotation(String desc, boolean visible) { + desc = renameTypeDesc(desc); + + return super.visitAnnotation(desc, visible); + } + + @Override + public AnnotationVisitor visitParameterAnnotation(int parameter, String desc, boolean visible) { + desc = renameTypeDesc(desc); + + return super.visitParameterAnnotation(parameter, desc, visible); + } + + @Override + public void visitTypeInsn(int opcode, String type) { + type = renameInternalType(type); + + super.visitTypeInsn(opcode, type); + } + + @Override + public void visitFieldInsn(int opcode, String owner, String name, String desc) { + owner = renameInternalType(owner); + desc = renameTypeDesc(desc); + + super.visitFieldInsn(opcode, owner, name, desc); + } + + @Override + public void visitMethodInsn(int opcode, String owner, String name, String desc) { + owner = renameInternalType(owner); + desc = renameMethodDesc(desc); + + super.visitMethodInsn(opcode, owner, name, desc); + } + + @Override + public void visitLdcInsn(Object cst) { + // If cst is a Type, this means the code is trying to pull the .class constant + // for this class, so it needs to be renamed too. + if (cst instanceof Type) { + cst = renameTypeAsType((Type) cst); + } + super.visitLdcInsn(cst); + } + + @Override + public void visitMultiANewArrayInsn(String desc, int dims) { + desc = renameTypeDesc(desc); + + super.visitMultiANewArrayInsn(desc, dims); + } + + @Override + public void visitTryCatchBlock(Label start, Label end, Label handler, String type) { + type = renameInternalType(type); + + super.visitTryCatchBlock(start, end, handler, type); + } + + @Override + public void visitLocalVariable(String name, String desc, String signature, + Label start, Label end, int index) { + desc = renameTypeDesc(desc); + signature = renameFieldSignature(signature); + + super.visitLocalVariable(name, desc, signature, start, end, index); + } + + } + + //---------------------------------- + + public class RenameSignatureAdapter extends SignatureVisitor { + + private final SignatureVisitor mSv; + + public RenameSignatureAdapter(SignatureVisitor sv) { + super(Opcodes.ASM4); + mSv = sv; + } + + @Override + public void visitClassType(String name) { + name = renameInternalType(name); + mSv.visitClassType(name); + } + + @Override + public void visitInnerClassType(String name) { + name = renameInternalType(name); + mSv.visitInnerClassType(name); + } + + @Override + public SignatureVisitor visitArrayType() { + SignatureVisitor sv = mSv.visitArrayType(); + return new RenameSignatureAdapter(sv); + } + + @Override + public void visitBaseType(char descriptor) { + mSv.visitBaseType(descriptor); + } + + @Override + public SignatureVisitor visitClassBound() { + SignatureVisitor sv = mSv.visitClassBound(); + return new RenameSignatureAdapter(sv); + } + + @Override + public void visitEnd() { + mSv.visitEnd(); + } + + @Override + public SignatureVisitor visitExceptionType() { + SignatureVisitor sv = mSv.visitExceptionType(); + return new RenameSignatureAdapter(sv); + } + + @Override + public void visitFormalTypeParameter(String name) { + mSv.visitFormalTypeParameter(name); + } + + @Override + public SignatureVisitor visitInterface() { + SignatureVisitor sv = mSv.visitInterface(); + return new RenameSignatureAdapter(sv); + } + + @Override + public SignatureVisitor visitInterfaceBound() { + SignatureVisitor sv = mSv.visitInterfaceBound(); + return new RenameSignatureAdapter(sv); + } + + @Override + public SignatureVisitor visitParameterType() { + SignatureVisitor sv = mSv.visitParameterType(); + return new RenameSignatureAdapter(sv); + } + + @Override + public SignatureVisitor visitReturnType() { + SignatureVisitor sv = mSv.visitReturnType(); + return new RenameSignatureAdapter(sv); + } + + @Override + public SignatureVisitor visitSuperclass() { + SignatureVisitor sv = mSv.visitSuperclass(); + return new RenameSignatureAdapter(sv); + } + + @Override + public void visitTypeArgument() { + mSv.visitTypeArgument(); + } + + @Override + public SignatureVisitor visitTypeArgument(char wildcard) { + SignatureVisitor sv = mSv.visitTypeArgument(wildcard); + return new RenameSignatureAdapter(sv); + } + + @Override + public void visitTypeVariable(String name) { + mSv.visitTypeVariable(name); + } + + } +} diff --git a/tools/layoutlib/create/src/com/android/tools/layoutlib/create/StubMethodAdapter.java b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/StubMethodAdapter.java new file mode 100644 index 0000000000000..51e7535720fed --- /dev/null +++ b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/StubMethodAdapter.java @@ -0,0 +1,376 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.tools.layoutlib.create; + +import org.objectweb.asm.AnnotationVisitor; +import org.objectweb.asm.Attribute; +import org.objectweb.asm.Label; +import org.objectweb.asm.MethodVisitor; +import org.objectweb.asm.Opcodes; +import org.objectweb.asm.Type; + +/** + * This method adapter rewrites a method by discarding the original code and generating + * a stub depending on the return type. Original annotations are passed along unchanged. + */ +class StubMethodAdapter extends MethodVisitor { + + private static String CONSTRUCTOR = ""; + private static String CLASS_INIT = ""; + + /** The parent method writer */ + private MethodVisitor mParentVisitor; + /** The method return type. Can be null. */ + private Type mReturnType; + /** Message to be printed by stub methods. */ + private String mInvokeSignature; + /** Flag to output the first line number. */ + private boolean mOutputFirstLineNumber = true; + /** Flag that is true when implementing a constructor, to accept all original + * code calling the original super constructor. */ + private boolean mIsInitMethod = false; + + private boolean mMessageGenerated; + private final boolean mIsStatic; + private final boolean mIsNative; + + public StubMethodAdapter(MethodVisitor mv, String methodName, Type returnType, + String invokeSignature, boolean isStatic, boolean isNative) { + super(Opcodes.ASM4); + mParentVisitor = mv; + mReturnType = returnType; + mInvokeSignature = invokeSignature; + mIsStatic = isStatic; + mIsNative = isNative; + + if (CONSTRUCTOR.equals(methodName) || CLASS_INIT.equals(methodName)) { + mIsInitMethod = true; + } + } + + private void generateInvoke() { + /* Generates the code: + * OverrideMethod.invoke("signature", mIsNative ? true : false, null or this); + */ + mParentVisitor.visitLdcInsn(mInvokeSignature); + // push true or false + mParentVisitor.visitInsn(mIsNative ? Opcodes.ICONST_1 : Opcodes.ICONST_0); + // push null or this + if (mIsStatic) { + mParentVisitor.visitInsn(Opcodes.ACONST_NULL); + } else { + mParentVisitor.visitVarInsn(Opcodes.ALOAD, 0); + } + + int sort = mReturnType != null ? mReturnType.getSort() : Type.VOID; + switch(sort) { + case Type.VOID: + mParentVisitor.visitMethodInsn(Opcodes.INVOKESTATIC, + "com/android/tools/layoutlib/create/OverrideMethod", + "invokeV", + "(Ljava/lang/String;ZLjava/lang/Object;)V"); + mParentVisitor.visitInsn(Opcodes.RETURN); + break; + case Type.BOOLEAN: + case Type.CHAR: + case Type.BYTE: + case Type.SHORT: + case Type.INT: + mParentVisitor.visitMethodInsn(Opcodes.INVOKESTATIC, + "com/android/tools/layoutlib/create/OverrideMethod", + "invokeI", + "(Ljava/lang/String;ZLjava/lang/Object;)I"); + switch(sort) { + case Type.BOOLEAN: + Label l1 = new Label(); + mParentVisitor.visitJumpInsn(Opcodes.IFEQ, l1); + mParentVisitor.visitInsn(Opcodes.ICONST_1); + mParentVisitor.visitInsn(Opcodes.IRETURN); + mParentVisitor.visitLabel(l1); + mParentVisitor.visitInsn(Opcodes.ICONST_0); + break; + case Type.CHAR: + mParentVisitor.visitInsn(Opcodes.I2C); + break; + case Type.BYTE: + mParentVisitor.visitInsn(Opcodes.I2B); + break; + case Type.SHORT: + mParentVisitor.visitInsn(Opcodes.I2S); + break; + } + mParentVisitor.visitInsn(Opcodes.IRETURN); + break; + case Type.LONG: + mParentVisitor.visitMethodInsn(Opcodes.INVOKESTATIC, + "com/android/tools/layoutlib/create/OverrideMethod", + "invokeL", + "(Ljava/lang/String;ZLjava/lang/Object;)J"); + mParentVisitor.visitInsn(Opcodes.LRETURN); + break; + case Type.FLOAT: + mParentVisitor.visitMethodInsn(Opcodes.INVOKESTATIC, + "com/android/tools/layoutlib/create/OverrideMethod", + "invokeF", + "(Ljava/lang/String;ZLjava/lang/Object;)F"); + mParentVisitor.visitInsn(Opcodes.FRETURN); + break; + case Type.DOUBLE: + mParentVisitor.visitMethodInsn(Opcodes.INVOKESTATIC, + "com/android/tools/layoutlib/create/OverrideMethod", + "invokeD", + "(Ljava/lang/String;ZLjava/lang/Object;)D"); + mParentVisitor.visitInsn(Opcodes.DRETURN); + break; + case Type.ARRAY: + case Type.OBJECT: + mParentVisitor.visitMethodInsn(Opcodes.INVOKESTATIC, + "com/android/tools/layoutlib/create/OverrideMethod", + "invokeA", + "(Ljava/lang/String;ZLjava/lang/Object;)Ljava/lang/Object;"); + mParentVisitor.visitTypeInsn(Opcodes.CHECKCAST, mReturnType.getInternalName()); + mParentVisitor.visitInsn(Opcodes.ARETURN); + break; + } + + } + + private void generatePop() { + /* Pops the stack, depending on the return type. + */ + switch(mReturnType != null ? mReturnType.getSort() : Type.VOID) { + case Type.VOID: + break; + case Type.BOOLEAN: + case Type.CHAR: + case Type.BYTE: + case Type.SHORT: + case Type.INT: + case Type.FLOAT: + case Type.ARRAY: + case Type.OBJECT: + mParentVisitor.visitInsn(Opcodes.POP); + break; + case Type.LONG: + case Type.DOUBLE: + mParentVisitor.visitInsn(Opcodes.POP2); + break; + } + } + + /* Pass down to visitor writer. In this implementation, either do nothing. */ + @Override + public void visitCode() { + mParentVisitor.visitCode(); + } + + /* + * visitMaxs is called just before visitEnd if there was any code to rewrite. + * For non-constructor, generate the messaging code and the return statement + * if it hasn't been done before. + */ + @Override + public void visitMaxs(int maxStack, int maxLocals) { + if (!mIsInitMethod && !mMessageGenerated) { + generateInvoke(); + mMessageGenerated = true; + } + mParentVisitor.visitMaxs(maxStack, maxLocals); + } + + /** + * End of visiting. + * For non-constructor, generate the messaging code and the return statement + * if it hasn't been done before. + */ + @Override + public void visitEnd() { + if (!mIsInitMethod && !mMessageGenerated) { + generateInvoke(); + mMessageGenerated = true; + mParentVisitor.visitMaxs(1, 1); + } + mParentVisitor.visitEnd(); + } + + /* Writes all annotation from the original method. */ + @Override + public AnnotationVisitor visitAnnotation(String desc, boolean visible) { + return mParentVisitor.visitAnnotation(desc, visible); + } + + /* Writes all annotation default values from the original method. */ + @Override + public AnnotationVisitor visitAnnotationDefault() { + return mParentVisitor.visitAnnotationDefault(); + } + + @Override + public AnnotationVisitor visitParameterAnnotation(int parameter, String desc, + boolean visible) { + return mParentVisitor.visitParameterAnnotation(parameter, desc, visible); + } + + /* Writes all attributes from the original method. */ + @Override + public void visitAttribute(Attribute attr) { + mParentVisitor.visitAttribute(attr); + } + + /* + * Only writes the first line number present in the original code so that source + * viewers can direct to the correct method, even if the content doesn't match. + */ + @Override + public void visitLineNumber(int line, Label start) { + if (mIsInitMethod || mOutputFirstLineNumber) { + mParentVisitor.visitLineNumber(line, start); + mOutputFirstLineNumber = false; + } + } + + /** + * For non-constructor, rewrite existing "return" instructions to write the message. + */ + @Override + public void visitInsn(int opcode) { + if (mIsInitMethod) { + switch (opcode) { + case Opcodes.RETURN: + case Opcodes.ARETURN: + case Opcodes.DRETURN: + case Opcodes.FRETURN: + case Opcodes.IRETURN: + case Opcodes.LRETURN: + // Pop the last word from the stack since invoke will generate its own return. + generatePop(); + generateInvoke(); + mMessageGenerated = true; + //$FALL-THROUGH$ + default: + mParentVisitor.visitInsn(opcode); + } + } + } + + @Override + public void visitLabel(Label label) { + if (mIsInitMethod) { + mParentVisitor.visitLabel(label); + } + } + + @Override + public void visitTryCatchBlock(Label start, Label end, Label handler, String type) { + if (mIsInitMethod) { + mParentVisitor.visitTryCatchBlock(start, end, handler, type); + } + } + + @Override + public void visitMethodInsn(int opcode, String owner, String name, String desc) { + if (mIsInitMethod) { + mParentVisitor.visitMethodInsn(opcode, owner, name, desc); + } + } + + @Override + public void visitFieldInsn(int opcode, String owner, String name, String desc) { + if (mIsInitMethod) { + mParentVisitor.visitFieldInsn(opcode, owner, name, desc); + } + } + + @Override + public void visitFrame(int type, int nLocal, Object[] local, int nStack, Object[] stack) { + if (mIsInitMethod) { + mParentVisitor.visitFrame(type, nLocal, local, nStack, stack); + } + } + + @Override + public void visitIincInsn(int var, int increment) { + if (mIsInitMethod) { + mParentVisitor.visitIincInsn(var, increment); + } + } + + @Override + public void visitIntInsn(int opcode, int operand) { + if (mIsInitMethod) { + mParentVisitor.visitIntInsn(opcode, operand); + } + } + + @Override + public void visitJumpInsn(int opcode, Label label) { + if (mIsInitMethod) { + mParentVisitor.visitJumpInsn(opcode, label); + } + } + + @Override + public void visitLdcInsn(Object cst) { + if (mIsInitMethod) { + mParentVisitor.visitLdcInsn(cst); + } + } + + @Override + public void visitLocalVariable(String name, String desc, String signature, + Label start, Label end, int index) { + if (mIsInitMethod) { + mParentVisitor.visitLocalVariable(name, desc, signature, start, end, index); + } + } + + @Override + public void visitLookupSwitchInsn(Label dflt, int[] keys, Label[] labels) { + if (mIsInitMethod) { + mParentVisitor.visitLookupSwitchInsn(dflt, keys, labels); + } + } + + @Override + public void visitMultiANewArrayInsn(String desc, int dims) { + if (mIsInitMethod) { + mParentVisitor.visitMultiANewArrayInsn(desc, dims); + } + } + + @Override + public void visitTableSwitchInsn(int min, int max, Label dflt, Label[] labels) { + if (mIsInitMethod) { + mParentVisitor.visitTableSwitchInsn(min, max, dflt, labels); + } + } + + @Override + public void visitTypeInsn(int opcode, String type) { + if (mIsInitMethod) { + mParentVisitor.visitTypeInsn(opcode, type); + } + } + + @Override + public void visitVarInsn(int opcode, int var) { + if (mIsInitMethod) { + mParentVisitor.visitVarInsn(opcode, var); + } + } + +} diff --git a/tools/layoutlib/create/src/com/android/tools/layoutlib/create/TransformClassAdapter.java b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/TransformClassAdapter.java new file mode 100644 index 0000000000000..d45a183124224 --- /dev/null +++ b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/TransformClassAdapter.java @@ -0,0 +1,183 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.tools.layoutlib.create; + +import org.objectweb.asm.ClassVisitor; +import org.objectweb.asm.FieldVisitor; +import org.objectweb.asm.MethodVisitor; +import org.objectweb.asm.Opcodes; +import org.objectweb.asm.Type; + +import java.util.Set; + +/** + * Class adapter that can stub some or all of the methods of the class. + */ +class TransformClassAdapter extends ClassVisitor { + + /** True if all methods should be stubbed, false if only native ones must be stubbed. */ + private final boolean mStubAll; + /** True if the class is an interface. */ + private boolean mIsInterface; + private final String mClassName; + private final Log mLog; + private final Set mStubMethods; + private Set mDeleteReturns; + + /** + * Creates a new class adapter that will stub some or all methods. + * @param logger + * @param stubMethods list of method signatures to always stub out + * @param deleteReturns list of types that trigger the deletion of methods returning them. + * @param className The name of the class being modified + * @param cv The parent class writer visitor + * @param stubNativesOnly True if only native methods should be stubbed. False if all + * methods should be stubbed. + * @param hasNative True if the method has natives, in which case its access should be + * changed. + */ + public TransformClassAdapter(Log logger, Set stubMethods, + Set deleteReturns, String className, ClassVisitor cv, + boolean stubNativesOnly, boolean hasNative) { + super(Opcodes.ASM4, cv); + mLog = logger; + mStubMethods = stubMethods; + mClassName = className; + mStubAll = !stubNativesOnly; + mIsInterface = false; + mDeleteReturns = deleteReturns; + } + + /* Visits the class header. */ + @Override + public void visit(int version, int access, String name, + String signature, String superName, String[] interfaces) { + + // This class might be being renamed. + name = mClassName; + + // remove protected or private and set as public + if (Main.sOptions.generatePublicAccess) { + access = access & ~(Opcodes.ACC_PRIVATE | Opcodes.ACC_PROTECTED); + access |= Opcodes.ACC_PUBLIC; + } + // remove final + access = access & ~Opcodes.ACC_FINAL; + // note: leave abstract classes as such + // don't try to implement stub for interfaces + + mIsInterface = ((access & Opcodes.ACC_INTERFACE) != 0); + super.visit(version, access, name, signature, superName, interfaces); + } + + /* Visits the header of an inner class. */ + @Override + public void visitInnerClass(String name, String outerName, String innerName, int access) { + // remove protected or private and set as public + if (Main.sOptions.generatePublicAccess) { + access = access & ~(Opcodes.ACC_PRIVATE | Opcodes.ACC_PROTECTED); + access |= Opcodes.ACC_PUBLIC; + } + // remove final + access = access & ~Opcodes.ACC_FINAL; + // note: leave abstract classes as such + // don't try to implement stub for interfaces + + super.visitInnerClass(name, outerName, innerName, access); + } + + /* Visits a method. */ + @Override + public MethodVisitor visitMethod(int access, String name, String desc, + String signature, String[] exceptions) { + + if (mDeleteReturns != null) { + Type t = Type.getReturnType(desc); + if (t.getSort() == Type.OBJECT) { + String returnType = t.getInternalName(); + if (returnType != null) { + if (mDeleteReturns.contains(returnType)) { + return null; + } + } + } + } + + String methodSignature = mClassName.replace('/', '.') + "#" + name; + + // change access to public + if (Main.sOptions.generatePublicAccess) { + access &= ~(Opcodes.ACC_PROTECTED | Opcodes.ACC_PRIVATE); + access |= Opcodes.ACC_PUBLIC; + } + + // remove final + access = access & ~Opcodes.ACC_FINAL; + + // stub this method if they are all to be stubbed or if it is a native method + // and don't try to stub interfaces nor abstract non-native methods. + if (!mIsInterface && + ((access & (Opcodes.ACC_ABSTRACT | Opcodes.ACC_NATIVE)) != Opcodes.ACC_ABSTRACT) && + (mStubAll || + (access & Opcodes.ACC_NATIVE) != 0) || + mStubMethods.contains(methodSignature)) { + + boolean isStatic = (access & Opcodes.ACC_STATIC) != 0; + boolean isNative = (access & Opcodes.ACC_NATIVE) != 0; + + // remove abstract, final and native + access = access & ~(Opcodes.ACC_ABSTRACT | Opcodes.ACC_FINAL | Opcodes.ACC_NATIVE); + + String invokeSignature = methodSignature + desc; + mLog.debug(" Stub: %s (%s)", invokeSignature, isNative ? "native" : ""); + + MethodVisitor mw = super.visitMethod(access, name, desc, signature, exceptions); + return new StubMethodAdapter(mw, name, returnType(desc), invokeSignature, + isStatic, isNative); + + } else { + mLog.debug(" Keep: %s %s", name, desc); + return super.visitMethod(access, name, desc, signature, exceptions); + } + } + + /* Visits a field. Makes it public. */ + @Override + public FieldVisitor visitField(int access, String name, String desc, String signature, + Object value) { + // change access to public + if (Main.sOptions.generatePublicAccess) { + access &= ~(Opcodes.ACC_PROTECTED | Opcodes.ACC_PRIVATE); + access |= Opcodes.ACC_PUBLIC; + } + return super.visitField(access, name, desc, signature, value); + } + + /** + * Extracts the return {@link Type} of this descriptor. + */ + Type returnType(String desc) { + if (desc != null) { + try { + return Type.getReturnType(desc); + } catch (ArrayIndexOutOfBoundsException e) { + // ignore, not a valid type. + } + } + return null; + } +} diff --git a/tools/layoutlib/create/tests/com/android/tools/layoutlib/create/AsmAnalyzerTest.java b/tools/layoutlib/create/tests/com/android/tools/layoutlib/create/AsmAnalyzerTest.java new file mode 100644 index 0000000000000..d6dba6a9fb341 --- /dev/null +++ b/tools/layoutlib/create/tests/com/android/tools/layoutlib/create/AsmAnalyzerTest.java @@ -0,0 +1,227 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +package com.android.tools.layoutlib.create; + +import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import com.android.tools.layoutlib.create.AsmAnalyzer.DependencyVisitor; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.objectweb.asm.ClassReader; + +import java.io.IOException; +import java.net.URL; +import java.util.ArrayList; +import java.util.Map; +import java.util.TreeMap; + +/** + * Unit tests for some methods of {@link AsmAnalyzer}. + */ +public class AsmAnalyzerTest { + + private MockLog mLog; + private ArrayList mOsJarPath; + private AsmAnalyzer mAa; + + @Before + public void setUp() throws Exception { + mLog = new MockLog(); + URL url = this.getClass().getClassLoader().getResource("data/mock_android.jar"); + + mOsJarPath = new ArrayList(); + mOsJarPath.add(url.getFile()); + + mAa = new AsmAnalyzer(mLog, mOsJarPath, null /* gen */, + null /* deriveFrom */, null /* includeGlobs */ ); + } + + @After + public void tearDown() throws Exception { + } + + @Test + public void testParseZip() throws IOException { + Map map = mAa.parseZip(mOsJarPath); + + assertArrayEquals(new String[] { + "mock_android.dummy.InnerTest", + "mock_android.dummy.InnerTest$DerivingClass", + "mock_android.dummy.InnerTest$MyGenerics1", + "mock_android.dummy.InnerTest$MyIntEnum", + "mock_android.dummy.InnerTest$MyStaticInnerClass", + "mock_android.dummy.InnerTest$NotStaticInner1", + "mock_android.dummy.InnerTest$NotStaticInner2", + "mock_android.view.View", + "mock_android.view.ViewGroup", + "mock_android.view.ViewGroup$LayoutParams", + "mock_android.view.ViewGroup$MarginLayoutParams", + "mock_android.widget.LinearLayout", + "mock_android.widget.LinearLayout$LayoutParams", + "mock_android.widget.TableLayout", + "mock_android.widget.TableLayout$LayoutParams" + }, + map.keySet().toArray()); + } + + @Test + public void testFindClass() throws IOException, LogAbortException { + Map zipClasses = mAa.parseZip(mOsJarPath); + TreeMap found = new TreeMap(); + + ClassReader cr = mAa.findClass("mock_android.view.ViewGroup$LayoutParams", + zipClasses, found); + + assertNotNull(cr); + assertEquals("mock_android/view/ViewGroup$LayoutParams", cr.getClassName()); + assertArrayEquals(new String[] { "mock_android.view.ViewGroup$LayoutParams" }, + found.keySet().toArray()); + assertArrayEquals(new ClassReader[] { cr }, found.values().toArray()); + } + + @Test + public void testFindGlobs() throws IOException, LogAbortException { + Map zipClasses = mAa.parseZip(mOsJarPath); + TreeMap found = new TreeMap(); + + // this matches classes, a package match returns nothing + found.clear(); + mAa.findGlobs("mock_android.view", zipClasses, found); + + assertArrayEquals(new String[] { }, + found.keySet().toArray()); + + // a complex glob search. * is a search pattern that matches names, not dots + mAa.findGlobs("mock_android.*.*Group$*Layout*", zipClasses, found); + + assertArrayEquals(new String[] { + "mock_android.view.ViewGroup$LayoutParams", + "mock_android.view.ViewGroup$MarginLayoutParams" + }, + found.keySet().toArray()); + + // a complex glob search. ** is a search pattern that matches names including dots + mAa.findGlobs("mock_android.**Group*", zipClasses, found); + + assertArrayEquals(new String[] { + "mock_android.view.ViewGroup", + "mock_android.view.ViewGroup$LayoutParams", + "mock_android.view.ViewGroup$MarginLayoutParams" + }, + found.keySet().toArray()); + + // matches a single class + found.clear(); + mAa.findGlobs("mock_android.view.View", zipClasses, found); + + assertArrayEquals(new String[] { + "mock_android.view.View" + }, + found.keySet().toArray()); + + // matches everyting inside the given package but not sub-packages + found.clear(); + mAa.findGlobs("mock_android.view.*", zipClasses, found); + + assertArrayEquals(new String[] { + "mock_android.view.View", + "mock_android.view.ViewGroup", + "mock_android.view.ViewGroup$LayoutParams", + "mock_android.view.ViewGroup$MarginLayoutParams" + }, + found.keySet().toArray()); + + for (String key : found.keySet()) { + ClassReader value = found.get(key); + assertNotNull("No value for " + key, value); + assertEquals(key, AsmAnalyzer.classReaderToClassName(value)); + } + } + + @Test + public void testFindClassesDerivingFrom() throws LogAbortException, IOException { + Map zipClasses = mAa.parseZip(mOsJarPath); + TreeMap found = new TreeMap(); + + mAa.findClassesDerivingFrom("mock_android.view.View", zipClasses, found); + + assertArrayEquals(new String[] { + "mock_android.view.View", + "mock_android.view.ViewGroup", + "mock_android.widget.LinearLayout", + "mock_android.widget.TableLayout", + }, + found.keySet().toArray()); + + for (String key : found.keySet()) { + ClassReader value = found.get(key); + assertNotNull("No value for " + key, value); + assertEquals(key, AsmAnalyzer.classReaderToClassName(value)); + } + } + + @Test + public void testDependencyVisitor() throws IOException, LogAbortException { + Map zipClasses = mAa.parseZip(mOsJarPath); + TreeMap keep = new TreeMap(); + TreeMap new_keep = new TreeMap(); + TreeMap in_deps = new TreeMap(); + TreeMap out_deps = new TreeMap(); + + ClassReader cr = mAa.findClass("mock_android.widget.TableLayout", zipClasses, keep); + DependencyVisitor visitor = mAa.getVisitor(zipClasses, keep, new_keep, in_deps, out_deps); + + // get first level dependencies + cr.accept(visitor, 0 /* flags */); + + assertArrayEquals(new String[] { + "mock_android.view.ViewGroup", + "mock_android.widget.TableLayout$LayoutParams", + }, + out_deps.keySet().toArray()); + + in_deps.putAll(out_deps); + out_deps.clear(); + + // get second level dependencies + for (ClassReader cr2 : in_deps.values()) { + cr2.accept(visitor, 0 /* flags */); + } + + assertArrayEquals(new String[] { + "mock_android.view.View", + "mock_android.view.ViewGroup$LayoutParams", + "mock_android.view.ViewGroup$MarginLayoutParams", + }, + out_deps.keySet().toArray()); + + in_deps.putAll(out_deps); + out_deps.clear(); + + // get third level dependencies (there are none) + for (ClassReader cr2 : in_deps.values()) { + cr2.accept(visitor, 0 /* flags */); + } + + assertArrayEquals(new String[] { }, out_deps.keySet().toArray()); + } +} diff --git a/tools/layoutlib/create/tests/com/android/tools/layoutlib/create/AsmGeneratorTest.java b/tools/layoutlib/create/tests/com/android/tools/layoutlib/create/AsmGeneratorTest.java new file mode 100644 index 0000000000000..7b76a5b2f9144 --- /dev/null +++ b/tools/layoutlib/create/tests/com/android/tools/layoutlib/create/AsmGeneratorTest.java @@ -0,0 +1,119 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +package com.android.tools.layoutlib.create; + + +import static org.junit.Assert.assertArrayEquals; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import java.io.File; +import java.io.IOException; +import java.net.URL; +import java.util.ArrayList; +import java.util.Set; + +/** + * Unit tests for some methods of {@link AsmGenerator}. + */ +public class AsmGeneratorTest { + + private MockLog mLog; + private ArrayList mOsJarPath; + private String mOsDestJar; + private File mTempFile; + + @Before + public void setUp() throws Exception { + mLog = new MockLog(); + URL url = this.getClass().getClassLoader().getResource("data/mock_android.jar"); + + mOsJarPath = new ArrayList(); + mOsJarPath.add(url.getFile()); + + mTempFile = File.createTempFile("mock", "jar"); + mOsDestJar = mTempFile.getAbsolutePath(); + mTempFile.deleteOnExit(); + } + + @After + public void tearDown() throws Exception { + if (mTempFile != null) { + mTempFile.delete(); + mTempFile = null; + } + } + + @Test + public void testClassRenaming() throws IOException, LogAbortException { + + ICreateInfo ci = new ICreateInfo() { + @Override + public Class[] getInjectedClasses() { + // classes to inject in the final JAR + return new Class[0]; + } + + @Override + public String[] getDelegateMethods() { + return new String[0]; + } + + @Override + public String[] getDelegateClassNatives() { + return new String[0]; + } + + @Override + public String[] getOverriddenMethods() { + // methods to force override + return new String[0]; + } + + @Override + public String[] getRenamedClasses() { + // classes to rename (so that we can replace them) + return new String[] { + "mock_android.view.View", "mock_android.view._Original_View", + "not.an.actual.ClassName", "anoter.fake.NewClassName", + }; + } + + @Override + public String[] getDeleteReturns() { + // methods deleted from their return type. + return new String[0]; + } + }; + + AsmGenerator agen = new AsmGenerator(mLog, mOsDestJar, ci); + + AsmAnalyzer aa = new AsmAnalyzer(mLog, mOsJarPath, agen, + null, // derived from + new String[] { // include classes + "**" + }); + aa.analyze(); + agen.generate(); + + Set notRenamed = agen.getClassesNotRenamed(); + assertArrayEquals(new String[] { "not/an/actual/ClassName" }, notRenamed.toArray()); + } +} diff --git a/tools/layoutlib/create/tests/com/android/tools/layoutlib/create/ClassHasNativeVisitorTest.java b/tools/layoutlib/create/tests/com/android/tools/layoutlib/create/ClassHasNativeVisitorTest.java new file mode 100644 index 0000000000000..0135c40e71abf --- /dev/null +++ b/tools/layoutlib/create/tests/com/android/tools/layoutlib/create/ClassHasNativeVisitorTest.java @@ -0,0 +1,102 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.tools.layoutlib.create; + +import static org.junit.Assert.*; + +import org.junit.Test; +import org.objectweb.asm.ClassReader; + +import java.io.IOException; +import java.util.ArrayList; + + +/** + * Tests {@link ClassHasNativeVisitor}. + */ +public class ClassHasNativeVisitorTest { + + @Test + public void testHasNative() throws IOException { + MockClassHasNativeVisitor cv = new MockClassHasNativeVisitor(); + String className = + this.getClass().getCanonicalName() + "$" + ClassWithNative.class.getSimpleName(); + ClassReader cr = new ClassReader(className); + + cr.accept(cv, 0 /* flags */); + assertArrayEquals(new String[] { "native_method" }, cv.getMethodsFound()); + assertTrue(cv.hasNativeMethods()); + } + + @Test + public void testHasNoNative() throws IOException { + MockClassHasNativeVisitor cv = new MockClassHasNativeVisitor(); + String className = + this.getClass().getCanonicalName() + "$" + ClassWithoutNative.class.getSimpleName(); + ClassReader cr = new ClassReader(className); + + cr.accept(cv, 0 /* flags */); + assertArrayEquals(new String[0], cv.getMethodsFound()); + assertFalse(cv.hasNativeMethods()); + } + + //------- + + /** + * Overrides {@link ClassHasNativeVisitor} to collec the name of the native methods found. + */ + private static class MockClassHasNativeVisitor extends ClassHasNativeVisitor { + private ArrayList mMethodsFound = new ArrayList(); + + public String[] getMethodsFound() { + return mMethodsFound.toArray(new String[mMethodsFound.size()]); + } + + @Override + protected void setHasNativeMethods(boolean hasNativeMethods, String methodName) { + if (hasNativeMethods) { + mMethodsFound.add(methodName); + } + super.setHasNativeMethods(hasNativeMethods, methodName); + } + } + + /** + * Dummy test class with a native method. + */ + public static class ClassWithNative { + public ClassWithNative() { + } + + public void callTheNativeMethod() { + native_method(); + } + + private native void native_method(); + } + + /** + * Dummy test class with no native method. + */ + public static class ClassWithoutNative { + public ClassWithoutNative() { + } + + public void someMethod() { + } + } +} diff --git a/tools/layoutlib/create/tests/com/android/tools/layoutlib/create/DelegateClassAdapterTest.java b/tools/layoutlib/create/tests/com/android/tools/layoutlib/create/DelegateClassAdapterTest.java new file mode 100644 index 0000000000000..6e120cefadf58 --- /dev/null +++ b/tools/layoutlib/create/tests/com/android/tools/layoutlib/create/DelegateClassAdapterTest.java @@ -0,0 +1,463 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.tools.layoutlib.create; + + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertSame; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +import com.android.tools.layoutlib.create.dataclass.ClassWithNative; +import com.android.tools.layoutlib.create.dataclass.OuterClass; +import com.android.tools.layoutlib.create.dataclass.OuterClass.InnerClass; + +import org.junit.Before; +import org.junit.Test; +import org.objectweb.asm.ClassReader; +import org.objectweb.asm.ClassVisitor; +import org.objectweb.asm.ClassWriter; + +import java.io.IOException; +import java.io.PrintWriter; +import java.io.StringWriter; +import java.lang.annotation.Annotation; +import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; + +public class DelegateClassAdapterTest { + + private MockLog mLog; + + private static final String NATIVE_CLASS_NAME = ClassWithNative.class.getCanonicalName(); + private static final String OUTER_CLASS_NAME = OuterClass.class.getCanonicalName(); + private static final String INNER_CLASS_NAME = OuterClass.class.getCanonicalName() + "$" + + InnerClass.class.getSimpleName(); + + @Before + public void setUp() throws Exception { + mLog = new MockLog(); + mLog.setVerbose(true); // capture debug error too + } + + /** + * Tests that a class not being modified still works. + */ + @SuppressWarnings("unchecked") + @Test + public void testNoOp() throws Throwable { + // create an instance of the class that will be modified + // (load the class in a distinct class loader so that we can trash its definition later) + ClassLoader cl1 = new ClassLoader(this.getClass().getClassLoader()) { }; + Class clazz1 = (Class) cl1.loadClass(NATIVE_CLASS_NAME); + ClassWithNative instance1 = clazz1.newInstance(); + assertEquals(42, instance1.add(20, 22)); + try { + instance1.callNativeInstance(10, 3.1415, new Object[0] ); + fail("Test should have failed to invoke callTheNativeMethod [1]"); + } catch (UnsatisfiedLinkError e) { + // This is expected to fail since the native method is not implemented. + } + + // Now process it but tell the delegate to not modify any method + ClassWriter cw = new ClassWriter(0 /*flags*/); + + HashSet delegateMethods = new HashSet(); + String internalClassName = NATIVE_CLASS_NAME.replace('.', '/'); + DelegateClassAdapter cv = new DelegateClassAdapter( + mLog, cw, internalClassName, delegateMethods); + + ClassReader cr = new ClassReader(NATIVE_CLASS_NAME); + cr.accept(cv, 0 /* flags */); + + // Load the generated class in a different class loader and try it again + + ClassLoader2 cl2 = null; + try { + cl2 = new ClassLoader2() { + @Override + public void testModifiedInstance() throws Exception { + Class clazz2 = loadClass(NATIVE_CLASS_NAME); + Object i2 = clazz2.newInstance(); + assertNotNull(i2); + assertEquals(42, callAdd(i2, 20, 22)); + + try { + callCallNativeInstance(i2, 10, 3.1415, new Object[0]); + fail("Test should have failed to invoke callTheNativeMethod [2]"); + } catch (InvocationTargetException e) { + // This is expected to fail since the native method has NOT been + // overridden here. + assertEquals(UnsatisfiedLinkError.class, e.getCause().getClass()); + } + + // Check that the native method does NOT have the new annotation + Method[] m = clazz2.getDeclaredMethods(); + assertEquals("native_instance", m[2].getName()); + assertTrue(Modifier.isNative(m[2].getModifiers())); + Annotation[] a = m[2].getAnnotations(); + assertEquals(0, a.length); + } + }; + cl2.add(NATIVE_CLASS_NAME, cw); + cl2.testModifiedInstance(); + } catch (Throwable t) { + throw dumpGeneratedClass(t, cl2); + } + } + + /** + * {@link DelegateMethodAdapter2} does not support overriding constructors yet, + * so this should fail with an {@link UnsupportedOperationException}. + * + * Although not tested here, the message of the exception should contain the + * constructor signature. + */ + @Test(expected=UnsupportedOperationException.class) + public void testConstructorsNotSupported() throws IOException { + ClassWriter cw = new ClassWriter(0 /*flags*/); + + String internalClassName = NATIVE_CLASS_NAME.replace('.', '/'); + + HashSet delegateMethods = new HashSet(); + delegateMethods.add(""); + DelegateClassAdapter cv = new DelegateClassAdapter( + mLog, cw, internalClassName, delegateMethods); + + ClassReader cr = new ClassReader(NATIVE_CLASS_NAME); + cr.accept(cv, 0 /* flags */); + } + + @Test + public void testDelegateNative() throws Throwable { + ClassWriter cw = new ClassWriter(0 /*flags*/); + String internalClassName = NATIVE_CLASS_NAME.replace('.', '/'); + + HashSet delegateMethods = new HashSet(); + delegateMethods.add(DelegateClassAdapter.ALL_NATIVES); + DelegateClassAdapter cv = new DelegateClassAdapter( + mLog, cw, internalClassName, delegateMethods); + + ClassReader cr = new ClassReader(NATIVE_CLASS_NAME); + cr.accept(cv, 0 /* flags */); + + // Load the generated class in a different class loader and try it + ClassLoader2 cl2 = null; + try { + cl2 = new ClassLoader2() { + @Override + public void testModifiedInstance() throws Exception { + Class clazz2 = loadClass(NATIVE_CLASS_NAME); + Object i2 = clazz2.newInstance(); + assertNotNull(i2); + + // Use reflection to access inner methods + assertEquals(42, callAdd(i2, 20, 22)); + + Object[] objResult = new Object[] { null }; + int result = callCallNativeInstance(i2, 10, 3.1415, objResult); + assertEquals((int)(10 + 3.1415), result); + assertSame(i2, objResult[0]); + + // Check that the native method now has the new annotation and is not native + Method[] m = clazz2.getDeclaredMethods(); + assertEquals("native_instance", m[2].getName()); + assertFalse(Modifier.isNative(m[2].getModifiers())); + Annotation[] a = m[2].getAnnotations(); + assertEquals("LayoutlibDelegate", a[0].annotationType().getSimpleName()); + } + }; + cl2.add(NATIVE_CLASS_NAME, cw); + cl2.testModifiedInstance(); + } catch (Throwable t) { + throw dumpGeneratedClass(t, cl2); + } + } + + @Test + public void testDelegateInner() throws Throwable { + // We'll delegate the "get" method of both the inner and outer class. + HashSet delegateMethods = new HashSet(); + delegateMethods.add("get"); + delegateMethods.add("privateMethod"); + + // Generate the delegate for the outer class. + ClassWriter cwOuter = new ClassWriter(0 /*flags*/); + String outerClassName = OUTER_CLASS_NAME.replace('.', '/'); + DelegateClassAdapter cvOuter = new DelegateClassAdapter( + mLog, cwOuter, outerClassName, delegateMethods); + ClassReader cr = new ClassReader(OUTER_CLASS_NAME); + cr.accept(cvOuter, 0 /* flags */); + + // Generate the delegate for the inner class. + ClassWriter cwInner = new ClassWriter(0 /*flags*/); + String innerClassName = INNER_CLASS_NAME.replace('.', '/'); + DelegateClassAdapter cvInner = new DelegateClassAdapter( + mLog, cwInner, innerClassName, delegateMethods); + cr = new ClassReader(INNER_CLASS_NAME); + cr.accept(cvInner, 0 /* flags */); + + // Load the generated classes in a different class loader and try them + ClassLoader2 cl2 = null; + try { + cl2 = new ClassLoader2() { + @Override + public void testModifiedInstance() throws Exception { + + // Check the outer class + Class outerClazz2 = loadClass(OUTER_CLASS_NAME); + Object o2 = outerClazz2.newInstance(); + assertNotNull(o2); + + // The original Outer.get returns 1+10+20, + // but the delegate makes it return 4+10+20 + assertEquals(4+10+20, callGet(o2, 10, 20)); + assertEquals(1+10+20, callGet_Original(o2, 10, 20)); + + // The original Outer has a private method that is + // delegated. We should be able to call both the delegate + // and the original (which is now public). + assertEquals("outerPrivateMethod", + callMethod(o2, "privateMethod_Original", false /*makePublic*/)); + + // The original method is private, so by default we can't access it + boolean gotIllegalAccessException = false; + try { + callMethod(o2, "privateMethod", false /*makePublic*/); + } catch(IllegalAccessException e) { + gotIllegalAccessException = true; + } + assertTrue(gotIllegalAccessException); + // Try again, but now making it accessible + assertEquals("outerPrivate_Delegate", + callMethod(o2, "privateMethod", true /*makePublic*/)); + + // Check the inner class. Since it's not a static inner class, we need + // to use the hidden constructor that takes the outer class as first parameter. + Class innerClazz2 = loadClass(INNER_CLASS_NAME); + Constructor innerCons = innerClazz2.getConstructor( + new Class[] { outerClazz2 }); + Object i2 = innerCons.newInstance(new Object[] { o2 }); + assertNotNull(i2); + + // The original Inner.get returns 3+10+20, + // but the delegate makes it return 6+10+20 + assertEquals(6+10+20, callGet(i2, 10, 20)); + assertEquals(3+10+20, callGet_Original(i2, 10, 20)); + } + }; + cl2.add(OUTER_CLASS_NAME, cwOuter.toByteArray()); + cl2.add(INNER_CLASS_NAME, cwInner.toByteArray()); + cl2.testModifiedInstance(); + } catch (Throwable t) { + throw dumpGeneratedClass(t, cl2); + } + } + + //------- + + /** + * A class loader than can define and instantiate our modified classes. + *

+ * The trick here is that this class loader will test our modified version + * of the classes, the one with the delegate calls. + *

+ * Trying to do so in the original class loader generates all sort of link issues because + * there are 2 different definitions of the same class name. This class loader will + * define and load the class when requested by name and provide helpers to access the + * instance methods via reflection. + */ + private abstract class ClassLoader2 extends ClassLoader { + + private final Map mClassDefs = new HashMap(); + + public ClassLoader2() { + super(null); + } + + public ClassLoader2 add(String className, byte[] definition) { + mClassDefs.put(className, definition); + return this; + } + + public ClassLoader2 add(String className, ClassWriter rewrittenClass) { + mClassDefs.put(className, rewrittenClass.toByteArray()); + return this; + } + + private Set> getByteCode() { + return mClassDefs.entrySet(); + } + + @SuppressWarnings("unused") + @Override + protected Class findClass(String name) throws ClassNotFoundException { + try { + return super.findClass(name); + } catch (ClassNotFoundException e) { + + byte[] def = mClassDefs.get(name); + if (def != null) { + // Load the modified ClassWithNative from its bytes representation. + return defineClass(name, def, 0, def.length); + } + + try { + // Load everything else from the original definition into the new class loader. + ClassReader cr = new ClassReader(name); + ClassWriter cw = new ClassWriter(0); + cr.accept(cw, 0); + byte[] bytes = cw.toByteArray(); + return defineClass(name, bytes, 0, bytes.length); + + } catch (IOException ioe) { + throw new RuntimeException(ioe); + } + } + } + + /** + * Accesses {@link OuterClass#get} or {@link InnerClass#get}via reflection. + */ + public int callGet(Object instance, int a, long b) throws Exception { + Method m = instance.getClass().getMethod("get", + new Class[] { int.class, long.class } ); + + Object result = m.invoke(instance, new Object[] { a, b }); + return ((Integer) result).intValue(); + } + + /** + * Accesses the "_Original" methods for {@link OuterClass#get} + * or {@link InnerClass#get}via reflection. + */ + public int callGet_Original(Object instance, int a, long b) throws Exception { + Method m = instance.getClass().getMethod("get_Original", + new Class[] { int.class, long.class } ); + + Object result = m.invoke(instance, new Object[] { a, b }); + return ((Integer) result).intValue(); + } + + /** + * Accesses the any declared method that takes no parameter via reflection. + */ + @SuppressWarnings("unchecked") + public T callMethod(Object instance, String methodName, boolean makePublic) throws Exception { + Method m = instance.getClass().getDeclaredMethod(methodName, (Class[])null); + + boolean wasAccessible = m.isAccessible(); + if (makePublic && !wasAccessible) { + m.setAccessible(true); + } + + Object result = m.invoke(instance, (Object[])null); + + if (makePublic && !wasAccessible) { + m.setAccessible(false); + } + + return (T) result; + } + + /** + * Accesses {@link ClassWithNative#add(int, int)} via reflection. + */ + public int callAdd(Object instance, int a, int b) throws Exception { + Method m = instance.getClass().getMethod("add", + new Class[] { int.class, int.class }); + + Object result = m.invoke(instance, new Object[] { a, b }); + return ((Integer) result).intValue(); + } + + /** + * Accesses {@link ClassWithNative#callNativeInstance(int, double, Object[])} + * via reflection. + */ + public int callCallNativeInstance(Object instance, int a, double d, Object[] o) + throws Exception { + Method m = instance.getClass().getMethod("callNativeInstance", + new Class[] { int.class, double.class, Object[].class }); + + Object result = m.invoke(instance, new Object[] { a, d, o }); + return ((Integer) result).intValue(); + } + + public abstract void testModifiedInstance() throws Exception; + } + + /** + * For debugging, it's useful to dump the content of the generated classes + * along with the exception that was generated. + * + * However to make it work you need to pull in the org.objectweb.asm.util.TraceClassVisitor + * class and associated utilities which are found in the ASM source jar. Since we don't + * want that dependency in the source code, we only put it manually for development and + * access the TraceClassVisitor via reflection if present. + * + * @param t The exception thrown by {@link ClassLoader2#testModifiedInstance()} + * @param cl2 The {@link ClassLoader2} instance with the generated bytecode. + * @return Either original {@code t} or a new wrapper {@link Throwable} + */ + private Throwable dumpGeneratedClass(Throwable t, ClassLoader2 cl2) { + try { + // For debugging, dump the bytecode of the class in case of unexpected error + // if we can find the TraceClassVisitor class. + Class tcvClass = Class.forName("org.objectweb.asm.util.TraceClassVisitor"); + + StringBuilder sb = new StringBuilder(); + sb.append('\n').append(t.getClass().getCanonicalName()); + if (t.getMessage() != null) { + sb.append(": ").append(t.getMessage()); + } + + for (Entry entry : cl2.getByteCode()) { + String className = entry.getKey(); + byte[] bytes = entry.getValue(); + + StringWriter sw = new StringWriter(); + PrintWriter pw = new PrintWriter(sw); + // next 2 lines do: TraceClassVisitor tcv = new TraceClassVisitor(pw); + Constructor cons = tcvClass.getConstructor(new Class[] { pw.getClass() }); + Object tcv = cons.newInstance(new Object[] { pw }); + ClassReader cr2 = new ClassReader(bytes); + cr2.accept((ClassVisitor) tcv, 0 /* flags */); + + sb.append("\nBytecode dump: <").append(className).append(">:\n") + .append(sw.toString()); + } + + // Re-throw exception with new message + RuntimeException ex = new RuntimeException(sb.toString(), t); + return ex; + } catch (Throwable ignore) { + // In case of problem, just throw the original exception as-is. + return t; + } + } + +} diff --git a/tools/layoutlib/create/tests/com/android/tools/layoutlib/create/LogTest.java b/tools/layoutlib/create/tests/com/android/tools/layoutlib/create/LogTest.java new file mode 100644 index 0000000000000..1a5f653fd3333 --- /dev/null +++ b/tools/layoutlib/create/tests/com/android/tools/layoutlib/create/LogTest.java @@ -0,0 +1,88 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.tools.layoutlib.create; + +import static org.junit.Assert.*; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +public class LogTest { + + private MockLog mLog; + + @Before + public void setUp() throws Exception { + mLog = new MockLog(); + } + + @After + public void tearDown() throws Exception { + // pass + } + + @Test + public void testDebug() { + assertEquals("", mLog.getOut()); + assertEquals("", mLog.getErr()); + + mLog.setVerbose(false); + mLog.debug("Test %d", 42); + assertEquals("", mLog.getOut()); + + mLog.setVerbose(true); + mLog.debug("Test %d", 42); + + assertEquals("Test 42\n", mLog.getOut()); + assertEquals("", mLog.getErr()); + } + + @Test + public void testInfo() { + assertEquals("", mLog.getOut()); + assertEquals("", mLog.getErr()); + + mLog.info("Test %d", 43); + + assertEquals("Test 43\n", mLog.getOut()); + assertEquals("", mLog.getErr()); + } + + @Test + public void testError() { + assertEquals("", mLog.getOut()); + assertEquals("", mLog.getErr()); + + mLog.error("Test %d", 44); + + assertEquals("", mLog.getOut()); + assertEquals("Test 44\n", mLog.getErr()); + } + + @Test + public void testException() { + assertEquals("", mLog.getOut()); + assertEquals("", mLog.getErr()); + + Exception e = new Exception("My Exception"); + mLog.exception(e, "Test %d", 44); + + assertEquals("", mLog.getOut()); + assertTrue(mLog.getErr().startsWith("Test 44\njava.lang.Exception: My Exception")); + } +} diff --git a/tools/layoutlib/create/tests/com/android/tools/layoutlib/create/MockLog.java b/tools/layoutlib/create/tests/com/android/tools/layoutlib/create/MockLog.java new file mode 100644 index 0000000000000..de750a3af14de --- /dev/null +++ b/tools/layoutlib/create/tests/com/android/tools/layoutlib/create/MockLog.java @@ -0,0 +1,43 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.tools.layoutlib.create; + + +public class MockLog extends Log { + StringBuilder mOut = new StringBuilder(); + StringBuilder mErr = new StringBuilder(); + + public String getOut() { + return mOut.toString(); + } + + public String getErr() { + return mErr.toString(); + } + + @Override + protected void outPrintln(String msg) { + mOut.append(msg); + mOut.append('\n'); + } + + @Override + protected void errPrintln(String msg) { + mErr.append(msg); + mErr.append('\n'); + } +} diff --git a/tools/layoutlib/create/tests/com/android/tools/layoutlib/create/RenameClassAdapterTest.java b/tools/layoutlib/create/tests/com/android/tools/layoutlib/create/RenameClassAdapterTest.java new file mode 100644 index 0000000000000..90c6a9c9ac7ce --- /dev/null +++ b/tools/layoutlib/create/tests/com/android/tools/layoutlib/create/RenameClassAdapterTest.java @@ -0,0 +1,120 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +package com.android.tools.layoutlib.create; + +import static org.junit.Assert.*; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +/** + * + */ +public class RenameClassAdapterTest { + + private RenameClassAdapter mOuter; + private RenameClassAdapter mInner; + + @Before + public void setUp() throws Exception { + mOuter = new RenameClassAdapter(null, // cv + "com.pack.Old", + "org.blah.New"); + + mInner = new RenameClassAdapter(null, // cv + "com.pack.Old$Inner", + "org.blah.New$Inner"); + } + + @After + public void tearDown() throws Exception { + } + + /** + * Renames a type, e.g. "Lcom.package.My;" + * If the type doesn't need to be renamed, returns the input string as-is. + */ + @Test + public void testRenameTypeDesc() { + + // primitive types are left untouched + assertEquals("I", mOuter.renameTypeDesc("I")); + assertEquals("D", mOuter.renameTypeDesc("D")); + assertEquals("V", mOuter.renameTypeDesc("V")); + + // object types that need no renaming are left untouched + assertEquals("Lcom.package.MyClass;", mOuter.renameTypeDesc("Lcom.package.MyClass;")); + assertEquals("Lcom.package.MyClass;", mInner.renameTypeDesc("Lcom.package.MyClass;")); + + // object types that match the requirements + assertEquals("Lorg.blah.New;", mOuter.renameTypeDesc("Lcom.pack.Old;")); + assertEquals("Lorg.blah.New$Inner;", mInner.renameTypeDesc("Lcom.pack.Old$Inner;")); + // inner classes match the base type which is being renamed + assertEquals("Lorg.blah.New$Other;", mOuter.renameTypeDesc("Lcom.pack.Old$Other;")); + assertEquals("Lorg.blah.New$Other;", mInner.renameTypeDesc("Lcom.pack.Old$Other;")); + + // arrays + assertEquals("[Lorg.blah.New;", mOuter.renameTypeDesc("[Lcom.pack.Old;")); + assertEquals("[[Lorg.blah.New;", mOuter.renameTypeDesc("[[Lcom.pack.Old;")); + + assertEquals("[Lorg.blah.New;", mInner.renameTypeDesc("[Lcom.pack.Old;")); + assertEquals("[[Lorg.blah.New;", mInner.renameTypeDesc("[[Lcom.pack.Old;")); + } + + /** + * Renames an object type, e.g. "Lcom.package.MyClass;" or an array type that has an + * object element, e.g. "[Lcom.package.MyClass;" + * If the type doesn't need to be renamed, returns the internal name of the input type. + */ + @Test + public void testRenameType() { + // Skip. This is actually tested by testRenameTypeDesc above. + } + + /** + * Renames an internal type name, e.g. "com.package.MyClass". + * If the type doesn't need to be renamed, returns the input string as-is. + */ + @Test + public void testRenameInternalType() { + // a descriptor is not left untouched + assertEquals("Lorg.blah.New;", mOuter.renameInternalType("Lcom.pack.Old;")); + assertEquals("Lorg.blah.New$Inner;", mOuter.renameInternalType("Lcom.pack.Old$Inner;")); + + // an actual FQCN + assertEquals("org.blah.New", mOuter.renameInternalType("com.pack.Old")); + assertEquals("org.blah.New$Inner", mOuter.renameInternalType("com.pack.Old$Inner")); + + assertEquals("org.blah.New$Other", mInner.renameInternalType("com.pack.Old$Other")); + assertEquals("org.blah.New$Other", mInner.renameInternalType("com.pack.Old$Other")); + } + + /** + * Renames a method descriptor, i.e. applies renameType to all arguments and to the + * return value. + */ + @Test + public void testRenameMethodDesc() { + assertEquals("(IDLorg.blah.New;[Lorg.blah.New$Inner;)Lorg.blah.New$Other;", + mOuter.renameMethodDesc("(IDLcom.pack.Old;[Lcom.pack.Old$Inner;)Lcom.pack.Old$Other;")); + } + + + +} diff --git a/tools/layoutlib/create/tests/com/android/tools/layoutlib/create/dataclass/ClassWithNative.java b/tools/layoutlib/create/tests/com/android/tools/layoutlib/create/dataclass/ClassWithNative.java new file mode 100644 index 0000000000000..c314853d7bb26 --- /dev/null +++ b/tools/layoutlib/create/tests/com/android/tools/layoutlib/create/dataclass/ClassWithNative.java @@ -0,0 +1,45 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.tools.layoutlib.create.dataclass; + +import com.android.tools.layoutlib.create.DelegateClassAdapterTest; + +/** + * Dummy test class with a native method. + * The native method is not defined and any attempt to invoke it will + * throw an {@link UnsatisfiedLinkError}. + * + * Used by {@link DelegateClassAdapterTest}. + */ +public class ClassWithNative { + public ClassWithNative() { + } + + public int add(int a, int b) { + return a + b; + } + + // Note: it's good to have a long or double for testing parameters since they take + // 2 slots in the stack/locals maps. + + public int callNativeInstance(int a, double d, Object[] o) { + return native_instance(a, d, o); + } + + private native int native_instance(int a, double d, Object[] o); +} + diff --git a/tools/layoutlib/create/tests/com/android/tools/layoutlib/create/dataclass/ClassWithNative_Delegate.java b/tools/layoutlib/create/tests/com/android/tools/layoutlib/create/dataclass/ClassWithNative_Delegate.java new file mode 100644 index 0000000000000..a3d4dc60bb196 --- /dev/null +++ b/tools/layoutlib/create/tests/com/android/tools/layoutlib/create/dataclass/ClassWithNative_Delegate.java @@ -0,0 +1,34 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.tools.layoutlib.create.dataclass; + +import com.android.tools.layoutlib.create.DelegateClassAdapterTest; + +/** + * The delegate that receives the call to {@link ClassWithNative_Delegate}'s overridden methods. + * + * Used by {@link DelegateClassAdapterTest}. + */ +public class ClassWithNative_Delegate { + public static int native_instance(ClassWithNative instance, int a, double d, Object[] o) { + if (o != null && o.length > 0) { + o[0] = instance; + } + return (int)(a + d); + } +} + diff --git a/tools/layoutlib/create/tests/com/android/tools/layoutlib/create/dataclass/OuterClass.java b/tools/layoutlib/create/tests/com/android/tools/layoutlib/create/dataclass/OuterClass.java new file mode 100644 index 0000000000000..f083e76d995c6 --- /dev/null +++ b/tools/layoutlib/create/tests/com/android/tools/layoutlib/create/dataclass/OuterClass.java @@ -0,0 +1,53 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.tools.layoutlib.create.dataclass; + +import com.android.tools.layoutlib.create.DelegateClassAdapterTest; + +/** + * Test class with an inner class. + * + * Used by {@link DelegateClassAdapterTest}. + */ +public class OuterClass { + private int mOuterValue = 1; + public OuterClass() { + } + + // Outer.get returns 1 + a + b + // Note: it's good to have a long or double for testing parameters since they take + // 2 slots in the stack/locals maps. + public int get(int a, long b) { + return mOuterValue + a + (int) b; + } + + public class InnerClass { + public InnerClass() { + } + + // Inner.get returns 2 + 1 + a + b + public int get(int a, long b) { + return 2 + mOuterValue + a + (int) b; + } + } + + @SuppressWarnings("unused") + private String privateMethod() { + return "outerPrivateMethod"; + } +} + diff --git a/tools/layoutlib/create/tests/com/android/tools/layoutlib/create/dataclass/OuterClass_Delegate.java b/tools/layoutlib/create/tests/com/android/tools/layoutlib/create/dataclass/OuterClass_Delegate.java new file mode 100644 index 0000000000000..774be8e3dcbcb --- /dev/null +++ b/tools/layoutlib/create/tests/com/android/tools/layoutlib/create/dataclass/OuterClass_Delegate.java @@ -0,0 +1,34 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.tools.layoutlib.create.dataclass; + +import com.android.tools.layoutlib.create.DelegateClassAdapterTest; + +/** + * Used by {@link DelegateClassAdapterTest}. + */ +public class OuterClass_Delegate { + // The delegate override of Outer.get returns 4 + a + b + public static int get(OuterClass instance, int a, long b) { + return 4 + a + (int) b; + } + + public static String privateMethod(OuterClass instance) { + return "outerPrivate_Delegate"; + } +} + diff --git a/tools/layoutlib/create/tests/com/android/tools/layoutlib/create/dataclass/OuterClass_InnerClass_Delegate.java b/tools/layoutlib/create/tests/com/android/tools/layoutlib/create/dataclass/OuterClass_InnerClass_Delegate.java new file mode 100644 index 0000000000000..b4722205c328d --- /dev/null +++ b/tools/layoutlib/create/tests/com/android/tools/layoutlib/create/dataclass/OuterClass_InnerClass_Delegate.java @@ -0,0 +1,30 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.tools.layoutlib.create.dataclass; + +import com.android.tools.layoutlib.create.DelegateClassAdapterTest; +import com.android.tools.layoutlib.create.dataclass.OuterClass.InnerClass; + +/** + * Used by {@link DelegateClassAdapterTest}. + */ +public class OuterClass_InnerClass_Delegate { + // The delegate override of Inner.get return 6 + a + b + public static int get(OuterClass outer, InnerClass inner, int a, long b) { + return 6 + a + (int) b; + } +} diff --git a/tools/layoutlib/create/tests/data/mock_android.jar b/tools/layoutlib/create/tests/data/mock_android.jar new file mode 100644 index 0000000000000000000000000000000000000000..a7ea74f4adf20095e408371e13f8c3fa054b6ca8 GIT binary patch literal 9075 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 X{}~K;gzK+hLT=&kP*5Xe*YExh)1&o; literal 0 HcmV?d00001 diff --git a/tools/layoutlib/create/tests/data/mock_android.jardesc b/tools/layoutlib/create/tests/data/mock_android.jardesc new file mode 100644 index 0000000000000..95f7591d7046a --- /dev/null +++ b/tools/layoutlib/create/tests/data/mock_android.jardesc @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/tools/layoutlib/create/tests/mock_android/dummy/InnerTest.java b/tools/layoutlib/create/tests/mock_android/dummy/InnerTest.java new file mode 100644 index 0000000000000..e355ead16a7d2 --- /dev/null +++ b/tools/layoutlib/create/tests/mock_android/dummy/InnerTest.java @@ -0,0 +1,90 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * Licensed under the Eclipse Public License, Version 1.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.eclipse.org/org/documents/epl-v10.php + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package mock_android.dummy; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Iterator; + +public class InnerTest { + + private int mSomeField; + private MyStaticInnerClass mInnerInstance; + private MyIntEnum mTheIntEnum; + private MyGenerics1 mGeneric1; + + public class NotStaticInner2 extends NotStaticInner1 { + + } + + public class NotStaticInner1 { + + public void someThing() { + mSomeField = 2; + mInnerInstance = null; + } + + } + + private static class MyStaticInnerClass { + + } + + private static class DerivingClass extends InnerTest { + + } + + // enums are a kind of inner static class + public enum MyIntEnum { + VALUE0(0), + VALUE1(1), + VALUE2(2); + + MyIntEnum(int myInt) { + this.myInt = myInt; + } + final int myInt; + } + + public static class MyGenerics1 { + public MyGenerics1() { + int a = 1; + } + } + + public void genericMethod1(X a, X[] a) { + } + + public void genericMethod2(X a, List b) { + } + + public void genericMethod3(X a, List b) { + } + + public void genericMethod4(T[] a, Collection b, Collection c) { + Iterator i = b.iterator(); + } + + public void someMethod(InnerTest self) { + mSomeField = self.mSomeField; + MyStaticInnerClass m = new MyStaticInnerClass(); + mInnerInstance = m; + mTheIntEnum = null; + mGeneric1 = new MyGenerics1(); + genericMethod(new DerivingClass[0], new ArrayList(), new ArrayList()); + } +} diff --git a/tools/layoutlib/create/tests/mock_android/view/View.java b/tools/layoutlib/create/tests/mock_android/view/View.java new file mode 100644 index 0000000000000..a80a98daf1d47 --- /dev/null +++ b/tools/layoutlib/create/tests/mock_android/view/View.java @@ -0,0 +1,21 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * Licensed under the Eclipse Public License, Version 1.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.eclipse.org/org/documents/epl-v10.php + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package mock_android.view; + +public class View { + +} diff --git a/tools/layoutlib/create/tests/mock_android/view/ViewGroup.java b/tools/layoutlib/create/tests/mock_android/view/ViewGroup.java new file mode 100644 index 0000000000000..466470fc15376 --- /dev/null +++ b/tools/layoutlib/create/tests/mock_android/view/ViewGroup.java @@ -0,0 +1,29 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * Licensed under the Eclipse Public License, Version 1.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.eclipse.org/org/documents/epl-v10.php + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package mock_android.view; + +public class ViewGroup extends View { + + public class MarginLayoutParams extends LayoutParams { + + } + + public class LayoutParams { + + } + +} diff --git a/tools/layoutlib/create/tests/mock_android/widget/LinearLayout.java b/tools/layoutlib/create/tests/mock_android/widget/LinearLayout.java new file mode 100644 index 0000000000000..3870a63d97822 --- /dev/null +++ b/tools/layoutlib/create/tests/mock_android/widget/LinearLayout.java @@ -0,0 +1,27 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * Licensed under the Eclipse Public License, Version 1.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.eclipse.org/org/documents/epl-v10.php + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package mock_android.widget; + +import mock_android.view.ViewGroup; + +public class LinearLayout extends ViewGroup { + + public class LayoutParams extends mock_android.view.ViewGroup.LayoutParams { + + } + +} diff --git a/tools/layoutlib/create/tests/mock_android/widget/TableLayout.java b/tools/layoutlib/create/tests/mock_android/widget/TableLayout.java new file mode 100644 index 0000000000000..e455e7d61fd38 --- /dev/null +++ b/tools/layoutlib/create/tests/mock_android/widget/TableLayout.java @@ -0,0 +1,27 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * Licensed under the Eclipse Public License, Version 1.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.eclipse.org/org/documents/epl-v10.php + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package mock_android.widget; + +import mock_android.view.ViewGroup; + +public class TableLayout extends ViewGroup { + + public class LayoutParams extends MarginLayoutParams { + + } + +} diff --git a/tools/obbtool/Android.mk b/tools/obbtool/Android.mk new file mode 100644 index 0000000000000..9ff56d634c21d --- /dev/null +++ b/tools/obbtool/Android.mk @@ -0,0 +1,48 @@ +# +# Copyright 2010 The Android Open Source Project +# +# Opaque Binary Blob (OBB) Tool +# + +# This tool is prebuilt if we're doing an app-only build. +ifeq ($(TARGET_BUILD_APPS),) + +LOCAL_PATH:= $(call my-dir) +include $(CLEAR_VARS) + +LOCAL_SRC_FILES := \ + Main.cpp + +LOCAL_CFLAGS := -Wall -Werror + +#LOCAL_C_INCLUDES += + +LOCAL_STATIC_LIBRARIES := \ + libandroidfw \ + libutils \ + libcutils \ + liblog + +ifeq ($(HOST_OS),linux) +LOCAL_LDLIBS += -ldl -lpthread +endif + +LOCAL_MODULE := obbtool + +include $(BUILD_HOST_EXECUTABLE) + +##################################################### +include $(CLEAR_VARS) + +LOCAL_MODULE := pbkdf2gen +LOCAL_MODULE_TAGS := optional +LOCAL_CFLAGS := -Wall -Werror +LOCAL_SRC_FILES := pbkdf2gen.cpp +LOCAL_LDLIBS += -ldl +LOCAL_C_INCLUDES := external/openssl/include $(LOCAL_C_INCLUDES) +LOCAL_STATIC_LIBRARIES := libcrypto_static + +include $(BUILD_HOST_EXECUTABLE) + +####################################################### +endif # TARGET_BUILD_APPS diff --git a/tools/obbtool/Main.cpp b/tools/obbtool/Main.cpp new file mode 100644 index 0000000000000..b2152e8f84681 --- /dev/null +++ b/tools/obbtool/Main.cpp @@ -0,0 +1,301 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include + +#include +#include +#include +#include + +using namespace android; + +static const char* gProgName = "obbtool"; +static const char* gProgVersion = "1.0"; + +static int wantUsage = 0; +static int wantVersion = 0; + +#define SALT_LEN 8 + +#define ADD_OPTS "n:v:os:" +static const struct option longopts[] = { + {"help", no_argument, &wantUsage, 1}, + {"version", no_argument, &wantVersion, 1}, + + /* Args for "add" */ + {"name", required_argument, NULL, 'n'}, + {"version", required_argument, NULL, 'v'}, + {"overlay", optional_argument, NULL, 'o'}, + {"salt", required_argument, NULL, 's'}, + + {NULL, 0, NULL, '\0'} +}; + +class PackageInfo { +public: + PackageInfo() + : packageName(NULL) + , packageVersion(-1) + , overlay(false) + , salted(false) + { + memset(&salt, 0, sizeof(salt)); + } + + char* packageName; + int packageVersion; + bool overlay; + bool salted; + unsigned char salt[SALT_LEN]; +}; + +/* + * Print usage info. + */ +void usage(void) +{ + fprintf(stderr, "Opaque Binary Blob (OBB) Tool\n\n"); + fprintf(stderr, "Usage:\n"); + fprintf(stderr, + " %s a[dd] [ OPTIONS ] FILENAME\n" + " Adds an OBB signature to the file.\n\n", gProgName); + fprintf(stderr, + " Options:\n" + " -n sets the OBB package name (required)\n" + " -v sets the OBB version (required)\n" + " -o sets the OBB overlay flag\n" + " -s <8 byte hex salt> sets the crypto key salt (if encrypted)\n" + "\n"); + fprintf(stderr, + " %s r[emove] FILENAME\n" + " Removes the OBB signature from the file.\n\n", gProgName); + fprintf(stderr, + " %s i[nfo] FILENAME\n" + " Prints the OBB signature information of a file.\n\n", gProgName); +} + +void doAdd(const char* filename, struct PackageInfo* info) { + ObbFile *obb = new ObbFile(); + if (obb->readFrom(filename)) { + fprintf(stderr, "ERROR: %s: OBB signature already present\n", filename); + return; + } + + obb->setPackageName(String8(info->packageName)); + obb->setVersion(info->packageVersion); + obb->setOverlay(info->overlay); + if (info->salted) { + obb->setSalt(info->salt, SALT_LEN); + } + + if (!obb->writeTo(filename)) { + fprintf(stderr, "ERROR: %s: couldn't write OBB signature: %s\n", + filename, strerror(errno)); + return; + } + + fprintf(stderr, "OBB signature successfully written\n"); +} + +void doRemove(const char* filename) { + ObbFile *obb = new ObbFile(); + if (!obb->readFrom(filename)) { + fprintf(stderr, "ERROR: %s: no OBB signature present\n", filename); + return; + } + + if (!obb->removeFrom(filename)) { + fprintf(stderr, "ERROR: %s: couldn't remove OBB signature\n", filename); + return; + } + + fprintf(stderr, "OBB signature successfully removed\n"); +} + +void doInfo(const char* filename) { + ObbFile *obb = new ObbFile(); + if (!obb->readFrom(filename)) { + fprintf(stderr, "ERROR: %s: couldn't read OBB signature\n", filename); + return; + } + + printf("OBB info for '%s':\n", filename); + printf("Package name: %s\n", obb->getPackageName().string()); + printf(" Version: %d\n", obb->getVersion()); + printf(" Flags: 0x%08x\n", obb->getFlags()); + printf(" Overlay: %s\n", obb->isOverlay() ? "true" : "false"); + printf(" Salt: "); + + size_t saltLen; + const unsigned char* salt = obb->getSalt(&saltLen); + if (salt != NULL) { + for (int i = 0; i < SALT_LEN; i++) { + printf("%02x", salt[i]); + } + printf("\n"); + } else { + printf("\n"); + } +} + +bool fromHex(char h, unsigned char *b) { + if (h >= '0' && h <= '9') { + *b = h - '0'; + return true; + } else if (h >= 'a' && h <= 'f') { + *b = h - 'a' + 10; + return true; + } else if (h >= 'A' && h <= 'F') { + *b = h - 'A' + 10; + return true; + } + return false; +} + +bool hexToByte(char h1, char h2, unsigned char* b) { + unsigned char first, second; + if (!fromHex(h1, &first)) return false; + if (!fromHex(h2, &second)) return false; + *b = (first << 4) | second; + return true; +} + +/* + * Parse args. + */ +int main(int argc, char* const argv[]) +{ + int opt; + int option_index = 0; + struct PackageInfo package_info; + + int result = 1; // pessimistically assume an error. + + if (argc < 2) { + wantUsage = 1; + goto bail; + } + + while ((opt = getopt_long(argc, argv, ADD_OPTS, longopts, &option_index)) != -1) { + switch (opt) { + case 0: + if (longopts[option_index].flag) + break; + fprintf(stderr, "'%s' requires an argument\n", longopts[option_index].name); + wantUsage = 1; + goto bail; + case 'n': + package_info.packageName = optarg; + break; + case 'v': { + char* end; + package_info.packageVersion = strtol(optarg, &end, 10); + if (*optarg == '\0' || *end != '\0') { + fprintf(stderr, "ERROR: invalid version; should be integer!\n\n"); + wantUsage = 1; + goto bail; + } + break; + } + case 'o': + package_info.overlay = true; + break; + case 's': + if (strlen(optarg) != SALT_LEN * 2) { + fprintf(stderr, "ERROR: salt must be 8 bytes in hex (e.g., ABCD65031337D00D)\n\n"); + wantUsage = 1; + goto bail; + } + + package_info.salted = true; + + unsigned char b; + for (int i = 0, j = 0; i < SALT_LEN; i++, j+=2) { + if (!hexToByte(optarg[j], optarg[j+1], &b)) { + fprintf(stderr, "ERROR: salt must be in hex (e.g., ABCD65031337D00D)\n"); + wantUsage = 1; + goto bail; + } + package_info.salt[i] = b; + } + break; + case '?': + wantUsage = 1; + goto bail; + } + } + + if (wantVersion) { + fprintf(stderr, "%s %s\n", gProgName, gProgVersion); + } + + if (wantUsage) { + goto bail; + } + +#define CHECK_OP(name) \ + if (strncmp(op, name, opsize)) { \ + fprintf(stderr, "ERROR: unknown function '%s'!\n\n", op); \ + wantUsage = 1; \ + goto bail; \ + } + + if (optind < argc) { + const char* op = argv[optind++]; + const int opsize = strlen(op); + + if (optind >= argc) { + fprintf(stderr, "ERROR: filename required!\n\n"); + wantUsage = 1; + goto bail; + } + + const char* filename = argv[optind++]; + + switch (op[0]) { + case 'a': + CHECK_OP("add"); + if (package_info.packageName == NULL) { + fprintf(stderr, "ERROR: arguments required 'packageName' and 'version'\n"); + goto bail; + } + doAdd(filename, &package_info); + break; + case 'r': + CHECK_OP("remove"); + doRemove(filename); + break; + case 'i': + CHECK_OP("info"); + doInfo(filename); + break; + default: + fprintf(stderr, "ERROR: unknown command '%s'!\n\n", op); + wantUsage = 1; + goto bail; + } + } + +bail: + if (wantUsage) { + usage(); + result = 2; + } + + return result; +} diff --git a/tools/obbtool/mkobb.sh b/tools/obbtool/mkobb.sh new file mode 100755 index 0000000000000..725250d25385d --- /dev/null +++ b/tools/obbtool/mkobb.sh @@ -0,0 +1,281 @@ +#!/bin/bash +# +# Copyright (C) 2010 The Android Open Source Project +# +# Licensed 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 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +# mkobb.sh - Creates OBB files on Linux machines + +# Directory where we should temporarily mount the OBB loopback to copy files +MOUNTDIR=/tmp + +# Presets. Changing these will probably break your OBB on the device +CRYPTO=twofish +FS=vfat +MKFS=mkfs.vfat +LOSETUP=losetup +BLOCK_SIZE=512 +SLOP=512 # Amount of filesystem slop in ${BLOCK_SIZE} blocks + +find_binaries() { + MKFSBIN=`which ${MKFS}` + LOSETUPBIN=`which ${LOSETUP}` + MOUNTBIN=`which mount` + UMOUNTBIN=`which umount` + DDBIN=`which dd` + RSYNCBIN=`which rsync` + PBKDF2GEN=`which pbkdf2gen` +} + +check_prereqs() { + if [ "`uname -s`x" != "Linuxx" ]; then \ + echo "ERROR: This script only works on Linux!" + exit 1 + fi + + if ! egrep -q "^cryptoloop " /proc/modules; then \ + echo "ERROR: Could not find cryptoloop in the kernel." + echo "Perhaps you need to: modprobe cryptoloop" + exit 1 + fi + + if ! egrep -q "name\s*:\s*${CRYPTO}$" /proc/crypto; then \ + echo "ERROR: Could not find crypto \`${CRYPTO}' in the kernel." + echo "Perhaps you need to: modprobe ${CRYPTO}" + exit 1 + fi + + if ! egrep -q "^\s*${FS}$" /proc/filesystems; then \ + echo "ERROR: Could not find filesystem \`${FS}' in the kernel." + echo "Perhaps you need to: modprobe ${FS}" + exit 1 + fi + + if [ "${MKFSBIN}x" = "x" ]; then \ + echo "ERROR: Could not find ${MKFS} in your path!" + exit 1 + elif [ ! -x "${MKFSBIN}" ]; then \ + echo "ERROR: ${MKFSBIN} is not executable!" + exit 1 + fi + + if [ "${LOSETUPBIN}x" = "x" ]; then \ + echo "ERROR: Could not find ${LOSETUP} in your path!" + exit 1 + elif [ ! -x "${LOSETUPBIN}" ]; then \ + echo "ERROR: ${LOSETUPBIN} is not executable!" + exit 1 + fi + + if [ "${PBKDF2GEN}x" = "x" ]; then \ + echo "ERROR: Could not find pbkdf2gen in your path!" + exit 1 + fi +} + +cleanup() { + if [ "${loopdev}x" != "x" ]; then \ + ${LOSETUPBIN} -d ${loopdev} + fi +} + +hidden_prompt() { + unset output + prompt="$1" + outvar="$2" + while read -s -n 1 -p "$prompt" c; do \ + if [ "x$c" = "x" ]; then \ + break + fi + prompt='*' + output="${output}${c}" + done + echo + eval $outvar="$output" + unset output +} + +read_key() { + hidden_prompt " Encryption key: " key + + if [ "${key}x" = "x" ]; then \ + echo "ERROR: An empty key is not allowed!" + exit 1 + fi + + hidden_prompt "Encryption key (again): " key2 + + if [ "${key}x" != "${key2}x" ]; then \ + echo "ERROR: Encryption keys do not match!" + exit 1 + fi +} + +onexit() { + if [ "x${temp_mount}" != "x" ]; then \ + ${UMOUNTBIN} ${temp_mount} + rmdir ${temp_mount} + fi + if [ "x${loop_dev}" != "x" ]; then \ + if [ ${use_crypto} -eq 1 ]; then \ + dmsetup remove -f ${loop_dev} + ${LOSETUPBIN} -d ${old_loop_dev} + else \ + ${LOSETUPBIN} -d ${loop_dev} + fi + fi + if [ "x${tempfile}" != "x" -a -f "${tempfile}" ]; then \ + rm -f ${tempfile} + fi + if [ "x${keyfile}" != "x" -a -f "${keyfile}" ]; then \ + rm -f ${keyfile} + fi + echo "Fatal error." + exit 1 +} + +usage() { + echo "mkobb.sh -- Create OBB files for use on Android" + echo "" + echo " -d Use as input for OBB files" + echo " -k Use to encrypt OBB file" + echo " -K Prompt for key to encrypt OBB file" + echo " -o Write OBB file out to " + echo " -v Verbose mode" + echo " -h Help; this usage screen" +} + +find_binaries +check_prereqs + +use_crypto=0 + +args=`getopt -o d:hk:Ko:v -- "$@"` +eval set -- "$args" + +while true; do \ + case "$1" in + -d) directory=$2; shift 2;; + -h) usage; exit 1;; + -k) key=$2; use_crypto=1; shift 2;; + -K) prompt_key=1; use_crypto=1; shift;; + -v) verbose=1; shift;; + -o) filename=$2; shift 2;; + --) shift; break;; + *) echo "ERROR: Invalid argument in option parsing! Cannot recover. Ever."; exit 1;; + esac +done + +if [ "${directory}x" = "x" -o ! -d "${directory}" ]; then \ + echo "ERROR: Must specify valid input directory" + echo "" + usage + exit 1; +fi + +if [ "${filename}x" = "x" ]; then \ + echo "ERROR: Must specify filename" + echo "" + usage + exit 1; +fi + +if [ ${use_crypto} -eq 1 -a "${key}x" = "x" -a 0${prompt_key} -eq 0 ]; then \ + echo "ERROR: Crypto desired, but no key supplied or requested to prompt for." + exit 1 +fi + +if [ 0${prompt_key} -eq 1 ]; then \ + read_key +fi + +outdir=`dirname ${filename}` +if [ ! -d "${outdir}" ]; then \ + echo "ERROR: Output directory does not exist: ${outdir}" + exit 1 +fi + +# Make sure we clean up any stuff we create from here on during error conditions +trap onexit ERR + +tempfile=$(tempfile -d ${outdir}) || ( echo "ERROR: couldn't create temporary file in ${outdir}"; exit 1 ) + +block_count=`du -s --apparent-size --block-size=512 ${directory} | awk '{ print $1; }'` +if [ $? -ne 0 ]; then \ + echo "ERROR: Couldn't read size of input directory ${directory}" + exit 1 +fi + +echo "Creating temporary file..." +${DDBIN} if=/dev/zero of=${tempfile} bs=${BLOCK_SIZE} count=$((${block_count} + ${SLOP})) > /dev/null 2>&1 +if [ $? -ne 0 ]; then \ + echo "ERROR: creating temporary file: $?" +fi + +loop_dev=$(${LOSETUPBIN} -f) || ( echo "ERROR: losetup wouldn't tell us the next unused device"; exit 1 ) + +${LOSETUPBIN} ${loop_dev} ${tempfile} || ( echo "ERROR: couldn't create loopback device"; exit 1 ) + +if [ ${use_crypto} -eq 1 ]; then \ + eval `${PBKDF2GEN} ${key}` + unique_dm_name=`basename ${tempfile}` + echo "0 `blockdev --getsize ${loop_dev}` crypt ${CRYPTO} ${key} 0 ${loop_dev} 0" | dmsetup create ${unique_dm_name} + old_loop_dev=${loop_dev} + loop_dev=/dev/mapper/${unique_dm_name} +fi + +# +# Create the filesystem +# +echo "" +${MKFSBIN} -I ${loop_dev} +echo "" + +# +# Make the temporary mount point and mount it +# +temp_mount="${MOUNTDIR}/${RANDOM}" +mkdir ${temp_mount} +${MOUNTBIN} -t ${FS} -o loop ${loop_dev} ${temp_mount} + +# +# rsync the files! +# +echo "Copying files:" +${RSYNCBIN} -av --no-owner --no-group ${directory}/ ${temp_mount}/ +echo "" + +echo "Successfully created \`${filename}'" + +if [ ${use_crypto} -eq 1 ]; then \ + echo "salt for use with obbtool is:" + echo "${salt}" +fi + +# +# Undo all the temporaries +# +umount ${temp_mount} +rmdir ${temp_mount} +if [ ${use_crypto} -eq 1 ]; then \ + dmsetup remove -f ${loop_dev} + ${LOSETUPBIN} -d ${old_loop_dev} +else \ + ${LOSETUPBIN} -d ${loop_dev} +fi +mv ${tempfile} ${filename} + +trap - ERR + +exit 0 diff --git a/tools/obbtool/pbkdf2gen.cpp b/tools/obbtool/pbkdf2gen.cpp new file mode 100644 index 0000000000000..98d67c0b575ca --- /dev/null +++ b/tools/obbtool/pbkdf2gen.cpp @@ -0,0 +1,78 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +#include +#include +#include +#include +#include +#include + +/** + * Simple program to generate a key based on PBKDF2 with preset inputs. + * + * Will print out the salt and key in hex. + */ + +#define SALT_LEN 8 +#define ROUNDS 1024 +#define KEY_BITS 128 + +int main(int argc, char* argv[]) +{ + if (argc != 2) { + fprintf(stderr, "Usage: %s \n", argv[0]); + exit(1); + } + + int fd = open("/dev/urandom", O_RDONLY); + if (fd < 0) { + fprintf(stderr, "Could not open /dev/urandom: %s\n", strerror(errno)); + close(fd); + exit(1); + } + + unsigned char salt[SALT_LEN]; + + if (read(fd, &salt, SALT_LEN) != SALT_LEN) { + fprintf(stderr, "Could not read salt from /dev/urandom: %s\n", strerror(errno)); + close(fd); + exit(1); + } + close(fd); + + unsigned char rawKey[KEY_BITS]; + + if (PKCS5_PBKDF2_HMAC_SHA1(argv[1], strlen(argv[1]), salt, SALT_LEN, + ROUNDS, KEY_BITS, rawKey) != 1) { + fprintf(stderr, "Could not generate PBKDF2 output: %s\n", strerror(errno)); + exit(1); + } + + printf("salt="); + for (int i = 0; i < SALT_LEN; i++) { + printf("%02x", salt[i]); + } + printf("\n"); + + printf("key="); + for (int i = 0; i < (KEY_BITS / 8); i++) { + printf("%02x", rawKey[i]); + } + printf("\n"); +} diff --git a/tools/orientationplot/README.txt b/tools/orientationplot/README.txt new file mode 100644 index 0000000000000..d53f65e6669df --- /dev/null +++ b/tools/orientationplot/README.txt @@ -0,0 +1,87 @@ +This directory contains a simple python script for visualizing +the behavior of the WindowOrientationListener. + + +PREREQUISITES +------------- + +1. Python 2.6 +2. numpy +3. matplotlib + + +USAGE +----- + +The tool works by scaping the debug log output from WindowOrientationListener +for interesting data and then plotting it. + +1. Plug in the device. Ensure that it is the only device plugged in + since this script is of very little brain and will get confused otherwise. + +2. Enable the Window Orientation Listener debugging data log. + adb shell setprop debug.orientation.log true + adb shell stop + adb shell start + +3. Run "orientationplot.py". + + +WHAT IT ALL MEANS +----------------- + +The tool displays several time series graphs that plot the output of the +WindowOrientationListener. Here you can see the raw accelerometer data, +filtered accelerometer data, measured tilt and orientation angle, confidence +intervals for the proposed orientation and accelerometer latency. + +Things to look for: + +1. Ensure the filtering is not too aggressive. If the filter cut-off frequency is + less than about 1Hz, then the filtered accelorometer data becomes too smooth + and the latency for orientation detection goes up. One way to observe this + is by holding the device vertically in one orientation then sharply turning + it 90 degrees to a different orientation. Compared the rapid changes in the + raw accelerometer data with the smoothed out filtered data. If the filtering + is too aggressive, the filter response may lag by hundreds of milliseconds. + +2. Ensure that there is an appropriate gap between adjacent orientation angles + for hysteresis. Try holding the device in one orientation and slowly turning + it 90 degrees. Note that the confidence intervals will all drop to 0 at some + point in between the two orientations; that is the gap. The gap should be + observed between all adjacent pairs of orientations when turning the device + in either direction. + + Next try holding the device in one orientation and rapidly turning it end + over end to a midpoint about 45 degrees between two opposing orientations. + There should be no gap observed initially. The algorithm should pick one + of the orientations and settle into it (since it is obviously quite + different from the original orientation of the device). However, once it + settles, the confidence values should start trending to 0 again because + the measured orientation angle is now within the gap between the new + orientation and the adjacent orientation. + + In other words, the hysteresis gap applies only when the measured orientation + angle (say, 45 degrees) is between the current orientation's ideal angle + (say, 0 degrees) and an adjacent orientation's ideal angle (say, 90 degrees). + +3. Accelerometer jitter. The accelerometer latency graph displays the interval + between sensor events as reported by the SensorEvent.timestamp field. It + should be a fairly constant 60ms. If the latency jumps around wildly or + greatly exceeds 60ms then there is a problem with the accelerometer or the + sensor manager. + +4. The orientation angle is not measured when the tilt is too close to 90 or -90 + degrees (refer to MAX_TILT constant). Consequently, you should expect there + to be no data. Likewise, all dependent calculations are suppressed in this case + so there will be no orientation proposal either. + +5. Each orientation has its own bound on allowable tilt angles. It's a good idea to + verify that these limits are being enforced by gradually varying the tilt of + the device until it is inside/outside the limit for each orientation. + +6. Orientation changes should be significantly harder when the device is held + overhead. People reading on tablets in bed often have their head turned + a little to the side, or they hold the device loosely so its orientation + can be a bit unusual. The tilt is a good indicator of whether the device is + overhead. diff --git a/tools/orientationplot/orientationplot.py b/tools/orientationplot/orientationplot.py new file mode 100755 index 0000000000000..6fc392275ffd5 --- /dev/null +++ b/tools/orientationplot/orientationplot.py @@ -0,0 +1,457 @@ +#!/usr/bin/env python2.6 +# +# Copyright (C) 2011 The Android Open Source Project +# +# Licensed 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 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +# +# Plots debug log output from WindowOrientationListener. +# See README.txt for details. +# + +import numpy as np +import matplotlib.pyplot as plot +import subprocess +import re +import fcntl +import os +import errno +import bisect +from datetime import datetime, timedelta + +# Parameters. +timespan = 15 # seconds total span shown +scrolljump = 5 # seconds jump when scrolling +timeticks = 1 # seconds between each time tick + +# Non-blocking stream wrapper. +class NonBlockingStream: + def __init__(self, stream): + fcntl.fcntl(stream, fcntl.F_SETFL, os.O_NONBLOCK) + self.stream = stream + self.buffer = '' + self.pos = 0 + + def readline(self): + while True: + index = self.buffer.find('\n', self.pos) + if index != -1: + result = self.buffer[self.pos:index] + self.pos = index + 1 + return result + + self.buffer = self.buffer[self.pos:] + self.pos = 0 + try: + chunk = os.read(self.stream.fileno(), 4096) + except OSError, e: + if e.errno == errno.EAGAIN: + return None + raise e + if len(chunk) == 0: + if len(self.buffer) == 0: + raise(EOFError) + else: + result = self.buffer + self.buffer = '' + self.pos = 0 + return result + self.buffer += chunk + +# Plotter +class Plotter: + def __init__(self, adbout): + self.adbout = adbout + + self.fig = plot.figure(1) + self.fig.suptitle('Window Orientation Listener', fontsize=12) + self.fig.set_dpi(96) + self.fig.set_size_inches(16, 12, forward=True) + + self.raw_acceleration_x = self._make_timeseries() + self.raw_acceleration_y = self._make_timeseries() + self.raw_acceleration_z = self._make_timeseries() + self.raw_acceleration_magnitude = self._make_timeseries() + self.raw_acceleration_axes = self._add_timeseries_axes( + 1, 'Raw Acceleration', 'm/s^2', [-20, 20], + yticks=range(-15, 16, 5)) + self.raw_acceleration_line_x = self._add_timeseries_line( + self.raw_acceleration_axes, 'x', 'red') + self.raw_acceleration_line_y = self._add_timeseries_line( + self.raw_acceleration_axes, 'y', 'green') + self.raw_acceleration_line_z = self._add_timeseries_line( + self.raw_acceleration_axes, 'z', 'blue') + self.raw_acceleration_line_magnitude = self._add_timeseries_line( + self.raw_acceleration_axes, 'magnitude', 'orange', linewidth=2) + self._add_timeseries_legend(self.raw_acceleration_axes) + + shared_axis = self.raw_acceleration_axes + + self.filtered_acceleration_x = self._make_timeseries() + self.filtered_acceleration_y = self._make_timeseries() + self.filtered_acceleration_z = self._make_timeseries() + self.filtered_acceleration_magnitude = self._make_timeseries() + self.filtered_acceleration_axes = self._add_timeseries_axes( + 2, 'Filtered Acceleration', 'm/s^2', [-20, 20], + sharex=shared_axis, + yticks=range(-15, 16, 5)) + self.filtered_acceleration_line_x = self._add_timeseries_line( + self.filtered_acceleration_axes, 'x', 'red') + self.filtered_acceleration_line_y = self._add_timeseries_line( + self.filtered_acceleration_axes, 'y', 'green') + self.filtered_acceleration_line_z = self._add_timeseries_line( + self.filtered_acceleration_axes, 'z', 'blue') + self.filtered_acceleration_line_magnitude = self._add_timeseries_line( + self.filtered_acceleration_axes, 'magnitude', 'orange', linewidth=2) + self._add_timeseries_legend(self.filtered_acceleration_axes) + + self.tilt_angle = self._make_timeseries() + self.tilt_angle_axes = self._add_timeseries_axes( + 3, 'Tilt Angle', 'degrees', [-105, 105], + sharex=shared_axis, + yticks=range(-90, 91, 30)) + self.tilt_angle_line = self._add_timeseries_line( + self.tilt_angle_axes, 'tilt', 'black') + self._add_timeseries_legend(self.tilt_angle_axes) + + self.orientation_angle = self._make_timeseries() + self.orientation_angle_axes = self._add_timeseries_axes( + 4, 'Orientation Angle', 'degrees', [-25, 375], + sharex=shared_axis, + yticks=range(0, 361, 45)) + self.orientation_angle_line = self._add_timeseries_line( + self.orientation_angle_axes, 'orientation', 'black') + self._add_timeseries_legend(self.orientation_angle_axes) + + self.current_rotation = self._make_timeseries() + self.proposed_rotation = self._make_timeseries() + self.predicted_rotation = self._make_timeseries() + self.orientation_axes = self._add_timeseries_axes( + 5, 'Current / Proposed Orientation', 'rotation', [-1, 4], + sharex=shared_axis, + yticks=range(0, 4)) + self.current_rotation_line = self._add_timeseries_line( + self.orientation_axes, 'current', 'black', linewidth=2) + self.predicted_rotation_line = self._add_timeseries_line( + self.orientation_axes, 'predicted', 'purple', linewidth=3) + self.proposed_rotation_line = self._add_timeseries_line( + self.orientation_axes, 'proposed', 'green', linewidth=3) + self._add_timeseries_legend(self.orientation_axes) + + self.time_until_settled = self._make_timeseries() + self.time_until_flat_delay_expired = self._make_timeseries() + self.time_until_swing_delay_expired = self._make_timeseries() + self.time_until_acceleration_delay_expired = self._make_timeseries() + self.stability_axes = self._add_timeseries_axes( + 6, 'Proposal Stability', 'ms', [-10, 600], + sharex=shared_axis, + yticks=range(0, 600, 100)) + self.time_until_settled_line = self._add_timeseries_line( + self.stability_axes, 'time until settled', 'black', linewidth=2) + self.time_until_flat_delay_expired_line = self._add_timeseries_line( + self.stability_axes, 'time until flat delay expired', 'green') + self.time_until_swing_delay_expired_line = self._add_timeseries_line( + self.stability_axes, 'time until swing delay expired', 'blue') + self.time_until_acceleration_delay_expired_line = self._add_timeseries_line( + self.stability_axes, 'time until acceleration delay expired', 'red') + self._add_timeseries_legend(self.stability_axes) + + self.sample_latency = self._make_timeseries() + self.sample_latency_axes = self._add_timeseries_axes( + 7, 'Accelerometer Sampling Latency', 'ms', [-10, 500], + sharex=shared_axis, + yticks=range(0, 500, 100)) + self.sample_latency_line = self._add_timeseries_line( + self.sample_latency_axes, 'latency', 'black') + self._add_timeseries_legend(self.sample_latency_axes) + + self.fig.canvas.mpl_connect('button_press_event', self._on_click) + self.paused = False + + self.timer = self.fig.canvas.new_timer(interval=100) + self.timer.add_callback(lambda: self.update()) + self.timer.start() + + self.timebase = None + self._reset_parse_state() + + # Handle a click event to pause or restart the timer. + def _on_click(self, ev): + if not self.paused: + self.paused = True + self.timer.stop() + else: + self.paused = False + self.timer.start() + + # Initialize a time series. + def _make_timeseries(self): + return [[], []] + + # Add a subplot to the figure for a time series. + def _add_timeseries_axes(self, index, title, ylabel, ylim, yticks, sharex=None): + num_graphs = 7 + height = 0.9 / num_graphs + top = 0.95 - height * index + axes = self.fig.add_axes([0.1, top, 0.8, height], + xscale='linear', + xlim=[0, timespan], + ylabel=ylabel, + yscale='linear', + ylim=ylim, + sharex=sharex) + axes.text(0.02, 0.02, title, transform=axes.transAxes, fontsize=10, fontweight='bold') + axes.set_xlabel('time (s)', fontsize=10, fontweight='bold') + axes.set_ylabel(ylabel, fontsize=10, fontweight='bold') + axes.set_xticks(range(0, timespan + 1, timeticks)) + axes.set_yticks(yticks) + axes.grid(True) + + for label in axes.get_xticklabels(): + label.set_fontsize(9) + for label in axes.get_yticklabels(): + label.set_fontsize(9) + + return axes + + # Add a line to the axes for a time series. + def _add_timeseries_line(self, axes, label, color, linewidth=1): + return axes.plot([], label=label, color=color, linewidth=linewidth)[0] + + # Add a legend to a time series. + def _add_timeseries_legend(self, axes): + axes.legend( + loc='upper left', + bbox_to_anchor=(1.01, 1), + borderpad=0.1, + borderaxespad=0.1, + prop={'size': 10}) + + # Resets the parse state. + def _reset_parse_state(self): + self.parse_raw_acceleration_x = None + self.parse_raw_acceleration_y = None + self.parse_raw_acceleration_z = None + self.parse_raw_acceleration_magnitude = None + self.parse_filtered_acceleration_x = None + self.parse_filtered_acceleration_y = None + self.parse_filtered_acceleration_z = None + self.parse_filtered_acceleration_magnitude = None + self.parse_tilt_angle = None + self.parse_orientation_angle = None + self.parse_current_rotation = None + self.parse_proposed_rotation = None + self.parse_predicted_rotation = None + self.parse_time_until_settled = None + self.parse_time_until_flat_delay_expired = None + self.parse_time_until_swing_delay_expired = None + self.parse_time_until_acceleration_delay_expired = None + self.parse_sample_latency = None + + # Update samples. + def update(self): + timeindex = 0 + while True: + try: + line = self.adbout.readline() + except EOFError: + plot.close() + return + if line is None: + break + print line + + try: + timestamp = self._parse_timestamp(line) + except ValueError, e: + continue + if self.timebase is None: + self.timebase = timestamp + delta = timestamp - self.timebase + timeindex = delta.seconds + delta.microseconds * 0.000001 + + if line.find('Raw acceleration vector:') != -1: + self.parse_raw_acceleration_x = self._get_following_number(line, 'x=') + self.parse_raw_acceleration_y = self._get_following_number(line, 'y=') + self.parse_raw_acceleration_z = self._get_following_number(line, 'z=') + self.parse_raw_acceleration_magnitude = self._get_following_number(line, 'magnitude=') + + if line.find('Filtered acceleration vector:') != -1: + self.parse_filtered_acceleration_x = self._get_following_number(line, 'x=') + self.parse_filtered_acceleration_y = self._get_following_number(line, 'y=') + self.parse_filtered_acceleration_z = self._get_following_number(line, 'z=') + self.parse_filtered_acceleration_magnitude = self._get_following_number(line, 'magnitude=') + + if line.find('tiltAngle=') != -1: + self.parse_tilt_angle = self._get_following_number(line, 'tiltAngle=') + + if line.find('orientationAngle=') != -1: + self.parse_orientation_angle = self._get_following_number(line, 'orientationAngle=') + + if line.find('Result:') != -1: + self.parse_current_rotation = self._get_following_number(line, 'currentRotation=') + self.parse_proposed_rotation = self._get_following_number(line, 'proposedRotation=') + self.parse_predicted_rotation = self._get_following_number(line, 'predictedRotation=') + self.parse_sample_latency = self._get_following_number(line, 'timeDeltaMS=') + self.parse_time_until_settled = self._get_following_number(line, 'timeUntilSettledMS=') + self.parse_time_until_flat_delay_expired = self._get_following_number(line, 'timeUntilFlatDelayExpiredMS=') + self.parse_time_until_swing_delay_expired = self._get_following_number(line, 'timeUntilSwingDelayExpiredMS=') + self.parse_time_until_acceleration_delay_expired = self._get_following_number(line, 'timeUntilAccelerationDelayExpiredMS=') + + self._append(self.raw_acceleration_x, timeindex, self.parse_raw_acceleration_x) + self._append(self.raw_acceleration_y, timeindex, self.parse_raw_acceleration_y) + self._append(self.raw_acceleration_z, timeindex, self.parse_raw_acceleration_z) + self._append(self.raw_acceleration_magnitude, timeindex, self.parse_raw_acceleration_magnitude) + self._append(self.filtered_acceleration_x, timeindex, self.parse_filtered_acceleration_x) + self._append(self.filtered_acceleration_y, timeindex, self.parse_filtered_acceleration_y) + self._append(self.filtered_acceleration_z, timeindex, self.parse_filtered_acceleration_z) + self._append(self.filtered_acceleration_magnitude, timeindex, self.parse_filtered_acceleration_magnitude) + self._append(self.tilt_angle, timeindex, self.parse_tilt_angle) + self._append(self.orientation_angle, timeindex, self.parse_orientation_angle) + self._append(self.current_rotation, timeindex, self.parse_current_rotation) + if self.parse_proposed_rotation >= 0: + self._append(self.proposed_rotation, timeindex, self.parse_proposed_rotation) + else: + self._append(self.proposed_rotation, timeindex, None) + if self.parse_predicted_rotation >= 0: + self._append(self.predicted_rotation, timeindex, self.parse_predicted_rotation) + else: + self._append(self.predicted_rotation, timeindex, None) + self._append(self.time_until_settled, timeindex, self.parse_time_until_settled) + self._append(self.time_until_flat_delay_expired, timeindex, self.parse_time_until_flat_delay_expired) + self._append(self.time_until_swing_delay_expired, timeindex, self.parse_time_until_swing_delay_expired) + self._append(self.time_until_acceleration_delay_expired, timeindex, self.parse_time_until_acceleration_delay_expired) + self._append(self.sample_latency, timeindex, self.parse_sample_latency) + self._reset_parse_state() + + # Scroll the plots. + if timeindex > timespan: + bottom = int(timeindex) - timespan + scrolljump + self.timebase += timedelta(seconds=bottom) + self._scroll(self.raw_acceleration_x, bottom) + self._scroll(self.raw_acceleration_y, bottom) + self._scroll(self.raw_acceleration_z, bottom) + self._scroll(self.raw_acceleration_magnitude, bottom) + self._scroll(self.filtered_acceleration_x, bottom) + self._scroll(self.filtered_acceleration_y, bottom) + self._scroll(self.filtered_acceleration_z, bottom) + self._scroll(self.filtered_acceleration_magnitude, bottom) + self._scroll(self.tilt_angle, bottom) + self._scroll(self.orientation_angle, bottom) + self._scroll(self.current_rotation, bottom) + self._scroll(self.proposed_rotation, bottom) + self._scroll(self.predicted_rotation, bottom) + self._scroll(self.time_until_settled, bottom) + self._scroll(self.time_until_flat_delay_expired, bottom) + self._scroll(self.time_until_swing_delay_expired, bottom) + self._scroll(self.time_until_acceleration_delay_expired, bottom) + self._scroll(self.sample_latency, bottom) + + # Redraw the plots. + self.raw_acceleration_line_x.set_data(self.raw_acceleration_x) + self.raw_acceleration_line_y.set_data(self.raw_acceleration_y) + self.raw_acceleration_line_z.set_data(self.raw_acceleration_z) + self.raw_acceleration_line_magnitude.set_data(self.raw_acceleration_magnitude) + self.filtered_acceleration_line_x.set_data(self.filtered_acceleration_x) + self.filtered_acceleration_line_y.set_data(self.filtered_acceleration_y) + self.filtered_acceleration_line_z.set_data(self.filtered_acceleration_z) + self.filtered_acceleration_line_magnitude.set_data(self.filtered_acceleration_magnitude) + self.tilt_angle_line.set_data(self.tilt_angle) + self.orientation_angle_line.set_data(self.orientation_angle) + self.current_rotation_line.set_data(self.current_rotation) + self.proposed_rotation_line.set_data(self.proposed_rotation) + self.predicted_rotation_line.set_data(self.predicted_rotation) + self.time_until_settled_line.set_data(self.time_until_settled) + self.time_until_flat_delay_expired_line.set_data(self.time_until_flat_delay_expired) + self.time_until_swing_delay_expired_line.set_data(self.time_until_swing_delay_expired) + self.time_until_acceleration_delay_expired_line.set_data(self.time_until_acceleration_delay_expired) + self.sample_latency_line.set_data(self.sample_latency) + + self.fig.canvas.draw_idle() + + # Scroll a time series. + def _scroll(self, timeseries, bottom): + bottom_index = bisect.bisect_left(timeseries[0], bottom) + del timeseries[0][:bottom_index] + del timeseries[1][:bottom_index] + for i, timeindex in enumerate(timeseries[0]): + timeseries[0][i] = timeindex - bottom + + # Extract a word following the specified prefix. + def _get_following_word(self, line, prefix): + prefix_index = line.find(prefix) + if prefix_index == -1: + return None + start_index = prefix_index + len(prefix) + delim_index = line.find(',', start_index) + if delim_index == -1: + return line[start_index:] + else: + return line[start_index:delim_index] + + # Extract a number following the specified prefix. + def _get_following_number(self, line, prefix): + word = self._get_following_word(line, prefix) + if word is None: + return None + return float(word) + + # Extract an array of numbers following the specified prefix. + def _get_following_array_of_numbers(self, line, prefix): + prefix_index = line.find(prefix + '[') + if prefix_index == -1: + return None + start_index = prefix_index + len(prefix) + 1 + delim_index = line.find(']', start_index) + if delim_index == -1: + return None + + result = [] + while start_index < delim_index: + comma_index = line.find(', ', start_index, delim_index) + if comma_index == -1: + result.append(float(line[start_index:delim_index])) + break; + result.append(float(line[start_index:comma_index])) + start_index = comma_index + 2 + return result + + # Add a value to a time series. + def _append(self, timeseries, timeindex, number): + timeseries[0].append(timeindex) + timeseries[1].append(number) + + # Parse the logcat timestamp. + # Timestamp has the form '01-21 20:42:42.930' + def _parse_timestamp(self, line): + return datetime.strptime(line[0:18], '%m-%d %H:%M:%S.%f') + +# Notice +print "Window Orientation Listener plotting tool" +print "-----------------------------------------\n" +print "Please turn on the Window Orientation Listener logging in Development Settings." + +# Start adb. +print "Starting adb logcat.\n" + +adb = subprocess.Popen(['adb', 'logcat', '-s', '-v', 'time', 'WindowOrientationListener:V'], + stdout=subprocess.PIPE) +adbout = NonBlockingStream(adb.stdout) + +# Prepare plotter. +plotter = Plotter(adbout) +plotter.update() + +# Main loop. +plot.show() diff --git a/tools/preload/20080522.compiled b/tools/preload/20080522.compiled new file mode 100644 index 0000000000000000000000000000000000000000..a2af422866ebc4fc3b8fece7d70060ce23a3f037 GIT binary patch literal 11414749 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 z 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 z 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�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

7g(W4->)BkNI74U#`D*= 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 rh#B7X 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

    }>hkGlBwZaA>Nl^D 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 z zO+W!XgXE?X0Y$eEZqpcNW$5v4zXbdTlQf*;nY!(;-XPqjG0qyQ!wt!Qq?Uxj9{}8t z{KE=OzS%U!S;O_X-^igJfDc66FTS|e+-(};tSmhqHGO?QdhSsJ9&Mn)+cd^mBlURr z=O2E7?27UYPi>kq*HM%?AY zmbZl4G{#xe^>|Rh@vszDKZX!^)wM3+HjQ!COg-*j4$u3kBZTEnzs`i)G{#x8^?2x) z6(<1>?>rde!N${s+cd^mb9A`zOxHvI!21sO55~C7CUAo4%EG2G&YGvg4cUSJ9R<87 zX3uUCq%8?;8sn@5dfX*Bc{SAhCB$8PhwY~9HjQ!CB0V1R+r_I;ZkVWnG2UNFnvu2O5N^{LXKl%YFDx*MaMz)YwVu|dG0xhi$K9%= zztHf1mTR*jo5nb6yB_z8`p*fTdkd^OKPTq|D!grD{H-4Mt-lxaS z)y*(5QSaUBzgF5CXWJMb(Bob+`tQ~7zJ*Ir;cXk^gL>SYG!b4GHM`kd_j|%^8{!fAG5tgxfa8NAlo%-;UPsg-bLIV%r!W)8m-~8^PX`X+O5Q%&>+`U%w5uIaEA- z%5CLz9k~)&W#ASZH)iW}2?ITNUw?P)4s3hhC;B2dwR;EiBNcb5@AwrJ!M68( zrpF!cwpvQKGTbk9&{Y2J8Qv>vM$L^uE~z^mt(Xnuh>ameGNB)wMN&P4Am+p9i1v;-ZH4_W6Ud+w{KKh4bJm zWALR{vybjZRcG7#W*5za*Z2T$8x?*oi7VUQH@mnV53b&4B=oefVF4$n-n`hBQ+V6n zH@l>YtKPQ&Af;g)c?|x%YA`q?!Ji}HU-h3-Tkub1sRDm0?P{Q*%Kw}wZkyh}XP@rD z$(iYcu(NU6rSu~u;IA`R_DD?$*RxmV_A`zVQ82vQDeszN@VG+Cl_DQ<{;|^n#SOty zj?+Nq@n%iU*Sn7g=9)v zAY;dtoC>7UJYz>@pdeF7W}^i%f3&7_w0j&_Fv8S^}91&|w%jCndU zl}P5G1=7+Hzj0OF^|T~3zfL66&jJ|~HDwz-6!0q0mLhuMYp9f#nP-7a?bWRww8A+^ zruH1$kw_+;1v2vJU-PQc%sTB_zMTR|`t3 z%rTPxE8j^YZU1r`BQ1M2L9131)!| zDCV*c$kRv$6p8+iNamJplco~et4)IU8{9Bx<;^>A2Cufh)A_VMQ+H#0ADF~tA=%w< z0C&z6k{M;&ISrjn$6%GLelWVT-4#4GF>c?@fY_(A7oTUiTHE> z`4h=Zu|W14cgYOoPnfgcsLAh$WRh4QUBZg3hTcS3e!7G-*7_mlhXt~A2cP#qg0O+Z z#BmAVQck9Z1u`fk0>)wEMkIs$cjBm|)Gf2Z0_h)CE(S=Yr}htCbBRbMgatD6M_1^* zR394pL%=E`nG3c}8qaK8bRFK$8&Fu|nYBYU6Uj8NZPJiE#v4joK-nzI9{CP;D3$wU z23R0nHuznDy1j}u8e-m8Al>)e0*j)y1ov;R zYJCDzz5*F?@Ja>9c^Pwt9C(MTL8Y|J_6lTpPq*jLCzL`my!$v*tqRFRuRvNB&!`PK z;T?rHd*KdT|0*PNyaH+d#svMX(TJpZtN$-VGQBI1VaptFL@J78*kV&Gk<9E0q{pM# zfl#+Fg@i@R!z1WLmC`b)E0Atw+@N+;(yipFnM5+5E0C^9v!KURN!JcTN)pLbu0&pp zJfV?iXIP137FQtM!jA1E(k&zcOptC2)9cPo&-fw%u8 z(%1j#G$NU{mB>yT@m*1J`X;WQM-d$dJ)MKtw4GmuYi4@a-UwuoVD3Fv$FzeUevodk>&+M_ESzKW+k%H z)o(Pi!uv-=GAApLUQZ_0CerKS&y|T}I#wVv7g%8CW;%jxD05!_wL~%#E07uWuffXL z^c2YqhjK1NG6^e?eZG4Hb6XR5Nbs+_`;H}&`B#BVzqM%uk?A+)tss)ASBX4xWUEG= zdjFD0W?cm`+4(y5w=nmELj=uYa5GtHw@kPSWZbVot%-~~cNVu|6_UADfwaDOkxHcX zN$=@IGR-QGaZgIaidHRc-2Li*6Uhv#Kw3|@LZ6_L)}!9Ijir>9$yI?&^dBDpt#3Hi zP@>;1t*2&Q)i!BL^Uv%AvvFSlO=*57w0QzksIAzWBAH7SNRQ=L(}3)P zq{ouLK}0f*Dv;hkeurbWLVEvjekGC2pbDhfdaVbM=GbygiDdFrAiek8ML(qG+?C=> zB=e>M8JMsV=9%hRFfiU%dq0`;l*j}3mT2UDyY`fm=}w8f&<^_eoSf%6x5y#6>6FNJ zhPfK)T|b6McDPj_gZ+2Zg>J7aKF?skzk3kL&b9sznR}!)uR2V71{<1%`#~i8sy&LF zrW+U3Av>GcezbFWDE@pbMEjxp#}g^2Lq^699{@wY`mK|(1Jd>pDX2q6W}K^X7|3&& zGvlOVTO!#RR(|7*jCt%o6v*{R#@s!u-KU@q8EJ_xFcQe_NLr!~XiGdn9WpW~7xeu14xxA_aBG$mEv=3qffsA({NF`Z$fWtqvJ!`S#l@knh^vMJe5K)0X3MqJ^ukrqxw7rb(oveko;i+zAMTkJNf0ZmP88bkdb~r z7v2ISw0c;S%IoOdG@nb;wA6%ee1>RC;QE zbCfn&5!4|gL-(D7!OgfG?=y7g)#FrJK^^9j#xtwN&xH5$I)KJAiyyooQc#Dvq#=9g zyZ%6y#+=#x?zs~ws6$4&tQijPiXHS~@KjcQagazs9WpZH_4@Nr(C?58`RAfGt_bRo zk?z~vvZy7vul*gr-9Tyaf;wbm$iDe8kn=Ys=Z^i`i4@c!Bg4B6?g@QDNhHIQmiHl2 zP=}1P%+JONZy1u6*%P&8rJxQOY2NGxJ*LqPN%Oi`Z5bk{Lq>)zEc7{)7J3v=hjVJ- z={}`~1a-(rkNeYL`$GLTV~<;D+7wbyhm3S9;sO1TO1c@_^roDGI%K44Ty5BPQ%Tpz zI@)M2s6$TvJPO}z7+VYm*Tcg#i7co?M!H#E7bMcHZM3!w5!4|g{U(~n!&7OAIsL|T zuTA$Us6$5j`pt$pf=c?D7t|+GP=}n1{|{S&lG8WxkM%?f>X4JoN8($ilJ&cMAW~3= zocv}r^zS+3`U={TKv0K_G>48VMx@#2*NT)=P=}24I(%>)kzV^s8i^FtAtTN6${ixo zJflK)A_aBG$#Tn4kt#K0E zmnKqBhn)O*2hNO@oasLnD?_B94jGx;U;=Dw;-DjTlv7ZLjEuYan=g@Ze^%1ezMu{nX+1dqB9YcT&$RiipbiUR!?( z>X4J3%maV`a8nFo)Je#c2UNyl2GP2#6$IF0(0R}8!)(mZ@N3ej5^jP@t9gv-o^q6ty zI+a$ifQq{GU8|^!{v=XRlZ({zK!om!` zlk>Au&50D$BqM`cSLg~4Z|orA0znfnc_{FyScS5O0So!(mssPeDyGGS0o>4?s>rGR|dx0+E86WMt>tQ&&N0LE9M&ov+6{&`8^A zl97SspE*KKn5IH6Ql=61KT2r@HOa`ByTR~Isy~tyb8~d8M&^Fes!+EnhgRN7Eb zRQ60F1vQzQ(^T5D4i+l~UPEC`rQZL7XHC_2CI3^6r>h)?$q=X|gQ@$8F1|zxYBD#c zAtk*OE|3(JmD0<4fk;73GSaer7VeoSyS|pqC*Bh&s7Xdf&p!lHTz1P`x zc=|+nDuSBKB@I?fL>-E2FQR++ztXAQ>LsZv9Nnq;Ks<>IhBSAP`3^FrA` zA_X4L<(w>liuw<(MS(>TvaKh71Sgr_oTRJo6w?MBE8s(IktheQf$l97I&9w+Bc zLqrN{l9N^Z;Hjvk^()`83z34FU3yg4nINI^|9(tA`PXhSOLJ-oiw;srIyNb~!!c|@B38-=P_xlch&a`Mvt z{Tg}xW?Lc!HOa`KBPT$AYdVT;Xz1`0+lUm@BqKA8FGd6T49Sdl-(Mjz|5J_WYac*Q zV!DfD`qu_L&!OC>pe9+)zE?b36503nU{uWtDX2+K{=7RyBaa2oCQ?w7j7;wO1GFI% zJX27UogRH4Qc#nOj4!y{iO6`v`gKGKYLbz0b;`XbGOk*Qf+5W63Cew1|LNP1atdmak%@0&V99G7fi;x)k9Scb1vQyVntE4y3ErZRAAqLb zC$KkEa_Cz#o=fgk%F3JWShzdyFxW#6Ew6bf7YK!K}|B!r^9}G zAWI+{Kenbjtl9Art zM^6&z?eXj!k%F3JWZNY(;U05x&R;v3NI^|9($Y!!aLCDZBz+7%FpX)?B)A!%5}u zD9u!1@_hXKlbvqUi2P*ZXl-mP@FqX9p{2`dA{(~pt68Ih74jn+74|S|qnZ@#cj_HV8-|vh$z$k^xVR8rkNEHe7Tu=Sw=Bd!><0 zifaREmxcL}jh@Vh`MFxRjqcjvAswX+b@?|xvSCp3^F%f@U&bwNg-q#?AK9p=!$2Y% z86I!e$OHM24cD(cL1e?_^EAJo;gl~qqIPbd(7&HDm$?OdCmH+mB`^N>xt8-(vXM%g z>5?ybd?y&)oOk61??pro^~;wW`1poKrnUQp$YBZjlBbHp(4Uj@$0D6IQXNwMk3POp z>7uuZY-B(5Es?|XeX|=5T)vjbhG|7;aLXG0G{4d|_;7VFkqurp*Jj#dU*$(OKKMP% zmDT%fy!+1}D($#@``gBTf5JXS4*A&~XCf!$+Y%ZV8+B15?H=?ba$;h>rJWoME2o^C zqj1YdeOD&F&yQ^K$+WRVHfd0ZyMa(KRE!I{4i+4#+=-!$@F zeq`fr!Id%YPlm) zxYr7ewEev+Y+PyPky?*(Hgle9Pvo?9`Q>b0t6~z7&8zg&M#1Ts`H}Um_~GaPzQACp zcPUzP1vC8fCF764s?@HgLPr1Hg-Sa!-{!OVvSxlc9rk9<*2r)7 z-~nRgdCt0(FZt`R-5Pl&z>mn;ws#BJQ)w`3p97H%CeIEg^2@FH<*Yw!QXG->2d&gb z-Z_i%BO7_)=Tg-gYUI)w&&nwGIXB;y(D3qJZJyBZ%qQBLJx~1tr2ng@E}E^i_(pae z(<$ftCHa=N{%LJoX;dRiEA4{i`H^)aQ{TXSx?>xv8$7uj%8layEJ~19gb9E^GAQ(i|e6hvi2$b~}_#WMjuN+Pv>Y{-a=p z$GM|miBzp_|M@w;oDFAZM^Vm(lgHJk(!Q*kFWJXyu|{^irp^0a34MI-`J4jK>R`%f zxcYJDb1KpokPRBxGp$8P^1vQ3@E=e->4*+nZ#y5DcN7Zg4cQFNyT3?LZpy~#oG9Ju z+P+%HQZSknhIR+1a}s)>vmOJ2{v*C~EH`4OjcMwBcH74ct4A4ItHzV2po)ezQP{@xsV`Fv4(!web_6Vcv_9yZq&e-@&djM7Y z7|Gzar@qn1DK=XUdnmmU-`Rl#nU7?zgci7`q?9)QGd9s>@1hPHfMj&3nmEH$$o$XP zbbcMt26BQbf|D|@Iy@ng{nUh@rUE@&Ko+VW^$BzzhU--&XZ|N;+V^a`3rNKRx9^&P zW4ub*9{X4g1r0le&+`(NHfU(o&P0C1Ng4NwU%`I*djL(PT?*jLOUWsGh%Yy%sr%n^ zkAa&XgJk!IWf~Eg|4A9k&uhb>v{_hM%duOBiTsH3F55mUMNcJq;}__Yl+u30d6#b< zZ-tz&Qi1a>TY7sF`4Q(`>SnhDay63vH4io;GT-wqh3Z}`4l4%xn*bK7d-fXc*D0m_ zi1RKZzV8h=VYG%fJM%Ym^9q^&d6&eNi{1g*3CYAyAHE?n|MM=cUzZ;T@8{o0x-S16 zPaG&YKjPF%*kBWoFBLKfkCLh6N1R%5c{3SG3+LdJb9WPn{D@O4P5Q$KW`z2MZ@g=? zMQgVoacbq;zz;yeiVQvswS93I<@|_KE51c*z`Jr6K;wDu2Do>o)X+zqS{czFBzJ-G zm~&*N8EuI|=6`A>^wA&iR;xdE75eZ^IU+ye?8(r+sq{R(1|QHyq>ngzvM%T< z%FY5ls$+ZnNgz-hin|s;`u$P~4$V+_lABin|pp?uFku zb8{x=-M#ZK|9(F2weQjIIdkXE9r@1OyOW9hhO;MATQ`Ec5{7kKe&U)7M1I5Blgg`l z5m_$&$~_{#;p|DPk1}Vu<{{{{#dUte*%OBu<|bNc%UL_%X%0bt!`YJ^IaW$?OMSEm zg8YWFC)LMA5*b^0C)#O2e#6<5V_jioq?I=2(4M_Se#6<5nQ459jGY>Wdj=xsf1f>x z%~A1*B)|Wy8dHvnOM&#}oMtXHN=_f^~U{ z*GTru`8Ge1-*EP1S0s!n+7BXh**;y??Khk~dGg0DBD+3Ln}%|J!`YLoed z*^^Kw^qQ$F0+^yx@Qfiu{`c9F+PgRIg`C|nXYK8e<@ovECrE0h98!wNnm!YIQqFHU zLGrU>ACa~C_>3a*8%~fcZx7d~mA2O6^>Q};4JSw*-tR|b?faSVC0kLqsuLtVa6K$W zTl*h7ac2(pWMG-S@1Gq>Yei~1*VQIhR@Q7&|7@nlk`roEG*tZ-W*>2tqofljy%;UEfq~}xhM%-=9xS@LX z)LRXDfC~ApH~d+uytOZ%q6`1;?_$+$?(PZ2{}l^Sx9*=~h*an;CiLs|9Pk~GFx7!Y zaO=TUiB#w7|>gj z4$38gLT_=hY)B0t-wHA!#X`!d&|8eGY+h6dO1lQh%Ee2`$%;a6F|tB&_cS2SBUz!~ zc$y#$Qs^y4R$I5s2gt2RR$KL3CMvB$ZzYpHXCrTdxK8;1K%cXYUbTo+=&fYZYe>(_ zFojH+6>|=0|BLLw6ncx1RUb7P0_i~gzz}t3t6btK^cEvabuXTZ?q{jCdHzdpF|z8C zS=S)vRgrVv_wueN^cEv)bj%OxFon3z8m;|hKcvuGjEo<51*WV%H8E#=V%Y;!w+g+* z$k-$OhXM)L3a?h}&+{{p3cbb1>c38b9y941RWlyS=To7#7#a1@0gD%J=s95`cw_o7 z%Bj#>j12cqTbW4bJ6{`-3cbZhXN}V^yU=nv<6}n?snA=TJiG^LD2d#CKRQ$hL`OpC6z*NF|z#F=_}x_K+g$%{NRF-lvAO%7+J1NA> zW#jL4fP9E#msMY6KcvuGjO_aNgOWscz1?yU=(Z9wHm0ySL?-` zl&Fj^!HT=0&|8eGpKdKI@wA-vzWytfnnG_evdO^VSD^I`!5V7PD>?4N`DMU7@A;$GU|0pDy_m)F*0s*CY)FcGH&&)+C(Z$6(eJ7baxUN8{bVXwiTv| zk#Vb^L8qIPb5Xa~lv81<7+I;})7e1Y#OtgSJ7O=93RA_&N$b){a!lOcL@G=bC%1?b z1X|9uW35S~%2aXEZ|)B=XWSosm^H6@)=F#Q?m{s;fHVdnMS0RHo{A^4TzG zJpVsGPFaY~hV^XKx2Ku^IAyUi?Yg&Wfzz@7$A_GTYv-)hnrX=}KesxQNX zTBm}AfVWuY2bsp8`V+Wk<-(t|(0li}L0`ZC=1XN_G{cx(T* zGCLEX4A*|um*JKgMPV@T?t|IQ>G$JtUr~7WAuWb$zv|2ID8H)n0l$EFX5Lm+g(X^ZrYm#)`Ym1TVu2=<(p+3)X||==QuE15QsMoLOFm7t-U=+iK+k z9NHVqx4PaDLl)K=Q@so?qQ@Oe_M8Cxpvd0s(^|^Td@sX`>2d4Ic#vn_iHKVo2cWtY z*UqFb!;9PPaK?Zeh%Q<5D%_$9=BsfxtTp?xJi%O?ml=2xTrPj=z1Lp zX9}6&W<4G==jk$Na0M`XsXFyO5zag^!>xMUJmcSekX>|cfi>pH7Q>Vb@QObgkUQ2I7{hAemcciNp1Y?dj{H)ZUJXZTl9ZLJ&9;%nXmz`Xc{yo??8t?t$OE4xU82_JCD=#}UrFG{bA^@j$QU2PD30p6qCtoMw1! zJ#PAPvY^EG_E ztReBW7aLJ_Caf9W$OAw0euBg&m)T4>v(^l6;(@RJ4Z66b8`n7ZG{Tv>X82EfJi2km z88AYm$L=D^=M1jbMYCc4n&Hj$c+`-+FeGdCC(>y;PB@d;3~#B&BMw(tLU{OqhGhw7 zCY#}{^?2m2)NKflXk4}(;Y?>UysZa5DSM>E%Qb9FICI(zZ|{MZzyBWaj97J%S>KBl zGR~)%*k*V~J?`|+0_s7-!(Lx|K-rnyW_V{0yypTmSt7eL_KduCrnnj2)dT;n(ccmu zIQ1!IXP%qk-Sv3biGi^2NGklaMY5}8vYX*O^|;;DyDBtVJeT1WRPnc7l${xGhWFOt zKDA5sfWcW?x705F47dD5qg7~cHk%9R)}b>bHe=$Fr$5NSm3>i+CGM|F>=mDX**}28 zf)RcvW?z}blz8wiqs8I?JsxI_ZvglW#6zB3yh*q#`Mpb)eUKiHDBbxtsC4nHI?vX5 zLiqeMM%jnx@u(tqa55!QT-ES@7;V&}`Abi7CBYcD&w=9b~ z2G>3duiaepfSk>-4F`7ZE)V?9S$JBK@CE5)AI)|h7@p{X50AKVe>-U!2&>2X`GInffIRW^}uwn4)16`uICMG~J;j64$GC1Lm~ z4?IH<*1T5u$-77m@I$=}|4onEi`3}~_z7$_w%eN%k_ylFOBlXZj|Vk>{#4>6Q`RHg z5^B^Ruha14)4@&k!awdLKJC6g;D5#Cs^(91$@V3ZiX-A@68~Q0<%RIC7Z?9*?VDNr ziNW>>y=5&+)?DrYB$Sciyi5hI)`v?P58=E_d3G*`A|$|^P_?PT_MYk$Xg?LYjulAO z%Q+bRxgeSRr!qi1FGkvG_Cw3C3Q1d8-}6K=@2?>Jj^-Z=B&>JAn*VVKCox*iWaY0Q z18>cD(RBu1n}$b31<7o`f;83G{Se45nA22cES`E7BoqA#vc%$H7l8Z;$r3Z}t&*g% zGi5at5jhHEg!gA8BZBHaBa-QTMNZ4~#C=p+%j8Iy9BZXzW?w-D#uUQ=w@&otVSLJ!vdkJk$0Hvd-(%lOX3Utf4v&)0Lu}3S-Yo z8|pt123GAm@1X^AY%g`Z7AT#ES!!DlIeH_8Fv3uE+8Q< z9O1t451tYbq{76rmJrb9AokR~kql^&8<(ttWF}sb)6pXa$N9}jI@;I5rHde$gjbN3 z72(k0wHmT4PB=&;^Y02Wx?{6q@T}y;oYBqSS0Iw9cLizcUc~}AML%Tf=$ns7X5AH} zfBn#jKsLgh{xx z)4!bSXUgdx9f_`3+!dzT6*;Xht+|2Rg4bz%mi7UW%&;rSpv&{V2XZEoLC31f*2m~86?xc&klF4utIsWtzNxI+2o|<`Z1sPfI z6ts9BSjxeSvBr-tC?`|k3Nm7msSJ=Ak&Kv;6IZXIZkhd7kj{rsDiZ0ux=PMcnfO+a z;j8w*JVDDDzTo6{l#@Ac6*=b&JY`Abqz3beWV%~HM&!rZ(SDyZBD?c4k<4@}$T07& zHX=hm<;BCoqK25{R*@A0J`ovKrr%;Bncr5CW48Vw$;4Xd`b18qwiRUP+yc*t44u(g zuCAEXR*<$fxAFNLj4i>|V)iM@$%M8s=~JuPZy#kB~i4A(kfgw8$bQt-FN^w z12CuGtCa1DWG>q{r&rng7omo{=OS75_GEmiNaSQ1TR{d7ZHB8WGm^mrBaaX{G*K?? z6=cYFO+jF4M`uD(W=%yTbKeRw>_dVB?n)ZW8TNW4iV0C#ro9zp_;u?EBE$cR#Z65? zGUKfvoo{l$EK1AieCjAnB$M3=GH~pn-Ef^Vu(W|Ad*S}O$jLmniad36tt5|ixJM*Y z+$yr!^SzR6csPQ+8Yn zikyxk&*i*Np|cqo(s5N&B177Ymm`uwXEQSJ$Meu`y`e{eHdJxtb}B8?*^0Ui^&5uQ z2_rrT{{owFXH2v{X0jDzz^GMafrP#YR#!u|ts|02Yz1j;@oRS?t#y0L{+9V`1!-=a zSc^z=t-=#1CsWr7(y}TJuTzxPvLHly6K1UyWZ(%qoTf^u+ryy)DJK)w3evpZ`y`R( zRqJsZM$|2H)hcrBJ+~xR9{Pt!rm0orva2N|IWMYU63GpsGWO^R$jM2jg;D zLE19siUIN{wgg-H4CFAlmsXJ0hJmSxwAOiDnM%u)^#72_ZvglLmILzLgs;Q?1b-J> zG4OXUFT-DN&Pi_o^lsOxkGT%~SM_GyTXpV*EFvX+CEsjLVMr4VJ(zZ z?0c{S{60cbr-eUhC6s}7V2C}Z^;Y~k3`U8i7^Cj$AwN`on{&{| zY4s5}ZtFyf!JIUUF#=;~hlp4?Os7ZTIHY+{@5h@d2D8&F2JY`AXeWtS48OqaHy}o1 zyp|HNXMALgWKYdv;Eqp%cASXCh}d5ow}n1njPR?eCs7P$tXYgv7(+W##9~+rr^VHe zxE4#fs@MQT`(W;x#TbJzw1Y(~M&OPBT%C5qa+vPlyh1UU#bzJOgR z`!vRgSWp*ThbRa0*(`?WLbW4CEQYDeP*~w;?jm4v-`f;}nQayWt1Ce}XT)O+uRaoD zw8L@)tSj?S#z_9~2a7QUV`ztsSd4&sy|LF84kaLcs)`hY*=`nN8phC093{u_so!EQ z)M*O%4|wm*{n6lv`e5EWdDkpKJ8_hZd-<)a*BOc+Bw~rfX|5B_fOq*7q9D z>FLnK!AcG0=1Z52rWnkWvlw`uGeJ9w#LE#>6*V+qF4&LgoH zQMn4^j0vg~*6>B{$tR83a~5M6#?THWu^0~j9J?R}^k7gQ6|T0Xaxjn1VywUz+Q}pq z!;&FW6^H?&0vPo?eLGVOX4F}XRT!hMzD`Z`+CfjA0gK2seV;9EI&N8tWG1YS6 z1XwhUQnMrfpcqWpv!o zSKu=hf%$tD1521NK_A2Z(}OG!1F8c|eyjIKCj%piw@>4~mna9@1z<7GU<~a<6pIm9RQ$$?b}a$(aQ!P{u>AlQ;~d7&jzzH; z0d@DarE>Up&tH#Xu$=)G<1dV%osHr#GB35u7(c`vrWkCGfW^3oF|-3xJVv9g@@#Sxy8pzL^;^50*irD z)r8;lZ9SlM+a@wbpEmvITG;*qi*XlYXve2`IVyh1Cu6h=nNKm;P6LZ^A7f}|sCbO* zy>P}L+Nr-SDvn~XJqH%!Z;Y`)e=U&@uH}T`3D(Upzkhs6KKpFG++!D|Dh5Y)68{c!n{y>0?C1Brc+Igje4w zhkUj-!D2ke7&|;-_&@qp#)w|ikjlY!DOe1g5hU#Lh_QLdIf(Hc)<^i3Qh!nmwqLGA0sSu98Bl57@-kwvC|dL9NX7mF+O9AL;4uDH>rPu zwmtys)RtygTZ+MUI9QA?7~_a8hEJ`>&sNdet(NWSAd12EI@r|Xm=5hyUK;}XUQUfWYP4Ym!zVx+_v=kzh0V@{8P>P&?( z!e*7qLFHf@5-dh4jPaK~Mns4BnG_?uT~&OZ#4TZ46D-De7~`ToM)A~=4dOYxHZ8St<@!C!AfBBWNvz-rC{e|F<6Q1j1n9`5I+4M?`5#YC6F0|NA z28)3$E#b93hV^e-48^c~D2e+h;_+mA8Z1U}jPX_&CL{Xh@==lrf5kq*e(c*VTC_-d3nT$7!xI9gtwzn zi0_B67(p1r$0J5$JGduF<#4Q^u7>Z7uow=Eky0PS_G^Y#5aSTGG3%Du)J^a`5*8x_ zW2Dl@uwEWumN9$}V&95wY%tp`VKKrm#&=qb8{FNF18?3MP zS0nsePcQkadUD^SeD^NBx~jKLwEmI3X=5&0sTstD8wn5SfuOrs=>EX7ZIk5Zd&E#t zUYx{_(0&{>6LJB0cOHiruuKFKviNKfiov!kSPZuoBl#@>YuW}60iTGtdGot!gtMIr zhL6+vYlKhU-`SseLf2KF@Kve`BS!>8);z&l^F0}ewxG@A{##E^)W&2}Id zK3$KS3uT@KcxQoM+6xU<%gzqiGkm5V4;*JbBeRE{#Z5F(c((7r@L4+C=XLGu1>p;2 zSam+HYh1)0LEvng&-kAC)L;DdZkKm0Pz1b)WL_Ivl? z72#~Nf|Yx&9Gxs z;*OtdbSIo`DlmMd9*^EtBLeW(h(~q2K8$d-pTO|ddfc(>krnU*B74`w8HBT~1ctBC z zva^i=hVR$oF{_JVi+P3FW9AMMLJhMU?g@nH}P6Pk?1VsK@P@ zt1bb28)mod`iw_%#G}r(0~mf-j|XQ+mFKd#5^nMUAbMl1ZulJdSY|IhG~dfd{m+9|-b*~t64a$scYpW&zVxcTv~ zV26_M&SO!#h{7}L&+xMz_=HJoByP6KE}jX0hM)JqM{dV$Lap$*R>^^pxqgOU@W5|f z&LQ!x?MhSOndWEsB|UC>unQW!mOWs8uNj0h!_V+59{AS%wIyEPyAI(@?lb(F2Y&zQ zRf(^7Ap{P#dFJ&QenXE3`gE8r@tqlDcBb?he#-;*+WAQ0yI;xK9JBchzoW-ZuSR{4 z_-gG-a#(mK@)>^519uODVLhqlE8N&aRmU7Y!ykCyFMla6@ip2PZ!kO4_Y8mNfggF$ zP~sE+m`T~0xo7xe4}8sL5W7i*Z-{e6?U7;9p5agRc=Ur7(9`&2#oi|RPKQr~Ghc5! z8T5)yld=ksVEcje&58?L@vJgSuOK6<9okN0WTnlSiDYhGK}MBsoIqq$shW+6WJX>^ z=DGl_gKAM_RMG&v>_9`-6Kif|_0 z8UD!w?_-B)mzLcbQ??x8%(*lCUk`lk;6oDs`IGR&*fyDNXZTk=9(HO2?&gSV51Z6# z5@lzmJsD5%*5me38%IOi9Ew#JR3V$tJ(!(Ic7~_W;XbwfKYXR-M(rQQm#6H;e%)7x zdj<6NJq_6dF?-2V`9BcO{5s2?T91bXEyh(AI4|&)k1OpWoT+t&r_I~1M$0N&S*+Y2v^C9)A@XVz%Jc}N;{AP=Q zYySlcZ>~}51mR4hGd!yYe(w%!z9r%Fy2&=r3_8QJd*BH{?ImuTeTK3#dCu^h9{B0V z)e;|kZ2;lSn=?GO9=DozV}Gn&`!ny4gfnH%@Vt85aqVOtz~iy%92eZFlW>JC&#%Wr zORnAlIJA2>@m_SY*!#ps#@Ln@)Z-zg#Y_JJ4~g8kfeLSI%M0uA-~(=4> z8{6`tdOS3)5-MV?@R7DAgd5xPAN06oM!o%jLw52Zcz^tkOx z<7e!xbn;U(JBG>B_&hL_Ut|dxZ*^2-yUYv->&TyFaPW%GJfngUG-kYAt`GTR)c4@;7!)>o0+ys0X z;?@fjy(l|7zMq`krHva5FWK+GV!(wp@M{$!UACbLcWL7W!_6auAhTBZz{E-ED7&Ew zcWL7W!%a_jodmoC7CzuZ|5(BeRk%wVHyG|$;l^^n8zEjI;$Ak1Cm+>k*RG8l43DZg z=@JaNDG-mcw!B2RLWMKZ8aKWgmD>_is3(zzD%_R9@;DMBkf*oRRfM6#5S4rkjzhxAM&(Dz~8uca_vXrhexJ!}QJ@j-NqW+kW^t;f5;QrHxg| z*}dv+PBRzq8;I9AcyKP^hAP~p4K@r9J-uxy;76dzd zpGVyOJEdc=w z02eDF^Y^EY5pJl$UD{y7aMR#(c;7{{38iBb+@%dR40lc%)dX-DEurSO)vrmo zp$d1!>Km;o?FTF1-4PG)8Y;VILly2St;d7&K92@`J>vE+(ZQ76P=&k7>Tzq+E2x-6 z)midafTvvZ4TdV*RbGettPcqUC!7+lA5?fYU-3d1_7n;g&T1{NVDDccvFPDUUSo1m zVnY?~s-#Qo6_7gfAArLX1Iy5xX}S<@sKQ-U^tkEGSbW$79&j}J2f__ixT~5TkLl94 z65!&Nml{7(9=8vPhdxR>%@x#W(^tX`Rk*9J9=Fbn2hXGpjFzGIDiLm|!d>sT z8)w~^L2iv3s&H3BJs!C0LQ}xSY{WGFbydo4sKQ;1J@By9D!d>k=@V?*4!uxlwCGCZw3U_tzz$bd+ z6DRJwe}XkPUAv(QcXjf>r+)uN;=?N3BivAhySjMb!?&Te(z5rn$Qx&Ga-j%qa3U~GLz*{%0A@OE^&8BNNRN<~Z9=L7!QHlF^ z#5eavqcv3Fu6}wvdey~wFgRqv=RJDJ)(nIzR5%+UqK=oZ4PSmWJ4A1a_eztrgd;kNy{GkSM!X78>(>ENDsW) zKidcoEAjj@;f5;QHCm5{HGR~I@KEbVId?Kt;jXcIJScyWD$q86#;UXVWV}q-4OO^n zybkxNow*#WbF}3~tztRP5^ku%T@!V8T8CU^4I_x5YrP(~rCyI7PT-bT?FSNWsKQ+v z^|;07q>J#tM~PvC8>(>EW<74L)G&c?OW6wY#u=(`*H%4l?*FVZ;IM3g2eyr)E@d}V z;jZm^+|n#lZo?{FK@Cqn{0%NGe^u#v@u>cv?i0?mHES~3i(d@49Uq^c3UBQi=O*0PU2E@rG2BwW z)(gOe&@!jKyoGRMcdfnd#qcQW9z1e&9t$7&_cqZ<4&ce=E+@)bpyn7!uz`vhKZue-dfzuC*7sSmN-Z`8EO$tp+y8Ka^`g zxUsv|Ug%ywNI>aAS9^z01Y$;0=dh z6778taYw%i;e;Ez>zDdRJ$l~&d|F;19@Q?xOTvxawe}Vm%kEgQvMu0$itJsy-xF@^ zuC*7y7;fE=4<9zsEnDi_#jF6^tFgP*-u+^D;J^EzA5Z#m-<5S`;f>w3_SzT2ohQ~n z|Ezsb-nngEbt=5EyVl|z7sG?cK7I=L7OcA9awWvl z6|ddUUAwjSyclkK7`_8=QFT`Lzrvg&Zs@MvKDztvv%dLn72r_^oe1u_@n|y@p1JGf zN8PQx-Nmw-=Z(NtC%U=73U3k!Hx$@z?ZqyJn?{|^1vngyg~?=4f8j;2@P-20t-aI5 zaC5%~YY7i5a9{^zHx$_Jw7P5eiut`xIly0H_Ly1IuM=)4u-)nPxT*iWC6qlN-$}72 zjDu z+)!Yev*$oA@JIDk7z58H^*S}Yea6^IZcIffw#|ytM9&oP*V)cjD&MY>=!}NG$?Yu(>k1W4M_BKpqGdx_6N0sljj_|06 z^uJQ!na^f;qz9hAUU`XUc+-z?CbbzJt;ZuP`z`}KJzjfc=4uYY4b8SYMvprK-y9)4 z>_zQ2gd3V|cbo^_?>m?pXxW|7U0sA5nr(L(4}4wuVG{43RZh$d&9=Lo9uGTHdoST( z<68+~g7@9fY`f$2xP5~C7&KbA_i)I&e7ZhVctf-8uBgWY`rF)qn-DK~tlWLV4b`-} zsvZw>l==wxHN-<6R**fdp_+DA*W(f8v#f$^Pm8$oR7vrk8eY4hns(RJ<52p_+Er^S~cW zhwdT?|Mk=)%5JEp-3>f&*QMzaw=9*jN<%g6ZsdWVxpPJ01ILOF0b$J>s%duO)RYc0)Do?ySdy`h}$+ z+-6=rhj2qR?e40_t%I842rIH%{5$U<+)z!syX$e=wOlx}61cTrkuroEs%dvmJ#H<0 z3woNQs$05nHsOY9+TGg&zql6*FKXU0{^@bT4b`-}uO7D*YzCGu37;PR6XAwx+TGs+ z&o||u#HZNDCgH|v+C9Jn&yu5v#K+8~?!x$#wtJ8sw-+w~4aOTr8d!+k7`d6U8>(sd z5Ir8$di5KL|By(-gt3}-57Y4EQ`(Jnzb@((bFun+i1!wY6EnZCoanJ*)?9zFJ#?R4 zbKtb@ce{}E8MCDc-34~OTR{dD>Kg_*mm+CBX_u=4L)Go}*#9m$uVE{|g$3|yQmnm9 zoc#NqY=-2q|7~8A)(`Mem_2adj#-2oN^ZBu{&!&R0k97BZjX4ttAkGnHAeB|jqZpCxJM5r+)#46J@&s%XJ=yeHUeKn#X3l-zEQ{cpe5`I=%28(xajx;RoA zN^ZBu26noQJMY4?3jG#H?lJ4KQFevoW>0zDTeYFWwU-C$Z1(eMhw_S{HE8t*{hJ*FzdRL&@#-*!p&KJc9yY zx5yrL?-gY?l-zEQt#8YZ%^|b4nlYyilT&g-$?f*o`Zg{7sV3l}!3C82RnF`TCAZsS z>)W~M7uZqJ4yT9x{@@xF-cWM8J+{70ris|ZR)W(wAW9!>G;`RZ+hahfAbA?8Dh2++6efzAhzqc?v>ZqB0)~6}GoCVkP0mlG|hJJHTB2JmApsU>SO`YFWaKCAY`ccVM2YPumyZT`xx2OYZ+HUZBHn&RB9E z)#J9!%Lf9!9!p{!UP2rQMBG?%AJ^md`+^5v^l&`k0oSyH&RFxtlKYYep7lqZ(QA{czxLOs?8cJ&iU;2Q8rHnPO$Cq3 z!PQuDU(@3Ovvb}f+`sjR8I;{va^LX4YYmtz@!UtGW;T}Gw>zh&Y!%5E&V z?|9&wr{WMPuHAp|pUnt2mfZI|@NK-mp(D`FY#2-K zhaPyDVKD1U%ARqxoYoji?#CYZ@&kP&-l2aE%5E&VpL*b9oV6uhKmRDgjV1R#9(bJy z9454?EBgIw!i^>O3q2lvIpIebAu?lk5#8mlB7_@D?pJy|>T?6wo$$$qc+{i?;tf@N z;*2Ht8$BLbIsiIq4Uf1U?4az%lKY(=j|v%6j_}Ac$(Gt!a)0o^)AWK-M#~<#I9|@h zjV1RdJsz1p3dE20q37^Ly;o4-jV1TLdOYmuu73#+9rQ}>MjA`*uX@}W;r*+`Pqz4- zvKvb7L~jqgH+~u_=_}QRXWb>-P;w`x(BomF8(0Vr_1`VWcSFgY=&Q$rN_$mDxV3SE`^LWYt%F}nvo+qFRA&C{Ny!W&BN#GD>@z%}eD zMRwEs`2`3!l-!BAJ@CHY!SkL}`0&BOgd0lk#JnE(-_;gNeBH_Ggd0lk#QYkL|5DfF zsby&XGD{!^Y?8oIGIj1P6vI$eCl=NhAtYp$gYe+=Z^{#HsHzi->ha*;=h+B%ESe^_ zrVLee;tzT}G-OF`!b9T9%ZaU_s!lAS$IbRjI{_b!*KT^+SUz@!syeZx9ye9qe*p01 zhzI1Eah0y!P*o=e=y99>lc|JTo_>fU+)z~~2I_H3@!z))9(cEnY&(XkI?OEyQRMm+#J#Jo@X$Rn<>H?e1&Oo@Ks!p`)am(mjIKdIP+0sL9kQl1!#9$A6 z@;&VEG`vizE|lF+RVRje;1jN|k$CZWRg!RHRh{Vcz!M7wO1$9n;)ENXqE3v^HZ*YeKjPzL|82dINSdA^<;#c)c%s0|;kQp6h%@niG5B@@WN<=7b~INVUYtK3+lEeu{Yw z70v5=H3;gJ@VgqR9d^!KAA|S-4&$m?64ppp~O%_r?UhR$&9;#jQa9& z5|Ge!!usID9WO~H%XS56dG@XnkYG-sZl84DPbBl~Dsn}efBHI=g1YL zwWcpTWm-;a<=Yk_nO!#~eHwSJpB8$G&ydrnaffp&+60w{ zC@pj9#yP#pet!TSZJ#+vmOklIkw`fk@`V6=c-mkngGSM(tm5oJgj^6=cZS%+M5)=3S>V;+LC6H8BgWAmev6 zzXmzQqZYsYaRVZm09TNen#3cy6tA;V{rSC!WbRu*+I=SnKxyF&6gYdYmnh*xX_@v` zkj_TWMo@Eb*8PgxOM+y^TS105KUM-rv460B^JC6ZwJM>h z5;eqrv6GE3JN3=p8kY*JwD&l~t&wm4B%FzDMPh3q=Y1f12r_S(#zZnHtsrB|2B6{* zwpb5k@4_&I;1zz3Lp0Vhpx^ zI`)J}W}FqIwZZU9lB|`0iz(5Nm~2*%mUG|17@RcjpZ-vbNamRpq}8`l9Z7y&l8Q*C zm{nx22UCc&b{%<}NM@H6q`8QFG?C^)p>j&b#IlO?*^HyNs9Uqw_I;F-Ib{_Y{t~91 zNo3eVIlo~#Sw)u33A4W>vUEm#uSMJyW|CE8Or2VijCQ^yl1XG0X{w(?lKyq%T!Z;z z1sS+%J3Q4|X#-bGnnF35I#!V8LT6zBO}fqki_#Ivtg(U&eDf!+qs3hbe6=6u)mjZP zVXPwWn_o%t&R03DXRcU5#=QLjHlTgP)_u&2mYpak)5Hq0)V3|}fGm!ELaB|XaO+;& zPiBY}WOSN?dx(rqd2t7kOb#o^Qa;_G*VJ-G|2rHdm&nPyu!4*}mG+7xk7hhYBvZl) zGHOBpXFz7f>x`Py4ds%^$!xHK3@_FduTzlWh1PE&l8ImyS^Im~m`@^WbV36yaxw?3 zBFBttFUiEzc%(s)O#doK=d7aML^@~e#y3F($;_{U3=W%D5?UYhVldOSub59HlfK5J zPu&lnVFjVhuIs*=af3+qxejB}D>U_SP<7rFFlVT5qmM)~Q>-B43qENC%%1v%soO_aDIajDH`ZbAju7v#o3Is7s^tsqOM znR*e(u}GFq>5{WfCZ-i+xiz-4M3!4op$1hGbJ7a3%;XAx5Lsrz6WP%-9jzd3Jzo!l z8Uh;)i^}fp(29tL#7wk`T%8wYfJx+vb}fly5?V!8z1>Wbm94Udn15E0Q+qy<6z^wioR6=dka;;`&aD(xTr*AdCIw1TuQ z44Mcv1f4xh=I57`QyXTa6{NG+VCb&B2Z|bc+FFWGsT1awQkm0%rrk5o)4;_>a zio6_2bBT~lM6%C|@OopUt#ax8K+Z?f`k|M64iu)Bk(MJh?f?nvVz80jrl+Tz3e(F- z{}VANu6iQr-!J%pB#likBcne?+=Lnu^TO!)SEY?qm|jNO{om}Q(gvL?YNDJ9)5}QP z@dao=p-I5=-oGOr$Pk0F!t^pS>h;-9K*EX|=D)MYO0UAc9iq4^mcI*r0df|SmTAG# zR47a@%W0Wcq9c$)1X=z{43$=4dKqage*;=UQqEV43lXU>y~(6c<2G$Tccu6QIei*u z{kbNQ3e%fRdIeW#3kF^DDvoCrWJ^$(UPhMQU-&7cn~v8RH~e~WnbYXdxXWYfGvbza z1He-v9x?KP9IO$=`u; zDoigU%~w`pHwJeGy3P?fE&dOA92dw z9TQvjKg>ZzR+wH!#)eNA0HnAzF}FYBD{11UDoigU&3Qu0QO>}F?HUrPFuja)^muq2 z$YWSqNABBCiByC1M zrL{lqE=h&yWu*1tnM^>6G1xk;m=9g2!t`>obkn9pTJA2&N~FT{GSYG=xRxYaWe6cs zVR||F{K;TRPIxaDH44+qNNcm_e-ml-b{?ag3e(F-bI!UrnG-b>_{RWz<3O}Nh3REv z;QPAps3nn$yWk6Wf>fAZMw%`4n@RFyD``L#rk9gWe{4fqX|Ju7-I&7ka?-IG*A^Oi zF>Do;R$+QMS>$J&J8IOpyx36b|xVR{)E^>smRBBQ2T@Km8_eG1dd$msW`&O}C!S|snM!t`?T&(m;M zw9-a5SdAy~L{5e2Wn|Qhs{4V|rZy3eqzY1)UPgxJ-hQ1(=i=dUlv81PIay`l97(<| z@RCS{>E-0`6X%HxFCjiYDy~yudKu}Q+Q&kqvrI`m(=SMc>1AZFxd+bZCu2)+oNqaT zNQLQ5CVlF@3YtW->$;1p_!Frxy~(6ksMo(%$Qh40LpEezOQgc|GO|?WwkLq>f@Jib zt4<;ns+N(Zy<%Vl^bs59ar4B>_o9Xr!j+Nb7Jm<;u11!t(AST0DugQ|%Zwe>p2#xM zZ{!}ULbx*0*7+$+{E~i)xNr;E;uXS`lS^`dAV?x>{Iirws}Qc7jBo8E()uo_H<1eA z%E|HLh7xHjGpr1e3gODgpcKVIB)RtVzeFm8>vR0`4Z`}t^a6b8v0#`^`FM+eZhJEy z;R<)k5{F#H;a4L=`u`=nYlS=IWP=ZoTO)(Nrg=a)74DRgp}SjR$DozAOPo9xqj0B; zv`&A3>yHI^o!0V^_bI2soiftAyALdXz4st#Zk~x`*&v1dWTbsaD$q6>X)k;$C*@Sg zPe$5ibaoSI3!fmT84CHy$e@S$K}u*jgGOJKkD5Y$GSb%Om)<}w!Rxf;?k^j!LVhwb zsM#5u{0TBB#V4t#6!MdkE2=;jmPA&_18W+s(^be%PEOi0T9R=qqmxLL{N!YJ=OIZJ z4kweRlAnxp1ovME46W6a=^7Vy9gqLsG`?EGc+|iD2I)m%jPzbDz_fbsg zSkt{LkqR@*HYXY!jfZ8O4^)(wSA#>daro78CYxEV;usm)EHD-1yp3dN<8}jxR7hDy zS~qNo0&)|Q*7aF36RD80jI^D~eGo|PDLXc>5|Iii%Sda*91%b!ikxMu;(#WuQz2y; z84y%zB9Q%%46v5oD@kK1%SdO9IU|4s^9}B$YM0GKDx@qU?MwP!pwikGT)-*0D6K-u zGBPNke;y#`Va}i-_i@M4ZpT}=QXKZQ#B=nrn5~lr) zXFLU|kg_bNwZ$mVAKoL8v^IV4PLj#8QqlT?V>^}x@*avA)RwwD~bz!^lOLdr6-?63nBAl))7ZP_7rhZD(; z-zu&%s>S{_kn;$VQO!;?Cz5^5LP170{lOP~Y;m|x3X{u7XY0OyLe7s!I-7mLeq4|WlgmiQ=ksTP+=-;){d;u4f>fAXMn+8D z^&61ek&GDE*^5Yp$z^2t=Gm=)e2--KhV;1gA#y5AE+Z|Cm&^rnJd&0MDHaf^Fu9Bj zpIEv8kWWRWv>*8u23&2o-F|4tLLwC=myxm7IZ&@YewZ`X^Z;j!;yRhh zRkV2Pr_p%4a~hJ?ceQYCB1nbAWjQU^x(xyn=0s3KmjZSZ$v#1$%6WM|jJn#73t9iV zkJ3-%ROnxpGj@g@dN1vM#!jh&3w%K;^e-dL4-#N5q~$cd=TK7cBUQ?leIcd3eNRs|<%2G~+ z{^ex9ft@7T<7*(13jNE;XZ>*1k%)C`eQt9g@!L zZwpdRh5lt^Sl%{RLxK#;J$E*d3jNDSXO`BpiF9TfRGUbJ{$*s?`D;^%3_Dv)wgiR# zWn^@(^7~;d%Zt|;-E}o;QE^uk`j?U62dnfXGW^eaC5Tk$UryeO43^{_J07MIITiYs zkrDnsrX@1MuZMg-75bNv;mt=ti`T9*yh**clvAO985xpxp&9BH?hK48z9(S0tCd!v zf0Id{I-%Wb&^*3Q@b9^aROsJi(#u&e?;gmB>ufJ)-tKr5MAVQ%|1vUuLeJMgim@zy zT+M7mvV*>gc|v5S88CbE3B;U{8P?_}^1n~&mMT8=D3Gwehpm!gOXZAFA&yyT<0kJ| zOk~`|*N-TtLL4(PX2x<@lW93)rkyB9q(U4sGU&zZ&QL?Au(Uz{oUjq85XX$P+dt1F z(jJt$GLZ^#%*dd7C&v;Qbl1B&kqU9lNPCt5Tz`tv+A~Gr7J_IA3USQIDNArf(#T0i z+YqS`$BYc#ce*W*Rj`JF_gtk}s>&`gGAw8BLU31LwF5J$>{D>tUzAp1n;98u8Ulx( zG&0nGwCrycwwaM3XDh%gRU<=A=A2JC6}Fj?Vd;auCo(K;h@9UlY%?QmUK^W04K2m% zw0=3BgK{ctGb5ct&zA&JjAhQj_i_7F)DSzVt9U*w#R`Q0`6uSI6iFeCi^5a0oc1Rd zcMxfRv_tl{3Qx_*pp-9vCNjw9Up#9iN~`eHjI>t{cuJ(bVpI_#6`q=rw$DMhas{UV zp88{`50MH_%}9HJv^j~i=iMVmB!#EuWaA3cCD~xYN6M-2)SN7GBda6}y*-*lsysC( z(@sTiBCgY(YWi3r*@q+)Ey1zqN9g;!?_v!(7PzS&8m#ctJm=G4>4~&I-gAy}Dm?Y= z zffZV|!KRaP;mtny%Bzf#q4mB8+pV2W4vjxNl5#3kFe9yNe#T|UMyzb>q7W$<6e^gJ zwnH^wq3;a?95m#uTjWGgp@JD{jmU`7T6{)vxzUnB#H?UL7- z(pUvE(pkA&Z6HOXaz?L=rJM>C%t-sM>p*vFrL|8+~gg8G4>xcjn} zlvAOC85zAfT|XdiAsM}5s_fGK`+RQbl!|<2WFKTPoaX7bNVz~ejk=TDeeL2({R3hIh9tSf|E%v|Bue> zkW(l%|CgDh092@8MwT7qP6z44;8wQhn*UP4jErj9xH;rJjMo`eyN$e`3Kh)A$hvt! zIQo2tWMt*ma&S|qU`B?0s?`f}zC$wX(TMMB8k(Q=y3jsL`Nz0GBOcJ%f-Gz1vAo;>X{Wt(T2>QE1##*DpW8d!`E!{2U6UX@WrNjL@HD; zBP~CkZV%)*EUl$d$Rr{aDwvVsBWqm)@(GgRgLb=#RH$G^+7Hw$4&*{4?K{(4BvPS* z85!&M+d#OVC6J6QkZK;03Kh&q>#J}msrOVQt#>E`^zk%MDS5 z3TC8Z)+6i_w9<|~J(+SUR4^lL?SHEaq!{gOO;<|oqfo(&v~J(OmPqT`&^MG*p@KR2 zL!(cU%oisGgF*#!vP(-?>?h4lTJG;gITb3HlXv29(Il?Zda>UtA{8o_k>(!rVFc7j zbNgD^iBzayPS&c1qoBxXt{5nvY=sKuZR4^xR&Z;KK zb1CtVp%}{)DwvTG#lJg9WJJDa8HiMepMnBLYI+| z>1x8-(+6mnQ~S8m5~&cnj4V|oFSNX*k2d5ODaTKR&}C%Y_~DO;jC0MAf?gqX85uLB z4y>-UoH3*G4xrL1gf1h4o=z+WHFOfMGwALjd0a*zbQx*4Y`R3Gz4*TeD5pZ`GBW7a z=?+8&T`C~Aq!dDzk@oaYHWO)287?K2Lg;dGLYq#KbZ?hyUWL#Vt4w9u7r;Xf57priyEODq`R+w;VWN3j!rHE9xSw@B&SpgFwjSSg+s1cD0H_OPd z)PKSvDJkcdMRE^U;bs|W{XB9xR1+u(m{`APEq7fMZkCbGfx}t?DF#tz&z`?gX%%jk zk(PpePXGxG7^dVoips{TaI=iG|82ubt|09f=3OCEhAg{Tbh_t=^EQdmcn`NZE z{43NhTF&TQohYZm%`(#V?pOklzu|S-o^7c@q{7WI(w@r-9iT?q(+_+=q{7W|vd-n6 zlB^WFfk=g$AYn=ci|xt9 z1`(-nvy8Mq?0uI=`{iMO5UFsp>A$c0wwCY&Me3V$C2|Iz+3{Hm{w&Jefg(z$1= z&OOcDTlFx<_UO^7XO(81o3&}xy_onP6*_nA)w5R5?yZ_(0}0w9dXfwnSEyj^x7bA| zb1u1)2|gMOX3ZO_9Zc83t&hZ?7@RC_>YFs0*4-F8GObTYHy4W9lu4*HmFNH%zQ76%S3=YO9p?%L}R-K)^{SyvLN(8(;P zb;svIK*A6Jz0=lPIB;k=|NFzfAI_ryg1!x&y;t+l-3wBolX=eGH?jdaTIB3HydRMY zoy^F9>QzCpdJjM{ph|?SA%#w6q_bnfNFe`4(%E+JSIVi-$&9pL+yGMut+e*jr|_v2 z*QwCSj0~Du411^fm@{bX&VPwi=wwDlKYaztTssFH{a|G)N&ffA;(3?000}J+RN$OJ z^@vpHWR}x9{vu4ZweOT#M~%fPzPL_>PG)3q<=OaSuV(StB}Hs49#=!0FWDz4E??xZZU~Aq>#dl z4D0d;pOxQ`3~S&0F_8)>%t*)an445u#~EjI=EqX9ZG>*|vEzIuogo!i==O zp88zy;rzTwO@!-NMS~X+5NsJGR&Ic7?BDo%t)tcB#xgV zr?X^vIg?UIVMd0%{sJp2jSPFy`3B`wNMS}sFFo8H#@J|Ay1M@HCxKwap=gof zkYs!^Gf9X+5`ybM2^O4Eq__sBIDX zuD9#u`LNIRbG~=aOi{L-;R}Bkdq@%r6B+XKFhp{S40#kH&Ui^EOk`-b8<$arX54iF zM=J@1sjT`CR^Cd@(75faFOQ!?l2Dk)km)~lMj0}($5fP(P?*SI`-~Xaw|vGJY;3s= zr6d$im45E%KcJ>E8+V8QC+nrmM54!E6?P?$(#OfW3zd=Igj z#;6D4Au0)liL_>Ndgd4St9ZlF(89OSu`Cne z(q%8fUMcf?O#07S(s<(q>}W+AFNS7D>Hn>kG)>vJ8>MONZ%>5`)RaksU`3kJSk=3o zNK^ddw4`xEIhL#O?KG}9*+A56t0|{0gLy}a96wCVlKdxV%8#aYLcUy|x}Ezq<=T5a zgw*+=BT&97_9kY(+K zv`!y}HCtZOl-&=Cqhk4~UrUs&A~j`r{;Hy8@ITjtoTDYpuR1?LX?_x)B;-3SX}sTt zt(=sja((9ll&urAq-j-T7)sNk(C>xZqbbWK_Y<<%MfO&X--r5Gw50LFradT)|0M1a za<`T=wV7QFrKwruA(VZCHKqHYsA;NoNSuBBVl`#ixA{cP;{7vV&Hha^<>)HIg&cB4 zyy@w$JW~FTd%S6n-)SK?pB4}C0h(8~DgEygP#XUo`v;D8z&~1}HICl!mykoJTtzwj zgO;=$Sj=Yk{Oq&r`cY(gBQ)=~mX0Pci#11So(Yz$>Enbf+yP_E6 zvMHlobS8(8U$vywdQP12*1$g|q8zhKQ$`Mg_h3p*t1GfR%CWVzr1@EMaW^sFk8CdF z7cFV&bpIc$X=%IqGsCCES7_C=MeZqsHEkgc#ddo7YRSOd1@<$`BgvTVNTFst$Tp2@Pg z-Zn+~ynvPr%6=snM;nxJlmq3$d|I-+;bA8z2TMyIpYjz#hN66-c~ne=mX*SqrabH7 zQ9jqaR)X#Uuw=10-rArS*0cnEE4onL9@DC6%2B=tN>j#Zjj`tYLR!-J zXmaX$<(7}ww;v?WvOfGTgv-k(1N?gs{=J#iCx=wXw}^i z-JwUP#ICW4t$K9n#^!#KrY+?l=U{)e{aR+$C;^Kd`0q;(uko>X>DNm0O^~tKyFhf~ z-vFF{Y!?1y`x7$h>(}~Fr81O+XA*=Vub=-5tb2DH4v-i|BM`&yZd)-`zUevlAT!OeQ$ z&_O75^lQDH%+_;!wAPn@9zdz1Uu&%$f?(x4do3%rvvn&Ut#-dwM3xKe4u7AGHX=ib zn?h>$Yi$Zz4Dt$-j`exi9iG?J(XX{OmgP$0nKZ3v{ZUBovmvr??X9Nl0eP88d-ENu zQR?W|I@zl*ydh%uYQKadYs#S1?$>hc@3aYO?qD??yF0R{C*MvT{aRbru{T7kn2hvd+hsr$t+S^33Y zHXGtKb#!`p>a(QgUnX5+H)TMnqtmPW&)(zxV^sHvmVYsciqAYbsBoBtN)t#+rE zE&HXbAeS*|%baZhj#fvfSHF@?;CKcy8P#(xn`!cWtE1B^x-VO|&SuhFao$~&+MQme zbhQS7AIy$||C(i*18fuoh$GVpJXmxaY?R*clE_ zX$&~g5T%YzFIx}x%s$6PYd1PrR|g-hj!rMzq=q2>VA5ec-xj5gPOs5FGdYQl739ltnWUlh!cfM8#3B0DMdjrPr`L&TECo~Kp<-gRIy$`~%RNPD4z0)D$n%;yI=xo-2B0)7 zxg?(UIy${34Vx(B_^oVh#cS&5^g6J$zmWSz1fbN>>2>^NeIbu56L%9GonD8Zh%>=( za2-o9_-J)>daaMkB5JO2v22n{9i3iPp8q3c%n6nga;c-!YgOgceY@-h>-6GMN2k}g zb8OMU&mqI;*=JDd==4fD&|S#>zlt+nN2k}V@IoNr6*oMQt`}h+#pR>b(dkvJ-dB*H zxh%YS7)l+TUa^0|{aumHN{4Tw)Y0h`xskoAeXFC>t6a=VAxrHLGe#YqUd`VR6SB!+ z_SS*d)Y0kndony3lz=N^YrN2gbvi;ZC4CbK;hT>Zs4lsY=S8kB*%i87CO*ZI$c zQoGa375b4qk>HL3^FI4LmT&Xz)bUM_2X??bQ+bwE+1G+~3v#KWM=YSyHrPW(Rx_+z z3DzUVrH&r4YRh4U>IZWoSeM0iXBiKdI(o#`uue=xMz1_7R_Ho<#5Nn?$*ai7jrYaA z)$S3q=IjaCq%XYpg0FqaW@C9MAFYlavHI613t6YiY?RtPV%GG2qB?KXvqo znU-D_GUx}fLf6qF_Qy|b#;9!PhIW^6wEsts*o2JTQ$ILty9$qAKbB7UIL&+SBiGR* z7F!z%E7DOZYzImmJz}4q2^suuoj8$n^oW%S+le)uB}<44Mn{jBrTZ?}O>jek>9Mgb zdl}A82OT|P+vba@jcfCF;*qbTM=YV%DX4jv)igHp6{FSBBUU1@JW5+p&nz6Rjvlel zYT+m?&U9jWtfNOPX*OF*^3huRcN5bL9X(>Exko`l+yh})P-pgvh3{J(Jz}lzeuvVU z7`F(ejvlc&r+*i6#wPaSi`UfABi7h+M@aXqN-0uLk65j9urO1$(^@sD8A{0qhe-rt zJJp6wGaj-%WIGYQ38ju6vBFO#2w5N-22+Eyd&DBuJz@jjj9?j8H#UfYw|-)chkTc5 z_lVi7b$>u#nUA39c_W; zhs%X5a*BPrhHs~Kk66Hn1oq6}dnn-N1>#co*X$7ssQ==;kkLh1--}XH^DRceMq^DO zlTRNKQnN=apl=YH^(v!nSNEupnmuBH?nr->ft7RRMycH+7BJ-ud%`I-2gk5pIKG|Q zJz_z7D#LlF$e>k$2T^MGhy}D5@&si-jh*62uH7S6KDLZF`^wv@j~6w^Xq`ib-bIdK zO+(8`Em3Oshy|T~J_KdZu503WYWIj4d|JT!gp@t>B)J0C)b0@r`up2jLT+9u64q9l zJz_xKgj60z|JPl!yv4Epn z4`9uJ&7;KJRl7$lplMv7kX7rmP7;1M(e4p5)H@Z1(hxCOz%mD zw0p#YrdY+95H!$w8b_<$BW4J$1N{oh@iY|A!umn@c8=EU5i{(r&8Cq2j5nrLiBh{qEa-Mcag_y~h@6R1yGJbO(MNd8oif^Ut2YSg{p~O5fHM8vup~;;_OHiL zYWIklx{PF#Prh$W&DmFxC})Cpk65{)D_HK$Ww}hf#Cs|29k(77GdYuZZ>-%T7P!o`5M|)h zm*H4byGJZA*mg3V&!_;S$eJP+m@3oSW~-4%rIvRs3zPvztBEr~ zy8|jlL_Dd+y&%IM!!m=P9qLqg(3f$0{IU_5?jLPuj3_lS|2u zC6M^TQaKBox36K+64{QeGPu;yEw$}fJCGh;^N$miQR?WH8W?^EB&@}tTdMyq_BM&v z)bZ_B^H)I!i1MqGu6eoGr?$A%?v}EZngl1cGFn^lPD10x}{!CU~gFy$O}o2bbCf!Ip3a|uD@-{PLQj8Xy_bBn+C5L9Ira_( z2_Y{0Zf=%cZ&2#!c{>067|0n+8qdUtYeh%T)8o3JQhwj?{$VyR;G@;i^Au2pWl*bF zO$*J3kJ>gahgoKC%)1e7?5 zQb*5Iz3J@5!!Ta6R>?jnb@V*FY7ghEay+A+-*BVU(eu+2P4_!c>gajeWGxO7?kMnjZ*8;ED7AZ@>{)Is z5Tnf;(;KCZo~L);z}iH43Y!19ABs{(&y&N`R!DnbN0d5xo@UHq8I&?ln09eIN*z5< zZvs{e`D)S#lsbBzI?sHC(%f;wK9o9op7yq2X$K#zVfQ8RwAaz|wEPph$`rY*6Ppq9 zvrk9Q)3stbg}gHVHA)>lPxl(Y>>{P+oqb{srlaTSR>}23-dG{-w>o;B4z+)1!2@s$LbP zj-IDxYuWY5Yr2~HeTz~@&r|S8F-M+MP?G zo44Hu2?-X=!T!jw3FVMceATUfw?WpQVe$RoO)2|v5txm~oqmQ=N6*ubU8aLqvz>jzv?KX&u^H7HFfknon1NyW#pL*EK}t7J{>(z#=M1L51nVDwFbqA^@@(3 zr|ut43fZk%F|4Vh=c$C}rI5w%M55Hu^VGn9kC62o>D zetxiw$H)FQFcZjn{J&q1ZJHu=#7fSZtHR-^WMR@-qx5{NsiRS<>0D5XbR>Kh>lN)r zDM$J0FxO0xrEZA3iH=68s4H+iq>MH)2)8pyN265jVcB61t!3M3uDQJ)Zl{h$sZ(*A zK=S9O>*U_ND0MVSb?>to4|kwTBjagjZ#OWRF$!igDc+;Z;5@}38juksi99Fp|lPuP#&d@MycH{ND7sj z)}19AqtwwT)vrFAo4}EQyGhS&=~ASgMyVfLb`rAvcDyI(`7*8N$1;P2=QgZdpT%^* znmQV#BAVwFvf?~k^Xh1nO7n9Cv1Km7BzkX}a{xvrY;uIUc zJ$)~+B#;EUiL{tTGr5Y@w3OH=CS{U9mq^pHUTr{5VA3@2#4k8nNuWz) zK=hRK&LhBh4lXMS0Y`LClvz;?F|sAjjGTDr6kZL(w6JeX&kLBT^_OYkp#L# zT8_G%Aohl^Ty#0VPVeh{pB9#QX zq^9X`IGZ?3WDVhF$g51+y95qKDG78_rC-9`pJ76ljs@3#3D-7? zX^te&O_e^5%k=`G<}Oy#@%M5E)|3RgM8=$`za7f)7ZEXg#)>66g{cw);^zkbDvm zw&}hIQY3*ck*+p-$H8d7veCNSt8U_GC4nxH#-%6YKtk9FkHv-C#d1p$=o0DZ5H=r1 zn~q6Gt0p3(k_5U$#`yN{021oLhgd&dG~;L`fi97*CDt2aJLl&dgHjUc5^0ZXei7te zR?{9l`ZY>Ppi5-v{tClE@-rcH>&^(2l0cWpkWZKX0r@Yh8S>8!)^Nh_nvy`5NaOzB zPJo=oq;czGd_*Nl0$n0Q&R>`Z66!+D!{z<3rX>{{V9 zO+#CYJGCUxrSjg^KZU$feIVA91iD0;6Sg@}nrr73;i@FiCDO2Y2fJ4IXbtPnx4@c` zK$pto;Hg5+nj+>Vl0cWrGyTOLG8`Wzf)q)hOXZc}cSX%}^ZVgwC4nxL7sgi>^3)RX zqEHg(Qn_m>yHhKBXv;0$TmdI%W^bg3K{@lnW;KTJR=33Q1JdAa%-NYLN=cxbDt)S){W=0_@+VT2<1@aXlmxm&hDFqP0ei^Ij%S#2Oa+vZ zSeD3$7EODBY{q274^s>%C9y1#(Z`3^L>YZxRA!WtSeD4hBRj^TjNG4F+!G|RERoit zvl3tr!C4PMN`X4@SW^XU@be11J{rzDmo(rGKr&Uj_CL3c$IEQw`_ zG)LBgP|SBV+fH*xsCWuWVp$?xf9bw7`e2LY#D>2mBg|{ zTEeHK0||{UkY+hYi0n-g%Mxkr;eQgPwbQ!ISW^z3FT zdxoVyGYkDfNj~H?p}kCr@lX^JKe!7OYQSGBu?Aq0-ljAFv#oHec|z&Dt>EJ3VMIdF zpZTJW_YbE=xP&)SbH|p(?C8K64c3IK&JANV7$-R{;f>YY^!%q5z~Qfe2=CDip4Ri~ zsh?&cyos7ys?7flIKRJG!hHK;b&}{3-b~F+J6rb#K9N`7*yaXu66+G)Ld^q`R>HH~ zcQE4t{hZ$jo|^3v-crq7$pw}JhZ`hBY;%(0kduIy@YZT>D>u3b4&GK|9DlXPb{$E1 z32&?BmfQcbg*EIxxP4q0>%{6L>Lt9rnn#2Lzzj(Fa>j_D?Xv_=ZQv#RM>Tg`o_!Pe zbynSRZp%&NB=jZxCp9v? zx!icIZ22KPg3)k zYzYT}S7AIR)A*XmNlZ-mU^RE`v$Da%+7m9=%?Zun=q?<0GZ9-4x;qPWxb&?trJ~9o@lQahS7gjwqV{QJnnsE{x6Fy4K zjhBCBSKM^QjVJGPz`>LJnD8-b9`ZcLeBiGb54k;%cgC^mBt#~BoSNGVU0{Z!d=HAP zTwb2yLLmGbn4m<1kt~1=Wm%!>I zs3v?<8h(563Bj)ie??BxYQq0W!w)}UOEjhWfyyDsNn}m>G*wzJtu%egc0 zx9@Q9B-JMTpqjf{#6LssN@)B5If=FjKa_?$*XI!2m~9?%l5Z1!M9stBHG@}!ekItp zhd-`Z9ytlQ2|uRhp=GDtMIKsoZ3J?XbQ69e4X^WQui#aSiAgDmy9xh04evX$zu-MC ziW@b_ya_+8<{{UHzfFM7y%Pkdr{2@SAELeXYwG z43hz3dzv5xlNytw4!!*29(L90|i!XrHNzzXE<22ko`L^J-ALK+%;&#HH zrr}q9fn%OB_;Z#*$Vui-_;WS4zuOIwk8fSJ>+Jtr;ICj{+iCDl_)9f+)(%X70|zHA zObe?Ge~r~i`cC*OHFq>GABf!1IMIQeMDT>aNyCGleippgvcK%dGzK5A~MzmdI@=hZE> zzVbKDjFXg}a6dJ-&Uo`4xphi0{>qSX64eu)Ud=643$Q)^2itZ_OeOx#hjEhE6P`iM zt;2uGh1@#myB~1ZkLkr4 zJh#G?-$2R+71MTF8*>vL`;||Y0k+^#e>^+6m-1M+i z4d8r5ZaTL&MpX9}*n5hoxy9LR0PvNpx~0$&k+^#e>^;TQ+_ZMiY2f1-H%)KMdnwp8 zi-5ff1l(UmNyQ!-D_a) zDXr$Vf_IAG;H{rCi@|#h>^)`G+;X}mU&52ob6}4A2*&Q0aJrYs`@IJC9;=G`IBq?NgX%l^ zwjVy)4y$_&>^*ihk2y2{J`{!-3#885qaGvo8rXXrY9992QP_6B?2L!4I(ZJc*TCN6 zQgc`5V*Oz7aLq$#U30()JSM|RSkU{$GG6)Z!U;HduYtWMO3hsxtHVJ{+4gBSO~}0l z_MS>=Zm<0f+$MeZuo@2R8a=JuK4l<|dY z9wxbQWyL(vYhdrGr{<=T1xEl^ZdRGHbiwLg1A9*cH8;l{ehYjsuWo3W9l6)Q-qTRc zqwde?4xAtNsDnqIBKI2Ddwx)JW6ce4u`1P#_J%lDO7a@mdlJ;#-sodd;OE)k?IHdz zvAWm5-qTdg9Su(O1iqPZN64|($h`*kp5|)qT-v@R@O6wkCw8BV+-qR(NmO&Y|Bm4} zc-y1H9^_sFdrvDhH$Q5(2RNTyn2+rmiri~p?`e~U8#}QXy21-3eMRmyu=li6bJL^; zU6Gsm1v!y>4eUJ~((vci4hViWWF~U2fxV}rnwwkIhbSRs@NxA;7UDIq_jFQo!;YqK z&=hW1wO}V!_ZrxHx}@R1e#j{J)N;Qf_ZrxHeon(LR+=LCp>Q#$^%~fFx~Jhc+d}%7 zGWfrHh;8>8*n4`W;a6LR3w~^17!KZRVDIUjhX2{~U%@w?&Wqe@VDIUhhBxoJOz;}l z{_nuv(?1R0T^r_fDcip0Wm&B5HL&*#Ov4w%Y!rNAy_Lwl2KJsoX}IS>qToYnCn5J5 z*n5VkdC1$v>}~_^x!@snXGbyQUITm2urxd}tPgP5`@lxVY8k-I8Y&xYJRtnT&%`u5ZcS#vgC2|2*=u0$nUsci z`%+WzmP5s~&}(4tnWE+)XU~2`97o|;Frsmpd7ftp93eh3d}g-8GXkGR`-P24>T z)jaa#q>;!Yw;mH0tk=ZdvslfoWgiB>t~b1%|0PLa$D&# z$B=u^&3CK0rDpk$$SoDG3hq5O->c@7PB+&x%ppd`0sz#7kvKMx>((NZhklo@0Jd3_R8R`O`~y5 zAj!>-rr~W$L$hKEuUDskN_9zYeq7CA4Kx7wBev^oXWoxPP8#4z=65m;cR<{Oyy$*> zUqZi}gz!@eS8{VW-FzVU@rBMcpPSGM-xdBZ?1+?qytcv@7p?Gh+a$Jb*sVj4Ht-eN z|I-ui{RN+Atx_4bZc^9OyH&97VRp&E(Sw!jmk#aupLqF3ZT#2)|MP6{KTb^Z72CD) z!fy0$41eYyTjj^SP-rqdcV!*=Br&$v9{(K108t2xp~`QpZ;?w9^<#PV_Ys-ktXT8vbe<$;yyON+rMb$qi*Q!`tD zt!1ONxQDPw39m_FeMwEz@f+;sFo{Xip{zoZL|-BU#_cN!awwAlzYJ%W7OzRde2H|e z%~KsD92tm2moLhNlH~XjX$$R~fTOk9>}^q!2wx^$<~$&mvYIy28J3^((USCDA|qS*-ND9-H{lOlbJNVn87+96?sHl zB@$_$Kk^>P8%)|~RjP=RB=z2$|9=J`@s0s5_Hqm6l#!+?@R^AZ`<>&Ydk32)+je1f`X6!(POsh|Cj$gmgp z>p;!iOolzEUlVJRJYOPRQ>#Iw>F3L&YuxnLC`ptrk;Xs$e}d8e#-wrQLblrD$CIS^ z66qM)1RftLzn3}CpFIP(Bmure#uUv}6l7IaGbUdbaeb2PULsu=s=$0BWjp`=#6m<~ zlf?ECY47>y0c_`fR@2_4M>I;3*h{48aX~i2n#QE*P80Teo!2B`y+nqVDtG}Ttg4^| zs>p}4C`nE)k;W%;V5Giqjlxm6UxZDFc})`0OJvA@b54MK!(_)N9mV+G5YqmViJ{`#=3E?F&`kQI&wGBU>(dk>2K}qs= zi8S_Uw;5|1JAPns6t795cZsz3>k6w)ciLl35{65ptBW}! zN>_(f;_M?ixJ=e)Jxa(*`A=a@5`jx(MAnMaL6&0M8R1`meWr?UCrQ60GSvAwJ<3q) zusDy^@@?xToje}B?gxxav z;@jVaeAMe9N|JN`k7R#dpD$`*iVCrILWxGOgTLYb?Y<+1Od{_8;i=N`Q=!i&9c?zS zh8ez_NV+YPQOlvWQqvI<=8uvD+Y;%ldFdufXVtdjQIbqsBF%}b+2sw(W|)#UDNzR{ ziL)irb$3*Lkdv5n-N<|aB}uX+(m1>(TVlb&1(rKW34tg{h%J$}szce7oJ(6w7ICSO z{8}O{Eg$zqX=&Ow9BY#3S|Y70&a6ji{dMeolq9v5NK2z%O(5Y`24Psedc#nXz*-`$ z(}z4qY4yA;gOX&`GI=@+1Vlk;-TALZ;LF||xi{I$4{qZY8Xbavj-gjyz(lG*K= zZ>P0)jV&kxd-AJ-MX3^L_pQY)Zx;3V*gn?7#WwBdmPlJ&=m|nuqY!)V%tuRFx&KF| zrqOIx9SQYrLK+RT2CXzYuuHdghQzLkt=hLSv`_5TsY~a+{8t@2bnelnTj#`|43#@{ zYtu^e7amD28=R+Qdl&Pa!F0gfb=k0ifjNkU{I9n)W&hnld=gOF;<8a6%WQW7E)852Id1ITJj#)M}7 z52YkTCermW45sEO+xd25XOxlLNat+xR zLhP1|JdIDG8B@G-Z!rXCKUuAh^yvQ0!Yth)iT?$#^zrc*|sH z(d8L%w2}~+NL%A+a8)ZGBD6KE$rclQJ0&49kUSKEtHZFnMnJzYNtV7VWYKA+{hwtepDnOGLeo&yiWk0 zEpUC#FU+DtE+ru{kz_ zmy!^fNTc5`cZB@UCC)xch)iXc+OYmrw$qrg@NTRr36ZJvUsOs+zZ$V9B_T4AhPT%i zp)|aTTY*v%B2($v(?rOz1K0|L?;%NuOy!3QKMDEfQanmYh)m_7gByiBki;T2UQ-ex zQ@Jhix{#ZLCZLpr$V7$)_I?EN3%jyI%a@;sQW7E)88YGzm_;eCZ$pw+jzuX6k%@FJ zsC@&abIuf&E%5D>gvdm?#!rB!V9G1wF@e)iN)p8%>{~mNVcqZb!(MsZHD*wt0GvgHb z=ZH2aCGj(rgBQIQa$wf~P)g!wDpy7J6LQ(bZ&6C(XCiGu-_1j5D?eVGx03kzHv5|k z^Ai&ufiQ*YR5=!QFg*6*zkkf}4hu`-XHwWP)W+V0ap_313< zC?)YTk;YkJYeAl5HI36Au(yT$@|MKUMB19Y`H0e%kPO+IA|>%Nk(U1F*;JL+wDjK0 zdZ2hsN&HNt^?+*#O6%SgSy4*jXCf_~(q#gZJ7A=XiZ0(xALuqSWpeRa7{Cqq0OGILLQ*oozOMTdqT;1WXTFM47Y`TAo zl)oy;=Q#i0z$Gb5&qJ=}V6$E>Lyo=>Pq_4-wWK+zX&02{F8h06P5*DTq@~2joG2~1 z2M-Z4P*eIB`;5~3Eirfga~PRJUCHVdhFR4gSfC!@6F`IHG|2D4_(=B?P%M%hEPNB<&Z zM=fbR*l{IF>mS{Vp=@$gOPa$UL6(l!kLRMxbmmMysZ6 z$`aT{rKWB8eDNf2eqBpiKdtGA()ze_WvtoqnwGR#zWEKMt@s|X{%IAdC9R*U{)*E2 zbfCy)Tg}mwbE6sxIo8nxN89S1mNXBGxsB5N^Eh!lTPJ8qi{oS@N=y0gLa}D+JzCOy z@V|m6&0F$|hg%@_FwNA+MV} zDEq}~%I$TJ3%Sb7KEK583H_UBNlURkgHc*?jTRH6{>sDX|G39nYCaQt$P#%+tn&tF zUfJelzo#CRSxcVdXb1eGHCnU1Q(qjdx%3@;6ekV;pe1bsMomL$>-4Aq)*PXEzqMsv zo*kw2lS`a^qcqP1>+ajtgj{|3N31!zspe=~|8*6mt^P8R>W==ZDIW#F>O18=bZMx_ ze#R`*l#h$R8ahQ@j(Llt9a~#VT9Zq+Kxv&gFq@EHw4|-TX4dk z1J(?_vPNW<6IW=}w6}2GM`^F$eG1m}^wpAqEzE4RZG7OL!1_hR0%lSbEg7_ICtC^g zqY^Y@iV|3L|M;uCHm5=*S zPFt^8)7@tz%Al(AMaDIKu9mcn-f$G9rB4kpdz+zoJS~~5OHi6W_=wrt%*C2D!>+S8 zTKuS30%tmKJ7>+;l+E8)7qZs6g(zn))RF;Z#_a>Sh@C?Lg)@qI{G3f%(va)B{#euC zTci`#oV!y?2A&PJfULpK+e3M`p`7PE9V2H#`R`0eKviS1e9op~-uKL*RnvB?Le53iax8C|!JbA6BtGz_|_Lx>p z^RjvnZz-cS&zkLn@_ivq*)LqoP0T;Wig)rKB+oKs$qqZ!hy6PM{=KR1r@RU!c5dCR zONZ8mcHI)Yw(roYyP;->&TVQZ_Gr}}Mr+yPb)d=t&H+_?g3H#0R7(kwgYzv`PB$<8 zVQIgPbj)HHqCc#ap+D@Gyd9z1RJbL`KAucUI&vIg^BK_a-Z!g_y}{s8M}OGl1XvyU z{mEp4r!R|8l$x6TVa`m3XHfGglg{)Ns-V=-AJ*m)+_!x9Flla`emqLa$CJr+TBcn- z3=(Du5Q$B897Cz2KkUnzV<4w8Y5Kf?B_@13b@Yd=-^ZR}BbW?WSD5vWD$@HpnT$4K zk#7Omx8E@tksQcoLR{+T59?O$FC49{(>u0i?y{jj{dM; zhO`99!?cKD`x^`C{o~1GJ6*SWF!>Lw>AJC`6iOZaVdf(&$Aaq`&ICgt_Wa|cCEq40 z3Gf_QNBs>Fx^&=-&vfwwN*(=Sf$_!RjTDo9O)AXkic&{^*pH4vP?KLP&bHMDqtwwK z=2+hf%57q!jkUiFK&hiYtlVPA>-@fDvSO(cTTtrg4?7aQ86>;;`M3@quZ~i?KP)^x zZ#R&zK8LTAimCkorH=lvRp;Pot$ZQ7V`Vm$nDFDN-5(aeVKvNb{RXp|@#}UMN2%Q( z7LvQkD%{SH98XrE)X^Vy?YBE{JmE@%`1o?>4k&f>hgBQ;3eSYFxJzsf#kW&Oe^~to z4Pdl>tY&DP$_-KK=nt##*RN1>4wI(xSzn;k(H|DR^m~x+dCky`Pf_aV59=D_0=bS! zTjy%xuBoFxtoYn!bp98;d0Sb z@f6h2Zoi3AN0-;W zQfEQ#V$!km*8wQCyS!ZK7L)}E_XT)5e7&{_rH(GIY6sz1ri?cJZWoj~y1c4AD-3cf zt7(aUd>EyUF0Z6XFl|$$dBCFeD0OssJsz?hrRiatW+-)Zc~!~9=BIqL=1RlGomxki z*Z#(Nh1^$}B?(dAWQ8_Nj!zBLxV$oi&uP3%bO6@K$W8RiFl*a7S&Z5-O<#i+BHA=&^U#uu~bb0-~mc13}a@MA5D7Cx1!e5q$r;#GV zA3yDhQoGA5;_l0KC?jrEX73I7c4~KdMXcS?U&v*J#Vl1vmsk88cyHhb_dl48$0YoV zHFb1(wY&5O%Fs4P#N9+kmzSs4MIk3l%Y!v_ba}1rUrET7BUl3o-$OdOyvhvkDP*ZQ zmPT=@qs!}Nlbvw(En|Bq_|n$lD0OssE$wE)Iko$@QzKF8=M!yR^{wHH-enOWaX^0#o9r; zS1az;{<|pSuH_UpwR^Q{UN3YhNj;V6j;-M&Y^lDYy{1|K6LLaS0DeKkZ0ge*Y z1Png{lAnFS<(H32kvc*i=P*+w92Iz;!AxpMf>;acXz*H8dLBwga=sWGt&Rq-!7=PU z#A`bGyVs%A(cslEK1A7L18F$GS*vf z)Q??de6-es)%;VWo(8WS>8}g9t^6F6IvTvnMwJKolIAtw?kbSh#FW6{<-#*KZQWDFiO1~!MCeMK>B$IwkibshX zlO&c+l|IfEXZJ!)eyuob{2-zxNi0ibto3*`D90aeu@!!NjiZ&svP4!a-e?8Lylguw z=B+Bu1W7DQq-)>pbs*C*>H7VBTdXOGWr+-rDgciQKX@ENENf3EYD!{RA|1>AUJf!7 zlaARHmSasxEK6kknw}<*gP4q8oIevvNi0ibNS0rEiS7KdV=GEYEK8*Q{5NrMJozgO z`{8%zP)cH1BEu?e`xDQEFl*@#C?&Bhk)btm7lYCIvh56w>MJHIl312VQ<=XZV)vcR zq$&5x{a8~H%Muyt*mnXXJf@iTuieF`tSe8gz$K#zru4U5JqNjKwNn%+dqYLE9 z2HR<6GCK2aF@==GvP7De+*63bFKKN0R;z9YGuJWWJRl313=XouxJ z9+l_{(~jdFlEkt^8kZhgfHjS?UWo~kB$g%8{#Ag{8~+Gl0Dj5Q^(ERl{a3!j68 z#Tr~?%hujUDT!r?bbgxjGsr)fbUqkS3Z*2LCDI-ja9WHu#9tg0Ni0jGCHC$&Ao;V* zV*6bj6-g{hq`6-scE9D)+;+4Wtt6Hu(sZx#bd;u3Az~>jiDij2M;@Jk(rk!gEpYr= zk;Jl8?)o=T$kio8L@J48i8N*$*c+wcb--e*DT!r?G(4}JOUSE352BRBvP2pSH7SkK z=)X_Q7$vbRmEX-`Q7}I$#%z;XV@*jcOJ&g(aIZ~~-%Oi=QWDEjndN{5rQu_&csfX8 zSt1R;)r%K$+7R*jRuan+Y0O#;f)r)6hJX224)HTV63Y^4xMHd(e{a@v+USW^1&?SW^AmS}aEK6kY*$?b)vXt$i;J|~ z?78A*HC+q3)IuqVWr>UrJ3AgEf0o5t9qbD;`1L7?Wr>X3(C9zdLoHd&$VLBdLMe%5 ziL9KZQh$)}Z1M4_^y#vAX(x$giHy700M?(1jQh)pp+=GvH_(emZfs?j5_J3!`ilm-L!#i zr@8O4M<^u;E0H0FiEK&^ry+dFZ!!L}5d2b;B&!GQ)P)ZV3A}s@tJ_Naq zZKtJc)te|K2`iD-{VhQ$()xRb&L|}bE0MO00R|yIv|fl(lCTnK-B+63bopql>uyD) zNLj*4gFx8lX394>@^pa>z{l(F2?eC-$8Fs$v3Fw2pW380=2lMm|G@Ai z4Z7_1GA(oJ?FHKBU%@yUv9iI29Ow9-=<3p)H!&HK;O5}`V`oRjvcLDazAoJoJz#p} zdz+PX6f4N4=v+$TV3KAhto#bg0>6VyCj9DVlLw_{YL{;64>&dWp${7l;m-UwE<<5h zox-j3+qtaGl56AMV5t(iM*XE#Kpu=fx15NSEkAqFJ8MubamYaCm_%2OR2_4>-)#plNr%zc@%F9VWb$nn$eM z1(ONCqKrqZDDniWOCn-2ZriNEt#I773E4NIBoQ$wto(K`;m+A}S^98@6?RU4+7`Ja zCnhptb1+L;{!xZ}nSF|$?=X@RlfoU{sA$Ey6|dUF@I8C5drrVZSE!-mt6FG3nRD`cglD~$R+VIk;V%p{jsp| zXot-xNxV!7E5F@KxP8yQ;=pgRaoe}I7SCgnF%z!*b}!+M7rT6cLkJ7E%sbb9#p)zz zCS3XLUcy}!<|G5>(@a;f9QTluw3%?_w|fb_y={EQ)yGvSNXXN;xo zCRng24|Yr9=_$xb?o7Dy+r6Z^dHQE~8J{vQnDD*0b(8R!aOJmqDbG@BgW&%0;yNP< zG~vo`_fq~-p`(H~n-YnGCowePE7jX>zO|>A;Ma1C>LiOMT>0%@Qr%eUa3AExVvQB#${~L0WUK6hT>M!9@pE|H`Es))9qTc<+*HLV}BZ;tyjNGxRFi3cT z41wO}uVySPiLi-`$PmvG94;e#BgI5V5@A#M`9WsmQq36~&BJl5!Inv*G<5lrif|T)~=>l$%KFx{=?*9^&uO zt!q|XM=43Usk}7@=94M%#wFGh#`mox<)(5`!e2rrugQ;6l5$gdq-#SV4;`+6Qj&5L zX^Wfo7NsrbikK2eQf?xH?eidP_Wgk!&tU8AEh#l+0Tz+Y@rBt=Dv7M4}w329? zNXNSQ5Tz>8v9e4Jl#*zi${FmpV^gH(@(`4gXq-sr-~(q+ItP7I1f?VzC(=CI&8Ay_ zu&k*MtiO>oEM$N5vUcs|i;nwRv+)Nof&Cvvted39#3F%P*Ut|rpl@n#Ijy{xdgeLg2j9WBhiyVrr-$fRYC za{x-Oakaa+ddTLSb>S6C$`={X52Gj#Sl2s4bltGN!Yh3LvrREXK zYOR6&U4-$7UmJ;dP7+s>9cCNTjBWNbCZSD!DURD~TRE{UsC3;Q*(gn3}D%A{Wt!)g&oO5*BN>ErD2 zt+Wyzpnm)%Oswm3J(OPKYPVCpu@z${odTYZ?W>AG6}uz% z8dtkR)ZBG1zZJMY($;Ob z0SkMLtKGHLg`=JK;Nn-lr9Zk%7jZ^t)!cmj(i^D0m{m6)>K235y~fq<`f2#C z*$aR}dJ25yoJPpK#?|gdY93wn1$1~Shby{rUookY#MNZ48ULz00t*{|-y*IDuW_}z ziMp_T>wwb0ud{L6SAG@~c&~A_yP29hZmeg|#@&oN4z65-o9#8OcDGP-SE0YzN*&Hr zxQk>iBCbZSakaapn%fg|uvL~a_?mTCQw2X&y~fq<)@p8P{=PPF{(!X9oVgLX*SOl< zR?W@h+Lb|W9`YOO9Oc!$#?|ijX}I71Rme@xYT!&Z$!lEg{xJ=2auIH1DYKGVt4d>a zuW_~er!@SEsf*x;cU491HLiAdR&!&KUVV@obCwj@j@P)_-8Bu*Xon}BGI+y>1aaDU zjjP?=(r{A)cGB_#XDr#O5f0vKTcv zwYyImUh?{9!Sl85iPgQv)$V?3ZrFMn=7TA_ZdI1d$i2qZ?g46UH1{it+*o9>2w=R% z)$SxUH#`k-A~)Q6HW;gWjjP>*)9{=1+6#UrN=#=m zByly7mGe)BwT|CRCM)NDB;MFb;%Xw}o`0={GVa00&bXT-aW#=KYc4)P8M8b@%v2cHjd-A+b&8@F9uwBOoZ@sh22M6yxdET$) zmdSl?0^h;5-7?}uMdaR-=Ywi)y;6_OT{yR%xHA&D_vHDIn%j!afwiT=Z8;AWMeaR$ zKBDHT}pfbbG;skJ=(y){*NZ_>0=)@DJ6-z$U@H5}w!9f2qy?#7mQR3;v@{BLwuX)2SugbNq*c^RLtXZ9gbE1JVK= zU&U;l*PI;$9zk0@L)xJvsd>s?6xDpJGkrgS*~f-yopL@#Hq1ozFyqFbhtS`@EgNRs zkQ2$QSg-#bX6hlcr@Y}}|D&F%#hblZ0LA@ovEt2M=e{8Rj?~_A+Q&~`&snaGTn5AD zH%ZIoQU_5=a(W_z)*fcd;`yv*&?>7Dr6i{((wg_*CLopTJLk|}P?DTpGFo$D-_=;t z+`QFklq8~;$iQ#%{SD9oIc~zfEx=?%`JP))N`iT^ownzf;L)Y* zA=~56f1)J8ykxYdzp_Vwgy=3xI6h<>N=Y0~Y8vlBuiMb_PqnYJ^C`9oI-v^M>s<)|4disnV}$ zI-kif4gUxw{hEB8!q)cusv${y>Qxh5kl*N1xsUa9qYqFRR@iX0{yp4@ToT6Uaqp?cCS8QUd6i$8jAUUW%#D9MlYQkF4$LEK*eoIj1);t9(u533CY8GR%;!@8T zlqAEK)N~FDhC7n)8z!Aea}!aL_+BEzXYXtUHTnCf@ELhnB+a)|lH8L$$Nl#%VtuPF)bi40wIjP0RJtY+wf@3v!2NoY@` zX-omAr!-reM*Ylk8D5iw_L6;T|I!4evPyz$|8Qs%N=aT%YFfMU7lg@dwARl315lE@ zUQ#pq?Dtb(JK@!OYnMC!H!a;9}g7WRj zWYEj{!*R&vz5n(M*;rEx)=RE5g_)YnV&MYc!6e_8)QleY|0uf)@TjisZ@`lY0WMG| zPH`(vGA>aPAPFult^tC(TT|R!LlU&OySukI#S0WDEm9ncQ@*v%nYCy2%-R3&^?7>f zEqz)0_}ag-C({F-zv@Aa8gpD+YLaN5)eP)-;0V9Y`c$0pDm7V_FOl~3E8vt@ zM{8e~z8Ogt<4dGv-R~JeD!qnft^dy?S%NQ-=9`@&Nt&vsO21dpecJOs72bkBw0`| zlT{XBIPtCz= z+K^M^dAvjhzPJpJB(-MXb4PQk$)b3P4C+_KNiwL!{gVv9GCnkQWCqfJ6OaA z{~91+#TN9)ulGzODT&>g46pqf&LLHXSMA~^DT&>gjEHVKfMi6JEs~@pcIPtd#C1Yu z{70NalGvTeuxCk+K<38n414h0L^WCLF4?!i4cEY{EL8^A|Dgg&mblAgLIRxe9y$1I zH^%Mr_sa1d@_qoy*I48wh!^ zQ6Z9&V4cgMS)q6I)cmpgeUg%3oy)U(FAI74SrSP}u+F5}{2ZsF%66Jf6)%yL1nW#X znh(OYY|U^FIhy{4fhk@vvW$yK*N(fT;Hcz4>Du;>Xo@6hJd@7f?S)A?Z)Ds>>-%CJWsq z(lT!%-o_MZNgjZivvRj*dAm$LY&}}Y`-^IkWKp|J9=Z;vy{G2E5W1!ClwBql#KM!* zBj+u6>#50?c1xtaTecY>;V}WvrY_BChV~^tiF)_Gt|V={zKy1uELQ(dP48N6-?+C= zXN-FxTYPCx&kr@wsoCo`Nl8Y`WZBQltss@uwd~v2Kq2)5Iwm8Eoox^M zR#{{lQOFP9xGH-{k`Xg$yICNCMr*rNayLmyM$DvXYnn5Xsom7}7c5#LfeN-sB9k6gq6U^Nce zdLRTBa4B4p5i=Q^z20`Hc@|}Crd*=gXG^vvJGfC~qs35D=_nh8{3Ft3Nk+_Sh9z}` zgR17WVbd1D#;Bu}WW-FmdNhTgOkIcX>R5FONl8Y`Wcaw1XP{<2+|KZ!+lrHvWW-E5 zpT0$z6{Yj<{{2WwGGZnpi#Eh5SUQxEdEfp;Qj!rfY0n;C3%2tYl=e)~V%jIkh?zA1 zJsZvf_2)yI@0M9eH6bw!S-xTDgHqXB$F3E^l;qteB!Mk8Dl;y8P zlpra|h?z9i%9azPk}jKKt`;FF$%vVZ8Z-v#sRuQxcM)6$quf#?88MTA_4DD$tJDmv zd9fZzNk+`1!;pCr$UkvA?JpB>?X^-bexA z^H|=YR8x`>GihJ$oF+z_QmimZNk+`1WpQ*hkjiu4GQZhzl9G&=N%OC9yGWW(&pAp` zk`Z%Ral;WI!{&;bl8l(k6%FuhtJlw`zA1~n@8 zm}Jm*uW>E7awbSJVlE>>F~?MD1_kf>ouniq=Cb2S$bvkwZANi@N-|h>2 zl8l(kelD2vs5OIo&OJ!mDanYr-0?fihdpvjn!zL`88MUYla-5+bRX;@Vm3)e%%r_j zx3_Ti!76NcBDFp)o@J7Z*ei_<#+`zvpxV(l7~H2jjaD}!cKUo~%`vi0dMI33DLf{+ zHE~Hs>@94lR^Uc%kiVj=mgkAMF-S6ECf&u0?*^$X=yMlpDjqJ9jF`#Lz>~0x)E{6O zTKeHE8m%NFW-|PTcjrik_l@65Qj!rf8P@Jwh=J6aVQ~jA!cFjaONDUPQkBj)n(-A|(Cj?-fDEXjzO zG?)GdTN|aOxzL$8G+IeU%%r3K1w8wj;2v_+Em6QDWf?J(uGKF<8MC2uE&KQ@)s$q! zOgb-Tj3wzjA9|LgBqQeX;MEU8?)?5=l9G&=N!Nm!kn(y)o4ib1-ja-%N%QF^4PXyJ zGX@#)FVRn_rX(X~GI+|pjUbfd{m`TgyqHuYuH7)liiHlT{5i@DCXRA%p7Fco+)s$q!OqwTkfD=jm z?2CEqE^+^qWW-EbW-f4$v`l^_CeMcglJpw{508 zPL>gKIR`&H=BYWO_bJaFl4Zn9+S_%6TebSJW_zodZ%DHB*OKVQwk7;JN!$9BbPn+! z`tcv>U3I zvs<6;#cRa%Y}cV{^|%4u`t+_H*E6n5FIa;q$%XGI^Jw;Zrupj+4Ea?TWm1nrmc+(Pn(B_meYF6ksrLM8R8tZg zGijc_bTp0DJhelLkg2Y=HJ#ivUex^AU&+sKw367^Thka<;OY+sLmKEw492*;`TI~! z78~;m*((jf6B^fqnm2JfgU79&M^cg)GZ|Z;a0rxxt_>37Jav?%;y7BC7_)<_ekhUg zu=PQ3kM*=|i;|TY5^@&)GOm8Kknxbt3*q>vKN>ou?SYjvZb<^nWcd6_IN8aM;|`y; zQyd?b0JFjiv?rtU<4l}=D2H(4{hyz+R4r!w0pM^}LRVh#yR1!s|JM^AZFO!b{6@`e_?=Rd}jx=MGSrAGV z@Up`Dwfo9d`A3+?`yE5>a-aW=#?4Y*#t&+_^X|Y5z?UI+UJX^=SYdS*^)jx0RFDnc zzAgGTwd^w zI7@yRS3fGqdF}Qe1g|#g192ArGOm79kn>HMv13%LuZ_M(oMpg_s~;6)+)_F{^jw~8 zFJe_1YuxiJ2xeUUs37A(txD!49@MO-*z+t6W?cQKAm`O8!VN{O9#lCut76~(c zL3`Q+4Y>ES;5}Z5TQ|#v8NcMiJI}x;t+MNa+O5LRw<_%_3x^rM;=_kzi4lC@D*R}$ z!dXJh_%$Ei?#M5K$5mNGoW;b9U)S=$S8d7>4}7|42XU4aGk#OcgZe+fR|o30_o_6F zI17v!zvaU%SCZ1BX0k%bRd9ds z)GT(O7}b>I$4o}N=y#T6#FMrqNJ{c!E|(04$&lxVg8Z~7FG)#$%w))}inmCH>6FypNjk`7s>z~b?*)@+&|WZ+m3m<&1}`Jvg-g_k3B)Bo_Jb9Uyyk?< z%-BwmS8D!6Qj$C~S-DvI;vkbzRxZ->5=lw&%w(0!zgkIF$9ou$$gZhBzflY z%80u{Ub6KdDM_B0v{X%l&B`7;Dwf!yZ%Im$XC@sj)1Ly_6s4ny^}I*&`71R%Oy0%oTNQGJa%y=#>ciuXFgt+s!HdBbR44UygKKxA3Siyh(+<`a?q8ZPt z<*pTr;d$j5{Nm-xOH#bGu{4_T{910leC!SEy4|?z%)e$AF#?OE884{i!6_f%N>bOw z1kZSJjRvoqOD7iAa+Cjts=%*d^`L)8uO`lNX;!_cmfH@6UjQoGSVhmQXWZLd$L82O-t;RCm9sP1RXU&3Gv-w;bC6cX+=;xb2oBQ)&{I zWYz3+w`GZJL(=wD3lYOevT82lvJMlnMSgKZkYv?deiQLo$lL`Ac}6SCs+qLD{WY4T z_4VCBB-sxPkvx;^-RIaqLXZLPQ9G@t=`~-^%yzI%yMt|eqcan??HFH>3bRGcj5}2B zUD@1H`-3d%#4jrZi<*bSXaedqJJF5~7+cxQH-v@m*75Hrz)1GthFJSQ2`9*G zU6x>Ay!q2@{ooS6iM;vU>0%zGn_VY{X?dfr(~(0*57~9w6ERd>l3laH*2MGhbXD^{ z>%?8xNlLP7E;F4U0dfb{w0tO}EK$L`l5TdLSW!DFgVzdUGL42NL-R#v(2{M*>;P@Z99ET zdFO?jt(#pZR?`-?SX;r7Qs44f%C8U!nk2hsg(IG>&H@sa%fOKDyHd-pnKaex))wS^ zl&092+qAKg?3zjQWcM~2t$9qJ7eeZ1*G!rY*UBeq?)rtUOj&mAmBzSS4Ie^-n+pbO zjLZD@EvhNWuD#L_JZ5DzsCfgoGdQ75E|QY$n#tH)^SS6syH0GP zJ*Z*xznu*{Kk~5g>BJ*aH@i-3q2(d1R{Q`wBl3_&Td225kYv|v+~JeWD?#Q(89uO| zc)03j*NN))i!$zfQ6Dk{&zEWZ(S8MOwr+Nv7_S|7wFp~1;CQz*RC6xfOI(s&v%=LL z)xm}cRwRS`W7WSTCD}ET*2*h7!ZB7}#ahEVh%-`>T{9W}+aBoQ)UzY}tZO3Glw{XT zhRixr8%7&|qYW9BB&O}U*>z$!?QSv+|0z8bUWDA#BcqtR>t@%9J+!<=(68`#RDXDS zjZ#BIz$eMB*|=@XC&AkoKe&P+yI%Nq9&NECyJj+K_iG5BjUgzblBbD=RX4j%RKH)8 zaZ9nFUUZNw`6hiwg(cZFmjN@eADD!N&7ay_B`L|SnT#5e{v;iwsLnG)P2KD|@ki}m zHf8M$A%I%gln%o>^$sA(u32G+aVbvaVMYWk%;SE_f&_dZ=w{c6!?lH7_60uyhf@=> z>!OymR9H8=PE33BKD?aHDCtgf3~Cyv%ux38*mMGSsc?J%mYn_VZ4 z)pE&PXZFO^%VzAYo7Q(r* zA#vU8I&rcOUtKM?;7RX(B(9rXCr;IJOQG;u#4TA3;>DkCcAYp~%Y&NC#v7Tk>w;>U zx=?l9>^gC#506}67To?nF{#tdt`pVo9A$exsM{oX+<2^ku$ZS|mXwfhTRsFPSVp_^SNF7e?x zQt*w5y64lE*iO}Tv+G3li$~euqw-#dJB_hC-Y%lDrxQVjB)ev^!p*SXK*C7}+4ZIN zOR2CVyJj+?#PbX!BMRAnCn?FUnXFK#YjctnvVRoscO=<0lMxSN@J*&N+K5|y#Z6g~ zU30mx5+acFZR-QO0sJ%uTSz9@={ju{!)@%bNRYJ zfRIlL@1vTM?3&BIqk@I(7JZPUB)ewPS;jO7PQi6}COC`zCSKM`vTLt2Hd$UgmRkEJ z3m1xpM3P;5r6J@|BfMXA!F(f6~HIvZ~3r;2(efyf2Nl3D5Ce3Si!|lWqFD@=AUY|&^Yc3ybIVa@r zeGAfPCD}EXGm3@_IeN8tsU^v-xjb_OpW12|dZgk1sHP;lX3`RE$V1W+Tp^aEB)fiw zzuy&RlAfOd>snX8KJ4JEcu-x7a*5Xp`U&(^?Rn_DI{7Sd=ZOy$sJeav{hJRzGJl@n zn}Vhi*H55tXt`_A(F(*}GoSoGTt9*SUCYhqDp!YHw-dMBe0Ynvi1ZWa+gctxJvU6R z)n{IC!aFg&)=!}S(DI;3|8uEq6XXA+Dc5KhScU^Z6&@wo>g26W33m|JHKLf%)(ZRDYzeWqbZ=#3czdJKb#= z^9yN9vp`%Zk_4K|rY8w6X-6N$ab%*-2WTRC`TQ zl0Y+Q?{KF#$TxU)*qc5qPLi#bX2IVXx((b4sF`S_YSPyp=*3xPj$U?@&7KHmb@8Lzq=T3 zPIG2?Z%&TnelUadgDru#Ya`z`RDMV22UJ&60(14Zv%r5FP`~;ixRnNA91~DK;`1>0 zbCcliz<)rsXYYw(0rg|dui!t2;0jE|t?5!JhJWNxp$*kWx2p)Zq7tAD)rRe8gue}C zrK`lfveCz%VRswhkpm(5TRT3e6e$VG+4~K9`Mj8CK;sSPNZC<1V^AcEy7_AXCapQH zgYnyf(waT6Hc6IpOJw=&524#pKYv_)>xU&mdKYI)WaXw7*gM89ShI5DC22@XvTZh6 zXO`y+Xtd5ueKwI~*|wx+^xDE(p=Kql8NGT)Mv|#6toAFHEAP+ndAL#l{mNy_vXG=C zoaUpQ8Pf#N-&oT*eG?|}%2AR0JPxlkeom-01o}{XS!4V>(D@xn_O?ZTJB{%dPP70S zhBE%lXi-xVPJ3$_B2H%549Ee}5OM5X2CB(2V*Q$is4~^zOfWV^8CBxOXp)k6nANPX zHLNvA8_EhBD<2}s;$cZmcXFL;Aj_b1&)K$-Buj?%WxDKjn~gCT((VD6E_?MK#PO7b z!fdoPi<&M%O_-k=3^fam#t&U7$5RptGugJuD~w2?uEEgu``5UHTal7bn90zL15!YK zg)%hVn{p&sw5z|J221@jad7r2jijYcCm~s?E0HyJev=PsDze6wt2e2pB+zA}bw8~H z>&(@kz2JVlrzc5CpzD>!gZ-Yjf%6vc)5e3n2fZc9UT{c8>pBvM-P2p#L#{&$50jK+ zx!#%v*TU0hK;BT~g4iIEk}Q|WsDFCFXw{<<^?XGGk}S)WjMlL`>%Uafu`@wD9V9U> zs~Nj#Aw1EH@EC+wKpWoSOETpgVll3yW^l8?>!9ZED1#f_!lmtsWC^ZB#)jD?JfyfZ2tQ*j-+Yo$UjN41XUuQ;DqdtPosf#zA;xS9w_W07*$&%I_v~ zekl#|N0hPC-^7rVq@_$ozr8u0Wb~_zmq<#|QYK>_=PE)n=KjOZBqeDnm#3@X(_R^E z%+I}Vk(8vROh&i8Vg)$>w=+7vKmtigTFPW(i>)v(R%K*!qqtK`(o!x**kDTRk;4XJ z5Tl$4lC+e|t(U`v+>#$(nkZ6|mU7vy>Ixy-{EBO#6)8zenGD--Xf2$#@Kl1e0qcv2 zZd{U}OR~j4(7DhqMR#?+9-;n5$d`c)e|Z!ArcNJp=gt4KO}ydFTK zWkHfe+RpWa{!6WCJ9FhMNtPi=r2UB%`ypkt_D9pdC&}U?iFA#6TnqMXR@_e4$m(ML zDM^ml+2>xkWGPAa{5P1zC})BsIpXrlu9`w#x+<b9PO*&1#qU%U99ed}F!=o_OrE+2q2WEuQP0rd;b z3HAI@|96aHzT<}fe7R!EwSKPz9Xgo}jY0W+oalI}LyhEo%D;rZ7yfPc6T@LY6j%Pa z!vvhcC+C;vDl9>3ba!(@kY`Xf`t23Y5ELoNRhYCFE7}~+&T}a31#7e>DaloswEBOZ z19B5et6?0*Zc0r_uEJ#bm34Z9T#T~(V&%)IRjHq=Fj={7c0bt8PADtaEOM7>N^%t@ z9q(e{98*W@czJmqNlC84Wb{wYy-*YG=J0%-e;m63Wwer9#Vh^Fex8sC&Q3^z41Q(b zJ;u&ik&;}+D-F)^wW0w*-wnCSsEt1uarz20b$aPC5`@>RD2Bqg~D zlNA*Bu)1| znMq1=6(-F&zk++8x}D~%^Ny30wWt1uaT(+p>yDxaRmPlniAkceoswLI%MJH~gNvBjAdIGa{#N^%viG&pA5hL`nzEwQF!YUlJGDa%!ubZ2}5{g?VZ zR_^o-F{w~$N^%t@T|xWil5~|SE3QvTuEJ%mud#c}jiYsCo4Al_N^%u0?}mEi%_6v3 zNExjpS7FjRAr`jN^R4S+-gh7=$yJy%FZ`uF$Y(fOb4pt)NlC84q@&Gcd}b@s5!YTk zS0uR#leVK#kanrkwtuX6eoAr`Chd1V{zcM${V8Ux${v#BDonZt-`)sEC5v)Y28^mp zQj)7M>7G4c5J~rp;$jvl$yK;KHm;J8htuJECS|meT!qX1`|b+4YcK{AC}p_{m*bny z7IO6386+jS3X^pk7EFejEBp<)%J+-bl4L7#DAT}|CeOU9Y49bJ3)C%GO)~_3O@P1E zzp|{yUq5*MUsL?Gw?V9?=^fv{cVL(J-tD`!3H-iiT-RQ0yY=i6*SkZvt~Hc@`QHUC z|1GWzfyF3&jo-p%7sCqGT78R`s}g?cehxIbkh&ho%Nso$2=fW!Y2=MA^u}{p;Vet> zu0~2OqUH8)ufaC@okecX_3L-US)jsrF)g>IKm9duI6v_to!2W8XQ>L~-)edJH9O!n zg8Hou<>$67Be*wOVZ5Z4SN{H;8MYlh6#@B5Y%7uev3!N`(pv8LoOv4!-tnlkh*w$2 z!gyINk6s!-9;!!T_2{HrLul|UX<@v)hWnKZXxJG}S~&I)x4dYvlsJo97!T5LgL6{4 zKS18c>dqkxiL>B^ajTZcAL@JnIP@xzzO0`V zK%Av7jN3Kb5V4~dUh4272$r@ie!qn{i(nXcYI#(i$LE1JKpy4SRlNITISk|KS1hyJ zMTI5F(}BaO1B+ZHDLKkzri>$?J64!)_LZ zSY{{ablJ;3qYyZO#WIXXXt%v))=NJ@^@CWw#;3o;Nz1Ys#v`@7ZESTo>x?6jx3ycp zp~16&hVhD89`fcVn6nx)AP>3Ow>)u{(lB0G%PrL^E`^hJ2Xc$ECAON%o@Y@F<1t!Z zV_DkjP+j3QrvKHKILm7oucGDd``?xV?vK^oH~#EHoP{=wSJQCg!FDU5avInG*!}ei zFCfm68^&vBxWTn&G(1w(Ph-25ml;8v#W#%C^5IE+Y5<4ZCG=)vO*@IR42SVLS|0Vs zW0+#92QKRDoRh>^ki+7qeS{}Q){7|UA2nQd#uz)ye zS){{w11%4(nll8dUq>G7Ec%YBvs{PqMp_rmb#09sE6U>)x9gh_jf7@fJS3LGR#7>MRao+~+gk=7O2UX=BdbYcO$^2{G>T8F171$4OM(H1wa5#91)JcrTy9 z7c1VMxH?uTYv z<e~cCLOW6P_{j?)?CqDuw;pGpU;+ut;{(VPFiKg7&fc2 zSTx4sCC0U%EjPBf*b7dZG=Z?=jV(?X#Nb)R#JJCA%N=vFuY~F?@W44H>@DEgb{;e_ z?(^AlcjnFUP&gNIw|~xJwCh;f#JJCA%U#xV@ETX;uEI^v5oeJT_B`A&pegNr0$)TaR~(C`7+w@vV&Lne3z&%bVi z@pW2Wx7pyDF#U&zG-Ot_bJiiwGAqV6sN5S|rG=yR1n4aYt`gzbRDvrjeGH5TS9RmN zcaCcv-zC0l@BhCH%jf6gR-4!uUVvhb1sPVtkomYVKm2zokauH}e7+Z=vA+c$8%hY( z=;gEA#C0>Qq*2PgV9ToPreSyipU3Lty4{_ZL zD`}jzdigy|S^{5!y!@sMN*sXOuKRPvk|t<*946(EVKvIyoT}?)SV@z#+?l&! zX&SsU{VF9z!s@yiR?-wLkKWJber`Dg!%Fh``iUr$ z1?KX`M#!UzeXq=@vAS-Cl{8OVy~6G`5dEnMT7|XG{-o-<8CKE)EqBk0$9o@~I`F(t zEThbAu)1!Bm9$91(`9d5{WxS;yFsVR9#cW=dEE>vX|aYIYL+c)gzAT}dd`r+-%C+r-_3VWeHRYC#)i{diR)%qNj~38;eOGn8Snt)?nk9h z5!cPIlGbYmZ#t`u4wcIwlV`sweYooiJY_sQ=+Ljkbu+A_qdq+4P;knOm9!Z%LbL3UQ}#LTsOl?^7+0Ca|yW3Q}ui| z#hq3+!%Fh`z6*1%8JHR?$K9OekP?O9C8L{RCHZ{cg}G$tJi+snd`5%U&9IU#Xb+sZ z)J$>On2Tmpa$Bsfn_(s4kI?(iHyxQ~6^^0mrpYfNsJd>3mE`k%7iP=Fc;e==>)sOA z&9IVuzVE{Hm!IIKo6D3a1P8C1VI}!|--YSyJ9xHxj{7g$lzAO;-3%+q=ld?Iytcw} z6C(sskYU|jpu~U3bu+A_TiRV0yJYNp;0efMCk?<=PfA0sn_(sS^z+gGex5`;`q}19 z#C0>Qq`TVcF)!-`5|6q2=TYLi8CKF?KKw!t$T8Hx#~gm5#6Y<1x*1l|eJzjf*n2H- zCH{+U9jm0q$aOQUq=#A_**aqf;*m{jmZZV!W>`s&eE66eWdt9xT8aCyx^9M*^u&kn zY>P7~W$=-k%8SA4W>`tje0Zl2c*c2nixlN06IR#Fu##SAdDzaVQgG6K!qX;f?XX6) z?YbFO(kl%&w)lP15a=#Upp7lAE=@~ZH^WMLt>Fg8Psg#lfD8{Zthp^7d$@jvmGoB2 z-G%1D6wsIlxjWnA!c<*1!%BLu<*tbCn_(q=^x?(quLRHk_%>D7&9IXG z_2DlH9uWNRMRSPjXIKU;w3uf0?OIHW0%VJ+VhPSy1@ ztTbBg=vM*WNvqt^y_Axe<5{PlVWrh_+l9^ekW#AKPMa4|b^Q!0y_VZw?Sb@A<@Se< zN)Xr2urg@5Yh01}u;;(VZFddd2;)|7mHHW0CM|a_z6Fy|mAmIvjV7+2VP*E=*Awpw zeqp^ByncrDwGThr`lR5;GbtGsZb9kYy+xh3&SoK^g|Gz%e7V;z9I|E>H2Onz7eONrT*bmcZf8ICB zpU2j9R2!6LBWw+bKhdck=44OMCbSKhFf zpBW{(RNWLRS)E=mUb#UP=+um`0gysfXj_T4T{neFR;L$?JN;LDLxXqRxrYnzly*Zm zg-TYZ7mPf$>hT(?uA4$7tJ4d{ zzTsMVER;L$UZm5}S#6+kLk6lP&URQ2JTsMVER;L$? zx2^sj2M_m8NTJF%h$F6>LM5xy3&unKz1|b}|B#1Vs(hZfZVHvGPA?d@)Hn_;w)!oj z7E_W;a) zMCPrVLM5xy3&vyDc7#_2#)UZe*rad8n-<*^Dp{RgFdkfI5N`W#$b-wznM#A#O`($2 z=>_Alj&<;e@Ki5qN<&;Xg-TYZ7mVA+wuH+?ea6|kFT6!uH-$=8rx%P{&mMt!p~|h> z60;E3O`($2=>_LymW2qO;f9^KZVHvGPA@p0e*J{tgPSR9mGLp5n?fb4(+kFJ*;+xb zt44REj#iVBB2lY*pgs zuaCVTuA4%osM8C^;b2W6ZaQ#z7IEDaDn*@MaDMzc+^sx=-~8exaorRuMV($SUgcIW zrcnLxc2Q;9;333yQ>YYmdcku1E*sx+zqOI=x^#`VlOq@bKtknHCe* zO`%fM=>_94w|e#>9m{ctWeZg13$~5Z6tiQVRR<^}F{9 zK7G5m-gQ%`l%hVo*?~yGV;hL@Qa6Q4DX!&Vt0%%c9zO^$A%&X!#~B*DZVHuBLc@(M zF7JWCrzsEG*y3=9Uy19cP${KUj{nhMWzL)h%eu2>Yyvzd{?}c!|7&8DSidr(uA3#L zxU}4MvJ_0<)#|o&3knd|&5}}rwcLLH0bF(}x1Ulzf2&Mnb+e?DP%U>2y&D00{wv&e zSJ!RvR9!bqN(t9;cS_v9#NFcp1`yZHl2R)8@UyEhz)-5YxBQ!fxNeq|66M2>=FTDb z+P?QZTt7=nspP|_^jVvybn2r_m|VT3)xsU(jCp&%s?+H~MP_aozP$DX}W| zu7`ql+_)a-Em#i)x9!x{Ls|6JLw(nwYrD?z_!F}AmqY0X(J5urvA}>+4tVb%j$M23 zwP9-*i@~w-SM|B1^TU>WezH^T4;L#z{xuj}Kvlzwj_~Ks9f)CGP7&$x&l9qBP}VH_ zAU;#)gyv4ga7L;~mVZfP{ge4O!w%evgROh$8ZQ4-B#XWz((!2$WDn|O%HBEpdy*{m zl1O{z*Z`2bv8FY?#Rrls@RG^o0XY9#gEG)>4mR@2Xj#@JkumAcLq2EhjX^8wI112e9INA#4DEt8-N==qwNo1w0O<=UfIFwPH zHx(tx;wy=aZnrxvNNCX@_{!dV3`v$;Nn}XZ($heiQM#`d$K*vBEeoymWx8}Nw*C!y z)l7it($$E@W?YdhuhN%>wu8rPp&OcGhOPYm|1(8565|Gt(Lwa)cgx&@Q!=pT4AA)L^_)`_yy!Vl=ffRVlSxFWZyL?kyWnO zFC<1=d5RxNmNZGEdtlm+P*ZuX*zOehog@pHB+|Zn>rEj`Cq3xy;yc6V|%k}>68iYuGtK@wSI-7{0r07+!UIxX*zj9fFOGf9^H$m9=0 zF!EArMxOmP4@nmL$mG<$2T4YyAGMJrOMGN9biyr?k?Ys(B+0@aiHsO>`8r6L1whX8 z%3qv)Ea%ae#wJyt!bDN+H5)Cigr9O$jtYx-{v+}C2YBaZ?hwE6P#6+2c;uJtJd!v| zcmBh@($zLA4q1_|*q7Z&vS3FhUH7obRb`nz;-IojM1xNYb(8Y(=Wck{^k5tj_j3Nqd1><4Cg5M%!*TJSGNwTO%B14vp|A(ae#Y=GmWGRnK9_oT;f>JZMz&#Aam7~G}9+}*9>Aa9d zKP~b|p6$rw^dqo`Jge&N_)jCrVx9j;@A95#%~yXJMxHqs4mraXM zcfjFP<+yL(2stz(F8fnX$ADCiimmPrQPWmsqv&1Jnp3SgW%-Yy=BU5LydZ6-)TE;n z+MWepHjsy0d@|V!*am9Qk7=wQ4{TG%`?9g->?FAeQTwz!$9Y>_os$a(|CT%^^FROPgsE+NO{T0k{hS4dShu3uTm+Etec znVg!mzYdEhX@7J-n~<+llh*ws%aXKitN(yxn5d?W`oO-2BjoecMr-Z<_hcd4-MC6}#M{)Q<9yG5NjiQm9!PRz zs`pz*kI|6jd9LjE0|_L@qFGwnn#4Jc%&K0@wHQv4r3imjg&Lq{&w>oc(1zgM9qykUg5E^Tk%XFrv@$<)}?YL>5B zaW=??D9cw|Dz49IsUFXueZRD%?F`xxx1VZGE0|i%piDnvI;NaMK>==&rcD1cRatH7 zZ6PbJC{8tJ=)XJRPkTTAAtX(2^NaI#=7v;j_K(R!GN{XAF%6lOlA5#~G%X})+dfg; zhi0dGCfI5<7$s!I*5YZO_*1GiN3@9(a*(4S?V&mIQk9EZir&OF$2E{-(!$haxos^v zK~1<984Tstbro zGP5cy0n`p4=)tq-NHEG)O5|hW~Skttvc3qP5AEzoG zmVh+Hvxjbd^@ilaT&c;jS1*@?atp9#+4J4Sg!E~u`_}q+az3hQy;Jow)qIlb8E@)w z9PdL#v8Jix+sq`NrP^Txm8%G`kLR9HxWhVy5jsNLnvUZbb4;-c;p^Jl+}I{1tOZzLh)$ z)yY0gb`9AfBXGd4w_yE6OZYVb{#O6WS{r};;Q4<|@z>slZ)p8RyPk2~+jnT)EAaaP z-Q(NBPosg7mhHOZRF5ydUp6?7uD$|W*hcy112Zug$RB-j2_sO*mr9rJ30OD}~wG3|4rsws854<%wn{0S-g|3dg~w?NhgT|iANURA;f_CXMym29;!0qAf|duKO#$dP5qaQ=SBb>g zLJ`I%X?f7!W2yrmfjsE56gR$F+g8vpvWO|g5WfumMWGi3TkQZx*Y%dUsSJw&T_B?Ue9xH`)KdCi)sg_#| z*I?X!Fu#LW5-&IZNSv*nVbzywx$Dw^7r@sbcbyoA&74xb;4!`PWTlpe#=RK>+YX&1 ztiWmZ4j*s||AG}b{qQHm`yEAT>s1cddMGmW6*vyRNhd+>MQQ)1Exx`{BwK;Qws^gE z$krZ{;6dd#AGx*jZGYly84lwcHQcyqTbn^}MZ-Qf7&mRHC+__0<6S&2W%qB>kYPQb z@Kh{p>V2sc6=rL3SmCXj!iMs1CJq1&mnA&w9{KGjUfMgQVSKxmo7$v6$L#*a z>09D#JrCnMwY*~W77+HT2fAWx`D4UWU(^%W^(vlWO5wm(wedx$a=6%{9#(j-wy>kt z#a+N3;MMKf z?{DI&DP^?ww=LU~{DPG|>%PKwIZ8+2US<4>|r;fzqB`_h|g12 z0xyj>hKLt0hY)AWdlB??3K9>m*dFJu%2mVG_%QxZ%Ok4g{fl@+ct!E(VGDg2 zS3h0Lo<9+}=0*vg_VabB&Q|*{{zO|n?4Q3ONKtZfbjwg(@Hw+O!Hml?#_3LwT`Ypc8OoPrZh z-FEk-s$s<0G9bp^YPo&nLVOa<#?!{$w{kn;Y%LJu?={@mVCEm!Xe!WPQWa61EeK*< z{d6tccE=3!0;nF1)g6=OV1}=pbw7BMKF0smR5!TGS04-6H5?^>;r@>5AKOW0?_)Hf(id7yy`dmZe8;yEAt#mr`m)<+M5E z4Y1g8&!**$>t()$>TPk?Ij(ihG#O<^X9Jifn zroMp9x*TVV>X$uQmtNdR@(Y%sb@=TTNmskaIZ1xOGPK_c6({Mq^ip&PsV_rw1zd;6 zmO5IOG21n&nffv`^V}dzj^L4tpSEn5K$0y(W2ayl?I~zkv~L!1%bfFFiLc&hVNX^fkE_`=gi1fOf52cG^GsM&goKnMupJGPn&JP+ImD z#1G6U7o~2joapm4WaSqwX$oA)RLV~ulY_WHFIG;B)Q;O(=4u4+->|x~@FqJsF zR!;Q!-m%aRbsN)=Lti|`Ww^?&mc+`euxaN@e0www3!9ci{zXzZR!*#;-OJ(Tg%^M; zdpSIRT`}=sA3bE(S1m0M{P}ZL;PB22V&z>KaUG*FZrxZp(dR42g09ux4}2K%prhIP z2=0B6&Z_%-{;~KzQ>m^SD<^8da?JQ@)t}Hzrs)U8jjtA0eNS8xD|>gk zvFV4-p#1+q+4Mnvd>yJ3){T`DeZH*BdhCTA#tm=aAUxZ-kM2qdy0LO%BkfLaRB>f4 z;7Tvq$hQ1BRo9J`6MepIEGpA@xFHzf;(}N?%}mk7OJZg3W*c06X5#9i=O|sRF8fnq z-B>v>PCM@C8Smi+r+$btdcszGL9gsJNvzBYhfK&*52O_fhm5KVf3PYgu`-j9C3?Uq zVoZxNGW*xK98amK8!IRJe7%@G=g)Y4|BT$8rlUx|bYta2->(;Y`o~k?a2JI~@8zVy zR9!b#PW1VDG1t+9aA~OLiF1G6N5pkw<-{)9{TcIBrL!(l8@ZuP#Zf%nFD0`xmzu8dEqo zyS!UQQW7gO>26vMYbs}$`@4_XNlId6Chh+`ZBL`MKN;4Xq$E~m(!KOqE09V@;hy(( z1W8G(%%uH(rgGS*=)hv=pyu`-w6^erW7X3glJnvz(VNy~)CFj952 zmSMk%_*@bzGii<3@+V2Fvy2GAC9yJ-mMgOgleCG5f3j@ zPfY4{W97s(+FM~naAm0Lsb2KFxP|M+%85ST^%dcFDV%utT`EBv4s! zd&7P&brd)}df}gcSs~se>Bh>5o3w)uuKWHh@!-fNd1%k;#>$CXeE5JqFbcJLaOa=S z5Z8^B6Sw*B-T#A$qKB_pEZ&~$#>$C1wA_8}EZo*r?pD9FMQQPLW97tMT5j+52ex=K zao5?K)NV$D*Nv4E_h`7W!Gz?AG!bkLV z;sGspmuL^KQT(1EcYl*^Eph!=`G}T>nm)q)UJdL*i**&*j()6sOv}TEmHQv@@Q&}r zJ5&8w`DZN;>(I9#@vuhr*ED$jSowsOo0cts_Q7v8Zo6s58qq82$I7RC__<*)8}abH z?ZwkWKUO~D!w2nbEqI4qxU^6?>-1ygb3Xi72+ZF+)i1vQh0Q#)h*}0 zUqf6!A%5<|_uhiLh=;GeH{HV}3GquGp6r?~_@w1sh_eqbvk2-REw^vzjJxh5?mGL5 zKPl6YCB$r}+ulZ=A!&O)Z#ET{B*f3ugg6b<*=8^lfELSe%d?Pr6#TRL*Vp(9tQl1Q zYKp(~Hk71=)crcNX&2u+FuG@4m-y;&1G@F;U0nU8b{zaGxG~6HD?NkXnjhi4bGV-E zs|I!2;h*m;Q0c7lJ31?*%P1?Pg9Qv2ILcfYe!SIHZ~+55Pg($f?t;R)E2Nnj+HEbE zYl`VU;h?Nopjr(7$l^l7F-hnMLp=uCV4ppFJpMMU+Dh=vu$ftO0V?_(S4{HIwW(AT zFks-IU*H~<7VfIBdA(a-#A0RsyLmi5zJtGylja12(!`nieKQ2=!kh*kXg$8c8?ws1 zf%$*9S0)vC@)DYmu_%-BpSVI&l9hYkj{0@YbuSEl)>t=yeqFzAo`odKt@UgA)&A}q zxW)OygTUZdyXta$pRSCSCCB>G5Se3J8@QDR;b1p;mJm;TG5&9oEV0#>24|-PID7nd;%J?%<6e6+`stH5lmNQ87dxi*u4>L93)@l_@SbD#q$4tBn2T7)eRS%4&u^ zZVVT+5i$puLj3t2A9l)UB^j$%rpp!ZwmzKpc#WmY`S18@Bw5BP8Le~4mVaR1-ol#B zd9e>kvUpV@JB(`%w{4@+wRaeLG&4z-tV(1^!{4*g@eHZ6sR&6Hs!C+|?&ol;HRi+7 zhHu#@YD)4{?;bL^PPyQQt$z2C>&TSTRFkEmvYJs67ds*W>LYVYGE|w66P&&y!^HJ(>LXXUydB!EbQA ztAxvGaXV$tZ0~3dAvc!Xg@Kkt8FGGDJ*p{b^tsICgnjFgS(Z&8DQWbX3_i9Fr-n++ z;5~+wBqfbLlOfTA(~=CSuzM9rNu$rC^I=c8*ZMue?R4JVA@1>#MxRMX?u@@fO^EOz z$Ig^Lo@z=OeI|qd7zmS4RR;f-h|Q~V_DLFjCf#H66(Q*!dZ#Q&Nu$qX@Row{B!k!7 zd_q#v=rbAmOM1xr)o;@YJ-iraoyurgqc1u8!Yig-Loz)0=b9v0k1vz+^M4X@X64=_ zS$i*&BjMeoXSCrzgyFPAIpf(km&s(zi~>SNT_*YY&fZCd-{$jS zui<{b0;J#O4z+|#eX)nFXj40&19%Bow;bL@HCdy~H{4s(5Y+J8UXXBlz#4!vBMc9~lbq;2)q^y|E2I6N-WL2GaD>l_i8k))(;WwPdk6LX;^ zWOfF>nuYS4NlMyQuQWt#p1KSUa48&ZM5U|ZCLw8CxvYO7FUjynWjj($N!#j`#tB0T znBXMn2_=mavRucUN4a1nZL3!r969^LzEwXHYF~8JMpDwYGFj_~i}2_-?#At`m3=wB z{8eg7+EykjyKds8-X3M86CF#Dl(el(#(b!831nrIG1D@NhF8+IG8sDZ12()NC_{5^ z9Yr-IZL3$N%hA1!4X(2N0MljvTpeErD%&Y(TfNfYu@pP}bU5=!rZDlg7QWJ=m)qFhkV!_QMC2cE{ z&dBVrM#b+Wj@EG@ogYa_+sb6b8OpHo4abp`w5?3K=X_OL)GXFj+%+X_t5+I_A1e)Qa)1>|8i%(U zD(>-;w$&>Q&cp7NFj{3=>8wBZFpXBywsN`33U@E{CuBG)KY8nsvbL4U;C2Py!$1q; z9&+DrD4I`6+sdT7`${-}JTm>UVKiDv+sdW0`BajwpBEJ*DQR1|e7)iwN%xEo_}Wvs zn@HMLCLMz^z|`6APuxyNh8PS26)9<3nY7JI*#I^DQQBO`#nWEWwle8%Z-IM|DqZgy zETx)~wv|ce`>;JEo#S>)At`BFnRGkDU_$Dtc{F+pNlDwvWJuR5I3*~A+ZmE+nP@&G zZ7Y+ZYwp3_#Phj{kXomxrlf7<@?|7$r&2R?#E{!0C2cF04}MrK@L5j2eQRS__~Cy6`Swj#r7J=%={UWG{krBiw}VCjx=sj6 zGu>ZIg;~eR3Ts!A`_*o==oS=))oGBH#&qdKoVA^dtKXR9t!{|Se;Ya+V<2!tWah7w z=`@a;^`4BY-Tg%2XH{byIP?W`YVJX|w) zL-eI0k-+i58KMuJz_nY-;8|13xcZGrta_E1H}MG%?>it+9XYNJan_kKu6|<@<6$oz zK^ty_5x`^q&QyHisZ?j}DdXxlCV6?fTp4EGXA}W z8>;Ro(jBU|#KBixzSBjV^|FlD*YfDW&G4L8c3pIbk?D!EhL-V$S{`z-I9Q!Nh(uiH#i4=fZ+ob|ViH`j3E zNOx6uGY|leL&#iK2G{d{VHWCF2M6!^Yri;cSf|T)D=l{$KU4(X zP2q2TqFu+^UB=sJdB`8Dufw=u9s_&+^bhN3@T})$ysZzX14^3zWX+UE-`6X1u$W2S4~8?=}h#zLG_m8{yztN6dInEq71a z)QPw|p{~;0B4=$ej@MYQd3qG}cG!34$%8U>8;S+v+AozgX7d)Kz z%Zw-Z@LIF*?S``L;URT%6K72`<3qIE)wp0b;F)pPxoXwJh3L5J_yP{bhiSQU=OO4t zRqk99RGc_#pBW#aa_@)ze4^h0XR^$N2R=5a0sVWPdh7Y~_=o+{C~>!DPJnmRrzU!LJV!fG(__MeQhW=cAotSNhl zb@cku5OFX7_N%cBNJGTle;<=%&Ad!@o%EfMZQr{{vOZp48YhgqG84{>UQp6FVZ@2N zBv}iuFAa`zHkdN`ZNbqxO4$BKl6CJAS!?nkHLgj?E|HaMUHl7VN0gPT zL~JC%GiUNA$=Y>^44pQ=1;{Xzp_Aw1m8=|3)~V~ubU8)`!P zCn)K144I45BSo?%U0)g;kqHpPsGq)cgeQDQlJ(~j*=~OA$1qwv`wZ=7pKVN%wdN8T zZ1smnje0zT%eBR)v@%-Ol}lt;lT){#W-hE5RSw2#p_g;)CCS=wed*uz{epksjE6u4g5;ME#b{Xvt}hK$s@B6;4VqAx@>Md- zp_;7umdMH(`xK+mRt{K)PeNtivc6j)gDY+f0;wb?!C`*5ib0XA<(9~>l_xvHzI}nC z4O{#YXV;2k-L^!!*H7<3HQg(V*CNRpZGCARe)e7;*ta$)X&incGp-s_YO)?%UmBd} zkIaYBLaPO5!kH@K%4Y4gOl~g=SC}8(sSVC88Qyzp^3GZ!gZs~31OqLKGPqBv|Hs=~ zhF5ib@82gU34s=OFII{L5|ZPG2vH=sLkqzJ6sK5mcPp+*pjd(8R=h36-Q6j!MOxrl zYj)OTeGi%6-v2ib*VOSf5D9Rx`)?k9i3bDmL<>%GWeIR zC|>&_8N7Tp9*T*Hs*^J-Pp zgDd!<3Y-Z%9ahA&T1ugitdSLSHX@Q`!v902`k7(ciFb8h2R}2O9S_9YBYtK16@U9z z`->?>NDd|;`3I1W%cFi=uX~#|HCy&*)BT4w-AmN$9Mh>w%lJ;3wYhpikDhHhx9N@v zqu$SR^6i`R7f{;Lor8G3eKXx0DAHjgIdrh}9w+`Rpe)dY*M`R}K>zVxDgJ!tvB)i< zzA%zQ#|(hnNBh}o!68@i2tE->137e;y|4pmFGjA=@ojD*4dl>QYCeMAio@RIQ?2nR zQ^eHGp-pjlUO*mVK7h9=F6WBPL>kDUf4KrWl{fCuUNx4y6{`ncr-2;$&(pA;o6BO% z(0%v1P)q|kbe}j?3YpXs)$+vNdr0bSGhg_8H+Jv^O;T5 zTLU@t%#AQQ<`5*^KaGNL+I1Spp(iK9*rwYDpkK~$W#tGN$f09D6@jq@*$l=uqAg0~ zVr&iM(98Zj0=>oAXKI(+5)WPlX&{HLwBSp+pH5rsOCk;A&~0-2Lrgdifo!e$+BZZR z$f4VGgPwXFL(=wba0Ma_i}0X8aTg>D~F`xak3q;3vvs#mH|86dA>Z|fD^o{32IY3KjhFXg^s zsyDOUSCX7kUF3NXNLr^ut(+$v)$(AZssew47qrUUYc~k?iBmDso=? zkCL2`?go+Ulg(+9=3!?(jD^`}fdMiPJNcm|kp`-a^Q|HK_Ns|vYdgJ7?kfhWj2$_n zfP{()$ZbVMrHad#;s;K!%*i=m@Ym2$*nMI4^_vD6hqjs+s4|AOu0y0_P;YrZ4OAJ; z3pbHuqho(iOaoQMmrJq|=}f;;WNSEw3{)A@iokVhZ|<;8x>JW@8mKbXPX7U7ro#~m zUY!(9q=71<-vhKa2-4BV2hX#_N^PLZD7yCvk@mb#j}vL2%4qN&63>*FwR27((m<6l ztoK_WMZM`7@NNr{2C9scWoHuUJ~X;Hkp`-ayo)mtSt)yse~2_tWn{?@>$}$5O6ecr z(F2aHkt*ZF@@_=B4@bF)WXgNmPqxYWvKLxpzQCDaeR}OzA`RG8oV(jf(pIK3k@{7J zA57Y4h<6>Tj7ISLK=@Dlm1dPuf~pMq)MP>@aI2Jv7Qg+!RTYI#!eW%}JOuOYn|J;# z!&ODp-qWvO>4te<0F8RdM$)tis+$kW9W2GoDD@s=}+&`lFD6`r%6K)#=y5sHKVC z8mKBZw}u(*4gWz^v34ase}XhnRUF!cRYf`MZRlUiZW3vrsu-4OizI*Cf|-(tX`rfD z~nMeawMR>09aEY6-w^r9;w5Eud2C9lV89GC_-ALA)F=r%^2C9k# zTU8+Ou9%`)WvEP~fvTc((YZiYK{B?uD}YD?RmHq!klkx9taHyEwvI>xRmI$Da1xO2 zcL?d1b9x4>OvMNps48ky{tL$T3ij4o&F?jl2C9nnLqT6RVm-d)mf#-nyY>Q@z2>IWu6%8!o|36Tb>irvLP+zlbLWo`X&`6b^LH5Z7Pcyw2|J&TP9cqCzC(lIUYbiF=^PY} zZ_p8AYasI-Z3`ySF+4gCkp?o~4*4%ivekuZL>kC^vo2jgq%+f^>qHvJd}rQ(>@4MN zcR&5xjz|NU@1|Cmg+dAfJMa48nE8qkGLZQW+VU%rjvo(wAkskQ8?YHOLJ`wm`r0lc z4P?IYNsz2)q@!v7x7?`k5~*)Bi8}x{WelmA+oDORrY#5Qla%b$UC*4tx%zP zyJv*!XXbV9HTVScX%V(k_xh2OMCxYdrdnC?eT3$RNY?uDYB?fxGjo&M>i|4)ns(rt zYR8j1F-+`b)&Fy`a)7;R%uIyU%zGk)^r|tXuh^Y%fDPpIzx|U3dRrQM8@k0biDDYa z>09MSwM-+M&dWlieop`I+p!DbJ+zQ0p81KG2C9KEXRAZF9Z1$3vIL(-K^mwAqQXIwHYXq% zRjE6E8bgowvlcRg!IeV z>&v-B8mI=`ok0uof{X*k);35~133E(R0Gov!5uNHI1# zkw^p8KrL4y#LR^;D^j0D?AadyDb`+Rz}5sJ4O9aQZ}o)UKF8ixn*EoYLk6mWB{_ein2z~3t5QteYQPlX zKlM8xaa%G)6km0mNd33+R`#2O-aSE9HsvZsr2boZD_1PwFUismP7$g9R^IS8=MEAX z{;ZaKvi0A}Te2WN zD3SVa<+T_2;UMuj!@&m{`V-R{yA0S{tuHS*|X{}BK6Oy>W?`)kjVN&Y(j6u^;Z9!s=>gbu##xK zZScc{eiT#xoT|Z?e=AFJ=v-8@#X6*aPL)t759|y+tzm%73Az1!i8N4iA1Qef?n)ev zt?jQop+p)ur&{+fs1jZs1i3nBRSIdOTJL@b;%VL>XUEzVDW-vHz0Y`jK8s>ZM~_1d zi8N5HM}35+EQNG8nMb64weI+s2iBkz^4*M;L>j2pM?A({^Dg$*I;4lF)^QFQsMePb zYXC8QkPJ?oA=h{V)q2<8F&`47qtigS-WsUZeclx(()RJHPz|xS2CDVSIXV*QaJ|Ko zb}?@aRO>%10-eZQ1h3Q8?dm=v4OHvfx-}=#z3%KDBK50v_ouZuwj!qcZE^IpiQej0 z>+aW&!zKBoamf_YNVUG*v|N(wJ5dE-#0_`lN7S_ zbjpVY8LQUwLcHrKZ})_SFy&X8=Tv#ATJPDWPtWr8;7h~!o~_yo#~Ukv|EJu5%Sfz( zUw*+0%I8^62b4a037(u^Fl_m4{x~m0bjBHgG>lL=i4=HU71LXOoNP&5eQb z4VDi$23p&#Cw!A=k`OyJhsdsZqy_zM_H5e z;h&T6?j<(GFJeI{>)B*<@l`9J$#&Re7i6IM`DvPKd$Z#-y|-a6|k&Hk&({A*2J0qUTm_0XOoq}rY?deo!F$?rzP%^qDfZS zvL?kAF$bHB$1lHQlYt&h`sHf4{0Wr2yP!qC9C!a~PffCtmo>Qr+rY4it?@)!Qq;@M>Tb{`Yr!tq%&we#+j z4ZcY<$%~N^XU35>2w|nKdcWiX?0eH~YlH z*rda=$&mc>M?o)hU@zUfqQj|4R#vknMMkz5TkD8l#KD@&vq^i&aiA`F9l|E9JFb6E zO|p8MHMs``J>I5ql<^s3BIwvn$<|eT*>}96>1K^uPlS~g_P42)paKlRMk6%P4Qq7}D z^YD@FYrrk82%R(!t8%;$HOWdCc8l>WDG|da;{KZy=h2$Uo>Uy}j8`?hW}9Q{6Kai> zHLNv}J)XtZ2H}@SpS9MZ^*(5=y=blcRV=UYa(Su4E*G8d#E z3|uLwyKtWm7y1vrNsJ(?fmoA&U>kUM6LGR8KEuD(_H5EwbKL`K(*C?gYxpM7BrA?s zll!p^yt|1b@XHJQYu(S9EaZ*LqUfc4U5A43O`=IwHL)fSU>kUM6G!2fSNPZZpEbFm z-ZE;^F`y|Xfuc!PPO&BrVH?-6wK4eRAN=cQKg`e;Wk=olHjbs`SzqDfYOu_ljU8@I8w3Haqb{kR_wMqB|=SR}Fo=w`X9)vVm>!q#Bi@fknqDfY=u_jMp z8yGfm3V!*Be{JsBq%+g$>(r!uRk_FTO`=Iw%dsZUU>o=ZCQidY;R2Wx@7bg~aNM8J zWMLdj=d&nW0Y#In$YV{O!!{nlm&ED#Co_I&<=JGV>9_V$lkO629>OMjd{F3lllXDM-$|j5Z;}VU%fs zrK4w)wk7`^fF{%7?Xhkc=&Z(M_!E!lrtq(`&49V#kDU+CSP`>bfwOv&;miFa3IO1$QhFoz;m9f8~LjYQ1a?NuzlWcD~lFPK^j> zRUE_Ldg9TSxhc#4Ej> zG6?W6piPyoPQ$%lTsy1882-@%_sgBF@++vi{s7u9*FU308d(IyJXUq3;)x~?++_PT zLjcT}s~FujWAHYL&MGX1n?3P_8H?cf*bF-;ytS*pS?uu`omEo|_wmF-4wM`Tcs|5K zR)>fc32|2DFg(2{Za)_QxYr59?K}EmmMDgfl{5_h!V?dvQXo!7x3rPh&dL{tXY|0m zyY~MZmQ!E6cJHn&J2#@}tW;rmW)Iv{bw@iGd2@5@eAUGprxMO;6NYE?#G?oA!-_-< zU38naGCHeB7@pk|cU>%067ZZD-L*R!^8_(;tomShPES0v#6*yuyj~+7>i6+A;jGeN zcy3SJ6>+&8A^Kzkn3O@`NXk=p5aA4!wcT)EAjLnF#QvqXURLm zi+SSClNSmR?%Xgbm~fV;GrWW+?uu)CmT*_4j989~=qxE`cu7y(_Piiy#9j|@=xo>j z!wp^FECFYDDNo#5?9Nt*u4&xfcd&R6I7_w}Ud9uLoN_7Q&Qoii6V4KAhNtZEP|&CR z%p=FNjOz(^^z)ZDjwR6yFaKHeT@7J()jIF|dEnm^oh8f+5Aej@$M1dtILv#Hbao%c z{7+mvOO6>{(Gw4;(G4pAfrnI#tW7vegc%f+vmI6wNl#S20YfD zrzqvMDdI8+Qr<9=!9f*fD@izW;ick9+UwicXa6h{e{2NgF2GGeBh6(APcutR(q7-j z@FhWBkSlq^&IP9<^ZyZb1#Y=%W~oV^#9*Z2uxRct2bl&6BwigKRnJP%)67zny*%-n z@3U@$=wJ_kljw&Z!w63^OHKCnz)j)lH}!)%2|E{TI|T=POL&@DYO=2<9(JY!Xn1m)MUkE(SEHycs zCtm5oSgai#h`XNV6Ot1SU7A^Hat;sNFW2)nFlEy11lljhk^fdw^fa^7pKC0dv~tUU+$S{W~s@a9ST-mIO{z`Z-SkVUD6;wMNczJP5#;=x+%Ivg^kqt zh{WEqxJffhP1Z{4)YZo1THc^6;2ANxW5Vd{6g|x>HTkpCy-@R|i!ky~+`*0ebhjhn zX=bU(pPl5nat?D-bo<+7g$PeGOHKCoxOVf1Qk|jmzJU>w~smT>I9AkVX zw;Ge{55Hr87se}aY(89?x{zkBnf%#dm&<1-lqVW)zc#l7;c4cY$)6u=tqB<|@kIya zL!V}@nf%!ymdnw#JmHRxj;0hn&0I72vjZ#JlkWnjIO1!S^SHjcGHIqHhhfE<|&O(8Z61`gT;1oRVTr)ZD zv(5+pQ(5BK$1Nv3&0I6NrYCN_AGs`$CXWGY$)B41AtKgVM?#ILOQ)l>Y;Lx!A`500lQpJ^Af$tfr7(5vLp zsjG~mbiKFGcsC5;C{}EQ_?I+3n^M*DqbQMs?pB8-&IO!rWdB8I2U+Zm^;X&+MPYK~ zn&~ZIZS|gl7qwePBo}SD+JQ)xG%LvXnmxXT`EVS`_-g&}1WxqUM_c4G;s4jn zNMa(g>x`WGFU$sWL;Q}&$=6yC$ueyP+4Abh96+KZXli+3^E@K`W{4a6f5ePxdax*v zux-I-EE={tO(aXt6*0pbb%5o`sNH9*=iP4<}|Fd5m8BV?aG9#bK4oy@(YAZtYb?FZr3B3UEy7d)F4Br6;g zWY}RhB)#TvB*XT9z>-6dtY%P?FazR0cly!yz8Hr>_$$w#0 z(MVP)q)qzejw-VmiUcf8{c?x-%_ou-32Boi+x|`QY6_GaS-SwAqr{P(_5%TW3tfLQ+ ztbj+bkD^L`qYk+wS#dP)gAoovJn<&WO*i|nfrdWr9Bg2bROvUGPQrA9HaQafX zQfs77Ry^PoBc%A84kxQv6D1kB=1(FOpVQ%Fp+?0dnJ*g6Pa>w`b2^+1tDJhB?nVuX zRD4c{k*>hOHz1~XR$Ts*ekW4#IUPnimjtCF(z)Qu6CxF#(_y5m;l*V{y6PUoq*q+0 z;&VETbUvNefk@}WZ~ci>d`^dx`-3`3a$oETA{C$0VPx#gil9T8+u*#7o${|7A;sr( z7#UN27*_NNNXEn#L=Ta;PQ~YR7#Wq=u`!WR^S?$nh9DK6(_v)vyy$X7M$fz(Po&~= zI-G1fW{4zPM(iO{@i`qvMrF(Z_tV@8uQSTegmx6s+k_;&)g-LRtxZIRH4NKAWXC7E z>Q#?ZpwgFi$<Z=hX|7+PA(ZA?4p!ek{1C-t!ir+;b6o5NS&bLWBiKLBXP3DNGYhIn z|D#8M>@LW%3(#DJ_mh`d3esILFC`jk4;&7c>Z=H`f zlBiy5GhXr%2~cRfg{Reg0v6Gz#q?UAyOe~ zFmloQeirC0lw2Tctf=;qNQJ1u$oS}si(s%pnFdiKq-Ief6`}?sBPXuu4`c%*BS)=3 z|D$;96ru(rTb?Ns0;CXcS{|O|B2po0FfyvH9du;vN8m(N5ig1sF%_Z)Bg5-`Q3uEX z>}`0}4WB5cLeyZSbx5{ta95zr0~N8yuvL;wThw4=cp)l#jYX)JP@08|BUl z!l!Q!2gosD^XZa3U3=1|!4vC43KL7=Wg*tt;^$RNPO6sKLl8`|)Rto8yqI z^4shdL@GoLMurqy<_0nX$&h^6juEL4HBw2x-0rF%Fr@nnK)>8U1Kty<5H(UslkM6a zSPxP@^ncb1O;X}I6`}?s6ZT%;0==Dqy-nD<I{dD*A&rhU6)L>-D zi=`tWW5nxSAXu2UguFw*{Sy;4Ae^aJFJr*iF6 zh#IM+ch|)m2Ens}Bjnw6?zTDh~MrlsypJpC18s}MC9>CW~QtU=n# zRK&qS)Gbp!|)D)ryCv(0JmZYEe ze-u+8YH-qCE=iK5U)Lg1A!;zvRq8Z6VcN6eDs(~?`wCHmk@9_Bg{Z+u zSKOHiM7k<(8A82Ph#HJ^-bwh4Nav+Ka$ix18l2oY=dL6-yg?_rnDGixgORZl;$Rmv zx5haXJ8XVDkqS|RkuecNA@4J{M>58F3_sH%Vk$%pMn=s#33o*!qb6tEPNYKAU}W^v z_K^2!Wb~N24~SHV8l3$0>~l%hn=98_g{Z;ED6jr!fozG_8TrO*EX7oa8jK99_biIY zusFZbL@GoLPL6&7tELt+Y|soRkqS|RlfN!LFUckSq+F>GH8@#$LM2H$2FczkL=8r| zYZn7j`+%A|Cif!htwPjDCC&BAe%Xq0u=>R-tRzw)YNV1T$LWud8GALtyW%*|W)P7I zQA6ZQ<{o%Tn*|YfPJCd@u#v)_zpVHr;R=0%1$IT&SxBVI?XF3rLZ4uy^MkE7kKamnNLTx-1t_LMpJ1dt+rfAkrpI`l_6+-_eyGqV7-_9G1Crd7_h?qm zF_>a1^a)0~^1a_dq$^9J-0~Ir1S1_g#|$OXv7y6v6jPy3Fw*(=2UKvr#OrikuPYTC zg+9SZ+m8nh!3e!U($;fOTZ*aBCm3npTn7?sjkK@2e27SeKEcUDx$p!;#I)}VDng_} zpWx*FLDeO>bHrCEB)5t1il387Wk6v_i8&_|DRL@(f|Em6qYWAsB$z{e`*xt13Vni+ zwkHK$MB46jC6(U5J6hJ8O!+a}ybhL-TJZaD_)q&Ky5U8CYleU5X_7xnK)zA6MBP^1 zyL9Rl-!h?7LeIVt@$kYH=(p;JjNm2pPF)=w)_xaZtgxswIRZkJKkB#EXV#FJ(*{C@ z4XYujDAUs6ja?F8#2R86{`2I`FjPWF9G?7kDUk{lg^BK#_mBR7&K}0jTK?ISl}Lq( z!pOk6{gD(|VBqY+aYQOq6h^kHa1yd3?FY}c@{i9+q(VhuWc6M5#sCQqtI1S-#{m3* zr5GWFio!_i`R~Cbq`f-Pdgc-ylnYX!qA;?RUsbFm#1URA^I5D11gTI_7+L8}H@GX> zQDvnUy?!B5@j6vTM)fJY9b!UF07oHRYoXLCVk-0(MuvB|z6!`7B*WYPh;pDH75WP! zty3<}f!;!H1^UaR#T6x)w*JD%@Q{(PAf?1~w!?i`#8l`nsib$o3b(7kWG?_Ay$kxc zMSHj)75YmmX>M|4$5?=l18Ht@psI~Xh5nLCn(RwggR-FMhV~`3u^tdH75WP!Yt+5b z5W>Og0{TnsneB*F=r4>6yT5ofkT8!xf4TJ`nn;EI!pJHQHtYowS20tS+lw$G6TMaF zFN_SSI(-(9(MX0w=L#cIp}#P)^4;MjfW*6Es(j-^RU#Go3nT4*hm&D!ZzE~Ui|NR_ z-wxzcLFT$4*93)flS-Pe-aQ9dy{|8j=Bqcq^P%fhC^xC3$u@uGb%=QbW7=li$J9~W z6@_xc$scQguBGh`wm#{b5vfpa7#V%5{zJMe(N}&iMx;WyVWef~m#_|LF)ahuL1D&LWa5G~Pm_Lb>5&y!{7BHf#2lNQH94 zNlWz?k_<5KCsLu@aPqrqdnDQThd+r_C^w9B#i0_XJu9x5GwFy_C^w9B?poM{NawaI z_lZ;}H;i=kxR^+!t8;y{X^6X`P;NN+MQ_kSQhMu~aV?Pw<%W^YTMn4F8tJ_9bO(_N z<%W@tuO|Nuqu74+tu&t6KT6NOJ+3+<%W~Xw(pc=@>WQvwcaX}8%EkM4nhqN<}O_4`BGRciR)A- zH;lB7>4K%5Ag!aa2N9`IZa8_`c~X)mj@Khnq1*NYV2YrB%ahG z!+OBkU$FV@Yf7X-)?%dn$mv!@+7G$w5~+~2IC;786G>jUBzIngti{Poz22pg**>MjRLNSL zT>snel3XjSJ~$IpvKA+2+<60In*&G4{*!+bim8ybIGMixXi0i|)0&`?wQi=`Zfbuf z7)>a*9TIyt^uafB_!)VFb!|7M;fbSgQa#4*51)Ck4BaM$V8m28%Zpp^z-sTrwA_1- zZ-fvJk3ukFWZ;Z{zXuXTBe30!+i{XegSR;>L5lvc$CE+kSR7%{T?cHc2T zPQaMe*L~fVNQGd;NbAYd*P*vU7_%Pg+=xhpV8qClABzo#m_it9d29O5L@ER$Mpk+} z?H7po7JFOi#w*lH#n>tYBSuDb`VNbxa!5wC*o6mF8o4CR?ShfvZA141DK@w8CfgM z^L8DQHLAqPBwHaEF*5Ahr{X}u@(qH~@#7sSra~}cWR+|0z5}u*l2uOklQTgf7%?&= z{8oA(qmT>a{4C!3X7Bh)d2u7UD-Ugl%&0Xv;7w$@= zLNH1t%~!8X8V^sI4}>&dJ&{zJNQGdON}6obvcVkkx{kfI4b7Q@NQGd;$)4VjWNW*F zt!1l^L@ER$Mn+$FoR#iM^zofXh*SthjI{LK-m?E_bZ5%CSS%qN4NY_}eZz-m0NPRpz7HhmhFk)nIgH|v?+Kdm5 zD;h_bNSR06jLD>G1Apx$t5CP z&6=8sR0u|#^lBAIBzWs1iBt$ijC5Z3-A|H-3p^!KAs8{zk>}<a{mjE)Ai*dE*LieY1tJxK5hJa`?;j`9I?zXE7z)9NlgGMWmgN4K zQkqZ*Mx1HIOcEX7nvO^mEGt<6#(Audz^qiP2esgRl&8P>id z;6{-;(w+6Y2V9lJr<8R3k<@&JTuZpYo#; z4jquowL&#wq|1BuI3k^IKdz_VDpVsz+9qUp2_y6luhTYsTwfv;su3gYf8BwiMI-Hd zwss~`p&D`W+^HOrJegw)kqXs_lV|VGljPAY;VGm_HR9x&ny)0eyfR&Lo6xRT_xPR(UGUEQA2z5ZzoxDWj>^HMAapN`+>Ow~%>@EW=u0-SH;{8d;9{M_4+4JvqSBuM-z2cyHj3?ovZYB5o+`Iyr)VR+$T zGntx?*m#dfg|5IzYx;>zA?6Vzt>%h*h*aodj0{Y!+6Tz}NCqz4GlEEk9>&Osx07)} zDT-vo^Qu_;iV;%iVT`oj8s8mao=4JtWkf$B6?zyW!x}vq1u?%tGOS))5|Ii$jFI6j z=H8>2;Z5dtCsLt@F|zI6!u?XPtz}uDxl*I(_XbN$MJ?>({t!9}D(4`ZZzRVPSIG}8U^Mocoq2r2Y1 zMurwGjLJ(9j2W7LZW|&MdKe=e?oEXtrdWp@)^?+bRH#~mrO^TL2dL|U~HH91`qNb!`p>dwW} z5^4QaZZNLRn!Sci(33O$UIdCQHEWY(9Hh*aod zjC4NFGL=Z@10U3EL`;Pq#>mR=TbzQ~2l*zLWM2-$gj|pcJ&cjzJ1#-_puHD5eB(&OOf4%Vs67)ussoL-F zz94eYPQCrpRWAfeLG84}RV&Cuq(Tp4F+*A=X8-3!P899TZJCR$nYH%VfJZc z_~u3LiB#xej0}Cae=CupciNz>O~h2_VT=s!d2b4g&=u@$aF@5^h}_&wZ-jzZe}yL( z8o9K9-0ipNzD+8))jW_CQpoStKcbjBw&}*4)H%H*$2NRPG%D=@P90n8z_#E=H;Zw$_MR?BNTD_In6Xn%6X^=ylYx4x&>9)(c;5FK zk&XwQec0glu!t%cWDHH8RqE#vcwK zG}3#VxpK~rJkqWJm$IO-q72upWw)RW|a}%lmVyH+DEzdNpS@9Ln z{l(bSu!vWcQ<@rR(moaGncXwN(>W<8R)~Uh_FA%zNS}Yxd;}O7SYf-9$iN)0@l;#a&4ks2elK{k22}ygwtCv~(Ty$e>>1#}FCRxVuytnjO+31D@8Bb12}z2Q_qBLnkR zmP>c*rn=od?auV)nJ(txI+bfNCuzX8rXQiR@ERm#mt}%B}6R)I_qnrLsWWQ)#vg4^R8M9_&CL;Sc(P^$`=#l=Vy8cC^f3`WDDdtaUpTDuZ zuR@L`9f&Od?&xVEr?1tGS@3FSBK^H5Pa$%~JUz0abCkTF6~8J`lE|65_cQRfyEQ0g zU}Aom56w!}iy8PLI8Kshq8?f1amI~6!fY^^%A7eW z*S@(M^hp1my%teS|Aq5pSvhZq9$9Y2wQN9E#hB#=myV#`&Oe|>mb#g906?)wmO2o7 zhRDY@Ju}> znV4ITER+7oY6v$3W0rpLg{+aD>W*z-tN23{Gq9?uEyaAIJLAiJaLMYb+%-oGkuUP< z^){&HUvf1G3d(zp$d@&B$vJsGP;Y|<+NTluN`KFuS{di97~7y9O34-M^4yI`_N4rrFwrDxSiX^)e0sufVdBqg(|1q>tEMRr*rX;x3I!~F zK~31Gz0(72ik~;?E&lUXjCf46poqy|oFY=+))U^N%?co)z=roCbz3V(NZ-~I{JO>>xGTRS8T@iWdy1*} zm>at*;WfT%EMr!EiUorhAp^FaD{-*hdY^)j<|dc6MG|Si*0cQ-%y#W#i}r1KaZ3;} z^=&;>xAj21@Eu-f)h%27iPX3C#QpX|Z6KE;8MkfwJRe_eww`uJVQny15iwhBMB9KEAzfRKU+#uqf}E5Nwm*0;buE8b zNHo%bt*1nnZ{e=o!}3)Z|h08csT>~b~cg;XZKwu(txdJ`*OIS+Dve7ULbpG zz}8ctd_9N>TM?K!$_|%LnE_i*_5WZc@w$klBlg^M>aD)5$2R<8B#_sTv<(Z&L!`c~ z$Fe?Y6_6*8w5;AAK%~Ao$1?vpYU`T>Ijat8>tZGtFz0+qNT3ml{`WhSwFRkf&Iwv_ z4$~(QGbnN0EFuk{xENZi%n>!+>&&aY)GU5i_L&)Zzb6$;SG@nEH-tU zMM$z{w`D{cu-FXPmL$o3fxi-Iz+#h7t^$xR@UFO8zwAk*0gKJ0S&&_5r1MRW7FrbhLNbp97sib#EnP4uP?a6iqBaD<}Q z){`r>zQrbLSW(y+%y8n1_TSeFD5k!}CgQ@FL?R>3G)y2;-(nMa>Mz*Gw3v~{CiNv! z-(nLv{k2_^lf17Jsc*4~Xmby;X)}y37{TM0p$IRYPkoC`$kAFb<25qm@aWM*>RW6= z9&BkX$@|Zi6RB^p2`w-cb4}6P(0spRNhNx#Z?Oqk_HzRwLw=s|kw|@ujdM+%IWYUq z;Rrcbjm6SY#57>BX>;RIL&9)_@x$a1_d*FY!9<6%OOElb8wmZVc<(IQT_uM% zCQ{#1VR?TJ^8~0oAd`A~6Qvz7Li(NxThYl-H)y2os{^4#>U%0|uK1FYbS!*Aq`s%Z zR;Kh|NtUW7XT1Io+p_t-*d|GzLMXV2XT^Z0Vo7Vr;mwerz#K~6Y$MWur=nn^vXadI z<9#CaJrz-&o{ABzyg}6P+JT)IQTq{|c!=Ai@2POlegS2VM!Lr)qi0o+`ksoQDuquH z8RX2mj7WV?MbOLVHc8&j7%WL$PestF;iztk>kQf(dQy_Qo{FH%gIz>c{8W3mBy~L% z74K}sVnW2MczRq3N$Tr`)%WZqGAQH^Ikx(qilBmHGfOh_VEp`rxGVaeilE#1N=fqc z0hu7_dn$rTWJ9S*8{1rF)PF@xeNTmDT?7<{8fjTP_!E)(o{EZ}uJ0wX;tSqhnuccvtDJrzN>yYrKkVlW_kfbIrdJ5O<3?Vqn zN7!gIGT5un79#aM6+vyXrQVeWZL&*J*HaPXy|^01toSNcmLd9{3TxB9pAl)Tentu@ z`ko5Qe*tneu{@|LQ)PWmg=I-cEWE{CvCN!4g055FQ(>*!@F|hjs3f@~jnVZ~SdR{Y z(npJF-SuC8imC6Zu%66wRFc0}mOGNZr@}JEJ3o<@z9nW;Onpy<)w}X)NxteepGbXA zh2_kq0g~MR{tA)$o(ju9Q{G7O{$BJqh#g7aQ(<|~V7MeNZT6F7+Q%mBS+SoeUV}*c zz8vU`5Ha;V71pDbp^QzrpL^5EnV|2fD4+ctmU#U!dn=!=v)s${Jrx!DhaI7q6*{~6 zP;d1;73F`q2r_}z+wu!crHRz{RFr=lh^ex8R?1&(xR^+NPenk|k1<3B%oyF0NPSO5 z1yj~0M3#TD7_Iu^uIPIzg5#1~5*Zv4lZQxsPestB7CuA<9cd6nq`s#jI7j2DLU%26#dpQKvIXZ*x%$Hz5vlK~sPOOiwJ2tV$5rIor|+pK zpJ5|DpRF*a|A%98Z1p`AW#T%(ai0l_Z*YKwcWqC-)%R3bH>4j*y|pG?c}Jwary`(t z4$R(!bQqBEtrTzcJrx0c3&^J|AmLA6imC6ZC_AMntj03r zSGi~FyD==kkIzRjEgP-1DW<*~!*a0DAxUok16^TaP0)8^1oaZ{71VODcEOW~)OTY9 z*&<>7Xd@Iu&z++_W#+jbx!(Ex=j>)1rXnP-9FyFBs0U)odzT$l&~m*y0! z3PxvdGGX{0Pkhm#AK{GCdn-m?^yeT^QX;PJUWjkj2R2gk2_)kiJ}gB2)^{&N&Iw)* zq*x##XJr#-oETHzz0fNA_osjq7uzax(J2&D-@OnuIc5=%kbJ_a#JDGoh&13{=;iDH zWH6H9UG}ablDQYy03Y!jVC$0nAK?C+MclgZV;hO5?Tk#FSElefckoa{3miS^XCj$} zfdxL{5!ky?+4~#8z0(WgdN(TBTa?0LV(9sA%uTM|m;?}rPT+vJaLr7CnFE3aKIIYE zWZ&^q7+f)|86ebc$!#K>*&rBx#uKm6qTmGx41I?em3&t;1L69PhHx*hOu8TQ|? zZbTYzG<9xvS6ILpbv`F#LuGZnBqZ0S}_~WxJTy4qCPXia(L=wPV<(*X9T@(% zC+?^{pa?{V34?yPa8WH`=b7n&;SWE<%j7)<_;Z1O^S#iN5!ZD-cz4|vRTrKv95wH* z8+OZ;NZ+wz+f?ih#Kd&PWLwuplxY}K-!ozRY3BkU#p-99{HHjHLsH)}5#yb)9gTAI zo3=?b%FHvthUul}Fj?l^ZAO7Dv-XG@1_K)~PSl(W>V)>Az}=N6!M3XHjm$W~0>AML z96Bu_3j~G*6lTY$eengfj~T!~gZfgNFpsaQ<%i7 z9+X4JY!wXm{tO@L|4QOLj!mWL%v-^5Ur*fC>8}-liwDaU-%6$x%wWNAKTq6wEg1_Q zfjdvl8%xod%YxwFQR|3LxQ4_(MxwWCsN;e5#7g%{t40B=pMf%5UKCHh{`(~ z%0%rapGW2NeN3dj^CGN6lP`%3Yg^+Mk^0Vyu<4s{Ap@Zwa*Jur>l3N(ya?M>CY9XY zFP2Ds=S5h^)nT7Ad6#N@|>z-QrTZ(DGdC_El7s~zW*DJG) zNanm?llL3X$?G)dvO(Z)F|gymnvDr(_6vrW)^Pl$^>E-qKjFLSaxb`Sf6@6G=k`(? z%oM@esNmTJSJzXRKMLH{@yF$aGiLy$wtENDOQ**ap~dWz265)5~E;;v?4 zkd|n;t7huZG0OzQQ3d6Nu*vB&ts>!$x7XWIbmp62cqLC9UcBK)xU1M8nCV)sz|0d2 z5B0=ti(~u3(80}vyei2zBjNfE3j4KaT(AXczvOB`q`rf~{xIKLN!~v&l1P0Ah5i1- zbCSH<=f4!v$Xh9P|1?sPI|u$kqyY!T(u_G_fOCn-mAK(Hk<3BC2DqB%0NV?fdnoZd zZ)uqLYj7DJr{UViWHLd>&%G2QPr^FkwF|p5V&LUDGEr<+yHmQmv^}Q59ZO==x?6(snsq3W( z$~b(gBz>pJs?1m4OVMpebxC#{EZ08+UW(8rCnf1<(oFVN_x%*XU%ZBism+97Z{Jiw zNca5|L9zK`i3|!qX{DG3ycFk;KO)j{vPL+O`d*5l64R;@8B}<7Lm~}$DeljPGEBS9 zfa~RZ5^2CovFZyvMH0`7_2<>%EC^EpeJ_Rei#01H={^5XifO=05%OuRB<(9^5vlK` zu%_=Tdu#bLb+#n+y%dY9pP`tR`7?4!Qr}C_r~6VOgSxjVN2I=&BDm!KfkXy>by+41 z2D}tYccYU>+?AljQ+X(+0WZbC4RVBn`czveNqsNH`MwWi%#+#hEto=WHsGbWP;gx; zxnHig2D}vWVo)a0u5yZBYDT2N^T2PWjt4RUTfR|!urQ$?d`yVw?Z}q(t)}m$ZNizS_i$ogm zQXI}Vib%^J<<}8uz)R83zaf#<9w&B4Qr}DQ&s#j(6Eng3WYJ6_4R|R&ZN?*#}mRNt4NCRGqPvgHL((fI``2hGD=onk{STG!qvb8+nCvWkA0wfK1DJmZ?03_(;aGfD9WFc+9OL4DJO^R9mR!|`t zAp>5DjgMp%X<2BhVipf#AT!<#L-!tanKr~FFu%@$wLkFSw$wy2)axlMfcnC|hd z6WVm{30-DyxL{g=zo*pTXs{nt3NKLMK}M`T=YbFh(|FBA%9|&ocIX><34cDVZ)Mx936h>FRM(Q1xd#zcW?IMu4Hh8UBIvNET zK{Efx|M*8_Z%x)pXI23O*(!Jg0)E5nSdh&6p&$eQ{CzNxhX6DMZlCi#k<9g>Ae;65 zDj%pgn~-ewy&cy-5mVpr(PGaOkjcykk!-Q4#Y-af4IdFji@};;u8w3x{zkot)Hi&z ztdg}UkYYt?8M*=21<_l5!$-vCF@u5pO2l0LGipSFG+_7`?$-}U(6PbrF`!!vk<9R+ z7+Xt@fmliYiKHb%HoGMCy&j!icV*00t8);^ydG)CG&gzncXyb5P&I>D|)tjw1m2w9w=H^h42_M(m zp|^99On7nu_ZC4iBZq=?Ut3>-W`g^8*V{xg4~K#btuwJM!~_}+=p**v+rC6hX5Ubd zjxOtmKup-vV2O|KC09-6+)$9Vxho0+c>_t?q~n-Ziki>rz90=)FN$|6Ln9QEV*;v6f@IbU#dQW9e22C67VK@%Z$0oR zNstCy7oD#E1u@0i=Wa243z5uqp@>zulA8HIKa zBazN0>xvV}j1&sewV^D`gp`;|GVCXkc_>t5l}+F|Paz!*3J}Tc6DqRUy^oU2x!Ipc z=A2NF(Kk+q!t85;BNTmV(tRTJO%qW+f3*zA?~sg|TUGAa`lgA9cTevT8SymTQ;Ml? znuvV!!iUJnhneI`t#6u$+&*xoB-eCZN-_0K6A{D9Bm)V$ALL*^)O$yyzG))lW((Nq zH8SM<49L~B8Lw}e2=)DUk|h5LK($ajEBdC1P|I7$`Lvj!W&SEnq`qk)?meVtNA!&kJNyFK$kummRAjedu=Z&&UGd|x5y|`*DstuS!IDg@ zE_Xp@#ZZv;n8EQdLa*^U?Jn`+~g@DpXS0ywsYB8DPLP1({mctWU*w5fP z)9=1Zq`uk0W^-L2(&lfL`H;TZ!dCB}MUsq7lr@sR*}@iUN6k<4*5=MiHIf0dg{?@5 zUXskdkLIoF#|<+*!M@{5T&eTo2-(+ELGc6c=OAXbP>ikJ^2<0$mL5mf$$b|8L#A3R zK9@uGR~`yVNI3MtH*)v&Hgua5atQl)X8iJOP)K-Z!0yK<#hsC4+Hy!L>9uCb&#*0e z{{*1dn#9iKh*ZcSsietTZs%%%AbEgERicS3eH3yCBLlbeT>_+#CIZ)tA3!k`atI@v zwcmUl1{;zjkVBfC8%Cr;4q;@Ab(28~Hba>Qa>&YAvLIE+A&iX3J0KWHQC3FetctTj zJn9NLgpn;>o&Nw5whWW0Wl+ZtL@MMEMn){@UjWF$NJh->Sc6D~9Ky)({*z!1nXO2M z_pTL1q(Tm1q$S;MkV3qm$ME*fPphv>GHp48k>SlJ;n-?18=jU)nL-XpCCyFln5V+* zI}IVtO|Bm}M==$0NGfTvA8>*IsQoZ$`>y$T=pyclLJnbM)%~ZNLAdvLomF>!Cug5R z4q;^6fqhW=m{%Yfx9g6c9Ky)Z%zGvR3G)aFHNSepskaI_gppPAWQK*%To1{rS-<<0 zNQE52$dDg?!mYR}k|AB5wF@+g&9gCX|+tl+~XrrC@~|!bsbMZS8=(j-+k$Vp+;6SJYokW4g(c(2q$YEh9@kAtkMvVQ^o94$RV7Z zcn3y^VwSH+q(TniWXqW_Iw@q+GOvkL$RV7Zcp_1fBbOc|QXz*h($%*F&c2s;S6toW z1XaB^jd){;#AC`%uO9Ky(mo)z-}*#Ji< zqVvB$P)vm!!pM-biLfJSWXQ>(ay3!NA)I^_ykC+}=g9q2A%`$BwA2Dgh8F)O1NBxR zhcGf^UHa8B=BkpbiB!lTjC5{E>;SXxJdTiaeYdJaD&&w<(pLe`(6$`PqhHW=w@zhe-QuJ{XbNl_>p zjC5wJ+KxzPhS74-RVW*bbU9A!BhnS*l1qw0*Z=QyYb{!O7^}ze+N+ue>V?WrLIUpYBPrLO&W?m9oLftcm$0`NdIN%KcO+ z8;rEC>Rb`VHV=-FeR<9YL@JaGPJW#&M3P0C9Vb%pBF<-;vf%@9@V_76zw6*cX#u|v zg#WZ(X*yAgeC9;a-s(}JUP7lfaa~%Y5W=h|Tu#B2VMX^I=ot|!gQJ_{0gO{WjOOUr zGn4q2G^{9}|HPGNN&kTC5&@iV89wN*Try_= zB&?c6ZxzZ*D(T(GUEl)D-QLhy??$$NekM})=lz(Qd@Kle#QPkO<|h9&Ek>k5vq_C< zvfm5}gXhDe3-!br#Pyq6*7RU{pQyU4Xqp}cT1 zSbVtUr64O-kuep@ODgHz_24h#;aP!a6y6^4XXtk7twJ$OB~7-!O2F>mbq8bG_9fIO zQlZ&!^5@(z+ck~cme{fykqXU*kukw<@qUW2jR|z2!X#$ALbG9{<(EU>QB2EnOIsoh zSXc(F{1;*t#p`tUzu%Qeg=WKIhVI+Y2uL%Mp}U?PAyT2)Fw%8ntc_y2u3SfxkGM{S zX2ZzfUsrws*D2Pa;9oBGB~qc;aPs?pJtWz&8@{+s#8hZDoLpbfTas&LPa{&H*>G~y zF9DJqc61Jr3eAR->vO@{mvWt}33eAR-Sv$ZJ zmO^IS_MAwCX2Zz?=^$@RA@}ZhL8L;n;pDeI4oNoJDetF3v*Bd$GRXK+Vg@{PQA~wq z!^qgpFTn_GZjU1ryDsJvkqXU*kuhBk6aumnk}(~!MiZ&fY#14}XQm&KQ9EpIA{Ckq zBcpe=SVCm zKxA0=Pcw*AXf~W&lwpJ<7X<%7q(Zad|?PgSWh=9IXDpw!#QO84A0@)X6eWP{=imbS2d;Or&e!pE;v)wXQX$tc z(z@*=P};j5tXtwy85JwFLat$?YutZOgKDH}bluKGD&!hQI<33Ih;&x0C~F6WT*F9L ztHP*KLgfLwL-Tl9J1FEDM%vcT+yNs5&kN*3Ye&n9P9fJY(*AcFh^dkGdjn){qL6Di z`6?W1UJ=v&qDOxkA%$GS$>;wcY4-sZ)wMMa|ICbtU1K*!jony4fq{V;h9;sQ0``cB zB3A6i-g}Q4d+bXFO>tzrEYQpxk0 zSmd&l!=Hvr>GEA4-u2#fMCl#9NYt*?(YpR_iq}-nHYmM*-!7IKHQCnHXw3!cEk|k2 zzE&)xsnYekKD;`FLcz#!R9gPt1!X$k^-*C?f0UI=oVtV3^}9aIk38ibGT%-XOULSH zUBBzY91&CuW155V$%&xrcYT<9{dq>pF3BG-rt5con5&(CC8celJQG}hH^t}LWRd!) z_XMAFzsN~hqRV%Ectc57O zo=o}~rR#TncpWYeO=6DG?kR`Uoc=vszw4vS(n2V`i_8>@TI!jQj(2^O_BHA<`5sEw z@A~k1*ef?mubXG&G{^P3KD=wr*oM+OYH1wC-h&3#l(JX9p(tIy>%;4!0!1;$ zzCBr?pp-7Zo8r~25Io!*vaR~kFLmF#e%FV2PmD;s)w9pMHA%G1sB)Og`>na*;~P@O zZjfg}I^Ol+{-lDG%9~h>>H1wC=2g!MNV(+s-%`4M*N4|*Z!bGG zohW^yuLPoW{jQHnL%l*lb`|r1N_}4)M(O%p9~B2>TnaKy$clXjoIp9z<-1!v-YhDI zqxE>Az8+NFL+N-+NI-sGr-VwhvmonJz9maJ1 zmJsg&;w9;hnBA(LL+Sc0A>Px5%lobOgqbn}NXJ`33?Jq}%r)X1s_^ANYmDjoEg_yw z#(luidNy>I390M1gj8Cz4~kR<=mdZ>K6$8IaB=;Xke{AzhGLx3NXVZaMn&Uj)A5#& zJQtvCM%%Z(S=BeqsAqgS-V&0jNqLa!RaV*btqI0-{gx2Vd%wbd)nah*t ze13XF6+MG7UB4y7=V{AKI9i{35k*j@<1HZ-pTH7^wr|a)&rU{}j<$ik>El$yM!8vDT&YQlsg!G29;AZ-IGYX~Z&1l%NMVIz! zQwD90pqb}wHUHF06Nc4Wazi=9G!?=cRa^;s7z>f-EHc&PdXn6 z4{+ugzE7$OWtnb*XULJF-n|7U?GJ?8oO#tnQGvjJ7QE`*ogZ-Uqz8g4qRY)R~7&s4vR#77;yU^yt#a zNlOIbRh_x-*6eVmYF{MxT@|`ra=kBt@M_LHWXMgJ2RWkm=(G$uX^tSgx)V1w3|{IB ztG?Y~?52i3#U>&r9TJ2`I&ov8Z?k%UJP+L1=)VH%k&`wF!fQHl#d7Dszp(8vd4xLP zbq}?gCk`Cxl_0#9Gq05tGXer{6uegR1u{Bmm>@jXnTO;r30Ir3n&2T>)`}Nms242h znjpNkGmi{eavgYm!6VIA)H|XWJZYUEysk61PhBT28Avjre`5S|wJaw%>7O9Hz7u!P z|NA9aq{w(2w0r(R6JF!sNfQO(4V}1RX;Mo(2p);(mfBC$35sGdx&Nr@V%x6??%y|m9^|CEg79XkxOsUt;ICBf`C$`s(qch)b0==?fHm`57hd#h)&ur2yf@i&1;&7WoQ5Ck+^ccXH-I2RDBKZV)_ZYyGwuopfOk-o=?)?`0W>(XE#zcSTNG zF$nMK%zf66F9F-G-s^l8A63`V#o$Rl2I1XP@h(<*tMq9#!i3RDQwHHZQ}NBedCBO@ zgVjzO5uJ2q5Z*f#A7d^l`GAp^F*<3_AiQrXzG*3>EskwpdS)$h(xX9me`jt@E)91Y z?YHmN$@BXnCyg3}4@|}L>^v!XrVirw2I_sDbZZbkI2AwMBS`Y?p9df(EgOUnO~soI zEF*cHiYdrR-v;5sQ*lccomX7c2RUipAbg}VufF|F1e~-mvxE+gl`Xy^CmkGwk9Ot} z-4dYr!w6Y2v~jffeg|^W#zFX4XCA&^{C-vA;hQgXMoxM;2p{LntL^D|3VF2+&()=7 zanh284#Fp-;(ttADEYv1YEmaS>FOYSqB9S#+zRUQ#uj4R!%K$9nH6d6Abhej5AKyw z^59M*Ky+Ev4oZ&NlN>6zqU1>fevcwHW^l(#=8s zjK$7Fur90!;WciZuD%^fz2%UW4#NLR#YdO(k-X1fAB;}=ItX8uivOJvazRJ*bs6P7 zgEV&#zQUPX>J6C#`|q9Dc1ui~q8OcYco4qInfq>=0reXr%nu=vT^Dr=Icf7CJjIz? zC$!mt+&a{~0&>#pLHJr{9uSZih&;ff?=Q$n!w2E(ow>DD57DEd4&EA{=~v{W>x1x( z&fIU~=3%hwV44Bbt5tRLAt$XLgl~4{mPg+pmD0H7-(t^@ll~9Fx1{24uiTXUMdcjG zNfQX++fwn@mEnAMM1MN%zJt?F5W;t);z!!RDdXV#H{s-twu2D9D-}OFAM#)$EH1)X zcc4sdj81w&2;Y;6hl`(LJ9v<1C*-6tgz$YD|G&CJ&IHH7)@%^N8M^y{8TTdW4k3Tu zLG{lg%?P&46XDsTaqFuSY6)FDdq|52;r}>uuN`MRkb5n;Dj!{>PlWIz&fL5C$;rsQ zYx$hU!Mo|rB7`4H#ry@ux(_g|HJbr|9;x!yKHxb~4) zvg^Elo(TzpgNK|QBe}koNx1f@SIQ6eTp;<%MtCChCm)L;T>I23O^R|08vUwu+4znLXPFhI_zvRrlX4DlkU2WG58sA-Vy`O~eE6&_pq@TEgRcw4(m&i%;3E@wj2k+gvl~`3*51jYUac3phJ5UIJ?##VDtUra^>vpi5FOW7A!e6H1 z$Lsf(eAB@_7@hQ@5Uza)mTbFsh0ZyUd*{x%6gg=~A^fd#bno)vQzXw*Pv#h;D}`|F zYp^7`*VAcxkb9k4qV^tTXrMl>1j1y1Z+_x!4 z_pI4^E^^W^L%8 zd!Fg?3OVVdAzb@FySU;=iw)s5oVnTS-ZSLp!mVmybkb)-cvLFxzi+AJ#rMdCF4Am6c(gP3x|O2{ za<6}S%We$PaYJ}aD!$wV>jm1jdrkhQCJvso-4Gt9@&A1<3QXvgo6vg$iwCaWi&8jM z?@esSE?rx6soJe&ONdNfiJ}KxzEBOSH{U4!J#Rs^-Ov}}DgM93?Eejpm6FCQQDU5a z1>_c9*!>JF$BHHZw{SP}T?o0dhrs#NKLTn2|MPnjJ)~jvg=1ZyN)2~b==a(8N!(Rc z$-Gonmx}MO7GlayeXvrjP?eMNg94Q8Q*OL$hWEtS44S7-A>Z$!^pVBKf?W1`$|~c zqpKv;{FTB5^NV+1gQwh{|viCFuxar1?tmpE0I+*YnvZNiz^5Z7aIM zGh2J5v2Due7br;|5F>+L=hzN1gV@fXD|wPok`^FFhV}Usp1MYLJ`k3;xfn`cPZ!5i zv3<82QV4Cd)_0d)q9lDoOiZ6^=j65GbKu{SC`ro@C#NOC`J>%$eFpt94JGLo;^eJ2 zaAiB>(R^YJKt20NqYx+8-H4QO)_Qr@Bt1f$ypwyel!uOqf|44Ov!I)gYFTK}GuW$KHiR#lRwAWnX~4Cjv{=8ex!P?CNiPLBQWnv|VC97jo7 zfjHTwVs$B_j_yE7x_}s2{b43385xtr9;$wF^Lvz}0f>s$?%I0MWsjGx1{Zdk=35Idx)~yxw$`~BppAT+@2ktWm?Q?iyDcR6E!Aj z_F-iBuV3eb6sd|59@2a;O48@U$lzq_aFoHr?w&zOT6{Qpa1f-{TFl^8KSrS>-94Oq zSNf!s*LrV2Ng8`NIq@I3CpcpEy4DIM>FHsl?e?wqaQ3P51l!)TW|X9zCv9o0H-AMl zoH5oLuYP4yJu0M=CvB+&G z+x`*PVGsETX-jFCg4;=&ei&)pR~6<7nzXJyT?QrT_u=HjdRsYBk5&&8Q})rN;@ct*#59~08}8dUTTYZr*@ws~cS~ggsTMV=TstS$ z`_!0B*@wu1*LOns+XSUhMHzUZpdBSs_8~Guc|%#)**%2JP-28kpP8}`kyV#}5~pLl zkX4s7nu0NzvJa6NeD;0^a)27M((FYjnX(U&t?z9}1PMtDlzpyWlD8M8>_cSu`pBjr zMf$9Suju2d>_cS8w57v91_&84v7M{350SnH4jh2vc}Ym$oyX-Ak}3NT8S+P6IA3}ef3OW%09X@HLUq{ADrx>jAv>XZXAG;Df{Ts81HWU2IwM4W4vLlEK)ILA6+Vz z#~nt(cAgU3Y5DiWR*cD%eTZ!A)2ADR`%%col|l!iWXe87*6N%Gik!yHLe^^6LM-sA zdx$Cf5E)W39~3lGGl0!pJ6(eu?oP9p=H+WM9GwWbg5W6cut1VLRtVvC2>OyluX%&$fOdt zAR#qEkpap+-;XYak}3NT8JNikrC{w$uzhVIr{_%BhsdBFtwaI?_aaEyJNPffm`vG+ zNdKwXeIe!zA^m^9dKD#8_MtK)4DKY_Ckg!h4$3kCQ}!V;Zv5u^Fxnj=X58?P@>*fa zKDsn@x>6TL>NXRgsneO^6>+po*+-X(-_@z`STx)dG5yXS?}m~o`%t;z7L+OtM^w3L zrc5T7vJa6F)i%RfpdFP6dxD(iFl8Si&D%EK!IRzI!;N~Y{Xr1iBCj;A(S>m!>i z=rUy=B7OFhhe^G5t@!-CSzg&p*@w!$wcMoamRK1_%anbnJTy_9@#>x0XWQ#BD4DVk zmD87&mU8?Zc|4i250(4=@|1F0=CT-*DfPKrYgR`%V*hAI##oR*4lzoVd7=Cji$o4`;^gkSmk}3NT8Gbq$t}so8AO67&B~$hx zvf3#xC+QAM#qh!iHR3;Z6DCM6;H=|_AK17DwF2H%K{W31xTz?`;rtCvx@Q~j1 zQ3m%7xQ3D``%t-jkSL5nI;$wb3#NZU$&`Jlyz(oY@eX;uxV+yoWgjYggg20~LzFD3 zF=ZbjZ9Ch;vrL;O*fzU2#nCclA6**jjeYtb&KTg7VW8rdxzn?$*JLF6ShXl5+EHe(Jb#cl=luQMO%GudF zOF4exW0Xt1!>rb$oK8WqKG*~wjB~!s6GW<(!sQYNI zwGDq$Q{EVu3J#IJC%QZUsn&jccb1m@4on4yNb6#cr6{eF&yT~=G8G&m1ENNRq71P2 zkrOedfKdAfC7DUZ#=#}Ze;q4Mnh6R>X! zt7qTwi?nck9wI#i)sFdrkEvSuk$rKU=z#zb3-R#goIbU_T(cj?}LQ8G0qBIkX+2n9XUb|L4zKQDeeq{d__MMNfU zT09mGs#?uRT-RP)YN})^MMOsJd{GwU77;UQM`5ufp-QGwq)S6b&oC(Pn?x>P=vb+> z$R}0FRK#?tv=}%OTBwXCMa&j`AB$P1Dw!ISE)B7N42Jrh*6?jfrG2zHSWno)mcwT7Ib%RjIiI7rK9+|cfB~$OwM{8<0dKyG?gV`?BdxqBQgp#TE z=+YSPapEYTDT(DukVDI?jojjS2fYBqi!ctdm%Dn_=q6fLlJ{6)kVov zP>8gh?>`zOWG^tuJwCV^N~R7%WN@C1uy>3Zg$&MdU)0yt(K2-qB5l4?V1n(4=@nB8 zB~#5H(&x)um{@D89zGx4L|sdb$y76_T+<3F)(*M4?HiO#HG|4;6<0|4#Uv`6YD}h@ zLFL)AhowAONWADql}t5*NVD-BwBb2M`?cN)luR{)NbB>T;SOeij0w)6$CWywWU3id zCKiN7MTh+5N+py`HG@c7p&fZq+Vahn_gki#L8Nv0ukh@2#9T5i2xBtU3@S&KhNpu= z4!I<%jq1K-su@JqPPzjXa&2{|cFS*OluR{)$}0zxK*DrYQEFcZo`906W)K;Zu@c;a zG#O*K@&ihynnC4%EyUV|8Z+kYLU^cY+sRZjsC+ImI){9`HW(#S&CsQ>-mdmgwb7p0 z^>%dLgObU(b*cC-8MXwD3e>jXe!FN{3x`ZkyTrZjFh?*#jUDboxBWx|f_gleWShja z-pKkDrSzCfTO)nn^tE)tJ@`YsFf%Dw$-P%4e&eO8I1c5tK}_O{C>_1I#WA zpTu@r#;A=JYD^~CCekls0#x9%ms0p;s4dD7s$^1TBCYrPwMA*YHK89$CS@ivV7S*m zC<6vP&5V*snTfP+&Ln1Ug~WDR*V`YVWKw1#1C?lT#+MV)_BBpESD2KUNc->NTT7a> zk0_iAV=^f-mCpiT#ls;V%qoPENtvlUx)-+5ArD;~;E-I(Oyx91>;Cr%Fhz zh2Su`!So6e(vriY9e)&;km`B6VfEvEFm%%lkcQP)A7w$wB&51jd>8qS1aw|(xbK8! z15q*wDUtJD&HV#nZWD6ezbp5mWD-&$6IT}>54-H5kcqPc0#GsuDUnfIPxS!#w~$e* zf82+XNl0~R=ve-d8Ae+iprOO!{xK+-gjAPGi=LMtmDO(gEt0y5g$4B{!6c-*G{lbj z^$EnBE@H;^oSF?KlaT6C3E5I}1H`n6?F?BR=82L?NU1z%+AHPSg`(Q2j+RMCb!lqY z|78H2c)cN{sbQzTMQK-+OhT$lV|=--@Gv!925F2h`n{ZFGYP3KmADeqEr4Je2?^qO^$t0w@R4j`x!sEj5OvJQIITweLNl0~R4D4C@ zJ{%R1;u!-ILPwxv5>j0%Ne!xq$HhDmGpXu4Imu=cQX&@&SOV9k$spu{&I|iuOeP^E zGH7wDiV*WBA%mv>(iSC?kP_*C;`geshi(b!zpa|6ld9(}laLZ=?^CZS#8f-o?5&P9 zMad+jx-@mpbrSBK5yMK!|^;LV*30WIte9{kW#tgSb~(ZFNL6F5>hHZ9)jnJBj!W(jauqC z#3ZCt9)1xh<<^?AOu!_hRQ@*x?$nN$k6#_a(J~1sk=FZ};K`u%2U{;yl=mSfA*HfW zhVP}UvArY4WD-&$ZQmU~htg(PEuYy;LQ14{z7eM8j?qr86pJyLgp|sGB`ZtWrH^QF zRF4XikP=zD*_b^p&rvc7DV3*t&IEZ}m3vCb=O>ep5?SkGeNntoWvvG- zWwOsCq(sKNcs>PX%nh?F&@%}smG`DBk@9TT@wlB#LaIw+y{(tl;xoJ6^2;(MU=q?7 z;!obBFS^*SZK?)=&0;s%jz_>h&<+igTk3%o>!sXKVb!GdNIv;MV{%I>PY1xm#Ub~u zk`qoQx1{n>;xZ|(y~&NEWpYa*Eu%6+Osytj={ILAN+!1?(ofk|2x1l#d&u`iN=B4S zZb_u|THt1s)+1}=gPX}Mi45pB?*Phx_Js@>lgTZKw66Md21@I^*7C8$*+DZC6XV zzH|nMcsY=IktiSP@A4s@4z!dJ)+Z7m-$t_7tOW!QlrEFIbr#9(W zj)nP!;Sj{T3Cppa;IC@=2>z-lIa9>{Rf{F?*T&-i>8i-(*dA?~w`$SVqfTO%j_ulo zCUmLVC80+`vv#8DMBem36IyX+SgrkdKd1P^{I|#DgWvC_#h<(Vf0tt&Z<965 zQj~;{seg-q3{#x`Ova;^3k)f_+rELj=Ujk>lw51iHaCVQ-b#U;~jA(P9$DT$KFw~1_;!&~Gna3fQcrkTf<aq&tEFq&iOc4E7>S&ovoy4>!{nra*86oYhN{W}psFKOliHw|Hrzyx^gp8d0 zbudaMQztS=34}YIv7V6juiZqQNR7#4>bi8#e`g8gEg8=NbkBby;w(xgQ`eToK7%|hq+dV{d8cMFbt26_6c8EDJ|WEon@+))OukKJ<_vH|3`h$a(p7qWlqCVqa$YNQd>|mIX;y+mckv(A+w&0 zLCNI!RQhgeEv45^k>jhQWpaEXZ6$WVMAh(B>>*o``6BmKC6nV5X`PyQ7NvD!6AzS3 zj!&d5uKIbDw&>0x!BS%~IX;or8+E3mv|jNL(?wM>IX;zJ#|)8j(}UqCnH-qi&zuuUfI3^m&>P(ZoCV)0IuObfj(jrAU99Ex+WdJh}Qc>+^E(WMeSWy>Ro z`CP<|o^+`c#vHIi%}lb3|D9Q++*4;hNVr}g&Dyo|i$ijm8HpK~?=j>^+Rsu0b9+?9 zm`u5bNb9!&HBef=)Vqh0Dc2Bb%bt=4r7d%;Nbl8s%am)V%zQ7ml$lChM#+?Gh_o#3 z`w#3PxVm8uw(#9gD4B8%k$z<}fz*<8ztRDs(4&r)Dc2Bb%i|u3(v~w)&fb`E4Uqxs zK8`^dkdi2$f=s!FNbAF~yHHyHo$@1&mMPZ|X&zey@-pq?dghT!o}y&RHAMO@T?HA3 zCVdxs$$KADuA%bb$68W8$e>_Mrd&hiiLtk(Jhogk`G}*!m20S+JwsgC*Tk9NJ7ddn zl<8;%C{wl+>|411!Btjjz9BU&tO?+s(t6OqqblFmPyMX8dP`%98btauo1Pht=SCrY zYWY{enCW=`!ILU5Wp%{7x@rMRrl_IEG{)Chb`*}MxL}R({>I)YnWBa+l?2O4NC~v^ zRzf*C@{qRDN|Y3%ec|)s)=dNOd+G=drZZcOgV(av^TpT zZZDAjKxrc8t1PK8|hI0t67kCu!%2*I3Qw||Asb3_V?ZyQ{ zCbca-7bR2FAhMJFhk+pBdQp^4l|KKAk|}Bs8Fcbq9*`A<4BGbl4wOt$gGm1`C*V5K zKKSbY@TX9eOi_bKKi@5IPcWPkG5t!rXF$mmHHb9lwI+bvE2P=bUEULzq6U?UsXs`# z=fai!^gHpp9QAlIMGYb&7Ht*Dgt~_!{+Rs_N~Wkmq<5COlQE{(+k)a318PjBs6nLd zdD0GuSyqhJc56d2N~WkmWN?)my+CFXGPq=&At;%m29dV9=Cv|r=*TxHnW6@f=Hg|b zJgT+QnX|4wg_0?15b1OJ;yaW+Ti;GY$rLq+H2<(-4@z^US(#BXMGYc--dR4N^ttgt zrq4`KgGh6UTQE0qY-je@J{XfJY7lA5IR@@Q1}No02kU>`<#UB8Y7l81svMEBL#Qk; zFhva_ZGo4?v{j91EA>F$!I+{3k=CPMrlPd|J+&lmCsWj*a_Q_9QcekPfRZU{5Lqqj z(Q$D0iFuzA{_evtluS{B$f_p>!;@ZnQ%%)f55rM1MGYduN_~XUYBDT;9r^rZiW)># zEx0-t%BqpIS_NtH6;cnW6@je-$V$<&>3jp1>3}sLa*5 zFUr8LHDpOQp zy=nua{Z7P89C=(O-rRcu)LcZJ(?(DD;RhJ)Ga;h~_#N^I?x0HR{rZV0nQ{n~|8-1}@=+#P z+GolkMB0>7m!*6gG#g_w~=yz@)47nsgLr1S3$54_&4jJ-E=OMS4)_)WPJ}m;b zm~=Y_a;82)0>>_iUJZd~iomf864h%$>?@`|qDv*@cJM@q84OYhxmNN&j7jPvWXR{8 zha77B1d~}~FlZ&@-3qn7EdrBL2jQ2UxT)dd3EiQ%*AKL*Ve-2?7~N&_kuko0M|VKi zK^o&@avD*RN(l*k)hVzNXP>hU(WXN}&ha6-$C2A&h1-E}5*aJDKUl4xJiM!{&@0SOP7_ce| zMT{%I_#-Dp48k8carhw0L_3^Za6!XU^md2U$VnxG@JCME7&uJy5tu51HU;4ry!2RG+j82Lpguij-_Ay_?sai~M z`{+b@sxlQ4{e&}h_G}#kSJym%rp^^!-NnF6Wlxui_41fa5HmAK#d>~3Zj?-Ig~*6) z%SC3Q?yHEDkLsd~*jJ=NLN@lZ^Tq~dtW^|vIT6_QG4FZ|Oo|;kPf?tCa9jjDGPQ9B z2T$yWoK!prH#&1$`|3~*a71tV%PQog>_K=2XKuFGbHjm#SvAa~D!d(yoYX!D&*;p3 zZVyR7?sIu^apa@`LU<-;ZZ6jnatTNDlAT1ywEEa0RS?3nq~f{y`%CUtS1l2U14l|B zgl9{|1G0rnUTJE1j85tygy(SPwlaO-gwrPJw(pznMNWz$gy(YR)*0PkdZcmd_$+bA zNo9oa+|Jxq_xf?+KW6kXtWA)5udF_F%;NGD9G_!W!QKOJE)e>^8*8boN^E=}yalY1m8MhN9Q!ODfro{NcC}WBy z%83qBEg>?tfO#*<*xctnU`(c3LZ$mXsFY}6 zZIaQG9bDOY2m9|mumz3}Y%omzcUElR2uxFK!hM{1;P)m`g@ubtQ37-PB5!FV&nDd0 zncECyV2Y%1>&O3w<7Sg&n{Z1ip8xJeoanadlPPV=6>Ziie2}E;C>~C|BRd@;DiS|b6dWn@X*z`Eo&AT zon+yJhdT3sP2FVlfaPDRVRVv;6JFJsTc3(I3u)1R` z9|5OLmMvQ_I+K)>3&pXpX+NEpMzCzedTvAS?f7y9EK^7N#$iKu#d0mpEob2G*&O6vL@9RM1 zmRYfC1wsTSnK|KgHLkz7AS6|{Ld#J>Fx#pDqj3wbQ8@s29{E}W`STj6f1X|_Fr;L= zUj=Sbvw#~`zaA?eB55YuDe+ER@jahq1W35nq5ELN;~N+~&15^}7iZq%YQI76 zv2l&eYSPSHQ<^yQHyK9zz4bd_9kj6Qd}xb zuCDJjCF*4J<{-BU8MWt5V+_pX>O{5}f2}o0_2JiI_(OHEQ^aJFZCx5-=l%^#dD?p> zVyBI=U`!_2)}<11X`B&aLLvp(@~+$WQKp$}r?hq6O(Cz=FO~dUH#t2`Guck*=)_G8 z=d}M3&dt6M+|+RVF}1WPwwOt_^>G{Hqaz{!T?J{3_g)@}<4!Z#PU-9vSV^!=E&y^f za3$f#aNl8DtkBBZ|(4db>6yW^#2R zBgYMim#bM=&dPTW2Jg|Tp;Gr|=K zx%#Gua>|fquAVZ$i7S@twjOXVcp;)&HqV`a(bLS;QwBNnq@kO>hr!PmJgLR@B;;u( z+bKhwd8crXmcX|N-l@bKaZ6S6kTjF+lwr<1=t9UU;7}=nWP3xU&B)VCwo^tp^8nL( z8*KX>!ToPs?t(ncWIJV)Gq;Z%2TQElD{$;XOv8{f$+mvRm^zm$49ClDF2pr;F53AT zN+#LXrD8q(^+$-QF4J3&c(zB$B-=zrtT^xh_f^E03u+sUxT4ccwp0Fa-dNk)Up;`A z5&Oz^<(!;iq@8R}apu9+rJsO984lVD3Quo{<4!x-p61ML@fo4+=ZJ2rtFBjw!Ka;U z|LM%lW#6}g11)}|q?p}ip2g^CC)+cfxzEKwC`M`AXZ`q`$kR@?XFGFq@rcsM&BjLR zLY5eO+R64@XYTX0dqd`MHGop}N z*PQK!(bG=0m#5;ZkF1yc_kMC&Anjy(r8BSH>!rvEj*DGayHh23+?iyXT&uMoWfh6< zNmbq|SP;j}B-=#B6#6m%WlXm0|Da@&Z6afHbX<-y*5E1UI83rlWXx9^oS@ohW8N+} zgE5(8TbIUq|3>_TbA@_)yW)JFNw)Vp@8HB_3vlh{tBFIpf5gCK4V}!Q4{BWeOWX9- z^uR1F^TMCuCw8^%@!4_sXQZ8RA9Egp^_{P{uc_R6+gn}K6xVjz8TSciZZqV5DEXZO z4>5Y$8TYAFJVPItbvUBG+_(&R+8Os5XKqPu?+fSmXR+;;@z1g$Pdnp2=gj?z*Y66^ z;rS04cjkYNBTqZyzTnJl?s*y`w?4TgD=lef+?Skrz+YYKAP*Q*Sl-vt&bY5QbL-Vr zeUMvsG@pcnPdnqj=F9^#tr6t{IQ<~wHbu)Eh{?G1b6&B}E-spkRcW7mvJwVnGHxor zb`YzSntYoqZ^cZ;P383%n3Fr?xw0c1F}aMJ%0(@*Njd9G7L?4d0*Lf4UO~(Zi-|qt zpCbdVjM8`NlZ*4A^A5Jm72V;VZfq*R0LgvlH%*$2E6 z3)tFGx$i1wiw(aWgP3PT%oek6in6^bnF4|yQwegbvIeA^koNnd#fqLPneRaA(hz$n zaT|UN$G*vx1pu3z-&>Iq3*LRC`r{J zZE0$_>p4t$-1J*E;7(Q*+;c>F=JzNsgjC29Sn4S*Jl?M#|}ye>*oQefnQ zO}k;fZc?w61PIRs*QikLx9N^C_*3JHu1u!zn`!+jwGzMp48Nooj; zv@dE>5Mur)qMwI4?zlh1Cx}Bszz{v_L;o0dJZJr)4QIgsKCx59>R?6T) zVm()lNy-9@v{kFU3*HwTH+zCc$ebDtBN>Tz~r1e$|WC)JY9(W-p>S|1q{WG%mf`%R7?9MJJdYD^~aCo(3qDO}Z>j478l93_+Z6B+9_D>KU29}dbH z29x+xStfI7DRWGfl1cn^X{>Mf@jHBG*Lz<30FIWdvj5M%761H|I&Fcr709@3rQp$P zw5oq!boN!`Bx(O2u1j078t^F8q%A|C6(~u*&Po4lV%n(2v=!-)5hY30Ia$J2q$8Tl z@tu5dlPsN)mfc4`f)twxAJ?gN9%GUOosoW3JDdesR7k%HwML;Nxj7?kUVX*XMwPb0 zezQ@Mw49Lvm;HTF25he`*4NaNmt^FOwB=|5lM^i_d}daZ0#r$oaYhD~I6nhq1+krh zIbMqjpDLL=Tt5XB`#&B0QQB9GZh?}?!-)(kTNBa%$EriN<=0U%c{r6>56T+6{poZ} zJ-9raNc*Y%TQH`5W1icNnCV&h4p|736JtrShx~u~>W7l7d^7vjvgN@Xl$Hg}`k*8! z`2R?Ky*u0~pH+rM>>3I8QpiUXWmwSR{kY4NV`=6hq>Nze*Qqc{TldQIQD*q$N_u;~ z9E{St?2G~^-SWAVmyQmS^5lN8ysn;9ZWUe1O|M~=q;047s_vVl6fb=3uQ+F=WIMgy z&c&&q-^O@{xfc&lzYk*k#d|X>Fv`t9Hn=~rPHL`=Tc_qPzj~i=gP;VbbV9~ zuL(lwy<3qt!;Dp2#>}#@1WK=O2jqM?V_R3!Jf#X;Jlat)k3ANNqiuY|mGrvvAKXSY z>2=jhEQ70OLX)wsWaWkZ<=Izx*4_pv8;^D+eOvd2d8-!Fx9L$glufR?lIBBZXajO= z=dOW=P&T{fQhrLFCgtmoZ%`%%yOevA$4I&Lbt@@nx|H$X^rKQYO7sn@`!?~NE9vb& z2=ZrbJH4y?^crRJc$f0lsuU?NhsZii^Ia}wo17xgQ}1Bj33cVfp{JKi8FJ*Xl>Re2 z;b?pAbSY=t(ntG;-Hx)CuS+>IXM~J7@$oB^y{oyDO`7QYw%)n7DEl;aDfjK`CSz{9 zZIx1cjQtY(%iN+On4pJ z*|Z8ybNY|@;!-|%0ku4byj6T1Zs*t)F6EZ9pQK#-P39uMH*+bk9PTIO*-R%f=D0F0 z<AP`*yqoy0u*wPVgkG*> zrB6HI3N!Q;v$slbKgtR3AJtt+&z7ITXh+2}p~i9??Zl$4q{pNp>rr})ttQXgN&mW( z=i@~MN4+O_ocLFCs;GNta@y4~vTrMopA8jOO;#S=z8%UbYh1>>J!&^fj|<0T>N9ng zE9v8%6DlcMOrHu%yJO60E{~`8?hvRGXwv)d-^-(%zQ9#X@AtRsO8G225#^tATuGno zzlWjpam!Q<<&0!kvSO{B6G3hg=TOBODGJJ&>s?9Dn}Mq^rssu7Sz(>E-Ic8LZh@$A zH4`x_y)4=sW6u7^l`J3dCp?jqrb3oCx0YAgQ*83aV24D#b2P_m{EjGn6#>)lxe@?Pamuy#pmE~kn;f=QoNpop-jhm zdXZJ4W_?}6^ec3?4$5?_r?>ty5n}EWGC8rM$dT3UbiJP5bmFgYAhq`ArsImfN9lS! zJuFiX*tgotWWzGfzl$;*tKuyxO@h(FofcNb6PwgWNq!FSKV>3$Je6jJlR#+=`OOMM z^+4%*RXl8H{%0W7dq`OSVP#P=ZT0%`R6-4Zy#QHN?AwrUZ?>a!y|(T1Wc75|#63d# zJSz3Olxfc^XiQtHOBgfM(s(UOm#gB&_`b<2Vc*_{kjD7lRmELaJri87ZAY#h3g@g5 zW|^?goU&2O_B82ow9)IgmI1j$$mq3C9-?%;DsF$4U92v`+#gmnAKJw_mKrl1tKw&J z!(GEnFrn`^}j?M}~nT}QQ(jDMQtsT$c;?qR+OWn?Ntcuq@=mvWTDw?n=9^JSm zO4qC6e*J>r%+p>&>({5p6O=Aj#TD~{>lTnFL`?I%ycJNoUfVX0>ni5M>s2`_auZ7C z9e?D?j(F4K5bmLf7rjK~Lfu2ISH-=jUW02zi|IWn+jNx7JN`(_z-kTPY}ei^7#Osq zFv@hSr~e)VIkHimy#|l!a|LBO*3(z6yMi%oOXpWcnU3}J_Q#B{ouJ{Uv>i1CWjfZ= z^ItkCWj?oDDATc?-grtUDI4vQ_n~yGrw6pZFQsLon7ymVGac*c-K)NkvP-K*DATc? z9{(j7_N_teAzQ;ray!$po_;DP%xW}gJyu1|6VkDsKKg2Vl(rG2AK+-yv7TP|7}N(H zqb*ofNo$GBLO*0)>b9L)84dbLI4#)GUc_E5EXfubs;#&o@&9^Pfw9FUEK z3~zUHBTCon>0t-Ttw9;KtFQQtq#D!pdV1Bp74M;}x}$--gSlQ$uR8d_BPsjO5|u?Y zrpxtoC9Lj`-9gq7+Zk5tyu9Bs@AxBk6Z?S#$T}Twy4}~sf-#wQ{84%9Tbz_PK8p@7 zb+pVo{)i09Q@j_-pj>xF&%G*{cl;4)pV19wkFjrDW<1~IicSp94}ML(K4TCP_?pWjB`DAN~W{wHEaUn?SyC-bI0J*MLS zY=&5wgSarmcrvG(BW601tH8S3GQu7T6f&@Om;5-|bhJkJ&o6}1=I1vPWjb0Tem)EH zX)UI$ZsGPQ)6p8?+Z&FEL;Ca_j4~aq5$Bf90twF+XpJ~?@B+$ov_`}auL1H$A^mS|g%+dZDyMWf%1a^-M@dYs81fIZy_?o-qq$I$9&jKNx}1RyN2TrR&xR^UH29 zGd4UB+i8AYjOn^HB6U$?cK!lT)Tjkxa0{O_ydoYZrq!R6s}ug{-vw?=Fwush#^|5jq)fZ0 zp-V$bZF2pc zc!23E`smIkvgxRgPzupLdC;`)-{&zVQ`8_bEW->a92p}-%+L>SMBAWx!7@b+T^c$j z`~r_fQyGAUj&+O3+bC1i(52EWPa$Y<(03gzT`G~Q4$c6iCf<=tGX+bTc2R@K=#)oOK`s{C z8NK`p-X!`nMGYeDcXLbtSy@Q?mAjiUCR5ZPGV<`b+#q2w3W^%rztlp>6g7wps`v`Z z)kbwGAgENaH7J>)hA!O;Z%AjP58bmHQI1dV)T0wWg z_NzW9nW6@f!G&MdhM4N{49-?SY)OGDQs{&8@$OvaI2Os1$or1j9sM@3;u~et-Tc)T%WO%D(c|iUw zWO$?H@+rs^HHZw`_AA__H5s(=Smf-9AmMHe^P$is$1x^T)F9Hnr`b)E_HC!+y^kqsP=rDq6ATd7h2~zR% z_*cwBRmoIFh)f<7_#ebPAY^jC`AQJ+e+0=ZMj zsE_qU^PoCfrZS>SL&q*xJz%sy0W@^%?A`$-QyI~v(&E(mn-KGyh}q)U;c6(E%7`uv zu{Uo)ZA1IGMC{c%_fRsG5nU>w*D4EI#l|Ng`Nm;K?F_cVwLzkw8 zm&D5++y+8OQ^Rx3N}^21s|?1~eFo?*NMrnH&#fq#%7`9QiR)BjG$5D_z^e?}8$^qV zdOVr>29XiX7SsX>Sth*7;MXVrpk(SBL`FWI1+A;bWkqAuWq_W7@(g`$5F?_utqFB~#zfr7>{N zduR(bL0qVB>?$DIpVfWK)HiggB;6Yz9;?el%%ocjJy0_B4I&pjE88DpW)^b6gBPM2 zqsCCCXqV{Sj!}~o)$y6z*9K8?jCXUgLJTx37Q>7r%*7@NK*taIJhivWJ zgra1s6hvC@Ck{esz5P#7luVU^NZb6`@a%NNoYSBUN~TIdrMK5xDLoa@x~LvcrbA%%r`3#J&u;CQV|6hjcmH)rZgxy$U}E3zV6?E#1oxqYmGb$? zB+*3LqWZQ$X{*t49FCSrqN(g=g5*bwY3mr36D5;GQyF#(&L4*iRYa9S-M35N+yXW(ywDoB1rX#I(#Ni>mxeiNpHtfZa^=D%W5GD$R%_6OU>p|szf zCK7jbJDDV!$e`#&Ur`2CUn=kMOcG7yPu*n9pwhoIbHwD5Xd>+|E{UhTx}EkXyKA6i zl4v6R8VtreG|3T`6bX^Zf4&7p5 z3~u4eM;dTvyIkZqqy)}@$&pD+kPIpQ8TX=O5>iqF@T*W?EY;r-8}3)CfQ-o`q(mn7 z+&KVZ?iVt-Q^F*S$t0viCVq(*r=vRMNPPVy040-<5*hVAI0obn5i{ylWjSqS5>j0n zI(B$D2}TRa8YHA`w!FlcOhT$lrNyDQ@^R5(dk(1lYL@_$km}M9dvO#@b4*bBhj;6p z$|;j3CLz_O5}GBX8*FE|*v?S5Ei*7ClaNvwyJCryVbA2Fm`O-=X=-?K38VvVa7-Z~ z{il+vgjAQt_>mF60lEXy7(b-QIUFsMkm^#2YyBlVpnt@6#wDaoK*=PeL`F2K-4Z11 zB}ho)$}dLAB&0+}-U*)!GC|15%ahztG6^Y>L3Z)`Fl}KZ$aiW8N+u!IrF#M2)`KA- zy#yiM3zW``5Aps?LaIx}-+bd&IDOuW(fU^!A#bBhLaIw+;P&A#wK7!!XbfEU`4Ntm zNl106BwafouFs_+X3{xjAW9}7C33;tCuWG5Nyr5kn~7Sa`nX^cQX+%R)x^V1q|Zul zrK6%zM3qcJN@PI7*3z(t9tj!HC_&U*RmmizMA}nM9)g&~g|sij0%wyfWYeVbLpw3+tHB$!D^iL9QXMkwx~h|hZ};b@tJl*qvP z7sXUrd;HhBeGw&-kP;a@vql+^FkykCGU;J)luSZOq-{sa35;pmuyi&`CLtx#+%p== z1X>$}xyzo>D4B$m${!6Aq%2%*9!e%5r822191%y%gnZ(iDC#-HB&1Y^CHx_!ealZM znS_+eVJ+c#?TFd$^hlIULQ15q&0M(3w60cLvzEaqnS_)`>-CgZD6JQId_l=1q(s_g z?Cy-xHpyGOc}U$uOhQU!`Q7kLag4TPf>^;(C6ka+nW>#Fm2cfpG6^Y>wb$><4KYuN z^S1ViAkjvs#$*ywBI}f&Cid+aA?p+|%KH$LkP;d5^XbJXV`}=zdmodK5*Zuq4NoI2 zW^8c0OhcH2luB!fir7r@{ueocKu@0ofEGPxy@wg&y8QQB%Z zk_VN^Es3;d%phY1e9Kl7V=}oVkv9KvBV06)$s@#Mh z>UV;_idnt(pEQ4{Z^i}M9&MVpYSGoBPGXmi?b?MVbir5JmkMjsC9zw(gf3wToqogr z5r*@BtkJHY^qW{rRc{voYY)zaXWb|(bD%eU7G(8^AqPq^FT0g;FJx*b*7HHe?vYoF`=5%7ZB= znIuz}O6W=7(QtNE2dRV}Z!PW?YD^}{Br>dAGdL=a*8mi^O-0EhnYuKNFE(il9LnAh z(m1|whY={5R8g0Tf8iEz57)Yw{0q&7Q$!mrlgh|7cGj-iO{D(nb}~sO zk=4uB`5t6XA*+`eET*EWWRgrGqqd8}h_ShlQGYiT6G~MwNhXoOd4GdvhW1VO;9MI; zMO>9klBrAgg1P(s1=q?|2Ejd2K++q>4laMrVJE$1||{IZ*^sx06W~i44iu@B+kyX&U^F!8r2-N+wk# z()zlHnC3$#Fud6OdHYN#nN*R;puwgd5VMq!K?AK~RYe^wlPc=c)FpH!Ohw(`NvD{) z*dK~%zABkiQI|@T>9lwzCyJPn-`>dcmPr+ftbS<;oC(?e!cqXfoNfn6<>G#P1@;f0zy7iS;Hj^q688~(2VT>6#F=05yWKu<48izMb zfveih3L%Zd>+g|gA2W&7r4rEXBa|8pEyZX9x)u;mb9Fn(N1^_wYAc^eO2Eb^r$NG< z6Xb^P#yceUBqTBI<>tXN#TX)_z07`;{h2v4k%47?D}XYv)M$CeGjnDttFMCgIW1;j z*ciEom^m|%wy!NLC~cq3b#M5hXKcCNj8arg)UW1t0H0$;_FF z40=DJE6SjkheXLr>>+N>Oy#az4W!(9U35pO()D^wK;i4+p74{{Ljm6x$c2)bGn1J9 zt4?P?>A&Jd5K3mwOx9ykPd>+4!W|D(w?4yG?05W8T!SE;xNn*t1viQ3V)&NjULq+{ zPby~eNu*cKXCFYG6w)ixKXS^!Og@R+{CG0l3{B^R+MheCkpOJz7OvJP~5Fq5FM1jrEz?L?)Tww0qb2b`ONX59mZrPpSo213-q1@o2XWW{BvzQhLV|l z5?MPq7FMf_P^E#%r(X}e1k&-7!s^98tp*9VQkZ-e@{~6wX7Wj5Ms27!52QMAh+2_H zCKJr$lgQv~v!8&38wJ#RGh`KO2I_gsOg?q#UNG|qm;`3L0?@sn^0FsNX7Z^^C1C%v z%@EUF#0=PW%ZQShd=lAqWjjcXjmw2>yYNghN@ns&WMIfiIES?38EEl;f|8kh5*hrp zQz3}yBVq=>J@p+*X7Wj-^>M9+5c5AFtvAPZM#)S*i45xZ6{Z~8%lU)4N0vv)Og?pK z>Jrcf9u;m2A*88Gg~9nyGLuhTDv_UBiB+;@VziO3W_(1+Og@RMe#%#*Tk0OFeyChO zl+5Il$e^0ZFjB|EEp$9o7`3yHnS2r%(te;=8_6X`8}x+JIKK#fq|el`)e~wREAq zQZ%O^_EO`^Ld;_BcEDAK&MF`F#El zKH`^ir|jHwe>1abR0pIN%CPDCFhLc&Nzz9$85)Q`eoy_tg!)8jowlTpWYSjo)q0Y) zPbz8qR?{X1*oq%(LYp)s*y+OgbLeACh!rytidaSs%$| z`j_W4xn_$dC4D55)?#;jL3-mJvgX}9jcQ8zNG8Kp%&JW?Y*yczBqe<$dpQOk3@bYc z>SaLo+6sObOGWq{egq}{A6O-;znbB1eUys2>@~7Y?}XIeeHx~=?_VLMecOR;ySA^9 ziZ4+7kF0f5AGSb!G#Pf5X*~Yz)^pD;h(9sNTI2Qa!}L0R{3%S~aCb)W>UH?m4cy{q z|IS)7e-^7&%&XUl!q70}NEha4Vf8Dp4T>eG#qh6urD-MP>x#IRzKuf-`Lg-%_{XoI zqU5n9-sR_N9|ID`3)hAmYtE!&@-t{W z)tZiP-{E~WFq9Jo_XI2_{pfeT~iT zag-^Ojs{cB|Bzx2Sp5^o!6;++mL??&2_|i`dOPWO+NS$;qMDM01e1}C7f*!IhGEUf2Ia)U5YGh3LW0SN z$S+qwO-QYvql$Pd(m<4wg#?q1T^~c^sm_Lu9bbt~1Epjk;g;r2EjPmwHv1P)(!8np zn~!KaB?}3+RGi6P>j4GgXq^c?Pmq)>B$$kwxuq}dp|~lpN|2N+B$#xptv?l{Sb{iK z%vwZJvXEdh@<~fv-WA2sMm}65mUp;^Bnt^9ZC5{iPBm?pe*2heN){4KTF)lo%~9w9 zVZuI9W*AAy15aGWbQ+<_=n~rJQ}VzQm*YY@YVxbTFwLvic*z4#T(+veRg=xm|4LHw zz!R6dF2GeYb33=r5eX#jTgd}YOa>SBfwRx_8}6at{L7kBP00gKOj^ce%q3|VU8NdH z$pcSJ21k`JlMHsOpF>jez!Q^}%b&)Qw4DE`6-mhhPh9S~K3kJJ{6%t(dr0!Y6O#>c zecAxdzFWA58kozyq?(ckp1AB?VwNVmA8kZZ^1u_5$wQLxuA!)zJYd;yl9C6Wm`oW| zD?iDUzB5H~j@v1D;EBuLF<)x3`)KX+DS6<@EzLvzOnU)yHh!|rLmsTzMWdB0*WFUF zuDyuoZD-uK)-{PD2FB4!mg`J9I*)>W$kYp^qtl*uRCB~w(F5nhe=izij~_qp%=yn| z7-)0+FPu4=YF*7};~(z8YDP5<#eIuijS|&x(sio2@MKmsWAZ1gB^i_ZBdz97=B#A& z&BqwwiJH+je6soCDhIuw!eM^2mXlnmk;+4b|LzH!B&G*c{G2wPsNKx)_rCwqzx(F9$=gYMOw1 z$ol-~n@lNN4YD)A-r)@_G1Zp{?Cry~PnjeqV$#;N2wXK)Y3m&JIgM756LGoN|2s|2 z^Dj$Mk`r-hyBey=2>d{(Gm<1HVlwRf(Y+vZ;~ok-=a28ciuH;lCt@;mbb&%3MLH1r zrLvWzBqw6hHso7)_ED9#f!kM;l;lKAMpUZ5i)2K(fbk?HIT4e#roDb4X{&c)8A(Y_ z#H8J?BCL_rcbV-z%@>oDBz#AMi`WsoPR zGVHJ6;_fI)NlwJ>H+lpxEsH)J2vZb>8eT2Uwf@K){(rdN7}77MI9w!d;_yQ{l>LXK zBuHT~SLlliC?BH?z4P-(l9C{W$v|feE}BF%5g1%vTQo_66ec4bEAezJf;A(nb`n7o z?6UvxC9feB$HGV5bOL3_M+ehsw2~l&)lB^9CzyuKLMG0x_$x_Ckiw*6*jMYQrlZrM zWRj8~g~^a@N0)%yDMq_y#0HX*AjK_Bwzu=cAxNnM(qy|E+*gyvL5f={A<5me(S}5p z9YsYZoH#xJxBlO#xSOY`#`2j{@za3YM>{Cw^Db5v6jq%hfiVn%C_ zV^DS^2L^Ja8x#7O-rX=wP{fj zq%dh4TO*i`r)^NY)A+W^D4%c}IQligj=dC12aZ5P*f3yTt4Qo1m z^Y5UVk|2f2xKV>^&>o8GGh!Y|Nsz*%W5zPPQU_v9$MD12>>vqJn2bDi2p--s7e*QB zTA?-ek|2di+tHfP?5Z_wyN~3e(Mp08CawEQI^lT2q7)|ajmO)QlmsbU246p|$;$a_ zkdy=|T=x5-o+djr`kJI9NZ~T^rA3qWy!Zx=Xj>&g3YV*vj??7)>{@su2~wC0R$Mzk zLYM-d&nHc^?UV#5Oj`Qx?5oL6?S{~3B|!?4!PPH4A{ktvbyt#-AcaZGk=(dYQ%Ad_ z?-r7hAcf1d!=`F-;o*KHB|!?4^&h&r!`XKO_fY+FSC*5M1Sw25Xm$qzBULttou)-i zk|2f2~Pi9@)YHriK{W@FL*M6pTQj$1?Nn4X~Uy-yWWHg|oB8fw|9OHt1NUdq>UnZ+KgiHT?ux`kd z<%{j6nvyt#$*^Oi`+)oa_fXjWoLbN+i9?tS?K2LSvZAXAZFf~X^Mz-EBo1NH*5#ws zByFFc9ZjQ^#34*Z6shMz4r7X9e4nU1|$_vn<`wzt3bowD?PVpLl9KCM%` zx9*CCf0s<1dGKsz}AJVAf55!sQ!uW@JZn^jnIzTnovK*V|O`K&fj2F;x^YfF(UC@$Eg29`g z|8mVvoCPq97t-_5VFB=Ph!wY25QW(aI=(rNr^mjPpOy_XVhb5nYKUP07 zEQ(?LBRx-hh&&fz{b_E{vDa^SGROJ^_wtfD&g~ z(2=UMjE3>DdLHgqXgTma$iqJg6;Bgkbr#exUQW*~-xbAA+-BsKvHNRMb(YpJUO~@o zb313yakovG{e(D+Y#6Vk=aJ1Dzk$JrV)e-6DL)ctxeepqdLB_Tay?Xkhdd%|xoFRE z+gW(SxUZf&c29-eTm8Z}$F|2J`$5hU9LB5YxOr1+xH>A?F$y$qY8EL%C*&-~VccKG z6=(g~KY|n;h%>I*VA^(;9;oMz4K-ocsW(_0OW#%| z&Qcx5EqWgLcGu^?p(%j_cmHScj5KaLi*^|QOwVmMZom|&R=1sRQJt!@e24K+J-1$X z2_KovuY3CKixI?G$iukRgU8>!pmFDV(M{ptS<=IJga@BE8=~&a>LaecrRps1VchP) z+jVHC@y35?+s-l{#+@E~-w)3;o?iGkRcFBu<2Cd=xR?bR6BG2?@EA>=u`7wQ^oQ|i zJ-1BgH;uSuHf|IJCQIbpF7<4GR8fAMX^8+6|1Pt{pA z#CTmjPac^IPFl5ka?iXsh_ir*@f1Bz8G5QK@syqgSn}Qa>RHGJ&$T~0G0!0?5yC&C;uHnoW)0sx6<>NB56m6$9TQHN}Od# zjJMJA=-ab!(I~1%UyBPR&VnSy+v$1W(*3ny*B!#a2QGY=K%AvXjCb(hH;3fX_(ih_ z67W*VA|=Ky(zrFwN!3~O#P|R` z54+f)4RAPhU^#GRxYpCM{E6{FdLBAvKkPQOF$*1jyAM@oAr#|-_1rch7o-*{xAmRz z1#y-{F+Nn!BYYj$+f>HEN0hOPcRX;{u{etH;d*XsWrh1Inbqso(B^lRNijZB&+S!q zjRp=^95`(%|JaiT&w?q&ztnSQ?$sxVJKkQNOq``tjF0xVg#c4wDus?3mT82Nx!}uhXyT8iW<58YoKaYmxMUG7{8n0g47m83F&m&0;#R9aD z!HYJ)l}Fr|32EM4+%7}O9_3*pnI=ZUc<4L-YQP`ieh9tViS~nW0JV9Bo(IPEUjY0h z@<9KAkcwu$19qo3jy@m!YgT=ho=4UaKi&?`16UeV>?-awc#=oLOl=J zTN^5y;PVgZ+0yZkh#Ln`Kj^s0p8Y%=xNJ$FO}1-YwDy>Nl>*!IOLSZbY0#?y4L-!0 zs^u8Q0n{=*w;WlJ1GorbEURWE)8LH*s2_FQ{CwZN`LG;@`}Pn(Et}>=+&F+*spq48 zcERHmUMa{&f6}ruaTY-F=cL)`9#-ceep=3egs)1TByRcR31^%=t<@D)QpS$LE2cPO zQaX0i_L_0_v|i6+yIzD_l4^Vto0#h)joUbT+MwqNIZ8nGVumgWo(j6TE+=v0>}ivp zJDaq_YgTjQ&fv}3Qr0+oO4sw)_Yt@%=#M-$BmGaRZk#>2^gO)8`p3Y;L`vB19O|}wRcW9hF{i5TFGy0JOWB^uoe%f{&RX5I_4(WN^xO<7T>*6{c zJx$y=dpe@$jzy#3W3DD&jsaV>b+~c%^qZbXW`ynmUI+&tx%!7ORNXjxI;Q8g(|)h0 zy3JKvi))RuCycU(D(q@wJ=E+t9QV6e-MYG*wk9#oo=$o2i0Y{t|Ky9xG5K;- z^1V&ttqy4ujB)mK&V$!K_+I0m<+@GPjkBi<9{i`%Q#C$gUN_>#+0!LG56+1f8ubMT z%Y*gvi5q86zw5bW$S=D!-s*T;;>Ow2RXq<5xd+!ewR&)=rP`9lID5LL=av(>cM`X3 z+L(u`8)r{9Jou*JxR8b=9bD^XUE4z3ID5LK=k;H7ggtMDhi>4Jq+`V=5jW1B?&x`g z_KjiJtGq#Es7kCBhg^FX1C2#t*mLF~CkJWkaF#tu8Vl=+6~DkS>xetuI%$D+ zku{E;p6CiIPIDc|3NwFpVMZ*iCx#lwPS5l_s-6kwX6&bwD9eZ14L#%7>4l!hn7+(S zyw>F!v9#BWW2aYo9(|< z2gT;V(?)E2Q1y&p;)bzPx|hoFKYA+GSNUD!=v=VdT#4^u{UvBz3{ul4a1}K zqIw=tV&N0w;qPW^iKk(BlwM5FZ3+3YIT3B4Ens0is%{t_rGKpF_KJIafWsmZPN9Nx z?h!W(kJ3x(x#QIjXNfy5m)0&hhT&0qX+3wg8Vpz2%%{_xQ7x&uVR)4Oi3bm>-bmvm z+FLWZad?#esRz$~HxF^g&Al1K4a1}K@_KG<@+ER#+;!H-q)&+(hDYfY^*rqU3vc3K zr{>Kh&YpR4FWu8Ct6U9_vO`5!2W2Y*zi0e^e(*{B#2?|PABX_!Phb`=hx znvSji=-KF(f5X7e8-%FNT$~`tyRqdgb;d$)Yafno7#vc#PIh z<94R(NS{NJrCbsjyYwvf62no(F1m@2JBaOM0hdH3I2;Q=LL&puRfSL2KA$Yxl1S&& z&r5=AhtfIWbzQ2-Vl9b`t2lBN$e}3X%3pg(k|kOa8D96$Y>)*|h9}1Okz`?(L|S&d zgr?1eS24x1wFJ)jVh^z#OCoJQ&)rSO)3*0%BuN%wNo3^cr!Z%jAq;@4$;bp;ON*K; zy^_d?ZYLnX$o#Rwsef)E$$~41beui431k(l={OViElHMH8B6n~VTIt6ogF3?h^vOQ z!y9^Hv@EVNmP+I@aZ5-|>3*1wv$~KhsglUJ{mrnQ5PK+Yw=Z__Lb8xbA{`k;^MZsW z1Z?M}H&;ord`co~ST14X{4vTJ0X;U5WYLsF+Do0bQcZjD?ReWmjFzQR5*c3f7<3Nm z_e_TuDn64W3#25{I#_`vqAIQZPd6aRvM8B6IOVA(_b)t4lEqLmIkli!lM_xHAjuLa znS7cnMw5S6#OG(k9%A8>LG#UxqeB$2@b zzGy)*xX-AaBw5-dlLhnj)nq=O<|J9rB$1XUQ=gNxJUokOzSu)7W0J@QVFd@k*>?~3 zPy@?jOrwQl@sdm~Z1}Y%=h~Z*WXY05Ca-zoB$>RT7cR6!O%^IiWXh^bu_RNL&(V4l zmM6*N;#>7KIe#xMF+@!kB^gWe&}=8l!JLhsZ1Yfa3$3OkMPhTdb^pCFa8$bEzP0X4 z?MyXUiey||zhVJDIHAu~ULqY{VGJ~;b8+D;ZENu+Ju&udBAzAiMF zB+HOw^5iaWO&f+P!#Braz^Ss3NuSw%L z#4VMO)R%adSlvVIvj0X>5{EEpd4WG8Pks5&@?gkRl9D*YEzQsWYB~~@cvE4t=I58c z!#fsY`e%>-7@xQ1(REg=hm*Y_%F(rwE|HYPA?}(=SeJv}!)Pz!z71=4*hW$khcKD4 zranyI>U)YQOY)8&DTzavjGeXw7W-%c~|h^D;+!=7P4Yl*A!S1_#^rfP~K|#32;t(b+E7n7dm-&R~oCViO zO5zYEgWLUDhh%Vrm)l87;t(b+Z`<7=X?d70CrL>h!sYc(A?VB;?Wso!Nl6^SWP{3I z#lqPKbs-KZG3*IRNgTrE#5Vq#{OVPGl9D)t$>iA=;G9)!CQlrqUE?Kj2$Lz_mo7mv zWkR|2R8ta%a5))o)~YpAzB)0Rq$Cb;OY@L7O9Ele#!t3+$n(w>NJ`=mw^Xb?aR`$! z)!*DC8B(MsYFRx_y09xKV9rfaqM zSrUgZ8J@f7HIQ(%hTgd2I}4qTy{k~oCPus`ds00~_NbjG)bG$SdA zLzoQxq0KaqFt@9cVRNoR@Qx>8L^9Kz+4 zkp(n4d`u8YNgTpum#5`5+4#)xD0vRN0Z*`EF>jy2$RVJ z;PqA(hj5v<>OPWT@9PXDDTzb=?_U5^ve6~zqO4-cXo?OBJav*d+wj~9U*`)a09bw|2OL|a&$#V?F| zya*ife(x8+;hcm6_w;~R`ygi-4CDG2flYQtLrA5w!JQ)rVgi@+rNJA%mbJy>Mc|NL z>8EJ$A>D0niL*3@Rrh!iI5^M!rocs*6Rb2AmsK1*i)0wrzX)u8{&t1~)|%hJ;LXpU z-4mG?a+b?5u745OJi6TyST=e!LO#0jmnk%O7S1s4`66)N($LkKE&*401y*MX z4dWg!0;l}k1DBq#`{1dS^b^&oI*Vx-_jnOFc7+`tIWWWj;L(+NT|}>m)mc`-7xO)B5-(v0Ju<@^CJ(BJ0X%;+;*1VFz)dpuw~C6c!tKb6}e^O*%MTq zg*c3Rya;SNQeie7ciYY?@x)n@!??$bz>(uW*#U!(!0M4hH!ma3;vB|3UIdQldA2Wb zGxCTIwYL#xnGWL~F9JKxw}Pvz`u%l|Q$LCO=(y`xu)}!fi@*?&4OMV&n>P)g50}d9 zu>0Vjzc`#g)mgg3_!Rvt6S=Z9Oc82h5;^ba1L7>=Vf;Hik2^RPx;}N+#ckjA8F7~L zFg{(+9XG9Z;32r{9Ow7uBhJDe#%Jnz4Qs+u;3Czp;k&&iahCWn{=J^t%U*?$Q>|_< zvZ4)f7W*(hN6*7cG{fusUpV;iyaRtF&axlI=jpk1xC7@n!L7Z!e?XiCK#VW&;76X~ z{I2qyZ^jU3DG=j}Jot5i!0-&n+)LYERtqAWA#uSy06IIz4Y-D_x8dNVT zx_UftEG=UECl9`4(XSexl~+V5$XR5>_(nZX{^=3SFlzPWrPJ!swzJ%b@y&XkvcAMu z#8Vc}5CI2PXWV)iI<8m`t%vE+)D8E%bjPKNQr%wWOR_0d7ou9rEK`2&dffD1p^*n0m zP?(_1*jXu2eVd7l8aYdq7~iYsF>#}E5Rb8~T|9s|UZ25B+EITVcUWW;;OCv?RgB-( zb7xd@T#N|r3?6ie2G2q(#_xLY9~b1(_?#*^h_mF1@%tWpbfJbC?>l6CCg<@L<9~SY zq>dFeUc(RHN5tl27|XC2|4YxUBl_b~s2c7%>)`FLh#S7zwdHRQUOcsy#tT-fOPr-y ztomb>|F0)}9<{0rPxx$s(RlT`bVg)(cqG{qKJ4%FcrQ3)-H{1!`MHBz6Y||Wugu{{ zQYer2g2Sra?+5%D@~}deDiJqMp*-FT4s2E7B=EDy1M7{bNZdGu@^~*eviH=ourG@t zk8Jw*331~T%HzG@kXk3P(L0Si#4`9gapM%qQNv-af-M%Do!xYNp@m_Gq-^=2G!@XA+{JDbKlG-qZa%H|3tSu`|cK=_lLJE}v z+GPJYLyOQ1Qz%#F%Y7PGLb~>gqQQr>^r5qOs9_4_@_3`z@}^Ht;3A2!T(e!HZ8uDz zT>3YP&Ceg>vl7{-z~If#&$bF6ZkR&3^lucKN7ugwlb%-t=7ihc<`c+M=6x;RcEAs;VG8B)c%wM>`-fq`MUWFa zvb?r3Gfbge9&Z#U1ce3yPsQp9rBk-jwi~8UE{`{gonyAbc4t0B-s6FG&KsssE{`{g z((lI!2c&UVM z%_swxR&`Zsm_oTc-YB+h^@l61dfaV`E^FDRVG8B)c%wLSz~6^p@K&rI+2$~Q@uyf5 z8>Ub$k2i`V+7x^b9JLZrJK90qFokk?yix2pal#w84|2!8VTXwurckcTH;T2-yLr>V z(@;G-+`)kqs$Gj9;)W@d%SX&w>=sVs_vheZmH7iWo6LYa((1Mwrcf?FJ&)T`7A_U) zu8Uigt}UqzQz%zeJ$IZb{w?revF%&hXxXP>3grsW^BR>f2Qq(zyhhG8S`K8GLb@QbG3M}GEAXdVIF);bQO(v&ZFIFF-)Oc;U4@>V^|MoZu?>9N*cUj z3gxotd2o0!xYMG(ArV~aqId)g2XB}{xg2_KS%=?RsB+79M^;mH!xYLDspr962E$pG zSv_I8mW3FmP_8Hso~@XTxaHQ0byVFjg>u!@bIYA!qcnbalZ&`v3gwE?^9EIm6@ZiW zHlB42iWJbg3&Rx373aaf%YX%aCLfa5kE$D{P_B4APhR*ZtjJZK{IyBDTo|TMu0%ag zSr9#+c*>XsIjOo~3gxQf!KV-Jq4B{l-VirTpe_Tl1Fokk8((|Yu#})y{ z&Ps`DF?9uT!xYNZM9*VFH!LO|^T|@}T4$I-xti*E^gqinJ`~lXAB^lo)eTc9S93iN z+|e6i6!oY31^$>S9#g^3yI~6DYN_Wz+21zN_`Q%qPG=A*uUgCx+l&ig-2elt~j(AY=3M+BL6w1|6<@g^p)+TwyK42eqrm#GP zP@v1#+BL&4OLBG555e|TKWI->ZtJ!GA`QVXOLBGd;0JtXYJBZ1Z3h@;Nv<>xUS~rN zjn~+^nW`IRNv@uH9`^7F=4g3v+rxfWUK2OWl3cy@JalQ=8Q`M53jNl55OKpS$<Vqh6E#@~Wh_lSn%3;4 zC^>rrH1%ls7#mC>S%4&wDGSHtf|@W@E2fmW7coE;lBGAsQi)nsusEDDkR8JWzapYB zNfz8lWOS8A5IU$b+I#8~k}R_^mgY(M&cX7{ODrBIzneI!P9e7|Wa==h*uhoVQm1=KR>)^e#!3ix^8K;FX?~&~xNfu&A zr1OW}OF@b&rE}pCXzSFPEWa?8*?NZ*0_C*~N@nXF)Bq!DFe-@-ywF^_4J@-a!a)-je!_}SsJ z;o=3$d$`1(UWs>*a69=lA(4(+Wgzr6L!JalR!QC zF-Y-Q3Hx$e8YZQwu3+%9u=<bkThj(sYER=^bB@3Tw-8CU2tj$ z)s!@4Oh#8I3-wePU2+pX_9I3sY0BKvJSj)r9dPOX0!o@EzPlexQqq*UrBd&^zLNn# zdj(C|xFfjU6E!7G8Iy4XH$y!$Osde7^=kH#q@*chGO=hP+`2J$Lz$TOUQ3dari{rN za~|V#Atvz}->tbqQqq*UWzOR7YTMzw{T)i?EdIRvS0p7(nOiCm0Y&j<3w&syDXX*t zABz!tNYa!s*>&kKUy!R&cK!aNk4Q?IGA5(GJq=Bu8Ac4}&{qv+l9V)MOxnA=$H^@_ zN_*RH@!>5oT1ivJq;vitY(A@^bk592lQ@60nO`K_GFxx|JvHI%gO(1OvdS^;v+uCs z#n3I4_|l8MhnnrMX8cFN6KS-Pri{si`islc9!iKEiFXskc1oHuCY@XEUIr;Hz|M8^ zv?)r`lrb4SZ8esYJf74Q%P$f+nlg`rDT5C0n4*r`)D{0Ey(mbYB4LIYyAkKoO z>~sJ9BqdFm_?x$i-JTzJsw48q8<1j!=m?*o^{$fs%3WBoHy-tbq&+448WooGS6nXp zWQiu{CSiaj4vnP0;?mbYhbGG(=s;4^UomOjo2?c|vCY=>PTfgL`YR^GhF6AlrFz%2)N$eTHC(8Q`-0L+qDmjgMGjEzXp#(eCWPTL8hSM3z3&;FqW)( zc!n=YQ;PW8^WncYZlNdbpT8ZRUnqzF#iU(z@{?pw3`wN2BxnsBDA5Qj^LFMYX{wl2 z&G=%^H-W5%HRB78!6$XZc1n6s)_f~IVQpbMN263KeS3tYqz83Nb6BpJpP(khGcaA5 zBkGWpbaig2c!xZQgqnS^q_?GwCO<5g)pjatj>A%34IY#gbo4vT>MN-n6F`2lk#UqeOC=-`vtS2eyS(sE( z%9Mre9D!0v$oPk3^_p286?@^oK+X~}bS$ob#8F}Q{$-yP=S(<%GNpA3F35#sxBX?( zQt~{=nWAR34KPGivOE4V8N8^!Rx>aN`$18Y-Rzgin%@oAYTAZYBgyXb8%wh#@lt&_ zDg$7&W=rktHAqT2EOu19Uk%6W^-J7N@8?Z4xp-riM`ex|p7G;RDzoxzpqit4WGT1q zcn1S@f>V_AW+h1u+nJS&u;y+FHK!wt_-r|@OL5=IW(c;Oj=2>(LQR;;p`o00E-%%T zG?7f&e`>gsqBYaM8agQ}Q(=DVf}ujL)+Tl=^iJ@#d-8rCTz&F{xCT592g_ zg`-tUz0IJSlF7|2&7tpBU4WYKafdeV$-99hC6k+5D&Eze!0Bib6OFfbS$qOeoEnnJ zjY(zcYFs6h5Tl(reFRC#vqnC6gPIO3VY;ucqNxQ?dONO;R$sacN0~i*M#cQ}Os4 zl9I`d%g??!ugOYl8j+MtZe04k90hWQ7;Tv^wR1=^xpC<~qo`K1O!G9VDVf~33_Y|@ zt66y$eyNc-6C{(HTbeDgAM}EwB0go7$XQw=D4E>cQt^J$Aunv>3*1ic`x^#RP08fO zq%!?s0~qZ%v4_U3u1iufxpBGCavVl0nlfeS(;FlulN*K|+d7JQPYpY!|Bf?x0v2{m z_^SwU$vnjh+gFu?HGwMaKfG*8QZi35>Bu(+u7H^}v%T^oDVe93v=1$OgQUG*Zp`?^ zL6yu?Y|)q#_U>5N#tc|A4u{`|!vEA?`Pbp^aJ><~G8c`$v}kPCx=-sit$Vlk@7=R& zYM=K0^^z0dx8%Oy7PSTCk6|~3i<_O z$i}JRFu!5DiM4b1G{IdawAZ3S7O%;9lvy z#DY(fs5On}R3=w$>v9kdQU{bP(?|G|l+3A2#s{^6##^0@;{$@jNJ{2ZCSyl6*bQ`Jsk5Dr?l2dQ3bb7C@QdR> zI!Vdx4tGs+RIe8WV6;y`nxoQ2EFmeG$K6tCIN0kGDAyQA+i+0S9Zed?#!PxAl+O*@ ziB~nnyS8;NNl6F5WZP<$Zo@!ppls{kQhZ!--%2_FCMyqZ40E`;Zz~TjC%P+?g{Nh) zZI3BJYPe}*hu4zs`xMC`NOg;l>PXGD(dD>1%2jG@U+PsC3!Dh2! z&9v{&%^)ecQNpBGlWxVJcM!{4uSQSAbsx7=(mOC2{c$fRo&;Dky6BmosivfNU~*8$ z;@9BpD}-`TyQ7atX8Amb(jqJ&7PeEI*)0NpuSimI1A)~{Ja};qjJ7V;OgvDmAW2ET z!emmZA-{l}gfgjk`&lFf3EuY#og%rmK~~poP|U0u*i5X0@pwv_9475ke#;2-3T0Q?4W(x9+ET;Ojap$87_vVCMc`qY4Z)$lr#=*neBYU4A{5X zVX}e7A!yQOl9I;3EzMC~=6(yKeFD-P)ozN&|M93u8V9#j8V;!ZHI!?FqixvhMJm`s!B#(_z%hQ;CR%i%=nl^mxvWs=5$$>@TScVM8RDT~h4L~F_uGKG`aD!*(4>6gIk(y-@ZEzQd|>kWBk2HN*V{Z zRGQq~0iPB1{#=tAqsNexG!9JqeFuPxu=zoodZ-GqRDC^Z+dACr&GQ59lN#f-lz9}N;tNw_kqPuj%Yfu z1RSGTSS}*j|DxFa1_?)bkA&msTv%gf9|X=T~cmh{gN zQ<|itQDJ>n@BKw!XJvzF5gL^prSQ0_HH{k;CRbh_aSo17D$13o2jJ8%q@+<{GQLhC zUI;BHdPvMuo{LVPE!!JtUH?DuGLXASr27+%ntw zW^*7j%f1{+W;@?#PacwzM#U}7QIlUp!)Tv_G)IlUQH!LcQE^M9;kd`!q1@-Voejr~ zI<3j96OI<7_FpHaZ7Xh`L7GZ$0QV>IsHskoMeQQG%9YX zr0uyl6>3Ic&9v>!hE=euwM&XTZAtj9plZp50!>8Ju zf;AJbFUD1ykdj7)$)t#zc|cA*<8sBroFf!ZL&P3EL?4J(tBG%8HSmzr0W zWc){M3z3vGDoiGnC}<*?Q21C+l9EP+$@trC;d-EsHvVcnHoIaENg5TmG~0fBv=^kf zCfJrn?j|W|RNPYWDYGdKcIzA5w>~8uS4m3R4JK2Yb%e9Pv>9b;qt9?TAVw=`H< zjcQ1rZ12~rJ|HP+H<*lQzYWfI)Av|2qV>c{nexBn6uU$4s+o+^vAv#l_DOmaR?~iI zZY7fTbEiJ0(Moz0CLJyI!BQ);W}~*4(TY7J=~0-puei6Hqg~dCIvY%IF#WIVf^o0d zaLE&KOs@P*JPq9m<;p!<@gY_rCDT8X@zG15A5)*Dix0bBlB8t%XEOGi#jrXxkHVU< zqeo#NE^11qeMY&5WNJ^%Ex6F3Fewh#9s4N4R?Ra_%Q)!PXBe0Hi=87f45Z9(mNc6n&DV8ZP_7Q*NV|frhg{A+8j%R z>Awa_uV$CD)=Dz{Ga2o>4klBzwTdp=xfIouO#e&{>J|JD&OT^$VEXS;8ds-cw36wc z$rkbV?!tD$xeNQ&`H^-GNv3}$6R*6+MWVO>Cmug^nQBU=eHNiI1K9Zzl`gcpk=i~gZVDJ2cd&s9?WDH5k z^v`5!0|l-orcEeQlZt9>t7Q6T();DerS!@6{(E#QswtWNF>TmBus5z)^J6i`mVN24 zv312iuUW56E|Qs?6}F$QR*Iy3-}8P{STd6{>8M-&3Q0#)c6^FooDPzioJso+Mev}C z(b}gsJVjD6lmFk-hEo44ZGfu(<3Wn;Tikm$V!SVOSEkvxcO!;|{wDs!AZGA*II%+c zS=r#q0Lw(ht3v6{uc71)Sk?ZQm?1vpCX^KOuYb*AXGu!>4Av%1&OP=jT*oTnU?*oQ znnF_2XE3S!o_8V~7As2S)H)YQNuR-F{Dg0Q28nZo5=p-)Ik?uRgGu|0;cK>Z2S7VBJX-%4g~CaXWa z-3a71tXciff_MW{Y^P-AX3}fougzfog&77;-0`9KfPs*b`IpJ)9;e|(zxoa1(Ver^ zASs!DnM|rQ?<7*|*#ql9E}J%fx~1Zi{2D%G%6r_mK1tOgNJ?f=CKcDL z4`8%#*2AyOL-&!C%%WUA=np}R+F2`iZDmPH?l3SJF)1bxYQh6naEbrsJ;p}3ow6B% zNyo#eaZs~9O2>o0R#Q#M)XQbDLL)Ud4PYM2=l9CmSio+q!&Ldgjuoz z%1M7s`-7xpmSj>nJO|g*7>6p#-VNgH6g7?CPh&E^Z$XH7)GzUm@7@vbxrxzAW=SUD zt09ZSc8csku}$7WQZh@rr8%t1!EmTK2*zp-tJDO88c|a+OS+}vJ^nCU7uDAzyhj(u zE?7v(EXkyD@EOjMrNtiFC*CL#QZh?&d21f5XtMPa@_K&EE7Z|uxf-_wuUQGB-GkB+ zSP1X)2`QN+SVB$G)+3&E8}{ro0<*z`M+l39{TW$;V*Oge5qUIaDk;b0xtpAMs%l39|=56hg_WUl@_NJ?f&E+;=dsmXB< zpOBQyl1$ov`)3|W`=QHt+fh>{(3;oi|uh4D%6@yfj$k?|BgSB@=#i@5sj@5;7XVzLs|-4i6^_4Pb{P+trOg0Xsh$7W$voz0SrH`H^b zR&*?EJH#;XEA)6x;%us9ys?g(!>Yf#0@d-(fH|yG6{A%pZ z82oPJ7QYupD^14R=y~-!r``g0A+LV=dvS5Vv`#yjbGQpsa8fs5-?QqF+I#M!*ccxOFVMy>e^ zwp}!$N|(}Ch_lI+@va`c>w0L5GiRPAGlPh;8J6+x9=vD4WQ{j1o=lugvyAuf;PnD< zMLG-jyb=?xHS%n(WxSUMZ<8@xtDYF39d|b2GTz67_pN5us<#qv5sRx0n{^rQr{iWz z-&*i#Q$MhlwiWP3m41QB_y8SOd}@#04qFW;F3i7SMP?9Z^DpCr^jz7vA66%(Z;&fL zZWI$gp0sQdW_+**zy0GEFnGAy!mkVO9 z1km5XW>)rhjMNXoQE>QHjc2QIi#VHJ8UNCQ&se=eQ5ej@HAar?fH zy@|7lmhrJFSKkKD4%-Vcf!PVaXTWSb34R|6|5JY%K73Y<;$Y*q?4nb9wQt+!-*YZ+ zZP-YLt0TeTI^2gM;`aM3a5g~e03pH;d#j2+`A<3VmeP=dW_t|ItHKYr3*g^-2xr`) z;;+C3aAt9>m{)}jX>iHO26+dVrB@HhiY1C?-x}jzsRq~3CdUJE}&#?(& z{R?4$!H*%+Dk>={HBDez2$K*pT2?Vdt*Ak-3Tyv_Ba`hZK(7ib(nLRU>ff733x52! z*Kw>THLfJxj=KVNOJm)n8#Ba;TktF&ob$hQVFv6v=qI2NI(rVkOJ)a3Nj|`G5>pHF zb*Kr`Dfq@K@lK8^-A&BDhU^}#@9F_?B{hk?Xf;=5C96E@3-{Mdt?=)zawqnkCa+~B{r+A(7^GNn``x*NkEx37G_TG|I-=Ir zfjuPpG>2`1xOSa_eJlB{NVab~fBLi}$o4qe&Yvi^sV4g&bdo)kP(I-^kPegyr59+U zWxb(9I@(`)1+oB2N1Hujt&XE*KYC6gy@PtD!XARA5?Z>dlkv?Iv4>bgDUoq`o5T5| z{xt2l93{1Li2cAhi8L2ZT?z6O)-)IRT05SSCn4CrH5E&J1ZF=8bE%S%}Hm#CZ%zAh{+0TTN>|38aiw45J`4VgTe6UI6?&_+8Z^w^6f)UpQzb!R;ll<@={NqsNe_Rs+9L@d)*%WIASjUJ}K8`m3FIh>S z;N)B&TcPx+8ncsX7Fd~;^uHDR5advl{=Wy#Cs|Z|gZzJt)-pE=uYHG6TD}hucP(+W zk`#^|&%m+EE`i*KGH{g79ID9{50ZWByW>w-GnpEr^xa%WOmtXN@=c|zX7w5P4uokf z%IZ^MYf(+f^C?XFHz*JH9!*_Q`X`*qPLi!vB%_V|r*aNBhs522$Y)lO$Kq%u-&D$K z_V{T2Dv$@UW{*O{wRuJIO{Gk>f7o{o$Tle3-zzJ6T&&4{j-F(+(Jz`|QUqx(ye|C6 zvVgXeEvh84=G6PsL5g{$=A;`JNJ_rrl#SMucQ%A5=HXb=lbz+K)s#HJ!)mTAan24|$uyK}i)Wus z(yvTbHIvp4gc(rnz>-$g(7GD7;*{*$T_2x-YT55&&0QbeKTb9M%Vkxw%7+u-Y&SuM z2Yo`emL*8CWvZlRK%MkzAiqZ$Phb7SizJ3Yf^5XGF$*3**htg<){ob9TtGVf9~ zl58n0lkM`yX|kCYKC>ojvQ@N9ZrK8#lgyeMIvym+7SIyu_dWsoe^vUuu7*z%ikfWg zERp7rP`F~6VGRKP*J9T`*{O@NIx6N$?|#x`h3w*)7CfF^{>oBTU!7Nz{=3CJR+QcC zS;|s%6E#`f{sV1ikMFXSA03&j$-)nAknHs=3u(4on%D}Y=xQwIr!6Nb$@JOTXRDhE zXS)fWy@2mZN=y~2IowXRs+SxU-_vu-0J@FR_gFFQc#asG#b_0ut*0T!Fy%z)lfD|# zV)aa5IfkUBsdWDyAmM5a|F^_q?d)R_hD7@1d`+WU8wz#ud{JC8ttmqSxNtI z4o;x$^dGZDn|ayK=#y+`Ksz6}_NjX)pv50SRFnO9KAH3$i0iVi@TdfoTRMv*`^kI~ z8S${xIFL(FMm+duZ>HoyhD16OPry~v+zh3&_KuNMlO;(K=@=4|LDDg(a&eL@M3P9S z-Fb_o^Rqi`NV5D$A{`-9u8?$ClE;!{(UC+}KGf(P?4jzoot5{!P9S+{Ojc)tDc8pH zP;)#=Q;zG}>>&AqW_C?56`L_ylSS4yq?(d1Xy&riGn*z$lqy70@&(OYmNhiDuY?pNoIaaU7rZ*!cxq;Y>L+s895ilw!Y40wdOX zDf#w1{?9|G=MlK|SXcly<`Go)s?f1zO{@-=N}eaucHqDL8~=Q`d+9K^9G{io-~7F-mT1a3^4e0<@eu0}hik`t?F(l~Hq(zkDE zSj?+SWZ$kIrD)PPaAVT1+ohKv#nREQJB%VJ3EY?rDCG-HmwHVIC{PXW zW{Q0)3EY_Ue)RqsNU?{!?>^W;QWCf^>A%!A2PA}1aMhggO1ln80yict1A`#6HNlaA zz^&Us?TnWMZcGNo)*T6QH_AZAt70@-N#Mq$@5s&&M41|(^zD@aca79NBnjM@tlniQ z+ygR!hQO^=kBe{@{jwHlmu=}M(=F&8^}bI(d)A}A}I;n zn5@~g7+f*UVqU4)p+$F+lE95g<&Wu|Kn}s0%C&;n)Qatt1a3_FPB>i=j*4hKgpiqR%@ ziqx(qlE970osa#ZpynN{x$|B&?P?+k+?ez`b`sCqSd@NyIu@bPN&+_~1Nfk%MF^myBQaN;_QvWPs)W<2{ z&;E6@o=M-$**}6myovvX?}{!BNlKzRCVi%qo(MIwqxAV^C6)hM9`*m5tgtB#G*{{5lf4Vw0FZeMi*9msG@PB~cxde#y_? zfQ-PJeo;NXCMk*PnDosxV;D%$N%@)vttKgn>X`ITOZ%F()4%Nvtv8WGbxa1-=nq}7 zx`zTjd#N2yNmR$Bc`pWTV&D2dvka!uN}@U@BYu1T8ss9}LlJwv&d8LqsE$czl{YEy zF=>L*`Dt5i6)B18m~=EQT#lq8p-wuS$XQ^X(T049h1tHVuPUOSd_}y^gbjdQ5~0meo|JGcb2s! zDT(U1d@^RgCjZ=cjie;1=pBPU{8HI z@83b%zfz9@BG7VYA4vzh!`j^ZF_uZ%ys$Bj6@xg#huL>}JfP^m^7eRg?>n#@9Nf$XyX9Zn;7#smi}7#t z+^^UB!obCiD8I&y@j-qygmmXyj8D+>DjNp|0B?qaud+Z%(zrY1VtkUG`)!@m5O^=- ze#;9viL<1O@hN)l$XzlWc3pMk_GeX>XxtrlG5(#Nr@raw04{C;r`~@oI&X2@?}(#= zGdttc^*sJwb6moOWA*q`;>~@r>sau`_)I-_L~emqt~oDqN5IXiG~-@Ttgf6(6iW#_a4Z&Me6fz3!@fHS z=erp%EatF*YsIw*Im^ZvU#jDZ_0z`~kmbhW*8CHf)8GwXq1d@x&zt5s1?y<_7TV`e z-{wky}!)bZZFl#Resk^2{3D3*!HS-8gdZat4Y^mP!Nb#;+PuFbEVv@Bs`e6OCT zJ#J73I5bWWvt?{ALEFw^HpchsdHbyo{D8MW-hSZ~?OMmOHpYL}^XPrut^-d%9=&4k zL8{IIH^vX@dCl%0&jK#yxSDOoG$qbbH^vX^x$@VlDBy#!x^ijC-^5w;#`v##?)%-f z1#sZRD!_MOR9)gMe`EZpo~Kyju0r)`SUjc7coT6J!ZCha&)2-leH&7-$;j8-=^}bo zJZ)GK$M{J-Pa0was4gdxTE99=)ma?J_-Q@g`E)I;+Oxw5Ad|b9T9!D=>DMc0kn&eA!?FY0;T5|>~RZx+?_=4z&$ zv@D`y{IZ@0G@g4>t6nQ#2o0X)bc|oo^Qs}aaPZRkE{GTotFr))@w<9%E`F^G9JmX3+|4=n-KFX*#bf-w2lonu*;VDHCx8Awtlf8b zR7KlA@I6Zc(xeFj(p$16yCj5?K-d5Y5E2pyz4zWbi1ZH9r3libNi%?gijqx;5Rj^X zARr)!^xlj3yYD%f$?fdS>+{Et>+XOb{zZzNnL@LWjQBF9pNuzZvVDFoN@S-a=62;>&>R- zxZg=!NBAq5+diq(8>(kPZkzVIxW|#qj_@}!xBPtrr~$nXe{Otxnm3*VcZ9!{x&6+g zWxyw*wx52AFFUZqhNO3y+-vdSvs!Eh&Ti25ku_U#P9i+QtulAC$dwN`n+iFqAMeFE z$?*vHlezufL>QEs<2u`$7A&g5o+n`*;aO$w8gyVR-*#7rGHrQvlIRisj?CRr>4LjM z>WCAT#CnA1@ZtWEka=Z%VCJ^L@!Kxs-+1zb zbCUNF{+`S|g~yc@-2e3)&PnJ;cp;ewd~WFoT^EGg9x!*YIAuukM|feGTP_!90M(}< zx16-x=haF4M|e>mem`4J!LQzG!#T+S2`}cupZ0JYdL>MuP`*={97D zNDF;e{$aBwXB3AMntuNx(N!HLa^}di@slRg;s2E_AM{z28F z`qJ?LTOqeMc?G*AgR2rpZ?McA6Murt%YfVuhShZ&;le|+x+-z>R+70h-45}AxopSz z@!c_ks}e_VWtlsU4#kDqgIM*Y(>rsnOdP#cW$r2Z7D6lY_i1Wgn}G{>SmVhXt>nlJ zlX>sl{c#@L5v%vQvIb}2jFVM%gjbh&?5k&A0uM(Xn^ycN=gP#<8zFN~{6Dzgb0YVY zS&1h-tFBBOy&jnd=6i`5Kos(TpGRZn$G9?a^wyGj{hQYzys;KQUVqysIFV&snK*ju z$lQ2QWHfL*?=8m3l9>H4u1p-g(LUVrbvfYdHf#B%cplD`iKDlk%q>qVV{En@t6P35 zb(nKy;^>W$xHWA3g+$;m%z(tPcX`ZuS>u(7qc>LKmT=df7#U{A;^CI*7Qr)@>PZDTS0;|$elm|9eQY;yc8`m0dPiKSm5HNwfXpp#B2NN`t1bLFyznZo zu1p-ggJf=B-|TnTaV=5XyV&+|u1p-gLu8&9w-o|A^M`H|bFIJ(fOVZRar6$8c~bUZ z7$W-3!|Gq2H7;_lOdP!}}XdS010ddJB;m;L?5 zur{>!&h1R3qD|Z7S5H4qj#3f9oN=A z;M}qMniyRu6G!iCnOiILd7|*#far7?o;aSVp6#UHHpE*}1j@~5_ zw}u{iW(Up&W}z#77dL2S;^_TU;+A&ds?$l#<)6h+$3|?xU7Bow!0dgc+0suaoi$vcQY5_CvJPdgg?IJjaMg*-^<+cI1(qJQ;}Qtw-kd?b>g^J=7#0# z3WA@0g3mYDL90$2y*@nqm41Ssdl1aII&n<(;aU5>7X19F>=|5>IHvjVEY-FNe)i;X z&ee(Iewn-D7RN)+e}O&cF8<>h&ee%yy3AcWuENR*le;GO#sx>%b>q~D;~|re6p16u zysgWi@?}UIAqV)c#IdAL;#jNmkfDP+@h=C$REGqGbZw&fD3rYN9Dl=aAryz)29m-n zCD?En9xKGOUR{|K?!7H@%Z#Rx&~t1=|q`%vaak)wA2LgE9h&zl9GOR&RT84~V& z?8Ea+fa#lcBjedaR&%Zl3HLsgxHas^h|<6(V%x*^*1FEQG9=vlT;i7STDwC)=Emyb z)fZJ1Ton@TeJS%cA=BY-H(y9>6R`Am&XpnI-q$j><(`=eoi+)p+p@)o15Ozd?)_Wl zM#Bg7pt=LO5jFb(udWOU_x>YuM{0gdy4Z!rv3pA_=gN>U*^s%r_7*tm%nOY>EU+8r z%8)QQi_C4|%i%OPFEqBm*snNOhJ?xfGI!lP1lw+m!EJZ_`u07}l_6nrHkpU6Dgjpt za}E-^H0e9el_6nrcA1BKeD^cp`>=Y*xDG6y#Vds}BuvgJb9>q>3<=q2(7v;X*mh+| zn4DYY!OQOc4E#&19z5@RHl)Go%8)QQkIc6^hr_(v?f(TINZ`W(|TP<`d*eg}nJVSLTDsWn~`!%{EAC%*EUBUu zLYVJ&6RUd*j`)^WSLTDs0W!B-cnQ!P%~{Sg`I2*z4{8o~cj7 zvO_MMt7h%@V6$Pl1bm>cTG2V2E2F{WAep;IAKD|T4|e{1pC{C()p0vn?lGkIB7LV7{0=vSyk|*9(I(HKu{->Z^HE`qqTbs zaVI2MpiZ7X_koZ<-(aZ%9$X{_)JSW!OOQKTFJNP>A(!&<)+!UgdMfx&7<^^lt$-gU|tE4hozJv9!&?Kh)($TuB1SH@V$-DDncQehmHhqtyt*>RN*-o%GsePsVaD$~ zi0QU}xh1tBVaRe1{+oZfx<5bUeW_jxHWrU|C=bCJboGtYqbyxv~ z^JC%q8z$xCQkiXeecmfE{@x!C{3vqcSOZ*d%uY6Cw&nGCuf)hU;ui4L$Sp_Pe8#yl z+w%InS7LeF4sI7L1jk1gVw9!Kw!HFtCDyQQF>Qfk#$gTX93gHQ%52N)^Il1Kr9PNL z!xYA13448jtz^PMn(~!ful!z#rA>+bUf?W9Zhhfg3g32Rw&nGCuO#qw8qB-QA3F&A z-j6NI!0O6u%lk||SB>fpn5|mNVdE`NcZh9QW?SADGIy+9`39=93yovI;w`-K%52N) z^ID3#B3$J%E;O#^M?@&8%(lEfucg=uci#@2bzR`0Y}vSC;KgL%BXQGR zBR(F(xiZ^I@p&yJbnb_bf&Yj+w0Vq}g(+OQJHO}_`H@9Jmt}Mz&9Zej=5KkS660RDL${IY|VGb3RwZ9RFG|D z%f^-_;8CZ^w#bF1*5zgRoDi-SkZpaE8^6NBt`y2_E5+xHl!1OL8vT>pEpvXe*d%x@CL}E7DS7Yu`=6A@p&U9di-{H zv~Fd0w&;YbVZ8CmY%9g*jTFO@z706cir`Or)+wATv#k`LH&X1|#_fV#Zl2?jZrQw&tz*GX*JN8{vn_is?iVs? zl$d>MvMnknE`AFV1|#t2L(f9qWKFh3<;ED;#~H0%{_ql)nrw^8l*6Ni+_76+lQh{D zkyiUnyd0gu#u`sMitC9o+e!(QJJ?#Z9*jCN_#f*;IHk7 z$eiM&RP*6EYTXe0)MfF2LYZx)g!}UC5Rqgw{$&0pyuX#%R!R+tTSJen!-+Z@b%icY zuE@DE+e)b^aZ5W-(G$?;2eIedS>AcUxpH+|N~Fwfn^wRK!7z~9hQ7Ctb7i)b5+!pZ z@2iu*=OMS8dM2hg%4{p8uFUN#hQPKP>?UaM(dj;~uFSSl8pzx+~|JQMrNOzz#Fg3wo+Qk+%sSS-26@M2`zhzb7i)b(pu(`rO&1cemq}m&Xw6#N?VzG z>^UKjG^^KqaOno;%4{p8z03o?4#b0&JxLB2UG;CymDyHGN10n*Ce?%LaFv5UDam52 zugtbmI?LS1VSOg}u~t)gb!E1d($$COZ4AeIM)h9@{KmO5+e+!~!*ku=Ao%ILbuzd* z+e+!_!?S;qx$Qr{naH_viB?K)nY$a?UC{FzvFF@{-|&fwI@?O=D|6TG-gvoS+%=|e zOI}@>ZKd=#dFB!=n9payLE~juqBS1=jsKW`lrMz_XqRZU=+(dLfDzrg{@*W#?mf*K z;Im%Kb^YW&uoW|~wCh-U4crP?3a?&pm6DOrWsWB1H+(e?22laX=hs`>iE|Q(X&wO? z-M{Du`@R-RBXI=FqgY{8oRu=dY<*_oI9F#pX(N!w75s-CI>?owO3Da_YiPXr3ck%hDLd!N z33|$>GB+9>8VrT)xa~%rqGvf*PS8`9`|vWY2ExHNig9=#!#N2jH2W-c&8EMgB)h?e zE-6-kOZD`2y<9kCLDh8Nu<0QRe0HA4@c_@njTEc*Z48TqLZa zm%hjGBs)z*Pk%m`S67cG|B$QOyls|1b${G;+t)2W;aoi+ye4y_^me$bn=>ur{Y&LJ zR}ToU`|!a0(a?DK2mX>$m=&2dxG;;;#@r%%UG0{`NXLN``Mui;t=vLw+g?Gl;tjTrGL4a$Hi?*`NS#J z=VL3bpN@Y9yJ9l#3Rll|xEJ)d*HoWyX?~p{aOLrXbPR5L@MG@}J<+P~BcrePXG&d=-BJUJZ5ZmKc`o;7(NDUQ>O;k;zYn!)DJ!Zt3+61O(=0 zD{rrQW`+tmsdDX?$IS;JcGw{xz%y{5X@F+jH6mSq*Bkmdr#z^{g1;9PloP4$_9 z8@1w=LG{wC@psyYu2bG#Q+;OOMzKG>f+L1S$T%nD)it+Q((cejMQ~UEk82=3j!$Jz zH?h-|x7Spk`D@6qt3kkjKpyh$TsDtEuDrdb)|PwC|C`1i!|k;ma{rB|zUJ-L++In$ zqplstNkk0Fs2SagajCq$rZ$ob$FJJC0yvxf#YawG%enIQn(8zEvK(Iuvmf(w#+EOq zzv5hZdrkG7K&8aMB{t&*x4JQ#1z@i!Z?CC7a}Y~?o-mQ)zF`wC25Q{dm@;UDvla_U;nXX-j+P~TodySbV)j)Q;k zd8>MOk~-6@4oyrwliB?de${aD4e0?4ah`>0e^;;-yPr=H(7)V8FU*^=JO}4r?&Rn2 zV1L}cQqXh0_j6*-MZ zSWx>$Ri;evzjO>FyAdV$g|N1w)ZG2agvXuRn~k3v?(9b~5i@HhvcDa6phYuwG^V*d zP?KHDjY$iB6f$$%ppo{g)mK4Hww?A%b^Z}D^W`axbey>XV=QxFo#WIfJQ>W^X09#K z$e?2Lpl^+?xIIBdhUXMAb6JT-I`c&1UE@QP&fMR2=8~)^(a7*e^UFgILI1*gEB9;E z7c%oB?i$&1O(&R7SnHtdx$2KmT#|Jp8X4C#7c9XtWn99icxz`pM22G;=^1?tMq=i7 z(>))?x8jnl9?{6a`cENEHsY|gf%WEA;F65tG%}{z=AKZq7|NK+xpB_OT1ys=Xk_zj zOX1A4vM1Qhvuwo4DwFRN{;%T}zA5k+^u!qU$n&0BHFeb?w6ScI4J)JQWrZlqEyfQdStBJDJoQZKS|c5oUcg>4uO^P)g2XXIR*`6=yLkm1&~?C??xx>u=QYU! z5{9TY7;KWvJs68{R)53n0+4561uY` zW=pJZ$(UawL-us|4rDsk4B34G6Hq3}a9<!Fd(s*!M>n2%+hmEJAKC7E4nq`Pmc zTOirw%H8|OK`zNM4~=y8SquGY^u^XXds`oI8EXEX_5U$?%hlxNOX#5ll(`Z|Ve-L_ zTe3DpQ`0@KMp4n)Ip4qGk}M0+$e>wM5@rH2pnXPpm-IJHsBr|56ELt7!4s1J}h1pj~S>KY$vPN3t zdf@r_2lkLP_Fb6Jn0tk+2+_$Jp)j7#km0G~{z(>t=w#jd`-F_17s6|jcbs&x+LEh6 zR(<~fmt+ZuPC5tRQ!#Tp9eMFF3+o}W`a>up_sfav5J?i$(h||zALc6N zhjAi$PI2;@nrS?_uh^fBehWq69EEG&lk?)9O+IF%scHLpGS04YqO_gJB4$@4xX?(W zVlvDm4Tu-vf8Bi!^VX8gLL(hz^Zp2C21-Zic^kPTUoX-~`%fztfrOk0w)0Syeq54; zB^v42R|T#n2Ai)qk{u_wBx_1E(%y3j+_TM*l)ZZmaRnpGNi@>6@hyfzY&%^W2F>R+ z$(M>W(ml?v6_@TYW4_~(e56Pxo9x4}CadXA{2)7* zl%bK4UE@B4BfcZb$j-mu$~1Pako-s^J&W9%x%4btBxcJbI?~9pO8_b#{ zHPT2=Gw0u2dYX)D$R!DkG}2b(Azp90;C9+7x6jArF9ZH-UKVg^C&W8OWt0IImjl*MpHAO_psFEZuX(-{@JjZ0_kbz+oy_M`uj_T~-nZqI7kn|>3; zYhL`%+{CdeBp;WK6z`A5$GstHdTcEVm^38?YGqRm{AwLh93G8}am3u(JMgG;jP zM<*+mf#@%zrt44+F3E}?ope>IE2Q%zhK{&D>0%$94EhLNrmbobD8Rd`ME6()^zo%h1|X-e0*Xnuau4>0{pWL@DgOR%V(_Vn4oOYd>-r;L z!(rME6Sc<+aUmf)?Z{hdnwrMQW_G9vI~n}IkMTi_Db=R{scApit^}BlDD4Mk@y;G= zsG~z79S3?vf^3J<@xwcrp`$uFBr+&>r==iacm>1OtZor+kvGyb+v$9#)cYVuqI6on z5Mi7qIwUp2uZEt79`Z*Sem+%PM#+0Z$Z zan*-?z@;WSB+@hV>Kc&dgmh5WTwH3RLm~rfw}i>4(EwW;SksA*e_3la(IJsB0k1!S znnh8@l-jkFOHFi0WV7cBdw_&E*kWn+;6rgFXre zi=i%FQxhE$8S=$lILplMw1=!-Z0AxF9TI83ki8Q~7~I2^`gHVXTxz02B7?tJbQ2`I z6$h`K+MG*GbV#IY$Z5F!8~s@i^*ytiOHFi0WQ1SNu5b($M_J=lt|MG(qC+AFR>(6B z{_P;-Y3Y zsJR?#CeCRW&!r|hBr+-B8RP_hOHd}2n-j*RCORZC{>0Z6p(cAM5P$HIm^5jkLn6Hu zbHd%o?+(`VmfJ9p*VIIZL^=cFAqF-dpgBvH8_lIAIwaEFt>*%epJ7dR$5T7G)I^6w zI=gm-{b}?@>1>yBmrG4_NMx>tWwt^OHAI=K-ru zNpB-SvdLl4Sic6mrY1Th()m>+Ua6UMetEPSmzwC1$|2owx@F4#w`*{zi4LheSQ_r1 z88Yp-g-cCzNM(UMnXP@d>2fYL(IJu6x{{_Qh1@?2S*qS+E;Z3%rnH9MV#_Po zcqsJRmtqX2i4HTRC8A4KIIGQHYKiF3MU130(IJucd-uA-4!MDQ#eQ?3m^)~qLn3WI zeTwHwc9gaQO$PJr)I^6w8uoA6frL2={BJ=0VO(mWLn0l;{9#;TE|7D)zqKfrn&^;7 zdz$qH$mUqn{%xo@5;V~vk&f*bFMwq8700HXcX&-rbV#JV&91c|*+|OXY+ofVHPIoF zuGN3V@$Gbd*6j(Gn&^;7_sAlXxO5L$ARb9+qC+a6uY_50{$gkjThRemEC2 zYc^jemdj|OLn1v5r@&}2qh|f*;_MAu}f2_#ks(r9ZF|Q13D4OMPAeOq_AyAoLN;>tH-S`qlfmrKSG8Kr!&kd;6lbo*#W!7~>!5?)p2JwHF@1YR3?&z1f0)lYN3Usvt-Fqy}-EYX7V zxVVVdoReIVRQLG=sAt?PI6KT=XY`CrXHWaE=Set8xX&j*0~<6w1YH-4jSs9_Wn2qXG&0SI?xNG*G3zs{?Z)ROReGLNp?F&pR6;nz=c zPNGY~V)WbU|9`cr`HV&yoq?PpQ_rs|AqCUbX-1?RCYR(Ch4yOeX1Zj$OP zWNz!#;UaK$v9h(V%)&HmJc&37ZzXg0`!67YF&~h+a|R9N)k)4tcpI6A?uvZ~{3td) zbo<$roRhGVaG$TIh9qCk4;<$2uvl_ujV_#%#FKEJucz7{_FWIW4RZURVLxzAVo$<5 z$&C;G`n{FFcOnl?iepQpun_h?;G|58= z_xXBiw4=&3;7yQ6mo)z5)k!Eyct5%Ep8D?%0?sZMo*JKv(FI9H2_GPHqf{{%1X|%A z=>KAU$MfnW9wmH`%=tiS2InMXC49CI|KNMPMY3&ozF)cu=Ok$* ze6Gx`4Y%cl9d{YK&KmOt%%aROEs0wRpYOvXRzDX!tX>l5By%Nvp%1TL8v?A1>QTju za!!I*!Wa4Qum=wWue@LEIFh~+zQl(I9egdg?Hl$G2@hHl!4fWil*AhP@Ht%T%yC`l z-OWGo#*-YD@a1y#h(2TggdN8Qr4ik4`*BXfSi)Dx-2NiZTG(eWw!aOA=Nx=N<;#*=K8@U=2`l$&=2;B@4U zQh8@`P6ArO@v-#3CgAoXdA9+F*%WMh`tSyvla!Y5jWTx}2*gP!o5wl!6!@HT64esE zN#^$6t~|imu+ZM+nz-7Kyq54SGIwp7f)B~qw!7BdddRDj(3bFRGIx)k`I2+@=;uW^ zC&?}0Nj|(;ZBgCbXttONk@%MI9Wsx|k=hQbe}O$8;s4LAjOsMQCHyOyM|L}jff#!z z8QCduA8$MfatYrhbI;;Kzi{rEe~)E&c*2r2m+)_79yxsaK+Yq37e33YlSr5F?_}<2 zp7J^8p2o=qIVZU;;or;LR&CHJ=(^6>b+$^sv#=f;Pr_Zo_sTrrN_!k0gdz{P@Edzt ziJT<7gnNB>pQp*d$1~pjaYf#E67v$CDsyM_HCQcVa%Zh9EP==BBSQ@7;U{J8`aSGD&Ru7}<+Df{3=@9Z zH`8d(%XiK^B&hzwa#j`$)o_IC9Hg=nQuGN$gl_FW(hpbt&QJ zWFG&Idp>YBt&G3(+Z@ix5>vu2$lPrlE(4wMG4`eF&KIvZSLePLWo~>_9*^QE55L}{0Cb%n^6-=U-{FlX zt58YxTQcwY*@lh4BSBkw&blRXAhHyd@H;Y(t2ba0=W&(JjpfzVx$ixhdqxzP3f!E~ z_X`}(xjOfKAoIYeId`DzVzBXnVR!i%JXW3iK9YHib7Fs}UIcke(S72KQ|G=uALeiN zW-s)*`FdWno43VLr_Oz!$yT6FjBQxqMD|M zaIVgMU&%bWY7`{SCXX&NzYXW=-1m*dtzozBL6E^-QniMi=_ekQsB_=961RjmJNXbe z3^n1Pt-Ep;udd8}(=0M?H7f{rTy^BF#;g}Hk}~&Av&!67ys`rhn<>a``8T%W)s?w# znxD*#c1;RG^&sR%Q@?1=mAP+PR+&3a{|3jqd9iXFSdp1Jt8(A8cVzBvyz?<|cCm8T zud|3(SLVKHKA$kNwVL(^aCWh>MR!@nxia@n%jHu&+wl9q$KkfSp3V?Y7nQkh8onGk z)9zJcRsa z8llX6(+bNxB1cKsY364*YCK92R~u#Sn^sij0|P_g_GmqX)d!ZC-kVof=DumgWZq@N z@Y%p4kawA1;TO)8xo=ttnMW5nTMu|+v_f0D$b5GTKO@Xt^g{SOxagS5x zzG-D-ZhVjxdYyeZ(qiQQwE%CtGWSiBzh7su-~X!{?6~&Wc>9GueK}X=zG)TY>WRxP zfDPd39y(o92?a({XGIbX_cRXW?gqIalVsX%%Je?g3LH zi?JNJyXB;xI9KMrX(2LqcK;q`5*|o~uqdc=TYN zu*%#w&F9O3?pY0Seqc6!LMa|6j8*2oY1QP$2TdK80-Q~$gN9vx%Bw4L-?VUUfmAP+P4Ie&i&QQU7uM|g}GWSiZ>BE2OR!MO0MKD=Ouw}NN? zSftL%+&8VZ%&qlZaEGy8#2sh#lrG4(U77o)MfvcmUqf`5!GpdRJ+I7t)9U*0+H)~B zHmg^&h4Sjk+&8Vh4-a(|5ImsONzRqIZ(0K%9*Cbo&!}EJh)=22xo=vW#I2!s%Hic= zGWJ~Pl_BDCq0D{L;w5g0=vFZvb{rd&MzlFKiZ@=F`=&LLx&2`WT#0)fcbxrC|NfjS zbKkT?ncI#WdLOF4gWR^S=r^1zbKkV4GB=zX0)a0Z)s9OzSLVKHT}_VvPbFaxHrB$16_Fj5=7wV)0$^B%+w`iP{~gNoHm#@J z1kb!&^EmfR-gu33WqO;|Tjr77?v~{|GU2NnoGa7Yw7xR;BwWGlm^I!L)gV9T%Jep^ zzszkR6{Dd4I^wq5%EyZMRhizV4U~Dn`D#A{4?!OA%ln`3>dN#sZLkmT99^GDXqI%8@BJqBAM5#h8^Ll1NuAt>N!ZOaeIr8ylWu zEDk@|ULk3&T3W(;eElOJnCL=~+r8*#LjLCmOxr~M1=k_-L&|MDo{zaC8Lp2UhN#0B(K%fv<;t<0+L-5Y(ta95l^C8jdZ&XW&=4Hx6^Ge@F}lJ zQd*4+O}^g+m89zq#%Y~DXyl5AEZ9a*2jxnkyPjx4S5 z84{~WVp)w0POgv)60Rt)68DF3^SC65tVX(4yz@KA!6;ozE_t{lVXQ{hE;uRyj-lo# zYv--Kl}nPtYUDuAk|!XKp&S^o2_HAH?IaPbMt0BB$_tVmecf~J#&xeulJr$0qiddh zz*`$#J@77OhRuNhpLOOm;2q!D;}5y+`1jevQ1xg>F`MmpX*hsP}( zfiQ{9S7;2EBx%*i#BbL?v~PufU~IB8-#so#$f}V^)lO!Ggp?oHcTGdEzRNz^t33~=o)!K8mb4gNFjdUh#ZUa5k2&FTwIt;PQBY^~} z8tER{G!f)#lIve!d~>m8-Z{tj+p=%Owdpb+YbF z7=LBR=mDF#B>ARJHXe~*$b`Q~a7m&~ovgq8wUBjh;v}DKCrLGRvZ|wrkd=4fJda7T zkX0?Mp|6Jw1j$Au()Cr~0luBC9dlOlnk3lNNcYTIkGXVD zUv_{?l4hlzL>WPR&y_eWbUNt~&X5$~NG19A)YZA1YlJ|o7Xj|K}G89AhBX*gFp zql_H%XJvGwPsQ`@LGHP~c z6~Jqfyi+3s?yPtSJ;dg`0kg}U z>&e+QfuwXg8Qyfikkwv`Ydi_)bh6si2|`xQ^;bqsn$2nDu~M0`=@c%>&+uxbdqOy* zJm${{xW_H4#3flzsgbU~E==Rnb**x1F3FGY{!3=AqD=IOw{Dl-3-K0AC?MXtdRp9Q zH1QT$o07P=!*$qjHk?bG8-!^n+fAByi^zm`xAp>A1`myd9J9qON)vAp=`LLl2A}4y zjJu2O{Y}(V|FRE}#%G0KB4KTSHH~>*F_|F02uQn(Nc)pf+rhBywBIcvZvTcl-XhX* zs~jk!Bi3|W?YKg;Rvm8<8B{S2F23g1)`J4_l@L-LZxQMIU{`UFqp_y5VDxJ)HSrda zo>r&-fF7!X($l10Z6Ve17LmPO#R`FBw~OAkzq@m(iMNQ1>sl9X|K>W@xOP8@y`qV? zi1bVwS_5Q3*4jw{FL_N(yhUVS^BFMdHs7raY?xcLRugX#852`t1Js26g?Ov>)&GjO zh_nXvfa!o0CNc28cBh!KYvL^;;lXM!7`UuKn@iri&$m+(Z&6vKT1AkXm@L@8ESH*i zD^ps-vyQ_vdpb5Y+|u|GmzsDhQ(D5idRhU32l5bab+m{uj;vGEoMmkyy2gNHu}_;Y zzj3^#Cf*`7ZI0Cop>JkjOyH{t{@fN9R8$4|#$Zl*q`!y10wkF;p(p~;u z50H~kx=S>~)#9wRns|%I(C??d1$i80=(m3O$cjl#yhUWlPangO)%>ySkRJz$7*7*# z5o!PD$EhIOVNLssioJPFO}s^9@SYto^)bFi8NB;?T`o287Ll%n=azvSgwi#;tBBb( z@fMM_->rKAjv*N8K)jWG)*W6`6K@eYuzEEcNSJ&>yj6MRaV|CS7Lnbvjevb=-g&zl z%_nfFiMNQ1uCfTGJ!Wg8D}ExbV48S~%2nHMf*gUZjb8p;46mt)w}><T_IhVpU-dxh<@VhP|Qcb)?WMWcWEYyVa1>&tQdc5E@HSrdaNtL(!08tYh z4X}JLq{b;OHSrda@eeNj4mCTYjK9?`giB4lMWi?Ky9ZG7K1y%(d1B(NiMNP!)-PKZ zdME*|ZxQKU z>IdVmjGCWJ5Z44vyhUWt(&h_5vJpnm{Pws~iCu>@@fMNJeVfj6=}f+Jl1ojzMdid+ zaOX8^I>)AkajA*7s65jS&d&^a^6M;IYT_*_%M{-&WQjRqx}}M?h_p62H4pa672GS< zMuWHUnwofv$~p(f2pQQVKbM+#i^}-sus<_uHn@&!0@z;B#9LHG{dHH!8f$ZMsfo9! z49x)({fwFwCw$7KCf>@F*3cK#R)A!qn$Radh!9y5Z)HkL#GtSG!(M5NeH+ogs<_^2 z;w>T_*3K}+v)o2$e|1buWi=rck+$EW;XY>MLTNjFq538{#*|MGewNErLUb{>!Vo7dEYR75&{nYjsM6iUb8 zbA7nfgj7V@2i@Nbl8uM#{pMnB!;U^pNJXS8=_p)D%wi{WuWL=O-RMYg%5{hF1H)7;xjmS+3+~BPm2q@uqJOJg*_{V%;wVb z>2@oZn!Jg~$mzG?X;wzfF;m6!8cp6rq^Di)c3gT|?cw>vSWVtUWWddLKZ0&zlhA-` zeZ)jblQ$7*lzXo{)P##5_)_2Q=i8~to2U%gRzgU3)OTEJ@+K;)_QZVOtQneXCzqPM ziOR|yU>h@J@H75QUY9rhOKv!wDR1(uNt3 zD45c9>9#v#JL%%Df64!k>%Qs?=s&buf9<-jf0c!1?KgiUFb{5HM3r)7pw(O1|84WM zW@nRP$yc15iB+q-xj2l+#sKuM=CEQWb^vb0bjer7QaN#g`d15C4D%hovCOz@nc0w{ zSVOZI{*}=}TLMoWnhZ_ticJmtrA%}D&oF)YUw$Rq-Umj2)&P_VfoIlmsmaplLW@CX z{h{U}l-Mr1(Ni$6onjwl0+y3@GSWNAdk?HG+UV^GFz8-w#n z)>=)LMxcw}!1=n0SQ@v=xLR@OHG*UBaQHPCC6EazN1$g0a*|^kXX+%aZWBZfI z=*4YfxzuE7nbKP4b=@0K^A(h|)_MN(M_g*Mv`lHK&}T2smRe$KEA-B@j7v=-Mr8On z3oPEV!m$e}+?Y{ca;Zt-h_rPoI0|acL22tS=Ql1jSsIZYN|eTP1@@`M(xLFxCtPZ> zG$NhGd+8v}Yr;QklDPaImWs_f9tpA=)^yMC-r!P`rIDJp*=xT8*&C(pBk2_&8KGJ7rnI=mkvU$w9Y_L~eV$J5!T@P`o$bcFQ700(zbq`8OHCq1WI|N7?I4$-Oz_;mRF$<>lZX)+J84oqE@Q`aUBaa% z5hF5g9Q*7Es~I=Cow%=P5-}>f@g z8S>;-DwiRT>n!9_lZX*nsp$+DgPAoeB_717B=&>mMJX(W!?j2ypMewP-@y4F8_Pk zR>ZWbH9@iMtEX0NNyLb>-~0e`=k~1T_2t8OO--&vq|@&O+>Ojn?KmwBu5+o$wTQHTym%u>Ha4-( z%7TFn>mg09MPx+vdJ!O#u(c6kpU%#Z|I2cwq&?6(<`ewLZ7<97nwoft)bt#%@8Qz( z6tPJXC08?!F*-X_L;nk(BcnsY=h0q z0^W}OkxNayL?qm8!=WadEgMxv1aYZ}m#D0}_g5jKTVMvv_NOLZqO!q*{6fYo@#j(# zFHxB=v%ioHAK;Tvtf`BasEkR5t7gV_)^CAHE|dSma;8s)CPUw{ai4p^_2pdt56hWe z)xoO?ldczgF)m~^|9d%8Mw&8&=cNAC%1*Bcw|^X3`B(eEUOVHjqS4L2A|oL!frlQx zfkv>Qa^Sx8m^`xG^gk?TDqB7lx(q@FxS^KV@sdkT1VgescjwO!Lrqw|07H&e7rx?B z6TuL}_WAc9*%U7*x|5jflP|t$_KLG&(UBk_Zh{CVV7j;fYa$p@(=#&ve(0ev zl%9b{#B_^%=S@?y!s8v!peDQMSGc=BJKs)C1Vd`Zt*#2n3WFq=s4cBuf=f*VL!@VM zQ<#RBQ+CgSn5|rDA{Zj;A0N^WBn%!Pf;rSz^pGZkAu^`x^vfVip^RyVuc@2+Qxm}u zSv@EFg~oK0)r~O|xzt23L`KaC3Wb{N_8&FlQ+#ie9YdN3hREm{onLbq{ZTP-(bq&U znbKP4)*T$?ynx19>s(D2lL<`(lPN6~Iy&%(Z;snpq1gxG0<4K(hzuXmZ99}Jgfe_! zzhC)wY9bgSZLPk5OSk!DNL$mWFfKI_43Qmjv@T*AerCW0Z-sPs-9kke5b?s1K{)I=~uIvg%1 zm~JQ?rALHtsfl2SOgyl^7t~yXGI8IyOFx^}WFho|4`=$@{?GfD0%C*N<=dIO5Fhqvj+5*R|DMS8jJBmw91Vdz{ z1`TR*S*gzI$y{n87%J07!X418S!u5|g-cBYLuAOADsXOQwD!aw;*O+=U^1mO;;nxO z^er2kM7-#5h1b+XFqzU4P}qwxK|$=>fC8n?ajA)5h>RG=;;jxSBRpIxAPZPlq8Bu8*ju@fE(6>Ra8e~Xa z1Vd!xx{DC`nD4AdF5a_>*VIHXM0%1FU`A(3&o}eMajS`7h>YCx=RhtacP94ZH8l|o zk)AQb#&GEwS)w7Anh1u-fEPz_e9Pu#0gpfbnM+LsL!=ShV;R(Bvt=V_U0yCV5e$`) z0WfmQkTtp%;ZhU9P#LuhqKOO{dFut2nh1u4|{#BkUN`MKDy>X@+~n+)mHR zTU=@)7$V)X>mP%@W#c~g^j3$s)I=~ux*q-g50|dHuLpCfiD0B(Z4HE@{j%kM`m$3g zpD#Q8YlTlYsH_WXuD}fSUqAhlxXbe~bQGJmBUE}MG|fepIr&~dF0lxAaSH?k{%+BkaJ034x%)I zr?ZE@*lU`khe~Jr=^(cpXtdn{O;hddS9_UzN<{ zmhkbTZh(9r3x|)s!`3`tVG`O9ZhjV$@HPz#Rt3(^t~Rlq*aKwbnzV>WTj#k2pqFN2 zVOx8HJ>*15G9Oad{GcS^T~>4|3x(?<@3MT=ZNAx>;D<=3bpi~mGOj0YKVU<9RygxL zHd5I9mL%cs*~9T(&bHV+z3}(EFiC$1H@_uGxNWYz6>xS++GY+D?IsZr;pVp_33oSX zZ2)IyhP&bY7+#&^K!ls$k|f-+d>&j&vcS{^{w&K|jB`yGMCIp2;GSdM!{q9y4P0u% zAR--MTfNZaPADC&o@=-yVGwDu`2|VBgHQK40Q_6z!6z>EmOg$OslAW3-b%13g-X2UMCSZW9L7gtb{4H0gBL6Y!+EsZC@e?~sA zNl8(i1Vn_JUyvlcd%54|0f&yaSh|<$!m=K0ye1_gGWw$km?fF*jviF%9o}msB_f4C zmPZ-UyFZBmJ{k*0@63&F3$U>QiHZoHBXc7>9v;fFud2Yh_Q~vd3$~l&MTF0jxuce) z80>Pk*^bH$6M1zK8WFxg=7}c*-avJhs3acFY2%zEM}&VO^Q72yKfn>Q61P36-p4Ff z!N!yLi15WSPYAn^3e{QT6DozVc`}(V|8znzr?MN1WAN1lezoT zG1sB%SZ3>9xJ6u#Nt#6XXEM(@epfTq68)nJ3h*02dkSr^pkkKWDiD_B=_L2wx}j*lEj$ za2`9l`%qq;#7u;5ka^ssX*)QN8{x5YPO>J#zwqHbhGr4GW#6`(lfa4a%`&%k&UqC$ zjGEwoJI>nAxh8cYR|;#hfTBV+nL2<=P3lBthkgx&YH}D|xa9IJ*h<`eBing=nIr%+0pg zZ!HP}2`gQo@LwOax{-eq+yQvE3w3B7C3B?Q@FP1I|V} z_8Fa9@aiN~BK$|0N7Ojg0r;2L_=u`6_!&);CBhHLJaR|9@vzHToFBP0R`eQ)mk2*7 zb5DA5N6tO_PP42Vx1D56g#RS-$dhTSIgk9Y<1c*MNzg?25t)0Y<%fx<*?7-{8^<{( zX%pecWFBaYeG6U3W{v@G{``z{5;+lmLgujOHU+A)*}hS^L@CZm?nL-6KD>VRi-Om= z%^o#j*OBmv@KZiKuJ#JS>sJ*!jwDco|LVgVJ(wVPT-!Anji)gb;b(n#Y>vW$*L}ef zLTEgF+l=sYGIuY!ha-G8;&jjNF_u>+ffV5vWbS&s7kb^~uIGhVQjOI~DnHQ4G-JO1xUyGOCr&<_icyPJ64io%(nJtFPCF7vHX2Vf{-g?Jgp z{WVS;5nP=&k#;)@zJ-)3Ga1k?;Z9%9QxLt$a`0AmXlZ4{+@Vk2RKJ zc;=*h#|x|Trk66W|4V+TYksbyep+$SYwEn|wajCBt$Yf+BsM;#MX&L^x;k(ATjtiP zAHM{C4!O0`baA3+@+Q)2hWj!;Q%y%{I8KXugeGsIGVuOtkXx86Tahi6#FJB#H)Tp| zo%;@mW7&EVYn|U~7UdhO%$w5v<&6#hFdqyi%x_qQ_i2$Tc;?5zGmo(J>@sf?(=8Nu z7i@Q%sJ-H}*5pl@?Y7w3R)FEX`Nc$A!dx-AQ07hPIpxA#KE;~mN9nsPczlt!Ta!1D z!j3mhU_O;`J$dNxp|%wu782^QQECGPh0tqylhuJ+XZ_ zrX%OdyeYka%-ym3uLGZg{q3$CC2r)(yeYk)%q>fM-iN#iW_9rAlXmI6x+ZTTy=GZ4 z67S*PF}XN%ps&fBh;-Pud3hZ5@T}j@~eVEegiVkuq;ex5?b7>{kFd+`3@TIqgGub!Fa^?vS~|y$=#mGtzZ@ z&`UI4nKz{e$vp9p8_p5yYOJ2P_nWVIb!Fa^?v{B{^rP-@#C(Q4sm7%2oGbID^kA7M zxQG1%)ma{$P`Ldp&XsvndL@~A6GN6lbvWoCZ>nG9Dd)<(DZR4H-Sgg^30=1axqI}3 zqns=Aru3>Z&o!X;H_-S**u-I|RyeU0e=GOLSpxdl};%Tq={Q^cHgAUV9SZs5Tey_WEj# z$ged?Rc435k2$t31+onmw*U6>GB2!5s?yuYg&ogQ#{p+E2*(xIe9o0gReC#_+ovsq z$iW;Z*++K}!&+rhmEOVRSR)edHvIPiH(h=Kdz%eTBj;Qc4{?=wQ+gM<37%A=IOm?7 ze~S)K=1u9{WFDDPeKqHin`;#39iYsc(tF68vxCUdULo6-mP z@VeVi3m&ny6z9skDSeO+Z!iJQ(~QPfzxP)LSLaRXLwtC2*MoxBXpoz8vi6De{4klj z=dMbFo@XOY_vBlDaIVao(nrYL^)&nz=dN3Q-f*tWo6<*_Jo95m*`ejj;EcVTu@nl< z!Hhr3AGxdKvlOaU=OIG}cj_{<&alBl1`ICOq+8$aKC7eDfp2;zvoX-(^jDc@VMIa$ zm~)sv!5-nMru_txZ&KFt%KI=Bg0ldUvbIro;qN`T15fVEU%kuN52BcVwQl*Qftkci zhnCyffB8Q@fpl<}(3ZewtAB!~vUoi3@xqx{5hfh}%VMrN2W-&uPVDQ1$j1}7B;gu; z(~CS1aBq46TWH`uv$)r0!!eUtGc#Ay$c=&ZVPa+e!urNC^~(#Xj?_p^N1Ic4Q-C}h zrew|f;4^%)W@eIK3-iNh!5DxtX!cFKqL?)^gEWnF zc5%Q}(46x+JJ#IJCCSh<(zE&W9O$7)C~5I*m=Pyr=5j5K3<#S8GZ-@@2&lXrLu1xj zO>##1HtyEbkDz8e){Oh}9xm%+k|bxEnx5So=YuTCTKmRXbBIMtg}(p ze;U+B0INg}3^wxoaJK(cFsZR^F!T#_(MBi%!yJ^{&&c=x~vTz1P^OL8!cY(8!p zOt7tQv4@(EUObvhO$0`ID6UOv6iApY!I|B1@GUMi5g3tn~EdBoUaV zwZTvFo&=eUHG?1KUCJd%zcg~|+&UOzz|t8AzNTNte3kVO3BEM4c2@)E(Qwp5=GEZ> zX3t|mthFTR($tLpCFcx~5Nkrnbv&*Ymn7uUNTWFmD(0dznw+S}CCRrm(lI&@-aq@I zbPWCKCoV~}rICp*5@1Ma{Q_m;lda!yNm4D1OzJ#mB^(LsP$qTwJ0F)M(9+0+4&`B- zU}ddMX!GkfE=iW9k=}v1e}S4Wv8K15WdWBY#?nal&Jksxhc=;fC+*M1B}uR}GS|X> zBcQddQRbSLdWlOCUTLKJ*gG(y$*6g_t+)%4+)5+k&+mhv(7GIJ#{Zf*9wL#IMkY*5 zNCLSEWy0tdr+I5hTBVV(2ZAx{VKVmnW~;d*L6t_v?RoeomvLVgUCbrPsC05=z%3z{ z_Qdpron<7R(#XoQhQiTjz*P+1znfmEK9`zgik#V%iY3FDZOTeTW{9h%CYhr0qyNX* zd%#CkbpQXmo6vi&0wR#MAt8XYlwDFFq-+X-Kq!HPDkTt#AYB0k6p$_=y>~>a(uEKq z6s4+k1*Ayt<#*29oV$nFJCEQ0-`DGTp6}}$-*aZ>&Yk(3&&-{T#Q9dltUIKP{$?wj zDNa5vhBl8z-oK2NfoP|~nc`&rWteblWS)_;h*UUJPSO%w<;5oG+qcj`mf*_uixbJ5 zDMjCUH2Vy6rnxfqtw-2rrHNFyO3s+3pao%OAYp|7J8Rxjeb!`lmLjHifCr3tb6F(4 z{pz6~C3=YYQ3^6WcE$pVnI1J)?^}fx#cJzQs1o!}?oXYVrt291v!WC+t>J+%?`gjy zZ4IuYYcS?QDM;_t8{l2hw2AkMGq{B<+Q|$k1sRmo;SP|(00>H$(;}DTNwb2q{Sv$w z1_2y*Fqv#w9nkz2F_~edAVaQPdQD`=g_8JHjUbs9_L(csI>IVoblSYu8XrW z%l{~-L!O2>MWf*6MrnU{0pm#Wa3 zZtyRdJpZcifq#bWTa}l?jBiK7wlAUYy^(a(uds|rg_pxfzbU(FLrlmopzlB5i!+=S z)7Z;l2*t?{w1G%VDI|KF$|Nk%wCw zL|`VQ)z;X{VWjVn$S5FtV{Lu=cffJ2k;YyQBdx7cmjVfI1^7pC(JP2lcsYy=`Q|Is zF2P8K%ql!UCyl)vMtaorL^Y6xq({|T(}`4gIgE@xF&=XZ$WbBVJM`5{A{AZ^BSTi# z2Q{GO{vpdBO(Ig^IT2$vzjE|EkqR$|k&&}^;e1>Z$;hu~p~EJgio(lb zWRuXw_n?Q4AlW1+Zx8VPvcBQ#Qa;d4)aHs?+>rA{AZ^Bcq$W5AD>l>1f+hPa+jw4kLYH zzUTzC6=!mMBKy@NQsLz=vd-n-eg{&l%ylk&=|-f&%VFf2fnRonrEv$gb4{O>g@{ym zIgD%?)fC(qi||#Nh7TG{q{7Q#WJcGn@H{QB4+maO=co6HRCqaz^qP1R80{_d8r$m} zkqR$|k>N8w%b?nZf8}<8NQIZf$%DzefCSM2Ue3PLu|z7o97dYMmtF<(OC-%rf7M64 z!pmW#Pp2vefdS_Lyqsir{i!It97ZNw30ws+mm!&O;ShStVjfa>IgDK2diFvX35$?i z-?Ha#L@K--Mmi!(z8Be6b%VFg1^!))4^C`yM-RbjGA{AZ^BmI__e*rxN zE;#OOttv^R!pmV~;m?m$hT4J)4qndKpF0w%@NyXGw=esc9&@+2m{s(x!pmV~>@M`> zwC~koxBRZpnhGz6k&Z5tdH^{OYwPHcI)rMg@NyU#wWP)eL`Kc~1~WcUTZNay$mj)S z{~|JacIQAM6kH+}p(B_KRw;uJD>MB*?0NyzwzD*n-c_6YL8QXVVPv|!9cVBuW_nPEQba1e97cLSv#bRY zMgzor)W(-cg_pxftLKdZKngW(tvW~7nhGz6k>2yS38VPwekI!B2NnQ~K~hZJ58BRz|ySfPhRUglY7Y88s9@NyVw4r}u##1z@G z**?^tNQIZf$;9=Gbuw-}`n%#SQ+PR?Y`r#HCtL2AL8QXV;bez3@9SjBXQy*Xm6yZG zRw<2jGI30CBH4K&@-*;t3nTs36$iCw7P`-Gsaswm68BFEnNOvir z^>Hcp0MQ71QN=%o2Z-KxIY1QYa$JbpKJT>jW2wEKw|y;8YmrTQUTU)n+AG{W_Hmo@ zddtq%Ib$To&oEbL^ZzD(dn^_d~IlMujRz`*PCfx8wrNb@<9+#I% zYY)*2Bfi|c9A9{?@=gnfMRz&y=o8iw+MTN={W9C=xYNgBc?;Rs-G(ao?UZo9VdI(P6mDQAul?)5QTFBcg|gen2?0br|k) zR5E1V7Vyn1L5PQZ-Cy6KH2lo%u**?N51)%eAbMxSJ<5k-sv>%x89Xey%TdYbGvzVU z0Y?j5o;}0M63$#6hPxb<3|Z$l2XK(9Q28Zw%!D(mhv6HvezC6cgcf)8=tf`8 z9Ud;@UYYUzAo>)H?$y1b{=PF`h(#YM;~l?w{|ev_5$`y*6B@>%>zFyj@X<1EE!El% zcu&Nw`A!<0_F?#^GVZs&>Cb?R*~V|$);AQL*+dK>hLg{D$hJ6hR>35udgrR0xe!xui>6g2xrC;!{^9&_}opfOlXx4AD^htbf{c}^oqo#L7 z^F{PLv!@vTgN#Qn{R4Vliyl3>!oP$wkBZ@2UGUE@;K3MC`RL5T`w3@86~nj7c>R&1 zwn5Jy$F|q+xu+rF%&lVhP8qLTV);12>sltYBAi)P4FAam&v;uw$2$45B zu^9fdgqu8qwjY7$(0&l)-gBN(bmnC-{E&Ta%Umsn|03h*VYe_9N<%!o!O5e9Gi!_CM`hgmrR4_Tsfc_3d-fFJ z%->@8F&Ve|n@|>tWW-uJMPH+9s*Zx_!hA3XJ>5e%Gs75u*#&Ra9rS!I9#a?3a)>d{95IGpb-~+)pV#sD z1hnD=&TKJ;|K);r8Vdt9H+t)F-{<1o8)Nu&7rc!}s*cB%qV=60c4GKV8TZ?`Y%}!y zb{w>Ra}&Oz=*%T!_$?Q_)Dc)=b8&MM+)~4~bE}NucQoAj!Cf9;y&>|Y|C?V{>p%Un z8i@l2c1B~&`I#Fx&8~%Z~cgHF!+XKj;lNBDH`oh&}s zdybGykw_wLXqsiYT%_l>{=p!KJ_m8X`DKgf(Va)0Sag?*^p;!y7y{9YBEGyzdyxr> z${U$xS-a%Q`*i%QAVe3_olpF$QF?SE(=5yNHoXq@{{>v=Qmf)AOD6 z8z@6_AFRCZ=k1^AxRGg=<#L;zHU0Slz&}IW+F>>BABzWPXqsiY+@=?@HqQX)x)8)e z7Fqh~xbr|1>v@;k^gNnu0P{f0Lp|z_uSB?^X_n=3n_l$4rL7PhyeG(lFONgpUsT@E zG|O_mO>bLY=sHUkQTa`sP7rQrnq|4%rq}#M#52GrA>RC9?J0yCnr2xpx9LT$D4Gv& z5LjTEE&M>p8yt0prdgKDZF)^Qw#2T34HGcU5{e3KhPa_=mgRDrUf9N$7a=+g#xmqUbt9(=5y7HofqlJHhLs;o-YZbRgW&G|Q52)3b!tC{zjXHxS$sR;7fPY_al& zrdgKDZF;pP7McfbZ-aq)1mMq_kC(=5wnrnSB|4-La! zh+E5bzpY0%x~V+tnjGD4$L4{6i`m9+bFh#%7~Rk`%lcc!y*A!03%HnVyjGVzOwkQZ zv#c93?l-V1Dns$g`1RS^fN(?8EbAW`Z#8-`beq`NHnkc8zkZuLXbnxXtlKgkojTJ7 z_)6@$=vJ%!2sbp%vhK>bPg>&xPn} z*zfSrET<9A82Gd?;fAJJ)-xIRT2TO28104inp>hi;fAJJ)(aUA-&m{>RX%)4gF%EF znr2zAT<~8H1_M3{D<6JzxA0oA>kLh^tT!@lPEN;+;48$<2@_URbYs)ZB;!6K^SJ}~ z5#m1myw4JDY?@hQJmEz$Oc$EdoABV-XM`J@X6`b+K0PoNh7IgggK5@brZCB|?Z&2A zUKw|Ess=Bt_A!W~ttTF~5zB?88TZ><<0Nz) zSeBsc)yzu1iCn>tIX;xIm{f?bpu17!o$7aHfO|#-M z9((a}G(`UfqsN{MfO>0PXKb34lyS%Bk&6KT4spkz{Z9xtHqA=Qc+@X>VZds5)RwN_ z5^ijom6h@6y>(%k(D3N>9hVVqY?_sK!55E(1v(f1+5_AKt?kC9Sw$JI|7E+sq37Y* zgK0MQiLNe;O|!}}Ubo5`wCDw1x7;gzfi^bHs<_}Id`9T_;7`QoS~%*AO|xn)_><#z zb^Kn-gVc6o)2zA+Ua)%w9e4YyFX6_fSq%xd1XnwSOXM5qIZJTG%?}7SHqB~DxXB~3 z*Gz~G;tWi)rpGQ5Zfu%)%6QPCk}%V1=aPfIt&&5yv1#Tl`OCO9ss(IInME>U zZCq7+iH6aQO|t+Q_g*`83E+K1+n2Y{abwf0o{R^zZdM=g?-37*drOj7VVZp?rdS zWRXM1L*|~mL%6YN7A)hQl}~}!XcjrFXW7l`2sbv(Y%*?+i`fU2pMzazZgDyf;l`#} zQy08rHlVq9+nQoq3WtrcX%^;!r;UgGv|POX<3B07v1u0Jg73vt2 zX3bsj&cin8(cAqgwxOZ&3e&8GjQjl*0`7sfkLGdyI0y%BU>AmSlkb-k(MMjlwUCh!^VQTvD$qIW{vqu3H1 zH}t@=HG$9Y=szPcv1@^N^p2T&c4Fv(WorVT;UOEQO$S^o_#q43>QUtlJ+N#|;4{4W z{SY{Vqy4B;^WUe_1Ymq{EL#)!43C^|?+rK{paKtU_&@p^XXt@tYXYC)O=7=BwUUi^ z6KlV@RCz-WEL#)!3=dmXYZXLKM?CDCG5ZKN^uV$;fzR;pAHR7*c=(c!X!hdQr8{5P zY)#-haZ6a``hNlb5`tU8+|K?((G5MYY)#-haZ{~NBhfZ)gO#t9G5ZkVh8|e9Ch!^F zcy6CZ5V!*3jmLF8O*s3OkX2q2_zd?N2)$)8Pe$A;{p4uE4Lz`IP2e-UA7%K)9g?maPeVhFi<5YXG=rnY*tNJA^n{u}=$GoD|Shgnc8J>}Oxg+4v`{0446w{|lLk}!l6Zj1G znsw|Fv|YTgUW2~Y9XLY|EL#)!3=dy0>K;`-d~_atqsGt!%hm)w$A7tB0Px{h`S5L9 zy{PSm9$2;}@ELB7`v*YngK%?ToW4XFdSKa_z-PEm?+U)q_U;(nCw!bZi-Dug&;!fX z1U|zP?p?u&8uBAJICgr2IKqRtp$C?&34DgHZ(qCv44Varua8+fmD+CTfn{p~pW%*H zBca>069JCE8662X^uV$;fzR;WJ)WO}=#Me_?zWDegd2Kb*_yy-xZj#tjiKv6SPBlNB_^uV$;fzNQitoq~i=-YZurpg<7VA-0$ zXLxMR`?$w73!}%bER{mIp$C?&34De-`tOF>M$1kdjvM;EuAv8(tqFXFM{NvzOL)|z z=d~!hp$C>7C+qp>)hTAeqd)&epXUuduDc);ro=P0_N2bP`ef)D%{O)L?;Zu`L%2siY= zvfH}gce{YD$;D5{=?02VGahE7)Y02#NvO5IPm?Og2N z)B-~%D|?WPhkR2gfbftn26ZFc(8p*jlH>*H+HhJ$GPBT zLm?N^@Y-+87QzkhThIPn!{0srg}%|H|J(5|ZeY zFNP$-3|m~F$xc7cAd-1)3Uc}NLhyE4#M-j_>L-}Bi*_=bO+hwVI&3eHr7>os#Sy4R zv>v)HT7>qXf{ZCsD-1|bQYKSO@eU3mnM0%?BP(t50dfkGkrfW(d?I496HW@UWnru~8=Le`1#CE39Ut$_17u%}=@|4EOb1#_mUpSh z62Iaq{GA{R51U3LOFLBL_OVBSTqMZNrN1VUWgH4J>Q$xXL`FT``3I3K*-((t4=RFG z)nZ29UWsdm=v$U&sK_&?V8+ZPf9;M^Q;;mhP>{(5($ETdg6&MsSL-g3EW1#U@dXM* z5*eSbo<3``#6m$jE-%BU0=6SO&x@-bQcRXpD9HF)XU6I=Yg}naBugh0q+{eyJN1~u zufU?E^$^P>j7f|2@QVl_#XMv^*gBF(mP8nnCVOTSj6CzV*iL)Dv{pp2{6Rt55(*Xs zasZOHxcZp5i08>t2L zgjGlTRi~iL#vZvO7Yqv0cH4IW^sU(Iw*AvEkzz89t|Ie}DXWw2)1ruE@?1gMo4kx8 z(%$F<3Ov!bOqnalklmxb1lo#GeyQR4Q+TcI`J z-h*CRzim1Gxhw=z=p|;S#9#1*tlW}>Wc;}`n3W4sp_drxcck#gFjB-D;kSR?L?RV> ziIK}smR$icVWotl`G=n3DQB&=&TUC*H+C2!8_l_90aB=eM$=!8B$92bDae>S|3GJ3 zV6=cm{^0OOd-L z5vkBijP#nf5>%FX29jPg+p%q(Uz-a{G-AUEu|~jO6wU zuh3Bu?NsO`M&|i*uod)@uru<6*=bkD#omv=bC#l=3cbWg$Krys zfLw^Rb#HCYdWn%y*RWqTGV1r8xN|H>guVr0DO!E+!VBN_Lq_;ZS>&`XSToNJEl ze2Apux1o3nQuL5QFEKK{N(eAo%=q$iHV~=MON?|34o8iq#q6K9pGbvXa*`J7s&rTx zw0X$7sO}3Q6?(}@n(QCdkA*iITszQ9T{C|tQlXa^X=_m$XOm1MZDAWq5~mBsb4k8tLiIM3?pTz(vv`c!{4V_fzB}N8)^wB^dw_t69x?J+hjj7U0jI>>i z!5ygHqMg6b#=|*cBq;O}BSYR4hj&vWL!L(KeXGz*jI`H@fOr~d_bh}~u8677ONV$*001a{Rj0(>!S9L z?rH9oF0xFChmuc0oinh96PF+E26Yx1kEtT(iGm{)WIX=wG+3A{EfJ4DwGa1t1kR)p z!z;JG%z_fhNp!+)R6iE!PD&vjjC!r@L zbU>rYjx~fcrNr>}Wjv%1i#@t|;V#iziTj$*j4jC-x@3v$yu9dWNOYvV#F za3-c0?kD4^v1MTGHorzZwL#Yy!kMCCcpVwve*ZTRfNqx%-+s2C-t$aWF}$vf=ehRn zH=wP+OMo2b6Ln{k zsVs&!l5xj?W7h!}6SAYr=B*T+NiBvqal!Kzftg0TQzZ7rj@yJYy~Xe#7kquyf`Bi; z$~&eO+etVRT?`MA@u++EXAmBBGIKWJOnEWfF5}VHH#Z_Y`ta)BgfscY@K6{0h#yWD zqVmz}Dm);ZX)uO|%XqTe1X%7ZH?i%lZ+wLtY+}qaA;$1#G9I6&W*xvEAs+Xva3bMM zjWIk@#vOmog-O~1do|GW$5Yl3&LkPbqhvh3`Zio;MD+NQ$yEqvx{Tp5GVb_f_iR0S zA0ND1LbRQUGln}P++yAQ7FHQ;uCvZb#iQZ^X9|tsF2|egecO(P=>lF_kZGMh+(I~$ zX$()4qMK~7)`5VFeHvSn!t)7dT8-gJGVa|X5H=Ld!U*tgI4FQ{CfFF>TE^2)hD`xn zys+u}ULGZ!sWyhU(Qy2i_Bu6!?M6|Y>>=}o$^Jz2dsGHfVXTbyausZr9x!S(Jmlss zy$VcMlzxB z;*~@)S;svjM*8Qw3G1qPK9c@!e7!z24_ zVTc}L0!u;WE%+o3v{ej}c?)#Ld_s^+TPeu!^OA0dHXA{g|8X50(q9Kt?DJjS}%Sw2|G&0U~2)|et zqmPLs1sUIL6D;z%F~eiu63O(Df^^JZ0i#_b9rHHnB$Gx8(mu5JIA7>p~dXDvNw@T?I_5QKOHtALw@i2j7TPQ-XWd4b*{qU&Sy`dC}A%q zUTgIO6~#;;UKF#y5(-9t4`gfXviP@w`UI>H4vh4N`?ujSiQ(w?cwHVnrt>N*Ma&fi z0=7fU3K(;RDWs@Q8Vd&&v(fI}oq-e!YNM^`<%m=W2S&zxn1%*M0>+H-8HI_g7>)|z zz{to3Z*dx(ie#kknsG!bgaacx-g5^jXMvX%gu@N9{=zDR10!t>KYt%c5G?S*)-e~N zm4vh3V8g>Yt=PV?>eoh)sq(V3_GIdB8#Iqo1O8qFd zIFSnBz{njRj9mc2;VP0l$`71Fq(V3_GH<>_SZMM_Bbn#*qTh*B2nR-n&#SozYAeKN z__TYNT#AvP5DuKYHwGt(G>jR3qhl(O3gN&=$24Df!?a1lF(FGA_6p&^$p*#nXpxZT z4j<2&6jLD_IQhqiAmuEJv9^wr{(4M>aA0Kgdv&m#f{ZSeb)I4>gaadED&}uVWK6L? zyopo@2S!G}S^+ajZp`~}`edjO4vb9ph%OH#%zq#p-dj)0#R!FPU}U_<(56JjR|>aN zZ56_Sk&ZWm!AaF(I-cz7L8L-BFfu;05Tqa)8Q&!EB9RK=z(~j3=3|I-OzWzPPla$` zr2Wf4*k#iWf!fF34563`;lM~+AMeRP4#d8-b#X5L3gN&=?;a;%3sU=iChyM4`WR9O z2S%p9@@NR8SWwgNT)9NGRS1WB`1c>2IkY`b+k4PWeMOaDKk81nLIbeCwpv5h>*RYo z^r=&!0T^j-mlxt`G3^QMKB1Tj4Zz5dbMNIRGUUX1U85^B0Na5=pCbnvdFlV=bA0f> zeU7;PeLo%o)n-Si-&wq|MNgca9F$X{1H|8fogB2L_`l*W1`bD*a5$26Fi*o1ub09n zW{@qy#RUg`+6Ltwje2+YE7x9O%#r!9q`7|~n5^+X|3@$^(xKC)#8G2m(bt|$;;^A! z_~*F)lc(Z%)Sx$z^|6tT2aB_aR7fN4slC(1})zvd-@6ynj>d&g#-bY5woAZur)!VoZj zj6GC4qYy5oTHiWvGf<`j_qv9>+0n${Aj5Ra^fVuoJ)7f4vbK|Bt8jb~6rOoe!4q^<9+jzD@MY3ox* z9|`Qz0!3{j2j6`FMbbO}ko-g{0cX@EbR*ge``t_k?gtw1)1y!o&+O7xD?4TQ}9H)sI4N6U_E5+6tn^Qc0WE9bH@!| z63H$ZP{gzrya=N}lPT5$3Hm(5?iWyy0kfXrOnn$*2FwiFM={ye0t#~NfW6>ay8n#i z+KgB{MI_p(NP1X1Lrb5(3GM8TWN4{oVMMYE1r#y+d5n7qA=*ZanfSw+2#U#W z3s8_7N-Ri#k+2rY4aI#M6Ui_zCm7r)WLee{q=AS^MA{AwQyT>+fFUU3v#@rK> zPoERm^#F>P{;lS~DyaP|sDDzP?G%&U44@#3)bDiyYMX{Ji_|j(63H$FP>}vZ>)z30 ze!KwFCGkAjeE=3DLT zrCWs;_@n*pAR#MS!inOGj}uyL~Ypz_zKde+pBy)3Wed*wdFY? z*|+x!GU(SYDgy~R4ARyUmr2K~vR>9sd(fX{VI+XEft`iGz>g@V!c}0Tt;Yc{Uo_Iz z?cb3^DqICd+LzyiF_ar~S<$9MDqICd+DZrQA<|az(?UclTm?pYo(gRQJrs%U^!#-t zo*oxZg?*Q==vzzG{4j1UyOFfKHyL;41EGXNB=nGYSNt=2;EtGx$!>yFkbZ|+JR;KX z=T(tJvQOvVA)Wg@EnIArom5 zE*#k9j{E^L($}Lu))p33lgYQlkV6zxVTUl%7S-|y^iVS-ZH*u43ys1KVPwxgR^w8f zfn?8vp*JX|!VY0%O!v-z0GWhjOw#cAL@MkMM%udlQ4>g!c-s;>oFP(ShcGg-mtS=t zr(?{>R;|_(sjx#B*<#?T13=bBvPHX$K13?)5Jp;Vw$B0b3X+zyhuw%&*ddHGUrL4v zLi^=T^YQVz5LDP9oV-#2?GO;XFdhyq(ECJ8I{D?-{1teK8J5IPM2_$mt79iB#AjET-3+g`=Q_-yrFABlQZA z3Oj_6X}{NnX;iyLG;POkc)n6BGzvR}k=84Dpr*NVLe{OtL@MkMM*8=@1tMFU6Z~6# zicYzRsjx#B>D~Hm6(EHL<88aXl1POe!btyGEwQ#@#QT@c7fhtW4q;?+cp_M&Zeo8u z*}uVQA{BNBBhATPAge5U@u`@b{;H>y3Oj_6RyQ|T#I=u&eD3#yGg4X)DeMqN222h~ z2NLE#utNq74IxrthcI$&=c5H-6@)n#>=4Hs-OyFoA&d+y{0j&{OIIYDKA8#+R;#VT z4q;@!%5OnrTP`5kFYoQyL@MkMMt1%8G4!jpmUTUOTwhldb_gRQYF67vwT&ooPPf?= zb_gdkJ_ozog4->oi1yXqQf(D>2qP`#H+g{Egrxaa-{wRr><~s;TdnvLm`o(CO?)a4 zsjx#BnYg}%7sP~3IIu%zZ`RjOg&o4k4FyYrPHS zFs}A67l9p8enVlZt-=mrq<{ZC9rc)82Av>g?4p^qtmf`L@MkMM#j}# zQ4UB*q2UvTeDU5yD(nzOMt3S{Au>ArhQ2x|><~uAq_ikTWK76yJ*`yOA)K^#4cEz9 zE%e$d><~t}l`44+$otq%%k$@zshtWtgp(d$W8XsJ1oL&t`s0aI*ddH`@8FLsuOQtc z9Qx{@utON>Rz71Ik#24&85C1thcMDTVi;^Ee{9y%N`$s$r=YB19CXyS9|A(10_ZmK~k`v`@p!AMKFYJLz? z7)Iu2C7)7Eg{i^GLJLO$3EQa<`M#qekqT3TlV$P4Yb~Y)^6gwwWomG;aB*Bewc0+Z z;YXx(pg0au1nVN41ee?G{d?SjcAABf@^9JvB#{bJgT?gQHKGlXeoK$go6UdO;+>f9 zey9V9nduT7V8MMUa8+{uG5k=c3LRic?=+xO=T4bjYKIQ&pV_y6>;9cGGP?AC_Y4US ziB~C&FforSaqQe~&`o_XTH@e~2eGkH@16*8e&TafyDgXDj;HU<103E~@ImeuuTD7g zK^U&xmdkMembF2um_a(g;vaEY3}X@9d2E*9+HJWEUo-6tWb9hy*L*o9nWD36`53O< zmdkK!qqhYh`aq0s^*(({$DOta!?oLT8SYz8{5qa^2Yo%di2Pkt-sz1nT)Qoo;kAb} zt_slyWAxg+nhTFm;Lh_R4A*YUWw>vHkKzIU5^-POLl>#?%q3yCc3UpPZS5Ms?Umtq_kH&`KCm z*mh=`FkHJWm*KYl6UGAWfw-;Ls(BQhIVTL)Zp&qO^R-PyC^~af7_Qy-$?-d_rviRb;D7J@qy%Uip=Cv?fyJwf- zzGmxMh_1~x_pkm#I5S)ruHCcCaQ|Ut)&nkP8~=fOW)aR@7lv#1>@wUtt;|Zm#cbo< z?)pN)nf1c(G4lKF@4pi~L+t`6fA2%P2xtBa!?k;MS@h%tpI{g^6|w7*qn?NpZrJn8 zgkiXL&o0BwX|GUg3-xMl|M)CLXHE>mwR?6MZY}Z|j5_VEJZrvRgeb)5%#LCB1i9@2 z-&|M@cotSZVEWAI6rFi844)+9Ylm!s#Kav}chlP574{L%j2VW1CF7yxep?7_hea9= ztCZOBKH-p9-QSO;{9rL6qXydomn&t|60bo<*OJ7xR3{3pZ|J3wa10=nQg=HZ)DusXOXZCm=-;zOFogVW6v|ohvA!C z@b)2?ABJz1akuxTZ36rO;%?;*B@oWcABJyn!Rwws1~~LS;J&}= z?>lpV7`{!$-FrrTLb!W+av_S&Y#@g3ka4#ftuqOCtMb_t!kHJu@E>K|Jz>{r!rh~P z=}I^=gc!a{!Y#o=4qPK;6`WD;IpNF|V)z~jHwCxe;Q?bFb4OEf{71T`WhZ4AzE8%z zH;lauIPA`VG+K5;*LBQUV)y|W?^);|=vlK^<9eF<3Ih&D9kZ7heo)4JehIDvIPCC% z$8=y{0ctz*m>8ZV~<89`GNr@<~uR`xQyF+Jt$1Lt&4w0 zYCAKZ7=BX5?W>-^L(7f6B#$_7jt`DGPz?V~#%<*q;0h}$Z!4a2mZCEois7ea-1Dqg z59qq)*mlp8`Sn+Zc~J~ME8~{;PnCe^V1&VcS1z-aqBBE^;pbiOvVq9}f&l^lU3`kZ z#xYll;eWW`RUbmdbE8-MoTdwIO)>m}3tr|ttnImY@pjbn{Ll@wtz=el1IJ1WM(xY&_ zAsPR2U6jX+v&77fy`eLD;iE`&q}3su9mHYPxhdn0JDDp04?x^;r2SmNja{f)GVb5> zsV{WK0>u3*z4(D}b|i;Iza!&oCJw=*R#bjXk7X-#+<7jC;s46GwdRoO5M8`OR@1V= zI&SDf-IsCS52}>|9DFcPsjq@`fp7R5tVbWpc>cGi=dEixF<@LcNvo$o}oU0iTA^BV%hN z5pL*0<(Or>#n82|>{wvnf(w;&@O#1yU8o#48MoX<2g(AAKK%E|Vi zT50G)WK^i~$cw``Po9<8OW<+|Y%} zDJJ9IZk<6Nn;|!Z!#-EW4=3Evg~}-*<7rpF`x~M+Lp*KMwFiV7x==Z#WZZhIEv%Qh zv(3I|bqP0gp>oQ|xPSjU{{k*%8~<3lIF*2U!O(@uDJSFJZJ&Wg)@B>;#^?3f#?Xbz zak;P6-zzVyFlO<}_!k;^mnv`QLgiGFqbEl`g51chJa%2OXTD*C8@fy3zg$?Uu(eE)0+Z*5b=PF$NI1_ zbfI!SklVhthacz#_kD=3jjWN6q8qwUIWG6Lh88<<4%*%Y@uv3%jV9dCh02ldYc=(& z9*2|FpNRJ}cRNM6p$nDca$jrL$3IjCT&%ENkJxn&%+Q6(@sZme;kB+BRX!r`C5A3kP8~VAwO!uH z0QN`RT5oO-s=T2Kl~Y&76F2#{f#~ZHPyBk?--H{wP&qF5wQeYU>lzH3Rfw;@yI!9v z4PB@lm-|{BhbLj%Mdcl}z4PB@lm-|}x1O&8(=x;Ilo}WI3F9#HWm=&fWKOFm@04RLgl#J*BagR zQ!wl`JUVD_Z^8{-s2rF3T4PdwKTCK_!|(qh+|Y%}ak;NGrg?FwwiZ36$`)N&8M;t8 zQF7be$~-R(_&sd9<%IiTEX}IN$yN#k7x==ZZGVb2uDwsIA(XGWt5N_x~<;eH7T7rAE zPA6p*+`=oJa6=a=$K}3O?JI+jQ62&_>G1y{|PB^n>`#98-^%hhSgR zych8vzh2k7&d^56Ns-&`v$xG+z`;_074|!ihE#b&8!5--rdR8u$$bGA>45dOUAibW zw2^XLZhH0U{2^`^h)l|-;gfKRZfGOryN26>w&_Ngp&69ZO~&mD=H(;YKB(Yqif(8I<@AtoThW7VgooTSbtl}= z49fXP#yyYMT?YLZfo=C(`S2CthGtMsZyC2#tOgI>B5XMGzw5>mZfFMO^mW0D{tycI zHjHk*b^m{xK{@?g@bX80*Q3Aq^kHsvV>2ix(*-ZOFHFbpt?5TNJFLVql7TYr-|O5J zsJ0My{;@wzBAlIAV)$Sg_uG3ZkZ`{Rb~63>u_cBN(QxP4C9ogdfHz%&vrCv5zzEL$ z$MEb@0G(Z;pMS``WH_NqX5U_ey7aH{&QYewK7H^!ld+qclcv=L{+{!~`4$CTI3En{ z*@d+TI=A>+@fU*&c?xRhzjV-i>qVu}pf@15gfZ}>#eFFE7#J%2XvRB-sdUnmaBUR4 z_?FceGT~CGr9?7uuOI`K&3XjkenB!|$<=*CGF`7ABO?7llWKWrM8w~?PbF&0WUYd9 z{P7VwpMx=`<9zm7BAF~xkU>|5<51a+WYDF3<8n#R8zODhukIm|&1LV9PHWV4 zP~Fe|1_l*00S48rQg{gae+??;iYEM#e>hY^i0_2oVsJN2kcvUY$bdzUoAQ?jI>od`Ztlb zit)QBreb`stIC2*rh?Dlv0Q@L5?(^nXYe2GAH&(QI?a}Fu(P&34K85sF|ehG42wM&FX(2q0ji0yfHW}{m=xFXLzAgcEN}%TH3;v6 z%{`5>P5XsHuti}13?721p#DG$Op5+t3os7BG^spV6|A%Xao6qGd7U=Lq^1^!bp@tl zlQ|~FhR5rV{r>J$EJrlQv^(=2Fk=K0UqgA-d}R^QdDVP@Ns%#eP*wO3G%wg|F9y5x zU(E|21dB|ec){3rZ&x+1wg~3@&1_TS>~>(v3FCv-U{m!JM_oivy%Q+jNXI3IP@9B?~iDXXqJ0$-7nvR?Mz1QQF$&?Q^ z*Wt6j3frF(&aCQpaGf+IU95f$s*D52lyo)$zbF!o&0k*pJ2-HRNpnncPoUgBg@3^u zljQe_PA>fq(i9ex3R9+bL0MST`GQ0;Z`wGfDZE4oXef;gFH*WNk<6A>kZlJ14Yjp2 z#`d(y3`dVhw3B(l3Nk4(FC0kJexfevqdoJ9WTvEojA~tdERZuXW>n%@y>FQxsUQ@>K@1U~H?*p+qw4(wH;_-q;Mo-cku`8+diwG9sC4sUS1g z^sE4*4?$Drs$)V4;!Da5O9h$sX>l0U7SJ8w&yRS6U&4uYGOtoWM(j=e5lErRB6f|R zNu*-wb@r_(q~hx#Ko-TAA!XCb63HA&Ma=N`mqXHJ>40Q-wY)EhWagxTjGXu07eMwy zGICDIPDCJ8 zgjSICM*ZgumTwctgxr|!`F|pkS%-?4!HqJ&?lm95n86KB3&jiLRwWQvJMGInaR$Tr z)?{BY`hAM2&|i$S{reBTWrDQbEu+6H3jM{%rnMjbMr2d3KZT0Iw@jhG7-<`p0(%j; zF^6t$NVQeyFGhNm-Vd_GES{%Vsj_*AJlXfZo{G)4zyKgmU=P`RQVtNw3<||l@n{;e z4oDF5@bk{L9k>M`M#8B<{}t0(WhaPujkLa3RG;I|4*M_CJD@MDMjGkuzjp$~yx=^Q zps20S@Nri>kRK_iPko#MSkng>sXm3-M^KXS~@t;3bm8TBW$DC`|efm!#bOU7g&~?Km#9(yz zFWz-j2>gFdn5rI+c2<7gwxW4p?OKBPytOrp5Ux#A_2_kuDSoV1bFJZFPxc zdDJ_B^_b?23u_L-13+ZztgDkL}~11_W;g9jp(p@8#U))1+X;7-#0q_uo1Nboff z(*0z$X`VzXB)F3-7<0Gub{KtSfh-tvebcu@DqeplX$oB2xCyiqNmJn5gX@S?NN`4G ze)UOfAjSNaIsPwPhQ#w!NN`4`)q7nW$PY1QT5T)LQyQs|;EaqI(K;H)3?w5y9-L03 zLV`0g_}p|@;w=S`3_jr>Or%1BGcxQ&Ah;abuhoS;@djH(tF1zUGcwX{Iu2w{j2YQ* zATGC}hZGXrNxJp+o_hr(_(%ZVdVkRT3Xuv4?j%huJIxD#m_K36mhIPI8Yf~ZBse4E z>V97iNSsYfaefPX5vh>ij0{U$0i)g07Rj)vgP0hJmJ8jTYvopk+xMETN9}e?~JtH8vzEG_B`#kn(1?bLcBB5 z<|uHANLy4*Om9SO72=(do;TjY+G!Re!SmAci$p5KJ0nA$Ux3lBIpQIYN8lHTBBnyT zGt#4C?_?l9#xdkk=A6DdD8xG>eV%NFBqjH5&If&#QcQ(-XQbDII=6}Ry5kV?2nC8l zyfe}#sX-W#K5^e(rkD!x&dAWvZM)#9h<7D4WN#HB72=(d5u^Rb5*aaMau*^M;+>Nx zGSRpYF(b0Kd`P51ymRu{#ceuyAObB(e4Z-t&dHH8hw9|u1T_5x$@W@}HJHgZ`@Rp5 zy>TSirmy~pNQHQ3ra#C(z|sTP}`o~DPw?kt;2O) z)xJ|n7?q$?b-8Go_fvyKFt;zp81t5g*TkyAI%xcX{qY0|FEH`On@*rp;gl@s)Z<-+ z3PYUf)LeOv1-F!NbH){zflT>8;DA`o83$XaT688>8Qx05O-V~%Lx!ULszuVYuHr4n z=uELPJXylc(Qlr6L)#%k1KE1(BD$NR?S@C2kGGX@Q&^SHaeUyug(<8|;tzx~?aHFJ zbHRTo1`|y#J};jK;Y`3Xyn~Fl2|NO+iFUDQn>u}b2xlsm;i)p7RQHfS;D2G|ld2_b zC7elFhIf|ns2V#i0X`M+s6yjKW`jM?^en^EWjrw;p%vg85KpY=_kf}^QOoeIG9GZL z7vxmp2a8Psr%yK^oGDv|Yu7qB$GrQ=+SkBS%)c6fyPtfo9Bvtj=g#CU!?kN2oOr>Q z$18q=L0bm!f-#qSenB|XxD3~>b#UUQz~zVLK-&>F1y27rm2f6>8LnOH!0^ne>z4!m z67kH>zBoWQQ@ae$kh?CeN&hW?*GD|f<5~dWO!6|kzl=wWTD}|bzKBQkPs1%#(REDs zGJJrH2Vd|j4me0H5Wm^sc=AW!O#Cu@kc@}Ds&N=_Q2X%4J!rI@aHfD6{;`ZlMtH-N zthq6fb*je`&SWsdhf26x@7jCeq2<9T*{ye_lJ0~vEzIy?5^idlHpc?dAyEcF+_s-c zs;asOxzF#?7VYzM2aP3+LhTFb*2$Qt-6^Lz0jj6enH~!@HxOS}r)8KjG zso^Yr2{d>r{O^Bg@QRWKkM5BiyA6)a7%{o9f z5(Qv^iH}NSHY@_OY~-E5dQ5Z1GrV6eALN*jh};XoqXU9uiHI?2O4`xm95gl>Yn!xr z=2IeB4q{B2V@l)Yif%Z(%rQmQpx-WHvh>54G=;1jDWp$jbxdJiu}2i zr%vuZfZJyxCQCXLWSiKL(}5ITX`AM5=*kI_|j2ZA(5~gLMoh-L7 zCf!dqOuPzd1-QGAR@8f7B9f&Q#$>_RLVxsu(N`YGg0Yqow}@mJg)wOg-0|@qXeW}U zz)b_66UmYZ1)2HH26WBeAelL9W(gu$9-$!9ViG?GvLTXb5pObxWGRG#jQFa@Wgx|- zX2gW~zY)o@2L%~?uRto0g)nCDjl8poWQl`<40rqaCXgUQ;NXhs96Cqhd9s{AK}NQk z_yLf;kc^BoKPHl;3&x~dZ~K~4kST!RhD@Q+Fg%hbVzNxZm^8KQQ};Z?gd7W!gzlf{ zZ#GL36l7e;NL({7yCgEYZv#XeEK??NR|sI$l$V% z8Uc9-Ya3i@4b6Q#4N#EwF+=N6-`Yox8bUGu53c$C;Sf!GDz@Ffjv|tYe^tzv70ME6 zfBFm)Hqk>&_bW(Sn@W#~w6)5QDZU_?1kCj)r| z`_^W<+L1^m^cAE>%}-(0G!I46l8KCjQ6B$CN{1?lyA<}4z; zo=?3`BvbYZ(kFEv%$T_`+f6x0Bop-tGBoB{20RtQWUF5BNBwWA~MFm6z>?}Pun1d6>o{I8e<;eSmgL)ZL0NwFtp^uUjY zoT8n{I+*`&Io0SB0q5a56;)l2O4H^ zA|8DC?E=D?24;AmjECo0=mU5g#KT_S{*-Vggc%+zs?oT+$J6zlf(>fD&eM<8Lf6e^j%o_mR*KsQFNw@86GC%arQCj zZQx{OifgbD&2tf*iDQOG$aq+9@BM(MARd;|Ug$r3?o1&wyt#~9KQR9RZyb0cAd}19 z(cd^GlNsJZ#zX%c0BfQaJv8e^9;!Uk$_$T|@sx?@V2w0G_knpnQv6PtXgd?k43CxZ z;PS7F0)7zj;G%!t%#F@fGs9hsE&FGK%+&MtVQp$t<(YJ5xV*n?vK_3B=DB!qww&#-< zc;30|Ae_l*hPRb*Tb|XhX`+4b8}j-Xo|_R5j%jL!x07)XkCER4J_H|}N0l%nT|ks>eZ$H5T_Jpo-qqsHaD!K$Gi7v zxe(%u^|^cGtc6f_@%aSP^SLM8;V;KqVAG1ry+7~VrOU8J!2<+MKPwCKZczr)^sJ2a zScZJfLV-#7yZ!{iz8MrzVB(>1Yp4t+>{%Hbu?+dH1#`c=nwy9n|oyuUcpOqnUl27F_l9EPQpp0wSmZUOET2mQJ`?E5H z#v3b_5oPZ=AIg9P2z+hJ9&{GPvt<}m?)Lue$u|OKI8+dpa}Pq<ikp& z%M4frSb#vHkf@PhZxK^d?T!+U#uVjC)hr3|c$Q&`4axs1rP3$vjNv}H_@o(IyX43;;r zGR|Nb^Q1D|ddG&sbIF4$(5-jL5-q6=mOQXB&S4qzr7}z{hg_--_1KB^Xql9PN>cO( z%OF@8zhfB-VlNU}cDn%f)gTVFOktK^c%oLZ1dsO`$Sa zF2TwWw#rhu46DEWFub>&uneE4YtT3n^Jhri@tVqDSp_TO zD*XAxO1X@bsa_kQ9$T>OD$L#_~#R=cNr>R)$Dn*2`tse);}SD#Nz0$Tcd1Wg4suu|>C0 zE~9C_r|qZ=`-R$YwpHs7mTs^z?qFNKm&>rFeggB4HpXmCd#$1}SkA%9_!rCgK`z6~ zt$!8hQ!&Oof1QlGNaDG$#DkS_AIsP(mtiaV5HyhXV>ThTH&vuESoXonz%DwqB2+t!pgv9@Wf8J3~Lb_r@24zc(ZT}mBI25R>o5-<0rWc?{d+Y zjEH)8T?+b|%3#R|E8{tqv0E;~r&sKDD#Isi01iaarz|63WxT{P_R3|1wwbUFo~?Lq zLmT8TL}jqFgq4A>D(hh558TOG!j)*lhw!|+T2_9;(QSQ&Y+ zj9=t3Y#STnS_#e=^A=EEumZ&Xx({lvt*|Y655zxTg1<6l>`Z%( zJ=Dr@;^C!Ncn}_*uNqne0%xL_;g4lJ>DEI`74KtBl5PZ5A)IO1cbeb~9QE5z`1I!? z8Fl$@)PUFU3BP^(~!fLcvoK7nwiR-O29vxFCn?QrHF5UP~`FBqG!9#1ZbW;3D6a5o7z zjXL{z1sG}{V&zBuHf0FmOkXN`Enh>B#+wBM zS0%hzEz3N@*&504MlQJD*seNWJ+nwI&X-4qH<9s(oA#!JN1Pvzb_Q0SuZ#>2(s1Wp z3a%HIRUZBn9H|Hxg#{+=s?&yA!xk&HN}kpy`T~S>YG+#9#g|2UC6I zYbd&Bw)qj76o_v^_m2Wmg`ez!3!&mmHN6g|dDn^*hN%OlAh6^v_~JMcB(voBw28Cw z$?iICj`7L70yr+}=9pRqdQzOUU#i9uHu&Igm`>-*hgKto9=zg9_}& z10w;+puCS)6Uh<<2^pN!`#T_$kPJ@L|3M_n5$u!tqsZWaTI*&+}9@r-} zF{9dV1E2fRXUy<5b%ox$fG^qDZ* zjA~K%WEC0-=~v0;0FXzK^ef-SHIw9dkAyT%i^)T4Yn+^fr8MD_r92YSaK>p8k%p7k z3`DYQM?#wNw}U;TTu)Q((cOq-iH?LcbQyt>TI>Wv$CTqlvK&W3R?oBW4Xltzs;lRU z#g0BPPgZ4-kcMKdY5)mJ1T<^m3+Y6%#7IKAd3JLKaww8+4Q}G&bm5a#R3xNFQU7j4 zdKCP3IgzZ6A|Y#384f3s;WPGOA24eXk?wu#ogtFdOeADL2PYIP;$8`8 z(;NFN#XMQ=Cn3$dCjUUBdGmvgM6$F`LRwsgJSNhjFQlFhEaQ`rPWPS@Y5sBs>s&Zm zp6p3T^Ui2E>6Lk!HwWz@((yM2%)3v210>X>;B?qonC|RsbW6gqpe+g1&CF`Y2s9!7 zv0LpZVbd*X?%oSNG0>r7uP&IpS-Yg%jV$jk2i{wFOSLi82k##-4wjcO z8<=rtWO<3X#kuhqr9jp}p0)ewJF>y@ENgC_G1z7)G@-i>`2Y@^6q2o_X%z@($ri)E zwZ)@5_~iq9J>t>1i(Mw1Wn63q4{!#nV) zY&c~^<$~ur&a1(MQ$`{2)_}0VvM^>tBrmBpHgZRJhr~lZRs?M14nNfyAC?LmEFWVw zp5Qn}+t|>gF8Sp??5sLCm(<~B`jZWonX%;@V~d-AS!#skOhVk;^&NJGi6O8giw)ro z4q<|=ji91s^%hjmd8!!MU`Z3R@d0gQc}qBWkZXRh0U;XFr{b|clMR+WF&m%I zhV84u`lOD_A=S(=3{2>gboDT$RxZhLaTCF|fse*Q8A+2H{^SgnA~I&!&Lw8tp@;C- z(&2AuVj};+mM39@rBqfM85*>a<)z`M=5<}c2HxzNDA&gI$OcQUm<^$-vb;I$S8XXC zt_RVE?~7|FgK!)?{a`lo;y9Mr&c!%;C4@(19L9DX@c0pPVTlN{ksoa=wY6cm_@f)y zFnm9{2H9XK3A0fUZ7jF7VJiA~4%slCdB2xzu;hf%zGlyU^u)c@W$!^j3pJD82)IF8JhW353rpzC5tKy>ZVMnIinTgV1G zn3;`=Xk)AGT+9c{EG8S~geECugB{V#hLHQ)ZEaWzd%%IBjKjRS$p*5)4r^wkDvo1k z78?aaAU(;nv1X?>(*{4bnT={_Bi+`9`A{n?PKxy~w;h79QtVT9fHNDoeKPhaHmr{y zAX|323F`^}iq{uX;eRXt*gcR-+Z@Qs$NjAjAlR8|jeMt{3$K|^A*|OkFe)4p*v#0~ z^rbjXAY-@x03xHVV#JCE72gs`c#wYYE}TB%>^!xOA)~$xt{XjMZe^G}Cf~Zz15b#^ zi8wn8d0N4~&Ko^#_0Irp$90MxJaIlbX2&3NoTWThzsL>9yR?5HUO#WoHH5Phkm0uF zIj4*sxAE}X475{5CkuvjF>QAEF+8(8XI-__tGOpajE24$IJ5q|DQ*Cqw*529XtQb> z^PxLXh){k3!<=3rn7p$yi+K;Q#e-L-Uh}@OFf=)6V`i(^M^as{qHiRV)bKCR1SirbeX)P9%eIQHcU-0 zd$#Sl+Hmj6e`fALZP?k88ws}?_%gCQK@ar0RumQ^46kIs*8%$pXF7s;&+_m*@X?)D zga?jYHiK~cAkO_vuY?!bhlfuV!CxW?r7cgL*&?g z$jf}ltuDHz-sb}C;37g60ZIS9!-0g`4|%7>MYMW%%82gx4nkfU&`ufoe&|HF{g8LY z2G^vft%WGBuZ`YQQ;vU2xc!iK-WE4+Y!eJ~hdKnL>Ftk;loD6Xe#pCEiwCDh9{^mG z6N2-#FIK5~rIWQ;MSBbFI@B)fZl|Z4%aUg{#E|5 zo6=RbN$Kz>?gsYn)WtTnvl}2!XC`%G4AvCMDWg|MsE#{t0>4ff9nvr26#jzsw|mE) z&1r*cQg00D3%eGA6%7BxsS||Ty<^Wh+v4Wmzq<~7t&#cjQt8r%;g+*En0*t$4(yIc2cNn6}7$|Z_$!@wmdqJ($5TlZ{f1-Blz zS$~wP`oPf7=-tZl5_%xMBPVk$m9-*xwCGy3S@`s?h%g;l|&-Jx$*2 z?*=7ZXSkvNy|IKF+$V+-ZhtofDTB90B1rXfdce}(gh&MUv!h6){)}Aa7iFWnC-v=R z8;2x!p`vqe@y|B5F23IYpWc*r_?iCQBmTrr2SEu@nku1!E>nhnngiQ51_tdirC-gT z&~86i_N+mWF@xKe0H%dt25es-bLL^&o!~vJrVduQAb=Y0!8_)mvq9jDy?1$w7W=TZ&Y`8NZwbp2sgeGCh?A;>CWJ7h~?ZI&qbP%c; zyNbwMbL~5}`V613_a;mhh7Da9Q%)Wvk|pgDpMj(E>;a#Uyh3?3b!=%OS-vhIgL>V^ zKq|KsIPX{DE z!!%X*0l5sx&`&dt5Sfi)NIGPRnV%Mo-rfL9i1rV`0S zfql{`W6Z2Fa4PHs&?)1)Jj01(*@b;Fcf{mzJ7D*f2QqiWm~HB4S=HY@sqtOd5W5qq z0jcqwHy8^aVxH_B9|_s-P{ZXwzC^O$!SPtu79=}_BxI)tdH)3x4^K^}J5MkX6r`ko zgY5+Kwf2y>E1%vpU-^9|k?iD>`1F7K^evF3(5L^a_M?fE^lvbqmJ+uhoG9gcOYsCu zT*PQ4O2ta*lg{jI2}vtF*@EKCNf$LHFr^|HZOpb`K^5wb;%H;GHpcuw_+%nQLPiaF z*b2yTNJb5g#a>`RvIhkc(lUKq4* zDe1ysq@_&lMXJwImKY)>T^Nk?8!~PI++}~FPrsBKJu^vuj7sKdJkqi&_{6BGF&^Hr zn|!j&MMjqL_(vs6G(+_z=E;&432AEA9Abjv)71JvF(O&MA|VZnl41WSq~V9dSmY8u zS*ju-y(`780@4-d>0M#l2O=fC6l`rhpI?~=WIZH3pH#u8C&H(sBZ85BuWG>os*rw9 zKfWbW(hJq4{6msS#!GXZ>NH({AkL%Q%nn*xFn}zId|gL z92mM`@{rSQY`Td^NlwSeB|c4{(yE8;0Xbd0|trI5x8e_!K(HaCn@Kd`faU zE9o*N@h=}pdZWRm%ao2eXt8;s%$LkcYWv>{Y5+&^Xdt!yuQkQOmbiH&iJ+C#guJ;8 zn^^fAXvov;CL$$?pq12ykDLPsjeacp3?KZxdaFwkK`W^V9J1~-_=L?2p?i?Kn)ON& zK}H6}f1E*NQ1lUe13}DFk_a*~er=QKKpMcMCVo|abtgy?K}N>r`aL(0BIStHeEf}k zN)kavhCaDn6UZOYXXyRaO^B2vf{ct#`#A#0bR?sf?#xG|BoSm}{c52_;euR7vVMiv zpNNzsf>zQgW4IGsOJ}IoKq5Hk*#sgbiJ+Ct9g(tP7VN&VK<19<>+3?KBoVZd8sEu1 z;$fauakRc;x_nEdBoSm}zg@Sx0SWC|kO*#iznVx%BFM;27xwK1Qb>YM$GTw)u-HSA zM39l@^Jh^Z4nd#hGpB|TDMHqgy42C6;^uO_>B9W3rkdcnx!=G{QkDoZ(ztKp7VwEtQ)AqouNnE2B!ZmG zzrv!DPNmc|N0JCK(iHs-?pxv0)O2D5`IIDrj5N$i2_n)kX@M7!l0=Y^-lYy=3RxKE z>0NBF8sjC2AR|3*ZYlsIq;!x7UfQfiYDpr}!|=MDopbcA<#YX!ppi0(2VvSV_W{)3dC)3V>^ zYTHhu4WCmJo^0zOQ-|bc!n2wofS5Gm+Ec<= zhQsi2qSnjspuY2(6CTuQ-weW8n!|9VkCEZAWh0=>p?ihiV+*#OPB_b07_PK1GCV9t zn+||4MLhJ~&BKJVw1weH_aeii_qszYRzA=Xz4^X|aF)9;Txncnc>TI{F|=Mm@AW-a zwjrD)Fbr3E7Ol8b#@H{LA&Y^+6l5`@`U$Oo7mj5y3|HC}t$6N;>4#z2a$!{=cf_ce z+~l35G7O(hQgMk}sQI^P=#I5{Q)txr0(TitLhS75l()M&*uF*_PV zI;DdVK*F$jV>hX&mVH^qHjNjN*38LqTXGTg8v7aTo`cf*1zbqHq%G{cq7Nrng4udy2NLpb-~ zT9F=vvona{hivB_Ja&^##Z%XdGzgcD9YhTOJqtcN^rMPTef3ACcYYc%{Ad=uRzpt} zuP%PE6=O6%k{Etm!L4P6tk0>EQXoyr1CbZxcPrf*T8ymEsqjy1dsDRGV@E-*q{rM> z8{U7BD4*hD*grC|w1@-_d$1g41IGp&8U1$VCGYl+j4Ul8LG3=lajD=zp@Yg0ZvV)* zB^HAn(y@6xL5}NQp!XJUt}Z6r{*jTTMI`j)no58#K|J(kYf;|Bx!XT7vb2aquj}Xs zxQJfS3j#-ycl$?1mKKrvHBK*vMTcw(j*L=AUJ-8p$gph@ampAu8d6o~Z9qF^^qbP0 zaQjC_W{ZgWKrDB}@D}&s$Uyy(JEHr2@kj#aZvV)5YP<5O@9?_>`o=i;)MwXcl6T3G z!LFJ4VvS<3Y7jahu{zv*7T2$+Eb*k&Se*0SCfxp!@zDm?Cmp^!9FC0f zK1OK^lS@0?4QHChqhi#{DVL$Mnvu$M21iSs1OT~*HdYN%3y&qyX1WH(}oJZ+6=BYmuzT?49Lm@5wPd`a;Vj z!1p2^eb#)CaCSyXR;|9zBWGCZ>qyr3ZgieVc0Ac9oib*%f_uan%fL<43P#>`<~#YDN{E1U)5sFC6WtLbveN7Nq1nVk=~RG!yoe z@{MovKYyJglAT8qpB6VQmVEZ0PfL~dorz>ek$qC1^zhNoa0*QUP@nX7=aWRTQ^-E4 ziP?V{PJG>Q^cl0yQjkcdStMlC_*W%?oPcE1IL|Ibva?4*`b{W24R%5Xl78bl zwme`+NaOiLOw{q7)fmsFzbBvUtdfznw*I4%9y;t?7T1#VTu=7W*ni0XB|auqg~~ymSeUoVl+l6MBquHt z6Cd1^H4W5;FY5-+{`9yVwc$Th@FY?a&aI>-aK>=Bd35c8)C7*J^pHrq;rvKu5+x2O zxLe`7BGZQ8{%9}$_rU&t5^gt~AJHqvpB0bwD;^5?8^mKP?Zc#B%-C)?Kk|(&9#&?- zDZrN_9+o>9di)gJZa6cw;hd4?`%fUO>V_d{zB5W)AxSuAq@~hiIAxUzprxGCaT={8oLfnK z(yfV+5Y8uqOMTMiSh^KQNW!_5)WrNc7{aRV7>+h(*FsewLL`otvBTc;m`w?mC zdefUoNn~cE;pa$DZOUj3%detp6Qh+xW<~~kPnZkj@3>6CjT@dJQWBXtIpZ6kGRcY0 z@S&jaDT&OSTvQx#kxX*lm~EM)EHZPl(N8FDmC@F#->jaDqeAjQRKB zn!$1Xt-AF&*u?f>-BBqCY=3v;Y| zzk=Zjm+u&1+-nd|_-n>6!X-zjmDB_td~_NXtOt;qzypmJ5y_5Ferz)`=*qVGLe?c;A;7+XBh|R^0TnQQdc1aZ=_ahnoO1p+g$!W`$$@KZ{7a$XnG<`6_WE7v0 z)7DBlWo+8B2u@oR6;2r&oqG@|Ic=?Ep37@zbcNl7(mK!OpC{u31u;*_X=^1lzCRZJ z8%FDfqxGFr;4YD@pM_nT`L>rP`O?DDaA}+nPrk5Ey)=@;nmO+DXfzC07l34^n>99( zW7gEd951qUY;l`d0`QTDTdIuvop8xn&m8-I&Y2HL5Jb?~^6c*SM6%8n=2-bG2g5D# zzg-4=KjN0S*XsQvNfoT5K6!fMU`Q2K1E^1)JO>{ui;E;l6|AJD)y_?@!pip*TWvjy z&&mWTNfj6wwKng!Kti<`Qiaux(}|R%3XHVOv_Ph+n~9`l!m}nsvi26XOv=|f7#@_X z!f$|=MLh7sm<5Eh9v6oHlI8N2J$6X-Ui{z*!dasW!`Iv5e&<}=Au^sr?|vC>qSW*b zY}DH+&Lz11|9wlvdXAYYHOK{yC*$8RRq)$IjwQ(vo3U|PO$bp6X`EzIV~r#^Vx(z* z+s;Iq_I4LV6BsRjX-^WR3?D`oB+~G<3_kQ18$*&DF`w`vyFZXn$%Af}@O4X9(bR5%+u;E-G?3WY+S+@I6_s&%5}0g!}!Qnwz|{z88k?wZ(lGO@-`L z@$NfgT@Aun^9#fG+v0xbe+6}+;C{!O;0vN+)mR4%!w=fx!Aa#XWd4D35AGRSm2gR3 z$yP1+j1$zwU0g85=Y=;VGf7!q$;s}0KB;84G$WCcypoY-A9s9W zu?gpCuD2T>6X7!P@4T^PI-x9+wP27n)9W4ZC)g7=pLfE3p#i|2B-69~41gwadnANT zT_6r8ac%qBnZuD}dRaaLuq2?)SO~l#6be7|3EVX?g&a#VJw^sy7>4Z)f($zSgCCKSOplTA8(Tmsp@Yx@ncj~* z)$nOQ)64SSf9xC$9#@boLZ&xyoq-%nGCk%vEV&!hWprzi4C~o=A(4_ykCD+&Z{sul zeMm;%AM8w|B-3N0>GjgtKz2jY^w=aSV7Q?rnVyw&%2@Yx4rF@JHUyd8&yjKDQ^q$-7LrwDegd4CA zMHZfXa-Di*C7B*`-0AA>qu^L%|DE=mm(q~!XL_$~9a}2ZJ_Gm&9Ji&^HZ`}EWO~f8 z|G!aKFfWdz|HbIBrYfZl-rGN0wDCS`MqCig)KkHBq#i>7C1^ z;OOHmOWMj_hTB)ka!uc)shPDTX=8IYj(?6}L*&QC)PDGF8L{4yq>YiLJvm^?nLf9! za+I_&((q~@ZcE|Q@OX%tlS`5|MtYYG$LdlcTx#$9zwMyW+D+Qd6|r4v&wE3h0I!X> z=h;eX-eWguJ6F^e_xpQkCBpsAy}wW1?IvyKvXsAlr?kIMxbL^|dcy4{ZRfI-zx@t> z2O(1#yx-xbX|7c&FOVB>p5{_o+FbUNwsTdKWwLe} zKrO8d%vN&~It|*xf5*eW%0C71KibUyLj$AJXa;EN+SC#=KLr@uy-P~v%>VsAn+^Um z30R)u{O3!PG`H~hgbd6?SkZTeA<2B$>TSfex{~VZ=p|^gj9lE~G+AUNK~Oec}VxDL{rHnfQ0|Eh1UT zlwTJ{rh7edgCk8mNJ?)Mu%AelLrciQ?`y(V(u*Xk@Y@C0x+Uhxl3)p0z2JSgakcQk zP@}1y*RvUsxr#ejA#H1qpZvim-U`~*ZjbOK65&&lIkR~NzKsN#p?s$>@b$7eL`pJe zMw&}+J4>Xw zVL7*CZR5TifZJMmDJbqk+8y$l&*EThHI+A*A$e72q)UN;iRBqRgO zO|Z8_>>){t&&ag1RgS@(Ez;Js(}~!9BS=Z2&Pd|AH}79v@WF7ate2mngy3be!zRd<3UJ!d`* z!DBlBSsr~Ff(~3DpDaC>`J6p@43Oe_T4w%gAySf=TYc)2|7!UN?y~jZQlFf0`aO}7 z%-l+967-{g2A{8Rw5`4##w=M}PscUbb)BcB!%paf*!vIy1Wc^_;e(r zE1tr4(QPQ|e6fd&RniZW zPl*O(q<8E9)PPW5fV?kee@7yj29(?@UctUyfP`JI(Rc-3C{84ke-hH)(&jfJ{Y^%9 zBAN1&kiP#;I7y`MgZyuaWTH<(`d5Od8JVN?FV|YlQkmY9kiiS{Z3psCoM-TY_%Y;D zBK6qXhPVWw3J_#S&L=O4lt?{Jx(@27l7+|5&m?71kCDOiN`vai9PRhRauMmcK5xnU z04paVr?%wLj3ZL=n(A$9X+EoDs)gZ2`Du?qr8OUE;!HB}#b$bQUWqf8;fB49i#;!& z5gT4ac#%jSMlOHVJpuxgc%-rXext4`X zfD~y?;*n%E7)qoMBh&L*Kv(NwuJFTV`td2`QzCsBSvX^49U%80S@>8KR&2!zNu&=W ztKD)c3u{{!$!dSj?L?$R`dCSA!kcMufQyG6+Jwicw~3TUA1kQ|yu1bL2fff|V8%5y zDU(PaMh3k~!ZM;DgZ{nLgnUY*kCoJo9HWP{HAi`HsT(;o;|P%w>0>1|@n?RC0w@qi z8-M%K&XQX+jA>DJKImq<5{V`}0ckv@!!DSir%#e=v)F$M0=BcBrK!^nU#<)CD* zGztY2-iOsfu|g8*!^pIs`VN6Rdno!$TioXukrL^{NZ;LiDuK@$NcwIPjY7hwMEWo? z`Qb}U=W-&Me6OmyZza-)k)2&aa)VDZlAS({g*G;2o)YQ9NQ>X83P6rR(o(-#Ya%7m zhmnS2C7J``$YHpaP9i3(^B+H*NQv}eWYnHZAn$Zj z&}Y>4eU79LBlj$-3J18;0VMa#e2kBq#M(-v4L`tL&BZI0v zDGem-2K<%lPZNohNFPR88h!Uk^;t)&mbWC*hmo#h%fs2J{}+9_4k@RmtrF?ONaqR< zAZgGKL(;ia?x!?biS%Kl%cxhwft-M(%iyu)iIhkmP7WN=8ptt7=K2^jkVuL2;pDh! ze*rlbN#}ekUK1&iK2}mU=*_F+uoJEVs2lXWR2L#8(#J|_61u;~+Os$MOlVi8I*}6T z!^o=bHoz&UoDNlE&bA{`B7GR?cdz~yAYrah@4hjB%3Ct&!$?zu!3$uDuy^4(bgg{{ z$frd5Fw(dxBC54-gb~JDx)>#{5dy~66wQ8 zZ||1h0trzJ^1gBC6BHz!bTiP8G~JGCJBlt>>&29KDP7f6s?Abkd}T}Grt z`f&1ZuW2fIeV3{LB+`eIkL!i2BC6#quO7A+=KHp z-zl+yNQv}e&GJy&`hR_)r$>iD9cm36(7jhJW5?tH{X29T5Z$HUz%IQ9bnnnBta~y% zN950yxJa`7LXT!%Sf0n={VooAo^d`lV2I~ZOe$IXsm^CGe`YT?cU{pBSFynxr6-(hEyz?rUMxNWbbZsgB6LwBn_VFFNUA8 zycAeFxnoPA~#^#^t;odmqIO%Y+`o-`U`rgdgHy)wQs3LG8`< z6psRN@J#J799wPvlNwb`t+<$uiK^euizDw$@-h6AE$*N5B4{uz98{qDzO)*ZiF4h@ z@GrKwso5kgOj}$yQ|OmHEB=?p7B~J;5hJa@jfd{{CY&iihU;u`)2ptS9w^?Q zxc@{rlYtC(vc-+ndmJU)Sm`kQv2x*<7G!u%Tim;4EaY`cgRgh8!TtSWvAs|1IwlPnp4S%leeP0)aNpbS)cc+3 zLx$(K#r@q;Y>X;yrhEvucv2G#qij{6I(N=aK=tr4EFTQ`b*4zm9eIHgS;-61#p7^ z8}#@n{=`m;Bgsnf=lS4oXFk9KM;CHf&CRR&CyYUR2hGhZ*EbFSI41-vCNRkohA^h5 zmw$N+0>SA7lFQ%iDWZ~AZ7CtW*PeEQDHK7{dsRDp(jj1`e?_wJ`CEmFWI9qpR(mpeHLNY{T6h+B zztDUlnS``YYFlf^zyo{nyA0Zd4_l5C$<(8LQWJQye>Yg6B=i}0O^*sdtSu9c5;Evx znHfX|y-mUcQIJeC+9!2Qj_i#G5>g5Ht*w2_#u3TnqJ2^me_;Wfpvo^-#GieGbs*uB zDMbkxclFgSSX;6C;{M!)u}F|iBudE2^C$JBt5SK+Ptim&eJCNTzAFS-rgA;2K0Sw7 zw(!ZMp@ekvp8z{vA>BNeVKqRIOchGVm@2y?)B>BAL*$PwJDmEzyI<`vnH8Pu`GU-M38R*(Wuv zZZ5%{@B-)A>aw#t`DF4=LavJ%p@W?uqRG0jkLuboWhWt{4pzb%_*C>6wNGD-d@@ld zA@{6ap8!6gk^p*c={T%iiF<|VISFamyyQ6egvbfkbM2PbL^3HSA%hx*cmP=u$)H-H zr-@`LPC{CI3K&(NP1dy~k_k8o={jS7KDd;R(WmRgRLm&EJehWrkj`$)<^eezN$1L* zb%|uMO+va%XoNl|BIz<_NDd;IVv~`n)4BjTR**yPVrfW>mWeePIkWnDAR&r@&&frx zG9pN()9jPF232cA=~+2f8dSXRLnM=E_DM~`fZ34jX?@UVLZ43Oh-B(aLRRgzxg0dcF#soq7m;RbaBokZ`()W+bONjLSZ5|}W z$_g>9B_aKF_|QV}>G!eyN+Oxel90h;Lhb^23g;P|dgT+5Okv5$f1l$DDddBF#fW6$ zN=Cl8yIduo4#ch|+zDJ)$;i}Y!&Gv3dp9DPq>_;4=ba%2Dc_|tKVFa36XBDossE7H zm(6m(EtV5j=O(;t76tzWHJ$m7-CxTnV0{+XY+#pxP~DR~dQ+-fOyA7&4u*VK3wi^T zkuC@`Od(g9GGYp?98MwgYHVSW9pq2obmSQ%l<2bUsky>3JRvoTO z9kfyHNC&C|@CS3uhDdg7UrW`tE_ovb#<3PmXcO)nyH9gr`ij}8iQ~xfZffAOVwlN^ z{5tSR=nrIrDJ^EBHrmMYf~vXjUASWv8$q|9V3s7-lxZ$zLmc$BZ>j1=&Nudkybzx} z=tlPYrUThv>Wft->Wj(*+vf52u0g`2d{Zg@*H*&_XA+DJ0UtW`&Mr~Ug$zNKnf!hsYH;B9I72c8! zChnLG3)-k_Yol}3hwES*L1?4X%g!i8#I3?)9OY|{Mu#t*3EFQjCs1P=o z;A1vI(MChtaTq+;bp{)y(T2gP9ZEl8gGoPTBOGlswzXlI)C1(IvOg?sdz#1w6M@V| zB--$_v7t{s60#p|dstVHgL6xvOcLW@a*)|*hBmxyY-n1&KoOw>p$5Y6fU{c2XTp%# z5Q@{+*2cPaQy?955@B$iXHo$g2a|}*MhhH=zpag^v%_-3I3Se;vAD75B(lN8BC~-H zOD^Cy^8Qnf-1F;vl&bsD#-0hqz9Ab-HZmLWXd}SZhUL(!lQ53iXu~ph1a4-rrc6LG z8wqG5$ks-Xxi=L2bmh@TQ2w+_WP?dbW}^+-u-MwLgt?wk$5H9Xfhk39u{tE!)3v; zjbHve;NLt^wI_ zc4|?D)|AOmW}`dWh_zajh?4qdwa3{4(n#*?Y>Y)4eX`j28h%!_@z-}{$p#a)%*J@M(a+XKNbWda)y9o#Q!{OF ziOXzEL>tMrHiBm~$9<~IrT4lDWP^!aW@9qi7-(z5qRWX7N`(9|pRa=(0Ix0o&f1CJtx}`95+&|) zB$?Wlkcl7NS_26;FFc!k-+U4IWExvSrZ@ipm3{pUB-0~(J`l;2wS+9xVvroc0_dk||~hX|5hWib%8D+A~Bloot`fjoh>EHl)dw!KH5G&N&`L zGIea9)WpAifyprhFnCY!O-qrv;@UD{EFoKd4I3~j^IJDUkq32FH;GzLg8QBs3NJWD-On6GjsK1L;1D`XIjJi8=G?7ehO2|DA^Fjf^>31ae{O!G( zNG38Rq~+52%it5@0!Yh?-kXVJ(o#YO^*vh%$f`&N_1Y?w8m-; z_^1?+C|ouE1wtqe@hnh6np(ZM3R4tU#S|a9fkw+@qJ%VF+6vEL71DU&_v%D4aVQ~8 zU&dY{()4LBru-tBFi9vOjrAj25NWJCtqhS&2ueur4kJne39AJ1uie{kiDdFmLV9&f zNe2?*0z8{+yR|lvO!P@e|8`fxi1csW|8F9h)RT~YxrXBk37>wtZFh)d0#8Ev`~GyC zNPo|Rn}}qxPC^E+=>%Fsmx1#PPFtvEZ%oWd$dICYAiq_}5Lcyh1@|qJa5A!TZ#Y*n z$qF5Q$s8>gZW1zhb$?JCnWJ6$QwbuOT$7NN@-Ll$Jb?4Gl)Xm#mW#Cikk%$ouPk4c z?CFF-e>0jI)TQ}YT5Q(j$xX4RGV@wFLu#e{8_9Xi|M`_jiS%LQin=M z;N3MMCDMnHMYL@ovDfcMvhe3Cs>G8>A4XO$-x*mqT!{6eQj5hw&jD-L-#nHw;Z~7apkVN`eeQH`3EC)}Ev|{(Q zbcs*{lSKM3vht3ooOD$xZ#jvNmqpN*NFPSJx$k{Sq+8Xz_#jr066wRq{*&*kWY5=I ziIhkmM#e-Jhm=G4<*k^AM(RN$kv@zJh%a^u$lkcN0nziPlTV5CVPx9v?-#+HEebwq zSKpi_QX+jA>0jVJq;tAj=+pN_cU8bhqz@wpQ&I&W$0BKIcR{_&B+`eGhF0H0!ASX}h9Rc@ep(@k^kJlB z;lYkTip1VBKU$rqMEY1see$DLA-1XtFNxiF&R`qz@ybZf}AosLD6wqHfeuW4uKAFmlf=e|SFc1W7MQ zpR@mphEBYm66wQ8%U|Dq3qI!~Y00?umF6jtK8y_NUKb>Y^78{h9Vav*QX+jAX-SBh zruvL~U5iMG^kJmyUMCRV`e!&=*IhfKiIhkmMmh)HcLg#PNoQlT(nLz64{N_lUJkqOJH?E=yt z|3<>%F6#A^h$co>9T)H;#rUeDZ>gD-L^M6a**vzEy-jh0;BZlD1*Vvyd1lennHQ_gA?P@;brY5H(Ao=DSMPqii@(Land*4}rMNTWyf2Q*rV{$Zqd+uHkp zEQt&3-Ri!2X(alGkzTDj^Z>F6l3vlVxyYwP|1i?O<(>{i`Zv2*gh+}0VWjV;!kDTG zpT4h;&nHr%e;Das|0vE=kp4BNI?_Lk4E|~CKR}+rc?K_Uzk_^A^baFL3YUP?Mj=D; zdz1Q>=^sv(sXb67OEkNg=~JeE7#Y0edOIS67tS3|q(uKP(o(7w+-kc0I8RGa^By7{ z_h#k-EDETb*?Tlq!rr5)%J`HDTuOd*4R6njf!5p8zs7mElv*fJU{Uuwckw57o=UY7 zVP&ie=13@-cnOYeNX0Zc67p29igrOOW#g$-Og}Gt5D5K)Q1wnMoJOS9zQD3RInnsI zG(G}k2_$_q1)YhM2rNc+udse)=HhC)mptB#NQuB=WaNEJ6Ljs-XXMS(SYr_Lln5+F z1_e$Y0i+ShAn#82K?FfMl@qII8>|@_JoO125Zd363?4TMyaD zNRIJA5g`iza%#1rXU+!5K{XV4)a zUn1GQUYVRKxylh4RQ=iqAd`^{suY0@f?}Q$ImqT2ZS?j5G7!n=M(Mp(^0*_P=9q=M z$fr4c#dRVjLelC}pJ($)xUHRFec>U<>Qys{)SPzUQ`h6CC5M58C=VZnTs&_kk&d6f zwJM!4AD~d2XRBf>Ri6?GY8|a6{!VjvZl{Gt3=pqZy)ZoyYg^di?lbL-fHYobLDIBt z%26UELX!CmTU#E)vhpq5u;u2}L`sAtBg2<|{SL@}=rer&LRTUsLXwdIb9$mk7i7Ss zkO|8O8m?3TAOVB|?&smPzl<0XYFjYZ)`60g)0R$;gIt%M_H_!e@o%4tBi8F#97)(8@>}CUfn;2%mk0eBw~a`N1Z8B{ zW;5=-8R#=?b-U$6R%z*Aw7OGk{DBnTPSKrO`j;9_B;u9%ObEZX6nwrzp9w*`)q6!E zUK!b7!vc_l+MP%?Sak|J*u>gaU*TZ1n$U+GF&7utGxToBt3*mVVTz**FD@gkN`Y@QtMztNStz~rdM0K>ooL&(r5zNe|SDO`$!KWyl zc*RV>XTRcl`c`w~v(XBF$iEb_(GNeUXSUyKhon=tpNVYve$_tmX>fQ7HcE7QKxCtY z386%q9PYkG_bqi)@`|T{$iNYfMjP131oPD8#j6rnbK@UGn%g)c1Dx)EBGUB9`w5Xv z4Gu~7fvV4d3K?n+7UFOxn4W!!Ree5a7ePM5DmwJpVJeE@_w@=q zSD?_1Uk-~=v+*d$WUC^Wy(wg~gQ%^Q@7Z z^j&fspU4ZJvB3_>@jct9AR?@mB& zL9*ZUBi|_S<$hgRb{}S2ri6b&L zIjkU&u{}l(BC@xiBQmb94)P&ov~ivPC_!Z3IgZF!OVTDHW4*3TCbGZ7sF{$w8EYR< zf`c==*Elt+8R#fa(6sii1Up`P0Lj)(s(eE}C51b7RYG%4E)1mD385OF;Y5y_;Aoy< z7i(Y~f;bOZ&6)Ao1t6~HxRQ>@NRRfg<8?v-L{{0TMw4Y3j>r}>eQpxjVoZ%O8p$UQzhRwRCU>JI~|e!_0Qv(4S6-F zj+)<6q?Xl)*zPlps22u4MbtED1&NeYZy6a-@%tr229);F z6Dg_QGSV2oVJeZvXph@ON~*Vv^d2)8AF-6d74jYt^N>hM^_G#Q{Np`fZSNy#a&GrC zkypk$x+-4t-5~GNc_ZmHwb>COC3Ros(|=ac_C)$m2*d|pV)sevzKry1@aZFwe(pb~ z5h>RQF`Z68kkAdn zLByDMr_z#1%CfBB?fp3lNhmVF&2!5onn+1mmXY1Rd0rLBNF)=#iso{$ktJnWMn+yA znG7V9=%FloI9*M$C1qJg1~oc;14sjanxImCb7-`ZvMeKm$M`;mTm2xC!QEd}Q%U=U zF-9hidS4w<4mea{p50pRCsI|>COtyfk( zXe4D>Mz*g#9}+?3b4Tr68>oRv@`3^*gUYXN0Azpk8RSx0Ej3BXvW$$bms1NQB)w2l zb8U-#OkyXv*cYUXGzT}%Pd?4=&(#vCq%3PC^?6pMLpjaqBDmD&nK1MN`IMApt)#BU z{8k{hoZ17a>oMZ%BqAkcSu3e&Rpil2fJ9eE{KxIiL`urCjEujO14_Z#&)`!Nzc)}# zJ|$&YMw(Wadj~$vNSdbKC{I2mWm!gs{Wt)x$~q*&M$d33Qc{*>Wccg=kReLfRrtUP z`H7U2Wf>VTcIR9o1G*Q8CsIZJoqm`6p8EF_ZB`^4_ggy<49}W;HDa$f4=v0Mp zAZH>Ov^x?XHH$l2QkG?8*s7|KRw>`P4V%0d`(6YoDa%?(-KjwH-OK#INAiaxW9;$lw}#&VAohG>09Z zIob}sYH?LkmSv<@l#dtqgqREIdEMa^$fu+%%g9D^EpUD+WTQbVClDzq%QCXz>*5`W zYdW~mgVGMtJr z%QDi>`L_g>{CC11L`urCjPzabgHa`i6;We?q%6zH!4(&(WP+cXF-pp^j7*6ymXxT$xxq(sWd79)?R6WO9;F|{#6QX*w!^EaR2>{NUlCBdOpsm}FNJ+Jmk;bTRj}mEY_(~0(l4>U-y@#%D4rFPZ zvv+6Ra`Gvub~4hG(-{J;@>-SgNz5lACDl$wdQF%MAw>r%6{J&%ajH*AwUd$l-`$-- zq<@!Bk>pcS?PR2%+w`GC`oViGL`tfijP!4xv4u$gfGaJClvFzz8Cd2X9)*i=o`E?( z?j%xD?PR3o-ovUyT22h~BvMlCWMos1>rfz4d^Rm~x;~MTY9}X~P8;PU?z1Xp zlCo+iBQ1B=`jJn|v1`n=wPNA_Y2K&L0C4v|dSfr8Si^yTuqVWLE!>_^6$sdxDE`DwZ)_`@ zBCICHZwVYJx`7DBG%A9!>~btb8A&OXRe~c7pO*p&*F>X<@Z7PANJ%M`kx2^{ZUFLo zB$H+*p>z;FC8bnGM(*DWWj9@0BqP%&;*J%hq?F3Ypdw#O0qKuqP@eOFL`q7jj12C4 zbTTaM0VIRle8Jr#d^*`Lr7|+H!~JoPCV)(WQfk6vOydP9DWx(ps$xxV7%d!xFwf1) z#}g?jr7|+MM#VBf!qEby)Cv(;h!8#{rBp_?&!5;0$mdA5&*hV%k`6mu&5gFewbV^Q z(p=Ys{U^ewq?F2h#?{J!&k5lO)o9`>^?0w6_DiXZv`lx>0l5T8%S68_L`q7jR#KlQ zb;~ihIWGXH&ol7(Eg~hQR4b`z`JtMDl)h%z#2qY>rjBlH=SwzL+Jl7c8B!;{)|0J0B~ z;ay6NAW~8gWn^HXlo%ifAQ|XvB_#z>Mn-F6?*MrQ$>#6A4kn+Hf+!=K#-E4irAtM! zX|tDJL`n*xj5H)2OoOZP5=ldsKy`&A1yM%!Dt`j9Fr}E)tN6h~Q}c5c6%L`n*xjBN1t=~*z^Kagy2eHNaaVkbxnqKq`|JOPyQQ&7fDd9b@ekdlHZ zBZIbm!NgeX_@E7UF>e#3q#$Y~b*BcV!nq=TWnFiw*D2Mfq^xNrHNzWUH^Hq5el?om zwZr_$r=+aO$Ofss@Oo|+E0j`MjYE>MCL==+4{HYVglMhNgzo!-!d1*uQr2W-Gmq-m zfSiM5vnr`-Opuf{85!bVCm)bYkqq%HU4VQ_%9@Ofm{(X2_9A^ff@Q4MX$;Dil zLy6H!%9@Pysu2Qtg7y%SUgcI}W-CZZS(A~C`n1eVWTVcS&O}Penv87t$BXeqHvDZo zK5`X4C1p)UHmcPRl!`LiMpf&-BvMk={5E4*O- zZt)Z%C1p)Un$9eOBCJB1j*V1vFiBaHlOMv}Rr2{M)Q@7clCmZz_bltAl3OPiAyQJ- zWMqKH(XK=WR9-uqNJ&|fk$$cv{{|8s2*JM1oq{Q~7_FqN$w=R!8Ec93?Q2kXyritj zNI$RgMTqpP)8_~BDJg3*()UR8MapH%9@PqP^mD~1GEp2>`=Nz z4k8_Qn}*z6Faby?ti$cL`{ZmdL;a@0-uHUqbNJ&AIk>2lr$IMue z-p_NYN=H%Ig?FwKf`A;*$}D06HozuHM9zwuZ~q@*Cq$biPJmk}9I z_t&#TN(!QkH1_)=iAZD59es(E6hs;6J^S81Aj{%*@Se8(8zLnIQAT?G@@fx|K1h14 zs;aJ#q^!wE|Fkm@47`sQ&QGsq+jSPEMy3uegPXbL`uq zNTj5!$;d$My%j(%#CZmMoR^PCNm-MTmLrAqL|XQpnM|altjWlxdE@X_6F!^fXrhvm zvL+|1VEIG&SY*@UEvdXDD{C^+a%f#8@@d&ykP;MGS(A|=P26Gs=%Gdlp|jST_{@1` z6rVM!{#isNr#U32m9ePgcM0uP@{mKarN=In3{SbBk`Awm zd-+*#!)C6~H^oAU%vsl=&u%fG4m0Q3I$hlfIeR)HJ*JF!L8Qm%viQD}IBi=0;fSnJ zZy-E1p|v$^C9<9UsxEsbP_60GaYR=0AFHbG){`9htZC?ls#M%7H5->vPq=p19g!a2 zcYz?GkRB6mH>c5dyylQR@b?at+}=U0<#n?ERw0|G$M^fEs^p|TJ;`UMg${kT&{k2& zkW*?N+3AfVvc{0$03vJj?YM+|c200ax_h6$OQd_sa1xdtsRl>c`YM}bl3J*D^)|4BjtZYYIpxxuT`?a7d5pS=J3w0vHIv} zB5N$(icPuV&K_p}O$@egYc%|IzDjxwJxS!4caG*+v(&2FMAj^<>qF#Nhw;{9ZH<;h zdMsP|jK~QNcY;UkvUMsMcA*B56Yak*%;xFwIP#fF-g#9@CBHbF=lCYj45I9Wn!}%| z6`VZ#~zUoex9Oa1g*fmnU$_lx~H~yY{&awZ@kL~#CHAh3eNg=CO>>o+w_nRF0ygI^6q}%yZ&P2{#5V>%xBhoE#9Xu7tyq;|q|4HPcUmcM( zeRrKDvSx$0p+qjZ?1*&R655kUx1SrmBXU_WM`Vp1v1+`nvA%+OXFqYc6RK`K(wKZ! zU3Xel056I=^63%$5E?j@74q;I?m?q{8R?Mxp~QQYoUykuk*^$|NE3cOtdc_)J|^<@ z2}eF_Z0iP3w3N}-SX&{D$hY?2#b*1q#;n#Lf-}hpA4(JXP7-eii=jXYrNMtw;oqCk zEt3fU9RdF;|JePZqtetZ)2)ApzKPvCCD)4TKDbLSbD#c69k9YLX_{dQ*gt0Rc^E1j zX3#Ga`R#5o5+_0PmnK5+QgfxGy zl8!rV%x!^Den8J0xB@k{7_H+@o9MVj-GGEs5MDTozR^x4?Vq}A-&%ewSQN;mNLm(0 zTq80Yoi=~0`U3a%6#(^lj_TFx>9EsA*W=f>aE>{30#eswS0qL+F;B@$i)^%Q|DOIc zK(lbPZSOw#mdI@M=zRVc{OJ(X#DCBpB{Ca5I%mYs)dnMJI?+zOSF+Kg^G9FE;dPIZ zj5@Y_3;E1OkIs$(jetx>GJNyjmx#^yqjt0*$S7X7p;< zOGjijdUQ7Rf_@I=Cu%JlVs{bgxJRd9t@Ut}DWAk|=k=f|(iSfS$;ox7qp2H)5&r4)Bx_gd4^MJKYN3y|@0oWHL);1g6J#R}^hIzsc zgzlc#{ofLqjqV<|5h5>n}BGW}~}ja0F;F-AW`w26aVUFGibpBch8q= z*MZ!CWY5o)suP)w?w*Eos{$!HijwMI=|`mF?w+K2%i(!W=2z(IyjE8z8{It@{o(vn ze(|yGxfW%~XEwTf`u1o|WL(eFABfCGch6)CL~6xn?D$|Kk=f|(8D9j>GKGx$uGCl} zv(eqtuH;=JV_Tj7KhEv~Jc?}FA9m6SKDZ1vxD9SeAf9xjqn*%6cPHs42`))+0)xA| z4ess??hb>yyABQm3=ZGgRarah)Uf`{cklC@=ghg8H>;|;YS*r{e_fGd{EyQ;34^ZI zg0nA9e4Ysdo;Jst{~_H|zt6c2U4*lt0b| znTk|sgVI#UTm$8gb3tCY$~(e-<`i4&mF50blt0b|dDh<64W(zz*E>-Dhg?vriSWFu z*7R&vGbhR)=Yl+=3&A}*Lq;^VqWp0#$gAium@Q`PXTfXoDU!#`yawY^Nnz%bY;YTdd!_Dud*M9iTq2{fw9l=k&yny z+KbMlQj__1W#+SkgZrV*ze7!LA>H>G#CoeD|3eIE?`QZtRq3;%nOGfG=?iqv)cp+p=vfdY^VdhnnGkB+83bcr zF>!=KBhG(C$$Yz#yi4xiZP^Mbi<2_@z~z#V7WvZQGp)8`q)WpywhLR&Vy zl{__=wk(m6?ao6z-9RBDTW4{`noL`k$kauHKY~;yWvO$n$`&cpmL<~oG8f#UbjhNo z@kyw>p)ze*A_HT}fztU485mx#EN(5+mL)P|iYrX5)UPLmjCWrm(h=QhvWJOJtD$;vOJJ2pQznOSVXvwk(k*V^|-MfkK)Lsj{{I<9EpgPY)js zQW;)?C)bh-5lmY)v!+w7y{>R`6MwA~=8;>6_Q3sQ+OnBa*Ji`nZy?2@fUeETVbf4D zZP`re(D=?7*izj%v7e2v_h^TbY0DBB_fO-aaP~o6Xv_XpLr$`pwk(nUhx?s@n($}| zx2QdZWJ8x}%MuxNXfT{VI+%9A*|%w%d}L?ZvP4F#ZX+fu(E5RP$l{mRa6g&0ERg{f zjN-h7M@zU}l(;t)CDWEA(&XJ;)I2Ao$<0@`x0tppk%lD){scKlNWbSKt1{DYEd%VtW4Ug6@4{7&$& z25nh=IoarB+OkB}-?ym&9NR5I*5B|}wnLblIs=&A}CxNZ1yluTQeNbidkX2P+(CZzX?B7dP|+OkAOyli$5YQp^t#-T^K0#Gt- zSt8xjrY?h;hlF%*u|wWhn6@mDt{aPHLFu|;yPTUaZCNS{_P-=$u0tzvYniqzm0g#? zBZ0cLu4#`vP%>>oD5~n;N~Dwk(ltKNXJwxk|{k|Kyir0@IcyGPTZ4m@zuR$O$o$>KDf0 zell%YDrVsF|L75^gQimL<|`UJdO^Rho@eWE+oZ%MzK; zFG9?3t>OqJbc-m5HJP?7k;%2Eo`tdRk&ww%-wZ&>v}K75E8qrKnWJ(hgyq~3ijrx| z5*dC+yq!n~?FnehUfcAewk(lGmw7coDo+5$+PlSTI+QD$Y0DBBJEvoDl(AE@`}rKTx+W%*pjv}K9(a{S~6GKbht&-W|ZV@;+lOQdJ@BVq(oW#wsdR>QPq zsZ6Q`cfky4Ro>6693iGHOJzuDafH;Geoy7IJ=2yY(kov@@yx48uk34|<9;%2S!IM% z8wSvEga@((TP6aZto-xrR>z(x_O22NCHlSoWtVDXu9;5?VTI{FCv;?_!!gN@P^#6GXO#IYuM*9~y*amAd z9abXUceM?NnqH!&`^MU`F~xLPiS*gh7aj&x>9clL7}jJutVDVze1nHUReHyaY>krX zuoCGrxqg0>K4Z#NL&F#m_eIbD`}^z4Vz$uy9OjM`Co zBW!J?kWrf|ixqa|2r&(0BF!t8eg+A*VrU>QPJ4lpX&@7s)OBSEkne>|>bRtk+<-v!1NscW=q!{J}8+saHe!f%+)mjkn-4*n638$luR3#$k;qN#DfG}FAff| zIhsVEWLjH9#{XKPAk>73J^Xd)3aj)enFcbE`mFn4AJsp5p?63V%?0HgVj9RqM!jn- z?o2RefV1y)vlA$p1~QQmZ|*07>?&l$vt#0$ElN$MflOpT)A*Ypy9*g$uP#Rurh!bP zsb{AXAfW{V=TO(UNUX^;kcl)rJOX2o+QKv3x_JO4(?BND_j!?qFeZEyHGLoU&5Dv~ zAQPF=ZpjU(sjQQywBC@0l4&3l8GP*y+){L-Ma|$#lV_u38puStw5aF_TMJhjG>{t~ z6^UTwQ(+p&MEd(}7P$u>A^qJah{pj%G7V%RgYtBPhb47CgL3v0ZD2(*4P+uCvYu}P zQn|_^92Uzfn`s~u*=uOcN^q6E5L?@;e}cSLm^LtxE)HAZ`gDX*4BEgS-E!jAGHqZY z!%MkUg{>VWWcbewj-h1Qz(htTmxpHw_0<{C_Mb%~PB}tM8<@z@x&I6RxmeT;o!N60 zN~R4=WaO(2Vcw1J5X$}wO%$eKb1In3{ll4%1I=~HCauW)Q{3F(tJ zuoz0F4NPQYwULfc^RbYT6`S=$$+Urqv^J>?qlr@?A+5H&Vo6guw#+*=h>R=p$5NDW zc_;3Yvbr))Q<`PUye(%pF*765y4!dTrFBa{M=8JmjtwF$f2`_;(z0TVX#S~N`~C09 z5ox~Wo(rY?u%`8lQz@*;yeWg!w0seN zW=Q>1Ebl6bu!6Fm%$qWZv>mGncV1Q64jikDl6g}Gk=CqVo1wIP+xZkF^QH_U?e#{( zf|6R(UhTNIl;3~f1(EJsimZS${-`+n+}A{jcAB!E%pwGlwoUztVNKhz8uIgG-jqS4 zo70!JSkv|MfCQ|`EME|5&uOcSHSJCv8lhy~u|cG3qV{vEeu&7H+X%SSo3%#sO_wg+)>vgXYTa@1tr>p`Sj;EC2))6MI? zoZm8wEks%ujXa4pt#g`-hNH5z%o{<73>cKU4aPp`Ex>%JceeT{nPnOxGc6!!J3_Cl1*ds>L}9uaTG zn%;wclXGfj@r+38yKZ-6&6k~ZSd)3f3z6O>Dn-khg^W%pnPoR3t!=)@amd;%OK+6S zyJ3j*`e(i9TJ>$~$^G<-T8}lEx5^M{xAd-p(jHYxEYm2TC-YVr zBGV_CYlECBMzHj8Bc)^(35m2#8xVvwZ4-0P!J5qbXo&1^t@3P;n?=nIm$J+52eZ6L zq;1tz(Q8!iNQ>Ib{t)vf8zNK6&wmaQx=YYOD}A;xZY{GgNu<4G`?pxrUih5sL=5}> zJ8+0hwV$2~a=oaT8W(yHYcflkMA|1dggLCbpY|b@#NxK{c`|R$Au=_-)mPllRC7sr zw`UeZiL`Ha%qMHE?T~~unfLAxnOGt_ob669--I`_7Bq=f1Z8WPWmF<J^GlnDO<}d zG!tn_2$3@kizVL`l+2rnGNsPwmU;@d7W!}SH@EBUIF2%X?~k6YqDPN>3TT(u+UP-6 zvF4#{?Ks1aWQ0?GxUcBagbe@m{uRpc-+xC{=GHnSH+cp<6US#lCN~~k0VT7bPNX%e zmbml6^8-9*hrKL{vd_*RZEcw6&^1s~8NtFD^csqiS&An$jf1l7!!yCy_a9l4dFvCA zrgAM}QJQ|)`3!3^Z+#-tm^`;WNGGwMMw=xEN@fwC$VP6S&|_4ul}5G4-$Kc}FN(<6 zhn-+%tk#UZ^=D_4% ze#VS;4noPiql!qcfEc)cX2g)Z-R10!i5w6acd|cRD{9TS1Fs#hCi8YHB0bH&z;ajNUE?7uN zOOK+%u_p8WFCzWVJ70ri3s*Pv#!u}kiIT~H5E-6h28?~WtwM%7=WmO0=ASroGo! z=rpUx)}B7hA8RsiNF&m3bz#_AbwB-G7w#yst1>7gE#TCm2ReM;MFXOz;Tlk6X)RU5E@Gw_Q9pC>`$LA>Tw~ zPr1sTfB&s)M0z+bdj(tTCu+KX_-zVGCM83pW!~SgzLIgq&)6aFNX*;ki1hh14lSu=Snz1F*#51olg2fg-{TLHAB0N=?hy6R~oDfc07gicrGtRq_y027%|n)(^_(0Ev(7B`;dH>b?(1HOkJ(8 z;NlF;YX~tlIxR0A@?BO(^%779WO1|4;?;CdFqrMiKgU0>s{G_Ti7AJSYex>{8P#EP zZ&>87bBLLsvs+6EevhbV17Rr=f@pO7MYkUd?F)MLEK0sn%rDP(+%#l$IyH#e!5u)!-$4I-+FKP?E(b_h zp@-RkSI=uGnKTrUrshU*WnUE1WJ#Qbl1W1mX*e3&5hTpJ;R#{y-OnhQG!&7(=cfG$ zW5Nd^eGj!1GfL&WWztYYrkEz#q2^>EQw)s*P%>#KB7^rmS_E>Gkipw0FG9(rp@?(| zy6_il?P(!hypPKx#H68!^skz0In?wP(!b<#ImR<-C?W$tg#3p48Th(aaok!a4Mk-5 zvs^IVs#jU~^;4x#GHECxd!=*{R~htHAPvlyTD zFiIv3MP%ezw@M%%3K_XS^YdiVP(%hkF1s6K4Iu+>j!MCrOd5(v?|1Ft+EicN?EPGM z1D0~FFli_vBMV%CJH76as2S;SMyyLHl1W1mX*C4xg)^a`kXF|ed3RvaP*i@HzEjGF zjl^73shQ>bX(%cei7)?V)Er-2tP!a4`)Md5EmOqX;#6rF)LiaomhY#bh&1o|23MIX z%_|N}mo>kih9c7P^(}ms88x5PY%b;Z(@;cOx96LS(z>jq=zA*r$)ur(wA`BqS9V6t zGaKaWjY&fhX<@&TuZzxAFCJjZT z>!OD6WUC%q*U8&O_fk3gm^2iTwnJM_%99wC?eyW8j1O>I`%#JeFRD- z4Mn8B!AWsPQflgJUR;inNkb87tvmXRtXaw~@|?=nGHECx^$CN;j8U!G=%M%yh9a3X z6p_}HUN95S*w6U-q93T%{Ndm5(U)BdpJhhPqNf+5WYSQyW|!Y9%bHDx?M2C?p@`Ja z8F5_JoU(Z}N+u0Oq;=GsVX|hA6{1t2>?f0kBGNn9c{kSd_U^L}C6k6C(mE=CysX)M z#vPPQ8j47-t?#p9O|Lam4xnVxP()f!wk;xS?%pZKTP6)fq<1@C@hqsEL*6Y`HNu)q z8j48k)u~-&&BN1bqGZxgM0$N0zX5A{y&WS~R+UeMNkb87jod58KC5S<{8X4U6p>z+ zbIbGA>%`V^Sd&RZ5oxX3;l13?qUO;knKTrUc8>#a-l|ub{g?V7D48@Ak?Dgvh#7`5 zzfJG9{0V<>BurqRN znKTrUjX#%#*}qe6v7e1!*35!6nKTrUwv=}Tu%<13&kU4I8j48Em{7R$sx>WxCde~^ zNkb87dl{W3YhEAhi8Yxt6p`lTrG!-W(>&+>L6l4yib&gh$HlVd*madrGHECxEsNil zz?zns4Mj>wxmK7o6p^;Qy*hdOcRk|Z%Q|XBLr(^@H)hMV{}-P$utq^AGry780z|`zkfnB zN+#1pq@ksMML0rDL`_4?fr2QROcRm%#&vUGO?`B+YABgZ6Or~NsgQwDkFDL<`65at z(?q1-@1r8Hrr)S4^H4IGCL$y6hQO$)gF6Ite$U<8ijv7R5$Un1MJUK}LVB!uTn;6Z zX(H0U)(u!ka(p7Be}%3-`A%=vV_03F;f zwwQyG$utpZ8Cb6oekzt$zsaX7CeuWu&&{^*1fcVUk`6xS6Xj^aWSWQ!X`ROdj?i-< zLlREN5sb++5$WA;<72Gp-Mv9O+)pOcM5Hx(qj;iI?t)hD$#qdOnInPSV|2)o~Y%ihu41uuC%vOS2>E-zQRd}iST4CkIMgKAaIyL zz_ZA^FfqGVI7u=Q-c-v22hSV>JV5Zkrh`ONSm7kjM0j&8582t$4?gmPf``mA?U6h) z(?obnEpN3cEe{;|mV&pM_Du|sN_7%!BD}ShN3E>^ADa4}o~SP7aO5Q2M0i^*H_r<@ z2OJ*AAmY@!tC+GW)k(yO@Kh~NYTp<>bKO6JCq-2}CwXShiSTw>9@KmtOj6YtMo?(Y zvB*i-iSQ0uZW?4R4?I{@H`)82kv#MLPlR{U^57j=;(;qSnBaL^CLt%WC&IgExGu)n zd=7kYQBYhLQ?;$QKPiWfWSlPDD7y|mo_Q#Zk3b_nykOGzf=Bo9S+ zA1#l1v0mI}p9>y!a!pO-Bosw>KP`{=t1Qgib)5x|*l|)0RwNlk_y8>ruxuy>JYDdB z`j6$89!Wfk@IhK`>d@;H@C$;Q!Y_%LoASYtj1=KRwA^s5f;i`g2yWQYS+vj;PJ&W| z57TnrJDZ_H?)YAC-<_*YASY=l!bfO%O0$Jmq534jQ+#TR2Q8&KiA)hbO3Q=K-4cgx zq~O6DZi>6V!bxt5@G)BM693By*myX65T0^1%tcPZQ-qJxa(~x(Fi%(Cv+19IFQ%e< zlLQsv6SO=i>qc>xQT9FX$zsuNP&S^#s0g2=<>8+nL*G-qV8hQY>w=tQsR*B<<-K~I z{0bNBGqLZz;-|~uf&{7vpQ`2c-x|ckVw>Rg&*%zZb&{$ge7cs07fjm)8$Uwuu#cyf zA}7%*!e?rEbo^h?0aM?{73~`-dIHL!Bl#-AXKQ)r)DUlM@oMB7Clv zN8Y=h4E%xMky}4*!RjPwMfiLz5B&53rslfpf(M?jB=?=ftq5PJjcv3*nIBzQ&mQZ2W}=KKPuO##8JRjm%lN&1TL zBNuFZ2ETDzP7g=~i}00NZe3ppuDA?7Z2A*fJu`Jx|DI(N7p zImu=bzDdh1ud4S(ZaEyhQ}VWOv+eBwtqKRiw`jR-cd^sRZIkNmKu%Ixgm2Sw%g3yR zkXw!ysg9gPwFuv#<@QQ&PtG`Wws#+#B+txi5xz^y-Iq3~0lNo_FVKqVb@efF651ks zkCxjOOoyA4`oY<{o5WhKGTM;j7UBD}-1YS-coiuJGmiX<4{~Zma$SU<)N;25)B9p|x14VyusR8M5q?_Bt<$!^q)e@D z?fh9zPDsLw@UvPT&}~Lf7-{p0vo63?Zy8o6F)zZ;Yk6GB=lf*!JDJ}HCs{ATFKW3y zw2PQsDAn~9%-69x349TLS<9{dkKq2EvG0X<4n$5;UxZ)Pa($}lu&f^1)e$*~ei43M z%dNdF;%P#?%S305K~CO=MfgoE*Vio|T082#=lMMyISGLgep}0}{aeH1Z$|YvoqQM} zNif3iYPo*x(7m$yh}H|SI*Ef3eqYP2(>lOFl~KJ@ZuuZaGGT;2)N*g@O;~bM_ubpI z$t$c*f?%f-V$Vq^V z@DEyUb#tvJtLJ?`7dc6h5&lWb?V(OE&Z`@5FKG5bPNHOlf6?;vF->*@pCX3J^iFvy zA}4t=!oO*`ZFHAdtZr-i`2}(kD$C?I9ksl}xjNT?Zxq!#tO=1<97&cD?xf|m*>5_^ z>OH!A!|EhnMtBx2Px)mBbPLr#=#!#bEKgdJF(W*imfQ2?frk*@3 ztZs|y_Xs(Op%GqK%Pq5Sz_d`UZs`^zH=bnC2>)5jZQrVi(?+>P+Rkl}7c2>+5nfEo z&Aa~Yiq*~Io#jo6q|yj4q2;!9&7j?tQGLia5ztmXI1)`G{1+{^Y%y)d>XtD#<apt$veikVZiIXNi&wiSy9cq( z`3GZll6NEAN6SqO8nwadrsA%Jk(1CH;eJ{kGo&9p0;~HTV?Qg;d6Il1T(9L`4X@0H zlNNe*5P!?xY&=#c@i)Q)wLEV3-88HoH>IpR>qrKU@L(kR#lrPxLwP`zPZ4Xm=5mL(4@b1@CbrwcOCLk!ae%r_`lpCEw$Wl(E^}qb-%&0<>Cy9#}VFI%OjtchRhMc732ydt5 z!M%3DoytL3VF-Rhd(1vj1q>Im#brO~+YBwt7P04UDi>_b zol>62Nyv`yL0WDo9rY_#H#irUkI^J)NB9sex3w}}$Lcn3My>4nd@LrvjdyC-(uXVAhY%1^%Y zrm~ru*P=PZ+@91PJ~LQQ6ltG&;#$3R3uY}O-G^^C6LT5zZnl)MWi4>P8VQ*)+DA;L z6-k19jEp={s}s~5E@b49oPH=trjL=Se-(j+R~;nXp~v;WSR5sZ^D#22`tPqmwiGg| z>ib}nB+19fz%_FYfP|?#Eb^~-EG|i9KS_v>ks-HUwtx@ih>#&SJ?lxCncrh%tFuAx z;MlemveoJF`%#kU9wVdfOo7K6o#+ZUL|wmD0wqc9G17c0X#+@`kme(E<57~p9wU<` z4mE@PC}h&OyYlnQo|)BSWYD0oaN6p|2^lotr1-vra%@RVkCCQTSx)mR^-- z0`pEXa^42t$aWK?=r=k9U-K0=cBLi>=P@-CE54Wsa*B|N@n7v16W z3=uN6Y~H>oNv4jG@jmk-p(YG35U2AR{1PRJ(=k$C?H*iV>fh?rS8A{cB}vjTGCJ=u zajpC+L8>V2+V~g|flIpyOvD{qn4l zV;{-NF*0SsLh&FxRmhYvSMy*^5|d+O@XO^;PX|*YIB%cdlUEr@$T8Ao;0`@(Ev!jF zIIhp)npl&B;~44R?0p2(^b^uQN%;=3a%@R1j*&rS{t}~!vY$bv{f1&q5{YAEM4isJ zKq^;RMD^!cP?9tpBYQ1tT@|h}ICmikw`iAm)>5{X1mPIzQo4^3j?gY4T}qr64?2n@ z88}9UyLAu?)XJw4?y~d%N)mr#WOVlisUV@B1y@;m`*kQu@{N(9f1ElCa;cD^>xzhX zuPIwgLT`*T=6nIyrtXQ5#_SK~p(J@XMg~>y3`$p9$e=1lk(5(vlBgRaeO$Z1b6Cdr z1?%oAi;|?=7#SJVIV;qBDr!dRU-U*v0&a}74%zAhXF?Gntpf^NL`kx3jEwU-wFYHe z!zp6^uIwj?wK3BAU`Iie);r_uQf4OF7-_j!r7ud$*&HHutk%p7vvJaSvaD%wxSUJM z%p4mdt$s5;U`?yn?;@9>*368saq>%;m?*2q_CuNSC`o#aljWAeOe#Z`8Yo9i=FMW{ zo^5+`zdcIZ%RvjVCdsUEHEVP%htm3M-TNp>T#b=-+lxe$c5`3x7^)nh#LT1`Bi%0> zK{_56XP^7|(5)y*NR5%UTU&c!P205^Wl)lQ8YA7R=ZEoKt?5?D`V}RKrZLi9?{Q76 zX|Hu@AWD)-W2EcgR?r$!Yr6IwChztnkj6;ctND+xrtRs87qaGb`N+da*LxS>aVw+d zE&qxrNeqpV_B;hO0Ldqa;By zMp`>}g6F`DE4zJ+yswaq86)*mO2RXex}W+9&2M8(5-($k*}|;dHG2sN)jbwr1iuLcy7qp z&m)ndhpTKYNs%$qyU%BN4te)Xk)H|)kTKGFdPs9w^Z3T|Sd(PO80q!?-UHlEuQ$(v zP?FdfBjXCR9Dp_Ba_^Q;t|T$WNbkkI0a(*}{-#D)lZ3?>8CS}EkE~f-mlY++i80dK zV`W8I)2+Z>lq4d?Nb9&+E3u|^RC5vQQ$A0U4r8Qu!QNYB&Af{jqa?vFMp|2+h9{kj zbEtX1Sd=6a#z=dQN6?5>r9J&#DoPRuV`TcOC(A%8^V{^5RXd_2Nias*_C5B*nzmg{ zlTnfo7$ZBp{&WZARxxUJ_`BdVlqCPfNZX|lc*a)u({^URKS~n)Vq}Vk8_b2A){B}c z4SUM1C8;k)+5^t^!J2m8(gkGAuRppArnWB&OG0YSEj2A%)+AXkuI5e~^i488&n?$P zpjJ8iNX(0osU3fZky_o))b`icpd<+|M%r%%R+2TZR_cn9gu57-=YG!6>D1lOqBOelICKhy?#n8*0k65l|2j+Wek) z&P%UiO%mE-qEd1~#lq3_yNaMUmeeu{D=X~6VlEk4HX$o@3E37;~W$(NXV=l7yfb*~oqho;uVKtdaH8bCe|i#7J|tGtkpiYnq)- zgrg+UCq~A$6>o7=YsR+lkk1Yz^~6Y1(ur?a)6{sj>{FA#6C-1`TI5_aW~1^wEoG!8 zStmw%wYmi(bw+@^d7DqTpCsnQ$hf!vEXVzf`@5bTZ%M+5k)9oj!PuwP^laxXM=%m@ zVr1O!CSO@|dI zA2^EDYvqh5Aty$L*D}oqxn0Qc8dZH!l6(^*{ri1Rk~RB07=)5Un;2=BQ}Hz%q2{8d zVdjewC`qb`k^0eQKdh-A8T1Gx2{bX%zVN0O9$Wj|0D1P2EE6OB_6~r~l6q|Yc5jeJ zh{Tu}X)Kl&4sxy7Ph)|eZ*Xf#f{BqH52wH#Nmo%wkNevLQIhZyBmFHdFjA}Uu=0;> zxgI6SEip29t@x`|4oc5Bcy&|R`6ZDhMtW4~YlW@VD_dLPj;^a_c%%tPhzC^0pm2R>Akx^ z7nCHK#7OI$v+|B)oqoD0N)k$9q_4C0T&(Hy?VFS&kHpAG-$vI!!kh@!06d<`86$}z zF*2Z2g~1>f2pQ199D-X*Qb>%94J<7?F0sB3WK9x4Vx+<6@gS^e@Or)hYm)2{BW*KQ zoWgU+_Ip2hcObDNMj8fhnj~uuJTF%dNaBc*wwc2#$(mCK^~0?tVIxKwW_J2h)|@^& zM~0+1BSzXbyLFc}*Or#OR1z^_q`{-sYFV>katEx*yyc6m9>jb4wZoe64NA&RJ_!~v zHA6?ov;iqb6o=4}-K$_t<}F{OrZuqB6|8CXd;AcOEr}ETPfayRlpE^&JEC)WDlBX2 zVEBfJ&VjpA@K-Sr9rEg~l#xYh!A3+2nbPh2F_cV1hsel-o#7JD4HGhQ!|QA)nTQUN zsrL#%O?6o_^>p>WQ8E!7BBOrQeER_DU@Ux|2C=oV`IZ<^G7%jj;~QRY4>g^IjIXxn7nDpyhe&<7 zGUB|A5K^COxty#p5gj6c>+PEi<%Li1DoU4G7%jj z1A1NA0us(ZxS_WEv>zoC(IL__c?1Lub(e)S^}C-PB@@vh((u)J14uYZFv)&ud54mT z=n(0bQ?x4`KMCpk_mg@knTQUNDZ{FshMF+Ff>E=x=T4MNM2E=Wr{^Al93y1#&FONv zkBR6I>C)pd+=?AxK??#XZAQq35fjlN(%;to4Ak@m=-?l;tu<~f6VV|u=$C3MaX*9d z-K~g{iRcg+QQ5yP$jPE+#83UaP%;r6B74n!2cM@COd}zpGs?0LB@@vh(&gvLmqTM0AKWW+`73B%DWZ=Y8wc3%8bu=nxrHJ_(vsI=K5nL?=&TQIt$Xhe)5A z4T9j<-WJlQvwS#YB05wSYxz-1 z$LH6vCKJ&i()Q#Cw4T)?WIJ_U1{Roz4w2RhTk@f_=IS8Z&rC#zNPF~|MkwtKhu*}k zWg6?P9leSkt!4MUG%hM2ASXU)o;4nr_+GUdEbC zM2ARwwUNG9)1K$0oQ*RP9U@)3AAqK#x}UBsj-_KwCZa>6?XUiDcgXlWkG;E(lDsa8 znZ3DQ%lk~$Jo?3gl8NY$ns(aCnTQUN)`L&S zV@>Pw%P%;r6BCU%{7Lhf_q}@fy zM0AMMTR(|8wQ_9rLAAY6G7%jjt;^cLnV_CS*75tMp=2UDMC#997ENTe=AM&sPR&Gg zh_oK4mRWPf^J`d>iRcjN-Oar<*7R;&RE~X2M2AT0;asB4uHHXa&(&c~CZa>6*UQ5N zv8LCJHvuS_hz^l)IsSnLeMZe^xi+C>B05BR&yLQ5HND5W$h$og(IGOfNS&^-=I4I0 zpTIVn1~LM zwyhiFr(&C3r#4C^qC;ed7csvoLu87Z zkJwt69m5k{r4raW?9D`Uh_rkB3eTSE8E-Ee-bvQ{enf}J)RbTQfrK*%jjFO4y5Sf}b=OFH9s=d%;luSg2Nc)9=E^ZKI~h5HJ(bA<}Z7;4rLd`J=8JhnR>Ck@jl0&SOn` z!E&-Iz(jP2G(X5c32U0q50FnCOhkuB+qHsOv8HYRIeFeP5gj5e*L%SNntE(4M^F7I zqC=$J!BRxle7H_NMKTc`BF&qX*n#qSnimAiafpfN5NYe%9PTUXwPI_!Hy+PE@-`)A z#+Yz&;$0Xu?cy9t*!=fQluSg2)Qn!=yBo;eLPk$&vjZg)(IGOTVny+U4znrfVPrj# zjFO4y5SiS)ka%`@E@X1^Pqk1o5gj7KLRY}p=ctScVLn+mpkyLCL>gzU5m$C$QPVi2 zk6g%SB05Bx{By{;iK$|PFIba_=n!daU*lJ(sq{6C&3q1`WFk65Hj3#n8Mn5PXRZP$ znTQUNvEN#L!GGa5k)I3S1%Y*-S)-$e6Wl z4r9%jsi);^oQdcV>6Kj670y1GO~IRpLSN0t{bV9KM8-Wkb{1>Ko&CHAB@@vh(lg~2 z-09Vtp4LgBD4B>3k#VCFV3kBY`{Ft;Ux<>4=n(0-{Z6v1xj0}jN+zO1WZdX67Fn~4 z`#&g|hz^mSOZ>;nn&WcH`4AJ)Au{fR_e5FqdSGd+$wYLB^lD%I6xQ@I|J?&66VV|u zJfRajp{o(saKHZ3Q8E#om*VF)VIG3-6O2wjnb7*PtpOw~3QC{HLCFtjVNpi1hDySu8%NHB*}?J97*6g-P2GX_)p~85la7 ziJFF9mE|phN!t*qA2vD+YwFXxH^r@G(l$ieXN*n3)4|?<%O#Xd+J;EKo#T_Rrr+8< zWl%C{8zPPQ>cN1kTO;-}@_jeCWXq&&i1fIVWjDwQLVBEh9E&xXv<;E|rm9Ea*h13= zmJs|F%3+L2+YlMNvP>I5PlODfH0KD`WYRW7dX%gR%{QIDkRDkVeMZToZHTn&?k*pE zEsJ;GLCK_Ti1aPi4~7)Armv$_J`gf#8zMud9Jmfg=%v`&kiHG&q=-q|5b3>j58NWu zn%)Z{WUGfs+Yo7;bOesAI_O$En(yI$GHDwkeLgjJ#F{=2%E_rJleQr;vcd9(AYoj9 zv#;b+8`fmfHbe%by*~{S8Ys{Vvp0}wI3{gFWUObkS-79E}{DLxwH+Dw&e{L$(j>ZIABdCZ9}BNt-=slv*JKpDxvT4VJ7qO^#jGU zQJJd7m)Ik3qD(Y3QsNv6?Kx^5?kAJBA=2tKYXR1@R>_T9+nY(-{NMkk zUZo$sx2Hl>$9CPi!$k{@s{ghk}C6fvwGAgx#m_dr$ zj6+n*K@(9jsURW)A1$8?5^nyG3cA}SKT0MQL}X}|>x1D#IWA20*8ubaVToWO8tsQr9*|M{kg@ z#SXf*x)<{7BY%pIxylkl;gZbA4kQM>7f*P~v1O7-nKd2a+a`;faCWhu@hwm9L&@Zc zh}0+5?+!9rNPT>(q9~a>5s}fJcmD$UR>iLbZc!1Z|;O6pF02w8@b zN$q7yhh8^w7-2X74N0U+14p7{l1N0lm`lSLoJn);NDON+!`kr0bz&Fkw|| zy6#z46D5<&AkwYu6qpOC(yc^S@i3t5CzGzAa#rLrDJQ42N6BO)hzz*?>?0i8BI5H5 zxMYx58IyD%QvXNDW0d+86RKiOCa*x{nRPHnP;2Us7eNgYr*<2TsS3_1DvX_QQM zfXIMizrdB9v7ZHeZlYuo07QE4NP;e&D!n(Y7tJ)~Q(@NesjTNO_tU$EAps?`8c*fR z1NUUj`;+8-g;`UlviHR*Qg(0D9BVQw<5Y&X&LL&shX*K`^=%^4&rfrN@m3kZ($6G{ zRTJe1F>B34b}Ut?GRPg`?CV(kh7l#RVoYR8t4c7pb=oFmO0%P)X{gj>)_sXgogEKn zyed#$nfDr{&Qd5IOXJ3)bN-B}ooR2D? zv^r1x2_>^0N~EP)bSIRSie6n&GOLblH=|5lZ;BLNwEqBgCu|5}CZfwK|M_a1VtwyEzZfpk&tUhz#o<3Ue^W zEkcHMIZ+WMvt~zRgmM2l*jl*z!U|((%W^0O7yr={x^Z4-UpPX_6M%8n#RDjrl{Zq; z92fx4*{U>q*L6k7te+8S8h=h)D@sk%Xz}uI_1H42U_^S&-e!mWgrfv&SyQieLCLIT z5$QSg-9(h0lUs>ak@9&mD^gT`nCU0w>z;BZ#jGn)`LG7ejMc66ygjcV)?`+Pi1b>$ zNVGWB{ao63CrW0Ghe)3Tk9NX2^p`k7K6|I*n85Xjh}7o`DhoB0zKQ;)S0byW93f_r zhDiUlXVOvnuiSkcC9~8*q<&MY@hJ6w>=LWDN=;_Lgh;>p*WRJ@yVFBnpUkock)8#j z;mp%j5l6@~&kK2#F^d;O`uBVa%`-=sZ^H9R_i=-9YnjChB0U=IUjj9uiv~*&Mxz%> zW(k5w-=>pmp!Bu(kWa46LIRQA?;nYIf>P7_b%(xKlUWWR(zn6gS}1+%HG6@QY3dUh z@O#RiAeAS8fJxOlqhwn1L>gM>OG0UAzBda>rom3-O7H7ZE`22D@l2bX$^*WWq}=ml zb4E?B*-d5Ah@Mi~^$Sq`_zR+;J0hyW*jG-R387o+e?iGKp6_ISS+nuK+OqZtSl7yO z27XhPguqX`@sN?WY{tvnm773b<==}f509Z)&MN;LaWP%_$#;6d*lCitkBsV2<6cSm z>l|XUU7Z2Pp)dS8hnSE5oD)BWb|UvmchW|Wd}iJVa-@)v4;o)V$@F)LOv|$7ACSuI zF3sUiZ_unf@-3N$Ug6AU_M4wCcF%A1V9E^mmC2ns?_uNSLR=6a36u zR+LPCmq^peZcZR0gftya6!~kVCi7x;B7;8+ng?=~kil_f0xMU>I3S5RJvW!m3_qWtn#Ta z{aqp>-3CL~K>gNdWbKw>KvN{s-z73&=|@<5QNOnyFz4xHluUn@NYkExuOP39BV^jz zxgJWUze{9D)n5*R93^B(+4Ay?XZpKD`ngqt*?=R|h5l}>+2gS$)88dBW&PFlP;>F;JrhhE2qi)Z53VrzRHaLR*{>F*Nh;(HCA{T=rR>Ed3j zK1!y)OJum|*eux48A66fzMGGd>F*L5J*l~vInNX_dh9Im^rd{BOn;Zi(3982GqLiN z8G0mKe79PWOn;Y1V`bfYkk3R-V>yGAOn;Zips1UdK-Lv9C}iq&tjY9uiS$XF-XD(b zJt2K!+llXnDO=0*cZrN_k|dsIo(mai-!%>;)88f1!{J08sCiOI_Ya*#FGs1#^mmDL zi`sD&rCUgc#weNoE|IPqJN=B(b;TDqluUn@NVhx#VI4%>TDNRr3sExtT`Gr7uPtT& zSQnH`f0xLBqv>to*cKK?C}6j*2_@6tB~m|YeixMbNy(x!tQ=dWzf0wgdxxc5A9DjG z)8D0Xc*puu_T94`CDY#}GQfGkaVbAu2}Q~DcZu{~@W>6N_srOmD4G5)mBrh`IHVq1 z?}DM?y9&w?V*0yOo+!6Y%Dsk*D4G5)mC5Tex7Ok&M@^=`OQlO=7^O3|w&q{2u_n{s zB{Kc!-tI8oDkE6>!G*U`GW}g5I~L032y(kP`#R=rAXbZ%BgFJ~iA=F~EDmz3kSQkT z^C+4AE|IAdb6iB3I%KQ(W`$Cd>F@rJti4pq;YG8eWcs^ACfd>=qoMv?yTsU>F({e- zE|HeMtHP+MO3UM6F!5Bkmg(6RO0P+iL>EY@ z$#iLn^x57J`f`pB#S!w^_@YFHa)7T^QYSV@c%knUMozOmPr43Pi#`oICTxT zmg&+Gsb7(^4NCpuJc%foE-jIM*K+-h((hu2F({cXEs>ttn~ND^WpRW&oy^TqGF@6C z{W}?4w!{5oy0lbo>smm{jf=6%!*yw?G(!XhYepaK zkWuqL1dBtLT!B8eQ(18)gf93g8YR=E{lABNOMEZnYii!9Q|oqVe8To+H}NyFr?Ghp zje|YyBepl@@A2YlQPxpN&NlP!dfqFe<&mGJ!()s3*Xbf}3|oktG-C-br{!rm!>quS z`B>`vyh+GON0#skS{~JG3)~iUt;EJh`Hq=|oU~;LucYOHH+PQ(4)+bn-tPS(X4=ZW zlin=hRkS?Rq2mb{E{+Nw^5Uy#7^pn6K}&d5EpPR19ApxmQUq^x=bh-tD4cX@39qi@ z(ItGLJ)(;iJnH=sdE`l}mhhTdZvOZyQ1#oa=DTx$#_FVBOL%Q9Puje&4De5)deVZ! zViKfmJZahzURTS57JJqJzDV$(N!R6}Bb{5q>ub5`LJ4=^&|HGn+wS4=q$TZJ!dD7*(MiLX z@K7xeab5WYs*e;r9u%@W4Y-m|2&((%P~@a1Ot@9cBbqfAqs{N4 zdPLCL{K!dTnDBTF*PVFt=q6n62SMvjTpW8DIq41)ZqsmwUT3#Yfq@1l!_Xq$;Sh|R zw1^3BtmQ6Y>1W``?-typ&YnM!lRh!wNm?FmA6^o+8>WlUEDoL}ro_r=Lz=~eH_`Iw zsmnJ3pCNek&|Gqbopg)|Z>Hs;m+O@W4of>QncADZ5>_W|W5Qc#xv|bzxH+qTn$uXk z&SvDKcT9LIEf2ERy#&0Ds2=23_C9jbKqkD6mix4*vjL9$UBP_}XKElPU1Y*jv^=uK z$m&pCX?#b?S`DCaL6BOttKhJv$Iq4@8-d@YytR3NDQRQyF!#5)* zO=ZG6YPsu<&}PV8XM4zu4e2Zs-dW4timd7=`8P*jtWMg?gm?WHANw=RDl;~|ySp4N zNROHDZdx92=ALL57ZQgqV8cQ2sG^+nq|r?HZ(6QjQc2up6s{kpd=XONq}xn*&wuel zOAbrE^x;&jPFl`{_x=|jUob}U&N=1mg7lpU@2lkjxo;Jg{6+EKusUfz6W(9Tz1Jz( z3}xTFC+;hboOGZGANVg`B@j+n_0W0e%56qY+R%g#{ujS-DW~LHmYzaRdeMXr{TJ^X z5-WK`bt7`pkS2WizqnsDahFl|z0$ye$Vpe4@R3@ceyYkL80VFtGJVG`PvoREP55Xn z?^tyGQ{dagN!!t>n^-Yb&N|YcCVZ@xr!<+q8Tb~#Q$iEvqY!CQ6Fy$cQ>XTTCvBCd z_C6;EYSO7DeB!_O@B4>I-mgzz+<4NiCVaA%C$o`3G}*UHI~ZwSiX)#qDp7QL zm9vg?v@1~=i$wA?f-r&vo;s+-z-%Y7$ZZo*e+x!1&WUpVqGtA1h+bUCZ@rnyy2xpVg!ha?;o)e5aQC-3qIP z-0##hf8?aQP55pt_x$PRap0B2aq#$5EDLhd;wF5rmiwmYZq}fgQK`r;SS|=d)^~;?DIq7&4ept)BpRf4|x%Y+7a$Zc@ z-h>~~a^IRwnjrTrk|dvlN$;ERV_F_CK`a!hPb2{YoSbpvNduhl6IyO)x}`R9gXwl% z5e@WfTA1*`dt;qdi{1)VWI&C{NygK`L)nD~rv0mpR<{oFBCawgB1? z@HBTg#zXnZcjC`BP1f2WwnpgRaMT6}82f9g9e(e9nACGYXA%`RmMnA~VV$g~n0;c%#5a!xCrBMc>Jt1~jHkN8W#+nP?8opBcnZ= zin%`g2O1L%qL-m0-E&4-if4s(j{5a3OA)h(l_^JvG|m~BbUFm)*t&0`X41*DE>bR3 zPNv-A|Ns4$p#*I$+ZLqK2MOAo+5jbKmow7zWlkHAQQ~)-K5RHC<&R%vk>|t}kZXlB zzoyeqrQbL~!|N76r=Lnx9D$Pb$G?dhgGtyAyS$2?ktVx>GjPzgG z7xq#8!j%8A+pzwsZY}9gGcqV){huJ`i<&|44kCW8>?dhWGcsbtj8KruwGuI)u{?)J zSNi)>ce3!`Fb!}%0wr}P^WXNunxrB9ed*Ba?W^K&QA0=qdeN`GeMU)o(TsFy?-T;Z zcE6A=Z6ig5MA=W$hGt}V*Bd=yLuU&a-u|>BO45O5Wc2z&XF<*pGJ4%HCzPc5%*fD} zuWx`{C1mJ}qSH~5zB40@VG(AKuY@#)j4Xwcw450k)a@XQwK^9egSyT?jgoYm8R;`5 z<}e)FheG-cm?a)2lw(U8&5Vp3co#lTb!#IB9;&=C`nJ4ksW_sdmAL& zeW4v(#kmej(hg>1O4m0q6Ls1lWJ;H!@(7VmFe6i!Pws^>b?Ny)tVx={oLu_XXepQY zC8H$$Uq&X5%BcrgSZr{F$+beGXslXQIK5*4wcrY4bADR_60IIQyE4BV;Re`6^1% z;bmm+R7hMlIAWW!v+1baNSLnm;@irD;yhwV*D})Qio<(26CMlcb1D2_Morp!VdVeE*?oXVQFe|0-)ur}O7GIE zhyo#jB)gl_sr~+d%iQ-gjJhU1IAo{GOWtMuC%nQ?+ViXQ^8Fn?ML!s z=~4DRmUaahcBI^Pl3|CUhLL1dSCFC4?#(0_`p+BfNV1?S$lyvh;k99NJzUS=iVcgC zWGz>a_K!zahi&^9rG5O7MhgjPzI%p-9VBRTtV7~cI-vcHn89lk}Tc| z(pq!~mL+9OYk{k4NwRJ$NL%#2nj~$J-;W~6lC2;ei(AzOsm$XY3s-5MC#$uBboF0e zg`}&Wk9L%?P%Fu;SMc~$#&msG_W>;}YqXL)S>+E+W)7xV4bQWZOznL^lfCB7$sSXB zU73}_$Rm3jz_|~OG`Q0_oOd8e7G?iu%$zTk=$I>X)_U_LECl=v5QNT31+|F-dy|;| zQS2S$n3BnG+oOKpWlW*ZXVWGVLMM~yWs6{fnU7HBp+wnQ2J;8i!0Lg-{NvS`n|aKIi%8JWNND@_`QP9}T$9oYjPQy-K) zUf0Bj#L6j62%Sv2o9x4F8;jCifA#>9Lg-}D^XAJhKqjN~~zJ-hYjBhn6pNbGVbEGM$jkzw2`86(WQp>~( zB!$q)WJ15&O+gkwnUJtei!L%@L-cH0#RB`JhXCLM>bB!C==(y{xWVA>hECaB)(5 zl0xWYG9r2?M&zj|Bf>w@BC-%VnGEe1egGswQ)tVc{}wu#Og*~>##0|-rykp`?eRkB zWYSeLvLHw}Mj>>*6{npwh0w{Q|4(a!;XDL;1H`!f%kT-Tvfm1!lS%v120kz*Ojuyb zG1I(>q!2opgqJDXgItKx*(OjsYYL&0$yOuZ-T+cLR$BG@OIuGNbmmBNW>LpJI6e=< zkmgLkL-^BY%6bZ+Ge??+KRDe24(h*fX@}ozq+P^?(8;8K_n98pw);`~cbKTHrw}@s zY?Jolj^jE zgwV-kOp9SZf`sz|gihP^-$@FglSya4e3(d^pmcV>Nw)+egwV;Pb>zW!VcXtDX&o@d zL}Ln}lga2&R|e41M)&KYO_hbv$z)LdnlPTvNgOk%{Q6}yrVu)r3>e-Grmd+FgHJ`3O@B(#ZV80Y$z(vYjgce+YOm~0ODlv z#=^PQTn4w0<5q+Oor`sE+rYZwaqgcQwW`0UOQV(ljmk@*+&SST&@`I*5rb7 z2Wd z|K9L3Ng;G{Ir()bO^(eMK~e~vTy_Ynq{-Hsqeu#&lgWWstdrn;tDM0Go-dn^q!2op z%&1ijwyp0j-1{=B46jI12%Su(X6%5ukot`dsl6sXB`JhXCeyyXJ%nW1g7dFQ3ZawB zrTCM#>X>QsHy$P_gia=t#vB?9vLvo&(x7VEl~)LzOvabHd5~oM8~uCHm_q1e(i3th z4@u9vg}aaxLMM~)O(MP`8DF;5k%2sWrY3DxSdv}?PS^4E~*h0!3K+KZ1+T27)q)f)e4gHp6T*R;1^;1ZsOtzg9 zd6{I}FDKwniz=U|kVu&f*%G zc=(}?8T_iAb}bVUDU-qfB(~J#z2g>IPa%;q8M5d1J0wFkuK$OmkVuso$V}zEpJKRa z!YVHw3w*xv_r=2Sd?PM~zd;*+w@#Yt5XUR-$cMxhPllHN{K~qz|9NRv!^)(t(sGUp(b*Nhw z#%zIO2DNKglcZ2PnY8uYJej1e`)~b83bm6-Yu;eIX;H?sye!&>q)muE_-Z_)nw!tg;(J)i!0gwsv4Pc}pkcgc$uGCUE}4P6XYs%A zFi^NqcA0dyT?6IO>_O>n{WhK`6e*NlCOwUQ9uHD^BQgQbNA z1ZDT~r{8PRxa>0N{P8LrcIte`d7vI%|CBL>vdd&_`7Rql!ezr`iY*=gsV4vZ71k;* zkAVb@g{buZkQyXt3E`(tw-EnUQg8T;ucE`qzAt{7mCZosCdlRIRccVX=@PecehM9C^b-n;{ zG>+-G`8UQ(Wk(XiFq5(7aM-wJm>NPDesy*WNg)g~8Ijt>3-U9R5k1=2ND5(?$vI3lGxyC{uqA(hhGS46`v^{wGg>gt;B;_DyP3p)rLp%%uPQ z8gL8l0~2Y2SI{I7uN4GwJNn3HBfJ5|qwv>oGSdpQjLp znQXPUK4fe)d$!v6v@J;%hS_ef{y0kxH)l4y3_Zv1Cm7e9S^wl^;zAwHk){zvPr#At z`xF;>M8WgRNeXqCN&iXP;K`WJL6rUz2HYgc>M&bm^=DuhZ#kjOHdxvP$XkvZjx!%+ zTM3DnN%y{@VIUWxbnj_Zh@_B+nT&jGfeV!Scr5Z|U;JTuWlSLvGZ_=V`Xor@wmK&6 zpLryOM9idf{N)cp2H?^<$2HaV2_X?PY2BE17B(;(tuRkoR&gVZ$r3T!z_$nKesCuG zs~2#6Qx`e<^U&eMg-*-{4(jFD3j?3QfrC0!oJ5j!Vm7c>KXAb2?cWg(So$d@C1oqK zSj_nST)gB5aJZ|Z2js2Nj5sUCj6cl92d&THy+3P8oMmIiALZhYQsF4d9{tAC!^BxT zX8aF553hRgN7(3a34;gfrTc2S7ZlE-GUG4w z+-myaJaNlkZEF!{Wts6;dT#kJu$jhtU4;7rb##`Ob9kgl&#g_yEh28Ma~q#nDGSdU zGvj7GxBL)=xmfw&EL#g;;88dW&5Zly;#2Fvr97LD9@3CFtIdq()$@UmO@-kkuAC7E z{@x~$xR9LLp`OunT5XWnwYj?H4;-ZWxBxfe0rXPo+#^-yK zQPZlVkra|MlQFyR#K3yOUJtkByNXXGDTHGt<3=1=MKW&S?e-*vaLi=e4L=qq*>=6( zMUp}|W-{blG8|>8nEOA5-i6~Zx-Aq{`~h-Apy?X?OZ zgkvr%tWVTr*$Q20X@zji<*kQstC_u?*XzwDDTHGtt#=2uf<56rexBA}+t9J{U*4^K zZynCe;N%VEx#0_KW+v2THm3dJFt|fdrTzRS?P@91W+ubVP2Nc|?97HCw4Oq3X40Pj z+dz``yj!(BUZ~AX2G{EcH{#~EaXo|UT)>}z?%oNn4jEr%4LQnMudGo0%Zj;h2uKb<2?yk~5R8kJ1uIx<;<5Mp8)5TpnoN zP?P(|y(B3lXD+Xf!!4vNt?TlNFSDhToVgrq#uI}o2e!Z$;Bj}5k~5Q$7q1ce|hya6LA|6DCNxO_X00tL)7} z%4IU<9Zx*SX((fA)L2OyTS&P~rq}2Rx4P;bXL^;5c}WT>m&w*MR{jbSZp0wvPWUR2 zq+!a9?5P}kj5~|3!wG#fa%Z8YSBMKKm&wQ~`FFuVe*$G>nW9=RG)%dXY5IYCzS$UV z|9n3{-m}Q!WExmVxolu}%OE!_avVyx*Q{VSA$j&G|)dt0q6jCme$-m5j zJ9A%zrsQ)Y!Zc}|a+!4QkEjo0u0-kFJxMz^3MrS#*f%GZ014{~DK}rQ2Q=n?cuBXy z(zzfvpmdciKANPEa&yM?E!^+|%(VRARsp6ybq;EGmqN=hN7Q6?tCrESeQhT)u zA*9?KX-Y~yv;`0>G0dD37Q9DGE2LZ|6ULn`3bGK&gkjgZkTguWk>m8cVAv4J@QwCZmTdKcGDVW%R&dNhF1o%cSGlkcu!S zoLS-Oaj_9Tx>in0Lds>b?ekijKwd-H_OXM`sw0Gy%Vb2?R$qghjxwTCvUY1Cq+BLL z`}cxdFtZtDX!_#Lw6sFXWis_a-5)^0#0hTu?nG#_0U_lw>1q^&SF9N*UGKO}e@-wv;2W|BJ)0tAsmzGvY zxlFcN`|Mqi$^p~ri$%jo8m8RHZ*;r8IkQf_lW?RSg>lW9mEUy{7g8=8ctqa#HgIBi zf{Q%-bt7#)E2LZ|{l~3=XXZX|MTQML@E@(H8m8RHMY=^cwHz~`IxOvcLqKtg<&OI7aNV!bLw5!|!B+L?F8sKic zm!yz#nRJe6J{V+El+F>8w1^<2TqdmxuTF*yoQ2Xlb%SiEXqmIFy%&W)ANAth2Tb1igNTzsS-ULe(VPkmc^cw(G#PwM%=2MgQ7NnAN24!l!KyVeOQmmTUEjeeQ~au4pW z84WAWqU9D+E|aOF=D|!reeXDR*evZR7g8>hX`6PzPOi$d_4%|=DWqI3H)J-}5u9A#z;Lw&2c0agAWsmvR)w3jpl*?pd{rhl@GIzx-lvsOQ7D*xH zGMTb7V>X;J;VBTL+^tizTN5GWG8r|c4U`Q0Z6J_xCw^I*#uQR6lQBDe17JN1p^VuQ zl0Z^OxlG1oG=Y0QRmS!H?jlJcyr%4F2vhT+LJ&yde~SEI^R_!CrV zKY2?#`3qH+$*@yfR*($Kyg!G=6sjzfcE68tex)p}-L&E{NukOz8C>hhaFF$JJ%g(^ z{)41YWtp_k82}%u`i&&^$zKMNG_0~wMfBH+pbv^pg@NJS4Vc)armY|@R9QB#?bB&^ zXQN2lm>uyXg(}OWwPFk$->S5h_75g0R9Pl%$wiuzw0Y7Skrb*dlaAF5U`f?^zGL~s zmL!EL%cN`gay)9*;udlZzPgX3P-VH?yBN+$+4B24+S6E}%5wS3*Es1@$2>P|a`u=~ zmF03k(pXJ?u#oN=r7Fv0EB2~^Gtt8&f@Hs30(Vblls zuUUT!Tdn+)|Mc!}=HmI#ihlu@r^EiLqhQD^*u4DR-|UAN+F*G){M67N{`E_W`LXKu ze;Ew_$myCkwHvhqMl{3K+hl4tq$WP9$@&aN6hbrWn&nl%0n2qt?rn~@Cr>_C(~n|8qCL>W`a%S^gIk9h=3 z3s*HL29sS+ND6tGNl&k>=^%Tc^mKdPjiiv5nM^6s;UFw694;^`Dpne=+{)6jUl1p4 z+xxX)Jo9>#&bvjblN9nY8#6Yp#SV}jl(DUE;!&-PDdc4)U7@95-e}&6(q*Y@BPrzN z9O+wlaE*eHp6&qjE!=PB0g^&q&XMNco#OmJ_5o?`-98!5Udqx6c{xX#lD@e22B1Z_ zv`N$FY$hq>WhN6=_Wc_qM0m){-@aL&B+JXfrxKR=K>?8P%nl|hM+%=JDU@Y4rn~=W zJU(BcbbqjL3`wCZGa0>W3@$C4p)4~QvGn>ikYAyUn4gMwXUftFWtqv)E#;Sj%#Sj3jpYGJp)50* z_U=pA`_z|b)9Qb!olS(Y%%m&faUPI!a7>qH{W=;`D9cPXtvx;i&S2M2Hm&*|-g_wP zDU@Xy$ceis&G#DAyM|3#~FHi^|4JYihY<>esNKupdEBUN}cPQwu$rjp@Fg?=i@4QM#`b)wZqB zlbMXFI{15#n^8tpj(S8(EA(V0V@8kZ5ArF>nBlX3Cn@w~CY_sYa0N66qjau&BaWod zlbN*MEC5#qAGi|2H0tVV?JCH6vaoHV_s=>)OB=n%(u>9vQZgGeXjR2P7!zk;rl3W2 zv}-m?$-B7rPCLi5fGo+atAEnuhBwR7n5-QOGSEK* zt|{tz2EJ41Q<5wj3o^XBPgU5q@E4q^Qx>I@WW`vJj^>YskaYOFSCM3~SdyKOz|2h@ z(~)>0g(U05lB_YOjV3Ff9YB&LVoA=+dacP>WAPnn<;Z4rSdi9`ky}Vwn~cO4DHO@V zupljKCc&9RT~EuhL76036BeX3qta!P)}GgflVmwqke1iShLg1XeLpcqKd(0}8v;4>y=+Y0@c$cpIsfjeE(0`eX+tchH zl5yLr!p*t5g@pdgWZT=PZ<1_#<8l~Dq5m>zDK`$*G5byZ5*L0WDfC|^gRh=~`#@C& zUvgkQQ?`)Mf0+zP%QK#2NcXZcNeca!%MO*>X|mnt#YhVMmq|;l{IDlvujgBT{!CKn zzf9T+r2h(g!teNb+VZBa%$8CiVlph|SS=WH8OpGhKi#J>g=oyBsXLr8RcU|zBep(e z+X~T`%ctMrRZt!CuNm6jCq!c=?RDE#AZf1^iXBxMQ;5b)2FK*VdHj30p21P;J|-zd zV0B|t3u0_e(J|y&FF1=eOYVuBxhBT(oihJr?Rv{rDZbG(gv2)2kyY2(l#EmRg=b*mdTzq z-ue>ulmRGvR#~^2q)=&@bPrlM8kQD58MqJc)f=iE#o8Pba&o+kEBp(nT%fiCf>orz6+Ih?gG3kQI=My zv`mH55YYR?D6&) z1xX5(mdU0Cs*Qv**cFsb&F|yPS=mBDrDf87`XnCNQ7G*v>TV<{R9YsTBRk&)xeTRq zXyi7MLZxN0)zvC^?o*yQO5MTi_J>ehlEPY zq;qlbE0E1mI%odco}^G|nY13B4EvDJLzLD7TTYV{DlL=IYa;Qfn6k9d-&(XSBve`^ zgFdzGhcR(VW(pc}4CjT)dJ2`6$$)dmSCb6LY`BD^P-(er@(R{b9W$Uo*nW~irR8#_ zH&T<+|IlV{LZxLguz0f?Bm)c7z)&bgiwhY*(ori=<%cW^4oH11y_D}MB8dIpWTn?|hilpPi@z{5j zEhJQ0Cask#T_R~M{R2J~Q>0L7nY4U<^c+dcq={Yk6GSq}`DhNeY#g$@rv@btL0GRq$sXm8BIbEt8%xE;v)G zV|s?}y-QN4v`oeiC^nyDe0sq>B!x=Lq^Dg2IBRB)*|PW_B!x=LWTNxE!LaxBz%7($ zZ+3yCP-&S=Ir()socsPknR4u&oup7{nT%TKg0AAT2W8Z}-CmMHrDZba|; zW+a75%VhAe{3A&QAGUlzQmC{{hQ#;=kql`u<2{l>rRB2uAK0warESvZHA$h;GHJ;- z9qv7|<;zvtY+R_cOj@6BI|O^eZ@7i5Pi}0^9#g8cOorLZV%1xUGR!hsyDt+eEtB>~ zqv4FHO8dRzfwZ1NrDZbg4!*gcJ?5=?cSs7AmPvd0NB$)3rH)k~DO6e}gPV7P=j-N% zxSqjH|Hd+`oQH%;%cOnNh&r%spP{s`yS|2`P-&SAn%L)07_$}1pz)m|NeY#gN!!MG zcokHnZH4l6cgoTVm6l0sc$1+dtn~r3#gn%d@4w(&W$GzN9gQO3US=d~hAh9`k-L znuAG|mdj7NG}Yv|jZL!0{4a0y-f!~&&V6-pPl(J)KSNTewCt_kJh1D*&4cM0yw!{G zWCZ-B{>SjG-je_GR&Rv*TJQh9SW77u|5x=3)7UDu>-`XK11I1R?b;N?$%PW!*=w>n z-!5{u-5});>4*PUy_R%J83+7x=Hen-RIBt7rhpm}T9MfxM}S@8kJWM$o1o@Jw_=(&63sJ5{1?UB1XPaQ~{ zHCo2I=((r;j)B16NA3w7S%5eTwT!>7=P7;(SZjTeC*Qw5PUAVXmhtX-?z~a-0E`YV zn8B7m(+P8%vhFO|GM?*uHDW_2?*bl+Jhom8&JR?c(`^~=tsmVLFcNp#&B$H#cjLuV z;Vj-VuK#ik-@;w4!^nQOK>HSUR;fvx6)IG$ll319qXA;{)_OY}+#na1ZjZ zMIjG~v#QJZKs|T&`VdYP=I6-Woz~fiv$V_jU_Fms@emK#kB~=yu_l%{>${8()${NY z_*E?GOT3O3{iYLVk(cq|dLCPE$d|xx;^?uZmTIR9R(cs9spk=&mB&fY7sw+9pL;-~ zv)s%0M|vLm%`rdVd60)rELDX#Yrc$+(et#5yY>KwgVtn9^UI4DL1mw3;g|7T-{#?p zE{S{=a+jr7JL0VVGCn~+deb-0z~#aRZeAc$KEI)Dd6s|~|3uI27ph-_(V;cLjO^&t z)-*cnz>I&Y=gu+sqKW!isq@1b7)h0NXEB)Z$$H-E_NFpV7V6|Z#iwk2;!^~GyavHyU*3l0=^iz`)IYH#91n4 ze3qU^l}WDxd;{{Rf_+*MXT6y5uk}2pf4BO;|3V(qEe0Q6DeKOnG2?Uf+_}tq7kD$| z&S_3JaaN8Q|3=TPXYi%a?4Om|^AJObGCIr0j4#mh=uHKB(ZWYByn^$3g|mjtc&;z? z2>NXBRv7&}E_~3iFYrOE!dXaWe2ISafGZDX5)U|3Nt>9ln#}mOxp?!h0ySQvS9Kbl zC1u8!=i&<+<%~YDo|QQ3%8akn^S}y^;0mj*d!WxQ{P{Lz-C0~_e6^m3x9PqPwtQvW zbm2`Z9U{&OGvjOZ+)<;6UJma%gy6KDOI@m${+VoiAcD{*VMsS9xyp&8HhjUkq-DpABOr^+@U&Pp`n zyY=gC*;F&1#^)}ICeCs+<9qddP?6_wb@f$Fm4kdDv5_d7jx}kK7_W<1w7 zhNS&GXr;z?on1hjb!x_QePc+{v6okXm&0{W`c6rA%BEwnn(<@$b&r4l0X+Xwd3>uF zd>Wu|R;(G%)N{`#=ixp^<(|HOJR{DsHRHLyF(iKIHFzePJ$kolX5y?}Gkz-9=pDZA zNZezueVsT9*o>di^Tf#eJz=Nqj+-tq)DL|qUSNctXd1}UKDxE;jP-FltpdEFY9^S@}J>& zS9#o&4uxoRR<;?xs^@LbwuPyY%G>T<@e6U5w;8{#=N8}9(Xi#q;=+ey9X(2%HEzal z>Ur?Vh1ZD(AIS3^aTdB6|5eXJJVP5353wH9=5?%gGkzx*cXSw|@wX3Y$2&{jjNjFB zOR=_QjsM;66fHdK-i+VVbL;Dg@vz&#K@0Kw@h557oX2m*ALw~l_%Co1rbef*<`X}l z(OCg!{5L(f|2g|-;`ZAS1BkN>&iLBoblIs zZkxWcC~@1s>%)k%T%Nsr{4tzm)q5Gowk=w#WX+s$Up;rtt_gP&+21-kv2g~C z&cZq4d2;b9PAn(Nos{c%^Q**JJ!d>$F8(y~rN*=RnX)-g=!_T0#iyr2v&kO)qkW}` zv$vfYFQn&@k2Y+DGc7!nfzWy@tO{`!(-|+K@MwlR(m>`+_|0(MK`#l-iMP2z# zdH4qkzpG9elfB>FZd|^bu*RR@BDeeSTnSv{$>0sMde#?u9y7={E{g3+cxef8>I;R&p8_`Yo?yJK6_{x@czhKAB}rL3vZa! zvu5kLv*RllaH!L8-yCyInH1o{8)o&aIeH%1x;QMn54?y1pLRs&H8i?mR?o`y>+^aB zbt(@#3q(%H>P_}4CrBLKFso zdAbZzS`m(JnANiu>qk#1)f?_yePNG<`BcFzAv8MsstWeOE!A`9L;Naa^}E5HcSb3P zDUNQK)w7oAd2IaHCBWeh4gzP(p2|&t!i}T!j>A#Rw}v)1W2d==g96Cjm7 znl$x=G8x2mH_Yl;8}vM3b<$qo#bI<)!ji9)z=_;2t7mP}^RQFmR1=w1!zdYnPr!tgH&9M*X&)h`I0e zq=h%k>REgAJaqdSSa5Sb96fZ!qtA&OX7#LndY%_Peb|!RX3#%zkCF zG9khb&M>QI9no{=lqI!*FUQfHANN(BeRCVOd8=2qv`yFQ(W(u!@P=7E>$r}a zGyA`Yh2tF#TFC0%7AwCeia>J~irT>M0rk3A!g)59Yi*LCg|6W>m!>pclRzJG?#$A{YsqfRc zFMX}#RUF+gt7o0p^Qh{|-Px!ORf9(fno9s8AF8}ibal@>hbxqHs4@@mf3lCrF zvzfSIR?oVj=Rq4!z|p3DmwC|K6|IOHX7#LFdLHoVd|l!J_ac@PH_Yl;w{!8>a`iRt zn5ra3-13H5Ju530-&JU&##djtMxz^M^{iaK7%(u{4xhWa?t!(Jpc_>lXt$mi*aS<6qWzMcgo}XXX0EfL418 zoYyI%TN|1V5I4-~Sx@z!yJbUPxVoy`vLs4LjJVqvX7#LRdT#x29>m@3(ceGQjz%}k z>RB&xaleHFiCZ35*A5xOte%zo7XzNK7S#BzuG?vJe>~+2ekY{-6eMHezk6 z)6UP*xN%m`pNn5FR9)j2ZAziU&)qny7u55ltkyMwSHOi&I{!@|Exd77FRbVBlJQ=W92i##z0r zo=0t+f#-R+A%W}r`rCFI-8ie4*YlVMXWoK!e*<~U&2%O1;sOHtmkdBeh($y_FDW7T6p8EUPaF>m4@S)77~ETWGR+)lDKhJucqh0*U!SV zQ02iF+bL}r*WEa)*Ua}w5q>i6!+?{rrxN%mmqvw`-wMP)Q zRA|+UxN%mmr{}gpk#%6Vd4!wJ=Jya*Te-dqS^aH24|6Yr{auYtVNuq@G`ewCe zmF9PG(*;KsNFZ*U)tlZcX|Y-k?>vHGZek#c|<{v${pkZ7bh~^L+N` zbN0@p(G9cuU7MaeE-Zj^omsh;ah%Mrl@r6Pe%G$&uH_~0c0l2-1$)ZU=!RMSt|J$} zKmC}-e?2&kxM5bm>(ujz0zF1){PkAlaS9%Gb$1$c+Pf}2cYU+&g2rcFn3O#_e?2{? z7T%52^T-#+;6)YRdbry}{@r^Tal@>Bx24L}td0da`wKmkB`pU3f1VDzXHJ6uIJXlb>NS_o`QH#$&p*hFO~VGvqP$kLS_o zhRNKkUa=WZcTR+n)sU0^_N?2)4c|ofs#k2rTmQHpPe1Teg^mcK zsKR*JX^q@jbJ2Um4U@T7y<#&S*<$iTIDf!>F?^Eszkn^P-kBLDbFX^EX1r&kpWq=3e!R&A2D&&>z6NBKHJUPp8oh zlet&DVl$qS|6m3zycv1&?N!R_7kK(HOy*woip{w5*Yz+vH^YGdTmI-lEm|8UbFX^E zW<1u_>0{t+k;hi=sJwoGqqFaM&e`X^>J^)DR}lWPj_lJgBy9tB)7Pfw zS-cGWV)i zY{tXOt;!F4406YBcOMcrOy*woip_ZJd-YBMzkxiq;1R978YXkEdc|fuVpg7wz&}SG z(a#k^qZ=l3uX@F1Jap;FTfpIj1<8C&*BitQlet&DVl$preI1@E;jSF+iC>QSi@0Gj z_o`QH#$B=1nggGS+|_)f)&mTaxmUenGv2i9Hn>0Vfx`yE?O%asX>`M6?p3eYjN31r zf}>6S9UAr@+h|iQ!({GNuh@(`$A69cyiy~asrTb(bi-usRj=5Lw|Y>|PMfaP;quy4 z%P^UH)hl)mH)kdveFKhnn6W@I4{V{$l?;=)H(Gyz9$~!#{m=Iw+;k&KKi00WhRNL9 zTF?ELzlMF@=P+{r=`S18x*H~QZyP;t`AukESnh?$TTbe%RcFIw?v2%R_r+5^fGWUTRiScq;Omh``IXp6+%TDY){zM*=TwW_NhRNKUpy$q2 zd*MNaIS{#XQoa&2x?wW+ChEEMmz@`3%il+C-M(6DpN7fY+ey!(cl-b^BB%==J+Gd2 zLvNVOy~%nWG|Qa_Mn8w62Ypz14lTT4GWT}Y^MGH!f~%{_1NIKlCMSl;+}kx5xBUap zv$J`nS@ATwVKVo2%f**3g&VtUKI)u#9Ly;Jl&eq78U;_;oV2Z+kD~)cL%)RsV zJowBe$UZ6$-t#~^WDJwJccGq#bP69zJfvAY?ILBE%)N_q@m4VnG+rxpA1%CLGWRak zb4wZjV2%H_t_X3%WbR$2a{QOnZ(mhzUc(}K7l1!wF>b%Grh~LS*D!p0SLqkQ{xtFo zar@PA+UeFXe0$gEdD!m{@cF1Z`lX<6X$=g+w|AYM+pDciCT=gXD2%va`1Wql^I%u` zX~5wlfbjj!vvA^u;oG}O&+R+zHHO3PDRTR=#oEl&FnoKr=y}kbNGFUQg*<5R;L$X? zVfglL)pOeq{S%1WX5T+g+%SB5x9hnzZYkWvs-s)$H`Tad`1bD9bKA`Q1Bl!Dtgl9+ z8-{Q1Epp9^$U?{@S&|FnoLW<>EIFG}8EyQrczK zFnoJ|$i-jogqs<4;a#^9e$HNaf za(?R~tAs1m0pXwD>z;Fgvz31X=7c_wO5y2Tsh}OoKlx9;dhs6o9I+`6+`2=e&kAk~ zf9`!3UOk0Z*>i?$xAX$D$Uv<%zmi2W(#%3%$3$i_q8JoJA4mq~?I>OC?&8gxvV~YxHc-OCdsJ{YkoW+|+w#T!UZY)hn>$5OqFTtfvT31s0 zR9HqAWWtZ53V|$zGU11LPFhb^&;=Rx=VROx5>bZz9@3d4i|2xLf4X!fY#f9p_xSbr z>Z!7ASvMDC^o`YcP8g3e`bw3aBv~>SWO&OWbwGZCGTeFdQNMuB}O z1`sU1lg;Q`9XKU24`Tk}QB5OLOM* zRdAg6oq{3FnN#X6A<5deu{4dyXa#qczOQj19EFhcfED zRoWGaC2m2+%=@Dp$Y&^H<`%$ru9T%^bz6|mW9?3ZgmuNIuOH#tnTlj#TaY$WlcO{p zvc7ur9!b`;1sVOz%NDe>(dSNnMv~=hK?a>(@-vKi8J9NbL`&^F#7edx11p_`If5z! z%Pp-*W3q@X$bjCZXOIl&8H&%Vlr6;iwInYMc&y3u7Y37L=~|G1iRIvonZ2~}`L(kN ztJZ=HA3tp>Y}@L%g~G>_Tu5WGU@b^T$5B;CI@+J8M3S{?Nq#b^u_niLH<4tST9VGo z@TsUv>#+aSkR&VAlH7X-N?W$v)%6xh7N-Si?R*BdjVi541s{`SU0RTq)3?Wvw44mX z2j0q_z>>5et+VpNv64OJ7Z0^_Jgd=?tXCP%nAx)CPnbuPFy%#+l&bP`LY*52d_$6=3m@GdFGNbRR{vZ$G-j|VnC4eL=&w@sqkNvM9t$$=My;zP<1W`b zLz0DKLAHHifg?;Ev+c9Ky-BiWEJ%yBqXV{WC0trd;IS`AvRo|4;6L}m)=_2f9}nPW zNnKA?iUk=maSu$TR2lN|BJKW@MPf+~T~bGrgST{~Fh2RcStsh~XLz>W-EG0{_Tw|DtXUj63rjle8 zS&)t*VLM4W3Jn-Zk_BWz+AU_-XVo$7!Bw>T71oXg8Qi6MHIR*Q3k9e2NTV@XHWsA) zY%!dhyh3R|-A=1ntQZS2XrJpGjOj)hw5OT2o-7s%(srxTDU!Au!P>cxbz(tU2U%{B zv<@gUi`J7RVnNyt_djp^TZ(O}hye;wqEr9oypTXUfznJ^s_%G^P+&nQVRMc0G_E z;+U;(EF4Wzh^tIG2NY`tvK>liuL)Yl6XGh9k;yIL*^>Hui6RriXVRGLt!Dl)G1;?a zbNEzz2jQ4K!+j=`6yhqA?v-U=w=j1^>0a#YOj3xeOnQc0>;Mv`IuKU}uG>XYh^tJd zyfY7~zHdI1DYZY>PTlMcW??;@FVgV@3=?hGwomqGv0R9&Y|PkRpF^Nh-`S4s>Ulv+ zE5ubMUG4}7DdufBrmJP9jieA)bEI$KFK)o8+YkPNxH_@P$0UWgnj_7<2X%iJWM7cx z-hCrGkrd);jx;5$J_na#_33ERl8ui@3UQUmggwtAK$gVyOxW^bJxL+1G8y)uP+gF) zH$WJ>In+W@h^tJx$1ZCH5~h)`_l?TegQO5wnT)nk< z$0);tHasCI#8oC^6Z=g9c?V^z`#iqjrA&~7xXNV2{;PXI&O{mU-C}JE32~Ll(BqHW zf-HbC^x&kUG^P+&nM{kW0Otes)!Q`3676gv#8oC;z0W)XITy!tb-VB@jVZ)cCY#!7 zK<@T|zzT6SaF~_}gt*G2{Y977FsAY&UG_h_7o;(TxXPq+&W-0FA=1M+VWzz_Ng=K> z8C{}FZ`wl9g-4bpDa6$rY0jLO3R}ky;uyr$kM?M1Fd?qyNYjX3_;dBX%5-i-mkjOr z6yhqA{y!Ce3ETEKuBZQ=3HaiIviAvbmC2SHE%4AzjmRz6oYT_25LcOW|1kt64r-Ql zKd6>PV+wJV$*6|k;dE{bE^SnOUo8^|ah1uK*`4tE`47sN&%Q55V+wJVN#|jALy#dT zoj;hgYqk(qnY2FL6ad@yca+xO?%*rC%C;5aDwEM?c5J1kjXp6`yV)1wDw9D+$71Nb zgkuKn|N12ws7MFXX-(3&Lb(rRVE$nPU1O1k&fsG%Sj4x zmCKKUqBJ?Awf68sh^t&$4o=i$z)CqmNmc726ND6V4N$d17Fo#!{);jK+_9TV4%4M};c{Eu%M!VS;;wqDt zyMvQSS}q-0O=AjimB~R3I$|PShWpTDk;fFRiB#SDB1o-vnk- z>e9w9KfQyb5LcP>eD-(Y;XH0b<3jVZ)cCW9ZH z_?Bewy@&W7sIs0yTxBw3Tva%-)iFaxn1_)R;wqN|qpoSPZ@Dy*LR@9iV#^EXq3rc+ z`Z|=P5LcCXVGB5)XaCxw&FAc zrpVAqkB!xCC52APWYG6{aM}pBA21QyI6#|N3!Rin+tqttleC?Ckw8l;bW$d*85h@( zw5HbkfTYk#nY8WsA&#VNd-<l0GU?hHdV-{DW6}wd zLMP?&MVA(u{5vs*q|iy3j40a$_daE5BTDqIlr5!B%A{*e!^0$9%hTgXvM*m2@={cB z_i#9ky^UKaDqj`4-H|#e`z3~Nz};XCP}lz3E3#FMUy;T4WL@x&Qs2*jg=R0y{?GE_ z`rOJnHP~up4T2s2Ph4nQwa_<|fAU}6lT9@Ly#y*QEHb3rS4Z$DeQ@Bvy(jy9Pq>tt zr{Iw7wvFpdQb@V%Ezp>?d5eOCi$7ePR@5j;Qb@T>rl(i8fLw(#J+(p3(&l`{Gv7)~ zwtl@m4J6!3K+1i&wLFa}q+BMQU);wx_~5((HHm3V%UtG^*lnWsMCR1#yJ+QQpR$+o;*@fX*mH+;pY~l8>h1B0k*rMQwb|i(A%f^fyzY+F4 zH8;kNd1JaJbH24%*b`juTVXf*s^in6pq%FP+mxA2x0rQi^Us~V)-4MF(* z1&S0>ZjLnf{;GRdko`cKdw-r7Oj1a>ITC&id7aCEzQv_Y`rh^>Ng?GjnQ*%50+3}; zCj9Kgn>%G`g_O&rqwt!_AUmOSyr%bkBP*4K|J$rF+h~EhL4M%VhMkp^$Oa zARGPH_TnUkl*?pz=Z`yrgxgUF1fAw$2vOEkNV!bL4ttE-){8QB;3qXn3MrS#h?~pt zoB-E-NV!+6+8InpxlD%sVLb%0Fv`#e&+^llLds<_E%jkpkjm^Yt;ddQB!!gAq-$8Q zFG0@7F}gZf9ncdd3{cz^uN))I*lo$TqaxYZ@L#2 zbOp+mdplrEQ`S>RxlFb(-#G6Zv z1X8*EjagA`ElDBeGU>e71Lx#67}DfCKOW!sQr1&QxlG#LD0f_&4i&92ilmTonT)=t z{1myew9$9R{!CIxxl9H<8ie^6-b{i!i2G^9ND3*J$-qYA+K~)=x6crgLds<_VAPv% zoTy_441a!#q>ysC{A~-|L1fDZOJ9)`QZAE$eWoOn3`~2Y14$v}G8z8Ov{vwW*2FCo z{`H_LB!!gAq@&+^_!g)l9evhn`>l|2x%_4Wo~cziw+JRNWgik!E|=|XH#F&~jPXU0 zLdxax!W2JEp1Fr%OOZm#Wzsri0PgY1(pm>>+(}YMxlCH_HK|3?a;NBHl0wR5(z*eE zUrhFxtN#9zq>ysCv~Ph~O}4bG)Mhn8%H^`a1-!3Q*E7%c(KM!za+w@tnE=P8uW|+( z6g=xal0wR5GGqAgO(2ip-j^|SD5hNHQxQ@wlc`7B%>@b9ZFo=i@DRMiSEP_~nM`{f zWF?vQvJF0FR-}+}nM^mq3z6AlroHM~m!yz#nM|%W{}Yf^aA}h(r@KiCDVNFky(JtZ z<9AGWO;Sj?OnPolhpUk~rsw)X?P@QiTqfhskNbsW{HbC1Xj|DrLds>*^PMl;3uceG zJ`5i-D^f_gOeT)3a}4&rblgIT!@ATXDWqH`JHPqieK_|iuPSsd)*ashRmK!jE|XE` z&cT>Ia4v%D=b0B1NeU^K$<}2mOn~)-I}f;XEmgQ7Ng?Gj8TUG{1_~GPqxUxH6diaXo|kK0QWDEA(F`?GL*pgG6Yu->>^2 zNumET8T7LWjurJQErT*|-X$sYUnXsT9hpkf_IN@yl0yGw()vkJCrRu0d)-J1{g+AG zg;(&2s7q@*+ovf>q5m@Jc>eNDkjgyX@vH*Ab+7D0LjPsbb?7CW(2D#>^{*j|P;DEyPtO(|d)(6LR(DF#Y|nc9HxK@5w&jj8Owl zrErP*^ON%=g}BPbbWZx{G)TyYaEmwgSbdU0TxBw{@1Hl|Gzyak_!5F1>rI+8j;l=e zjQ@Qre83Q|A+E-Hv|Dx|t}^M~SD`#CZ4yfNw&mJ1M~JITdZsk`5M*zZo(Zu_X=#PH z%4ACLJ~(iE3!qF12pFhI_7{R31WNP8pG>oJWSDB0*S@Um@aLIr$HhAw| zO&Z5lCS56=-vPM;r7Lm%4w6D#&5^!^S3QMe#m@`SxA0e12oBM!<@Cd5@H9ex8t zL3TtL_M%)YNg=K>>7Ko&Eo>Yglx(3nD8WimV= z9+Y^Mi%A|AEZ$&|_#xb4CYU6vA z%6==vRVJfrzPp9CP;`Z?9wddhnj_7b3zx$d@`Lj{#MRlIw6mrVS97Fk#78e-@(FbU z{xf1|xo>DpA+9p%f3*-ifJ#8oC8y-yA&>F7F6 zn@I_AmCKpoJ2g4|<#HNRh^t)2?tyEHy0nf~H@1@$;wqOv=lxBSM@DLohlIGwr1gVK za8#>fT6-iLrt;wqQsH}IBS*%K_!-uaHC5LcNT)O-<~O?+42J~YVx3oRWAah1u8!6P9}_#Q@? z(f_G7rVv+|Og;Dw%u>}iY*Y8W(&l|aTxBxtc^I6*RGIeo+TFCCLR{tY#po`YeDY9x zm?gwjCX>tid<60>T+ie;J8OG_5LcOu|E}FZlJRQ~X&Fz5t4w;%f7FAd=cMTjt)~!I znT*d=ek-`LwDAYm{!LPdt4w-UmxUW(bv->xzM4Z)h^tH{4qWp+?0sptg%UF!Yw<>i zt4ww-^1dC;eXme<&L6ax#uVZzlToLO>;`!NWmKlM1xX>UGTFNLX1K2SLOz5$*TRja zk`&@9lW~9M+dwkz?u(Kng}BOOY`)Ign6ajb_ectHl}Ss?jJvRHE925yTJ+QMvk+IA z41U!cl8-8b|Ea32rw~_}44JX1Jjsx0QQE^vA+B=y@x7Uv9A*8K)>DY9OjlaA?mC3Hs?4;0=$G@JZ0gaxz?El2VLbwB(ZE6{Wdn!R9G#%aN~^VIDRfdM9i{7a zCh2%{#%LN-=%h^ATU0zo(r!<`NmA&fOa`YY+N|hpyK{Kt};oX;<5-GbM(tl zkaJMR94K6Zq)>60Odr}1UinjBpGqH`c9o=1ahY@%IoSy0P#n`;@D?7R%6bYFmr3Wh zJuiTSQzzU@E}piAq)>60j2!vfIQUSM`?|;xF1+(q#uUEofXSZSE9QaS5AIx`;=ccJ zGD)H0GU>in8k&n4PS>!Wm+}OX6e=#0p7{%5UsWF*d%nJil}K4yq2e-`64M9{ZC`jK z0Ts7ZF|Q_#D=w2QN*_yxG2taMsJNwSH6|%kTqa}Z_(p*2h%$E8GuWZkr4_#IfJs*$ zH*TR_C|zm0EF^`BnrYasxH;0?dv#`UkOM%Pd#@-ofuvAz zbEGNh@G!W8P>W5{!PDBd6)G;12{-S6)99)CfzIiD!|6UbBxKoECye*R-{mInT#nL2cL-AVq;3|yFyZ^xJ-r*+MEG$ zGL9ME|HwI#Ld9h=_KULcY{q;aW$d(AoXsmsD^y%2Bc4YyAW4gxf!-=1=oaLHXQ9*>tD{ONJtaipykJ)laedLDPpP0dFmbONuImip!*PM{zvgu0!eEmhlcr zq2e+b?H_TRwor8AsbxtD6*otkGxy~G9FEU(Fr+zi=V0wxCRE%UX&Ujx*?J&-acM_< zwh^nJvW0|-%cTFG1K^p3&ncAte|)P+q2e;x^3-~qzQIFssJJK3YG*K^;xgH$NcmA9 zSEFoGXfWPwD@!X>TqdL1mVqn1`s^#pZ9hR$sJKkV?4Jks=;l{AX3XBRT}cWRmr3WX zU!H)pqjcU3!l|*cv_i#Y()N}K?j^IQLlvIYCn;21CS%OE188ZZUvKS2QmD901{YcM zEsS{`mo~V-*rz0gipykR3%~6o1H+r*t4zvz3Kf^hfSE(rkPMhH3t#L|q)>604D{;@ z$ELcpf##13krXN}mt$Wo)8xqGACnX+E|cNg%I=44TN}4f_@;ReNeUI0Nyn%H;Upa+ zqVb+tSx=$ja=Er{MNO`5oJmrsxLo$I=hI~8&To+vDlV6|Gk((KtpgQF3Kf@0>x3yq zNLt68@{klNE|Zp*AI>LfdG^CNl0wC0(t2oZ3`y$`e_&rywyjWcxr{xD=Ue6Tw6@vY zm!wc}xqNG^k0#6ijZe*#F@=iD60Ot$8SD}!$}T+ig@hw&y-8B?gZOvYcmk1bY_@fR9mT2iD?akqpqz_BPmo|CR^R>@db>j?D4JcZt6^O ze0jL(8DWC+1^iAwoN*T%g#SO2t!v?&&lkpp{#&EL4U$6tWzth}3huXx^t=({A}RD= zCS%JKUP3aql>0Z5LjPsb(zW7ASkJ1sw3g1DwX>$sf0+y^d>KoGB0~yQ)5a9~FPCdS zkJRMqqf=>Vh5pOs+@@KY{JM`eOBMPrla`@}ACa^S{#?6$3jLQ!Tksut7Owt6JX`bo zG^>#s5tCsbeNz<1gt-FD#z&qwN$V*@V=jXy9noa-m3c@C(U?g`y;r?RI_fIFb5c37 zg=oyAy<;ypHr1uIcNkEe#uTD4lflEE%m)cGIGBSCYpqoQAsRDje>oJlkQt@@S=;?I zrVx#p47xg{9Z2{KpWbI;5>?hyh{jBY=D7(oDOHC0KExlrP^1uznY7OPX)Q_XtmXKu zM3F)?X3}>1((fc~zt+*JfDnzD3@Y=y`>mrfg)GaYJMUIJ zy$r!I-DbazB!w)?r1P81Adu}*I%jS z+b|rnXHuTcB!w)?#&n;1059&DQ&753)YsNi$g)g&W<7;TgZjwX^JVEnG^UVcnM{cY zhu1TFl@|t6>`%0b{l9++ZHp4_elRAy5(inf=rk<=3R#wo8T(Zah(+pep^E)vBfgog z?6*ReWzyCACGLIjcpV~D_hD;D3RyNs`WF6i2%PZ!?gR8Ky#3fClK&rPZvkG_(Y=%5FmDv5QDe?fe;d)Xdomw!Afz8OOay5i%X%ndvKSa!QJ)0*6g!( z)|+PiPQI_#)p_X~?!9Ja&z^bKGqZODTQ;3Ec3M<84ah_wjh$wXXh)=A%chft=zZ^T z>V|*eaP6+h-9!quEF+s=D~U%9!PEs?_FSvcL<+VnBRxvJdk17Rk{*S&=}(zp%Q7-( zQP&F4Im)C8n%5hT&8xd2*s_caDDa{w#2kq+n|>|OmPo;tWu#}fyD)8QziH63y-x~} zf-TF)(9t^|1NjhRh7MkNlt{srWu(uGswnK$#*)v24ONL0Y*|LS8;+p;ti-h2YgZGI zf-TF)F8v%|0J#in+ok(p-S!b|Sw?yfd3g`Wc}RLEdw!;vf-TEPhn^Q;LAASsq(gkc zhC~XsEF&#tJ4ZsyU?eR?(saoo*s_fD+O(+;kRUr?zFk*VH?9R+mXS?s&BZaKdZ=mj z()x%OY}s_unDWntiST@aVGg$Js!s!{oq{c!P8yPb_l4duD>;`uV&0EL3brgG>polf z7W(!SwzKYo(uau@Y*|M7r)-AxS~KYV_l4*tvS7G~bpZf$`mXQHFDuTga{ETG4+IABtreMo5((6X++(5b^>2+n!G$I9C zmXWT-U0}_&z8(0@0DUbJY*|J&{a7t8)wbyqe_ebEwk#tXW((d4F;lU&4PH+^PPG+m zSw=cq@|7ae(f*)5#|ySBBkN6ee??@yU(1}Mn1U_KNJm4^0-bz$Sr@#5Ez8LPJANk8 zG2u`hiYeH#jPzW6ycP6qW$Yo(zur9}Qm|zi>CrzL<+&m~dOGV#lVHnoa@iHI@vP+h zVO=SvV9Ro{^;lQ|tz?Ti`V1!6vYfoR)k`O@=6X&s1zVPpE<>;3h*#}&N%qHVK&_vG zEz3yfw>_&7>HN%L9g%`9%Se}YQ?O+j+4;->*#6g! z<#s+cQGZqhTb7YsvsZ_FMI*b~4Xa5p1zVPrIXbn_N#pO=h!kvDMz(esP#wtcu$`@| z=F!KHV9PQx@~jE$5RHsHaJwMI6l_^WMtoTH3y~3z%ILoA#Nxw_q>DGi`%Q7<|ayUCJpVK7x$@JU%yO%3O*?#8}>~Cv0!w-b~a2JxP(Z-CuOAj8w2d*8|{#EfA*ytk%CXk z$OaedHv}>i$p&ZQ+=vu>QbxMjso$KTNY{_vCx{e$QbxK=zKpxSigfwCsJ>q#_@s<< zy;c1Qk*-%~>U&{=Ps&J7bIf2Ml_dB05}KWAEBK_0^iH`9Mws=NoF8#3L8Rc5GSa7% z-v}Tfg$19q$cIZr3O*?(e>MeDOrL5=FRY~GlQPnK-?%G8dhdLNZ;RkVD*2?0^s833 z5=>(-0%6jv-1KiEZ6B`926OfIK&8UrT3Fd&yNmuQ08fI!@X`98QTV@!hO+-TTpOCu zwrxP09&HnP+WG+P)7127!L{Q-(7ATtzQF0)xJqNyPck`O8C>n^h?J%*}Tp|TCmXX0_st$tM#vvJ8!qkLF!Hi{O#F@Gafb523#Hr@3i4@FO zMmkL>3eUFPZX}(?MkeT_?K868_vzCr$aXPkj%@%ToYN`HUAa5m2OH#-@{o=vVL3 zASR4@uvA|<*CtZ1R2kW#*zQL_mPWEgk&iklSgMSyeri?`xGSTOtbStWNs1|0s*L=p z$KKzF{HgmJA0h=ym5~8KOY1{z$6(BWCa0F#KB%g?ck!Q|^F_VwS;@MHvLxM5NNQbI5H$xAdMbe>ilUGCv#wa73 z*rj%Yio!f^Ff=igSVN>>j50FV`N(A;mFXPZsNzZ@1!I(ve#1Aw+Ntdv`wf1&n@GVJ zWn|5xw{WIbb9~Lc`xg;ebA?*=)fPeK=WPOBzi0^4p6c6xR|R_!DOjp3X5*qU=b^S9 z*h7sA2cyxg?uuZkGSW5VadD`vCQX9#1Q97%s*DV%vu-`q7DE~WYF*Rsr(mfvvSH)y zXCUS+BpbRns6{aaOO=t1gYI@G(y`yF<3tLUDkJNiJhOtxdMT%x5h+-zjC6E$g0)Pm ztz$!4xSy~Q50>iV1-kANELBE&Y}^CSiAH*? z-*S;+3YID-Z;gS?5-WLQO#qRCrOL^fH-FN}KT7G^M6gsD=~=e18*4uhHEsn< zm60wxr#~dpWqbc|L<*KFC+qzPDoSgoOP!}^YN?olrOL^#?_TNTr|-}vQlwz1a&pv$ z7@Zt3!$hQDsd6$F-`%m+Hu`l3A_Ys8k-d9f83)g&n)`Yue!#7CRa?PQWn{vEh?hVf z$I+LtuV)P+1xuBYUGjen1@b78UGkOG?}}ilGO}xfvoQKJvTOYvn<%DWsdCb?y?{=- z?7-~@)lR`uWu*PF?4V1u&yLz3`8I+`!BS;p?f%ZEiLBi>c07@SrOL^(vyyc3^dEYT zBv`79tP^q?XR!U)w{?Qv=_5g~R2f;j&C*yRYqvfyhiWTWs*H@<|Dhg?z66XJwXcN! zWDAxmBil5od>u%&Jhbt1o<=bROO=uSg$Fl++8)N3{)I+ABT}$b8QHYtg&7c2jrgX; zpXqB^7EZc`*1~6{B*qL3j?&i^!Hi`wBm58LCo;mj%}%PVV8${s)T7ZNB17G)93@gP zV;SkZaJL_{vjW!EdGmXi;QLS|(p@7IB4SbNF@ zGnSJV_BYkZb6+MADVVX0bl&1JoJi+QF8)LcW-KFJyFLa*WA`3=$hFHiXyf9Xkd>3J zYm4K$qTC?M>W1iSs@X(va9K=C=kYytvf~nc))X9EMtVd(s!yaxM8UTdQ*dw@={{zf zJCW|Amh>i4aBvyfa79VTKaCIh|{6R4VAC{BRYoU!+vgP@r zR#Ng|8R`9T*c&3f-%rC+;p$ltK61cFzvvRMGMH4>;n(tKJS3w?!G~oZgZ;13*?Ht0 zs01YZkOa4>pf8Jp(aFrdGP3Jmb76wemW!@`_JQn78ybSq z$;hC31NQ;hA7cj9^7w~H!RTb9*J*o53AEqL!@mV?@YcmSg_?^?RS$%4_z$cPg`qk)V^ zGUCu6eOVNYPDVP7tm6XhR1c5S;Fkxfomn__>QSN##QX0^2Cnf2rtYCDe$28^r@-Ix?<|hD}^1f*qO0^Y? z&UDfc{XBmYh`9`7Mn8D$OQc|QGO|VClAVDpg=CAo3l0z|7@dr)eti5RxGN)(tbVZn z6CwqplaW8gAH7TDPaQ7yBvLRs85!W?+!$&L;|QK?w}*NXEEt`P^jtpC8%U6JFm*3< z+($75qmz-LyTYS^e2ir1rVpct6pT(r`u;c@tSxQB#kWE$JfW>dpI~${(%o@FF(4s{ z0i&~4*^xvFMkgb?tU3fcR@%A0E=$(v(n>Ho8R@-d-xMGhU`+32X?hO{Mkga3*6q9j z_cIMihZU7AR9nI5WTd58O-P!w%~VU%%KEm6V01Fl>(-YtKyJX8Ue|t$rkH}!nNAv0 zo|~YJ<_iECQ|=EfM5JJJrjv%`qjj1AX~vkz`-bA{Wa@qjMkga3Di$9DJp>jP^iY}a z^u${*IvMHz`6)`}zmfERdqz(~1f!FY!3~Or1Gy5(;F{NTTUIbS8R<80KaTjVNc#1e zt|!5Q(aFe~+gg7M?NoDo&2_i_r5+NDPDTbie>@GQJ=M1Xk4mj4QZPCh*|^~A98g;e z*0yo3`+pHB7@drC4LEZjYWo&RSD!+7Hcj16!RTaUK+P#oQ{z`81AZ8sgGj;XWMo5U zV=ssak`AP@gX>`;1*4OZj=jrA66x4&Od}!%qmz;Kjt$27R>iEh|43yb1*4OZj`c#8 z6X{rUe_P2q981IvMGCKe;IMZB^_c&zrTT6Db&-jPzL3_7jmF z%gWmkDHxrcyxty1yo%{@VcS9?1*4Ob(@qT0$q7!nMJgDbjPxvi1=db$I}482)tg{+ zGScN=`;A1pth=$1YAYC>oUA#toK9A?EGAMgIyw2S*cP39wyhqKg3-yzVP$bGQ+?|) z;CyK!1*4ObEw;kEXC(ugPy&-I7@dslop7=p%qD8?>)m;zKKcZslaUE~D*X%OF&upf zTU+#?+6qP|BfI221S^tu>a>eFk8ZOIMkgb?Ivj;Dq>)`~9@pm~!RX{uvQ~Co z-wH-2Bkd2SJ%#5Jau$QZe)kI9xE72~M%M0Kz51bMmkUb_D^W%_gGu!F|AUlwt~^g$VTq9aCJ~*qq_GKi4=@ZPTmPPu9KH~=shGD zot!)!h9;F3bHCkeiYXYKjC5Yx(w|7@#jd(~6O2yP_d8*>N;asZ!SeSDNP0CR!?JkO zatbVXmMpO4mrfw1tYn)X))6UqmW=cWJ(HJ6kEZ)45Gi<;jC3E-X)KZMLw+7aq~KXH zvf+~NK-w4`aX2)b_aTNz!L#IKo=P==1c?l!`I#;o1<#U^ZVub45$RU*?p2B@c$SQG zIkqsBNS6co^~YQAEE(xmJPej3t+s9jC+dPz@GKeWS!@3cAeET+tTwR#)mHE<8R`AG zYb79eVh?%0o#{@b;8`-#$A29xOB(6pd9w|Xf@jIe7K`z&sF*(CRcR+y@+=wY{niUd zyjI(1w`W>oX65W?^Or6#8NsNBbSLyWwNrY>o_&}V&fFVe%{QdN+0oYUzXRc4?Vn7~ zj+UphqcPpO)o_bV?9j7AVxQ1o657VZRrHDLZ0q>wb5tYN=i4p%E$rIZeZXjL{)qhp_^Vfz-5^?YNs7VVa)hrzX7vQF=MWDun`O| z>6A|I=ruDKy7wW{I}+C7jQyekL=>FSbTc{E^lCF8SIW~Cz+BU-3`SQ=k-`@X(n-4> zhxgPo7;=mN(yqt;fICDA{w5>WSE*YPa(t|;-TDfR@CdSsDR_c&k30%$qXtNASaPBm$W?Wqj!cL<;U*I%)9Tzs(nF z`xmy;clY}pL<;U5Ba?;)&4a#G3vtr0Hs^>G+&f14^zGpTF_&OWpWeOn(Ib{B2w^)80r0X{w;_Z zfu#5AU1fDG3(*-B<%)7fLd zXjiB$-W7vKzu&u2OhLf0m>%^KVH8-&x&s>%DF`@5de(T{nn=&;&&Lxf2slPsnw^3< zUW;i7tJRrELBKK6dGK549V2L6(DQ?G)ge+4aExs9;>%zlJ0jWWd9nIL3IdLimf9=P z%TT1HMvGTO3IdLiZpR>1vXX9xMsy@n5O9pNR0!@wq@`SweMAZZj*)(;?t6i}kL~ok z=B3wGkYSAUuiF^rca8L~;}=3P1sTT4PHkcRw2~d_23tuH~#KmVt zl3|Pt@ai21PuX~EXMjh4Oac^Xd+YeWB4^-vOuOder2_j@)+b;la`^Y{n2OxduB97P zLUs0zmZK_JD#=dO9V}5Gu|TY>yoINJ z)bt{V6-KTvwgomMOka>(U$FRhL<(Xhoiz9!s8$<#=mL8@ZRcOVib_!yJkzrBz`&qRYfWtzc;n^KU3Sxzkq5bZM zL2VCV%+MtNxkL(Lg^}Ka^F9S~DU#lOM|lt_h?R8GoSNFQABdF$0Gd-zcUncHAXd`J zyeXr+cfm+V05WgNu;UMj6vRq8Y4F|f3Z^qn*88rC+d`xuRv4Ky;5A4&Q$B2GQjhX2 zh!n&MBYk?*ISDZrA?XueR3CkUSYhNYhq~}=nkOQ;t9G#$6jKl@>7*%X@v`h7R@MS& zN}BsCZVsrCV0-g!)qx4{RGT9)=Bk~21`{cWmGqc~;Ex~RIWew5GWb;&S0V+m!pNY9 zUPYjyun_{nA?>F$A_cL+NbhG=PeV)?yD<75ZpG8Vs-1#ZVPsIF^}`{iIyMtjca%Q* z1hK+Mw-yayp|JzG3}PkZTtjP2Nvtr^qo?^ts4d- z>Q&zgVug{;eY;`u?2GMm?&g8iJ|(q6~qc7-L}u1+l_N|DSU0A=1C<`O!oQ zVuh2foBpkn%@)#ZB8e47`t8p>mq@>@8}KwK)>aZLj0|vo4(pg{9JVvSY2Pp+1+l_B zqipbq)c`6LJfq(5zsc~g_D`msQH72%J!5Kgj_KOIhELbHw!H(A5(C<~$0v1->*3iu zwr#h>4)I<8*S_J(=4NknjF`yU(eFudsP_YmxFi1O)>v2X!vwz^)7@nk;8D847gp7lt$nX=YUIq(%HEXk6x(gOzAM(EhE1E$7?79z9PQ9 z++y`8VC9+IVYnp&Zty)_=?}Qu7Xdf;9x-}Sbf$S2?wJwyFE;rD;Fl5iFVqT8MX1U% z;luF88SyChh|N&>28c&B{E(e+rhXXilMxR~2;Tv?+DQnDtByNhDms%u4EM{3hyL~m zRzBllj2=4ZYo)(ghFw$g?e@(!iwOgS+;CL>OuH~3m0pPqc0K{%6743Eu- zd%y2q9-^xq9`9FmJ`&C}6vNwQ#Df|?-UQLVQPJJUEAIx|&V&@h+h@exIxK-b5W7!^ zyTvZvWR1?%6vI1Y#61SK8v>Qb8)xw7YivT5XOfEHo&JN@4~Ls(#p~QDM>x|}4DXT= z_pIfCX_JcXSuIYV=b5--czj0O(&8f+R~l{!nT>A}sL6^cEQWW_h&vD6@ekmB*mmdS zcsv=Sa3-@D-XkO4=vAs0;2jWe^z?Uq*f6cd@T82mrCt zQ_28Q(cSia?L|0KT@3G&5w}#C{-Ykfbht7gaMUsB#qfR^ale}tM*$8h74+AY70OFM zoarxy56Fo7*Q?oyaQ|Af7f|Jy2xIub|KMHj!y=_c_itZ+h!y8bjNyYb;(jN}>?GXp z@Lxv4*=q+3ADR&l@NQld9@yWp?E&tuQwe99jN!vHymt@i9rYUz{_7(B`g0UiXC7WJ zFkxC1>I~*0vFnXc*JBcKN5_qDD@^KE>Gc&_Q?<6+|~Pa6oHYkIC9 zTN0kR)Ebikx9hRB0?3UV!vMGIv1pNUWN{#5F15yG#MhV3J_{<3#A+@Gw#6y#Bftg}Nv117BdgwLbnMksiO$bTx!kAfSXhARay>GYd_HD)WiGr`6F|wH75g}H)YI~R)zW2V=2C0DhGP}$s@b~$avr@KPlqaC_ZvJqSJ&@e=7Q;;j8*Wc{Ubc| zR=m>3N7MnC3#Kg@anB!SfmqUT&r;uxnSCv5pVSP%q_s%Bi`u7kIE>*k(;?-+MN-%R66vWa7&@?Y8x2w z%mvfljJVsbfuQiU=x%?n(zE)^1=IeFxTUx+tWp|oG1iQvwr4Jw4ravtF75pl@VnS{ zzhf8m)HHL!bT}jKUvnk)yu$q}xF~NJ+n%{#I{F{H&5BAo9^yll7X;JsjJV&yty>89 z+jLYNi-73dzhV;OL`FQo%?*q*6HIy_nCiv^TDy)Pd}8=14c7#d8IbIt4WRLcRB*Be z!T;KDvZ|&#S#AjlF@63IJ4;BCHflA1YQ8k3KlpAZi{*rxz`_BE){($!@Z;LJZq@!r zmv-C|dxk&Sl#aW<>Kg}rh_u1|iQ^gdlT1!h#bo>tUzOR;FlFW(ieQy#rW;r-@H?dq zKW4%;t9TxsHBDGHD>V(bvlJ=3*~-W^eOE39@+QV?)4k74BAF!RZDr)BDL2Ldc^k=5 zzn?+tO{;BMroF_-<~av#2U1O}%|1`tMB87Ki zSRQq2;*st%zi4fTnMjsj3AGLUwCEI&uaOLV&%qc$=2B zGkEC}kg=vx7&G|K`WJ{~>7NkO`RLNwq!XNX&aXwJ@HQ=r>6BI|8<9?zbD>GBYAd`= z%gI{r;Erh8#Hq45nn>YoT28LM{*zA54{;DbyXw0P0PpudH#-v z=kpTw(12{}^u4OB@HQ*>Y@See?-$(=sw@|4(a(jM~yfAMwK5w2W-|*Nc}#ww&SaO0^ZtElSriS9xfxJt4{=7qLI<%p6VHZ@E$HBqa53T zW3G`=)t2C9rRpK!JzPeH@6T5V+Svzd8~*R2rbG(w;W9GRZWb7o8X59_pdNF}WLx($ zY|2&iDOJp{QR`ADrtlsviy5}Q1>poHRbk_FU3gDS3OPw`45twkKZn(n9Rx+^pNMni3#3;{ zEM__?rq{kPU5I1`wm^DZIjGmx^jq{q4z z9f|ZMM9d8X1zm0iGUEvk5c9C9+uY0G-TLqQ8~oKDa;zABb5+ zWbnUl=*i|5xIi}h@Cc3uX}@2t+2acItZ?`Hf5`Nc0{^vwC#U@iR`3w)>?-5Z3Q)t@ zUOm55`lg|wSL^i)V4g5aUX~2%Rf7DA&jBW?HyJ?%rqoJ z|0!LZVhUC;iy8S~NGgzOL5;lb>7|pITfvO<-+UKFp7AQi^k3T}lt{q}PA5%8c6WRT zRxpSMu!6VD(vx7p3Qi{t#lJyoKgW2CSv=?PtrSzRf*G0Eb4eqpEu_$31;^(oL!@8@ zGcs!6H?YB@eZV8C&%sC{1uK}5-m4lf0CFJ4^j;hpOQc{0GqTIGa?nGj?nrjImwbds z!3t(%)RH{G5K}!XQFAA_6De51j0`*9_$H8tF=klGPTgP-tYAjA9QhuWL=$YmffYO? zp&7*#tYAhqUvR-4V%|ow`OG)EY!$3vMn?a5V>6JDa)A|GVM+svDOkab9Cqdijs!Js zhaK_O@26k|Gt$>R4y3a7AwJ&*ee`w;Rxl&$7yJqCi1zz5>gQ~$&+&p4%*e2L3zHz` zQEX?}A0F}4PQeOhq+iMJPXnn&yx%v`x=kQh!Hf*9F%*U1PK+5``5=C(P|baU6`W2Q z&!2Uj3+eMm0FCF5_10@ESi$L}VaBZ)e*@`&F=t$!dWT{PRxl%-=334}-zr1bY5GPN zA_Xg$kwHgBVmt3(%%Hs$Iuj{a!Hf(UZ3iP>d)YZ;$l(b@3RW;917E(v5f5>}3VwJM z-&9e3D_FsdY@O{V81V)RlF?r#n60E_1v4_FN)1feDYRVoqdH8O2A_Xg$ksgcI z6ams7d&uL@p9d2uSizhuH{+2`7Ky(|q+kVe^6EO6_pC9`mD9C}Uq<(nf;s6B1@otvZCNz2)Av%luqK3RW;9TaMWI0p>m@?4g!}%jtb9Siy{p+HeV;GV7c5EB$|= zn1U6|$d;3LLEd1EIX3$?A_Xg$kx^~jn-Ce*e2^_Gn31ioe8JUW47RiN=|p`V60BfG zmdJGt45}OvNR}}5pGmb9tYAj=8j!FRV*ZR|uU-|a5Gh!}j0{=VpeD?>N~MOZxcCi` zf)&ijusb`-L(F{`GwgatUEc~;Fe4+bK7@6}R0qk3b8)%_BUr(Vj4tgolgQ{o-Sk{g zu!0#GRi(jVBBRPx(?_3R1v4^ylPk{gy|K38t0r8b9ullzMuxntJDkXnXOH!qSFnN^ z8TMOqoeWF9_=;i*Rxl?QMdC7i|V)0JhU@c-5Lj3a&0Ay#~JoA#W^>q*uRQ+ldrh zT}HYd`V}bcq@nAsar#6rxVnt=s`wt3C5`kd8(oBA3a&0AJ^q@}m`IN~N2wNsXcpvJc&Kj_-Nx2=c2U=`(}n+X>&pT{U7fOUWzi)lV`xf=vFO`guP1%gr;KNzRt^ z&%5v7VD<_4S+=CL4;DckUVW6$B(r|=j~ZPV>Y$b!|A@w&h|Gc!{p@oYAa7yq+dQ~m zj!4@^^ymWn-UF#p@X@(9wkOiI5#8MJ(PSXkV$9|>zv{Kkf)Rb!ts0PBk@QJ*-AFOB zU_`s^7yv>*o#SfS@B!{LsJ^vrL0goF>wwPP=a5^38`{%vrrC?KyR`CGqYSBcDmo!qC;Bp_EI>6`GjFp*iX zlbhsf15Y-jiUvb{uY0(vs&?A8lfyfSEsbRG@v&PdW)|$^ z_cMmkYVZ8wiiJqqc5;Jnjz1-`L7o<|L}tNGj@|(xR8tsE&AtyHG7EO{_4u7Sd9g?( zBC}v8cj)n)$OdiBHz3lsoopFj4YSf**teEZW6=Co^N?*j*}e0J-9);#Z}Emm+jg@1 zG{>nrIWeam)3%-L-eL-@D_U*c!~5i=n6~X?_oFxF=;VQ+x(2gtCp(6_!f4mtQ*aD? zgQwF~581Yp>mB{RJ(2Ye)Yr9%Z9Ca<$frg`I`-STk7C-klO2o1)oG^Z|kXc+P0IMHQSQ{eXG{8W})UpB5m8r%~np1(a9w@_4{etP7d3? zG~;Rnp0Sh6NLu1v~klPwij^Ylu%- z+qGNH5t#)$`NZf{B3mAg2q!WNcJjxV{zOK-{P2p%EZE7H!a+r8wQYH(2yTO@zRiN2 zym*!akx}zvsuC%jEKXPBhS;Dy3DCEo;0%UX-_LJ}v}q?B2eo!~1RY-kK;xj6GrlL% zww)Z&WNs;dpqId)^&IaRa2E zXSm0~1v=U2mpMe*wmc&i&4g#u+Ri_R;%R0T^Z&3sUwu&N6D-(Z;uY(=3-HbA&xJOl z8KZF9mZw+gp67J3*b+2=6lvS?Y;3pYcb$A6GM`A>mZxX7KXMc4Y3TWs$Shc%*G}TH z6ol<`yWn=0$Shc%8|SaJdN%2F1Aol zl(JxXuJ!K;Q%W`@gO{CZOEI%xc?KmcCo;qr{Q#|RvtW5P>H9?|z4p3T$*fqOUt5$R zGWgwv?nJVWUuAAb7@Gf(V+)XfV>_FF-#a&v?7LV0L#BVh0lLQSN1#%{@5B`ljIL-_xjux#tqBzF`1dUL zp-|tU_r&X|LsVYayWWU3#wpGFC=_1Lq3{_4g`XW3xH065d+PpJwI(JkZb8wsIu@8o z1g^oN1{Q^&2*61y@B$RU&9Ha@MG$JCkmFESG>+(k|A`?ZeV}NDPEd=J zSYRcaqYRJw7mAkHO|6<@feTwS)}UQ6DB6ZW(H^Vzi!c6v3!sP_4@E3qB^Iv|;{`?Q z;ZU^61x3S6Q2gSL#ZxFc;Nsj7`>zwG)}6Cqfqm8GS17vTmE*C|@o7+W`wfcjouTM4 z6^ew@SbPITVt*)-%0tofAN&(0k-czRqBl0Rk2@Av=e`G^=obY=e|spBpFlAX>zrI4 ziUD}}{&>+r{h%0J5R2PT48>e;=n^P??FPjN{LkMOLow_w{wLn^;n+jN%0e-6Jrtut zpcq{Ti!)G+!5cL$2Nb_!CyrkQ#RR<6@6Vu^7z)Lt(ojsswoSoqn(`QmsiUBn))k8B z=b@N^jhnF8u%AK{2}z6mxL?o--ecKk><*i`89#b(y;diupJ; z<_*RIn?E0WXu$~l&u^ia8wbTgBNn}&_^T!stD#ub6N<&_pjd)~e<^nHvIHoW<49bN zRVA?43dQOpP^`gwzSYqp`Hg|wxivj=h6#fZ2cFR*J{%wy1-t&L)mTkp{cq{hC)_$}+2#QlUfKTOx;zSx2So@QIV-X0&DeR`x!C2q`IfZxi1lImE*5wQisWaaA zpIE;$65k$Axa3miEYdqHt242sKRptw>E zimUmcxZVtkYu`YTdL4=zm!Po&U7g5)`B9f02V8txQADHunda(80aD1 z#{1Qwc+?mRtj6QLP&~nYe(HurDiqIlLh&4H`l2ot8=-h?sX3!(scLm_e2VQ3?t3C z=0y`}&S`)qYPA*o7)F{NtOprjY=%8#O8bN}qH3q$$8hrD^ocro|LRpD1wV$9XZK@f zp~XB?={=ExAH&IqmNzM+eeKt`I2U`(^=z&na5_%Vz$oh;`9jI*k3O7avU1wV$9cW=Ya zmX*9y26d8Zr{KqMa_>3lA+t&~O?w=0E>xu8$8hrSb9+7JA=bx&J$_Q`LH;Vf*-@l zLLJ8FWP#n$L<)WkBTb(_PKVJqP4&>H#%+ld{1{I5+_M$Pk%~+zfa|QfpTbc)MjCG} zhQ!na{w44?vg7KcNa3g*BTa>B!RXVzfoCev<{pv4Q9DlVUWfbS`&Dgs<^79D;iw%a zZ#OHa$Go}l5s|`CJ4TwzRD2IDRC$`Y)PSQz3ceE~O)o1~B+~S}!bu_p--(kC9d7I7 z{oirDSA8q^PMmzu4A&J^ThqPi&50CzCr-{EjBdR~&RvH(P{kB{Cr%Fk5!V&7x+}v* z`B_ORE#>5ZauGoOtH^%c7gJ2Ztm0&ch2c8c{#gYg1+$8igVTIsCr*y4xL7Ag zbW0*qu$(ygJgtIGKCAtVNWpUAWa?I&hqT&W&#yn(g5|`?A$E8_&#HC~YNFpy!E)l{ z>le_krW}fV<*|TjD_BmPO!;e`P98U7exgRaU^#Izt&*Eg-ia_6u7ydMYPcZmnelIW zQ0TQz-pW^$NI}>$(ww~+EHc)ZUx!fjlLcYVNYm{<8tUZL-A^f|AnX}w&i3GJM2}N{8UW8L_H-Cggqy> zyAIaLwFd(zrXcJ&`KC_1PTt>ho=8F1Gt!*xc5|Kl5Um>wg0SagzICuXY3(!{^P#V! z`c@G3j5K|y2uEU!Q&kVWtX!2yLD+LLVeL0S!m9`nxnso9KqjNGj7i9cavgb(sQ4=&eC%Z=b>tx#*`cf!pbWR36_zuWm z)lUCfK2%#lqjPdap|L>XZl1yP*I?bt6Er#}e~W=7!b%R@c86jL8l96*3KrDKw9XfZ z6f`;~FW)GolV@9XBT~@loJ?+X1jsY0oxKa}AyUxjoP1FiCV5kKMLz64j7UMFbMnZ& z89KQySkFoYjn2ti_K><;qbLelV+6rj|CqFNGr;{Hq{7a;eMsPCCKS(Dv zZ&$?>(g;p|F65?@9|LnyOd*ZnCYLn4JV;(y4)-G>ejh!oNYPCoo= znoi#T(t$`Jjo{>i^&8U3?+Oqpq!FBacL(K|R@=AEkwgk<1S8FME#VZImHc`LWv99; zLK?xzf@LA5xtMy&@-NW)R!AclX}Z$$4v?;D^j*5LjbaLE1Sg-bn4pu-DxqJcYAd7> zoJ=VIC;82VRLo-|y@?dk2u_|I2$P_-wr8?+CQ?WvI2m{FHauTVRm@m#+?iIj719V! z9y^Tt0~&egJ!%_83TXr*&E{Msi8LFh>T`mSMsTuddl-FMOmpG1X%tgPBRE-l6`bL= zlBFD~5GkY)oXlCn6Gk7bq|n3JS7I8W+9{+Fj5G}{_7=#|s&5C5k04S=BN%CXG#$J^ zQ)eWN4=Z6psbUIg1S3tQ=X3({cNMdg*+Qg{MsV`zXk57uD)LC4Mnno}1Sg;EhTSP^ z%%`Pu5GkY)j5JqXdlXtY2xFQnl|Yk8wNpqV7-{;vr4Ny&Pfk%p3TXrjHCMzlF z6Hfm2xebup6gjNtZi*@79-Qo%55|y{Ozfl22}16{$uWf!b#l}gv@=vYh1`Ra{cEI? zeOHDPDdZlUY_oYN!~{bPdMKvSH6n%FgOi&dZvnE0BL8VUok$_~;N;|DPC7YpYFQ$M z+=G)JzwXn?51q>sDdZlUe2Bke!&=+>{q@l&-3RYIs)m2c8xgPNeB!#6XHE2zws0(6t>zn)4>=lfEGA8EN`( z35KHfoi@|so5LxlAnZB$zWGL-d=jyiNI}?h@>bItI(cCrx`?W81!2$0cXwa`x7PNF zsTh%hu;=8xVLQxNu?{HA1cBF*{p*CtXB_M9v+7?%sxPIHm*dU7ZTdrq2P!g65* zp$$E3xS=m@g0N?#X~5a}K#o#<+h@;Ps;waG8EL#f;WE?~^b?kI_w@>W2QOkvQ-fFj5JrUKw7DN zP1sznL`{k*2zy4FJ`6;8K2X*6P32ZZ3c{X~FWQ{Z$tNBai4=rAC!fc?*2%~9^}8Yn zdrmGL3)0+L+rP%$rkH}T$NhmfBba?SbZcI~x2nbtJg+~bf=1_o6MpTjlU-)Mp}>Mh z=j4b}<#h7b6_1D%G&(2y81U9;wM{C6XT#M%5;Qs|qZ>^HGE}v*`N$uL6f`;~H?9Rw z#0U>648*nT@koG*DQI*~jz0qqj+GqqHh@S$qjU1zvhL*1ClK>;#egE_$(%ozQ8X|>BfRUDY-+`r|)z&h*QF9`NNq~{AJw`wps(t6ywfmnq zsjJ!wlK>+vxue0})JRMA`FQF@k-{Xv$u`M}I@xm1uS5!y04Lq6&DP0A*QuS-B*01Y z-y?O>u=|NMrnE`O$biTLFaek*;2QJU$ zD&K?0s(zJ&+9mntIxO%|@i{FOCiV zoDW948S(&wVeqS^gNd~L#j(!6PN)mv>Lb~Cz-F{E)cusc{)Ip9o1X9l+fCX8ICxa> z39!$V(+IcyIWC__FHCqMk@N|!_Krx~pW_OOTng)jsfdahJYRpjZGTj&&77ZbiGU0b zJ{3AWu^z>gzQPSZe;J?NSdY{M3*dNv3?7%dA17Q8c5Li>EWY)!(z2x~+On#)mi0~B5Ge>dMmpb*hTEe3URmc`W6)qwV?q#ioQ!P- z_Or1Q_K!(z3)04F*M8<{9wpgCYfC$4GbA+;50!(lUKk z5|Ne()20w92s=i)#&;_Oq#w4^wZlmZk%F*eq{VLTPei)EA0JJmAnZ8V?E5)HS^|4c zAW{%^oUA|N51p*#jW#>>tt9Li>HewP4@A1ZIyj6-+u2<}Sn*@ zvFr})i1HwC45`-dAS+i6FJmZ(g&h|7PZSo3hANcZ_38j0K2EIR)~1JlhaQRH9oqJ) z=pWN3J}D7D5z+;oV)5&OShv5^A9G)?7oeaG;IYBfU&#H9`bj2d!0KmEpxMG=e;NxM zh-gE$u;P!M;JRgUsb!|tquUfof#Co)41BgRay0HnXfZSYWGy3m zIafagg#0YA53PXW6_%+$+UN$9F0rn6DcGF>7+64(%d)@ zIVjGJaYueEK%^jd(@8_?MH@ln7}sHKThEB!OQeuWFw%Qy*mNMzA?e-sa0wy>Nyf<7 z(Uo$+UFn5n?BMwoh!m0#Mn?P=wG_yDNJjKo{+37~31MW|%u!XKwx^K{8?$sgkwOx} zNS{tU5`bKTq)&_cxD=|co$fJ* zFAyondPZ6TqG5hBdLU_ORG}!5!Y7Cs8R5Qq9@RFY{?<1{3bLM&Eo$!F17s@3Y*FDY z?x(806=XdleOnKI0+6zTeIshmvXau`$;fHda(Ka4vzuYeX{8tTp_oE0z(}WgJ~Ln> zK#gG@8ec-6o*;k;0BMCzHMp z)5(}ZbU%}Y9cM;b+MR?n-&h&jX^DJ-F0JZYVLz3TZ9cE931l85+q^i0d6puDJd2Tj zf1W=JBjF;Fev=(15;<_YEuGLLu~#sVK*NXl+t0{Hq_Bs}Vg~%)6vg}&Bm)L-#^hPm zR@lR3WYFP;FlJ3kCj|Xt(8rLlhs(&w+m79cj67kF$B|V`VGoy)VS8E@B{FP7IrQrl zDeU1gvbK+*74*Cm$BBtCQ!i>oc{mhs($Y<_l|qT!=m7^k)5CiYa^zlaa1Rj~s_F z6o{njo_PIP5fVa1S_U)&6Hg;8-3y+km_kCx$+MkcmbQ|II(|!}kPvcmUB^K>xo8IN zkK-7U5<*V)`wP}FYs^l^8WSlbgp3Syuh0(0?NsccK*wGAi4+n-=JZ?hECepASpf0@ z$XtH-qYT`ued^EOjcRJWUb2wIu%tFR^d8RNw~>qvSaX0#+rI(2SG7_mAh#pgt5W4j zI+=ME!(v(%MBE3mERvR)OLYY*WHF3%*!yr5v{M<&4m<9DPcelohLNtNXFq_L6)>i2 zv77o+D`YW@bpEvioNCcxI`@C0_pOk{FtS}_Rd0xS5M#Cr^6f>n6|$Ig(#~~%R1Fv( zFhfBWv!juRPG+9Pq>~1xwKtXn1SSwXwJWw%CQ`^^7}+r2Hc%|aZ;))5v(Frz%sh)> zWWA5>r6A^OB;oVpX+#QHOgd?d+uIrLrMVV>#<*>DbiFKOG3lhC_0%e8gTo93Sx z1u_-Mpygk2<43hq$YL1j-pU>*Ef;Z*e6W#7A&X(8#bMx8AT1cvQqvW;I#o;|i(zDh zgFVig5Et^v*`jcMU6~143?qF*hCoJP$bqD9(@1(&q%4M! z(~4|{^*=ip;E=`SeV$0Q6|xvcI*n}M2O|OY?O`4o{3D(XQ#~YPF^r7Mb1Vt67?nB2 zWnX=jNFj@1r2Dv9L!pOoHZiyl+excxvXI3v(k;Z*7f4V_kj40o)_oWui(#b8oX0Rz zYoyDhTT7_6LKeeF*Kr--sn$r>VfnrgDP%F6jQj|FYb66$>+`LU#W2zmcnUp{O4v?| zWf-1eRd+?mVi?)xY4ZReb0gX2K`T!pg)D}Ve&eT1fst?lNx#vNxJ9pG3Rw&zo5X&a z2;>g)D}XDG!S3AVsn1MB7< z3F8)?ZpdP4rjp;3gTTeYbb z5*yRm`U^h!&Jy43QA^J?Jy*&W7C1E?)|a^uBU_mFjf3hZS=wZ3^#r;%8+0>(;rTHM zf447dn@sJTUP7x>B4FRV@*pCG^o%8n(LHvJg`1NGF%8jOE@Q%@#k9T26mS|XyiW+t zh*=p)*9LhH6Dg!;jCB4tw-d#5UXy15kwSXL$aV|=#l`Rl#%worO*O=&Iw zZNS>LUh9nskBTXzXN>foT&M?-N-lVhTep))Aw6Sc?EDGe!CmQtF=JxNur&{Zh!oN@M*55^1~ZAa4d*j-)pa6; z^o)_=qwc_%)qc}p_>gh9q^Wia=@}#Kt4}tn{D-dNjBNXAd@ zpPfh{J!53hty3^-YQK><=+ak|3#zt4dd5ii0afz@*%)KG_xc?Ll_G`ojFFb^j=um2 zb_UE~aT~me6w)(BMg*T|K(&o%5}8b-ke)HJMZma2K;FcdE!@8>BvMGv80p(B_%1+7 zTKjgqvBFA9=@}!ZHMTzi=^0q2ke)fap_QR}NJ!5Z>9j3;DvShW7&@(AhE|3mh4hS( zan(x0I+hLQdDvvCw7n>iLVCtX_cISZLJ#3=VsPJG9p4{OF@^Muk#5ub%m>mDNw=Y+ z#}g@}XN+`7s|+cqM!K9SkK4y8rjVX7()H}=!bH06{F<9cAwA>doINlKw3x1A%PuBT zNY5B)8FnWY$g0>*OaCIRh!oN@M#kp%`T!)X_%Qe7{FFkZke)HpZ*AdYFcK~!>9?ZJ z9U_JFjFC--FIxrVc_f<*Ua*NsAw6Scz`_f0P}{9Y2F$7-MWm3PF*4}J8yG_-r4xcK zC+hR9ke)HJS@t}T;%j8&hb>hprjVX7GVIDGTpd)*urpV1lSz#sAw6Sc?N(oJKo9N5 zcGeENrfU-+J>%r0Y3+4#)M5Qu5z;eGHrudFCj*LL@}X)gq-UHQHW}txYi;{SekD>! z&lp)Jdu&^s{IofqNFhCAWP{=_%s?)}9%}GS?PWv?=@}zkuRQDkV<;F&*Yo}}i4@W^ zMp|Z-K!u@5%lI?lL<;E{C*PDq4W^L~-{Z!G>RTZ_1cS=eOqy50uJok;d_yMIY1GtXjJOw0ZkgMciDq-Dnoy z^bSaa)8Xa^i4?LJMmGFmB&=@6B1kr@*bWaSsM_YrJd0tZcE*nVqPJ7XVi*}QaR+9lN+m^%Zo7qQD`YW@3|l@6)?)4Z zondo-(>1z~#W2#R|BKl`f`J5^Oxv@cmQ zJB$Ps)4sqLeblL6q>jPzTwCJ9EuB_#b8xH?fxA&X&TljM9mfINp}livOG3{l8p7#T4AFm5vai)6s0 zX7wqiki{@E==^MFn5mUc2s&;bOQev+Ff#I0LQx_k?>|5xs78X2#V|7L#Pfwjh8+t0 zl}I6rVPx%Kd{#8Cptk?*o3LLFZ$cKs z$zC-@Mr?&S$t3?p67 z6hhZ12uatJe{fS@-A^HlVWef$M93>O(lX@m6e5KzhLd-W;0&f>TCUZbPo$8=aB^22 z=pie)c|{>BDP=L79MKK47%k@D0(b-g+bLx+j12S{33I$@8un12r>QWJLKef`oiYOf z62p*c-DHAf$ofyFU(VJynbdDk?hxCfMw6JtgbuwcYI{uaUL6wU%^uujdUv2V{soqS z*>{}h3gbepPxhr3+=9QP-hpBnll2`a#L>)nn+nByHGLh*c(v%BE)$^-Z($>%{ktX5 z)mRqAt`>qnzKK_B2*tZ28L!qWxL!`U8jJ+UtiFrQsb4KUvtm~Z!yn(qt2yJ z<;o`1DrN9$mZ^*D(bZVC#jX~CKfa4sQ%iPA#;Z9z3WOZnPVLM%Y>UHrL-iZWz}VH) z9{oMMnmZKlPG-ECtECK#9^>~|H`gKsgXwB4D`Qt{fj@qLSM$KDX`eY^_tbgELRj6j zx;gh6J(aG;GBtL!miXgGcr`D)+S!bCYq!+?6Vy%R)b0FEZK12N?2TOw7vZ<4$=)m3 zaX!P<>|8&mc7$i8B{bB|b@Rga`qk1iI(9X+7mfq>y)P8+E@rrz!RdNwZ@AEF>^G;y z-=RiQcY$Sj>}s+2;}>`}CCD#lyjsKhAlePaLU^@?*>a;M)vlJF`LV0D#UH=It2Kq< z-PMd&b8PSm?y21?yjs0StLD+wST@M6hO+1F8@!sb!>(tznlbKU6;Ng7pW$N0xPP26 zq^cXs5ZTr6Mc%jX@M<`e-rdM>HACwy&UN8JYp`yu#~oLH{XEPJENf&}>x5VPfL9B} ztKG_YHSejRsc^M3cs1|%PI$kxx@FpLUGT>^yS@*{tKG?Xwb;LkE`<>SS_u?Z(&dwM zHI`knx}lNx_6uGu60eq)@oEvvqT#7GL2KbKTl*rH=xQwEWLN8s*D&DKn&Y4DXS`b2 zj%uKaj3@DGVFOD3Ojl!BD7#t@yawum_sTwgnDJ^plM+MWYT!^qX4=?Np036+Q+Bl^ zyqX!WrcC$88Lt*TzSktU+FQI@xR=VP)LmfND!W=Qyc+J2y>E?wdYbWS_O-@?#6PjA`+L1y+IY{L=RD`k`OKX2JeOs# z%-V3Yf${lyU;NtxduxLh&$Z7lm`)<&a^LTD`x z|Mt}0n(xq$@hd&wHhh?zAdrd-il0$O`+Z>?JwYg4+?Znbvej=E|a%aWP3 zF=*ohw3di}duea2XXnAF8j)Mj8ww3dt? zCVOk%``Wv}==~0@d8f~FCu=P0X4WRdkDrxBLm;0@`Z17zZ1Xf4{ZekoaF znK-jH1+A4uLqqYy+1{GZrDQnkV8%$U`DDahA!{rB_-n)nzNm*+-b=(uO#$R8J+UcSW0^g(rqY8dXlN9Ey!V#1rQc%at=iVALw6%0v234Nn+rCc zRYgM?`0>8IHQz}yJAt(-*l)hxzQzj3DgeydJhXIo*P+Xl>%n%GqhF{4UNZ-V)oVo zCb`21F`dD-1%&Uyajx3Nst3&4=V+}q8p^_t686>tSNyaPu5>F}3rs2anyj&k0<(sq z=NYb&&nMwWDSKa28c@Tyu($Qr9MFl#vRp4CS~+4xb$-dgtp4>psvux)#c zXvr!M%-R=dtpOUEiXY|dt#!FN>2tEyW#v~Z;2)`eW7P;|4S)Qs5gPggKPuQ;tKWAv zJS3?fHm_fM0TtEp84}&tz<8bxB7=Rd66|%@nF_AptV+L=u`ZtZf~t=>A;a-Z3$ZQzEjMI z6m9okRv-UMwYmJ5$;zuoeYracA zgbJT-&9}!uTt<{NRxM%HF#J7hi-s2AN1eB<{d2v(VQuq!D#<$!3ZGR_n6+(atsNR# zf*(b~V-F=V zYrD`|M>Mn?KN{Lw3+g<6Ak5QQco%|d{^3d1SoMWj`xdQrLPIO@qp@zy_I<-|za+-I zdK@hN^TE1v=R;%gvea#1FNyirQQj0Ru)uaFY(N(;0ME4OXURRU)WqPRNLE@A$Uc5m z{h)(>MJs*Y3;rLGtc)U%Y31sk0ur{$ps;lDA0ya1el?=+^o7-cEQ6$P4?kSdRcl#! zMDW>YQweCP38W=#MrS;|KqM=L2xKeQ??-^oN=UZ6bay9_tn49>En;6bBA+elY+6ku zD{%;9zqa?cgHI?-!e+E?)_Z3e*zW!r=EaXzWL;&?N<@gK{lgU?4uHvaOK;ggjga`$PD zUc6)ylp1OSXpW9u7eGE)sUde#i~j8ZRJCd(u=HLaJ%2ocsr)+h z={esVK_pA%1#(dL_iBMpwT(TfO4IyAvb0?wgBO=WL99~E;C^+Dn7~qWf%FM#u@Xoh zY^_i6LTAV)OUDJ$x5`?WCuXZ6?=|rylBM1P+3mwYp+H_nvg=>B3>nJOY=P{VcNWAU zo$PUP7iP-puCSE)UnKtgoNbAiYYr+6S#MW#Jm<*6yM(i>_g}b;^d5Q|)_2n$B)zS7 zCJ@OoT!D;wGZykF=gvq*9UjnzNS4hCq)&RudT_CIko0N3XdIC&a}`Ky%OBtx^&M%e z(;Fkuvn*90TV`cjh-}$0<#+PQGE#wTHKP0&B3rdwQJ6@UeM)58MyPf?@j6@OFFb-s zmT3y4ujg^7V(5?X`~0&TMVcB8EUOgAzSl2)3MA}zKnD5MT5lp*1}Tso#vJ(xM#4EH zJ2XFmnV|B?vPFRmXw?&zU;SB_fc%Y)5y>(`feh^Y3PPBE>L}3do6|(HEKneW#~ir{ zLAN}%Hn?p^6rQTJEaMZ%uyLmk5E<5CuOU!ab|;WsG8;oM(tURE--8-l`DB@#K-MpF zvIotwdiS3gOCihJBr@dnLn7s|T06}6USV-o4x6C|7-6Y7_k zvz(9a!8&5 zNo1$_!3J5PN+}{)wj+>1?mI@oxSfgD8Ti-wMMSd9=3k_q#W=ygzVLs0c(J7P@FIAu zcT+7o?_nd@_b1$kA3eVgAJ1^<;gwz68r5M_Y%`z=AlhNn%Ejs@xje@Bp0ev|0~@s} zTp0${p9nT8I~1!uFQ5=Iie)h-yBBk6jhcOh2OMB&1Ezdq{ZMc&&Rp%Cg;y*O5y=eI z8F-lUgZQK9Y%Vxs@1cLoS$L@-wSa+c2Bz3U{bg6VICE3Zsv1}3JT%{WShn;00G#ts z=L6tp^os>}WyRFLvF~NJsoU~Nw@kRcC+M=}{b{OCkQA~>RM0Qx8;-R`jsL)!BFt6j zo(dcK7>;dw={Z*kKk3`ZKFOY2U4tV?mK4P2R=tcWTeVxr4sGo=w>Xk~3tsH74?uH^ zgHv&-P^6IK*+{L$rN0{jgyUIj@pE^qDkxIO)NG{bLA9mOQYXx1O%FaifSH<3=ANn9 zNK4D{Eq&qEz&+9|Ek91ju&qcT^R|)Zi6cu60df$K=80)zvC^hUA#1XcTC=BnooVDY zyBhp4kt}Osx2BW*t%<(-0SpXF1~}HD??f9NEF?h8arY8=AsSj*A=$mij4R|=NPrlb zlHLIlX#E6mN?NATO+o_1$oM6@KSo_IJ(#LQqWDwNJe-61(#LjSjd8Gq^0DU8H->XmIcsK^5j1& zh!l=>+ej^-#wCysW;mV!8wKtaDiA4TL5z&vJ+>&gD~4qB_8ET@DP%#6?67@1E)j*1 z?69p!p&U|Lb!?=mzojZ1zHx~L(3J4{N6f)h4+&|Ejnuq9UJA*G=@0bjJ?g3o_!vor z@4sYZlgIr&CbG%>(pa`uK85eUWTdy(tmi~}H#qVqk;3<1ax&lS4F>7FrZ|zp_g``{ z-UYT(bFMSG#swmU@4sZE*R0#Ht!sj~4G%JW@)1@p)pZKrf62)_eXIs)c78#m@coyZ z+};PLn(p(PETgr;_g`|d%NUSIIb?7*Ba8{(f62)@#bXV!`qll^TH*UIZKOG4`H+z? z%j!Z0nKPEHFh)Y!UPtSAi?Fd!9X0_Ct6Hlf#yZXtJzGfWH$@LAw)%9Hw-kk`JS60K zPJ=n;AT!4;a@B2flm-zn%1yr>3u}Lt?b|@u`|`xGskl)cHT%~acbM27~OI{ zgbNTcAVX40pq5rcT96?&Qfsk26efe&j7@H_agyOvkRdkG^q_p?N{}I?0W>`*G3F=o z>G1n|EGu0rfM96l93ar+H%Xxm7?81kyY)VN)oPf()^dTC)vnf}o)) zEH=IM$3H~oDnnw|*x#DyZ-+xk$)d(}^p2IrToPmma~yX30mLZ_t^-=wp>swD3o?X} zDanne0GWnlO2V8(YO)|h7#Y9(O@AO&?KggYM0Fws8Db+{N-bFdRmMD5!KF*7`Co4( zQjj4wQVR?pHVy8|F>GyM*ZxI`6l4e^tsQ>8L${{Yz!`^#%vFZO?y|o%fj2U0gX8a% z?FikJgk-c|<=aFGGQ>t&N**qM9>yU`a7)P@ckU4>$PgQ;1yug= z5wtcQeFl`dk4Fg9Oci7ZBcs1Q3bWJ#QUqGN?yvSl3NnO|9X@%z3?P+$b(k15DubKQyl{pg=mMG+WXPjxxLK)ME65NVsd*2dy$GP+fz-T{)HnGkQjj5xY;p(Hw@x)roBK=z$Se1R26e@9+&ri1ZG;fF~c6 zPeFz-(rfapO+c!}!fQ-EPa*{w!pO$2!f=sQWaG!*P9jo}A&m6e5VnIzuT}BJ(k93d zPImYiPR8W4)*6EwZt6M(8Nx}o8YtBC>n!`ih`fRfv61GCMd=e^mVp2O88Yi6Zeb~( zf(&6#9_-XKeCwEY4W2v*gFh$0Z~YfUH)u@Gf6%wK6tk-k`3y--9R#}_yh_5C{9jcJ zQbmY4#_DfwadHl1^DZz1VG-UnVjebkE*N2puuc2CSgzYJaLc%IGv>g0Iv8-vxRPTa zEa|wgp4#M^*6g3%a9MgmsoCZIxCN#h=eoANSa0W8i@sk0f~RFPc1rZE(=`caYa46# zMti(_xngk1mX?TjFZ65#;cS6p_-1=N?fVjNgDr3h0V;6comJ8Wdres7*k#AxuMXiw z|7ME#>oIr^NL@Bt<(T8G_KpKLjQkbu)Jb$4xXfRPd34McEQas2$E~~XLTJ=G-8!b6 z%Iy%(b=7*Y+a3>UQ63s^-jCjcYQ0g>9C5a4G4FfqaFgGPZcr<8`T}T^-;$=i=-P#4 zg!NkDt%xynyAp4hPZ23BBaH0u?LZJ;nwmi!wk#i>L-J*WHTj5LleHGTGC(Vu((#I0 zv`AL72d_BS)ZoPp9k-r?y2n|x*K>Pz5M2n9>1M^`$DiCWCYsjs%;>xT z!U7K9@#=cO$)&tWGhUInc;*yW!Q9JWo4JO6kArw(0to}6|H133_~Q_`E++cP68>LX zeA9MK9R%9Las$a-6Mn`tOOfxO_a|TXhfuQzKy!<+?&XPOp(b~qrmV|H=7P_EfHY;D z@0m)Z5M@|vn{6#}AE4VnYRxvkk0VyKmPMJ|eQMGB_d#&6zzzchnD16KA(90cfegD` zu@I2WkqrAGxDt^pwg_a}R2R_t78vRfRwk_NNTd)}*mcHlZ0-VNLnPzZMxjDe*U7?) z;4`q_LmZLEkqnGfZ{JfSizotV?V8?}`qmoM7K_1(WWhur1OI9|3w+|DqXpjTxt2&4 zM{*}kehG7CKnPh1pvf=V`x%i!2w^>xxN%-#x+{rm>n0H?gb+q{_}_B4P7UrU6vSp- zqLIKu$iG@^+w;L1a!H`Bz1y>d_Ip0QaWPT-^)JoRbZg|RWGMqV5J0<`%ub?EwGCUK21I570(;I~%YxW{wCj3vcV=V zv+)XT^s%=Q_VUeUu+bFT5w@cT-geavHjSB$H)tc$-bUKm>{zhzG1^EQRqP7cU=!N5 z`n-&?$K!u|vt&3+jlgluKq%?&s|@V4568W_3^u=+ z4HvW#Yj4AvdbJ7Nl2-k;xRMPv)0vHYXd~Xsz&0HnVE#M5Ww(3_IQW& zXTJo`Pz8cGFlP5RIXI64>!xj;~)wGHsz+Z!i5C?x|!EgPSQYf${>%YSB zk5sLkoyPYaG+^+cAp@fgtlt?4h8D7QI+-&pj`)*;tnOVtJUKFrpna2&E~4_8=# zZ7Rw#u5v2M{6Rok#ucrLi@qY+Y__?7*+6%1IM$kL6&}JZQ);8xB?~^ap>VbeGyJWc z&gcg(AxE*m#yc#*$jB zJdDEGtYf&39d2sBq3bPZ_X==sYQOe&Ny6D=5!#)2x7=jvu*9nkx)YiEJZWd=SnII2 z)?sk^K3;Z*ub&;x!TCI4?QU<6w}^N$7MeT)@fOY2R3q=XO752(b=)So3))NWMy2Ll z1$$~eY3N)P&v&YB%ysI#9IEWu7F4sff9t;Z^e*;`=dSM$Lk@}BGGtwT9{;fK+*`m5Jdi~Gm3D14f zjIzhOJNJd`!QzeH!@h30o$%ZzO@=*w;M_K-Qab&J_<@s8CJ-)68e6Yv@fU_+s#hP$ z`0V8>wZ`d|`=l9b@7Ovb>LvABt3JJ^kmKAZO_m*QYQNHifo?fCH??2%&)0+tlZLfB z@n_HL&~7Cc5*N6hBQp0%GgWtt|7f~xb=U)|1CG;cIeKv-{9XT*>*`R#esw^-=!5H) zFxNgYyuSPd{?SW)jl#dJ!Vk=jUg)R0)#MFaxf^m$?E`E=;F6wtHkwP$`PP(6TX3@? zOqYEKrp;Nde0`63r0ryj5PCv0CqWKlo`z&-+Ckjre2FBRGXfdu)E2_D{;uJO*Y#0f zD3Yx)0vR`DE8aOJ(&8pex=19ODFPY(-Ea>eeXzCRTV{PmB%34xIoNbL6k59t$w5zD zZV<_asXzv9NGJvn=peW$YszHgko=AdLKA|GhfJh|5gWH z(lryw_|A1zUW#``*ui3CzYoGLLp5|XlKl#{zD7QUT0A48BHO)y9#R7_s;3J^Pt{ts z3<%d5G9t7*+?CJKXGm(|Ch8&Kj2`=%w6_QHtdD9zBle=Hw5dZIQX_ zPDL^_VNocN!a!zZ#LIi10r?G*5l@nb5Gf2~M#hcvgM7=9iDcZUhh2#j1~MbVH(8;w zWU(R{zUCs9rBr7N1DTP79*&p*t=)>`pgY#-L<$4>KK}fWO&Ko!U&~W4CYK?;_>Jwp`#~=C zwyN8fOZ+dQBv&cpt~y6t4^M}?>I|H7#A&~oc(ssZzr&Hrv7fJjohggb4Pz(W!4*j- z9e#6#-$#i(;NE0lWBvN4seBxLvdXFuFZz$DR|3etknA6IT}?P7g^DJNQH_oyKu%*) zQ?=3N&qq;fT}rCHfM^S0!wEj#`bzeIs99^lC#HZ}K;Tc12i2qwYZLNux~e_&p6M)rwuaq2f7$p=jL9Z^y{p1>M@?yQ+K7vY)97_ z@3bD`uw|_B`LKstA+c|Tki>lUY9G7>$ks^qY7~h=PWco<5+m!(Oy~ryorPqb(cNbg zDLiz<$e>0qjsb-0s}|(ez$u56<_jYO_x=NS#JmB?z;(-ekBB<&YfVb=)9h&Lk6={KNri zjt@_O(dX0;I>;RFJEI(t!oDb5mER68$2vgWBo9t3=ZHNAgUOWR^HpQVZ~O!X6|Bsf zHg;$UUxUm&ys!Z77rO#Ozly$oJuYn|QV1`M?BA!d8Au5K5MDaBeV<4nyfCuSS2w1> zK>ixZMoa2o_huR0GCfb>POms>t#APeDzk#*8L--p)DM6yo5vy;iE5MGqx`A5wTrDX$G+=Z%+ z{y=WvJU^wvv73ZQ!5sU~$Kjxp{!jgtF2Kv_=U)L5(g-F3pP}G2ca09Sw@1~WE z6BL8v2h?s2;z&s)Xy||Fqkl@+Ze>vayCcC{armtTMfbU(ev*qms;M-9w+)Owe;DI0 zi~}fWo|)SWT>jGu#()sO*g7-L^ZTJNY%d@=uI4JdlRBAu0Au72JO9@MNL5n!;hV~v zi8Q&XcEP=pv`SBxjLmRA+Ty?HXIl3!#Ctn*w zq_C{8>x}mg*bdhT{R_Ee8+WW;s@4k23L|^{&ypWVHCK8~`RXK*!m`51X=As22jnm4 zbJ|BEP}eJ;LdBGk5qYXV1@ak^ectq|Po!}Cm63IudBc)z`V`5!4O*`!Qdr6udHAQs z5KWxcA$j-*-`hkAr%)N0)gTz^Wlr^x%&IvN1%|p#p~A|@KD$@IT4cG2WS{MRU5Knv z-qA>iTlXv;d^SWfZiRY7sPb96vLiAm>5qW`L4F7!eqiv>9G}t(!CI?5+>!{bMNrfJ za*3zbIEw)Lvd33xL<(;MU}TE5=xZWVnp;AN6y65F$v&H4b5m&-)r=wSEJL6x0_ZTff=@>zMAd_5GhQ2Ua6qP+vCE-0`+QRL1nxq2sR; zP7x`nFB_>PUGCQiNSJAwmh^KLo2c;WFg>3? zk%4J$^@tRn9{(5l?MF893EdUx>2XGOdi@g8&z#o2Yz*REU8nR`a+b-yEd)=wcLq~q zvCEcA7Jw$tFGG$IDF{IusdcCm1p(g-{R={{lG9fPnY$3Q zk>=n-RyVlLW&oOlcUQ$N7S*?c5VVn6-0iv$(kxrhXWX@$5eAvN5M*TPksbwM45=k5 zb-Op_-O8sR1Q}U#@?wy!rYQ7Tb9BrzA_XDH$hs2>z-ZU+O5IVvtS3?sf{cv!*$+#F ze$G3-QKT_H1tG}DURn3TfmCy)*XX-z$)_L$898lu>Cr%5!|R+jpmPl(1tG}DJ}+wx z1ro#{2&9Jv@x+?yTR{jivTofEhCvU_L$Yp_@wLHm`zC=~>DF{JE_Sy3HuW+4zAlYZ_HDf6jgdij1mUb%yJ{uqzH*d5N zH3cDfAKMh5f}5({Xn$S-ePxD#1iyYu7*0(VG#zu?cjVVFy)91=?3;3P29biMV`SFe zU9gfn6-F{^Yq#P=3Yw0Qsi_#`^^@AE311p&P|$RYOm=UP20oq8XL6Z~H^`@;=@^;f z{l!HhQ))ND0;?K=f~MnScaI7N+3}aTL<*XYk^aBr{{imGWNfYf`B)rj0X5uR=zk7c?CwD|fwMki{$E9-`_YLDMm^^`9jx6WRLLlV^z( zG@Xq!cf8iP7mNfI=sW&2Z3mHprn8Y+()kYG02zmUn{?Cz5B{mv3Yw0Qo%WtQ2Ccn^ zWT)-Norn}P9U}u%ziUKfVB#`k;TAL}mIk=%O|xO`=Kr-EaLZv)(+ zW8gQai)|eZ(sA+6ue2+uMKi3~upyf#bs_m=n$LC&Fmi}Gn#5GLd)Py zT~v#3cJzYbY4&*N-iENPgnf{?R0wq(|C2a?_?7C=j;$CD2YGIt?oBem;&%FhDG7kysu z_8gZ|b+N*WMQx<{&30#4lboRP1k2jS-l0SaPqj00aOIPb={e0ta&XxZK|~7T(MD?3 zCTdHehhRHR)2fYr-<3#qz=d`2H2V&Yf8&dVvMj{oU-rS0sk&G}lQGA=BL_?ZvK^AW zdz8j42}KH;jFHK=^ZEce7|G;c|L#qspvf2+`#7Q>kZ@x)E%sgtT#W9M9cL7d2sAxd zsylSkO(dIc9=?c3rsh~T&A0ES8hHaxQZIY_Jz#d&Tk53s#&dk4NVQgYw4ISY#iIWt(x=dq!$b;?wlmUtxh}-t9G~aD+exJG zXgec)It4-))JdPVH&N=S)(VfdGqUl8meXOvsJP$whd)uGD^hs0os)rQh8v`R5N^g-6>t`KfQDLC!4qh)Chlc236LJZ+GXQ;hj3Jlf94CRf}4 z1>{{ELrqT2#iGBuPL_(WkaF2Rq%`^1cRAn>6h6GrFNCvvgyC21@y1)KwIRImnv+I6 zWJw9bf3e5CmUt8(+-v&%e&n5HCJcY;3$?rwCqVSq8}HSpVhZ6bJz=>0H)xsTo&s9Qt~Y@{({tfwN9;I555mIED-d9_Wjy^?*qBURUP$tuH_F3jg{!;BOH33ND8= z0d>#V%Uv1%*0&vbTh8?+yvc(;#?WSOcxCuoUvJc;MWGu8UbhL#YUQ21=9S^E?C)92 z(O6tCH^s)c99j7$;lle!S+7|a;CFcGq;*cQ?}!w#4^IA_^s_Dx39ObRn*1)6W;sCMMj@mc4$bA*A;kPJKH zNO6wnbbdKqxZ_%Mhs{4nKqElyLyje&)F#md#ML(zLeU{5XnyvK+yp zAE1Pvq@rLOS_MD!>B$VaSJ?n1TNCcpY1MAJ;%PxO&{(#>4B_fG6jkz2eWEf$p<6BG zphXMNQ0QlajP*mv8yM;Jpl>N?0wnh^({}a4tzXpymN&2_%tG(A@#C%<^~_My_z_S# z%z5y~_uNA=BxDda(vn&AYsfp)89Pg+3m(YTo8a)+mv%jLc?8HH5V?>+)cv|JkwOMx z^J#vw?lnkpr#%3g-%R{vH<3aH!N|cShrp*{6j_Q2a9|(2SM|Xej>L^PkC(kV`PKcjs4+fb>JM zw-<(8y$M1t!N}w*SLy+&(x2qLo$#Qtx@;krU}WsAMxj7fMxU`qi;N^v$R!xrbbTur z7^dq;HtltyB9SbYU>&v*emt~2e5C2$M#cJ!;^?L1?c38?}jeVzR;0f{a(pWoL6 zlTRU4V5IdIjKDf+-B)1)kwU7#NT2+t<{0Fy{CkNMQUyj@Pbaw=5-Fq#jP&tY z0_QApuCvM%cOr#Ufsu_*9RC$&!4>SG#+&LG!$C+DIO+TRbAxn${Q>zDQUy*vZr{Nm zFPykUq>w6ba_XHO2ANz*4KXbK38?}nd&R*XK+bjgE_+Hog;ar&O-_6acSSE=G?_lW z7?CVhU~%Fx{8+tGJgtL$oM@6(a4HyrJQ8w_wq8@o5K9`Ep})}({+qM_dqa&^W@7rF z3^ndL6gT8l*kI`cGxQ7%eS(Gp?G1TNd3KNtd36|NRFPOB!3@1XLzqjZ1;1q|>?hRL zszqK!2laq|q*}yM3TEgZG=!=lE!57CIqqKlFCeZ(Ko^F1*aXytX>Yw{!Yi;g%zP8fClEhn^BMUKOEZ`uS2VN|4ZZcM zi6(dM%_Kujrn%!SP@TdO4rU1F&(PIq=&konG^u$C%JMladXiz>ZbBA@PaPG0D*E|JY4=}kKVHY95s$bdW;L7j(;e1ReI)h&5vjdf;6mvyIL z*3`x}bTrL7L!{%Z**!RA3v?H3(L;xJY_1kpzU6cW#hL2sq%m(B_h<`36d;F zrAx+ZU}Up`2~c^~-{{>ePgxVS_8pSaPCb{xG>?bIS~C3_H8jZFx3!qh>%)H-3lJ>Z zkd&rO!l|wL)?rd=(abBp0iTBeG{1RSOVu(|4>>v=XU=+2!V_*~0+LyeDyZ@glJAg| zuI%{|dME{3TW#r-G1OX?lnQ;D(6b*@T`Uk8U_y3VKY~ahp0FP3z3=_JK!PxYc(OA& zlt>|-FfzqyFZ7W9Z3fA&C*WeN`qpt48rQ;F9Z2{MXJ{I^9w+i0ve4(jouP-6;A#5s z=4K*U7Ao{mjm9@lQs367w+nMq)moNz3S{?(6(F&&l)%<@zq4yNk&g3BYuQB*BXYhV zt%SSEGjSxmL!SB1GRSS6Hh@d>-Y1VolTXKaW}Et}rvMa)t!-1Qs2<8kYPaW($ixVk&g3BpCU`w66y2a`Hn=sL!Q}eK1@>Gr%$7kpAzXf&-AgR6(G|3 zD#{4-?~rGvE*QLDGYnaH6hP@J!Sxr?~rE>yV}tpQ__nQ={V2y zs-L!LS3L>_~jHc%sQFSgutk@|rBTt#WuA@hq_v$i}~Ixj@vtHfxU=ixnl05Im745dRWkEzz{NLv}{^(& zA=2^NE*ef51F3}m{f7;+Hoqp4rIoq2R`VKp6BZWzxj(P8hl`11d89ykH(!{KNbd$C zRr-SWlO>J<*(CPJNFtj=mTpNtS*9qEEf<`}ncV_=sO7v`Cy0E9)bN<+T_UXqOBplU zacbyOb)++qJ{99!$fx7f(8nqDZz8R)R)3j8zDsI&bb4EZ+@GwHO6Xf@e~QTr-!7Xr z0l64^$Ty^(FZmSqr`WkVxXAyncc-fNo?vR&EiyGK?mzQErRvr47rcB-S7;&Z{6IdC z-J+=aNiM0Nm!16A^7s7=a!8ZPSn>x1poo9n8AhG3X~q&d?ZEhc&@+1Zaa*|%gUnr` zGV*AnORy5@?=w7FZTTr8g$FnoS+JD_R$I$4yv%|PBXPx5trb!ZM*6I{coSNyuG8nU z1t{Vb$u{cv9ARW)3p_MnevUp98!b3Yq_CmJ$j;^K!+N5}g3g7%Mp>+UIyrpuvtDFj zXsNTho%OoENh4B7bC}OMmYW!%hhuANzevUkw(==Fz`@8b>hFd%Oy5fS!sBc^gVbNP z{~lV@w=##}_+Vto6&ZIzG>eWWbUaIBR!*! z)B^G-lAgUkE<>d7_2-Q2F>q@vv^EpT9{s-l+#qv*^n;N>ae+WuU}D3wl)W46CsIh~ z7@2p{?PzE%%ok0|`%$}-L<&h6BTbWQ^&p?7G4-&_r}|cq;*2bMehrL1{mnH+PmIA* zjUt5yRTx?Q&g=#>hN}Ns6H`b<3XhxENYl)#n;}9wRfNkl%{-TZYqcVUM9@ZRi`#Vm z3CJqgLyMaqYDJ`w2r@D(`{P+~KW`uzHl~LW!GuJRksS|Qf)Q{29?6b7$8RE^LL$gW ztzOzkIRA{bX-5&V81d2kacv5PafVZ62^G z&WI*Ldd_@$1-HHhHw20`P}^?T4bPIOyCOUs!^nl*YC|M(ia>H<$3-iM6jDe=CS?5y z>7)Mr6bYku4OUI)XIb}s2B87)z7&*}? zwmDELPsw_DmVAoENwvJHg*RZr(0$Rr((J6!K2yv*Z0+6@mO2$&R-(aO*kK_4>6tXHtdi?$jat2dh^yzVJ z;wMB3-(SwifXkLIp@$%|f@t!?jVvOCtcsDHK0SddRgs-$Rtq3f$f`Iwtt=?F9CCa- z#UUxH;$)@rSYXtBmiGKH$ETE4G1B5z)ED{|s%P+7?o&@9g{+Eg1_de!8fFW?`P;8V z3E2}(<*&6Nk}h0GU|4DwV4hYCn%@Y?j=z-ql}I6(V5GLCG}OCI50TV9t80)BkBn(Y zE8TqtmyC;zcGTQB-SFv_>x5-KedaBj4Xstz=`*qhoPW?KkC4DHa%91Ufk0kGpXq<) z-$*1oTF4~_BNOX4dkrMC7*ZeCqeqAoQXfW6pEZ6NTxS%L(}z!=N2KFt*8_aJw4uHY za35d@K_O{kKKm~+V_Nws`s_bpx-of#q=}KW|DL}Pd=5jh_7ARZ)LJ2FV&oUq+}eWA z@koB*TsX)eb5EKW*}T=CDd6)FlFdJixj>|lG%>P4?-r15nIObK($s1!Zepr1>iCeP zXLz5cKpsKT)4C7~Vu}=!Cg!v2pIcyIgQ`0G>U#3?Y6h8m(!|K1?r~7a#k3ugre>3# z6DcH3jLe%}07Shh2FbiJuUZo+Bu$Kr@tS!ZT6+e`m~xMdStdwjMw&8Bb*Qzbex3~s zpAN6H=+UMbK#oD5Mb|Ec99i#MA>Cp=t6zR(jK1nSHX71ONVgc7@JUA$f>6MLeYcUO z9^_LE2{ZIBNRIGfu|x{#79%@uT~G?h zLr8Y~^ulc-g>;LNT9vXeW-aQVgO)$#5RpQ<#mLq!!QS9=2>SH>^9UX~Q`ae^TZ~LS z_iQ?lXOT?Z^^6ub{!Md2)a*Ix#ZqW(Wh8q>w=$Ao$2)djzU#Zgh(C#>SCv(G?pL)| zNYq$sBNl%Ni@0R~k`d!>8f70LQDdZEcPp-f;1>>PT2B~hrI4sGveCk=a4+@4b&bX~ zGJ2@`Qb%ir3V{pnULZ!pZ%+jI1blY4_n*6klMRdJtXZC+H`_8Ijti2 z9EGHo^4jnzB!~C0??Y{Pz=&>9fd7beK*R(i&ZXo28+`(#(#suBd~YmELWanEwj0y1HINYOHLYFWP~2Zs-Q;*@(yzm~ZbbUk==cSZ zj&~;gLK-eI$a?eJ66ttn(yz=1C^J-R+rBQdh)BmflYU>c@F3DJ>(V459q&x~%!~zD zV}@RWGr}WgA1BiB&ZJKvr&mN;AN4Lmq~o1QpUdGriS*gq3isXAU2(iK>C^2a7`QpD zZE>Ivk&bsJed-m536n#X@bo0o@y_IkQ(HfPsiwrjhz*54CDQTE7bj{~P25ngMgh-(d z!^n`vS0Tvjtqmzty*QCV9fpxXgI2=))XAVOKg1I$)L|Ie`@U%}jJ~nhL%q+0jU`g3 z!!R+IP3dRB86%SBg0x>-3LCaqR+5u!?zGA zR8trkdu`PmxXv0##vW=~gGk3a&6-;~On3f9QY&x`_r+CA5b7|@XVIn8YJ<<;5iFXu zxi*nP9fpxw-E62$=wHRExenM)q)><9WVQDHgC1&&KDGR3lZX`RFr2K~@hclSs|%4r z9p+!;gmyM^^9>?}It(K{E?tB1V}eQ`)M56==OgujI z-WLxz+36D?|3sew8xLG1QmEiCpPjOQ+eKuj!3|##DO7McnfcdhgN(l8mqSVw98MPB z4=v4U?Tgj7h;)2p+EQkEZ@4Ry@jA_Kx}G3XsNk@DaadH$gMqsCZtu7*uHHA37&$Pu zHXW1h*Y7`f#i1#~M!`qgdL^*l$0ml94m}8eR8)U2vbuo!NiO^2&iW3g4J;DU3uboy zLI@V|pNn?iK+ZGD@m_U**F}(eSY{yEKkvh0L<-3ntBw`kGamXiuSz`%Z}Xf?q>xH7 zvd_lJOTcFc`s}kTvNMrFTF1zc4-YQ~s1lMPWmjXJ6t7d<0nradzX$*N?Jo1ZvlhAx zf2I{_{LLC_gwSPdIQGvo0mBRAU69YdG)E9AbQvQHe-i-GDzB2~h1Y*Mg-D^x7}@9Z zZ7>Ba!RWKk+|?C`6uJ!af;avCzmJ4h5srih#U!T;8W@?_F=l8?BDnaECjj0g*+yrG zbs@|`O{JP4&GHnHhBalX>gRZ4^4pDb)0|gzw?a2SDyW&}JidAgFB3|^qZ}4PEz7qQ zGQl1pC?U`<^`HLC6QG$uYW*iKEkmT^+a1xcY#aO|$jb zr>87=ptX&W{Pg=Hu0%R4UpRYe?UG=K{RW_O{b%(n5$UiTRiIzFy%*sd7;%Ud=vTNt zo^nuq>$rTeVtX?nonW=rv=y6T)Ud|8;yA6JJmN4Ec=R_$Pfp&0noaqX(t7;)Xxp%c zY*jt-c@2Uz2J2DS0`)7`mx5KMVXY1?rQl-?wL@YCCq_oa42T(+il>>tfi$RXcPF&p zv`gUSL-Z8db6u=7p54^&t!jXID!w=b!#eLc;PO0xZK7|NoBekx3|A1>$az^XA`*15F^W|PH zwviUs&1DusATfhai|hKQ8$l>X^qP`K3rMTee(~4SK$B<7U4%vKa(Lb##1Fb!V zWc0bYRw9M6I3p96%)J5)or`4RqKZ9<6e2YvBRfBUYqWGjGBQv-B&0^45UCkCzur&a zKL^J^{dO+JN4&B&z1?H++oKO~dphvy+uC^XwhmjWTzLG9&P0-#HQPRsD*lWMIH zscoc|+Pxe0?Fsam8oFDppLjnVpBo78)M65}wkne0?Mq>%t9%OOV&*ewQ@9)W+=*n+ z`t@pcK%YXnn30)%8h}L8zr!H2M}b1*Q&?AQr1{LA``3U3$prf=JF=CyL!XY%qh0CH z?^hrrfYh$Ed9s3h3M-P$r`9B-!Z4VcxbkXE0=`{Gq)=#PWZ;oqze7WnEDZd9#Bd^o zLNg;1rX8CJcLmOJgA|>#Zw!$_p_!3^S%Z6m&-+LQj{o2~kwT%Fk)fj=VHsYHgwT=G z`s9$(y2;3p@dbxNYpbBokTE-z2E)4|RHqr~6VhoJv^GDIJ{`8=BWh~&3Ds#v20uKr z9ekERGWgCctY#`ws7^DoUAJc6fltVepgJA$)I_9Eoo1w8g%)2E=~wD_I*~$knv-t7 zJTu5j3%rOFs?&^Y`(V^iBHP|gJW8Zcoo1xp$cs>`)34JnEiHjap*qb->+|N2{h6C# z4_P0V#tMzk8G$Val`oXHJ`}FZ1U!6#yI?YJyuCv)hTDKOj zN2E}l=H%={P!-C#&grM#CsL?RGcvvFl?)htYAs9eoT)MZ9PvVRnvui5Xo_>?DfaE~ zMI(&4B2=dtIk@dFfk6I+`_$fT~%S`aBzr#abWBWQ2EBAyi5 z6Av}0ksws38QK3>*}g#fV{7{#u)H8rs7^C7>Tbi9L`L0gf}7yVr%;{dWT~JygDiR( zYs`uis?&^&&OZQaud21tmN`R+6spsV?0eu*dm{Vp@y42@@+nlO8QJ@2r4=yx#$XTi z{{B4Hdle~Erx{tysV&5K7qxv}%=DL`!Gsz!BV$u*;+m}@b!<`_tlul2LZz6IZQPQ8 zG8e(tw)wEMp~i)3CMSPt8vx{CMV`HRmV64;Oh!f)D_a!$b}y2Vu9wc`kkX40*g377 zqzQq~jFd}T;52U{wB#SOH~)S*KI5dWUdVq~nI?Tf-i<(>M>2iN7FF58`7Y!?jLaB& z(1pfF#?YO9J2lG0N~MEsw0t&4+auLUem=gUi z908y6(Pv@ihQ%!MgdR#qGOTMpBk~LRkBv0NOpp5>d_qnO`Oml|#@rL~ z9~-H4-M#^`HS-|!+4ZaPKT>Oj{KrOGT-QdVLjD7lBglU~FZhN?$4BUjwyXqcz6+-9 zTG0mE_Yo=NKQ^CQ^pEqCptVPlj6S*ocNf*@6Y?KMCVqDE7Bm!c1GpU(kMA{O^a=S7Bg5O)##shY5%M3e z@0yZNA^%}y(3kbIz~>GmgO+UXLZp!YFfy}CS}o|?dPrva4H!VAkpI|7^O-GQ6$kPT zfaWu6oPH-#$bW34cE$P{;*e7x^m)Z|kD-!;{D+ZE{Obq9)VzUYlje(xkWV51VPxRJ zU}&v=5H4_Qz|TYq`41x#CX|LsmBk%>CZyjodPvBB7#TR`K9KsiO9c*JA51=l{D+aD z!ye)_s*w_d@=| z$lyN)y$?R2e{q>%qG(y!Rm=0y7C>)3=y zA^+iIxxt`wbf12OKXD^c$bT5w_Ld*?txmSRoY|I0A^%~dUrHFv%^aVx>fQXRhlKox zk=DOzYzDF^_K@{@urY3h{D+eRhCx=EL-sCqms%_2KaBKg6flrTACK}6h!pZ4Mp`#_ zhk26YbEU^xB8B{ilT&;)804sZdx#YBA4aB!1K1`&L|1ff}^&u+ldw5p{H*OwFq>%qGGO2UQH$*12?W)T2sNRJ9hm*l2%K(Y> zCN0Tl+g9=^*%CS@cc9WsnGvRe%Qj^WY95h5Uz+v5ChjfX@$+jO}y0BauS>!^k!jPeE2{2E7US zPw|hOh!pZ4PM(>570B-ud0=2MB8B{ik&y-G!j7l~s#T!gv{m@%1V%6^|6!*b3IT@l z{~BzdMZlk<;kW)P*A28%|JpzcO^r;AkLnmXe9(|o%yEjT4C+1P^?h47T@Ej|!qzNO ze`P7#0`EXfvEJZ6Uf>z5B-}js=R%6b$n+JTLTST%4$1UMr>mfOBw31;vxkw9y$QBKgdqL-=S0Ap2BR@!XIz9w-Fif;4awcf;J)>N8KVDEMs9dR2gEYy^W+bop1s` zEQF{%&V;Ah)KFp>2(#gdKi*?!BY*JV=H;L#YlDgW!TmZ+A{#<3!g?|_%H#??scM6% zEz4gflI0@Idt?0Zemn14c-Wega0ONH3c@{q+DbN9R>EvF!5<&Aw~?8!ryq>Ox@aTQ z+UF73U|9yU(Hwt##LkBK%#pJLz{YJbVLr3$as=66`3AG0Hg}KN+0d?Z&D#uY^u~5v zseMId9yqdC=D}>JZNU@vHWKEAV;!;@+DI7s#X)KZ%LkYZRb=_m-bU#76kNwupN7W2 z_e+iquJ4(R4*27r>}@Pv^cXYLeb|nrbC3N@?GThc8x`5*E)@mx36j}GKJG@Opw}7M zzWfrHm1a=hn%2JPGgUvs{uA^%BilW=d6CF=zdyV}J_Wtb$%l<05a~YK{ZaK5k%C_5 z0{pXHIQmY$9g&XPa>IKXLnYG zgWL9Z)|yckG)0b$?g3B922<|LhT0ta)82+pyVKZfsvSO6Qp%GJrs0{5Nc{0VdmGk6 z%c`%SQ&}Y`7j3q=0I-QY||MG1_J}2L7 z(UnL+r!z8k)Vu`fE6Bn@5r&_cMI=*%tglAn!e3DDE87{wx6cDz3WqR}cP!Y!9_U|EN(n4T=Rq^oebE@2^IHAgZOL>Z1^vXtVtUqyIzXO9GX0~jpA*USli)L} za>>`XP;zMp2)K-F(H+%jW+eY|U! z0a#{C%ioL~JFNU#T<3fM^4Nxg_OHbEiwC861bZMKDETry_IstZeqGfAR|4)_5j%#$;b}} z7=o6mA%RTFxCO(((i+L6A@8f*1N6x>Q0`>@;7E6vg)X%K%pV+ZQSEIaDJUP-L#f_B zmxmrwRe@BGZDXj1nDWWprxspk(>Q3Y%FDtlgq$Lh=^cU0Z1yc^Jtw$UP&qa48uOQ_ zoZLzCnMG?LMma&P8nn%{0)xmW(>A%2+7*vA&w=cPKChJB=}RP2Gy<8BytoovXH_H< zV*WNp0@E@7BGK~yY|&xq?7ra;QuZRgbo~8faxBOXc5AW={qYz`_^oM^-&|Ab25+h$ zKN#8G^$!o|A&_t&Kb(vFKt2We!N_*M9$!slyK^r>h!o_zoO;$ez|nCP%i6)A8GF){J491NTg8TFH2-pk;^j;H(32b6I1HV+9pZ|nBwJ|q zj@RlZxjdhe&+gp5mcBC`)&2!+Y5Ml=<-oY90$i{lI+*T?emDke&nJ+KzCQ~p6*?)b zri@Jd_I3osP!L$Kn(i*Ph)7{IWn|>=YCi+n9m&X)X;X<5R#Qf%4qp!)WIlyt>X1<% z5-F@~j0~N-;U9q1PFCpb%b;=8bxQY$kxRFC0ezDPv@`_!tq~i^rx5HJneDafe?UG( zGP~Xn`-l{RJtJeMKKcx=H1y#p z3=Kx6CLLM`tv!ikYTW0LWb33bG+@ckFqOAWy``Hrf`rbqAMvGMO#O#&;Vv`B*|nya zf&3fE><>?lB~rM{jEtRh6C}G?<#w@S0vz3CR#*N%hAB5WOjT)54eC4Pj1hv_m* zHEf*~y69U78d`O{m;D`W7$R+}pr&9iJ=VD*MmW))}W;0@e zfA!B{V3^S50>3!eb<#;8A!B6v$y*PhmtmQP*mwf>RC0Xg{xuVf%oDUCpIYKs{2p7K6hZ_eBWHfM2gsgCMoz0{T&EBs7@72a8>pq|rwfzz z<8zU^Pazkxk@d_=pjNrK!c>44Cdy2uq9% zA6yT{t$y|*y#L&3L<+eWBQwWU#eBX2`pnEUS%?&JF&k+W`&Pa)bfpV?h!1OoXS$?V`ETZj~*JtNyUD)b9< zYfB{C*V|c^NFjk^q<_9?up_0D{?2pn5Gf>ZoXr1a0fWpl@C1=U0>{X9H(pIAvfZ^U zr-&31I7a%1+=F|W)7rqsM${A%I7a%EdHEiYEwG1tN_-C$cKxmh2^=G>b7w=@Oed`~ zKRQmNkiaq0Cvs#(B7MRyLS;wyDI{==v|fpiCenJLb$ud*1dfwiZen_(uG6~73Uv$J zr;xxga$Jk)Kt=~%62C102VJ~7GBvZ8*6qk8&<3u1-&49hqNshIgA zB*RAhb&p6vtk_7)jDr=9!VMk^pk>C_3$qL|cd^1q*DJ#zw{XTTvbdfb>qX={6pmw_ zLKtV3Y6L?;tS~b1)QcG3%gG)&p7Z)N@5Gyt^fAHw#AR%4qfXn>B zX;+#PDToytsijUz1mR#ljjc`1SlNh3L98$`JgyLqcvZOwk8lnqQV=VQ%>1bNFc?Fg z=rc1pE+3JCSh11jGZ#PF1LR!*&1Zh7bel*)tk_8H%79tdfs90-S9&L|BT^76j7(Ua z0`tV8BuB!c^f)2~v7)j}KU-i}x_?L&h$aWo@zUMb!wDC32XmYq;F|&DGbFQHweTQP z&>f6yUu!*-oAuSEebszWqSS|=pgS1pZyN4RWV`1_ixVm64o;eb${Xa1n%@&C=nh7< zyVM`TnBLlUKX!q#sNPyZcQDewLz9n*^!NQ=6p@1NV5Cn`SSE6IynPCq#}Fy#4n|t1 z4TmAG@0D984DCatpgS1p)4hflkv>6TWr!4X2P3WL7Q?cXC9%ri)Dd-MHPFQpIFCf)=JYh++5jq9k!N{y#Yl{O} z6Gwd3*PYjpPeFGua`N*#Mak#n#~s@eDd-LxX-UcN4;i8h1YY<~!PnXiA_d)HBemEi zSxcdBRRD~gcdiJLg6?3o9A`MxUlAN$gOYO`{5cAK>%Vd>IhUnc&XCmj#M(iTQT=10 z{RgIYjfqMflnljn>Gc}epux6C6uKrAmrzjZP{LW^vS0n=ok}?6)^r0^G#R)&mCAJP zi*|o|w-Qe0CM%#{an08jg#1sH*pL)d5fgRkmj-+QoeOI)sGRb(SAGk$N80>f_tfR-6or#3Xm+*J`H zUH`Fu392X$lCDon7A8_qMT{IU?D}FDxO0&lF!b?xA_Y}sBefXUY#4ERfg+~R>a9cy zs)&(^zqMQg?mh#bTH^JjfkX?+BowWkl3(3eePu0}MyCSF}MkZZ7PyomdNG4sp z`<#3Vs>nv>4_;Vr5cCkF{h*5G)&7-8K^56ZEp^>k=vV#q0jaBAE+bMSp05fNc%6bOVr1sRspVk|ff@r<^uM+R$)})-Y^3?jGd~!&PWJ&cpLtwJsa*6a zs3IGwUCEvg*XaaFEvTXi2R|d9f+}KU!im#BS!yAfaJ187A_Y~%$j~n@JqJhy`OtMf zr*lXtiZOEOnRZ(s1RX}7OHa>IWp}(zK}s<)dtgae?(;zY0a7Yq-~(!{Af*`DzQe%- z(5*0bp@h@6k}8j(PeDpC(!cye*kaR3|I&XfC!d0p;$(%m{5JAX6(R*G#mIIqvjd52 z_q44lAYy9;DaA zU7aT{k%E+Bq|Y!X$gj+;z@_Gs@|!B~<8=yBijmgG`wJ0iz5j(OB_kW3 zibz4MFeRA&)4mzd{L4tD|M2Q-BHy8ell39!bIWTavob2aBvKG7%xBp2-mqNg-+2|5 zU3w^yf>^PUmKm1{KuB{M4=yb;&ir`OAafThjC6hEmjPl0DUx({d1&WwFC*c5#E#p#u6on6&sm9cy{!U z&_neA%pW|ZOCItmh!q>DrG8Pd8uSqC=RpZ)uCLnJz`G)d6-I`SOnC~eRe>pdNK+H} z6vPT6GiMDM31bMdQV=VXRvV&B5Gyv)eCECdMuHQBHE8n9(+$X{AXaRoc4dq+1VX1M z^m%2(p(8{JVug_j2OgmKRFWfM%W-277sQGx;oPt#PD@Xo=?Kx}dvv_?$Wv8F#|{>B z2XmYqb8jAyFObacd1*K`SfsSFm$Uy?uv*bQqUcY9M>@-7AA};#Efg*UKR6j+zPsbkrVcg zfsJqd1mA@1DXOrBq@X((nRT`#;0aI~s}OR3_kLA|Fa_I zmx>g`n2prBzxWxnt9dezTKC66xHKtJkT*8c6tnL9AZRTtrtngmRiiK;(aGH9jg8bY z2Q&xSXxWB7GvkWfBT^6yHqyNAmq*7z7{Su7nb%#e@e`4PV6c(e;X=pG!>B)pJ`d-+ z`~#7~%U*1x)7d)*hJ(-rDW^G|{e3pZTy>oe>pw09Vw?U6tI|>+T?#~gR-Q;fYS?^g zL3?_@7&7m|)&}j`8AGJ-;uRZdYP9-xcW5XIKvSdTCahMe)(VTajno2v@=64sXVGWi z+2h7t5ng4&$=M4)#+hLq1#*U}IVqpQ3rVm(WX`nBw2&E{M#FG$Lp)^KK0HRLaADbJ zj(wslCxhbxNc!|yQkqEN-6D((agOc+K1(W}rW&}YDW8I1U}Sn!EgZZs3?T=JSdu}c z@LmW;4&RxQ4kX-IO&h+&j63hjr?5;ga&Xtl+ku3|RMQ5B_PR@?uuL#ADgG(sA3B-T zZwM|;%BQeQaI$YPS0L}9&!j$|O(jxTCK%cOmvxPSRNB1%#WTiK6W$BK$Y^suKO&=E zK50)rh4(@*GODiUA%mdYV*qZ0{Il)w7?R0t6HbRY|}2i zf)m7UQ%7t>deNU&ktyxC`Zw?4|JM)04}*@>*lJ#{Y9^$nI$5vG@3n|@dg+LCUp6wB zNcRPWu_~m7qqFb=23u>Z#|?okNZn`kUXM2$WKBmttG8_hgE)t5wm;h-_08k|xK8)! zyI~6Gr2E8(4-K-PBcJYr-F`L5xO}b#In^P#zd|j8+}3rkLF(H`|JB;DzEcfyWG&p@ z)%(`rU8&wR6+&oE4|P0+xq%|{)N|O{&)4lE(tY;qiU!%=5$Um@$U-7LW`0$N$nc|% zNcZk#IuPmJX-5Gf`{e%Wb2e_Pu6n(J$f`>_8xuBsk|UorI^Tj6T<@V8{s%CtP(9S= ziX+lvanR>Pddw@*ipai~9g=&xLG4xd>9OVc03xGWIV86&f+Z@4TxW?e$oUS*==-od z<&ZrOdl}^4j!5^_OZOA$z9i%#kPyOhM3d?Xb?X^q#4ors-!= z-xyhh$Sj8=!DHxAVQANp$6cxMd7rfgIpYY0*=rq= ztA1T+kc-BjA#zGzhvYY2^$l|E)Mi9Z)xXQ+Kl;|=a5iMZIU`}u+(8^(!K0{^qE)ZZDe} zk=pI?@3=>+#?Y+XzW{{Ym1_HU%_N`IcFZ=$(CiJ4d{&*bKAy;`W4{?nKIbfOL{|S| z<2WL#fBKCPhvu$!NH%FY)*$QNC`CU1=kU9Js}Fep4}*;E`XiC^7CQ8qxgg9S)Ar*D z0oAvkE_OtIxaq}%n-K18}*sA1IA78iF!x<9(FN&mZ7BFO5QNa z1P@C(^63%(q8$13h+MLfd_D?vNNzZ7`1Dxb#8@33J6;7RK@Li>FZ0kA^7-VLBcJXM zm+U0c{pPcSL_RI;kUZ15r$HW`_%o5ugcxsolH3VK-N*3z+PfX=D@Qe9_1#(4fzio> z;-h`zB9kMdQvd7GOkE?r5013XRmaYTKWeMLSNKI=;d3blJLw6tx^x8&@EAQ2Y6Or1 zXxadG6P|yyw1ITmVX0G#eCTo&NEo=VH+pyRbRr#=I`an>fAteo9AW9z@&|qp{*Xw= zWyj7nPV4~+mL$03>d`(qq-+oX zo|}l6YA!`lV@x$PWGqi#3E364F2$fzqH?UJOT z;TD-Mq+o+?Xt)=^d?9YN-jJlC;dK0HZ)3TYJG`+h*eh_WNc=q>-^N$2M-Ao&6pVzxb}Gy`$wHJxUk-3O4GJogPKM+9H0Fi(@%Hnb86VCrzRw z<(UKy9=d_%y1n;HIab8&x-CFwQJ<65)3lR1NsBD?Q`VR6X+#_f8 z6V}~8C6IYT^<%e^1b$KVtwGize*F44NRhURIG2sMWsr*Mi$M;x2Kf#?r~pfshQF(9 z#ot)29bZWGzyaic^`Re9G;bL@h9)JBh#e4}R3{)lDmJci$LN%#*#52YqSXE=u?aEs z{=H67$;l~$k`jl0Ey>GLT{I)2PMd+s;w;f zn6vuZM}LA!d`^`Zw=(}oSqazSA!g{#q97vyYB7;EN>PZ0E2=L#eDEl$<)Rd=ZvVvi zIx&ffF?fBV9NC!oI(~@>Bk+Dud?svSLWkJol(vb9SQ&a?UaMOt3TAH#jTn2E&MC3= z#k5Ma|M2`s+RTwGEtZJV;=gH$uw}pFb`%X7EPkHdla!x*EJjjs9g2-d(tAg%gX}>j zlin?aA`MdU`V3AcZGgtG;~QjRo<)-MFg|a9JdWpn8QD9qSQ#Xs*U`V|?O$e$Bo!ZM z#>g?B7p91{hR87+o^_C$l8PZ`WNM)?i0XFaMKvuofBtfk zbb0D$A3i_NMw~QKyt5DgprKexXjBwy3A5=RN)LMLVt)De(gsVLiYq%7X^ZJm2WzGq z@@SeZrpsWl@{vu~XLk{4?^FVX{1TjR+*g!yAsaD6}&qHi5x zl279rNSm$?h(h$wo>^qgDw1@4KotDh;LRqvc20;ST^|tnt*lBu6emVyd5~D-$P-k@ zJl1#yR2ur9Bm>HKF=v_L_2`!OX#pc=VD&R>1|&VKC~K>DJvt|oI_@^fguvGvr0VtP zoUHXucayBPkZxZIzg4^*osm9&RGS7el6uJJx7MMORJ+W z^;u5&E@4x#VlgtT>Zde+=MWiIv78VLWK(g&g^{7vKOYP7BO*h~-|Z)DD%LtiMl@^D z7$kHS;&G#O`z7h}wM}|V=b6|QyM+MMW7?n4B&oPh$oA; zN>Z_=Gcwh7v@6J&M2`LU(KJaa)^v;1_YS^_JgxgpfcoB;dSYWto}gIMEm9lY@H*CW z9T_@oSL(HYRoZlY_1C}a%vV8166qgOAwZG}HDKAa#k7lF4o}z*&=%8rLT5=T)PO~5 zVZZ%%3ipmGkj=0=`O!pUR227d7#T5o0Mwo4O=QII&7~ZqN=Go#Fa7pYv=addI%14Z z8);LaBN*v>XLYJ1eSd0oQIZNB!N@GHVeQaEA|_;2?P-^!;wla!C*FGXZIG{1Z6{v& zoO0m8ZxvT@7@5|q?NN}Wh)nBx1&gvlDz4%%GQDy9GFjX7dj04mSlCot#bIPx{bILG zn>Ek=iuqk3+P>-x9lAJIV=ErN!I>NH41&>MffVoGosRfS=^O5AT z)2_&F>&Id&4YJ$nC?uMUc5c*NkzH#4hDdFYU20?wl;q}Zu1LQ{qo{L+P;LD_=ulXa z3N6ao8Bj6;9&eBVg$oyuq(X~wa?s^8lk68pXBxs26k3#%12W-#4x8Z}gj(N(osicK zSM3ZaTN9DQL6&$R60Srlv?#ObbFK4bkbS9#d@gntyDuUYT9lL77k@CxPm(G*+L@-% zqE7dsDII+U$x0d@EZ~l>T$7cRWVS;jE29!(<3+Ng4jylhP8ymR7bTu>=fYL$Px58s zdZ&5>;6&0$dXBwUSMFKHGv&hYQ%<;j_#AQ;_dj9WK79J} z8`8RK`QqQBCekj3gZj745{onSHxnVu@L4CrwwR8!=OIR-=b%KIY%_O;Oo=euc%z8e zZHy6fjvb^r-?3PG4V%G#&AT8;*Xv;Lzg5#M z@|KxdalH-(fAZmalU($GZa;{L<#HX={FXJF4wABvn&0fn4J65;yw$;OnsWySl&Mf$ z;sJSKU%*z!PGja}DbOq3aJz>nz?g+${$_xZFS!?>-J*XQUBW&}Vp_9C(F$ zMNGVqhfvy>9z60hJg+nEb9)^kupU8O=kx8X?b136{|wKU1K${iK(m1@Z-t|h;blo z+4G-1kfiJMdEAXENVV#4dn7=v4|rRWil>P!n_AM6A8GmPMP$mQqm~oqsR(9(G zlX}dkowp>ZNPt+R7E!_fcR-m`+lbfa&^#126$ubVj`{lSTIgFLD8?K<@{uH&EKu}q zT=fg6tsT(^K2#-%uDA)COc5x^)GBkIft*cbYQ+l=CCS8qg7kZK@fzAm>QD1~96L*r z3LU`OIk?|IEP+PKZ*W8+rE5fO6=@7c`bY1`2eLoe^dC?NC(Q=Q6h!W|wZ$aO`WfSS z2%s${{s+WWgJj|%cT(%K`?N387?sFopY4z7s;#K4B8|an8!`Q8Ge8uIw1{biCOb$T z&lEQOK0d6YogqZ}eYA>}0%4QM6ct(Y02WUNS*V3MDomj$$gERU5c}LJlFh6We(j}A zMH+*(bMo6$-9cibu4$8}rBF7Nh;(UBfaNq zNWU4R_q@uqkrXx+@{N-})PZ1ikmtwH(V-v}@{N%V-zX6#$%Ykre=JFbd}E~d8^@8j zbJ(o#Yd%RTg2kMH<5*wa9^ueu2#&sc$0(Om8Mh#iO~5 zY}RofnJYzPvkt{ONpf=TSHBq9vd=86g1SGEEqgC*ElEWJgpsW`_D9miAX~3%N{1F= zR1^siM*3X)(oK>+S1yx~7o;Kq!brajfBg$GfokiwzU2`~GHI-s*#XVhVjVNcfW~Qy zB*|2YOaUuu>vL-DWRpCu=aD26zt54@VO*^o$6?oMAbaS(3w3bs zd45IFm*&li$i)TkbgoJ#rT|-GKB&0=ZaX)@n64jqZ4UhZo{Q;6xNJvH| zE%d|kWba92(%fRDB&m>)j7)1et_R3Jh)ip=r?B+P@9${GQ0<3j58#q>zw|3~f8q3*-tSLz|bxbs@v1>s(F5tdfO6zD;DrlvY1T zQXwHNn|e%24dhqdIs?>W`v3f+Boz|UBDILJQ*Q#ABy5&ASV58s3CYMY`)+=OzFkY? zm~C^vk)%RGGBU1W=tYpxM8=i4T~m?@3CYORvb*|%oJC}6@uH?!QAkKe`aK+#gm%^@ z((jjl=%$JA1ciiTTM}Wkn#YtG_{**xzq(VY6(!XDM)YJ$P{(Z{REdfC)B&0>! zVg@(HuGZ}!Oxj|?{;n!Xg@m+7tJVs$e}-~XnENW%&>$jGd(&z(SHE0E2s{T+iPsZfKAoIGV7 zb`-|DDJG|7Y>=cv4KgzA(J_QD;~*{Vk37R9sZfKAoS57jAIV3Aes^N7_`VK}I&Z`r%S|0(PcQgWn%nAW4N9WTf}|f8Uj)cUJs)Nh;JJC%>no zM#HA}shS-nsZfKAZ1{Swu99q6s^?`%D%2n&yZm@o=8XpwqUmA*fr zZ{dMZgJm9?;aZ^vEmCV1ROAUDXl7`-HdP8sn+i?G$d2rC?F-iKIu41Y|g{EVq-?|WLXFS!`?~?;trA>vVV`RWv zwXh5tWPsO|@{&|&I!Rq3Jj|;psY)92wrlL8>$zCz~F{VTYr(_3KrV zq(aj%(&wLV5Oj@ej6U~P|079-rsL$%d;?8#&%Yl^QlaTsF4Gd~w%y(}& z9cpz;ib_Zxn3!aoaY6gO;DejpjOSTJxQ|%b9EwA0f^RKi<{y*ALXb=LvYNB>?B&zu z4piqsaPGaDolK(^|NC;;%g?Wj#uAiWrf&fWYUg8Ye0(ZQPP%^agtPs zT}FoGZ|RG6&LW#(c|4X%QXzI38Jh3PevnIv49%1Lmr1(LmsWr0U64XnMO0cuN9CfO z3bAY1)MMUyxDv6xBTVWs^V~E=MWnE=YygwMcz$ z=%Xp{c&v!H_SN&hEs|7-U5nHP+ftyYj4O4qPqt8wR@hXCT}Jv(-E@ftglg+Qd2L=v zD#Wfu+G3Vm#V*|KD}c6`g?2jS6*d)O*CMsB19_H0?27GO*xo-5N>U+q85xni8b?rC zb9`$NYbH|;h-|9jCL{g6-41o5;~VSfiErtIK-5;DkU8mFrISgv=s{XckP3y&$gJ0k zRX`8DMmDp`JZURQg+gZJ#N)*VfGkVo#3St!C8b1TgZ7LKpCpWg=YLXk?>@7)!LS|%x zlhK$bhRp^?kEcsgp^z<7kJ5K+M&GtZ2SMUorCgWjA%#M=NG+(nC)Rn}C)Bq=fd%hN zQgQ8zk--UPVNZWRWN_S>yOLBWWJY$ITLnthAiKS@mGX$9whD#J$SxIUK+YIsm-4Lx zC8$ix1T?c-LX;Rb6$+V=0mI5*2WyZ4aq-tBsZhwAJlwdNN$#~Tl%zr- zKS%bW^;6U~U{8Z;4pOC%Ihp(_yw5=e;`SPLgu6` zA5wS*>GPyO14$|rGJB9N=fU}$P2I4#p$X7*nfE3+ih7x>=h~|{$gwAYv}G?JVTLp& zJ$dSt3H-PZ3Pqs$6RF{GGuxQ~_$9KQ+gIYK%Xnv3QuYlGSzCn=WHwV*yY~kvj(}2^ zJgqB9g%D(9(waPnK~|*NCM~|+NRkR6$jIIghgU~CXA;@_m!Ihqn8dVG2th{n`n!ue z$i+nVx^}*gN#-sD85!|P8*)eJbcnLY-RPo|u&EG&7OBTn*ocj(8{`#qN734pix#9p z2wJ2TeyUL=K-liV=D|CZqZOn=2r_cao#V89fiQy*{C;2_Nh*XOBjW;oM_yPwI-|vT zpKmQmg%D(9YMWQaf_#T;rZ)CoB1wf1v`Bq#=g>4vlWPF=y@4gnFscxO7OBPl=C=({ zI@yf9dYTd{qK6bhkdgjrLuP}FCelBlX{ICh~2-qP&|KwC^&R1HZggrG%g zVcQcR=kf@d6SlE!m?RZKkdYCKB74DJQ>tymoNpI9NR<#|q~Gpa@I0Mz?wa4`+E1lT zg%IRq-OLY7@{Qp=B&iUBjLa%F;}m+R6xqyj4;U>;g%D)q#H|B|fD{sP;@Spg)KmyT zMy7cms0y+;*-Wb(Jx$tF2th`syZ?pEx#P)!2d|m6RR}>wrrD-Ukv7NwanSSxg%D(9 z!|FE|z3l2iym zi`0Tz{fYT$TSUrNh*XOBimmOoDOpz6WRWBdF-@|cDhco1`qfEX$k#rB7=Jl z&6cD>LNc4(CY*dzlHGI*eR80J;=*Wa`3%AH*-GBfYvQ6P)4lOE^U|=2r90lM;|6rGktcPX zK|ECIJQn>hs%FxjA2v&p2}kROs=J4?;nV}&Vbl(}4$ZLBvxLN%dStk#GoG~j*H*wW z-C=#x_s1m8BqYQ0JLA10qpP9W>k022Zf_%T#Thv3u!vgY>VV87GNRnhDw1SskQpxG zWLS?mJ-sf18!hR2%*jH&5?4q8An#FQ%5s-~~7sCC%PNq$S7&9gv8Sa$> z_dgPB;!X38mpIdp46o^oXO%yU?4?_2vYz!?8Ok9E>r6y4ytXqw@$`7;Y&ZBUQi=zf z9FRCuk_>;-8BYtW57ey$;c2b^S}t)WCmCMP8Bed$V85(E&Uo7E z!!DcFi?pO{pTL>0WVp98-u=B>chK|OsPf%sH7_M`g}P+!9^zIL{%VlH&;ALOq(WVC zvf@7nBpFintT;p^S5>G>PL>};={Hf^kTU%#xg;8^P?wAhKDEt5lEGgWq;!oS73$I= z^{9w{kWO{OaUIf(;f+o2P^e3b)FMB>jNog#L46y!=|6GlklN|`TBhIWS4dqBBhv5K zB!5|3rn=amws#)XfZaRk9P>we#4`IjBFB95s<^a8&Xv2+8tPPKEiO15VaXmtc-)(Tbeb{b;<*d05l*-^_}Kk0kXcmu z!3Xn{k+?!=v0n4f_!}c-?3?@t?J%Qb?m}yflVMxTyDJ}Ipbx{YEoM}4+JK8*%Ux)t zI^kN_uBnj_T3GTSv_7sGE%Dri)_4P_fAo(T8Z^JdwcDZvou~}I>^=8o8M(`)4CgBN zHSC2M>cC44Z7%WL<jxyz-=&iKS#KjRG5P+JpM^r2+D z=)c_M(o|;WiM-o@aCFZojkB2;#Wbm(ZZc0)imlzpR zYA8(^^;p5&~s9x$)5Ih}HsOKWoAn`cIu`1^+sJFF|@ zQg#k}V3TAM53ECnO*B$Gam7@|r_Ok*vQ06WjfVnT>E3jpE%4ms(gtVT=ia41CGK-} zK!n8EDJZkP(ZH=wa?OMB#+YkYkjEN@zj3tV_{ueprMfKGI&SEoD3;7p>{`2oWvC#N&WzayvWl>Ia>M76WTH?( zhIywJMLXXiGOX?owIr!Hz-8?WZFq1O$mK+a*1uoJBy&H&Wn_e3e%cgIBQnBg4c+__ zJ;an`?zPopB9?rP=tm2?9@BduX=gzyL?pM_F7gM{X4@r{MG&MyL^85|$swiTJ|9tS z>le>3$5ZjqZ;TvUvTjR^%0?o`79G7!+GO%G_jYP=!>9BB8AoK?uvD{enetSSsfq6# z2l)Y!sYBd{N}Eh{=1%H+hrRLy6O8sH`rgDkq&q|pF};~PsSW-pk)qTLvN?E(%^XjK z)MP#6|6YehAR+IO(|c#*aA}iC&D?F;Vz#y%4o^4+&=#|~{6R@Fm6WMWc5PJD2J5-a72ocLF>vXW#vQbDFg>_`9!ug8+n=l6P&WD-(ArngIP zB5RxOcd(r#nR--^X|0YAHElMlW6n<|92I1v(|+gR1UIR+jZTHp(URyPg=S>l=RMuG zvLwATKiMlug=XaBv9qYHVblAozt>7qp&1$3u*3{(Ne!}Lv7cs0QlS|c>0M-bJ4t#M z*6C`7Xs1FmTBIIT`qe(@+cxMRJ?hn1+K~xTp&2bw3+np?R$bc~>f503`~Hzf~N=GO|m9B&^ql%`WwB#7UcqV^~J| z{WyXoY6{iX@6s|#C5j$m3RmHM0W-H!Rz#2i(?*#j6SpezYF^A02YD&NTpgIMRg&j0 zKPCBLT}N%Xq*akK`}}K?Q_jg4&(*AgY}J4s{?!Lj54EailNwC*0dDL*UQRi8ym=!m zG}}>b5IOlm{C zzWatG6`GEbNyqjfWoriwO?Tv*k&;wsI!2~`d;J2)Ux-XSvZ|*fnWkfn-Qm<&E$Qo$ z$ky5sreOHM(sdG72s>sttTqL3eKwI{#q(W~BolVb@E&Kwp|ziV415{kp{1r?FmX%W zF?^ph9?{}E1S{iXR3hq+Gs8KPcnm+_gzGWg@2x__3Wjk#rcJFMrFEwB7=FkJ*CN`? z#-gcXN@Iy{x^=(A6=IL|TKyv5V^Z2gv+L&%Dmd}i+To1ykXuV4J6J)9>f1~#=Q$Qy)JQYyZvj4Go{DyznySBs>CYD z5jS7-oF0{b&_0PXxySGaPPi7-rzxD)hWHE3*JWH6i8IZ|@JG&gaO!!ane>N*2PcoD z#|(teGvUYZf1UAeo44hYc(;$5J(M_8e+>W68ShfJ(GH1ssXB%(zdR@7o)GvJ%8e@jxK1D_+u zAk!qtgXbKiN(XXsVrG&_rp}jp36&0HWUD%FQ4hsX54EbcRr;n%2eK!Z^T4T)j1$So zrTBY1zKyS3laY;7m+JcW$1B8=@Cvau(efwtXEJg%D^`S5Yend*cdCmDAms*?@T7q8 znbc-J@&zxJnovCr^V7bSzzOBkXnK3NKYy&q?XrDF+?h>7KtjDEuk-a~Z%HbadPes3 zymSOmD4_rK>Lm01hx$UVo4r6!aL?$GNbX5)#B+dXxa zBo)=C4)<`w91|~=s{g;fSgJA-532TwqVuz{jJ$&sl-8PR*0+b3r}&LIme#AKr&q~IZH z%Vd4-q?XcjVktl(37b;yQkEoLtLymY??r+X$4BwC5_~1eeAZkM((b?EydoseJpm

    &>$ZQ_{p_ay03UF+W${;>{7NH$IX-t*%olFaY&CBh%ON8;SU zEr4pZ^6A4&Nvd?Y=r@{bT3qqKZD?mh@pHlBb0k@7QSN<9zb|g#9r9!>Ky5<^@1T{& zshrVGZH;%2zMz|e4)6I!l0kcuT1c{8tK1D+HiJ%ng~l2-gN_c$E6JcYU6LP9Z(x#3 zJ?N-=e4Ugw0N_$@nR71qV4W zk%W*SyBOzrFX-DgjStt9WSjaQlkOK}w+1e2yQMp}Iu4tk1<>KYAbSM5B(r>JJdJiv zt@EuUd-ZiiPIf@c^d`^eS7sJK+Zq8BzrWuWfBZcGf85(8hC$5vsK^$GP?|r!wW!{M$BWIf5Hhx28>Bl(C(5h zg@Be*ZBvfa70ylVbiHUMrqOL0doq!UqsCDBPS|9N=5vl_jqjr1xsViYEr?tckVM-* zLAp#yX~U~7sScZAL=G>%xvL~yuC(sOx`+G+$ws*X_hKEV9FwF=S&_ftkuI08Mt206 zzv1q`h1jDWa=k`JzFiinBztqJZREr)bSp)))AbsidH5juRebW8mbq(JYe~9ZqtExc zc?aY(nAFdA{tv3uu<3e@UJ$l)6UfF?+XY?HD1R+#>w1k&uG|)J!!B0$3XINxEL6+uB;L zkfi^=4NSLpy+%)qosAutn~;gq`tLMtx?ZEFe|Qf*WRTO}E3i}6*7X`aot1j-N#=_n=|i(+>$n5ZjC+-dsiH{wOk}f%-dRQjiy&r_(t^~5`%Ya zCk)8BP%DDAR%6rv7;cMiO)C@rmYBb}EXq}#Hp`l=$!AZoy%F0oTg?Y_Kh0wSx``d- z>4M2;g#_DM?;|apPpnF|x^EhpI3aP+IJ>@IN7UPu?dUD`jlGLAw2080sM%p%I+ zrH+F{48xb-HnBUQcG`1)4;dr%0E~d+ro8U|{Wr3TSM9moj3JAX;X1R$w)1HIJVaM8PU!@C7Vf7A*L9qw?D8Cqk_2&KB)5=lgwRA zakA31c3|!b@{O{aB<*2m;slhDTIhHh&o_zG zdKD2V1R@nDpp4Wv{z5(UBZ2y7lm3vkRme?FdY2dt65k*jthz2qh1_JMZA{M*U?5h} zL!&PJAW4PXWTe)1<9(16aIqZ`A37$Yi9&8NQm-|8B*qi_M({Q3iU?0Vq!5ja)LKm1 z3a_C}B&j&6Wwj05 zmR%cUHj#l_9*X=5wNoK+8QJtgQEXTAd_*=q7k*9Jtk}g>ZF}AQ3o+gp75rRXl5e=2 z+1hWLufT_FWK;XK^$|%bWHqa8=~k(~VLa^wmi8%W`jA3aGg6D$mw~7$HUZke5PI4{ z_>e+YGqTw?eqG?PVnu3pyk=!ddM$U=L!I`&hNV-d&5qV-Z!+YyVYBAzu1L)*#U12L zBJs1EBo$Jg)mBgU#)i&q7J>TsBda9Ip2<1I3G$?0?Lv<_Ju z%7`ktM2rJe1FUyh9D>^a;`ljOwn3pgSYBTrmVx|`{dFSs_(EcPNpnx3I~Zx((61br z+rnmc3DcVux`UCLZ+V)v+lka#95WS*LU%AyZ&MiKWLyB&TUHV|KdP-lcQ8`x{n`|G z7FIcYb?+c@VMHo)2O~p2m|08O44v~&2idm@-N8t$_pAjVjmY1_Pi$$)rb2fxQg63r z97YBEHSldZdrO%(x`UCr*F?kw_e%uoRs78LSfM)@sWt6{ z{hhHF(Hg|jtv0bvDRc)Xd;Iz#NQ&VYl`qBKo92o_cQA75l%q#LUL$boxD^$oO@;1Y zWZ)P2I*>?uV&V9#U=>L!bO$4wo(;nqrF#gU1uM}O9 z3f;j-eVoTov@?r9eN>U#l2qspMrv<;y%-SodibiF)WbolbO$5#T7CLKca$VhuXZFu z+EnNcMnY@Ahdk;NiJwg$Qs@pwdd}H6802yyJ!cjXN2oN*6uN_5s>usem}c4)Vd>sUP|cJ^1Lc!nq86#7#sNJM;=lif!3VmcdjGE8|c4^~cU-*gk)!1?XE;hHX`^ zGqMb(cUT$s=-0+0rmQU*-pz|LkhjBE(?BtYsVz+TurkDE+IY^Cm7xbt`4(kNry}&G zeV533Fb%}YpnGi|#>1wp46X0H!|->JriU6TAj@ECh?VgV{n~iql$8;>Fnyt{M`%`F zx`!;rh3O(z#$)=m@z^OVL+d*VW8zq&x{Piw%U}wLmGOjrZ9IF*%FsJrEswFSD*B_< zd$r9nteqSyLkNY<&SR@rnL$boyEFV*DotFzpmAZU$tokSjZ7Gi3$S|Frag{CJql47 zwp5=zvK~x7u`T3kkHL>c zE{EE}G!-kugUT?T24H3AEq{E7wzyFldfn1uze!~*!?QB9uw~en8}GH! zf*VYiZDBf#m64x*Z9E*n%Fs9e+Z**Tl*lJ(-^ntV;$meKq+joI?o+){<4}|_QnbbE ztMjr9roC7huh6fJ#{^hCY^eiJpe_H1K21!Z`_;nNnF?cN2-$PUxgJ`(ec1Eqr>G3A z*{o<;2Ge7#jAHcbBhF>$b(Wlje_W&@^omPG4wS})DKl0^2`b|&=Q1>(Pu>H4o66AM zoFIKIL3S;PwX;Kh{tgf!Rs>WEo7su`MP=**={9HxWgQ+@JMn(GdS?4meyWi0Ig1X@A+T7E! z45sf`8I|bQ=bXzZ?YGMh{vmQxrM=%33kbD^DLqz(sOAOdGPKysSFkoT74_(&ZpN|Be<16@ zbRa83gt;ruWoR|7EJ7JSiMDv9h`>$tV2Y5HA(oD7&SmHs?MtCQW>Oh?N`w-52!`>sYg9313#O7%9JB3!<))59++Tdc+Tw%-Qe*NmEk${ps(x?rXg7w zjp*0LQxoh_y`1NJUWKtC&$moetjzk&vQT!u#}i^q(n1n;K!^M+$S#Y6B+2BVg473I zpv9#uk$UJ}aj}Xzl!-zGX{Idue8Y|o`Tdm z`Cz7GGV76^_C;C#2KG3q1XCliM06=sjrf@U9gF5C;s&KbF3tph*Q|K zjlR|nHVYDIi#z$7B$;$mkPvAt5pcyO4nH@SBok~3(l%(~YD}X)h0PvK*GiJfGzF>G zJ~;-p#a0*XeC0o=aSTtjWdchkA#1BojXhveRduPeeO~B<{5M z{ZA#yB#(kbx(gLGl4hD$@>5ANp`#%6p>w*Uoo`b+_1*_X>Wh4c$(!d$DtUe~{(<(2 zKq~H?4pmZI{9H8CY%EhH&*2sc{Q-CIs7oY%Hr;_~5e4Zv>Em}m3bEjsbkN*sGX?S- zY28kS$p2rmSfx~1tmkhfKW7a6BR=;yuc6|s_C}u`hH0(^QG26ztr{(Ulgo9a(&8SI zaa&1r@sih{AnqD38dy>~X)am#jt0QxC$-<)n-?8r#9sV7N0JK7V2M1>rDHPJ;i_s3 z>gu^P@y}k8ROm5_w54^vJ{f}pyP7SnL$B77RHzM$)Y35W# z8_$H6Ll247Y2y)($C6a24Mq;TxgTpciDFF~cD2UWCTS&)_~(2-{- zg(gNtp*9%V>kW<8@1kV0SJ@r3(G#RXZ7_2AiLiwrix9c|$QN`JDM-c2&&VC`tce79 zo5&qALpMoMv3@f$C7|OGkYkBVX??x0Bo*s7BO_mLLMr(Qk&z{5)R3fN{bponov&z( z`Ig8~FCWTLiFPX1Z;RCTwwN7_cz*?;zSnzuT}dj|Z;RBz{rYtQB-CSgOE=P;!lq*V zwn+QfDM1OaxdS%sV<-G*`mJJ(u}Is=Wr=qI!H+cC$%REpJqnwO_1hxzTngA+ol^K9 z^IU5E_Hs!o)T2e(id0Tpj(9(uY!)e%*-Vm(bc5BPCi;`36$>q{wvB1HBomOwceK`KHwBbOg~9n;*n z)wz88PC8Q;q#|@Pa>w-VYJ$8)Hg{zFNJ3PQiqOr-6rZ#bAhFmWbT``nizF4Hn~{;l zU&E59|3_qGfnKSSRD^CuhF1NdAjmUBhL$gXO_GYxZISxk1`SssjQ$8v-&-RvU6P8> zZIN1dvv-#OLShAvu{Q9gjHT!yMd-Fj``EOEFJN;!K>OH{Lw=W}B6M4%?c|5cXgr&N zw4IzYmo|#RrXqA(WS&bcKg4q3NrF4ir3Te@Nm3EIEz(w`*jrf$qbX#wh-Y&o2o0Nx z&~1@g&x&oYz#K+K(|Q((q7AXAts-p?t0@u8b2U#$(xnvu+RMIMKfOc6x+XVQAsMIE+bcz{{nN({wiv#ttfY!wq(MlBI+`7M|RObkavjO zv8Ga*Bo$GYktscEwF5bh$dv9wNH7bVim1!T$a<5vqKBRl8Tsb zLz0TvX^~p=y(yGw=!kDE`p=c5r)WH1LW1sT^X*Iozi)}$)4Jsc(xxK#F`KuJ52f5l zBO-5o{duA!6~T{5(466=cEwLHO!uj%B~{N9kwv+bpq@)V=v55ig+i$3(kWZb>c51L zjEJm+>O6c)Iz6L-GO%g1yT#m zc<*mXD#8mRWBXR^1*fV=WNeT7Pb8@bFN|DK=5!B`C5c>7qW@cxRD>5s?)Z4-6p%j? zxnp5eA4w|03nNpy25$nHN@PmMFh5Bu!V4oKYoGlbJtVTIk(GW~DM>|mVPt5_37D+< zcVsiP;kKEQRD>6cEO2tG*9>^VaDW9)u4`&~pCY_iq!!+()m+&8jckSoR$M1-D#D9J z+Q+_YhoBRm;%*;1vqld|D#D9J+D>L)g^;u(tRcLts=8j1itxh7BHoGcb~g&6wj#9> zu1iu8UPvZ+wy?y*p5_x*B2t{8#_p;6fv?0Bk-{>p-8#AitGGu)B5&@ zp7m0KX<6c@6%f&e0Q6iI=eEowT?(f32^F`Yn?C?)OHT_Gf{AP@BAOM-ZQJgx$5zVC zjmT|xFVB}Y6%mb*m6J>T>zJ>$%EKy=0v7F5L^O-kRyM0i(M9AwR(jvMEJ;ONV&tQB z1-<|&R*OfgD$@-BVN(&87&+W4a45($v{M^iEvmXC6>*7?QFcn@8xK@P*^1KT2w_tZ zmlzrP_@^7_p>t$2^xwjCok5U_xMYz9PN#3gT=f_Qu)yiDJARX-A}(2^77T(U@eYGfRwy89l0_SD`VizrGyq=-uvX*;$4l^8&+K-x~Neum_~(N0BN zVq~%U_b$WxMiW`A&P+N15Iv-bOBSicl*yM3Dg@tJOsS=BI>?uhJ$u7_A0U{WC30`C z&rOe41T$vy_Kap25sxNB-kvt5m8`8Im@(OtGe}gZ07o`H9dhZbA2pXnxt2Z4Vn+HQ zNDM|DJeNhj3aMvwnQPgTKCUEkXCCi^w55*-4VI)LNLW$aw(XZ1wJ}U~BDYVcu zqj~GDNKz3b7&*L3qk|yF6FK~K`p{gXor)mA$jGOgFM=dci+s2+MUsjj!N|~uhrH24 z-xC@7$76GqP+a0ckt6u+nNtDuM(fi+T0HF3ydDp{-bj zMHeKg2oho;&$1TsyubA)u zckxo|CB#dI#DthmNzut@m@3GLman&39y{v<)x8tdKXzJUck!ECB+M&9!W6c^r(w$y@B|22P3u#CjL1t6sfbRDjQk}LN1euoH}ck6 zF>8rb#2AaTXKjxgff(~OOxm-y1c)spk%|~&k$SNU?_zUcZwpc{cD7?D*|&-qW0AH> zZ(cYL9~uYJR;gCyu98&57>m?m-~ER+ft~TK#lDmO4F{>3qf8X!oOW6M)MfurQOhTX zESHsVEee*O^tg#>7YERD`98n3CYk%Rvtpbr<9U~*J_eBUb?tMgF^{OLnDyE%9+Osy|lxg(xzhCS){E}wNxC7xly*rR;m2529i`vJF&q1VBMGc zA9DoNUa-t|icT7sm=y097u$b`ixu`?YoUzY<_qzr;bsOV|Hf^3#cy6}g*{dUX&mDO zbNS&(z0mM{>e=H!{6T|N!KfERKYda1sWIcqVj2XB&nF{ zmQ8!s<+9izxgUo~d)E0=v66JX!WQ><3qi@=4y0b(KKN@%DyF(+(^e_$U#LPigi_5` zsh1ZeeZ+Vwrn*IHu{$GgfWnf2Nwz)nBM13^T4DFc)kMu7Q&G#efABz7LNV>ENaeZw zQ3XVs{5Y<|wEH8DV!5ck>uq<&pFMxVwEGaGE#vmQ5J@Vgon_OuGk7wDkoY)s+s**@ z>ylJVJ4RORS-lm8$woG-cK(Hq&0aL^EK*zT9bN%sS&-W5nh{eashD;aY3nd=L2HnY z$YzH*iJc{>n06Majmr1eyC5^j<|w@*9W094DyAJH`(=cc2T9pWt>0L2wL*}JX~)Pu zp|MZl2|p0oC%C8?fECk@kx}kG2u#L7apaSK#>v_$rkzFFv%Z^C3)AixOxm-KuS$@l zV%k}xUhG*1Y&FEEkLtx9d`luzv{NzdEYen~>)3nnAxdf3Dg~@sAW6lvqZKw^+5htj zYhG5!B@2%|l4{BdtIe!sHNMGMicQ!_YFgZ%A6$5TS+(9s;dqeC0>{ODkb-_%K;XE@ z{bi{&5m;6gp2UJoLj8TW0EH5nP`%wE2dSztlkqt!F?Qh`BvS2@sHm}hp3rHDb0u;z zi6^nT+A{@{cv87lm$wN;lMCWsThFrPi?RA4-lKSR{IWY07q8zRMO7H|g8u(M4|vTN zNUAQ;{YUr5D@y1bCOUyGtEk4o@>gwa;>kkjh{;rQ{A|41A{RxKqa*SfS4qr1uyrcE zX#+|^WYKJ$ij5M>#xT@D6+NkshMKrGF7X*w9Q$Ib$hcTvp#=zc9a`cGdq)H6L1cV^ z%zjibNR=zG#@7sehR|Z`No38=W5zhhmq=CB99SFKJO>%}tTlmjQt^5% zPTn5K_UwGR zks^jkF$EaeCNvf6uO38Xo8WpvMUzd%6tGC!z;~z2!W7sA&^B=T>zk!b#S{?XY?>7) zg5G(3CJe78!$C9l{V8#UH(Q3apc2>Xnq;BNog}I7W=8scGGr@AAvS!MFQ_g_g*P+O ze^S>3N&1idVYnm}-pt7#dxeBGK_G|rZCS$7;SJ~6=p z56}C+A3T-rfI*`%X>tUE+0~{Mf!eq2qeBWTV(TQVo{*#tF)upaIL9tdju}qL$cYl*-@Cq(Xq!l%EIHWl)~s;$<}>kG8ec=vX@%6$(@()HnUv+P2MZZ_I&Y0XxSnjuNo z&y)AtJr84PN65f#f9vlefl2Lj8CC6-N^c&HzO4<=Ua4q|Si(dPxqPcv`wzRfK|2SM z&Gxg8(owl^|ff05M}Lvx1k@K1m9k+|!q+Nx{b5ip#O$W|TdiJU7{d3Y~T zdO`aC#+JvBo|es)svsvvzswo@b*n$NfGyJk1Bca|zh|NGkz zBn;C3?!UUU$zE5gApM>s4UnYYqh@<0$=+0|ARC7~ib6a8rJiUU*pH4n#L#RR=BkGp zU3q{}F~~;ecMg{1mqzG&LEkny-x@h|2YDtzsA3wGonN}Nd7%6zliXFyPukpLi1`=T zY#jcoNjB~=)h@~XTV2`o`=Lz?`t~F0A-^*Pu|SF*dWn~mx}&NPw_@EHioeHG5#lS? zhg8ZBjv5hFCoU=>rcQ8T*WvvKb&O6KlsLeDRR8Fq^x29pSaB@BP5S%-d3!jSN!l>T zc#ERB*t{U?laYTuGJy7_1ZH@26fX2121OCYn9NMtKI(fw5kw|!^Z1@R2&8h`U~FM& zta4;C=^+i{k9csM{)YB<-qDAdrSpiK%I#<)8_PLFqa`U1? z6-zGb&_nCDUBqP@?Ef_F(7MYXN>cH0M~qx?hn^$M(~`&)KQ|*U7dCBGa`kdXmhL>J zC&=wYmJT^j7f}VNNU$?<@zWcBgG7MWw8c+a(jq3vf&s2-VAS^BF&v8#GzkR4ntXo!JGo@38!d+GgjE zCut#SJ8@|4?X=uHr)%uKN?W>CsJ#}o?f5)dl)^QbVmP$+JybtWGLeT?`pl7}!ZjGV z;#P7ykT@`fYh3%9F7%1&D_nz-r8{0Ccf581-lGrP*>5un27cioa%H-ijM9WHMBAkjw%lp4J>IjFzHzp za$zjpm;m=DEEKe)He^5uUT~X zITh(`RrSz;i|Cp>qliAVKlm#Bx*;qoT$ata6_2M+1nEoUihm2=Hc8jfEGn8@b~llw zBa3yBq{3yH%_XnA_Z3J?6+B8+sNzORDqNP48RLK73zz+v$c!-$D@sz~vW!f2tN0qA z0YoP2qknafDqmn^Uhlk6HTjAWnYY2h*QHH`pEEMMauwPriP~nrv3P?d6@Je4mN}!@ zu`~VQ9%7b99c^e1(@R9NFR$N4XG5aHH9lWTk2Jo>HP|#=@%NBAx@E0o0Gkq(|4&9Hh!M7@4=$hz)QJWbNP@mB++Mn+n%pWOmtqBHeJDdFas2qZpx) z)aFBbH*cewQ*dLU#(cYMdj7^@&&TG(ivO<92Hu+R6_2L3GjYqQ7~a$wFWqk~#wpJ( z!b?Z2qiw3N&OD3Z^l1NcpMk!l@ZY_G2N1rbz^C&i&fJUPEuHaW0^9gX3>&UoI2!HwZ+c@Ld zRp#7)%ZbWoSFA#rE>U^ratv>4;4czbCrh3}ND?bY)FH1`vOE@&Sb2e>JT?Ok?OutM zH4m~K@S}~Ru$g(0AGLSJS3I~#!O4g46~EPAZsNK6QAcOIba?6cz;_T{y6e*)C7!z< zg*f9&@>j$J$Rk$kCALXZB%Zq;b#}%xlINC%A1x>A8Ql_vbfP(wyB~EmaI#U?TJrPO zjX42tC`@JKtvCj_(SNynLr>=_WS1Xz8{QzQkp0TM8xqgm8$u1-@CG+nr0@Shh*ixQ zg}Nv7qgP%=4`?4f+6qI8xzOF}g6>q)LG*{O)fvfGkN%DtMdMpbK3-R;o^ou4Cnnax zN@ZU~;KbOc)2LhsVLlSiMMGxtRx>X^1Bpz&{?8c)$s6z-Y0adZm54t5Eh_N|6*aME zj95lqPzj+^Gpw<=qiNNt0rbW-x6 zTWHKW0w*P|YDA4e=cpRPR^^mqW#K&WDBNuXXD;%MT5QHRPHIDBZO_|*20sqTwrThzIU~KU}1V+cQLxx%#)p*{6nTGrf1IDC9;=Q};37qudKlCtp{-ZAyGsivnWIyFG81jfXNZGT#@H8Z2`3ly z$Dr9aP*Is*He8ZRC35U#GLIju2u5h%%){S&_I!(9prUhp=*NRjTc4pMT&vZz2OTCK zhV=q@(FHE=BjG)Cvyq=NJ_o$-@QO7g$?_`C4VpDxHFcccLVALr2hEYU<$v2RNY6S-?MY99#uX$0}|(}xC&o>@+pbC)ZhB9FPe>k;rGb! zuJto$tr3P@J|?3L|Gf^K0@I4D4Zq_#%|WU>h0V#qUsR>kQEws#uP@$6+Uz}6bY(&M z|GD3`i3#5V#bJ;!J$*|_GTabLFChDeU$9HEe~-JhB^kNSmCXV1cScKcK+LM2B^jOj zyU$rW2fVZYtVzBdhQlnQZ)5tnve~i2mg#V$Q`8e3+nv8JN!PcELLyrq!%%)sWJsT_ zl$I0Y>3WCK`Q49hqPFFU>^!S1rDg@`dWX{M!~9T?2HESKFGzn1()A9d`>a#QK^kQD z8Rx#2q-uv^1!jb{*Dj-`R~)CPlc?I_t1$gZVN-lL5=Q1-%@K&jbsU=n`jijx4Dw6t z5Ufd_d9hIe)OjNnpLy0#d88^`*c@v|u%kBCwTc`5;LBzxX($yp{9aOj`t^$vEmjvG z!BS>2s4M6K+Nrtd0`q}vvkSVW4DVMNd!>YdaZxGJFVP9c>WCWVe}W%H{-|Q^+a$-1 zh&uZDtq|*kSE;FQnPnC*{+s@%ZgtOywokAV)spb7ji@$ellYCf1X>G%uLu~uOwhf` z%!(xt*obqlGR=sn%@O}uYF~~J{a+?%Ywhg}_i;R=v$OFTsu7X4E~0ejAj8N(Z;!qW z*MK}iW^d|nQiOt3L~%y0`to8Lrfqd1S8XYZ+@-^&brhheZS}vZd7!p_L{`7st*=Rr zb5&cfp-ZAbHYd_6;prD9neB?K@oIT=tU=Z&F>ioLUUfx!m7Q@_l3t~Q=qiusA-%jS zvSw;)Bv5Q3qgZpyIZt7>MLJ5-9_p&LvB_nzlQBNNH#TwednUQf6*)9B2t8!)OyfCp z;`+OiR45*+omzwMo0Udwml4_EyH8RisZczOtodKe9gq}$w3-heza~kKQm$&7I4Kr8 zC*$){6En_Ij#Z3`;xz%xX1{xr$D)Twd}#gt{E@aUf>fw1i?lT#Qhxw!1_HD-j~Ud{ zB#k8K3ugAMy;<1n+53{sTRVU0BT2>Q!df=Pb?$oM z3Tz_Hf(5x#xpO9&`#oyQrdBQP5SA#z`>GA8Lh@hqP@y8OMkT81NvxQKfAJ7J9#!#x)DukCwcxO$yW}$BCF2$1Om$-t4=Q{ z^fpE6!fRcU!7Un_WKb!0X|u>YS7fz*Zk0d^kFOR!-JIFQ-giaTt+e1CND;y6mLKXP zZ5E&Fiu7tbcA>1Tmv4_)NtRgRitHP7@i2Ty>`3|sHZLbh#peVtADY~8;Zu-8NKOv? z^|2%sxfn)nPMg&YE3b$qo5%L2eV_0IMJ~o7^LS79`W8phh(%f+@67esu^Oae8)K1L z=%7z9H+7oXT4;2>pCqYx&Vi8~FTV-D)xRdP_1^t&Q$ts3^c|jbibzv={iQz-F&L&rrWYxW{JRx=OPtch5pU7tF z&SQR(RAj4IZ97)_!5uvmKxD`AS^FfZc%K|2y=NuU>hKYf-ZRgb9$(MjRc%LfSnxBT zWFkidMMzIjZ7!M3ccMmA`-oFcU#8?=3F&K1R0n3KQ0VmHYtxu_mWh+;LjqpZujkRAd$kur(4_$X(GwAU9Lu@dh;{;0sTs3^=3`z zb38-@Td~;{8NFyOyw3(Lk0aCt7nezrT}e@SUz?iMK;rxsF~N7DsS`fl>dK~9F+Brh z1%R4Yp|Pu^&DEc{BC8$EoC;Fx0ID7S^O_{Hqg;{I&rD4RDOSPi-&`;~VSRU3WJqww zRE!E#1`-rOiMOOp#e+m_JUhmxjgVx=*j9}tsd$ixk-_s;Vxw%>41V8Jq&CQJ6%P_| za$v@_p;l-BwCYX_4`R3373!Bw%K8Tk# z6`Np2)=XY76J!k4wr1CmE+(1#CYX`c<1&t#HUk#cG|AjI!4_#-cj?z=7|#hXX@^w_dr6EY_8w!4vBiq|SYnC2<2$qG&N-9I-H`w5=M$3W!SBqTEwjIw-E;3#lsQ^! ze>t<0NJ$dR$llT855r6VF$i~vnoZUvM~+uul!Vc(z@I4y$%L-o{YgG0Nig%-@YJ|m z(As54HrzUDI+2njn31*b<*NlG1b!Hm16TA!O_BsNa^R@ZSUD|*pnn32)NHh@%Cg$(ch_m+m_Q<4NTvgX@4KxuKP=I^&A5LwW663oat zeJ;WlrNx9gt-sMrO_C&-k=4dM0kNWy)p~r&DGBCelX5+Dvg8l?_Ag0-8CkvEI*_c| zjIUnj=pK4bNfOM+dQM+JqNa_C%acZUQ%r2Ak|dasHS72LNUg0|$f*yJk|das-I@)B z1jf`3=WVyjjVlu=NrD+U$-iA)Ah#nqsnQL-wUQ*5k=y&{+Y3psh$h=xdwe9Hk|fw5 zbGZ(i-VhQPDCI#C9DcS9k&-0XAeG4Qase=Jab+u!jr{HtDM^AE+4lTnptQRxZMQwt z$a!(` zz2sAp1T%8?==_r~6GUZWc8KdJaxBSbnd6$hYJ}=T<5xh>MI`wwBkPvF zIS)urY;v9V4wcBKB%fuZYm0@rytj#mt-XI3k&=9tk&V)N!LZ5~S{VOlg$x11@gp=g62C2FZ&-(@@ zlGqAeyP1BZ)=KhOgH%HQS~v?x5Gjz){`!kOk&=9tku@4AYXE{;49MeRF9r}P$!8fE zmk~PV;uGP0(})s8@dbcE&YbV6^fB%ftujgPOevQZw%8h>t$q}EFE zSw>dhcjFU~LReQ{dB>GVNj}TS8VCB|<{~6qjm5La5Gl!L85!g;tP6}vCv0s{v3tXb zl;pFFY#aT19U|KX44OftB%ftuyGczx5ZNxaBbGYLM-0scKasbgYvLPAd8-r-#vIabnPxAr>`?%m=Giz6wBR5qnXpU)aeTh)I@;U zkf*V%nZ?D_FJ*vkCA%+#Rel&jx8n77ptCq=rX=xZ)6lEzsQN%cioYWgPj&&0`E;9> z{EA4oN$FyeVK29AmLvJ__;j7TJMk|0Z0(XGx$!e5(xSC)-__4cWMJi-NOP`-SeDbC z(=O^5k?qRnL^h3n0at!hNDvgoGiw>9GNOl=j%0JfRW+A+4Lx!xzjnV4kw zGi$ubZ+}98PQyJ$Ch9m-lnj4ije8#G2^WMa_ z5Y4M(rY#x%#u{&YrcgELbZ_js#-~EDax1z{a(9qTE{_36z6Zzf=L(*%^2&}&fpOU+SjBM8O6;_4>*(|^tvt2<-?hZ1t>G={hiEMgitq+ls zyMye#gY2=Z@WuYnWrwi&t}80wjbG6SN$g^KP?IzLHUjw;Nssdz3lnKGc1eDj5NDlF~f7-MAGd{@g?L_67U%5HnukSw2-|b@nW@I(hK%N+KlzkCQ8XPUz&6Vk3!^1UycD3~Hp4x6AY(QWEeO>G>}AQW%w7 z*h5VoF2(wScut!EZ_+61iR9Vv>9>G83f$ayHQ_b`-lQ?sxW}*v(5xEXcwjk9e}s3N z0dG=@HQpp-4TKyG_h{LmFX1)=-lVbFaL+?eb=+L{IN>$}-lXx?c;jCCFF>a^#b|6-P5T}iKxEU1yW5DA1U!~U!Pu5V;d#@NM@_I z^^_y2ORrY;7(B4w5V#>6J!0UHB-pJaK_=Vhtc>o_5VXBA9L>1NoE;7+Z<^6{SKd^v+Gooqb4PEq`pT#1i^S zjO)?2cT(MsaXqqMsb|AtdCd>ovk-s$fQ?g5>l!FCG%f<`tijj2yjSJk&dtQAm!S zzX&Q5!Y7X&60*a$lOQG3?ofAF^;`%QY^`J-GM}M&c7PPs$WYVQ^QpCxdC17%8Xdfd z46agI%zgAJnTL!FDPs@&h~_h-gi9mxDVc|yEc61Dr-jV3a0ro-dB`Miw!jg1VEP;| zwGTTx@aL%MWJ)r?Y%xrK(ZL=D7{U$=@Lx5ZiIfbmh{b;zQ?kR-71zM=ABcCD87=At z|1wt0afi?D5Ns{vn?52>LQ*nTj0~>ejWI*`3@$mQBQ;qvR*VdB8rz!4ki1`sTo`>y z#)^~np}4VVK0mIRNj@cG_5U9;^jDpR{Uc^n2~O-i6khXb2_Xf(C+MHMFkeSvfY>A( z{Y{@iFgBxcfJQHAt6e#^5i@FviiL+hvJNfUU4$guAsRS`7Of||gC{O%2Yn^Ed}O$^ z+fuqbBpKo(679B>d@_qj$(0j>R91$Z?+@fLZ0yRmGuIO-xj4eeM|aLb2sWi5`RE2- zozq$?$pIM|c%fhs7+FZt-3x3pO7*r$_&55-x4WF{|wUZai7}| z(Cx8mW%sz}br>P7wUSSIF-RrWp)V+9^$q%rRo-CADMlsdFNsXNKeH3G7L-1`k9GTZ z-KXUGhvCx{x#`nJm;|5=6jS8)hn|y9$(1mJRJ+_-2MSVry}a7xMrv*%B^O5wQaQe) z6;u>WPq4Me=S|;5q~y?_kuyrYi~thmE{sa?-Ajp-1T;n-7}6~iMny=#1O1=ljwSk5 za_G;<7T=h0f5nBSv{?E6D3Ow+oRJ+9y;nhN8z9+nKy};$gilHR+#pR81|Njdivwyd z(}aN&W)mrS_17Tn{y6moRNYPfK-&Fr?3O;`CEt)|kc#K6k$=H+g3^S#-nD@T$)}`d z&&bj1#w`PA43eYQ4sKx~|AQKc{i(SVoS>IOGIsknxIu{?lANG3pD&)ZhXf?I7m_a? zmwHPi`-}x1IT`5|^j12MUnTN=bhQ~V)DN#n8tat38PS!4=&s&KyGDx-K zz+$f;4!wj9Qakp$0>LI;`^;q`CDO_u?H>0y0s-It3jpmNhgS3? zQX;JkQi=H(n;%;H8hyq*o4J@siL_#5;*A+lvN2UfGVx3Vrq`l}B+|+tO_6Ko zH5c#{UUaZTB{9b@9wZD0mE?)!i)*DH5GhefjC5=M1g4+ebtK)q#0U2apAwbCNY~rj z8WZXIXCpj87oIthTgp~~u=sR}4Uz$jXN-{{rXYVh+fKRb;`~2wbOQb|4F)|>? z`5PhwT9my+q(mh#(yxUNgiXz-pXbpLL`qZ=tCPVruqy$x;3m}8yTiX>|F`_Hd0Vig zUR&=S8y}ZcSNm$?oGN1lYYN$}RnvcH7(#wVudh^J{KiIQEPJu_X8dV*#>3dW!0Wpz z;4^*)l`)B|VH$EqgL*)jL>+!c-BV(_M^dtZGII2;lD)xQ3i=$qGiZ~==YPnbJN#K@ z1+?}Gk{vEQeMGI5tT5&?v}wJ0M233U-y%}7!WbFcy*b2M&1Z1rIw)6aJtSFSj0_20 z17cGnL)sL(PNZaoak6F0={o7}c9TfS3S;^_`v70PeickX$_N8|Y1uL|B^h8g{b$sg zR~-g;ACfaFT`NwcWPrskzRsAE9nPJFeOSGWc!yuTDibalE9N-V_0e`BL+c)GPNZb4 z7#ZCD(ziqgxA`rANXb|+GNeV`ABYU`e%6*q$yjl+S?!%VX)Y;ZH?9N8Sg|MpOXvS` z0#{Lw6925GHy;=?WN^EIv2p)iNH4hA7@INmSA!5$QgLiX@9C-qlK&De+KzY%X7(V*CwDmVfHBwi8B+Iqch0Y zay}-NRI?I%x|2^yj>yP~uX29{qk_AfI`Qw!ZbV9QM6n%R(nnTF zaO*w-n%o1MoY0_vNEETjlBCUWti*NmDh;F<*|<*WF66k>M`2wgIW}v2j{dX#euLSB zH6cg;^nSaDl%#viXT+g5Fb_?+v9%HVlYS*q@)8^)yIy{p56CbiyI%0lOQa-GG)Q&- z=-nVw>|uD|aDDg`5p}VLB#ELyDt<=~z;aWe#qf2b2Q#*jPf5DR$mp*pqP~YR5PVJB zoWNB?N?v7S)>iIik|oZKDOQ73;`+mA>|rpL%e zyF5TL*d50nYV<=MQR>2(Aj$MN*>Didcnj$gxQKj8GCfW{Rp2DXLOxg|R66>UWO|&O z{592b3EQ;3}wvUd-W(V|aDrpL(8WicS})mzv@p^G|RBcBp&!^p6L z3!wa?kzu(%?j};AZ5SC+a_o;ph7|Q3Nu)&EFtUB=^0kRfA|={}lZBJ==w!b2 zMTnGW8-rBGtZOs@!gUeoAa%^j8~W^%WO_`&X5W<4QtCk%g_ILE<+!JlsS!C=n3a~t zf4d9*i{UV}{ClNHf1L2+7@a4GmyuS41Dwc4f&L8%8WF-H$MWCY6p^T5owi( zw7DtAFB=ZcVPDQ+N?zv;LdiY?XjAgEJ093PD#_RJ#vMDoi;-g%!1{{KsoOry|8fvX%Q#MFt#=v6`^-UrznbCHR zs6Jq8WyuBG$(`rE1~M9-Ga-M%N%AS#$(hf%u<0v+6w@KjTw^1VlAYWj9sOJXToR_> zb8zYCU-RZlA|*SyK`Id&27LiOAzHvrp7vSPzVJCEJ2@k}E;!c)$PP$$O&U6ed`fn5 zgH-nqo(;7U`}qK>`$PAaBT}-H8>Hely82*%+|j3B7f+FQVrwNkIU}RfgTKbc5+6Je%NCxK;w`ceIgd`xuNEk?c|K~emCzOEHxYz#rv|?PxPFUot%^Io=}If zkR_A8BvP`Ib8^tAqB8Eru&tMaglAWBBn-d{hv$QsSwWvVgs7Q8l zMmE}XWf71fj5V6>oJ>9?J2@w7x-Zqq+;NA9lQ z)@vdqJ2@v~dj{#G_lH;_B|AAIL(87T9qt;=p$?xe;k*7Kj{ftDb%i+n0xUcFPrY;n+ls{k7N_-$IJIE5clEkn+X_WO6HGz~xo20e zC7gv^hG%=(&hOVrL!pyA5ck`=P1I7+JBywS&-S+57>|=HfdttEcZ*y%iz@_x^FYY( z4?;N@ic1Oo#uZ2SCgP#7DYx<` z!b1xEBt#nGY)&)0xHaCs{J8~$w|A;9f+ON=Vl%vCHoQb*P%zrFx6fUB7d<NgP^CBqY(BFlz^7EDthj02gwWF+An0f|LPHBp zqsL&An%Rgz8(K_Z?Fhbkv@O{P9=t*1wAcm(9lSexQ4`X9?+AuM9m4o8!zz6xz72*)Tq6V2`3ygyM&C6C(0(_;(uoqy4cN zk-yX{&f2+@&yb{negpd_^ovW1!^o_?0K!*=F{2CK5YDYbv@+xFgPSlh52M=|XJ&}} z2rI}omqkHsQn4sE#%n$7^vZa|$25EuhP?o|WK#9j+F&e;(DjQ4LMPrpJal$1aq$Vg zvq@zWq2VE)U6KfA6NuqMG~5W1*-n<)_P^x|_8{AZAbBU^5!quw zlGz(B?6Gw<<75lS;YKEEUzwuf_q zbrVA0AA|s@;i0XMdJ)dT1ABr=)_6$nN-E*Oy?0C`-1cy$S>x^V%=$ohNT)AFsTSv= z?ctnijfcEHuv*7Mra}PJj$&*N=X4D>Lcu-=1+Zs|P|zLzJq7;J{@4r!rSwps9X{dm z_wOCuZ(zK1@r~15Lc0o$!ynD?$87x37k(7{U<_mO)m-R)68cX*aY`$!+c=J@Y<*sn zv~*;D*d!sWDGo^s7hgopsZny8viP9kTnOPTH;tvDRiT zc>`+LZw7nbfyq@*fjkZRV(M(A@3fNIvd)b>P5szQuRbF2-r#i28jX}RXUCsI-s zGDszT&i5hET5-IXo^iA>kt`1Be zwf8F^Ban=$6mpD6rt56`RQK;F3@h7y5rFFc&1ZfmQc@LSKK)CSM5rnH^e?m>&mcq( zF)?V{rxMe&2&zzsl5h>RaV*M6K}xDZ%xChAJLLfq0wwv{t56Hc_j!p=-`e#i!YTu; z1Rp9<-Mbh0lvIV7Pamg?8ASRNxZIyeNmYoGW(aN;pFRy;TM;R#3USh*Vh^2E_I*vH zq$*nIUlM69p5a8Kq$9#W;h$IonH43A|+KJMn<$b00n#% zPBo!w8&FLllIaS`?2A}g5q2aCxyW}ZkxWuZ$k0u>pdzG^q2HD7Oe9ki5;APX*~>(R zE#4vaS=G6Oxl(muW(zL=70El0I>031}^>enm-7Q3eqy zQ3H$|^f`ZSAY+jn^g0!*QDQtLYJidPPG6h_Qp|*S)6zg9C2GJR9sLiqg54t*?mLeD zKesAPq(luEq!L+Z_Z9G&7h4;dH*hDB5;efcsN#E}Ok?VZWK_XjSPvG@DNzFksqSBU z`+FGAg#fDim;ZH^NQoLSNX6e_)OLWp(5K(0ZR3fQr~yXCxCep`HHo?}{I@HS5;efc zDe-9&KAtT#}BoE_|L=7;~>{#+Tk!E%LLGme41B`TAmW9tL zawxa2=R+Y*oADAgz{%7THFa`C_+la@YJiau?whdc^B2yci2Bc05-CvwoJ`*gH4Y0o zrKr9>C2D|?p-V{D1!*E`I7NLTSBt&=hDfY%;Lzk1tmX zn~lPWZTqbL^Vu2?n)b*KaG1$Z2}mC9Lpa;}4ZN_OHSXba8@4t(3~Y)=^)c@VX99rX zCM(>OIw%YBR(sr6O{tL%c;YS^&#rGW+`$T0GUskD45S-+&m3`d1>sBzFg&*vu4a9+ z38JI@CZN@=yhD6DAVz$$#Z*L^u-#49{nUE9uiNHH5|=!^Wo% zi~F5$rVJQfz#30E`5}sRf2>Cv6Om zDmxF71yeZUQMo-z5zZt7!?lw(16TKND9{SVeF4zw{;#Xiqhi`%V@dkAMzf#J2Y z;qe8&(eaS8iG(w~!0D|u+Oi%@e3*HlA*$aLS_wlA(+~`I&4$k%2>G!EAKMgu ztvx#v5)3z6XXB?V$rYjikWreFLi?=ORwsLxQYtCtrCcWdewN`kXxG^h;P)Q-4f@d+SEs<46#ECRlXgk9lB>g(0*h0z zOR8qyo=D}M_&ZoLvP~);U+2PjbOry0$E^8@L^Azmn>3~V+GP}MqA>uPQV$1Vc~P{M zNjKZ1lKJbDxB7-2AII~SU1~l1u5@gN#1u6NY1XgH{9OCg5TI+;l*(TKk zP7b?aCaeTdJ>b}K1o>nV&Niv|_v{XHRt-R({@oNTc8behEdzoe#;FAEvw@ zk_k5nnd0~zB&A9^k}0_h*0hj3@=8eGiFu(+pnaKxZ*tE?kgyiVw3@;H5cGI=K>JN#T+C)`kW9cyNVm+W<6NT$;yWO%+`rV|-% zUtDi3lW4X{HRX?U4zN3X2_2-SoGbQ;d@^;`AWl^~xI;b4%8M}qTSfG(g|6(GLVh+W7tu0JG zCBnfV9RrG#^oDu+5nMV3IJTTlq(nFvq%yV9GhDDwu(eYgoa#cPL^v=qvW@vCXswW^ zk-igYTl^326-Bkrw-3n9=rgLN$1d_I5e|k=b^pCDi@;1+3ZT0G+O{1;N`!+!D*jDo zM*`%7KK&c^_)MfkI50A1-dE64?M>*I8L?jwDG?5gOny6R3%HwxK9gT`!$KDZLz!@3 zq;FS|4ZK6rH!SG_`IHC;M*1{4?*}VekZ=zK&pJf_mIwzBEt?hy-K7+IB@dXX^2Cb&#-g<+ef5CI2fdwvTyD=*c~cB2dOFBH$Ep)A{^M6 z5tP2|0s*^exy7Cg|E>M8d1h42Rz(NSilU*Q(`rD%5aZlPA{VmVVGsJHH%wv`ug@w$ zJ20KoDkDrZuxgO@1rqC=! z?;bN=CK1l$1H-lNVKBU#QqO#72~ix=c~k2C^`caQWgS+0VEAHd@0qVlz(o)fY+E2C z?pDP5x2Os+A;IvaR=E1v@yG`7{v*(8*86T^U7&ZSCK$fl8c*waHWnrgh#-&@p-I=t zJChU)UulIa>G#@$UNfD+#;0H0=ubG)6%1c(jVDHZhK$nG7xBcPdE*IZ;)3C8tnv84 zc2FiTl}9{2#_uiROkptmTPxf#!1sD%kQtwWb_}S$L4;21Iwmt1{+$)BOznBF8uZ#T z^gcD@&$;BCX$^+2x5gt!y1j?S7e+j?&psin&^xPCFnpsm9yRtUW4U z)xq%1R=9eg_`TgQZB_uS9>~@88a19t4~A>+Vi|K@@$dKT5Flay0R7Q!VK~gpZ^5||VfapK+;?gch!{JR zmx}MmJGIF>lOqh@WsUpvsyl#ipNMx231^yw;Xh}?r?-K6kLKNHx()?lxWQX%ePSDnNDH& zA#2?2(62D&8t%6JFkaIZv5tuqh99xU&0}t1F-Y@1;HwFQGsVL2W7%-0rLejU9TyDhT-R|@o+V(D&b+zylxWC^bEt#XTzPQ z=#3A{S}M|PY&;V+47YwqO-;EpW(jOkm0`WADQ9-{C+|$zF#M9{{om>$=N2D@z`qad zIVA1y+fVjbUBr0vukfGZ+@g^9%fB@!2;c$n-^Yp%6~D1@{zJ79@q0`uEu|T7*)b$pjO%0qn8QL$OP8 z8g>stZyf;blJYn5CX#6-+oa+#>P1n2gzEQ5s?wcECX;NFrqm71V5hY24n9q(YZgDz z$(*Y!=T_wf$P-8<^W?Z(L^5$?+ozg!UwsTdcL1nn-TLr~NT!P3imkA(E*f37Oc`bQZ|oNG6&muOpHPAqg2Dl28*! zF^A&Y%sWIR(?GUK$AEI7AbE3r0+)^fB`fN)kI5g~q%zfe;%w*~k&8`j9GgKtnevg4 zkr9ueN@s#a1fnPS3~FW3w@ma%$fzz0z^ADTl2PH0F)tD%(>u0Fb^r5*rC=s315n-n zsBv{7nbfgOD*nwc4hP5=efl>WfN#SIpG@UQ$e0y%8bNCzu>yg!Xlyi*OyEe!Hd|jjVR{F1K_~59d9FA%Cqs!s%|shP%N^~=22&i&#tpQgy)bXs zuuCfSx(7tX+F-(N@SZoKLWMGrX%A-O7TVC>nm24H9%D`SXZ;GV#91;8P{oql?^5HV%K+odtf^1IJ%D12NzBuDw@^JfWm<;Wc!oA6TG?<6sPxneRLuuyhGT%qZ#_K= zQ#H)S3$!uW%7!x4zrt(iPS|C{DN-caVETsH5YlprwT;NGuTW>hx&x)-x*QdNSaVG2 zFdJ{M9n-9BL`DC+0c>+6{4n6Q%TH* z5UBI5ZTPevypL@7)Oz>_*J#iEXZb~e-)E%quqN{{9=AE<-}~{MjMN=*=TYL zYJl3a_>{i>E7@QgirK&-ozs$RHrBgd*KJH+j|)PygQ+QIBOlsWW^Kc49uJv|cK&WI z@x@NE!E_a~Q2=eMu(sj$Z4K0*;tbzy(rDa~MLU?nVm1n)jaAk*%#oiLkPUOa_km=C zX)R{M32l61ZNu%E_m^bD?a&)Y%nFpY?MSB-)FON%l)WsW7l`@$p+J8%m$W}oHkh72z}fc z;+WQs&?85`CL2thF&kyj#wKeUVK+T`k&UpQ_F~hMMwg;c~E7mWM7?Q#NltP3>UXjoGM#Hg;$>3>B9T*qLD9 z=6^dY(?9WvzhC7WJvdIPsg8Fcams2lYG zl0k>t93+w{M%zB^l3Jb1g1w>vfObhu8}25O=|tP4;_>rOPze#&(-n`+&yN$y)S+$C zl=}G6BG@P6z^5rSa|Z5l;yIZnv`s3vis0%%dYf^Ibt)U?#sC1EIIkxU!b?K>iw>a$HM8F`N$ht~d%w$tBD zUO^<&dJ-~mOl8RRO#_fj98?VNxro*>g(o57(;qbhQp}}Bn@FbI zBxKa`rv-tGMlx!)!&M@gUb9WA2O3^ThMBM$K=nZNkx&HITFX?LZBp@18+jR^7UX)YQ0ef|DAxzu|ZkxXgH$Ptqu)LVS^ zj>NjP@X7R*jC|k-vDQNV*~OVirm7^Qc|;oO(`(p6=01PwvyW*h3F&r!7sMcqbi4Ys z9{ZSrl91-*KfygTi_baY7NmGirkiA>c@NAV3t4LzW+;MWYDq@sJGW3L?IMDRWEx3A zMx2@h^HzO@JruFO6lT1_CsRfeGP25FsYFJWIQj#TObs^mpwDSR>& zBq75qAA_}`k>MrtVEs>!O#8^ldWU|{$tnfL63G;gZBk9S*Kr%{4sc=zI_G9&7?Dip z{DaJPREB^_>_K?!rL-x~8TJgdqWEw7P&{oC&mhqNMx{jwIyhz$koS=c+B@-oL`pP( zLE0rX4uO5qR3AXQB$w?ch?HmmgH${=_<}&vuC;rt@^>Lpq5%xjlzM#?#BO`sRZXcE zHehZjo>QU$3{tsm>Vk@;8IVfmhmnVflxP5hR6m!#><2!70#N;2#G?t3tOmr#ijir9 z#}$WBjzKc5?>&$RT5Ba5z#x_MmnXMCYvHySXn;q(e2A2207fSEuT=p^h^L?d;tI4S zQlbGE8K1fsYBHvZNX8Ezv6e`Q1~5oR|ND2kfd;^g-O>MsM;{_38o(fxse=QLLFc?c zpHurz!{kJar$hrVGICNBC4&+m!0Sr>{AAaFEK+Vyo|DeP9iIivnM#l8~I|5p3LNcaZ`8q^O zGyo%0ir#$$PzI7Ig|5(ymuUb-`YznQ71k%L7tjFdQ}z8=q5&A`Gx#2y6lkPR|1a@A zrWj9&2H@m^b7yq&tCCm+6Qo1~a5ApIdY$Zgsu7VA4Zz6@fw;qo=kz(%2hYoePl*O# zq`Bu1m<3uEWA1eN29XjCz(}`C8|xD3cHCblB^rQ{=JXw36KNj5a25HKXaG)DOTp77 z(CMI9N|snnq(lQS((U7+fke7J9#@Y@i3VU~#O|vrVa5w}AF(wbR;)$eN;Ci?Bc00J zAu=-0bA7EyGyo&RDl8sNWLU}eSaK0QB^rQ{;YFH3Ua7S<(36P}GzwSW4AeE71V#HgIJKwwRLMf(plK_;(8Yqy4dY8@R5m zb1M8aTUOzy;uoFJJ1M$f?~!rxqJxmSxvVl>rHyk&VR!_n+rZh?UvtHo5x%C)w1?$2 zZFs`MqOc*fWFBinLFa1a1w(hyP|)_yzvEv=LrjVohMcfQRU`y|I9eI9OA0OqS%C@G z87PwqMMPB%4KZcH4AnpzB9`a3GNgDM-qs3iT*4N4OvyySE?UHd3Nus-4GAe%(8`c0 z_4PD3Q?m!{0=ngwNtjh>hK&0)%#cV%I-<40R)&<@Z76Ep(>-9QD|T^I-wGJ@gdwJ(n4xB9qc8rbVr57@ z;58Ves{L}XqaHA+W5^JbRLqbs+USozs#zIQ{4@4|@=*P-MgHM)(VJ)yQ&`N9KiU|G zKWbPTia8kuVpjWT!kA57L&*>mTx_hGTjME}y-q?CW?(x~OpkG5VLQ0$V(n;&O&E+n zoUIM{Zuk2hVhL;G3{R?+d9Js;jZ&E*8*8af*npD@HE8Z(5q)ryS39}Th@8rQ#}ZYbc!eKN!p8#5G) zHgFLaX_U>-%S!EaLqD|mM247vV}>xI6u}u*#Le1}d0bdQFa&ivP)NQ_Pm>|0=a`{T zw2^{8+^r3{y>8i-47qK7g3D0!5tDb!5DsdQvG^m~nm4a2@tF*n`{Y|khM3x8h9c0$ zc>LjM-6FGZKae)sqq%)@(C0G~f6S1meoRC|O|uy)RuA$fi=lJfu#zMmjcGwD9rOd3P;hR(6=RV4Twi$!jT#3fi~b|E44_r)gNA`3y3kzP}rj%bCDsY zBblLCv>^mhOY0VedpwNN4ZZ6$febNO$qe;GL$mNlYb!%)%A=W3&vmE-eXXXPZla4S zrZSnKUT9-B{s`0zWh*>Euu4{N193>Y@EX=kuD#;F*FQqNB07!Td18SQKfZ@wb5>g4 zZ3sunYAL{#*4xWtiCW-HHZoj$$HP$1O3>C7K|d&k4T6_1JHw&8j7?h(0KA08$Q8LqwKVc@3JANN7Y!ydO! zQ|i=1dB{5}V=-KN$HTyt%xhnb2eL7G&s@J}9N|m^GF*Gd!@$+7=hvaz>>9?l^ zDpqaaj6*GkAF&!ZH7#)cMi~Ash^Ljm`;>4d_!zFe<6(GL($5tA78?I6Ha>mD=Cy<~ zna6PL9S?>lwx|lT&(ss~#4-nP-xG~z;*R0kJ01*=?>r;`a53xRYey9&oJl%{Ywvg% zxMM&Ke^^bq-h*>T|BwAJHVN;xg`D<|hk+|oTg?Jxs(s)&y!@{3=}gEm@7g;a43F&b z>^U?Z4!EJ_RVVkK~F94j*!?j~)|J z4A0DlC(ebmP4n*4yfp5O!aI{s48M~N_eq6-XTghnv5jyhni&4SZ1`3etgne@_nA-{ zujUEwOe!(_zBO+4jDvhiyVPkeP&DAJf4mXlZe!9>90>1B7BT#hHExbc z%OV_J#Q%wKCWaXP#2R;di{~3!4LYk&E!KO)KmOXM%>|@3Y}Au0lqpJ$u+Ml`as@WDLVUTH$KSZ{0IstHA_Z zP5EwK5aCR`Fg#1cjhjIK$2ytKn?P1|vVUfB%=vZAIkeE}I{v_(a+(W2ilDM_Y6(9I z@5KKJ;Rv!lBPgXbHT%Hxff|8?(bcP%_>GMlLzT0AJmR9(!(lHv1)Rf>`7;v0Zqb@3 zvWg261<;_)yD3Uw`K7MVqb~S20!y3D5y_;Ngbe<27>YJLS5Sg0c|0PLsV)iWS#``c zSVS3B>K4uo|I}m;p)7UN(|JF&Pc4nJYZcm$d5TNGh^Y-L9 zYlvhz$u?AH7@R5h^ULZw-lLn^dRdkK70Y(icc|N**6f?gYuyk!@1R z@J)b>&-4ejHpAF1kUSGhmV#tT$Tq2T%AGY0e13sGJDECuNhDJ-60%#BJWy&h z#Ut6R{MlthG67?oR1cQ;_6|wjgHAu)Ad+bp+oTc@i0^Ev!RRxf#rhgVGT9;_W9z#& zfYug9GS<1wLL!-Bk&r3PlU4vU8_5*^!ZdGr4M{@!g@!hR)(Vy67jy+rV#TO1g(D$- z>z4y*rjfqR^Ds3PBoj9>vXg4BlVKH6*a?#98W~xsPLF!xVp-A_tjzluO zA|o^2!}_$4(`TU45v^rXMM8!xp9r_HG%{?_TYcU#l_DX-zuFH~DUA%D+0K=GGJzr^ zmtGCh$%O+`h-BKtHmRnz^SlHx-WfVbO${uHWmoZ>OqTqEG>RzMH}Uj@C9sKO$=G4Y z(8E~56Q zy}*QNY}4^r4iHVSRSHS@luh2=PMHRU2ouz$VTvwf(a2#QG+tDZGHR{c zPq<{qXUX(n$01M!fPe{q5?>eEOeEX!4aZsb)&tio;M9J=YargM?prwW)!NOreTL_< z!W{z=BVq36hDV3JKfaZ|gG=^)*6zr+4PjT)zDFYRZlgBjnC<<{aegbuO1BdG&jAjT z4g^4fDw%{!1c2dKJ!tO@br0>!ybe6c)Hh=$0GMO#*ww(5fW~95z!*dI08~K53wy~i zQvnRu4qF)>`{geipxp%#k1fzUjc_If7+y?!Z2U_#jK${X*ReG;0R@-hSNcOUvca}? zw%C4v#g#W1mKrSa6bTF!^B2^_AJ`yOHDC?$hzU?{uxiGz7y> zT6+(hmFI85!$#DtP2QQ1V7PUCR|%gub|K;61EcZSNlYrHCK#Trz8gNPky*z_4*MVB zOj0o1y1uKXHs90?wiC?8)KvGHzY)%Kg@I?eYtL?!J9aBd`S!rxglj?F;opm4Kd@mcN|I8Qt_2O#zUm$;9r*S3Rs4EI4~UQJ7@ZW;D-JZAEbS19cv~Ytr9^bb zL5IZvSxei*Eb$u~g$#F5lo(CeT`-6~(8(GLboA4@tDJ@to?xrkmkbqxSLU z2i^b116<*gX<>=afB_F+lTmS#Q386M_8^kUUmT7YtIrdmPog98%s5YDlOp(jT zfIC>Q5v}$0euMX##7tm1Tt@yd>7`C?DGoAUBboY^knY}>Ho;l}-3- zNb~72BEiKu#B{TSbl=r;1d;AP{QQo5GRZ6>lMh1KNAu}EYOy{Om|C_?s=W(bg)>3% zZBlCQT-P8m)B2VPW!t3Un$oi__=LEiD6XR?iQ^f3&PklPL~hSfF?xTMFbzmAY^`^Ccyl6e zKg-Fd&(6mX4>ZzeTj?r9{_janq;IimCL(Dyxg2}QujQN$me!_Jy>FW|in!SmnDj$?Ac4UI%c1+E zDR_HUELc{=< zDu`XXAxPFRpEVQ7uD(fH+u_2Zs^D`ek{!0VBnVJQV7i^qL$@S> zVPubY?W2K2d9L($86HkP?QJJ8jBK2zeF{7$1bzsHYWuuIN)i}Gc6CjG+*zHAWY?Op zc+*vkrzC-4q-V3EQ^BVYpPuds6^N81Fa~KFo8ktktbJc_X&ReQ{ew>0KIJw@yP8pN zAV`SfqFv37#ZD0^Nni|8x&5u(Kp?9&| zwFo=x3y!BF-Xi$h?+BOVBFu5~%9How|sCXtd{gpq!OcC`UA7y9(;Rjw0}l3aw5 zzJbo6MEd%FsfSKUF2cznju7NEpT7NT&`vJPML5~ya9N#fR5*!RE6GJT`TZVPY8Ia> zbL%}M$we6H?$!mW40f=Qf~IqRq-VmCT!fM4^~*jJXvhgDqtad)d9%_8|w}nJX zauH6>ERhA|3qhuNEg({oi!joB62Eg=Bh7n<*CA4pi!joC+d4Cm?%%d4NTehe;pB)! zsBCCH-4kc_B2toz7^K?U{uE>};>%^!UZ35{5h=+<3{r6&*|j|QJdZu(nlxUVq+#fk zmidW&EM-KwXt0m+O-UKN zb)DGZY#j3B6Nfy7jSVn3;v^*A>N5m`JC^(ik5~*U=KSSuo^`M?UdFT{dtv9jjAX{- zphiSW)SE#%1{``f9_}eP0O%O7@7`r1B}&R5m2N|}Gy1gV3e-b_lqd{Fri`hKTQ!#Um6TB(aQYzm9}1n3iw?lptDlgJoL~JF`IH1{ z<}>o|eWP^puX)#rlmux;hAX=^5E=I2a5W+&L7J0q#sm@>{-RAWA|*kZksVEWK!a(| z8UB9gc_Jl2I@3tmvroscR(rsd*w=zvRXRkbSaN7NYGqTn{jWa(BkFR&K?#wvxli+0 z{JsE;iP`$Zb5P!+kDy?%34Z4=$TVGa`;V{~axNGQ=)DeVy{4Wx)B}3tsf+Cvr0t8z zEXLG!+EoXFMI@579rNcQGUtLpzjm`=y=!Ns{aXKtHw!eMwog2n&s_uOc|dD1Z&P;l zK7NHrS-}8*|AW!tE<5wQfhNyH+-2+MdxT34^_b)OsYf3IxgE*+qd(y`Cz_mdPTbV< zSIB2njHyafw}S17%rPfc$8U+O2;&KJTT#b<7wu1E&Y5l3iQAR}Gy;8g9sB7EB6H4c z>l8107M?Q$$vOp>uOqU=27U6;Y{cosdZ^CNBTnn&j`)W}N}?(w%>~NCfNBMNbFTDy zMCP0mJFkCtA4o9;omUkU@fas>&N*>VIlgWA`hNY>pm`oVLWKsYPP=tB{Ah|D>g?mcZRENvActD^LtI0x?hXtOWpY`X4; z9^Ij}6OpX@s&qRdbIzt~_PlinNO3e*vqvX=JS(-&={ajxtACSvsCN0gvE;LIPL(Ic z`Pc6uO|*-`);b?)i1JLVGRZD!jEbqBQgs!qmEi!I`o0YY0iuyPXYk&~LS3P6p>hCX z@?hcVL`wEo!>3aJRZCDGTHn?`7BG%TSq5*!p_V0+U{_X`pwE^?_Y@&A=j6S1-conL zC-f2oT{UATk&RMw8kH7HE}kNvEf&_*XF|?tf8?~=xJ!OSpOF)jc92hr8elyXdF@nV zoxIqs1d$Roz{s%YWuS(w`3(E(%P=A(YJid9_p_kFrjg+{BhC^jQ3IU(yKoVmd~ix1 zPl*~ZNOe?l93&$SxHYSzhS$S`3NdeUPT9I0-3`Y$+9wxwJGk->BFAVS^o$lI@it)Q zq{`q9XS@uy*gG|{c3Pz>L>{+&LB$wP zrFMAkMLOBO5Z2Dcc%B@QlTYXKhauUswDwG!B}AScoD*3idfN>kgK$)8L`=kcio)l) zfjN=Y7M>{vWPc>9%{%mn$Un3%tNWKZRD0|g+<66Ad(84cA}@{3$!E=^E-^&bOfZ!p z@_N;r$XZuxZXmMOCGVm{-pZE~S^NFTuZXPu`qV%ob58r6H%z`rr1QGbn~2Og?RS1t zV7g8|AF-auoYQ{i)pMM6a(N>>Ps8#24{5*iZ`*M8iBWMreju61oYVg12?N|=m2JnF z(7bo<%|zy$_W!6TYo5-x$5Z?8=a68mnd#~ z1`TMH6xZLcU+)UWbsCf^&v1JW;XL~Hev%M)3{$$m9!ox3RtRS3iv<$a?Q$`7Y`Kzkqx8{FCINNO* zZh2G2xSI?+NyXOCZ#QAW;vNV`@0LF{C#)CMsc6CuNgC)kuzy0oxTHA!p0a=9zy$w+ z!)(o8SxLCELO;yN2jnbt8TztLE+QpKEhBGTYn%%6z9EvgE=GP$q$D*pNK^CKHNc;P zH-M(*(>^XIQgU2tkV?k7w;&-*f1=Nf)zwTyO4c_cw~VWE0qWu+GHprT@_-l|%l*AN9rp%ZE@jzLCWXjZ0Sr$?@cNrP^Y)gLd z`5DQ`zp`MT(w>tAA}&K2+3AaJu-#~6ry}kyM6wtpA;YWv-kiwr^6gp^$-<9>>{w>Q zG9o(`Pnl07i##&2X3McUS-CYzLNT5!=t#)+;|^y6xea@${pfJK&nC#;E5#Zvfd9W( z(~iSo)heuq0!Oyj$-u-R=+u;LmZdFx=<9U>(m%^*$9C!I`z1&a&F)O_U7=R`_Enn5ZV%f~~V z-E;+gW~6VZM5H97F>=f3W)C2wO+s?ZpmLE!NRC_!}Qa9 zhUYGOf=EepVr0j{e}S5|ke`a@6rDI(>ie=pcFc1M3oZW^ofz4ESS}|Zw_*>q?{gxZ zNJ(^JWMKdJ`9uar2kMJd5}i0XdEybB9M$zC`IJN_PNt_r2~}%t;P|#BiIhYqPS$^W zTqmm>zD1-YI4wIjtiFq3) z;-r|jsb62;3oaI-o7B`gmBnvth{3$t#$kYU)(rj|+B*_K`0vN~n4nsC5@pfG|6ra1 zGs?nfn~U5Tnp|wqvkq*$0m~ZxfiL;_xkCW{8j2Umk{HIew+6)yW41aJ$p-o3HxgMt zKv@5mjWKoQ&nE#ARnXL>F%vB0e~>HnPi%rHWH$qS*5BKD4EdA<1lHPmd7iitSx=of zk4Q;CV5G}N(;6aO)@H6IQW6jtS+Bxh@SIv}>wQtK6p=a06_?n{Wr%c%TAe|pOs*K4 zv8^ff7nl-9LNKMUoG%8LolkQ8!q(iZ4Igkzy@s7V>zjgJL`tRxBkO-Wco=*_?1o`_ z@k3!EB~ycusdLY!00a{YR?d`YJgCFg%BBV*>#vW1lC#}3Bmx7B{w6>lqJ_1IJiezdq(xsy*fk>C& z%>Lw4GBsEvgfz$wlZ%@W346i6bBKiH^hg-jqi^q|x*g+sbQm!prfu|q==guD>}VfX z$dP-FARNcf9u-#E(f2BqIug_aLNyg}~w*9m8niQ(Fp zjWRrSO}=VCE=D|cQ9&#>pm#o_7_NQKD8uXjp56+)Pe;7|?gqi+olPr-YhN+S@OlM~ zL*}62^^_?`2xoJP;o7&0GTdeBx$=a&tWor5XA_L!+82v5yk3=ikU3kt7u#5$yt7%x zaP2!q8Sc`1?QFtbx|}{kIGbt=*S=1aU6rsEiXMSINKjyR8~Bw_y|#BZ^t5?6=2L9u z&)Tkbg?V%p@mZ+{g$9t%qpj9>12rfgcpr>-{k5@p4ko6d?Rm6a!|^X^FP(^uz5e#J zxnKis=7WtfYfF<2+p}S(brW1Zg~4{I;Vuu>^d#K&Y}l0zU!|!weByzlJ`xJsb8|<1Udu!=7%zTQ{gj-fhnY%O@2Zbvs9pZ=TR?HzE2! z0Lv-*RIrLZe$nt50{@6Vk`?@e)^2PaT!Bn2j<=tRuQCKr>ZYC_!TnPBM@jv5U?uSz zxm+^9I^RXjgXbTEAZ(;B&@SwzT$@=w|C%vt2EPJEL|R~8%AA!ELa>?+I!xU(5B8+o zLEy__>iW{L=km|Av(_u0=JONN$_Pak!N9{Q!S6vKJadfwb z)|#53Pe<4L?nD-7ky8)NdN)1{$lFNHdU;(~KjMmr`LsK=^aGGhk+eIRzKVQG zl5a-Zd!#`vNPCIH-u+Y^B5Rk=skNprKSH@1%BAqfROxabBI{PpiEPmB);(yaNG2Mz ze%PEy7Vsp`nR?(O%pqk3`b^zlz|BJP6(=EcUpNlMeG{}8X79NkB9q0wm0WP(Jv36q z9`Zoaeu#%ieUOw~Q($C+!Zl%cx0{7zgM8_Y={Z?YmbA8BqY`+SDad;DAKMYh;<1Eu zxf~cxq{~IONkpl)SGi<|T4` zLQbUJ*K2PA`3_0Dc|R2=QgXq8wN|b67o>-#cqG+I_u(i{izbo_4xIFg4An{ZV1FVd z7aTb0dTF0d*1N68A;|>?PIjN@4P-OX+NkSAEI$9kd!yO6i*JX)L+5S>rW~d&-hww_ z|82WqqROt>8K^{Rjj(HAx=f^GyI`cli-DiP9qjAy^Y-DnI%#{m_#1z3-2YaWotg*p z(cv-B>ax9~k_neYe&*P*;SE@|Cg?ke{Iz%B%ZB1%C6S+zv;O{J7myHVAoBmOhEPEN z68RZvcfx(c|KsdT;A^^`2Y%mskr32Q?7LdByd?I042sH=V#=oz3SCsOHt;i?aj?RKO;SkR|RvhL9zsf`27VKR$Zpx`5Ec<(eKlM zgxC~3e|(w|JqVtkkpb>k!Q}NrtNzcY7+zTL{EW2w9Vtnqy;R3y)LOywGt%$Z>}81b zJJdZJk%H%Eq`m!2)XGfkr@cYLCqxRKpOJo3=0eh>lYYtWeTWo1zmv2sOf0zzW*OKn zc>bO_&JrnjekZ9}+I_bgpaR%hOH*INmkOSrky)PP+yvw@B(q!{k9T@0>k~XbBQ0~6 z*8=i|k~!hLD(~U^6g)p8t%c7(M6aJ_w`R?{hhz$#pOcl#%rMB(^Npxi@cf*t^kp7{ zESlYmWD1_2lU+-LCFmZ^+HoNH1j+NW8crrqMt&HcG}o%x1$xH}iSZpgs8@n-%U=EZ zbnn(IW?;{dnEo)PLTs+w^mDaDtBe=Id02=oqfjOA^9%KxbkZfScg{6rno=Mk96UiM z;4)3gbLTFMPX1_+>p})Iau=)&Hq3n>b;|yRNMT80E2_JH#3c|1T7i2a{N|N1$n=*a zMvf?$A4)v7Kad=ex1<}9!YDaO>(UPoZULFk0JJVG`|*Avg>}qHYM#R@`hd)4DARLT z;xHnGb&QeL!p9*Z(;r7~E%@I>B8An6k#0k>HUu&dWx5S&G?7SQHDaW#>p4h$ZAnPl zBJ$%#fzqe28Zk0+-H#v#v9(1qbB&-&L<%bdBi*jGUkoI)7+QO!JZ^R>nZnAz$nh3@ zX{?(HPEua&!gDH$6jlaCj_z0vYBX-SQRe8@H*OLstPG6&c=v%HiTrrSS@c0lrm!+F zGP&C)Fv;9-Vr$7!pJRNkNMU7Qn{wTTo~1}AAV5Dcw!Q+91ECwvT`c^E#seTG810yXbzrP5U zU{Nwp6k1QDure^xx-4QRkcmiI7ypE3{FF>#W#HthIUNmhd2YiG2`d99m$m~xpJBkgszv?J19Z720JS@8Uf z^t(EL%7wcS-oc(@s;5DIf)N^AhO}9TqINQ{G4p` zbsvMQ^|(Hfg6HRC{3bsjl?SuNWjW*^CC~r=&j~6DIYF7XGK41m1`SBcAWeYLeCx2| z?4mirh3Yrx&bl0X0-CRON0=LRz8y4w0RH-4?Be2gFBH)C*Sug|knh6$_1R=xi1{gY zp_+J&O!)EM*6XNK1+f^h1TQpd(_*!S0{b=GZLtff$jJjQ^xh_HK*gSr$yjFKh5T>l zQ*FnM9~Mip3#m0PJ6_1KA!;mdn!Qoo&*(z-f<0BC124oJ47(84AoJ(Ij}7mRk>4%c zQqo)Gw`YnvcYqgS{)SzsDPBX_@TPY!WbgM?cDj(gS_&L-(zV9i54%t^yigwe*z)d$ z{1!K;LKpHITn_(Ish@cxcA*w{4Xo?t-=<$E zZ)r%*I@YKvk<288l^~$Pu^k|DD3SripW(``dc$n+EfRl!$Ej!k>tEp#G#zpO-)a>h zoEgkpxRbOOXo(i0NPEr^$BASXB9MOHg+plVxWj#0+&UteNeHC9@rppeLzJs6N3o-Rjmn~alTKyhy<-f%xtrmElraeU+#ec;67Iw76D*QN z_p@8R90wMustmI$pD#(IV3CXr_($SmeYvc*l>DDOe;UN4<`9184=3qi(fB zH;AM(Xp9W#S03^_3#{89vsu*{BvUYBM%t4WbS2W>X}5~raD)Ui=42U9^lVC|->bRk z*;GFTGv?&x5R9Z0X`gl{j7Y(Z8R>WaNC6`KHeD@GB=cR|tXR(Vo@w~ptyB^&rOer9 z(;h6EW@H-7SwZ^n3z)`D9PHU;8mXijhfFXHMh2v`-wHC7gA5pY4>uGuGK~lLd*?ok z7SQPMUcl!lEmv;Zop3?ROt8Jf=sZN)ThzwoObHgW%t*g~`eY%}@7{lxh!nKUNc*G@ zZxLxv>S)-9pk+q-ZP|a*|9z%PhWvq#z4s(SO5TwiuR-#Gz7O={l=o?>H+s zH;1=JHjWt-6B{!S##fqpN;9nVs^!XpQSVA6Dr+76_CZ%1l$NjcF6b(_8u-eyEGu-i zfR{@SN-Ho2H&Acu#SHOxlU`jx34yOpXJR0!UZjJ!Fe(r zb&`0VFhebKGS@9A{aNPe!_=-8k%E>vnY%U20f&8L`Q{~&f|lPRoBe0V%#!^ZA_Xlo z2ju}+XJ~4gYX^HPyzijc!MZZ|b2Ipp1hZH66e!_T(&$xVzJeC4!T}qddeY0~U@Bll zKX7n*Die@YED(F$z$ITbe@zf3%zvWD`76s{I-y9xAlZDX?7kRQXbZ&4npW95tTmB> zK{9gm+Mgie)v&AD=+(azc91Uks=&>MAvCeTc7~<}u21=kWC~WyWcsge@ja3LD~o3% z(%e`1Ps+Lj$S+W)|JXUNh!m`t%e?dkT55qURUpr;!ev&CtzgBRwC4{rT3cy&5u^>||oq-Q( zcOp_S4dtuqJEuY5sv`N_Ai0$P@0 zXZ;60Fy?`vWlo+rUDc3zpquIp&OJfPoGcsi6Of-PnT5B9Q)>k+GhdY%us49ExpoY= z#5=yKQDS1BUh+9$9;d7BG@PrL@8llmAYE`Y;V(U*i?&Qi zhCj@r79eb`V1jJwhOaCXV33RQXw+K41R2?B+c|JFy39@+J}ye6V1kV7{PpUuiR`>8 z-y9+Z6XfKUai9@hX6H5M?-41OAagYDD|q*kv!LJ?IAo!#zKx_y2?;%$2lH=VKLd@p zi{$*%gH`N`gDognnPe}gNrwM5vkc&9mRk6Qnx#mvperUge8Co|w>ij^^EZhUbj8R{ zYfJq~WT#JCEGAOW6(c(@n+Wbgm)Ut{Kp>HVt~mK+cW@O%zB)^!peyDsV2i_g9!4k4 z5!#sKUPaz@7cmJ5u`zLd+6+h>2Gwk7`Y65hcj{&Ii}pW)(6#Wbjeh9YN&P0B%MJ87ivL;;WO^VOk-s}`IjGhO=EunJ{f|2k8NT--mP`~Wm>(lMoj(f|XI*Be zU;1<)QZPS8c0T?^QzAPb>8aLM99zNsIQdJhp$2(;>mrgVm|upj;@A#Qk-i%hdZ>37 zx|F%ASm0I@0#4gK9PIi3+{3!08Ztq_$|R>dO)?^P&D?;yD_vRYU`;tAU9rg*zAF#9 zbw!4+>xUuDL6jC|+i}-*VMW$L zvD@*)mID2fQ5g6c7o5|gPu-yaW`lhgxRG+Erz$8RDcCNXdgG2i=>gD2B*z`zji=*K zrVGv~Hn05^$jpjlY}QUH#6+3q&M9)!3m71sj9m3I96HqdY3`iDj^#K(WZ3?{XAvnF zJnLup_krh#4Bz_Z9Fc;-bMjX_$EUY8{OIvfL<$D~zH>rghtn1pO|DoPt_O<==xWFh z8|iw2uGrKYcd*bwfHojGZp$gWaV{fWF)}t&^E8l&b3lu^o9hdbDd>ukkxK_a2~Q^@ zr}W-Sq@XKChJDxcK9OOoMymJ^?L*KNBg4ObZnQRhVU}YgQ_vMBf1CmNi{9Gsjn-5m z1zj=c1hrAy5Eva0tnR%wiDTZ~@M<_9ap=JA1DXzq=?k?=X~rtIw99DXi;EwYe($o6r3BLTy~nrqD|!%!u1~G zxGh?F{3*3W&=s2pbj8TXW3{#s z8TtJ(qqTyr7#VhJH-;2SX4u6NcoHHbT`@BJ(ku*C6&Zf2iy>3c6({fS{?;IGbjd+7 z1zj;u0Sg}92x){dCZ6KmFs22>F^v)jbZ-F%{~Hd#_p!_KR{4uGr$L0p7RTveMdgIm zJ2KvNe=#)`nyKe^Vckw`g5G-BWVy_y7nc|Uo0qodD00!m%m;}SY><&DRsY1W32Z{s zQnHQw+(Ak<$jI2Whv$RLoJhtF`x*DrRci$sWMotm8?2Bz8I`LI?5XLbV1tYd?;8Fm zk>TaXVntHPH1`(~?RwTBGNR=7p zWrJ-++fy93MF;FB>3U38j>kbTChbHCV4f-Fe36-wNm1cW{T@B}d#QC;=aYxvN@_I= zYq_jBN-rqe7}~a%z73HBg{NpKP?y%g*uZ7I{QbHEm&}Dt<=F1_bs$(>B{m{QA_*4E zg^`hOW}(s*8Ts@kZgZ<93+BSea4&o%lTL=`@V!B#U@nY|$bPH_krA01>>yGw7fzO% z3yw~g837MLBT_II=Ca%&^McjT2yT*bkkwbZ8|21=W%_j=Y$k=m| z(u(&U8Jv=33&vDXoCTfU-Glq0Xy9C@&gYYO6@&QVt>=lv4qS$Q-~+^CgL=Mj;5@@% zc!_uMsI0XM5gvJM^GL#(b{SskT|B(h4QRYBJ?!P-NrW>MGrY{Zctnw;?+6cn)Os-C zOwSB2_a5$B<0Rn`?z>78&XmpY@;dH3zm*$KWw(W4OLK&?qu^)#D@PjstCCarHv<1- zkoImk+cGgmW!UdOBAN*;q6@{AWpX-{ur=fNLc>*gJ8aqSMI?vvzW>-*JPUwetFXAO zuNQ&Wtt0yn=0_K|pNgca|1WM;0k`fH$^0IHEK(pNQhbUN z88LE#A(I)SM1Hn2+#u(?#61T!w#*LSB6SmF3j_lCR*rJBi<@U}2iH@j{KYlvH=^qa zx?=7xrTyj&FxcPVh^Mr?JlsJ_x?*JP$&IkI*dWCNT^-Dal?v4dL0627>b2nrkx^aa zRaAgBDd>uk;bYrDA9b1GL%;ALnS!nu8Ikn;BO)UbE>|Q{&=n`Aj2LH-BXi@{ZbrId z3j~(tO2O!)IoyS-3&c?4$z#o+9+x;E2_G;o&snwR*JHlo@a@l_!5*lXupNb4yY4Ga z&TbDNW8Y|0Xvv2YAuYUvbHIj=b{-lBhBnA6pWXi;g(*T030qifO$vlTl z$^IA__rZs0ATuwLaUK=MQfmeKV`S9IR}e$%WYm(W7l{;!i4^RQlSj(h4RU`_G?D+4uZVG)$KtU=e}L;jl@WB+znY4yGtd>A z2`OVdfz);)netKiJx5Clz{jU2$@E{4j%DS!M!}g07gafZ1xr4be34 z718joN&f46UaR3N+I1f^s8_#uRJ61$gU#ut;tOV9i%)I(8QS~+glY@Cw-<&#QpI>S zceATvd`|q$&-k$$KOW-8HTdw#j~^cR(FQ*nFk9>S%`v$4OT6~tsGxo>yP}{=XCXk< z-}V!9VK$aly&zVUdd9kw`dz{k2-9+)$kgpau`H%Y)}6POR%c_!*V{G_AZW0rjj!`r zJ_jk8H?rE5wQiMtMP?!e^JZj=ma%7vY|*SD z?u@B^3g*qo;09IK6B%6l-$z6W=FQ0hhrvem)&}P(xrj)?yx&i)or4{8ZWu&BRv0#T zpZAFwSX0hO!D@}uAHJkCo03rM5Rf|%Pl=wB-GNKGVpBB4Z%Zf$o`7UX$?%Uzu%IhO zw(>X!M@+0xTmbSvuRKHwx?*IDhErM**`nH|zljud#mL}lm7u@6%wXS<79s^*aWea0 z2(lcc+u0w86m-R05r!>gppR*;g)QkE{B9nX*w1ZOu-5>@)#}Z z^QDso&FY2-DAuziAJ>x@swF#taRX#uGma!(_w8d5Dar4bk(xF z3N*3zg02`DYP}5}$_m~V$ft)pQ5_R?rnATUEb#p2$`ej(kNj z1zmBn&kGW-r zma^^qa2RDZEym>8^B*)GqZqDU7R4OLU+=|_$M~TNjXv;`R~Gzeiytb7R?E^*{7)5l z?#G|Dz8gTrRmxoh{6`klazvBHpTHlf0E*d%<1_>Q<|KZ6j~`F*LzSmhz@X-1d-#7| zP4FWLKYG6_E9!@zgGpBS%|4h$C|S&+n5@(IYix9Z=lF3OKD_+#L#>w`@uwjC7=a%N z@5&0loToO)>hv-MR}dwO*&vg327ir#eSv@Q<4^eT3dD~b_@PX{IsSyh-`ZA^doSAF4D}1%C2U{v`~53dRprob3OetlK{S8M2;M ziNQ;NsqhU&ChI)@`Y?X{iywc(hgUWHP+m~g(?ak+N8`r;UDkW$nt^b6O}U}azwsSO z`s+GF&y>doE8&tCbCL_n54{4-zK>?MAb0*PL}oBe3T$!W5%sTN8mW@|h>8)=P+c&y zQXUsGzYw0LVLGJ9@Wa2L$R}W2uvrH$XL=fh4f6tbnXEZqH14Q0Gv;NR zYrq^*%!}m#>Nm15yrlj-XJyXer561SqwR@wc!^yV@YmqiT*%X6`hdsKtZF@u>Fr*b zNa3B`%+;s51wwX=>kU57x|wp`C{vgSjO;%wYb}te2Dbm8MeRtY@Lp*~rtDi73*z>m z%#=NQOE^fryl}f4K@cL*Hx5fbJdBcsmD$xUR`$-Zes3iFPU;rA{T zB{KZaOsd#~BP7f_Mn%f7Eh!w?-&{POWhAa zE2=mYcWOQ^A4;b1PGA-zHdPa#v(uQz>>UKI-LeP=d(8Ht^XO9AG4(gu@&D@w3zeg0 zPOiq~98k^H$r@*RttQg#l^JOty9g2howScgfKr;?{7mUTvz*EF4?Gw|q<^J9XBecn znM{ALvCtP?rhm>=9Sk!4r+_n=_V&%d{2i?go>bl-^&BjN5wceegemVJy%W{4jz*P9 zKdze*xzPWjLC)HF-H`dCSwHO^t1U3dRvo$;q^VZ?ix0m}qsW~9A!*`-9TB14f1o-)-G6P*igXq2Ob9b%#5^8Zh4Dj+DE^_oI*LKZsBI6 zf8%VoiS(~M5`z$(+-FAGe>`%INc*nK8;KmIFU%Q?kbUvf{suWOp9)IRhKB7mlj)!J zuf9b3yA`NTGLx#Bk@lCj{~^-;=nsD)hc`7P4%MPhk{MZP z<<>($hGCReY3VFOE3=xJk=~1IE+?7ZbKAWknX}V>&j^c$yn82uJiWEv-N&>ha?VXt znahS6tAqEVajHs$BQ*Dj8R0C282a>HQC8J$Q0DwaW~BdA zFJpfCkK1g7=L<~r>0fAb8nxCxPrY{3+E4Yj3uWYQgC{^5u8*yMqa7WH{4CY9wNW>n z>t|=1VF?SrFe59D^xFzDVa3<9io@$~Aeo)C*>$?});W zfUJfxeTUR|MC6itX5@$C0zSlsBKhISj%$eg+slmf`EFVlYOT-K!Z(ThLVsa=1~yb- zY4)ZdE(v8;SorT2BJZ1O#s1wYC==)-WZ(Me9Fc#U&K2MGO>vVCd@hVo>l}t9JTQ$g zyc5f&kxcI%Q!F;|}cY^G29<`XZ8w11`E$)n=i=Y>qk2?LD`z&>(?VSO)zRdATPAQpS@ zI~l%VfL(cyqjC5$en3qBp1tA*`ZgXAGqh>1ghA>pj;ticSHSn);uv108kBDI!gP3% zAgnyAk{YYmvcsFtRarqd6G)cfwy?hKXFzS^TlI7ICzA+gRW64A^Dds6IT#OND@$Db z>b{DSv7pCFT?~KqF5drRD!2FX>Rk-~SI6;>?yFH(J&0>ms~9vP zA6_Fa@Cp>|^lPyCmGc?}E$=oV>ii0*H|TiO(Iq_zXGJWA+up^)ACK-!c=*lK?+9m= zEQV)#7mv8H){q`?zP5@jar{_0i{T#c;cvc!vC|tL@hGeUNoO@JhG%&fk2|;hH4Hx# z@nGnVmz+U3D{L`5tB&gikMlj~z3SGySX-2~&+W!h)NQ>XgmJsP*xBe`HG_P(|T6WDKOT~X~kml8`?$u$wI9eO! zxxygLt6RbE=%Vb{N>NyH4FiM~HnCq&*t4Q}v31hFl8=gykaVHCHD)cwN4m_9Evmq)NYflR;KCo9i3~WMXC94^3)QWd4Lgan zhnL7qqzl!pe=6f@p<3(nXn|T4v9%HA)vcA2mJ%75TBo!j^NQID74TZcyGmxj;|ee< z^;zaZb*s|p?+uw{wis)Ld37t$a$*RP0k4YJAenLI)va~gjj;__F+o)hafIT`t6PhE z)Fheq`IobiOc$zK?SI-&q<^d7J_c!C-8vTzN9-Kdce0V%^2XM>P~F;iYl}gy2^~c; zU8rsq2`Npaf4+@ySb)rHv8 zF|(_WZcZ{sn8u#|iEAKIc96Xi4I6Tyy0!l!tW4-WVb?d~Nu~?cttQuDPufA&T@X#A z3)QXB>whIOFzJJ1M7mJjDwcD)K^Exo3z05Vw+_S_zAs=;BUML1t+-I#>f0LDT)m%A zi)%tMC%rNACV`Lk`WWP&hYcGtuWnV=GR-l_e`3Q)rVG`r&6_}%dTRq#4IgKa=GCo$ zjj;3V=%;s0m8andnOC<0J;IDtFyPG~Rp&&~yt);bb2&uV4w;_rcpO7THRjc=z|33H z4AK%GXOQOAt=Ic-Pe56Gl_xiTC(?!L)~@M~iLAVRMHeDnsBUc>vH{3&FeI(gx;_(# zG_P(|eEw?*AcK&s_;})FB4?ZG(|f~}L)2RDuYSI2kj2dG)_ZVnY^@q0?~lsoBhrPs z*oKD2n(e*jzA?5g)WxQLUYKP1PON;KWV%on+nRt?cD=P5!&DswtZMEcLa zb%|uUP#5#wTF)TMB^axq3w5#Ro_P(j%TZ&^cA+jdV5Z^w{QIP}q1L)k7n}4W9MZ6S zs%$9bk3mGbP!}t4XFj#or{Kp^iFBbZR-@!vARD1f?<&?;M7mHH`()oufEplKKIz$c zB3-D9UFcAhS{wLFj#5OrP#2q6`2>)#vk6t7aajrx=|Wv>h6mOgp?U~)u_-y86X`-- z?AVGf)LNfI9?OYzp)R)OKIALfaFki$%PYBvbfGSGBB?UTwEy&ZHzHlAi$(d31rkMS zzTu7U5a~i)EV&gF5FGO}$S9lC?={H#{{Io_LS5{U z+bn~;J6#Z@iTX`ChsfT$JvltCHP&~sAs8N0AD5XzjbW%+dF`$8oKs|K@td8XC}>48wQxn; z&`=~RjR|DRiP4_`v=7OYW3x9qNZw(AjEiUx1+Dc$GOp8Y+#XdjSuIQ;qaMG4&3T=S zx?cm2k}8sw!2~kmgS%f58R5C42a&7-CXijV9az0mt&Moy87x?r$%5X`(pj^5U%_2ZLHz4@&R563F4Cn01+$&G)BUZ@lr+#R^4ml zw2!!U*WrAjt$@;1@Dn_mkddyK;HW=GLitT6qteE|AX3m3BO}}=R3|e0Kdm&8g049E zB9EQOi2HXs6DjD5kzI4;hH0m_wrl36=&V#f1zq9OB-DA=^5h4ccN^1r*D{WW>9p@T zpnD9g57Nv~L*BwUmLMOOMfVY)^FsG*axT-yWj=1 zN_T;D!@U7mdw1gUph$Bskg3j3ouQQUtCriJsZIHz) z2N5aQBqz({IAD+^>QyFEut|2J^L^7uDAf`!1rrj!vTfW-mooPsTIr}aU>dNh!dI4a z%736y38ulO6qrL>K*}NLHmWvS-3Z@5_&&9f9g%7pk;Qy z5T0v-3`m76FbT~?!3&QKn#coUHTDHG`~K8>3IvPr>jwS%1m^gRK4c zGa?1U<79)4-3_wNN9BnW43CrbR}M4C+S7uG6bz5Km-iK%`~(6F{pn9yQU~R!GEgwL z{@S?J#4!65yLW92j> zU2(EH?!!1_+LzoVQqa{~R6b zA6VcV^puCA@4|4y+60mR%@ZYD_5;C{CsH#F^AE!2R$aKLE#LdhB6;)d?B;zJ#YfY^cY>UZ^_MQda zLnoul{Dk{$s-Nb5AfjPTSO|17qSmS;A_d!GGP_pIo`=Y;zWe4ADcBY#TeXHg1YKs= zpvYt*1>4HV4}?!DcMmQF?h_O|B2vXV87P<;cxsdDw?M%jNT$}BxtRnZWg99w+%J2i}+$(IPDf;vC2FIE>fL+W1y!j~{ z2Ko?=cFN11GhKE7En=6?gQFZv5o{4rC>}fhn`;iBceB=DA5eS+`-onF1!hGG_QA}1 zyhm~LR6ij(Ui-0&F`1#w#zMKxx)I6HnirQ7 zY3=|*hFylNNGC%Qt}7RbBP19Vli6y>&rp!m$yN!r!z5EMDo%!nH#f*ur@kaoFsh6k zK#MNnL2#)h*zp$aJr~lY%=3)Yhy<9yZds5_?GU|}NI}8M0i1W5WSemjlR+>P%0X8j zdwoT?per_|LaU4$2;>GNLw(v8BvQ~7BSYezfv3~Sknq!Zs!G|1peshU>RummZJlft z@fx@J6e;M6lg$S{G01w$)Y5|XA?S)_3*cJ+m!}J)6FC@97ibxilsI@$gM|3R0lfzG zgfg@=nUt1(cWP;T4!=1t%#aMgT+CWVKP=-?f%B^k=fLk_wxfkFDSi(J434L}kU^wQ zE$;_*l?}<%k54O?gQQ?rY+8&j9GVp%%p$b$xhlmuWJ-NyWZaJYBcQbgRx&;jW6veDrvlZydH|U&J?BDeA)^JmygVDTJk?qk z{KlB^p+rWHD2``x6e-vuYi-25<9`qtF*6y9Wr`GRk&#`eY^_9O*YTfBBvPEJp3^5Dn>ZBWnTN&w!&BW-z1D_EY-S;uBD;epEkr9(u{6b{Jm~t5XXQV4eb{$i6 zH<4Y3d%%*dlY*`|IqRC$ASc~4W{{w(|G(e(@cmMS5pcZyh;L~oDHUN+#cPIBPve6= zcnT^yj(Qs3u(;kcS6oNX?GZ58R;+kxL4QOI!69qrn(H{TIu%QSZ#tt!U10dhK$t;(*8 zCeqw>wCG+kiO3ewbBhpZ?mB`a7WN=AxN`|873!@O%#rmo*uTXKgY=$1nMlDLGjbh4 zH$K?}mx3;Uf`9)UOOF{Tn9YgQpSzC&1*>{?>i3l~V#-Lt$}aUo_bTKFY0+*62%dz3 zL+a13MYy0VCb(6}xq(1VL$a0EDo-K>T`{snM0gC5E!wUznk?vwk-_aPSBVS`o{t%a z>a3tEPL@xGg-~y8aEUyNl=e>k-B zlxl43-)a_TkeIO<)h$ylOgYLR+07D!H{dFnf;BQSdf5VStvVT!5TTaEAMrK{O0R<)K9@0Gx8kaKmWE0 zE~O4dg#R?>7G27PpyThSz41^7hfTVcD_$u*fBA=|9YfS!u+IAb%hs7lx-GF7R{jtu^`v~QY{0Znh?H*8bapd&<2+c(Z0k{G^4CxBY?R*G6J|13*BuJUgS9G> zt7|6hC(@!nY%PPno*ZQ<{*@537A!p zWO}B59mrTa|ej^R_~=Tj0e;L}pL_Movchl-UAV zfj-N8NptjAQ@SF#-~K)Hnn*BC+)XDKNFF( zk2s^E0&HzweZM;cpHShnPkSJtuW)qy*nn;%Gv5-k5sEBSJsJ90AIZo9bq^Am-_#E+ zU3{Z5c$0icF8%y(6?kB4h46t{g7?YWP$9KI>;(SySVB>f>2=YpwWG(xqaW&x>8{zMA{F(?1*~(osgqU~H2*EP&KZ53rI#UsWZtX!V@VW4i>N<(W%x3rM3)UAu{Mv0Gn;;oKG`A|Q;MkVPV$x4-=)<33W-Ax34ZU|p z75tDa{f`;h?$?rEf!%@yYFfKrT4Etsd9d<+X5`RLVDOqP63L_8HPBBNsuMXb`TYw0j7KuZg&Bs|tZLd% z%iToqdzs*DE?DoK+h0>_tNmft+QDZ_jDitT5ys$C7rrM_h?SWQ^|uc20&*V8OniN> zBa!BLP486)&H*_N$==K7EFn^em6^;w-yVialWhW$eYUjjL!=NZb29B|ERf?BdFk+a zB86C)k=lvg&w;Flq;_ooVIq4iGaFm&x3QlZ{r*6 z{C57|2DxKf1tR;;H6^#)3oyvdP2Gqb@YIa--g5SLu)7c(An%Re6d-bNXEU<8 zzmTl|XPFyB4*kK5?A<>5Cm{0>lD*q{`4Ks`zZqHS&NhgL)XNmLO1CcbBJ#@}W~5KC zk#Nk((gkJu6j^?e$knUN$TlwqK>^MB8p$@#B2$U{!_*Q&mj+fLGBh=`KaqD#SKiQB zZv6~$Myb^fa%6??%vu}T{2ExF-rCS+mU2XT4>lvMg`@g{4RyeNS_>ZiiO90I(5z_Ib>;Z#OJS%0tq2HB!{yr9UxLj4jEb2{;3@l zToTE$l{OeoLP!o7nY=y|l%#E7Sdbik73xbewe*uiMy{@k@5i=6zyiskZ{!Igh2)Tt z-km>ybApzkNP4%K(AXf;PYxOB)1h1*AO|7o(=rNgxlvz(~MbB$Msa^Wpv{pzCog`FWvu_8o63WyLf8NDdk4Q{rqnkf~;wPod#>B0!Ns za>z*gr&VEA>$A*0tD2D#2+1KMhxIA(6k7WP`#CH|&_kdfV*Z72d`t4c848r@q% ztre0(Mn)EGfn&?r&~$sr@{NsmrKKVh+f&S~^LI1`Z;}_urBmWd5-B8yjPyQ?@7vRp zeeYeLwjokT4jDN*xz`|QEzB244hO7WL8OozI!X6)$3Mvmc_Ah+?&l5$d`YB`96CuY zDWt}JkeMH4CN;U<>{tWaO?|eaip|Ru9Qx)goreAtU1lB*Q$h!T5sj>wVcQIb`I} zJ2Pql`5%%)uU?o#tre0(Mz%X;eF1j68Oe5s|5Sx{T#VCp2x_+$I4-6l^YxU{nI@pQ^@lenfPMWd?4qd%)~$aj7ciwd5rA6 zBvS1}y^Zuen9U_H1kCF9n{rxeJcaf}r zb(pcB33(nPd$%4~2*`s-_HNqvJjoRDJVsW!`SC*_As>N9;QS6@kz?T&@;pZR6zcH+ z$j(UmEO9s*qPkKlx-bSGRKm zC0J`9xw`d;NFs&glabzo!!Y@TR0n*)fNYvUrk{K=(r0kv?|{?;>i#cqcV6{VNIp3^ z@Mtz5XQND?0k%*gh2)cw_L^HDQL)TH(q5xrb|PKanJl;wmwI<3&lKp3C&pB3h2+yI z(~@W8MF>i4u(Jfo=O>SQ6DcI0PEs4V_Q*ESN?w#Xa8>?h2AO{H$;kMDH{fg=KCBx8 zumSc?L<-5LleE+sF+CrU{s3C)3~Tv4kwWt6BsJ~w;Z8te+Nx=n`nNF1^pj5~X$krM zKsg{=q0EqdWj-cSNIspUR=#n2ScUY*CzY?aFTo(q_P{KbjtRek%poY#()RErB8B9W z$*dmH5A><8Vbwc#97m*(d@{0I;~_IapXlziZVi7*BT`5{8R_G<9M)-lmihSR$5laD zpOAbq(!Ofv3?S7kvw!JzgGeFyWaO|B*CDp}MUda@aPeyj@`1@ZlwsTcK zJG4DQq>y|vGBWT?caT{L$w>ddaNkYI6p~Ly+GjR}RN3+olJ@B%@sywjCd z0i;S+DqOeWTCGSS`DA2d<y|va_QFUUBH_ZKyvBk{3;67&QQj3j{(sA z-0d3ki4>AgC#fa%iC6?O3!==V9-mhrQb;}-xvTkqNUA;RUCn}f5$VFt2*^;5`LnM})b3q*>UzDJpsr+xpR)(RObBL_b@FdarnMHqu01n(eH z$XFTKzrh^AZrI8Cm`8-Un65|g^ZPveJ=Rpx-tpLKBopW zBAG(Q%E?y`?i=Lu)QUt387m{TYmNMXtbsDMv=Mkum$C#QW98(%tyc{4Zk=!&ZKlOVcqkVlUjtG$r1a`NEmM1wp~;9HU@WUP$zJ~|X5#@0AM z-al2@PNa~rGP3@&pJo9G)fUKDpMHpENYvO087m`u_t>)%$iqnX?sn%UkwV7G$VyL6 z?*y_xl9e7;hf;|yQ^;5u=~LlyQy{~U^eOL0Gdo$xSQ#1Wd2Te!Y* zSUI_N@=YT-|5uwB@h-2T}E==j%2CU1Gr-yqXZ4w=l=!9&0tt<{iR-RSjd zB8B9Tk=}jNf}yoZNP5Rtz&#UX8kY2vLq_@}{BZ(ET&6Ui9u=ks zWS?usf+{43Os2hBW7rqc(@J|_*~NxT^PS0Dl^}%FAIo#b^E)GH5|TrwOiP{-t6^cY zeG84XI|A+8%R60woc#4zmZHKIdqbmcHwL(AR$PCuXDK<7-ag%p_8

    }d`Qn+-Gr z$>F!^$b=dpAvtuCTKSp}9|NT9wtVHhWk{wAJCm&}w?O7#lxYbnkef&$Ib<@cx37qH z`zLm@dPuw{kwS9F$Zqw2fwF{EEm7TS&+R~@kQ_47$Ga7jDD_$9Q@;5YB8B9Tk@gjJ zmI0||nSH5OB9TIJ$jD(so85=jKEr+v8(6IgkwS9F$ZqXs&4#g6C75ol4~-*INDdhp z={M+ekXaFBMwV}ABojh%$VmH?EGMC#{gJef+U-R$h2)Tt6|P_*MSq%fh4X`rGMK()3^PIrshm0Kh z-!qui`jcUY{xiBUkwS9F$aa^u!49l-E6Qwl{zu&AQ~DH=Lq-mb`y>@w3ujj#IgD8M z3z0%{$jFYRXBU9h=0UP!@qzI~3dtcB%!^DLh?VUeh~&7wC=Hqn5kCC<`wl$6rJ5|{ zc}%e7aSAj!(>^3Ef3GP)q>$$^a`4?Ncc8N>SQvcmicyCV@;pZN&;KwP$oVL zh!pZXMrs$2fitpIN158`pN-{L$n!XPtE{g!-2s&soRMW0Vt4XK(Vor-7R=-mOR>z+l-kG!}j3IV9m{^p{AwP&v#!Wg*Nj+a)A(Pf#!UQ8ESZ z&SbhjZ~PaKYAteqoXwwFD|mNKzWDE1``Dh5NU^egwK;D}G+SEzGyR-Vj`wDJ?)@xgfm&#S|!xwZZ(>zV{%oMO46s#gE z_<0+Vf`W1NcLZI^By*3gP!j}0RR?r6;yXXW1zoXO=YGFRaUj)ED)(DoWBQ}UP0$r5 zpM}f-G7@FF|GlI)k%F!`dHxkvdE*p$vKAILGSU?%Z?3Fn$h=bBn@B-d%tv^DQ-Laj zmIkL6qTydWU7&xZdwLNNkc6KnI%K-yH&!;<1g*V-WbQ9o z=AzaLw#a3EFcuO%J*DyR48?d-^;57#PUg=A>y?Adbu^Sn!4?_m{^I;xAbVkJ-JjG| zz6wXk+;4bzz8qu7bgz+2v|fM5^~x|)-BFX4i&*i7_r_reIiHMPPe)78q0S{8K0{6;1S+RA{y zH1HdUL#G{I>G}jjcYNbi6imS>Aol{whM)D@L|uwG5~DC1*oa`RzNhEm znEmRS?8ZbFf}Tsj?=<)s)7_%~fSEEqJKo&& z76ZYZTS*6_zunppW-)}l7XnvJiu(>+<^cq&4&9H1_@Zwz@HhDTf1PqCjtlx8NM%$L z$Bdukz+G@1)mPL5*I`isOZ6|V^&`RNuA_R#e_=tgs70`P+wJX%6wHxLk|3@a2-_>ro4np?N_?$VaGEQ z8R?462{0pAj@*hP2|r_XN|DT@_=#6WPE7jcAAr(9503s<%euCsI)GJF!X$7~C}1VwEEA$13V!QVG4f_k+{2+&^$-UK<9# z)0jn0Ou3D&{0e+)6G!z{Ng4PTu2Scl0gG96+kGr}c_0&0}1- zSRRywTfN1s%vb$<>0@YO8n$!dfe!KNH|hAu_g+@z)}=!h=wJwfZXLBsc-@LPsOfL) zv!TA~vv(`3MG(u0|hS!)q zdIDjy-dbUslaXH($P^7SOC$M3p1XyK6ubl@C!XGR6(Ic9CY~6P!$ESBddno8N|_r} z1`=!!mGRDP@Yx)aDePu2nQqVX!RT0nQKsADoqLEJxkp_cmsUY$-dl-DkOl37KhW~t zD71)3p`Og5x%W+@-Ri0!z9nADt>yMBbSc3!nA^BoUh4v;0aYXzw-OirB2q97M%td- ziUw&a(6`;!o)RgT1|#!6X#F`1_8XL$_fHR;smhQA(_rKmxw=dTnQ+1YOe5>kZ-^93 z1E+Vf3QWtjcCH1%D(#(H`E^gi1uZkdZV&Q9fMIQcg57S1G4hZbq>;n$)30F2^dS;Z6x#7+}@UC z3LycP`KW#kAcrZL4@zGmQV0n+dG>lXgFJJg8j(Usz{xX978>N~#X&?0Aps|^U;WJ> zul_!sNFgL(4(5FYPpthTTxuJ3Joo5|ztg46OHJ8wu7@g_+lNSI^US%GNI}8MF55co zBX8AC6F@Ln7wF3OIzA9l*@vJjHt{^}Eol$rP$WHWp8SGHL06nS{bPhd9?N7QQqUDA zPfojUkcWN#BvQ~7Cx1T-uF28b3q^k;QqUE16Ig000)0$#l&DSIL?Mc79QkFN?gM%> z>e)T6&$}Vbd)}gpQ!AEEe_sQUH{n~egkBY6m>epp%xQq`1yAH!rD>V5B<5c5Sln~$ zriz!+f5;0nW^1qYHt@h|x?AJ7ZzEDTO3BG9n5tNhV`HtCKR8CDaA?m-+ImEt21D=| z1fZ=)WHCI5q*^N+@^X@zwq;3vfWAPP+NR5DLB@Uxhk`gcrHB>gOF2bO8hwFe3iE}L z0maJ}gBOd!Jk_*-qRp}Lrdlg3tBkZ-zJUt5TO%Z`TD}8B3de~UnYryE$dNpvkj&iX zs&e1hPvKAyBdsk9LM_(@It7_62H;&ss_EkCQ_JojI{iFGYw=m zMAGtX$xR}KX~)RStyX|Rc|;CH8AOxL?1R*aS$XB`=^l!UFTT>zm$!R^Ycb zcjd6ks*C9a=B3nnTh15(%k2~^tX>{43h)%Av6WTWxf9eaOkd`=)~@ay3&WNdMXp^w z8SmOIhNN%Rq;N={kvBG7 z2eY=8L-NMP%*w2>wZh}OoTMfBezk%yLQv|~EXj9=W93=(Q;2Mxq}K0fy}=;!UzFMJ zP#)Z0SER>$HU4tuZwb3K4Dvx+HIx~4bG`~{v9-eSdZ$dQ+pJL!VQd3{w7N~(jmJHe z%*^Q@uXmD`YDIftG63ldoRlv(6_2$lQaE1ENZ+P4ksOYsZ{sLDgsVv5ki3($C2vWA zB`4D&AZ^JTTCOKjC`&j=?d!D{A<4282U7cb_0J`U6po!cNw-Y9Js!Z|V5aVtY3G(a zL<)z;oup;@>t@jaLENTUroTvTN2IWLI7w|&>bX5YRs>Spv~V*Vl+s5?SUeb+I_Yv1 zAnPHSIzHP{_$Hp{dL zUt9+tH$?d$=qMbZ*@_uNvF8SuMVYg^yX40)Ut7jmujy_&^|tUSt$ zY}^0gRUjuK*|y(nRoFrs63)jvTdNI^t_j6E{bsu1k)3Cf%uf!dFVnfR@%|z{G8G(z zhYi|bxjnegEV`7ih_m=OW}WIm zq_BuPNiFfpZiq{*|KX4&o-gqgk-{R*$Q$dAt_M=Z;5SyS_|PED?sT&x|M3Sbi5@es zwaHhm_a;(U#F@-~KLj5InXj?6{dRqhyWDDoghkv*TEedPT>xWS6=jB9?y-bOVG(zd zR<}uZ+{p0<(&{#<^&bYAzI$dEaFa5+cd8-?4P*7D8V8=^@npr z3X3=+Q%9#90a7hdsl%_$AyQbx898J{ln0CuI44+8KbvHPt->PiB(uGU|K@A3_+s!fm?_a7I8*4%9jRiTYofCqa1tj#DlVUVG(EK{)n}sKxPq?xxYiv+e8YB zI3p)4^nh8Wmx(6KsbI`(VG(zdwrxL7gatLzH4tgrw)936o5GgF;j0}IEeE`d1Atb|Zk2IElVG(EKpp<{sLPMJ&IcQ{UwH=0wo3Mzhq*Q-q zx>^ceCm`9j`^Anl zOu~B1$l(#0!4c{2WE$QvBA7^FJ!Z84Pr%TM(i{c$ktke!rMnMTnrZevYV81+Tiw zrQk$cey9Lw4Obvd>$&q5k#)+O$i`eu*t z(zI#gAsKYEwtW!XjH36mp=p4tEyw}kn?q)o0|$w0oNU_K$-!S5GTXiyNo3QmrsS+- zFGFU#J+R%Nx3*b*Q*!(^@ac|zw!Q!rQ=M#qC-9TC3=$S?`mAn-%(kEXN@UAYreq4< zPfjumbR)7=5mRzPW0?9xZdpNO8*_4Ee<&?E$hHX$iER6!smzJx4;o~`)Q`o!Y2FW~_aHFe}wAP!K=?_@laiy@< z>rw?WI9;Yt{C1LBZxpG2((`p9&tWfL{wA2C~1>VH*{G*yA^CI4bnsJ;kcO|a8 zx+S!`d4HR$au_-w()()f|Yqoy!1CdwCnv#>^akbZ5+o8a3 zL|)BmN~SFS){xn5Z4)A|KQtxhRENE1hs@4he2Elpn`eH=ZO#;k!Sv_)xJ6tx)@x7`3rRE z&}XUV7l;&YxaZ_#&&dWEdVMmHe$~>~inAozMeS>*s6Rs|k*UUr{|-Tl4igA|9^4D+ zvbs5%Ka$Npe#|*�s1|_T(~mh_s}?E5I_y#`D_F0P-^=8_&q48D#o~%*a`Ly?%w( zmPc~dj#$__ceFPBliQ5!lOyar7!@9c(E4O)3TJv8_}~B_p^%|z%|C5mxKZ;mY)IO#yMU|@pcZnW z-b9jVT84!k>RT&;guo1gojo2z3Ok}~go1rL^Alpr{{?@Ev9M_cP7BN+SJZc z#C5mzM4A>;txXzL{SHVd*l5-!bxQ3eQaDk@S{qTR#wLKEFa?hiEWN~V5~jsetzy+L z`h(prMzW&);%t)nK`t{JvNa6Y1~S_rX{)`k50U0aTLx6JJp~4W2TdDLGI|t|riC!e zwAh+`V6H%sL9(w1UxT4gZBz5}s|RySrGRTw$|Hwb2E}@ zUcha%bHI-#BBy;mKepPi7LTVrY< zk>&;5_{yRCptWEP@K7wDU!nA?dlT~lZrIr@4?$)TB*RXWO(oL2fa^VHM^_lzAxL^p znP?-jY-cm;OPW_I4J;uml1bCQ+(D#i8CHuN_7N0s^b&Vu;>xTyIoaj|SkN4;Z9e-8B84g-Cp&zbYRC-fU!6#y3dqUU z_&^GW%w}I3^+TZw_!e35o*}c@uSP{qr~+~_xGyYb4w;Q#7$YQ90Xf-fo}W`@SZV5~ zPzB^mO>SflbynY46==1XKJlb1>|JA zBCz-1Xl=^^6^In7fShcTxfzi9EDOR{uITy{s(_qqeFi9p%;udvi4>}UoNRM*nUj2Z zj7Xsh$jN5+(+slVK*P}sRX|R*X$>_lvV{6xBvYsYa~KX1^wt@ zdCF&#g(@H;wb1$pj1dZc_BqKEs(_sA^ae)9VMA?N-yu?{0&=o_Ph87%KNQ^e29ZJ) zkdtjMKse=?pDorbAX2CTawWUKaY4A{}n zpzTrATA>Qa$#zzYA+zPMUx*Z{fSm07eS|@>`6*NZIT@V$d!w~Yvuq-nLKTpc&2!?4 z6p41LHG0{JNTCYINr+^CY_G_mDwT*7s(_pf+8%ARw&7M|goG*}Bg;Sa!AeyNlv)1% z^NJ)>r~)!lYyD&&koxM-eAuT%3ROT(wp;=S6dh#KYK@2#s(_qqakPxl&&C~$8njRa z2D;Agd^HW(?jitVkhI;^fxN zSi;uH4G*Cvp_4+Q#L4-wZ4Gi(0G|tiN}QZJw7x-3*bq#lkSK9-_JIoqIeGL`B85bWlVk7* zrK7bUr@>OFw^m4$IGNHJr}EDI`jqobqalL5@EP$+j+2NR&7^{qOw-Il2CM zB85bWlXET~G05rb*AOWrN}QbU>$HSfbIuYeBuboI+4?V#sn4=ymRUp!i4rFlP8b7Z zWi`v@9yeMmBuboI(rc_iF7$>_RUca+QR3v}iNlT7j{5;$BBExQkSK9-#(_nK%qjoJ z*;#-|bu52-&J41+yRXkK?y$HM++7zB&O&evPVfYGcXxO90Kp-Uph1EpK!C5hd#a|` zGj;htU!LcZd++d8_36`6Rln|;7-2{Xi4rICw-`=jt_-)46cQy)&U&K~2-8Eq484n_ zkSK9-ZkXyJGj6AEJc6Wz>_4r&D3qo?!w?d-C$(2bU zeDjb?8vl)?kSKAoXW7Freqg@9=Fol03M7Y&()&OH_5bUAA#QIavU0Ll^=05QLX%OM z4))*ko`~0akq_3uLg#?0= z!%C@D(~yHt{)42DKyY$a0oAvL{3SUE^Twx;KyY&Gpesa8$DTL>o9GhwrkweB;Mp6jRIXNXFCXr(cs;}wLi@p$^b8^UKRhu=f?R|DL zl0taS$sY^dBeHMW-AD@IIVXExEHZ}mhhL|SMhMS2Ip?72 zAv4RS>?w#oh47q{6Z@%=kVkKBqgwxhq!6BSa%#A$K^t<+KY>UJ;W;Ms zl0taS$r0OBm}7hna6Cg&2+uj0E$eM8Rf9IR|A`6kz-V!MU*_<4GC!EOs&M)Xw2(rH-Q>b*y zJm=uplr#xJHYcYRR3V2U$Nc=QAe)o@T}nkWBcbQ~$JkmS$mV394_Se1uE$W1y3|8L zkj=?aW#a+~Q3fQ3LsL1?rx0XwvU9BOfHb48?J3$ng&>=gV{>f-()7@UA=?IzOkX!ZsG(X$mV3!`Kd&99`YGU zA;{+Bl+6DTIdaw^B!wWGll_~95ZR;R3nYago0Ai?LTTR0h)^8yQjpEbVJnxA&%Wz_ z@c5L1Y)+Qxb{0spQWq&1g`^N!yY$Fjw@R7T zEqk{8A0>8gk=$J?6C}Q-mF}!L%&k7Et~;oT62nwcykJP%S49BK4o!1})W10anx6&E zv=3zWNNryHI;K{rg3-iM{x#dXWoOuj#y0}rvWgj0%K(>uunNFt_nKdFCe6E zogP@CZ0~5bp1^i}R3$_E4Q!oCh5Z^AzKVh6J3$jO)B!S?avU`Fb}A%=YxIl^^l$$o zl7X409wyTF8DK{GKOE!-WRUXdfB!O^Ec3M1_gQB~23))kL&kzh;&23B%PVQ)!Lx24k?ig3f`HF$jEP!pH@Tfn70!2z95|GHg84v;cC{} zpe2v?1F7Fi(83tYiTw0UpS`~{C!ak-;Z&{h>1yyzGUf#};*C#db`{j>5igu0XRQs+ zk-s~V!QmZM1x}N~IdVn@6sj;2$$$c#R5E5r-(Lj6$lx4DHUO#TXK?m{D)7>zZ~~o? zp}PYuBtv%xsBK7-u~UDmhuq1l_Qlq^6E|r>$4rd#VSd8{Oo!Y_j}GGN{4*GLAeT=p8t z#H+qF1Or;-hZkym1~h9p7s({kzeNVE>2eWBvly)yUI0nqdtq2>1AFCb1f&@WQ46*r zne69p`E-}ur0R91hl;j^A!f#q@SEbyXYkFS`bY*}tq3=z3@QAkI44g$rq%`@jdv7D z;SvNRLz22_#D^sKv=d3;5(Fok57>-76w)LGjdzVO6 zgA4pV2ub1k1S5mGjopJjgE~H-&_=jE!O0ufRL$4)(AAHt(WmhJH;fGKyHeF4G#T9M z=rtsT@4w+>z{Dj$>JcBDX;We(g^L%QETT_I>vbqNqQ)mAh07j{47!=1C;AM!dLS2) z!3VzeK7(e&9fHpp^mBZApTcDi?sM)f6_T62ofV&EnQ+;Ik-^zszCbcKEE}9bGBaEF z&K*w9YF2^BX`RE66t0OdGN|nhwVIgLw#xMzlEN>&GtxcakB>l_6|B#jTS(^kW?=1} z*tG_bxzzUS9vf8-N#SbB@9Ohn`h_J@NO1r8#j(l3y|1W~NP7DfzUPNEIe1Y!Rp2&* zcixX(krXbqFfycjnA!^ULLbuMA9Vsi`xJiTgOR}j8>#^58TP9wx-PWvTSGAHuYRgH zsaqTN^N+c7v3l7e)_$-$Xb z-x{*tb6Ru->57v-bW+3KkUi4T;1#4RPVOpylgMp;^RTsobj3)w-$AwIYoG2Id*Pm( zd7pxG#mLa(IjL+CdbnI(Bn9b;k?sU{)SWfsGtTo8ND9&wCo=}eAu>%jIEHRoD@a$I zjQ{38BK6T2O{JD+8%uh(iI~^cOTh}Wa#!^DG(E+D@MBGS5h0A=^?-J zsnMq(U2)P;14g?cL;tHqnTsG@F*0LHSXbj8USl?nkFq25Z^mo7?L)^A0St{9nh;t^oX z=*v2;I}|7lDM(k0jIq9d2_VxepD~6ctc4`If@7<1##mFe2QV2lGjur|l^9r}H2m>D znI&aIfyt@`Yv!xUn@N_0ULw36S}fPxp%cRHqa~O!l0?Wp}@}NkRVP~lqZ{`0BNkRT(WLWPRYJTg!4U2kA@$I+I7=|2QP9r|# zNb&9HQ;Rz|_}Z4YI&5%+FMnVeK?4wQwxN#84kat@rA}L6&jCA*`wE;1=AMbgFiCP{WLVl+unU@aC@l5e8t7AyTp8(Z zaz?FSCDiD1H#$`j$#0))v}={&72bfUgvwOR%kllOv+Y`?o)UV%$MUbBO6~f;$NVkR z0}LD(WBcXYSTQR12PU!h^Q$pMvYWYA1ld1!2C$9*mbO9)^ zVv_RMWI-QgWKfSSxq(cg8WGgKJgudIKFY|zr2eX)r^&#WgJ@m*=9k<%{BLi60c4=^ z>3`wjI%=(NeU$kOIGOSSkdPZdtg}A`?Tz35+0@|w)HfJgaNq`3;kUVykWb(GDDxST zB%Xz>4T;q?lt|xY97YB=$hrv0;3_{gC(^e*%E?(})w-s8D0ouL;YbSlC?kWiba{ki zP^$d2PdR<-qnvybd5_4)c`B37H9l8%uBLng|uOk_dwa7vADg4?I zBZIS)CYA2Gx zT?Svm=M?l&<}^sSFF zGAOddEhK~LMfo8q=%b8ueaTw_$kb{zajn|=6Owj))VoEv-rrZV1dhP~v+nIl+#(ob z+ag>y#w`IRt!55Spe=$iwk@Knutmgey9rF0EyB4pCN^2nWZA<8X8G#?kY=GzwRsYf zf+ovI{}g+mi#!W`f*9me&}11Im^mstka|f8Oj&XW`V=%-Muui=tb#1P(1)h%6dy@J zlVzm4Xqvj%T6eCD&yf@~Sw;pdX>uINfSJ2HBPnRIoNPEl9jMX^eL%I6lwb;)EF*&! zXIG(;S#+mAR_8JG0w`#*j0|kM^?M-ANN8TM1(Jd$%Sd;@GAbR`t#xM`^)HfwCdo?rePl7c47$=83zCGue%h{;S337RY;Ln;kb38wBL z`0qa>DQL2cbcalYP}`913`+u#6f{{z2A!}}+Hc|4&}11I-0jsJB!k;ID6|nYSx%;P>;}>VVu|Lf^U`{j37RY?bFCc< zqzO3P7ikj}G+9OlU5c-+qG_K&$9641pMoaK$q5JZ;&TQK|0OPxf+ow!pYyaJa&%={ zZv{=3k->qFRT;;Op_EH#+zOg3Cnud#tBE0pS1y9B6*O5!1~qNn8_A$rhch54XtIoS zNBvO=NV9@DD)M4y6?%gErg zueJke=1RiM5Qdn!A_%#R412KlFt#@A#_w(<1tFJ_;VF~G0#%~v3_-}{WXF`>k`UaMQ*;&Ay0wSk#We6%Nn3hK>}uE;Enkz zj#r|!Bk+7=StJDsn2|vxo<0OJP?13elTv|PkboKKUV7*Wka~W)=Z+YIJ_QMwk->Qy ztpw8KNMZ4>BPmG0j0`WD{SA=1Z^LsppjA_lfEgL~ww03aOq}qr3iYiZ0W&gmechx$ z!fFlQYq%`$uh?2a0%oN9%bNs1nmzknD}N*f37C^>vZ_^6Kc{)fdVl3}d_KcG)R0%l~${?o0nwIN&Y(P?5q0%l}zD|ZI;8QfsO zS@bDLz>EwUuJEyp5a|Y=Ix-Gf{$L&Y6eM6q1`X>0YpvM@gLU<6)1qqmu zVV`#>Iad1&d+YxeNkIZ;WO%W*KcUa?+~p|$6eM6qhP~InA!K~Mn2R}*BmpxrJnYVR zY;Abv9e;RQD@nkN3`-RG0?2A=428uih4RcGK>}u^yF&WHK9U1%H5Pw{Iiy;pVN z0b`E?e|KTnHiv%?f&Z9)e10uvD!i(ze`>UA*N*KYTST?*0%c!*d6w_^zw5o8$<-l! z_6~%$W>;Q9+7^DI`lm4PEX$?~R)e$bijIe6oVObA>Ix4_c~zIC0Oy_L#r+FK$K5TS zRR$d5F{ouUh^ezIg)_07;SmNm-KFNX{VH*-465#wRoM$(Qd-ya)YGsE2eY?Z+hZ>- zq(vH~SsHwJ_{sm-8U6>O<6+5Osi!f!NRAE*J-F}A2qtn@E5O9u|l`R|MZ zMi;X!{TEel_K$v7I?f+W_5rA0Zk!#h)%qI%8#%u#?J}3S;s4w^*XuFPr41HB!zVK zChc=`gIz@WJ_NwYJxR}iPaWY~y9TL40H(FR4*_s;OH;KE8=sqAO(oLzAplNpuDlgU z)3+Nhr9)CU1i;Ca{nit?{B2?)eIEkgyk2dcXjB_X>sT>WDc7WMe1Q41Zq|nJ zF`mN_nL{*y@G#|JohcT{g8 z?x?-eXhMp6^XH!M`rTh2>N#Q^MBdrya zU`O%v?ef5#NDBHtCwC^DNaXh6osbk%d`3FI@2n!SeyX+3_77(wDX932v}W8@@6)V( z(;KMDs_r2{#pmSJOK@Yr9O1Vv&uN0BpyG3K-N54XoNHq!EkXMfRD4dZc;A=E<>OSe zt4Tq{=j7H`r-vSJULB(gJ^?U6}Kte_ef8JdaiKL+7 zbMnX^&w(*3_2K%bkQ7vWPTr`t4oI_VUb~VUNkPTu*O)4Y>6`zwQw!%u{iA|0@-;boA;&bxW^_824u6`zy)dL1KjPung? z3MxJ$ooW1k1X9lxXR18Zw}Oh#$aKk)L2WBWNi{#yC7G{I6Y2LUoVQ}6wPTK2HO>6o zo|0BgLI3CEp(|79ISMysZv|8t)gu3aSZd|%4T1pS|pj(as#2H;sW zpB2Q`vdVy(ekQ+x8DPeK3Z9Z5m|=j4UFs?26ud-^T4R?z=B zdC3(3q@HEY3%zIs6ZC&h-fI+_eBOLWvrN$cIe9;QF(Pj*9*WN?=>MENG9j4A{RQ43 zDd_*4Jh%BYkOlRca4OkDBnADSlf9NSAhLVzSV#)`KPPW(k4vq+RxBTqg8t9R2fH5= zd8d+6c=S3X=>MF2UlEFgo{{io7xj>!|1;9%Or%y5$m(F#{M2F)`V{nkMmnD^fPVG( ze7JQEl7jxvNWXe169Q>+-a45n?qmADv?FcY0cwi_b|v7~f2IgSP}G@EYj0dtPhPFb z-NPnhYXx1LkrXVS3@r<;VR_p`qG*Qjs-Lz5*x;P`9b3dE|va>?S)}8=BCRQZQobT6>YUtOpaw7|>)3j7H~JJ5bw)b(CY%OjS>4** zQ4~`PiaH~$Q_t>`&yzhWpieYRM&PCG&dJq7RnBXkbLB_Mc?CtClXnKG+}@Bk7Usg|6clw% z9{Mp0%78j`|qMsjkr^#}Nb-4|xr z@b0+AbA43UKb?o3_oCMBFYpR|GM)G<(kl^rBt``^>7kUwM0x}-I5-FFCD;Fb&gkDg z_67=SA(M!$v$M-SpE(7NA<*x33Ia8*|nNGNW$ovO~$p zr*E~8w|095*xfw&?7Hc++gQHULQZZh{eXO~**b!J`c?}$xglKDW=-F&Nn098K`rFu zvhvM|TvV|rk-pVJPHx<&@}D%iht?LSEJpZBWlkO&oD4{l@gM5kj(qx73pu$tXc>^E z%CJoTc$;1k1+|cqsnhHRGD5dD+3=g_Q&0;z`C!0HAk9d))2}6xf?CMQ8~zX>dB`h$ zDgP1FLQd{nt139g=hhHX(Y}4z*gCU$9+4-iQp6&th1}=!Z6QEr);;v31MTF3TF6M} z(uOzDr*pv$$|$~l+1NS|_8v)V=RumEf?CLYTG!H4Ao5boO88d%e5-|=+&Ny6X7p`H zO`}gx3mNG+p9Si&W|lclr%Z!Bt!IeDwC%G>q)bX==QIkcb_GSW44&SFGa>cY^|UcGSXT)W-^dw^errK21!9JkG zIVX~WTF6LeyI^&~t*>gWv*j+T%?fHEBduSCyMQ!n-{j)7_6cesC!sb9BnARadEo7v%XQ9e}JS%l_%4Y?&kdr4< z2N1bGK8-#>E#%~hS5TohcOtAK+Z*C@3Th!IFJFLI$n!qWUZQa;sD+$7K3AQ&HqUwJ z(*pDD9+vILTXTFA-k zo4V3-Udj3kl7d>u$(>PZy)`|w=_FOh1htTn&ZJHE0jcMTGxld91+|co=@LCF0=q*A zHM7&j%WxQ5E2xExw6<1I@6*iB)uq2jQcw#yxqp_@{LFLiw$v9{=^aT>3pu%==4T*1 zQEFiriiQ-_LQX!MyMuh*^`7+-)Iv@!IFW_O={?lxd)-<=Eo7vtW_V2`U6rm-T}@C6 z8R_`vqsmuOs<+~J-AUca*FFWckdfAjs@2e^b)Z=yBn7pQlULeiC-Pj{4M+-VAt%pn z97*JfQBRN*)Ivr&Zr4lMJ_WUqlgHC4wb1z7_ma+f32GrHH}?)Ca`n%T(Wjsma&p_z zfkdu-b_+>CE#&0hUTOt1t=-acFp`2=$jKvx2NStF4aK*DTFA+xA9oSCuL|vDf?CMQ z6E&4qZCZOE;VEpbpcZoS+-1mB%q(-Bs@e}pK`rFu)rjB8=c&S!^9pJqC$FXQzRxp> zXbcHzAt!gw>PJ2|e`tiQ71Tmb9?P$)^rjxX?+WFgf?CMQj>Uct=2w1+|co&RGxPS*%Lh=d?}*kQCHHMp~209s%lK?Q?wXu$vYV#&h+@aI%gP?f?CMQW9d~j%d~dS z4AS2OwUCp?GjAkv@2TeKQ&0;zd8l9xFS+e1l7d>u$;DID8V|7_%$4~u>D-l|7IJc- zH3`U8nw&FoH~JLRLQZb(9SmecO|Fk|2}waMY}YRelAvkds4p-2^gB z`y3GQBl;B7LPlB#BUNmoKnI*)$d9C;7BbSgt*Ce0ZrsxWNkJ{-k&gM1r!4KUI@6|?TqnUEiCb|u4`zBQkH_x)f^_tq@l`WZ#7V6`6HXHj^-U1sY z#a{hhFJ8JGUICNY(79d*n~iO=pe*2#Y*${nM(yxQnaqZ+9CWnV*xD;KJr#_H4lWMh8Uq-4V@Z!#P0)yG|JHntti3^t%G@aL+61IdQ>S|qdaz52Mj z&Bo~`r+_wny8qyLvf-6HnGJo*D#~VK=ST>^JnwdKzanUZiJ#1du0;2;*~rip4yT!; zP*&m@G{%?=%4~E~E_&N+JV~hvogi((pEt+rAX|+OCWtZ{dadkhv+*F263LB?OMP{k zsBAE4l-cO1+R@);V}FU6WMfl^-q^Jb@0Chs;|FD9pv}gmnCgg)X~)q<>9J3lT*_?p zQ6CSs*?5!X4%o<~`{Ut2Sbxm=!Gu$0LqF=!=r)|IwvWelIOkrkNH)9|E}4x1>f;}y z+px|YSb#RHZ8z!NGBK6e&{gIUHXBCpG5v8qYi4W*lU13GA?o8%HX8@)_J($tvA#Bm zPH@$GVFD|&p(EBY(QP;`XHf4&uVaqmZ);#XnAFN_3|AkIv)TB4!ws@=C1O9?V4^Ft zp{si1quX$e>e>+s?2vZDF4d>xX0*ZNS7u|h`gme=8-77$NP87LWM0m^);hmX9m{lC)|j7^jj1*pyBiNC8*9&Y$Hp*)mf6q= z*Duj+I6G}v1~&SrPH{G?d=PCgt(MuCq&}V=-G(*0Kz*=bHmV6dGNKKp+Avu!pu99J2M>C?sQYGON>lFMvNQy*nAupNY^=B0IA2*+B}{+p{<{RWgQ>;L zhF)_w+H9Q5t~Tye`n??dvIlK2-I&=}qdwkjvvK2(&S1mnhNrGIMjK2)W;WKTkGI-v zTxbfs=UMijpv9eO$;`$EWn;U|#?BI|9^lzz%F^b~RApvkld`eXX5+VQ-VO6qBE5R6 zvCi~mW<$rp=Id*C@^CuVb7+SN4tJ~Xmob|^Q<|BLZR+E_wszdj7)t$dsrY@g!8B)P zV~6^9zs<(M#{ZCw^-nIM4W>Rb8@trU2cz3?rcVT!pP9GLn7JFG4W>gg8+!O0j&37e ziYC2a!z`}GSUSJ3@o0l7(#*y__3_c@Hmu!QpeE{BKj51S&<4|{nT-SL4%0a_^h^D=7_w83<3W%xa7*bZxll?81ug`3&XvC{u8^30NG3r@^j<)kh8%*_PHZG};uSd7xxIZ)}*f4v;)v5Y{)w^Z- zH?whB*|-_qhV`Ov53pg@v1_&NVmp`;&TQy{>1~^hBX^Y2V%DG?dtRXprin8f*VM;% zquX$0x*7mBKv9K2H)c1AgP1zbY}`;bevfX$c_XG;3tUI#zSS}xy{C@2T(Wn*jRs72Rh0I)7Y7f$I8Y_n~h&jJ|r7EM$)@wYCE&>RN463 zX5-*Luy%Obv22req}suBcV^=+W#f&_#*x`-uQdI!;-#LL$_7*5nT;39#ygvhldmD6 z!~W=@Gje5vY4Oa4o=*STY+O92_7~HRt>;oJN6H3M<(ZAw>f;YK8<$RhAR9X_|Asc0 zKF@5tRUiLnvvK82ZnCjEPZhMmlzL|4ANBEPn~lrmCV~w;_npUE97h{Wvu8Hm!^eRR zn~gs=LSK0LvgkzcQ4J8S4FxO%rt+xOZCvXl)!n~i>F-;#|ct>{^p%Fk@L zl#RGH8~4ZjMbC0zds2KBruQ=&F_n$@HXBd=`G;&ATcyw8s%K%!KeG{A*+>}OhRYG6 z_69T7ukF|Rkg~zf05BVIl#RqT8-4@Fk&Q>os2%Jy0J9NK*+?4QhV$>RHe}=SNS)-U zcCd2+%tiubBYAWievOx10UM?mQ=(H@_)B`;vJ(Q{VvPP8(V#@iP|E0rto?;k!2nsQ z28p$4f?j!5W0>sE8k0=fNE_XTb7I<}fIm?-oP+Do#A62ln2i+5M*8SBtmSK>pamu| zoRM-OJ`g(!z-**aHZn%H;apI^JlOb7w`1zEpV0<86u@kxQ8qG1w_#1|`3LYY*uc`* z^6k(DJ08Gnq*FHhZ8r9X9RS)Sm#eqWMjPy)0JD)n*$9ko!?}OHN(@WuXW5t~FWO*7 z2AGXZ%0_T>8`jyPb*UZu$L~TL?C=1ykww`Ejc&tvcEv5QVJ6L%l~hS(#|W5>0A(Z0 zX5*H%pKR=LEyZ@Q0|m@Rkg}20X5;Oq#$@Aq3VmQwjZ=2CfY}I9HnQ7nJUy<&TJtOy z%ju&$$_6`Rz-+jcjhr?czkYs2Hny+7hR?!|8!#K;%0_Oxjl<2!#*W9$(FQwsz-(kw zHuBnR9KZ4(+1OR*4ccHw5SWb|%0_;hjg{eDz=oQ;4(IHDN1_dO7=hWyrEC|nlL9k;9%tjt%qp;1!&ai%9qk*=uCL<-6?0^EZkx$tuVzV)4Jj@l(=0EY! zaC{baRDszjpllSg*%(=6G1zeHcJwWI8f~yc3(Q6#WuruN8`iN$C4v8)>~({)d%FwG7!FdIdcjWRYH>ocmNp&9E7r&YseVMiL6jpE8i zIh&1}8E%t}1E+pL8|-icvr$sns9>{kGQ~Txv2FzgGVGWGvr$^v_|9fy?fXB;#@yk{ zu^sHd1GAy_!obQl8xLkTBOAv$(7Mi!J}?{Qm5r)48^`|{O*U4Yri7gxf?zf(DjU^p zHtu#%O0Ib?2cO{h;Kw1DjY`T!O`DAii+&*+ThFC|zoa&QelUXBP_cAiZJUkp83%xk z{Ccc+5As7B>?_Kd4K;iM>)LFbOw@Nwj@ zK_$Yfq8b)wQL5=4qx^fEJ>SF4m@P580#j8pD>{OdJ8&!Py8oNm*hUTRYMNP76e`gJ zYrzQT%vUERb;DnpKfRu<>AO0Bm88mwHEBX$Z0-NyHu&sI(||ES!o(ski1Z${_{zW6 zr?bfibprsFZdkVKOi=Sq$A15Z+u(~*sI1epc6O_$M0$@^2tKVuXYBP&x9VgOz zm_j0#7gU?BIZ`rnP97q?M<^t6*%KA7o7T>oyd6n)a6%&Ij)(E%A*Y=jMWpw*ghVcf zGAC*a^Lno((tAikBKICsr0JopCn?za_76x~3!C1d*3RlX4t=r%5t7dYu3SJCQX|3f zWgV#p>==YZUawRNNb^=suDL}%cj$4JKp7Oy3129xvTQ>hN^=BBcH}`K*FS*ShKGyZ zG$Yb`&_N;(7c4^L)>pJKv*QgC`A4G~KxS0WW8K=RVi-MF*r5i2bk1I{HXZ$(&WWAx z5$Qe3AduFUjW85E&$+DaGbGso28lfLb~};#z6>Vv+qc121^x@98GQ=_)&8ZQlO0wN zd^(OLhy$daWsZFhDOq7h6eRN3tZGd#$U*+3-O$pnG4 z&c{pwq&Z7)c+K}nvhxTMxuLQO)Y7Q;X|3#;6G?UoK_XAydjpK=+g?3{r>TI&=1Kt7lH)0)6e7f9reh+RakxitlS zvNHt|x&I1O(98{2YwN$1B(akO5_!DtGa$|T+__xEwtBr~=LaNmZ`fXH?fR0m+p|*x z61m!`_RrLMBrK^!Yacr+Ad$x>{YXA{Or)Kcoe+@7omIktOr?Ep>e2|Glbs8Y$nzt; zao?fZr1-GY01~2!SuBhNEe{u_4=Nv8Y@WV)D3W5JG8 zOg(4Xk855b$@G4Kw3ZF|mwe7^9gHMX`6Y5|+Sl})%eE#&l4<)Ax$MepAoVP><`2LG za3E9kCGuK)C{K9$_Eh!x=#%OA5;>`#x3z;eB}0;__X6oE)#D!ebmdJk2uY^d3#8+( z7u|tOuHK5{-VFzmOsN-0YwN2MK$^L-ZeS54nLaO($KS8T)>=CscSMq@@)CKd#8o0U z$D>G!Y4HN-xI9*kAD%lfG>kdT8ygz?UzU65()0_og#cMOoG=&&~Z7;G(5)+O@tNcC0>dFnx7B$=Kr zk-MA!PUM;?7m#Esx

    7F@(sIV{;(Mv~!8v7FL4DH3!-t$rN*m-23lKBDef914*Wn zOXTX=orql2A`nTYj!Wd0_K@#+`gYZwB}g(&Tp}06{6yr8IRQvAC0rtxTvWNed7ra; zsT!3Yw@m+*$knyg6$C>r+)MikQ@tf}<1bB!T#*bycH@(2-4eMa%lAaCdPV{UQ@AB^ z+hmm^c}9HE6zG%b+7fx>6OJwB$;w8k*o4ICUQYsisPAHEs7l{<(I-=+CGt>BsJ3|ecH53VNHQH-A}@DRnU3*!>LgVnnEEV{caEvjwIR>9nv6b~ z<}8utM#8)FkcS6AUDS+trZfwrU$K2Z16fb4@qQT_R7aBO%l14w;?5&r>T4!jt-mqP z{+~?2v2lTEpqbo1B)~kIF<-S%$g>w5guTr1o3dif97Zvi@EzIwzTbq4ivT*TNax7T zH2VGz_vJS<7zEG?MOsU`&%+*K!ueM%?*WfyD%{S2G3x;ISdq@2FJdCe&dEQl1G1v_Ir=@t)Jz%|NDKS`^-hu2&|QzvClkaaa`~h9z?d9q zW}PWWG8tSToofdc0MbMli+(PSBon^{5^fCVA)lKcy+x8q-U8{|FiFL?W|l3x*AGc1 zbW7y+Z7qphm+S?SOx~8r%fJ6hC{m(z|D`x~9%8=slas))Kk>^B3~DKE_2PnOH56GqjBlK^(>mFhvv_M)r zl0$s!_^euMtz38*dx*)#0_j{cQ&k1bxLs2136e}KmdN>4y!*3xBG zZjKX$KAA8qk*ntRCvss5iiemSERnNvdgHzcV`HIDCIU<3p;QaW=k|QrkYv)YL@sNl zY8a+(XV0NnlL@{Oxp(3bA~(;&c!`nj>~}eV0A}5NX^W^`fPjr<0EX1o}W3mlQE6{#K$iH z=h6C9VK3+^(x5tk5TAjnP1y zndy}}Go*bAc_}C3W-UQvth7HPDdeS`47#9d$)>eg?x@UN`xNq0PP&GUK+^eT@k=Cy zyp)sib~H!Q6}vC>t&o>8()sp!M(M9VrJPI}`yG)9A*bNv%jDyMG%@J2IIWQsG6P1s z;>4zz?TYb8Rr9n@Av55le{z)2Mxc zl?X{8GvMUD$0~YltI54}vmz;E2AsSUXBCi8MFgK0hN;S$exE{Sz{$;*)V^X?%}wP( zkrXlmPR<>^6v%Aa=j^Ad+OB=FL#aHt;^fUTe*tOU=k znE@kRe(8TlpRO2#+aW1r28?vREwcnk=c|U)w?byX$gesYSpHgPPNavUBKOpJ+_$$Uk zQf9!(b)QwHS6GjsHE&0wPa!kl0bT;`!C+^B(N9hvx-vMM5JAsz$i- z9?6GYCWPm#Nau34N=VKBH}NGTh47q{>HO7(svq2y@Te+w=*c65=bUs@g+$8JW$!Ac zLsAIOIhi4&l8ubdq^HUuDTL>YbpCs05t7d53siAgw^j(x8R@d-tHsc~;MW(_No`FE z;W;Cne?84g&3oEL3H+KA!gEHt;zTHU%#2&>25rScc+Saq-JpQ( zA)VjFK%YW*&PeB9*;^v%{NtxmNDAROCqJZFLFDV$hmaJ)b52ez-Wy1>760_41(HH| z&PbQz=S$@C{jk4~6vA^(#!c!C%AEeMkrcvnPWr!6tESm5(kDoQq!6BS(%pO*kS4JA zf1r-;=#e0V=bTLOJ~2M0D_$HbO$gyRBb{6Fs$+{)^hUEGrIP8jPa!<#RKkaWK z;W{z;6vA^(?mM9ZhZ6dI?pjHyj}V@7a`)OVK(^83_BplDrx2cV^4tM6KO1ZE)DtD^ z>Ma%q=fLClgDzLCvsoX z&)8ZaJZGfKuc#_gndkgimXanRJZGfy@dt0jc&E}@^eKerjC92~JC=ODo4Cb8O5r&p zo&Qu(>#b?+qc-i46n@;2lPk{_2h!|F3;!O0q!6C#vTbc|;XXF7tzh`wg>RmP=;&MD zJR63E`xafhX0O<}M^yKoo!|>-TST?*(m4>ng0^0Z_ED|7|L+=p$SzpDJesyE$-Lvx z3{xZd9HWH(#7EJ7kS^K}CopD#rh6yB!AmvUW9Hu&w;DWqDCqb68kV2Ah~j1P-%T10 zj7s2R=HIuZrQ~dIbZ7ZrOo#zsdksEFc|kb~|JqsfQw=fmKON8jm=2nG7?}7Q&Xma< z)KoZ&8dudkT|mQGyJ^GK$2q~Ha6gP?UgfS{o(K%&iVjD)UmGk!Qn(|*NX!4foa8f0 z|D;G-zHgRs^0>d!qm${@9^G1;NbgtoewFR9=gieP9r?`hmzw0}Iep(O<32Mr+eTzY zM+lL=ZyJZE@ArT1u`!p$;H<{6{5QbXoCQH)66H_JGgq3cs3)BU4P zf@z<^%`!$hYR^hvK=KNI! zN#Wj>mxNnAot3g+dMN!zRV~%eDcsd!WUfv5{s9t{IEN$GhUH3o(WG#9fRR>6$bIq| z*jyB!ydE zoD66MLAj@Iv%FH;zizE?%Zro#%f@@jlKqerZh3Jsc;7A}gPOxOZ+r^3yf~TXVoD-& zcXS~s-16dNxh`9PjH%yB$+e}C6mEHOGN`ypD9z{#I6V?c;g%OC3w6CmWPwAukQ8ot zak4^~+ROAhWR+WV97*Ap7b6`li&Eb@nxCZDM7ZU}NGoiSiZIM`y2A>gPvMpqCySN6 zO=OXaN0Ah6d2zDHz(67k-|B;;aLel}a!DQ{BXX;BNsn9MmKP@j+y{uvvM39Z!YwaO zX8p@ch8G%-q;SiNli4C3kk9bt6uk+zyf~S)=}02Owlzeb!YwaO7J8kU$by3%ND8;S zIGOR*AR;q#Rp-`p-wL<9I2q-qp3}^-Ztuq-DcthnWM=()jb`*^stkd+@hRNZ;$-MM z?-&Z{rOr#})(UsEI2o3GF+FE!4|O_JlfqpsPL^Mum&merY1|5TwK$o&d{rV--itt= z!d)#!I{S@;RLm2b{4jxLnQ&K&k&ehczoAb@%kNb2ML(x-SBsHWuH_q%v~m_v=Snpx z+|}Zw`_cd+L)$z;Qn;(d$?$TpU*kG--9l2htHnr1v$0CQ(__fdG`A{_>edQ(wHO(B zCNAs_t`ur_h&&dT=4XtLI*-!put{}$tDKaPR`JqD(5F>&PZ0VPZh0}Xenk1b=(B#l z69bWq+2)%*Gj~`-J~KX`T~N3m#(dVhIs7L2tatSS#ng?*e9Nb6V(N_G6N(|gk6$$k zTPsL}%%`hEXDA7n(*UkEw^i9jzZF3u1?N^m`l-J|7%N=!wO8XQfLQYoC z(Ur)mKUY9fkO(t#NIq#zM85~RqoK$cLgbv{U|PMPV}3KAhBU5$$>5w(JT z&W7hHrWPbZPWDcz)`ZfUjLNtKeF_pGC&&Gx>O;_CSQAG5M$xz+5pr_Mi%=lTX!57G z`O&8!5puGB%b`G;HKF&|u1E?Jp_g%k6$(NCqyFfAW z8FCo(0@GUImKP&kRbRFP(#(}AMe-pjh{c@jnD82qW`4GNGX+UOEav2pTo#aKt_;|c z3`s#O=48~AGeq`?wGv4|Eaqh7XjRQJKAV?(kE9?LbFzJ}6GXNimmNt#EaqhP(Edbb zokbCbAQp2nky4I4yF-HJR1p=#Vot`H@E?$!)VOu|#c7PK6~tmrrn!|3$Vg45Zju;D zK`dsZ^ULeRKeYi#ge4uG*0d*>O@VBn7dUlTEVZAhN+K+Ia=Bn3He{lgI?| zo}*7eEaqgNr!k4_m6sx8K`iEEUBB~0)~tU9eF|bRCp)D%L}dFMZVxGm#hh%J0oEW- z-!^T4)#m@pSx-6pl_e$w5hiFuPi(Z zq9`n-punE36p3BtNa1rsWm>nDxXf^9gr%Bq#TiLcKoCS3S?+KZ*oLk7iY&J!<8S2i z+&6uutq7FIXR=M5kQ4+_=F{3&N|h#(D4*8$ZV!p{Er@awWJU6sW$P*;eG8(TOxZC$ zk%{_lCepVc%E{EV)fETRw~5P)Akw!W%E=6q`Vg6Nr#cd^171N8F=#4 z(zhV`6&Y_dks0pHAoAN^wHXouOQ^?Zre(E=^eu>TpIIl*BQj_Kg>!-+%1B4QoJv3o zRU^R>wdNH16a-O5S~(-tMq_#?^!P+11woXPIp*CWGPvk)Bn3f~lOb7J5}9cx$zU;j z3!S-xqhaUT@XY$nSa_2B7?8dqAv)djC3a6pyoMFKAok;`@@>xe4x6v)bMIl)DQ$wFA3?=2}svH&zUIc zNc1TPqKwS7;(8V!RlUiPYtcX=1woXNR>rEZJ$Zbl{7AclAc%5u-ydpz##TP99qp@P zYXw1+lPTKHC!g^mdLk(ZqMXdv2U2HGYqR~k5lKN1-V$dAZm zaYK<51W`_AOtzNDRDP9^6a-ODhUf9_Wq~EPA}I)>oGcvTUHfufDT|~ah;lN0M^#`j zvn)l@FGvc4C?~TPeNSZIgiA;Yf+!~oY*j^My$)G9H&71=f+!;$4cx=fr=#ll)#y_Y zL>XyiIjKY*^PFj`t9uE0=M@A|PUahTipcCY$0I2SqMXd0X+M#{!vl~M1W``r8PkWz z(7~^f6a-ODrpPmf$b^lHA}I)>oXlK$5|L@@??zG(M86^fU_J2kZR#o)krV_`PWp#m z_mXKaJRc|sqMXeBZaR@cm+9b?Ac%4@W!MWM6Xi*PtrY}OPPRE11*B82eN6{a`YZ^d zoJ{4fN=;_;#cLlIeF}moCo{|)L}c<|hmjNnQBJ1K@e7ej$M-@~5JWjyWYuOO^DbXu14%&;Wu&v^+O0sE*rfh1m^2L(1W`sh8eUb02Xx;$s#}N9ryz(j z(h3bagQS(QBngFrAj-+ir&XE2ywB9h3ZhRz5apzQSt$N_$TS~^ASnom3W6vjBe%|mT+o$FjoZk@|D8or5JVYij=3W6vnt1hfWWSKpCkrV_`PBzT^iOA|*DZ3H`QBIbudWpya)2^XUK@jC+b-zd= z%M~SAQxHTsS@LOeBJ*8YfIbC5l#|6it6b2Ggxp)MBPj@?oUD}f29YI`(`q6JqMWQ; ztSXVE3gtncf*{JtY9H$oS?;^rND6`|C+qz)i^$6NsGutdqMR(-Kpo&Tvn(P3t+#?8 z%E`#laMZz5xUP2Q7`9drL^;`_&A&jF)HA!z=Ilrcf+#1;#W@Znln-G|D3~B2l7b-0 z$!g&cBY4OXtLb8ZAc!*3d2>o?AVGA2H1hIgTH^&ll##Al`pfpAkPNM@T!X51f*{Jt z77Hd*57m1`hwlVIl#{&&b_EhLN$}ZuerxO@K@jESpmbS)ETzewKT_>Y5JWlIA&;s~ znpxJoF;xWwLDWk+i^g7g5;OFomiO?TAc%TNhn2X%5NPQk)mke~aoUjtL6nnu{M5)B zugR=o-LQuQS(B5$wS-mEF+!84tByfZkTp4( zyERA(vL+*~Wc4dROQBi_yx%PnLuLCPKIQ;;iO-?qr z1NCChb5?s^!$V54CMT=5-9TiS_Gys(Kiq+R*Iwn>Cc=1rc{Y-QtjT>woK)3GwV%P- zcl!&Hf~@({dvVquenaXmP%v-0{=1pBwDZj{n7Kk8moUtIYRK_Z0FWd+3R#~ zA6T*_T%K(a8C9Wu>+UVON49Gp*`g!-|6gAyba1rp33$^vgK|jR7=wWg_k?uMF$-UXLm#yZu<>cD{!`|avATL17a#4+Pn9n zD8p?(A8Vc1txb3H6t*rH95gt+@3LDP^Q-<4rB{pY@ z1cZkl*L$b(?)0jr47dG2td*mTDrcD&7oKzodG|`E47dF@tW|I()U!Nzwm-CnpuKzb zQ-<4q7S_uDz9r$g$4y4>Ohje4?H6Gk!xO?pGrzLy82qjl;!H_pxb4Sat>OclkoUrk zN+ZtXREFDr2i7X}ePS=}$bdN0R2gpj30Nyv)EvUI#Xdv0S6F4Z?blzeQcIQ-UaaPQ z#F@IvaN7^RT9uAICcLEnUN${pnZ(L)`)|Gm-!?)jxxSkgRS5n$zOmY?vP>BggXrnoY^p>3(m6hkFg#(UbuM-gYT zE5jQ{#~roXsrre=9aXpJI*}Ul>@q6Do7(WmI-+*xYLRH*Gc zRUYCjHFInS#F+}q@RreVhn4BMk_ODPr(384X4QBm#WK8AbUfGQPij~GMZNc2>(gx@ z?_S-R;ccShR_HEuP{Vi+tP_Da6J;6R&W4}(2RvJT%DZ*sw?7eQ$}Gb>*zineBguQZ zs__tK@+`wU+VBzyR2|ebK0<%Pl%6t7qh)w!8y@&d9fvS@=CQfZI}>Ud-qnT&Ejvzl zrnj`eGqslC-EDYi1BgvL-UI$hhTfTE%kU^0p08O!!gIwZ?@YI4crP1X;SD4M9`7Y8 z=yQ&0)G_gv;k|8m@HG{Gny&Nj^B*>zDYy*pYr`YL)vz&mzB9B`G8vcQ{cU)~+o~F< z*E*|g$|dNXX}Js^7#(*+p1h6T9nD%zLYxV@3?CdFx3ZS;4x5mxYY}IvF2je~@ZzVv zctjsvd{8~lq+N#pXv2#I)xgGEg-YxAUExgMW%vj?Uc8YPzeCT?L|%rEvf+W}y^B@m z^c0*hrI+DjYB4bQU3pS-6}qEAq(#xn_+;ZtpRuLku1kD*uE z&KGsnK;cXWX812Q+`pqLNt+p$;ZF*Um>A6P={7uUVr9aE6TQJ_XNoYxXWH=a%NM-( zJ}vXB#xq%%;j?XcMG%s)@ue$hZCK$<8)o=i8xG|*!c&ajfQ@GYF~jFa$DM zgt{QM0}c7mRCtRfhh-Wv!`DW~trGuu$9$2}V-ROTGQ-zL$LkkQ4LX)jjjCwi}UsYWVnJkymKzBM}TnzZT=crT{9 z&h=9>ePUiUo{7s0-)_S@SK1GF35`c~IgQ?#!p!iUHhkoad4%^*`xtR1Gc$a*4e$Im zF5!_E`XJ7e%<%m-ywwnRZqKtfc-;xTGu4^l2W@!!in$4I zRgQuaCOtF!unn(S(CfW&s$%G!>CX&5YQtM)Qj3*&ag919M4XAx3_oteo3y)1c+J){ zy)!wQ;iqkQt6gfXGmWpej-pDYNi+Pc4R1NT3*imE3r6ou zm}dBS8{Q^i3&I;+rji#^rx||HhIh?2g78-7Xr*NmHN$_k;mvZ62i#298e3yy&dESBDmE#F<#l@ZW5BkFC7{FQ@U2t5P7&6l;cGx8XJJFCx53!sUoF z*_z=uZFs{vDG0B#b0gwRyJq<9=(zJ?wwHiwp~3n4GHN^%uo-?gI__$6bvWSV^|LqV zRuH{26`SF|+wguxRqX=yIq3PW>-Hedq-=&iu;CNR9|gRO#)sFc%$5Ot2NgvO(G-bI`#+YEma4R;nzS~&Z9|;tFx<@8JT!CLmAsWj%UliaEpIMaM&u zy4wP-my3`Dv8o`>WOIi98y&YY=8b@cLxcfF(rlsxoN4C_|6s>o#i7P~4mPXkf(hsh z|1UZoR&>XH!1aU;E4YouJX6sb{y92sg`HFqmg&0S@3j!6yfZ1?i@P1saaZ-ls%m6r zT&3NqvFn(g&Tyv&#xr@H;eIx}?Z`KTH`&t-ai*~|JgyCg?}Z?|WsOFNGohW~@ojjHgNq3d zFI5?FrnWOYp$$*GyglG%lZtmY3UMa6Gd!^kk5_ax;2m|($NHrV;!JmEcv2glZc=l= zTWUPz{ho+3@txtxZMX%$agQ44hxim0G6kODDWl_7wgJj9jC(NR4x>6Pli?YjIy&x( zSoj6N5(;K+W8G@dGC`i<>1}woHQu1KZI!0zovHE+ z&uGJ2cDqI1Yi+oQIFsfXp4o;c&Qp-^cuQ^|&h&YP``hpVyM89T``l58Gm)O*fi}Fs zo%@7WJy9QVrqnY$*oJqD(UkDkA-Fb>Gw<@zfWu%6(Pg&iaFFI~zoX{M- zTYe$5>$B^|%zFVFe(1_%z#(LVKUcrsOpW&?tGf%?@T_lO^)t_ICB2f2a9^^zJHm#i zOQX)hD(CR$4SiowJ-g*gR(BV*;Th`QBiy<06?yk1tGkQa@SsBJ36JwTRq=ev>h6*@ zJS;Rb;YmVUqIaLNy1TRuclU1K#kb8R+?TBGE^EWHX6WR_yXs?5s_UG-WOa9W8=mv_ z?}VpWdI!Dxl-1o8qvMW2E!P4bqTgJ{B6Sh>DXY6HMaQiIB|ee&v>mb|?o(EGSFz() zb`qYdF%`aj%IfZFHavVtHo_C{r%}i5E3+w6!-f|*vY+sv7j3ZdK4o=xEgN3!(IUdr zjHr&dPg&hvCpzv-pF*9+fN~V%IgSpk2=`uJW{s~G9fz9fEApP?0{Em%dQ2OqPg&jF$cCqhk&bX@;iK4ipR&5UNp##%rPNZy9r-s=70;)v?rvto>wkPr zc&V)E(7R7r-Q6M@?kx37*_F`euz5P1rTU*I&A_Lu?v9LxLss)~5PG*4^qh8Ox1a%xZGGd>xCxKCN#-NlAy{AV2D zF<#S@@hPjjyV>zZl?ab@nGP`dl-1omY`A~Tr-aALP8p6*S>4^!hUe&gmhjXq>f^Kf zl-1oo*zjV@R4qxpH-{B4y({8AWp#HS8=m=EO~PZ$rFx1_S>4^whUdJX&b=A$DdV<4 z?>=R9_W&DSvd413^;&1S6T|jqDH2OfeUxgBg`;^t)lWcgt!1;uyY)$!33_*Y{`)23K4o?H3>zMpJP>g!c0JnPeah$p2B;VvZ~n@!h>q{kT(Kxt9tq=%5D{0ot^NYT0LZEAf8;|PuRsW*^{&H z;@L$|tsb&F5VwkaTc5LM`QsX8531Ee_6Fi@KXSnyqRHNN>#_WV2i58!`vP&#tPMCJ zuZg$LGw?3&B?Z;$AqO0ImwvE@^GUwgabqcaP^}(v(18#CEQImoE9^&uYW0wJ9C(*& z7a6ZJkK24utsZjNfsa|TlJWMHJXH9gT0P{b18?)pmyAch`7GfypE&Tgqi-@^LFh^@ZK-|2sn&5(BBjKvtA9V)kD5=;zvdU9&6)GHt|80pjtiT8wcLF0xW-hrYh{E zzp3y+wR*_64m>GaCgW9I{0dM|tsZhI5O-hxqX*zISa|oT)Y6nas8$cT5{P@+p2`V0 z?A5}pi#d0L@Ss{fkfQs zuhoD<(}BXL{j!trpjtiTrUM^T%0E~o#)lFfRI7*F4#3?pIUm5>#%z7meBApz!h>q{ zkUIf581X)^XXSbq3-9{tefDHQwR*_U4!lb5Tma5N+A8+UKa@SF7Z17Tz`v~vn~g45 z1_OTlrzwO7_2MDFI`C(cCjp2w6#nbSga`HFA@>9EvN>PK3b@_h%RD%?l<=TlJmf(j zZWYP~=OK({bNy9n2jM}zc*q}4d@c?bcG)efXiLI_dhw9Qfp}=;Z|(wa_qfoKe?=1> z)QgAw6^L7<9ztqg_S~0e6CT`){}YIN8tlOAwXyV`a(`bWJg65BwH$bte)y1zwei?r z*^C7B;-MY~K6L+wfSZR@QnR9zJ*XEC&Fa7h)Lg}QtMUAZ4C=*0pK##q26-8;lERyf zLA`ir4hP=h&v?dbX7bsupk6#Qrvnd};GZ5mRWlb|dr&VPn%jXtnKc};!-@h1jeFmn zB|NAX56$bqvwVkJAAN27$FB|$9@LA6=6B%F6gdcZSHwN8-28wJ>cvB!4#eFLTVkuT zJFNS12v1IedhyU_0&%PCjQNllcvB!ci_#Rgtd&X@RjDjOn6W)9{QpK z&+#`(CHvalzfOXGHrstcy?AJG2cFgk#(7`%X1%z-2le8iB^`L9m<%z?&>Fmi?`bSav`*$!T-;%w!awoYWx55m3DvPkZ_Y2OII-i_C{QJ zp_65;lD$C*_<8Vt_}`U(OmD{p}#R3hsuu6~ZyB|98bb z=1*jaWKVZ`4VZMB$(z6L|44=*qnU=E;U9Ah?(-8s!=ag&BlypiA)`1d@UJ)c{bU2r z`!K9nn~<#k&rO_#*rYfmppaHndwhRdM8=#R5 zvSx73x-Z5v=|2{rk<|u%&t#PcxDjRUkpD!0Mpo~DTUh2gtKO)~9wr-KhbH19{o-FE z8)O~AWW57vL<;AxkgkxTY_sv*j6Hi?pH{wbJ6QS8imvG*w;h~)31@qKYqZa zZJQZMq>%g?Stnx~ld(~_ooL@%;rBJN)gQ@Bwp@$PKbsV4Un4umjAXLot)GY#R$n3A zHD8_$B+PhVvQ(py#iU>8E2LGcNoUR(le;64!sTmZ(_V9#Z1M!I1 zGC6B5;C3q^#ptmDh4i4?wDA(ML+0sUceCU+l^K%`LJ3TZ{;yGYk*g`G|&Qdn+cPj!paMo??I%n*BY7D5Oz#_WZ$#ri4@{mBPWb6!{qq+JWmkLS|bO3i#rjfRt7A<-!`?! zc%iE`a&XOWnH+d5o=9P;HF8AB222h+wvR|5sWo!wxi6R;lEI}Fep(~P<-=F`%yo`= zg`f69O>5-zjz2Lu^#ktN!b+>;(#b%YUN(6)uOfwz*2v67xY^v)?q%Z>cn?FkXpNlL z46f0FIT7^FIriUiv+Gl6XpKx;fa9$p`-T2RwIU3(MvhoEipk*-y@?d^Ss~pIpT7*G z(HXz*!=G=kODnvyLVD5{b_KGDeVzSdKO<5oXN{ceJr5+bK)6G*zvcQAwpk;0J(Uf} zhBmol;~>f@M6*WjUxc%_1e@F!U4%&Cm^E_wg=c^??RHtSUx^fYIXLN#3F-ShtLFw4P7mla+Zc3fPrM+BL@Q+ON_QduD*FC5+ljQ!+|{HA^($|+vcR!FPq1vnz; zf_)6&n~e1mDNM9R-oG#(Aeh+z`P=;IL<$M5krmdw0*slPluukqr0~xQS+?X&*sC@@ zyKIS++(ZiXtdLfvMesy&-L^|xu{FM6W4Cx=oi)<@Sg0v&#oMnEDTK2^hIS|eBZ+CZ zp~(k7CQ`U&g|w zA(u6BTV62QzP_@h7#@bO@2&948aX=`>}2`KnWcD_M<`{D9KWqCljCx5tq7Z}k(o_P z`pG*BskA~QYh<17xc)R_LTrxaL<)zjk)cy?ZEwc-kka>v6#7^ri)O>M!ys(8p6B+! zf0%nK%&|sB3^@X1FPjX{&g&H+jWzP=(fC9%&(Ehycqpgv#R}>EYyHbWg71Y9@XyNG zh&(qS11(f;{Qo!p$@X62kLy~s-}@W>@g{!5s?{@{NFkXO($jRTeiVtdX;Rxy*7`oX)!OBqLwP~wVLRBb4R=W!n+gO80MWqU|{x7$2YhnYE z^>3VU6RD_FL0Xl{#Bt8hRV|2ARH`J;xBC%Dm?XjH*{!#j46afoS!(>+`hE8{v3Cw46_qMTcl0lx0BH*sclc~> zec~s_)izY{Q_dOHtr_K1RI12n)qe*UYNid>ZDk@cw;fEXb0dhHZmGFZjd6F&OdDiN)ioGps?rmhv)|69GsUoNK zMUGz}r`?9EvtRJ2si;&*hCYEk+vF_MmbWVvl`6@$D{3*>s^%;zt)fyTS?PNacD|hD z3-i)PQK^#j9)P;^krh0=<*lexNk$}(X0lS(Z>Y42N|j{o%14;2F(;NtMWsrz<1JkJ z*i&Mw%{+ecDk@cyl}pUzoMHRUQBFmrO0v=2oJ`j3d67s(rAjg>8C$$*LoKFr>r+&! zAYJJ_-lUwazH?upoQg^nq*Y_#F(R!hNmGebRH`H!&UnmZ{XBVyR8*=YTdceSBrFTy zv*GbYL@Fv(l1&$v;+zRn77(eZR7r+SI>2OwHM~Wts8mVT>T-?A=${5rPDQ0kGH%x! zOjaMwZAek6lB~TEC-!DcsQ$(^%BiSSNjADLg~|HecMz$lR7qCchg9!qEaOpo?eu5R(O?`1mhHyD#;r6VfODUZS?hflv7cul8hNT zgUPCocN3|oR7tiQ<7Tq?A4Q2&RH`IPo|(#IvFwkDR8*=U-3zaF1JcY*W^cGjq@q#< z=^C)}9m?tIccmhcib@rvRd>a2L|Qcu*CbL=sgkUIYb=wMYx1^_qEaPUyC{!fR`ohn zDW{@R1?lR$cQ561^(tJQNJXUzGUfZaXJNw!WWLLla-mv(A{CV?NUO!@M967Iu*Q$L zJ{6TJ$mEuDzoneXjjQ1+QFdQZRH`7Y@}I$)*Vp39MVu#6QK^D#dwpC@NKw+jHXx25lF}O<8!nRaB}ZcMd%Q zWPO|5aC$zKR#B;ve5vwPS(Rcyf?A{CV?$jHxD;Fw@Pc_Tmhn4k8FN)@ElpnU;I_mZ76ejD#$C@NKwKR3Ay z6s+nX^R1F`R9Z!)O0rDd?7*0rafx*~iBwdoAj=m00`89K*<}m;`Ua7TN)@D4Zqz_1 zs8Kbgwq7PuQK|nTZ@$2#Egiu-g^EfQWN5Pig@CksS!msk4=JajQUz&6z3bm84Eu!- zPAMu?ke-y=nUK@;m9~pXM2u5Zsw5}1PXW^O&tVC?->0ZlNv^6p0Z7wVmgJmG*Quyf zNlxyOz~tD(?nEjoRgy#Iz!>DqIWQMrr=n6NIr8OeOb*H9Jw`>PO0xQ;T})P9IDks4 zs8mUoDtZM-^K^Le7`GusrAqRdZTEm2fW6F<|MFGJsi;&*mOhR%sU9|2{E>@DMWsqI z*F}7mndfKrM|@aIQK^D-|9<=oknn7Q5%8A-8z`ruQUz&MD{%s#>quIWOEZa7RH`67 z^*?+H7}NUVGS3pJs8mUoxYv!z7pq?&QcnwctO(GSQD#>}(;kb;CoDqA5NJXVevQKkdMVg$cC;6GJs8mU2_5!!! zBS&BRUn*6S!~d+#LyjF+$AD!a{|yaRp*(jIR;IUCX5xTaEN&JKIl18K&-q&fwB zcSuvI|Mx#9T{Q5WTl#a-ExHXJ^6z(Er&zj75+Ee;4-s}wx;I0LC5uh~v? zyk=YadDw->f=|J$Rf@-UforT(`@f`gSv5xPhr5%*?weI|;oR0H702r@tgAu6ADRKV z1<3|a{}xW9;&=sV)og^Lm&sZE9evJEWrnJEwuOyrQvXXN) zn~jIV3>n<f{$j}Bj#rY+ ze%r&PZ94r$A{ECgNY}O&Fmjovk!#E6TZvR0uOO|S)4t}?_NZ}=NX79=vfFvwX*PGL zYu7eJDvno@4Ie^3q57PHYZdzrDUMf??LV5!WIOv05!$5UcqQ4hS4$>)lb7cWZJ+-9@u!lZxXNIbo+aoJcT1o0$BcuaUY&AE?CSsIJ9`R2;8Ar#tTQS=jk- z|A@CX?n3kSL@JKgPr9rsqZd<7t8$5HL@JI~kl~+}!aZu3n}FjzH@Oj!isKceRqxJN z&RKWP9U>LSE6E>Ugte#dhYfCx>qDgCcqM6mR@c;LI@e0yvoX8K`Lt;XZOWD*QgOVJ?7j`w^gi?6c@4KA#qmlqHOJ>bfi}}g4%0w!TSCZ{N z%g1E9bbOh`&Z#(FN!ECLhso;m+7hWaUP-Qs^VjFf33-WB9IqtnRLILYYrpp=k&5G$ zWD{!~lZ_VLBvNs_l5D;X{4F9C$16zJ*ogNir)%`1dPFLYSCCelW>G|1NuS~lk9~&}$1BMu zam$!Y=!`obHmNvXNw!SG{`sWcvzv6}u}^Wlf^-dkJuBsO4I7i4aw?8jkg0h?PQp%9 z5zLvIGc$om#qkQ#>X$tda>A+(K6}wsE>?a4k&5FLq-Wde(U8;ZC2S49Mx^3+CAnx;8jvt9K<0&| z+YzZaUPME1SCT_R<};ab41ZzUzD~vQN^(}b-#*Pa#(hO` zypkMq^=-~M@^9Q1w{t3vSCXR+;_S`b+mWq#98w&wBr`|h9nGhYQC**- z6?#nA3?35{$Ll9ua25;3KG$iyw-&rHL8Vn3uOK6TSo0Y$_LDdAs(;r`alC@`Jl~`c zq=P<+Pqfqca<4rOO_-kXzg}=_{o`zamLO>*4ZcUDVuwXeca|AA|AG}W+$Z-pDMTuE zSddoK;+~MrtdSz4KPOVL!-6bZ;q6mE+G9f5@+H<2sn}sbT9udXhl1Y0(pu5wOA@Kr zVM$hLmW4|j{b?T}6+0}*(4OaTuf}fip*^xB6RFr?L0WN-nsClKE8ZqjvBQG&WX!`+ z)AX{zC3s&`vBQ#Fx(4^b8sZ)DEWXOSABr88=S(_Kzz7_Qs&XQnd3ZIqQbAMNSs_@he^3M4ln9WEw$UYQLrP*Vt;!_1_Rf})I zIV*=eNu=UaC3$IdDv&sXa9J0s^G=l&+^0&i$?c1rvthzz&KcaNO0w3UAxzfD;JrNY z2Z`k!mt^fTnM;<;T>|RBX-$>2U!k|XXw zNlj^8Lob~qQt_#N(jE8ZdDvHT-^N=Tcdqh2A{C$NCt;*sd7W}v;nPbKsrXbuhJU<% zGLSE0eTJVolt!fDQw3?oKLImAU#-+W_ZN|hPnG12CHRDcU32)n;(mfi#ivR#I;|Gx zjChjAKEvgc=iGTC)nPs*wIR7qAJ{Rxv*VtMRSeCof*?;rcgW8C@_pDM|iF*su} zExvlvQ7WzCQzhB*@jxK${%JMw@?L@BQzhA_+I=AN*|pMRzzxc&_*6+I90}#p#%{$o zckHLV;!`ErwzU5`6JIV&q~cR0*=3c7ud`zZJ{zR?R6)8%_v4(d5zkhloQh8sq?Pb2 z&T34p)IB(fNX4g0GHC^t){ren)*w>xsgmsY0M}eO>{@9zbOMozPnD$n+0V8ae4UC< zm1OLL-?_9kck!%7@u`w*61{-Qgu&UUw2DuaWQ(W$ZKz2~St1pmD#@mcOLESJKk#0= z;!`Er_R2R*Ce7v%O!29btd@NrlhIfDQ)v~SD#_*jU|s1uU$)>)p7$v}Rg$$L&=&f} zgg35JPQ|B6GU02?>1($a@)N1}R7o~I|09$24*x`?;!`Er^Cs>Go17_4d5l+lsw68- zfYrW_EZ=_<WveAX9Og7lU{ZsL&f^-edJD5n<;1Wluw2Ds^WNNk_ zuEA~y>?XThDUT-c98B@4g0xbnOoyCi1nZjEf^sT8RglTUZovxDg}eSicgi~*bJP#nVh3?&LdLssgfMC1Wr@> z$l*uV5vll8Nluvw`Fvz%R-O+jK2?$n_8((%=3rhUDLz$_i=M3tr0HdIx{RdKDn3<` zQx4&YEn^EOcK?S+#ivSg(U~bgg3ExOy`aT1A{C!1$w5Eibs92#@MlCSK2?(A^5JzF za?~_7>xxg6r0eY)K-zZ6{pTefsTH3p$&9T-frM2ZT<5^_SE#g#PnG1$U0(q*!6xVD z=R2hMR7vieaU94-Ho4~sUS}&lRg#Bt^#-z`O};gMG?iBIsghi?=njykudKYv?nLpa ze$pLN33pt~3O%O$;9n@G;#2)3oOq7?8%lZ#OKU|o>`bKMQw16MT^N?ue)2|Me3zes zicb}!=eeq_AssxGpgy0y`M-RsAgxxHu;ndA(rUi#Pb#hAQw8aEtsVi;9GiS#|9+DF zL{faJAg%EAVUR7mO;#F`LOB(mD#)@S?Q!?R9uvxzzR1_9_*6l{8+>pk-1VcKQ|u2Z zK2?%Y4RGu;rG=lCrqU`tRgj_G7eX5{Ek3lK8Av$!2V>_yOZhyn;!_1_CAy46qicghfk-pga%n7`LkB1Sd_*6*_Nki9>fUVEdV+5V+`2YWH+ZO`g zw#Bz>OV#T?aLCC2_xrYY@nY(Xz|&E}T3c};xE9D}_nNX-aTQ_zp<3Z>eSfGH|D`H? zc*3fc%sqeD2y5Qk20kh!Is!H6 zvy}tYT)mS6`Sq~~gf(xrPg*+yrA%APff}vDr?h>K+f#90{0CS7 z_^Q9wch7SmznB(*u;#t?Hc~f7pwtr^I8ckGxa(+_NO)=yC>aCwgpW!ojzDR}LO4)| zS$HGuKtfxKKv?tM-WaGyU?6v+6JJ3f+jY6C-TjRN`QHi_fw1PieKAn4z(7{xuhY0h zHTGabu}dVRwg`j;_NHN=K8`@0N>AWGjkct7pp6-H_EiMJn)l*&D)n;&ic5vXm#@|; zGcif4kLn)B(<025&yw`r(X9NUtSv7ye z!&zp8tXK{kihXH9my1AH^Iiy%S!rlspzyDA;-1n9?EK-!Iu@Wn!k&vjSo7Xd7-)E4 zAgl2R+$b_7su59$0tuNe0%6U2$6%n5jzIUWqAxTS_d=PO6iB#r5eRGEI}QVlb_A-G zvp$!o;{2%;NT_xZ2y5P(iGjvC0u5|@fdh3oj4AD#EzG+Jgf;J-h=ImC0>xcB&VeF! z^H3{9yaUuLb1ricp z1j3s4&c;A99D!QRe2q&~J&7Mj!s&}ZSo7Yw7-*IwP}f3la-incoA4$3(uCp{fw1Pi z^D)pIN1)yX9z!70vfDoXo&pKuF9KoBdtbsp^8y38Cg;N~4ZE+oGMeEc#4eFI03ZTk z&3hMNpap?}ti*4lDUenBPEHCW&I5=*So7W`7-*p*P^UuUI8f7EctF)IkvJY80%6U2 zmtmmAjzIm&y$gY0r39ZzKW(Bw;k;sTbv~jfw1Pit1-|@N1)bUW#K@+9{>!8N254eAOc~{d)H#1 zRgOR%$JFLP4YpK)FWEO+oHP)Du;#t%G0+-EpmrZ`;y`t)HKRb{;DHE)HSgVkfz~+! zr8I?oMBhDX_8YI)#5n{JXc-2=nyvJTBT$_iUvr@FA*;$ohG;eW(N{S8blzhdG8Jk^qM2kfbZYn z5_N9zCj}BG97G_jdG9U^^oApltpW$yDyNEb=KDn86ptYy!R9adOt9bXXnt9aF62fW_#A`okW4eAq^1-Yu z5U8#lXiCEh6iA%e5P`7fy&qwq(~dy<7roAb)_+ik0*NCWA`sTR_hSt7p(D_;N%=X@ z)X$SBkT}sH0%6U2&tagmjzIep7jmFYPcETA;(&(;gf;K|6a#(Y2sF27V-7U5Q85Z6 z&U=VJSo7Y`G0=HOphbPZQwP0ShURI2v`ZvTl88W9 z^WN_;&?QHp8M*L~qzRPq98dkk!4eS&Yu4~{@v@57FtZy3pp8Ut4lAkphXc zF(MGwy!USm^f(}pJEr>C7}~6hDbw*=3M7uoh(K8LVb~ul{S^?%WyR)R4p#+_ZMeXS zhYC|5adJik!kQ1m`9Y2euN4@`>X6zH z3Ih*G2-i5@atb6)$A~}=F;I34lr=DrJ8zE55M!1d=+`j(rd?~|u#5fo{_HgR3cCBQq?JtIF%y;VG{}~gn^!M1X?u$ceKoSH0^Oi3M3Bch(Oqc z!k)uG1s#Eol*4tu>HQm5;(%k{Y;k5s1i~g1Rulsjb_80}^)n7MeLwF*iX%KC5H_K( z7cfu}N1*wo3v!?_2}9sZc8SD^9uWweP*^bx^t>a`lFWk~XzW}bA;ke75eS=5SP2aD zq9ag?b9idU+@o4s55t%25{dIZA`mvAuu>SPxFb;2i8UdRd1RM8&n{aW{}F+(35Aux zKqVc4%%9pGh<(jdIB5`k$u5yN4I}~;!a(IPP-#b?*k5-*iF(?Byek(|AaOWI1i~g1 z7K(w&Isz3hSq=i3WmdkuJc$rzg+w51LSYp!P>3T?&R07^pl~da`_W!JI%Hp(I65Q( zVG|0ggn`Nj2C`aS=?yV%U?8jJA74@+ags;`!X^|JhJh*u2J&=h^$0?k>Th(&OM%3} zA`u9iP*?;8@;U-levF;g1S+$K`3CmU!bWsKZY;a_edN& z5`nM@h2f0F8|er%vmlr(U!Wl)k5C|S3P}XQCKOf`14TOmg&!Kmfr>BqoC1kMNg@z7 zp)ef$yj2{5Hnd6QKnv3zP#|$eNd&?s6jl=hRdWOym-;0K>fh^o3M7s!i9pzd!fIil z8je7VpWDQNCf7ac3nWi4i9pzd!eTK{j3dyTJuh;gF;8@-K;l4?2!u^2EDi(Jb_6P2 z0OyeL*s?uOSH}kzR=@mf0wNGLp|H9bsE#AhxMy)qYn~!q``~K}b|CTd5h4&ap|JWG zDBc9}|C)sF&$c5UmVx#P2> z2;AISiO1f<4q>i6>iemj-GACh;O2%(Jn}T|$QZoDNgOZj9xi@nLg4l6`jB{Z_-4j^ ze;Ei`$T;y^69RAGz^kqH7rxR;egup2L;`QgueEAzYjZ5_oF|p48(fE_~g+F2co0Ac41a z;4#fcFdkVmnQ{O5AAz@X;LSGq8*SZ;YlMqaKLYRIz}wxc%-Negf01x;)<@u-0&#cM znz(GpgSXBddXVqD_?-%YcL~I;>bZ+^_OKH9DZ4n=Bk*nxJmJwH#;c6x^_cj@3W29M z@X&WqcA5TO>{=VjF3#`>yhkAJ>RN~E-PI=EkNbbSLg2j|_`r%8l-<>1b|K0x&g%%g zPXO+YJG$sP+;jL}mpg9TGYtqAr*s6~F93(mvJNeVx%T4k@LsPtnr*}0bT%5iUc!mS7 zkPjxQbnT}i2^VK>1U}S(x4VZEL38Ws4|tPsaneTM!yR~dRy;an@G@s;YBNrpuMzl2 zC;oN~#>?(lP1(h%8i9{?;897iG3U!3TAXolmPX)X9eAAx|MR^{nO`ZpI6))u@eaI8 zrDVvS%dWV_oq3N@oSPB&1P5Mq4h+)1!k61ZbFgvZw2Z(fIq;@UCovw=Y#0?@oRJau z6bIg>8!m0_vCe8@jV4^2j1l;>K-@L3H=H^(g?IHhQl4;e9!B6Z0&y$m6g=O2*B-u@ zad8Sp;IkZf<0+>Zuk(65Wfx~(1U|=sCss`N<44aBE>64%e4Ybu{^bJ3W1H=OE0seYY-bC*$Hwi@+B<@Op=T_T#s&Q+9EZMc_*v zc-%M`CMo;2Q-q82D*|8cz?)Wh$au_FK5QaRtq6Rj1NWY|!+6Qdyh9|;stA0Q1D`w= zAJ8y0gwGMjKBdBo6Dk5<>~Oy=yRhJHx6IF};ubq>5%J^usR_xI~@MlDXG2>cZX zUVFQLqz&8m31t^&Pz1iwfp_d4!G&);;yB^rRD7$=$LME>4*Ue0w178nihlWq0+8O(0yHEfM%@fw?+e7O)+wJu_N<6ob?4lr!i)1E0zVLlC%0<^ z&p4Akxo&s(XLIf1REWS22I5x5+uP~dt&*4d)`_zq0)HnEZ~OSQ7btt%YnPT$c5wnk z;D-Zo&+0sFAbTucyJz8|oP>*W9|Aw>z$YbM0^ICpX5_|A6uaKVX%B%PbKq<2pR_Uf zteyOj5@$RF{+op5ntL*Qo}_=q!0 z7*EUIfpBq7L*Sn{@U*e`m@wJ97U!)GaXLfb=biWuc!=8I9ZpuD?BYy@z&~@~8Pk7Y zyjLPSG;tC`;9ofKL0$ZXPrZ;z*~R$_fq&(|N4EAio8Bk>AzYlg5coF^JTtZk7vB7o ziQVeNSqp)G>%d3OzzMnOu&L7yQFd{{Lg1Gi_?SA_WsF-HRDKZQ;#`HmuQ>3T%fAFX z!5%J#{=s)%oTd=?_YS;wDJZxPPs%olvWqhm0{_8*XFOQUc&AgDgo~3C0>2)JyMNt) zPuMzGc=yesyp|E?B?Nvm5cl-0UI=hB+%8X-1C1%WI3*$Q+YWrj2U7vBYvW@tlq6i7 zjS%=92mV?oc*glQp%=V&ns9L9_L7hT3%XFBZU z%lv>Arym6VYXI(!DYdu+ZGFTPNP0xs#hC|z-w(iDR%rJFQ1BC2c&ljgAB2mO4g!A= zh(~^LYd?VY^dR!X=+6ij=Nkn6M<8xB?2`tGVL1drY7c5lxH#1y@W&4P-X!cUGi>~a zH+Xg-&N2x6F9%+(=MBi4#l~MqI!W2Z2?l}x6Ns06(Fz4T7V)wLB4P*^=N9~UB`XlO zLMLI9ff7KFVnw;biqi@L_c-x~!?^IpzG_L?#Tf;GXAQ(dTRw-{)$XvNwLd6CxHy?0 z@FxOstMVnB+n8HdVa*1@#d!pQ=Lp0-Jrf=R4r4v^clgx=!o?{Bf#-DKQ*(_2-1PT> zi+Ket&K?Lnw*y~y8U?TEakD!VpzPwrfxz=R@Tqt4M+^);q6N2kan3;C`5pKO`%H+z z`;JBvX+NaI=>ma2?Z8K$Z^qfvH?f@-X9@)Vj03OvGwc-l3Ln1hN6Icv5(vDY120n= z&sUm<)Kfns5iZUT2)wWZFZdc%ngzQjQ17|B&L&)(8W4C92VS9YX~0u${P`8pgp0ER z0)O6t=lLxf@K_tqQks{6;)H;}Ukt?E53j!pI2^=)@%GMbo>_@=0Rk@`h+8$fK#y}> zL)`LqK0$>SrvU_BG7$GP44ny}X*Mytc&HR-00dszftPwzneifd%TRV<{smsvflr$2 zpO6p9vWRfu`vo52zz6Tj%GrBbtq2#EU*P2(c(E+I882{s6XC+`3%sHOU$Ff!;}ag8 zBU~7LfqNZzzvY`4?_By7!iC2dc(?-~p9R`^376}M z%kY1{cezS|({xRM|26-U7yE+ivG4x{!?DXX#8n{JZ<3(Qe43amqj;8&qrl4=~%1Y!J~Sgh+9~Kq0MWAFk(|jdyn< zQk*T&$ltpE1|%$$;Pc-6CQSN&&O{@-=gG!7yX3}svVDgv|A_*P?Aqi*AdTv1zX#_! zhV=hniAHw*3LiLz?9d4}j1B4kg%XYI_$`dJzFKK_6}KR4QXC=B$WDde7utMe`>G!^ z=|4T7k;xk?FxmRhpG^9HbVMTuev}VLdxz8N-wMxgnbP`yWke&pmE6oZJI4$sQXCgh zNY~NAxbA^{UHG4OerQOfI4Piz*0?cSfi!1qMvlV6A$DoSApwmXJr8Goh8+F~&j;9~ zI3J*q9Xr67LG@|>C1OMRj|OPuh@mj}SkK^PT7%zgM>)l*0F~T&nsW|4^#YONK!8HJ z+b)A)$mDbCY{nLylts8zoq&Nnkk?HSM1rmozm({Q1c_#h8=b@3! zznsrGn|#8gkpBwl%KYpEk*={Texsb?7dtd^-Yr!A_I0{u->OQaQ2xP5cf4n6ADDvu z1efWK`*XrfB8BY_PQngD$6l1vsy|>akwWwn;PT)Mz zCWX(}$mRokGTCGxPE>4CsCyIN+XnT!JIf&0P(?7c$=Qbpay+)>O@n2`3xA{7S ztk=jPhs*PI4%*K5R(N`abj?rO1f=Poa~6)K>lBJ!A+6NeK>5b_ZaG#GDeSyP_UQ$i zIli&4=d^E#6k=W@M?5!=a}F)ro=D;3HFEf}c0ih18M1mEkwV97WTzE7nQWi4CXvF# zYh=$+pK@utJsLx#knkEgbmDj>)9x}U{JTaD__!R9W+v6|G|$0=de_LIx3=(grsG`P z^lV|>HL_Vaj+%BGvKsfmEi!vd5W-y}clMmd*ZF!AJcewO!nJE;`*vNpw5{_-5h*mg zMs^<-&Sd91wTKjkT_byca)z(7N9&733c0S4lb(En$??;c5-Gg8M#k@0!es0h{fHDw zT_N3{cYYa2d%Sg@t-Xs#Vbc}THTN9Pj9s&HasLz|T_LUhN6tb{SP8>t--Q!=HDh#m~(}6%}9y`(u{pmM?XWPkmd@R8j+^} z>}@@d*O^+uUT@p&R`_y-v?k|)wWqJNnY*8&oI;f=Wb*1I*C}W6vJPJpDJ;1{S}osi zPuFQB9KekgyR<@(D`axx{--%--41B0Y*M&!h4dV1Ity|(z&qqQ*dDhOY*J`(joj64 z9gq!e^7VT>-U=hGk!N?|v&@iZVro!MA;UHDwf#q#+}7|bB83On$dBf{&gAKOpA#t* zxJGXMCWOfimtG`N*l&$|Z9g7lHP^ZIG52gCzBO`T+I=SHXPHkqh4a?PH+o{bH95C^ z#eGHSZjD^?w#DR1i|4n(bZg|QO}G(kaxR;nk4h^fw?=M={*1{rce%8}Z)@Z$1-tpl z*yfZ|sBMjWZ4itHzS3^_{2-CSYHOtVSqyWXyKeA!D}=U29=cl(a{78%{r4!RaM>EU zG7qj?TiU&BnTuPz(AXNeJ$FeUo7?2(L+I1&o-GWvM$W1UD=Qy4z1+7%3VE%O3-9Bu zfXO-k${iwwx7NrPCr$#=sEne|Jx`=i)*3ne2b>SJu&;B9{cHO6bqZUpk#Bvn63E6j zxv%&#$|*#(Mt)eM43JH2@>H=aL<&c(k>{`C+M$U}e*6yiY@w$$@=$s{AWiFg>-Jj8 zDa>?m(jAk~<|M7qW9nJAh!j#fI0@w(2BW6yLoBV;a23x|g^yOq==k-!fU%#vk$=7Z z2IUkgS|L5vR)j%1c%H!%Df;_uL{6A)?+)851M`-cy}vDYetUfgb4}MWB(2m(`-l|& zTFL1yI=m}DFCpnJJdjuDLR~AQReydwWXp-96~8JEXFF%TT{nmnu394-w!X%tt>1kokwQ}|Wazjn1A(+#eCVhl-1>x}R!A#p z;RMdv@-3cW2sy2go~gM;QBKdqU!tkB!b@x9_R+YaGd+8A%_T$%C9RQPhL-};^s-N< zp-Q($6Jet@a_@I@nB29FchH20*2wKqxKC|zZf;S4ata5nk*}S>=ZYb>mEh-!(9as# z^AL(GL#B-RlyVC5tdaF5z#QH;#>e$%V~aTPY2f>%xQJp!R=NUVukb!`V_}L zb8pjI@oHJfVU29Q3HLAz*|6>+Dy{Is8o9q0tRQ{luEat_3MH(On_hr5l8;>9p7(Es z4c5p8JAP%dZZy}Y5WyPxj`t}h54^gbN-G?&MlQ|k&$+NC?|umVtC6o=!d(G#Z@0Cf znUplY8o9MzUnVzh`Po-mDSb7vM$$bX&8()%kF$wX{_=!)mU$LjO9Il2U~^k^BvQPJ z{jZ$0ExoiC3(ZJ7l%%fNvxivRS{sIA?Gx`mdZNe&^CAPRvK7VnzQ&&MM|7Z&hb9 zxD}OTQhu0y`dUKsZGSTv+=@!F-_8+0=C*64=Y_FM2DhS;>^Pu0=WM%>>r=6!f^;4H z40}*G=5+0O?gZsjtf(NZ;oC0(X&mn0>Boswtf(Z1?!cM0A=7R?BvP@Wl5G3dDZb9c zGCb4H65NVPa^PA#L8O0sc2cplRTc9_?eiWL>4 zYxJ&HiF6I=!XubsMI||_ayBL>FXvHHv7&y`9ryb*SckZA_TY~DDF?4-6)Wl|;dsx< zX_V87tyG%skYYsz8UEdXvp}xKdmH}kqE4Yt|2^ zDW_{%cxTF~SW!V*oiA4f(v0zKGk8UzSW!u)o`<=R?>f6S`G|5VR#cK1Jxg%T^rgJB zp;%E#4*s?ekfv7pw<<|F6)P&ql&9Rp#r(#7V*~4)%#E#$O&^l_)HnKoJhrrO0s*6<-nMkak~dxD~c7BWS=2( zfHZBW!?JFaQ?a6gbWQ#c&&=4p%#~T6*X@cG6=Z7Jk%wRhrYK%#>WkU=q@iL(1!;}j zafC}dVh6A26e}voI zC*Rz@&hgFpjD=!FCAl{zJRN*5PH(w;l5#3mRFWs#l>xGeo%7hzJwz&2RFY@i-vHUz zCQn7B5UE&EN$&qW5lGW+w|~rcNU@@R(j60Dcs;GqV`|mnb+%$f{Up@K?`@!@XRx$Z ze6ydZw2BoKWaOia3&7Y<-pHT!N$x zC#f`r?V4EJriVD)In-iW6uAi{9R_$?}h*YfTzsSvha%s(9ma=myR#cFo!~X&k zYg&BhzyVVzr(#6~X|*W)D(7tc(kDbJR#cFl3D5pQIXz=qXA-GcQAuu`o(g0myhEO~ zC+-ocSW!uy8}tE?rk5RiuK|&Y6_wV^Xu)2RD7x=8zdZOvU(fd6;OPtBzLrh ze7>CPd+}UT@u`wrTV)%QbMEt~srXb$#x=nwuer|XY|ZF86`v}}eZ$bN7;^LKnnWr- zRgw!T&t-Dbg(XBPK2?%iBL84=*?`GDQuC>jd}S)0ATXtU>1u5v#Y?nG8}dYdj>f{w zhsq708HRj+RwHLup8%v8`zB1GRiu1%_Fv@x`K{SP&bMZV^ls5@@DTmw)w_5DT4mrD z(A8$G(!9=oc=r{0DExQ*(QE8~3G&ixrsJjAHh+E(APyy2t0caN4JZocjn9~|o8@E2}d#mVSNoMpc z2~0to9CR8dLxv2lhb7rJxgVFd_eCzPqKE%Q9$Cy}pY{_er})WjttIsM2RCm`OGsU_ zh{@o3Smw+;0Rz164vkrX%U1h3#Sd+3Inz7gaS)R;?JOR!ut`M^i=3{r8*%uG!h7rb z=mngL+oYn01!>L85B0+xERx^sppf{*&*mYvs0hA{9OCC*AQy-;aZ_>n^k*cYNWxIQ_SCDtg#Yx~wkG zorThxHq>bvk9~?B7G(Gz)v#y7#tG=*2dSx?)BnTRTK`P_5Jxc6hEm$2!n8}P=wXr5 zo$Fa#<`lu4?k9I}yH)hCAmK&b&pBtC-m#qXru{gy%c2|uo^$#hle6o!BvR4CGH1u` z*vrgyw!e>)1p7J_JuJx{pWwEVsg=~2TSO{)Sd!h&r*qD(webaWJEx+D1?e7@kVrY* zBQ~StwMj(}3({IJbRdw=V69m5?k5td=wV3?alNNe!uBS4yQXi#>(w~8K? zQwRP?YU+y4y55Pj{o-Ha!QRP?YUkIj7mq?s`u{Rxl8*w?A(VM+FR z_YELTt(e1LHmT@gNe*g*8#RU;@G-ucZj*{0mgKPf2lzV8i`O=(=wV6DKZj$y88zpX zA5S?IJuJx<-5N64+&Vy{qK5_P{%PG@Anoziee1d1L@Ih%kgk;%TT@Qgib1HK?CVtY zupq6`9j*Xr>T~3Mo-rzVSdzp0o&YkR-EN0|iw7d?oQfWnxAOvYzKDtcIu zt|eJ;o6xQm*P@NxiB$BkAXA%6OM?wUIDiX!xPAtYLy8_2q_ynEUtHRyl@chYqK5^U zysy9j%9*@-+;AclJuFD8_t+4=w>>}mlSoAm3o^OShVq=VN9TS-DtcIup3fiRXaa2) z_|H0zBT~`Bk~}dv6-XmGjz6eFq@sr<`Td*8Onw(qnMg$sOY-PmoDZ3tN6LLfq@sr< z`Q3J0e;V>iLEP-K+pVI9C3&=ZO(qYQ>PDoZhb8&0{Wn^DrQPo)QqjYb+@5VM=iJ(5 zFp-KLmgI@aeV9D{Igdk%9+u>u8Mt9=O1tYmKR*>c{4a7}Atra13mgGm%$}@T9QFh9y=wV5IweKAu zO)vX0-+Uq!JuJyBZ|?yTX2;M!H&-q|q@sr<*Q*^iB$BkB(MCm63AvYc{zP7k%}Ic3L}$@2V@3SCVf%@d1#gf9{{aD*#3EO7d>|CxJB2vY)2#4!0tCC3z}$3nouyl%wlZ zB(Egj&EjG5NE_aXP$cia$Rpn{c{E#T%Be_RNscZ31(Ty2@ea2lc_o>+zZ;Ndq;B;> zHOi?-UP;Dp#1+7BY`31c(meJll2?))V>$uZ-zM9?6H7T2$t%gaGqwO}o}Y2wjV4l& zyn?j)cY$ZN?*;RIU(O;@QMH2fO#h=I>{C>&B;Rekm2)1M|C^80RIMbB{o?N{N0Z1{{Fhf>8_uo^InCT8 zAuFwUHB~Efu3sDiq#421Wrs(FeVv-B{m%dDtM6BY5on)5Iu)MBb^1cQT-bxGqXn^fGUAlEp!r|dh__c0!Av|EI{Swrw>Mt-}r zQwn#X>r~vPB&QYG4J6bId`>75L!{z1CE0hx17J)`=+^cvCWE_8Nltm{5|iWm&m&TC zo06RPZaR?W-j3b)IgyIn6r{V`)lVp=yW`O}nGEhW1!<-HjPom#vs1)WA{DnO$+2JI zQ8;sNhaKfrjQEql(!WWvOBBv^4B6)UUn!^JHU;UL`92=kvP+Pk&4?CIo;Xsf&8hb{?Z3@y#nmU?u zHZOOQa|U;tlAM_`o5?9zzamm`o04n?$APHb!k+~vQgNG-?A{&ck)~(2U%?}_;x;AO zxnB;>*{1ibgwuG(CH9YhLFm zZc~uffQmhUG^0tM55lOlirbWA#tV}ur`o#Tw<*a9tA;Q+`W-$?qPR^- zj%t(vWNy3l4UOtVITg1l$w~co@O6&9x0Xo7ZA!B3H*JA5&$3qk@cKt_o02^I!*C$Y zjPXDoZheZ|lw^-j7I101K2?QEtGG=`_P>t)&D3Y_hP4$ z%R^4MR^X4nS)NG6ZA$X!+zUXO75~1!?-8lEO-WvSs~MA@)#Wi>ahsBS`vCTAlXG_n z+h4_PO7hz+xE3_z`P=;DRotc|-)i2A$sJ*J=sFd*Dam)5kbB#GM>!R@Dakjc;wsXR8~4(#(Ky9z{)^l*lgSNZ|Cig8 zIimPy5JO7c*dp-k>^@d`k3o09xsS!pH@Z(2yD zRotc|Kl{2IkiK4)&SSjdHYK@n0zL&>+5K~EcogMS+@>V=zKc(X7B;zKS#Kg0w<*cR zZ{A{Z{)$#aDsEGftK)hzxx893k&4@tWXR7afoy1(w$vGJ@rv7&VI*gFVF7{y@JJU8o8A{DnO$&1U;ayPZfuR1Ox zQgNG-G%wAX7Jocj2O<@>=_lPWt$N>}6?#n5R_BOR+@_y&S#5gPfs%fNrL|i2*iEG3 zHU$~ovI_2N+E3o-M)!9Ssklu+dK!8%A>A3w>8V|MD3Sl+)z=}H4gj==!tS=Ow24pi%2lzVf((7BHMAkq;zK8YdYN)6 zR#cEy=gPlv&UPJ!5vf>FL3-wY)0=X7X0_l|q+&%S`R1BbAWhHSS)&r=RII2ZZ*?sQ zr0Hds`aVabVnrqSUY1xU4>l!tGET9gl6?ElPfYIkmG>AGD=Nu%Rvlq-_nCuKTE&V= za`@48Or|~4o=C-tO0q?{AAvN_l}2CklUK2#l8o((Enyh8TThMjo0Ldt{zzHH1D=J9Oq?>Ru!`Fs} zXN)IOv7(afvJuyxruDV%GJ{CPic0e2imFT=TKqhbiWQaQ-aQYP+*ES_mv7(YRKj>lZ(96?!>{G0$B;P4AgG;-6&>~+>&5BC$ zt%UEGeEn1fBLBk+to6fi&)CdrVoxxs{2;K*x#lT&mib1oQmaM!-jS z6ZiaRMF&Be|j#H`2=3I7}#1s~x!qYJ}t zN1|JZXagV7_R6nYUv`p*v(7^zvvYiaGxx+Dtv_F>^rO_d_>}mF9HYZ z=v4TK>Jga1%2-jEuEENd|4aCi$>0~lB11L!=g{i#5so)LED=5;aThY8BYZ^ngpa6R zjtpZ;!XLvXhn~0r3 zh-i@kpKhVC@DYwTJ`5{45@$^jSjo|8@DbJDnc;_%l)=gpzXHBwGWdnH$bkC^p>gmL zjyFCGD>-@~d_)a$WSFvdEoZRKt%NU`4F2DK78!7^6IvfW!tut3VI@cQfsY8RLqquI&_?hPjyFCGD><@1d_-U+M-PLKsNsPbtcCHf@-;l! zxd?p8T*HB2{Q-x%P#pBa@y3T?B}d{JlL)M2{M+G~Q6n80=Kcj6d%l{^cCsXV$<81I zy|@M(>O!$ahvSV8!%B`E1RoJt$T__HE z;dtZ2u#)l5e`iKuB}b2ekEpSZ46}D*OEs;v(8{~;B|C!<{vrbob)l``BOGsh7*=v5 zt^p&klB37LN7Q&nhM7xYYuT3}SLP%5lAS>u3=kP`s0+nGFC1@t7*=xRaQKM8N{-Hi zkEjWO8QguUKwB~yTo31;g)f;5{sROe0}geeZQvsuZ+sY5a^y((h=8z}(G%e#YEobZ zYv7H-l)=jK|8aI6U{VxY`=6dA=Nu$RT6U*rcA2~^VaXs#a+VAtl9K_61`q{Bl8AzU zA{bCXQB)*|AW20)KyuDGXa46@Pu0G5TVDSk&vWbE@04^DAR<7a z0Yu=f&TLCffCt{slN@@1njlYdCZ_{1WO^=i=cg=qL z)ZPjO6A*#7I+HiO01v#MCpq*AH9?-_$Q#sz-?T-bUo-tvUDK``y?BL-bAZAMh`?K& z$(vq)2j0(<92!rJD0YcVrvDXw%N`+c|0F%h7{V|Kyzw)?sE7zqfB_MBt224i3-G}E zd6Gkn1bLDpQ>Y0~wMQ^|mrq}<4?IQbAQ1ryH6Q|SbtZ3m0UmfiPjcvWYJxn;k!jR~ zr`sdA^CWUQluS};Km39>9uWZwIv@gXbtZ3m0UmfiPjYAyH9?-_$P8-2Z`&gn9j=a3 zYw1dpYIKlw4(Wv-5P`QklQ+EpUtNBlb# zZ!%e^vFjn4w;UZLB0wPyMBuH?_6Wu^vj(aN_s6xT zgG2-<*ntRqL7Kej1$f~7JjtO2)C75wBcD?f{=yMqc=W7{U=%3ECodvEVGl&$tA5#LS^CX9sQ4{1zj;y36yvh-wbHbl8g6l?? zGjx!M0EJNyfwwx7H@yH4yq_mI^er_(p5(}CYQk$A5jLFrSVl0aEgeb+i3m_Y1rd0w zGkMbs@WA_dl0)B76I@PB@+3z#P!rzhh%n+jWiO>s3U60yK!gTb;?9UVsPQ&yyV5NKKF@IkJtK@ODRp7ha@fQ*0jY z&dE&&i3m`r1`&9xGkMbs@WA_dl0%!R3GyUIc2E=k(-Gm-ed$-+y%po=AQ1ry+8_dN zbtZ3m0UmfiPjcv2YJxm}k)70pciAJjX2lg$=MY)(A{`_mK;aui;H}Q&O)tO$@8?Ml z{Z37gCpog4n($xt2t7JvqOTjq<)tXD?r(hIrGrESD3F5)yw#b!=>>S;{XEH`Kd1@v zBuDm86W(i&V9b803yE9qPu6(e5kv$iq=N{&shGU!1$f~7JjtQ$)C75wBm1Zc@3%*2 zyDD2io1oc9T7G!98D3biU|HrN9iDO4p0yX5qPUJdD9E%pw954nhRp>P+7B0zB}3p5)L$YJxn;kyF%!Pdg&4fBUkE zko;Oa9V8+^fgwcTt zh`?K&xtf{)54@izIm81SpzIy#NoqpC>tVlA0h-a^w;< z;meK)U))Pn5gzILBpoCoKmjB~;H}Q&O)tO$@8?Mlou($plN`B1P57!K!sfoTd&fqp z%o#pXM1Vp`h`?K&xq+Gh54@izIdqnqAWw4S8a3hTjtJlNq+KHxp~l35djK0Ap&o8CU1HH9(X@ba)=jrkS95EkDBm(M}$o+uck*BUV;u1 z5uo4`BJfsc@}?Kyf%o$yhptl-RWZ*?YbdI27IKTmS#HZ{Rp z)I{CXMB*F~7Dp#gggRpPPVKAC0SZka0&jKZZfXKN@P3};5N~Bcp5$l-Y9bjO5mtY4 zpCVKf5vl|$(?Q}Kpdb|@@K$H?rWfFW_wyu&?o$)wNseZsCX(3^VRlb;rE7@@rGoY8 zAQ1ryS0Ms#b>=>50zB}3p5)L&YJxn;(Ja(NvN|FxxHL&cNccd-s()=^a4EaexBrTMruMl$J`EzIXFB0ym+MBuH?K;bV$;H}Q&O)tm;AK*z2=cXpalN>EV zO{AzTg3IVQk84iW@F=-14wyyc|yt*Tazbqmw zTe^V`5)q*I7b5UhXY!U5wb#VEl=Rmkx%I$5dn&X zAp&o8CT~eW9+m)4LAV$-As(P;Icg$h?GX~54nI%hlgj5%{=}3?bdZPu#l#SSw>t9{ zH9=nc0iJ>|-xfo~sfm`SCK7LtV6@xBIh3Ou!FAyTZ=NCo6dgkZzT{2bl7hVU1No^5 zKT1ugBsI}QY9a}a2tC$+NZQsYT`R}ekca@q$q<3JI+M4gAWv~jhbtZ2~!6MWIco~JuQWN4yj{2yHcAr#8ULD4ak|h$lJfrzTRt5n*K|gCbb>Y5!qf7$O1`Pp3!l@icjP zOA7MT2KeZ(hnf&iax_RyB;bf}{h9d`!FuMaos+L75dn&OIy%EA_5d+Lj>OHyu2j^d1?c^jKWFOgm`qLQEDO)M}+k! z;#7ok=hZww(KbZjtC<}^nyIK0bWMoRBA#MsfpI4CQ`!@p?(_qeAd&wdwU5U zR1pD+)FA?Ire5Ckf;_bWUPj@{)P#7FqqV7t)Urn~1`XUv{Xfj-V7T^jUql2bW`_v8 znR<&*6XbypaDT$ps0r~Ti$CQQsbh~2_r`12Nn5N|_wD18=|~X)irygtZ>C<}^nyI_ z0iNV=4QfI>$@T#K3zPja*Y zHIe#`2-{X2k`dyPw(p>WLMcV}kOw|cm6~vUYC?6Xi8iGs(!>#AXN10v7(0h5@fGPH5dn(#Ap&ovUf%SA zJn#WtM&X9kgm{vp&8dkrb42*!w;3uz;a}A}K#@O0;LX&_n_iFyKETT;+?bjWPja*+ zHIWvM2)~4VDnhXRQaXsw0ly3Y5qLB8@}?K$fe-L93OAu9#FHFtO--bgBf`d2DJnvO ze?A=~BEXjhAOdfuUf%SAJn#WtM&V}Egm{vpZK;X0aYSf*y8uP7-W0cW8A=C<2=L_s zh`^hvmp8p24}5@^QMd&)A)e%Dduk%>91#{~8KKUh(4yURkca?ZLVyUonR0m`j{|UD-_P=QrT|Ai{WHXTI7CIu8WmN z5=F0t^lyKrERuw;A!vSYsqW1DY!J<6uE-)6 z^75TIirkm$Lq(>S&-|?rPl`%7?mu+iE!@YH^ zA}@w-OA^YlHKglKHhvhj_Jk9q)+jQ)%vwiYEy{&1vE8K1TuDOtw2n-;(^Zj$L@l9M z@&Dm>-$H|@DzbDBb(KN6^FPOQ*L{7dV%qDtxO@>6?nGOHAzC*v4(WrefW)vdA1PWoJ4P-oLEB|^HNVxOx`(N z#^e)GNkW;hhIC!>@k@g>pZj0nM^Gzfdik%0G;&ujrpWty?n)BMdNri$`t0`!WeTux|_C%sD~3FWmK(#WzY{a$u+$|*@g*{qJt zTeF{v`7qNkNkTcShIC!&-AIuK=kR-im=!2<)sTja-vDhr{PMw zE@MJ@sE%|G>nKUr`D%+L31y!;GIOn+ioD#XyCk8UQ$xD0roOMpBi+B3B$R3D$Q$!B zD)Ly~rzHvHmpbxxB`zbgR{YVA`ISS=3Y1mq$eXVmNhe=WR~eK`YDgol`Eo^G@^z6h zp$t+(x~>(vqsRl_^J}E&EtEHENTccuwc-uW_ED0AvPBK)I_qz%V*a(8Uo1sTC`Z(h z*NrC>dG!7@r_+%)PLtUi>+OmBKS~nH7Gp}0ob)YBW3gXu_LD49rMJH$Qm zbp{y|%Di-Bt=Cs6GW>EONkaLSjx-BxS7fo=>@WSxCf92o0uxaK`cLb;WW zEM4mxMdpjVE=ee((viupl~H8z8f;C8-a>hljx1EFtRgdYQ1?$Ld(x35SA`UryW43Q z6Uv!%WS-RTBN^r6IRYz-AWm{pQc-lHS)EvZPPxXRoQ4!tSR<{j9J<66te>5 zGdi+tyEj#D^G*Ijl28_-A>H5I<1!0=-gLP?N@6oo#DsDe4H@S-U7bkFN-w&fjYmO3 z8HyJn@^D2jTaawYY2HTTxFuRD9v zVr-$TLqi&Q_S7KebwNH{u}YFquAw8p8bG~uy~Lz3zi@R)LK%jJbX{1wo}dRzy7r76 zBS|Q)(2(U1F8r3F(KSkC6I+UM8cLieluc+z*SQ~`BZ!~nU9P=fjg%ymL+D8KQV*B= zPLfdOpdrmXH@R?2Tq~xl+gwRP`GSUYJ=lDJ`e}{OnKg?f31tZyGA?i7d=yh$W$yd? zgOY@D10Cu8<253!bzA7hLrFpzfsU;9xv5D1`-+6}03BKJWA;+5nC0toUQWy>r2Tbd zsj0^mnX8ZT6Cj5^85#riR>iE{hL*02GZaZf%wCZxA@g~rZ)d+1HFhu^~kcMf=x65blpeRJ$| ziYeBR`{a+0%HBdETSuPR^`s*AZ+=6Pkf7F(af#njyx1Bl{Em7rgT%9rEVQw+A~SYW zZ|){yRF`9G4Rd)K!!WN#r+tRdr4miLlmT;c?Ew}%9pXu9h+jk#e}VnEHiA0B6F*ss?hySE65|cfB)?Sk=C=x3g12%6B4X{i^-qI|DS(| zEw}B5*eDwfc~*O%6n-=H@rzK|#?+LlOpVERc#(ni@Y9e;!zOcCg2=@tv2*R`TX}_A z)HqVJ;)e2iB3p20&AMaw^@U^phd(^#`REaT z@e!owoq|0isTpU7#nM@2_DJV%-K{Y74m}&DU;bgsN7*)gKO5)yX zlEM(vU0`}yBI!SL%glG@u8gTk3L}}Tab88{*uu#*F+!T8Fp$Qvb^Q7#Vj4%AbDGs6 z|2Zj)n~#)*-4yS9>~CMgW0`_D&t@mS}%{j+|O)TDNSG_It+B}wDbs+*G3q;`RH z#~u7ll5Y3&KPd8_Q@cPKXWqIZN#nHlpd>Y^T_9ao=WQWUtXtQWnpG5;{)<<-HI&Uw z$?w>T&+_7KNorEN5Hs%Mp693thYSc8{Xy+3J0z(ohyl{rQrWG}bJLDXlGLPjk=)no z14Zu5l3$XVBqEURxS8~T7+VSMyl+TSla>S0xK@B|MQhz&ZuONUHEB5@TUM`$NM3%4?KbN? zFO}feTycGB5_(8p9K(0l5`3P}@?M>Qig{;SQAuhNdPrXAHipQOVua2Yq8qF= zwwi<!gZ!E+##WP-Lo&k_ zdS;I8U~zrfU>2n2krhZ+4aqXOcq6kUb-Pk zP0|U;w9Y3KS>?96XKRv9NLCztN0BL+ddirZq!W_0gBulDbLpp&)Fhpd46WoRMr%HU z&2CFllXOC|W}oy~sea~)BsEDVBzy1sLB)Kkdnrk3l1@n08N|J31XbV9Pt!rH{N5@hR2pUd8Al1_gkpI@rTRwr^uQj>H-vcp^Z71=(odXmy4 zosg_fRV6Wl!>Bf@lZ>fJIw9Hm<_IENi}P&NnoAeOKBP%HA?dGQhDhH7 z()g8(cX#VgIkj4|6_{rEBp$=_o%b1!p z4w8L;IA6`I**o6}Noo=!NRIgJz9L`fzzG8}wwlBUlC`G|CNj1U zm2NLdO=1MeD(ikyWaT;wB&kV^AepxJT}4(MkV%r7#0ZjA8st=DrTK>>sY#3=S!3@m zMOLrOwx$>%O=1Me$G@6Eq_qz<_Nn`)CNY9!tpY?DFNk$pW0rbf(IiHYZ1DLtB56mV zwtiwu*;`Fw1j+tykv|mMsr%mNqAGEon#2f_Df1T+Sy9A{8uuirNsJ&_r77?6)*7m` zQ|C zJI^YwC&-wZ^ahd@o@2+w8lj{sTyiUBMU&n@GMI<&NEYdTyQU;H=?x_7bgHGuTF1DQ zhGXi|8%RF(9lrrsG3%vHkR*K1Oy>_(dv-68kBc=_^`?BI`wz}}?;0ngiS#RIRmcJg;8>R7P z!9Gt6Hlu`6w#BTHm^|c9Nou@VAdSkCsKmi4?&)V`Z#CX5#Eko> z4iztDXwPdXZeC60PiVYZAdQWsepKhVuFNbMQ{&Ad`B#fWiu`kcdP>rGvp~9CP3c)V zHlKITaOs>_eHw2TNaNz7I7OZv@wg;4-Yk$UtK3;hyVFb_p_Ubc8zrgnW`Q(vUgLL5 zF`q`(;guz+@n(@c{dr#1+vC&e^};$&jW>(rg$a`tdFExc5;Wc{lILczuU4GT(>V2G zP{!1Fvp~8t&dVfYx?Q*DNK)g?0%=?sn=DD=!ZYe=P~*)ax#!wzL|Qxb&UO>uNMqkdzB^d%_3q7ylGJ#!NSGqZRv0Qsd1c z`RA<{iL_Sy@2-y|sqtokbmu+F?>}OvcIW&s_W1Q()#}rDvp~kZ zbx^H@xJg5b%ie0dSs;ys(p)C(r^pm?!dXB8wDZ3;!-Yk-}HqBLJ+N?2>)OfQq_1se8B^oUB3Z3$MMYLxt8(%hZx+cXKfj>JZZ%8F zm>O>u$(p>?%D0#^%O$DtW|6ECeOZwymwuL{#+ya5)&YKRx8}22t#y*rc(X`$O)-fS zSDDeOV-rbgyjdilth<6pdYYoP>!AUX)OfQFq!dPmZD zvq*a1<#pRk#7wBH)~&{yMY8ULOGH}lv(<0jlD*YF)i$8WZku+< zm>QoH$>*o>wPM8_x=rOyG(IVkHTtDrpH)sYmN7LxDUzwr_M({9l^rQOTap@|6v@h8 zH&tZH3o|6C@kx=aIQXt2{Y}&}n8qhXvg)xEMTR$ykTEqrDUuC)Rw2^5KI>&v9)`vz zMY7uY>_iS1*GlDCb!1G9Pl{ySTLXw3D9GwFnn_aQlOoxtU?n20U9)SRQj*m8q)3MI z2Z^LnqSh>?o)|SgDUzvWej>(N3E`c}70~#kNRqFm$jaWCvbP$a6v@;q-zhS@=z=6Q zJ}HvHiIWwXTwSerjZcbXrHvOA8GUW3jH&TSk@TfJtH^{+3ni)XNs&z6H%XD^OKJ^i zd{QK9)_S1Gs$1nVwazC+vd;Tm6+X>H+W8o%tq4!AI?qfPJt(*ixm@Mi(tpz}G4?O_ zm;66ys}cX6;C861h^+qYI&ffe^PWS7^&MKj|C0mC1@xt{qG;%a=h*8+XZQSquPC(j zu6<5Gl)7>>9?29VexRLH>!-NUy5}jk^5tc!$P=o3wJRb1|+q6K_gEar#M0$5`_Mo-t^2;*a0AYqYHS z&g-;izs+OXGFoZ+$&+1%` zb{-)$z)=Q`9{lkFhsM=c-c=f>x(R27#}vF}(0GzH7CJO858&sZVmuzki8Z3LtN|`F zXgtLlAKNwDIc6SK{dn+ZX?ZT-H-pC0{PCxD4dZs&K&5f6-6E+0&NFEA<&PITG!A7b zP8!xdYRA$$QUg3_&=5B27Y>aFkMk|ox?Zj&o$z=U2>ciSgwx_Mr}p#}~5WK6|nc8y}uc65)*K$&Oqs=c{H zog!<1R}C7^u*SD`4dd{(4%Cm5;#_vlTQAQATx-xEdQ8Rd92)1U%_R-FCl`_$;9rBr zaQ^rQhsKdN`EAj<=C<4v&suyg;ADe_xSW2pYq$#uZ&38Zoqge5*$?ovL1PquyvnX& z{QhS8TK~DZxG8f#z}*IoF|4u1t`YZkp*Q7t#JyfYWIR{{d~VQqku}!ZHH_p%LrJ5k zn3qzoiz)`z0LL3NUS^GT4vjl=+_E3Wg=5S3Al3ly8#Ko8$G_M$+*zxRQ5yF@TrD-g z1qY2+`Qwdt4dcQ7no8qRA=MA?!$CtlCT(_TWZFQr>#=+G-Gg4)4{*joV63lx+60Jj`8CiBOCI5g^aJF7G* zP8Ea3^8&s(XiQ;^?GBA5Bl{_hT9ehi0UUJDn8q4^Iy726P0t>&bE#{H>@N2MymZi* z!5X_98YwwWDGhJ=EPN1afU6D~Gx_7c92(W%+@dtX)5Xn@HNam7jajU**P&t6xmoj) z{JR=caN0rRJ=WOo(5TyrpHD4~N-bB)a{yKeNgrTTzb%0#2=q_Xw*;sQ)$HfKwcl<*Mr6*AE)vRBt*o+PyfAG%P2x?pgJo4X!_EEa!gQc4!2@ znoAn=9z<=qTP}Gn;Qxch_x$l)heo5>D~Yxoo3su2r3PdIKw|}eeBYr_r|jpdAE`}S zOAW{gfQHy!9@;frH9x05Sp9HC7e6UAAUgmWtLfuZ!>(a;&RkDw7%hq(lNyjG0F9qm zBeO$eKn}j{fAfEsln^+^aL!(-uh|&n26xj@3>yTLhjV-K^ z*P&4(!vm!eX(%pk)_@!XX#B<+`5hW*pOYaOJD21f73H}=wgEJ@vPMCNM(rW&OIhO) zd`IL3xgU^s0F7;|QP`o;tYiVwu=bDI3&l5pSOYQ;ps|BBiaIpvROS22^WwTq?JmCC z#Tt-{0F9ljQOu#y=wUC?pnER0Y0cGIhpYr>>}HJ;4vj$tza-kaH+1?eo(>YvFp!@B zjXkXKs6!)d3_q{O#&l{vsR8*0&^W*vWgQyUc*O4eJ3f#aka+-&L#z?+&`4|dWO_gP zW{?_?g8+>qtdZc*sF;EJ5IYxNp)*ngvJs%cL!Rn!XjFe>w$cb!=S@b8DdZ(U;{c=S!0^mNUbr*Re%PcYH9_CM!jk2&r+3#i0_Zl zI>oF7Xq;n>fJ39fPOgWv`jK{O9v#Hvf%yy2xWF1AhenMxn@PjE-$usOmm2VsA)s-I zH6nJ6-nE}2Un=uMzFvB#qZGwo6Va4q8;4e(CC0L2_J}`wElvqi7aB4#VMazu zSbV}U6H9+wL=FZdEHtDMm>-~+RYh;j%Y2R^CZs7eq&s7f9w3cUg1q+*@6dvT%V%@rqc*@C`kWA2#_xtiTYmwLXsNO;fK|{vPF42RGzqWjy zaWmp4$e55g(2&NOz({qT-%nGI{g5uuk$*IpuEr^+1x4 z8qkp^2bEVb58f;!Nk|B2$d>+f^f;e|dQ52mv;GW8LK;9r8X2~2r!w$@P4e9REV=0khk9W6OCCYetKEa~bki|SjC(`vv zrY9NmW!tL+BN+1<(%7-!2E{DFr19$yrQ`^K9j_w~mS0OuDFR)_?##O-2`0Rb+;oZ_ z!DDycpVP#9DW4};?;6sb^?h}Hx{asg1IZ{b+%=@}Q5Bf zQHoB}71yWmczK>+u4_o6HKgnIQBLVtJJ^*gaWW=YWqs^B{5^QW88Lco$kx3uslq8tfIu55 zS?kEu*1Hwy|CyZv@vI3(wT=u;zN1Lc8QUXgVtE87h$W*r$R%vV`M(c8rF&&b|_v8*F&PvWc0vZX3tP*)k)$vU#k8s1Il z&4b!U>d%!i!9>=PRbKvx80&R7Bz{?0tUj=gb!1AWCsoYk&+p2ZU>IviSEwAn3yPR7 zvqTL^f=#R;jiwt1OVW6(r(2R>4(rG+!#gUn&2LR536`*q?9^tgB3muFAxSWTb>zUb zU5f19Pg#{<|LRD~#Io)V6;ebNgzsfw`szsk>|ZFRMJ7C0C3_22uZ|2wb}G`Gpx&;) z;MI}dAJ!|ftoWHku@9etXO+OrA%|=d4h$jBU6%i z2YXIjE6F$1I}#YTIR7RR*62G3RY!*EccPfqeWm=&Pi0InP&H)l@Zv3Gn?B%m+uL_#o*W^tP5(yn z=R^L_Ro#XDxvHB+2P{^5yh>bWlzNSuR1W`?_&JN*++)w0rQ_+m#dCvaMav!HlmGOK z;45m)A+QRIBz{x82aub*r_Qk4IPL&@G-g`)_@>U(kIGxgg&&*naK{Y24ozY4K=A0w&V?d_DH2s5r^x z^7guzCr08DFznI1&vdy<3_WoY^K@QoT>r}&_xw6~0)aIc^sIcDQ&E*C{HHbUIop-L zX={%s^DOE_PXRH!((lwo$B6*G%#M4TZ0DDM>H%G`7f1dePXrb&;H&Jo zIeSbVg-3rATZL^L0Jo|wFUfUp{>!>=H(*#x`bGR2-G}ymruWe2|78ymU4jK@ZfL|mRcZh%a3j*cuY^A%ZK_^Imzv<*d_P8p4L~9fNfoFOByW|cP^Phik3P|twFV-QFp0H?7`=%g09$CHBNlmU0$oLNmaeLL~1_t4O4^hHl048?=b2$rS>bSacpgPKlU_1@oVk zq$XFGPP(tGN+B`>`3x@il^^D*n3`N+I_ZjkveIITS&c_1zT54#GNvY12xRu2W9fM_ zO9>{kcW)@RJHA#l**73P#n+FenAW;|r0FToE5X{b%l#rA8#$&X%ZTLA z#z~4C*lLoDsmU?|87Jfpe#<&vZ(R|uqc{^<)uik0A<-IL!B#Y)iR3V{r+ zT<{K&RDeMi{rArwm82$D2&8xYz}JWryRCQ4isF*g^jp&lA2s0kV!W$mLzg8pJ&q5t^Fmb$rS>bIPS^jGG^jSi@%nnCRYfg znRm^HM2ZnIbH3SElA2s0kUnpa-9zza=}SDdNRpadVLItv+Um+TbbYdu=U&=83uhF> zO3>sA(@9t2^IacR=Q;F!wNq1L$itxrlVkS_ zNK%t41Tv-BF&?2MOr|t`YoR1Hxk4b#YN6RgiYwc!bbg;C;Za=kgyA_|jz%YTUpaP* zGYVoQXmW)RGwIceK_Z3goiysmK}l+Ig+Q8JKKxzvw!=R4JfwStNq>^^&d+;*Nbz9m zeSh&W8B>!hgqYsC9-7M-S)-KN`!u;iBy$yKuhWW|eO)CPQlPOcS%B$rS?WnKApKBt6r*W{{*NSBPY@1^oIU&ePMR71!E`n3`N6 zl9Nl*vu%u=bheo!HMv407e1-Z)3cz~VM%Iog-A|+j(>#P>g`mnIJA1J$rU0w<3q0M zu*hlsu1QjpD@3yDjgJ&r`8)B-$#;8At`N!T@4TSMsZCy&F*UhDBqxf$e{S{mwVdp< zi&@d+3X!Zo{h*3juk*8#)Z_|*OeydkUn^vY(LR)Wt2$3jt`NxRoWIzdSkGj1R>QM0 zrY2ViWW;kKD#=KEVXg-e=c&mRBDrpJc15mkv{{mxTp^O}-sN3W^fuD`+lG?VJ3dHTfAacG`T_`D?Gk^29e_Ryh5W9>|F~|lPd(We5Uo3 zO||~+aQO_A$&|6k|NX}Rk|wv{cWkCzNfW;18Wa)pfB!Lnq_?K5qTbTe6p?Qht0GBF zeiC{cnD)sLNd~42Rd11+{3MXUMy>b_K*S8zetwvYsmV_wS$uREMHacJp20NvNg&Pk zZzmGjme12{`>1-V(c~wQJe+;CA`h(DDtoKRPa-+GBUyy8m?Iu?@wb>2O@0!|Pm9%5 zCOHz}c1kxKSL_4Mx)9YV;K$4pLB#^#h**6mTGLMk2$eO<-smV_QY3?iJk)-+8 z7Im#?@{>q@HF1(6mlRX)f|~p!kiNY8-;<;-_n30Bx0?JUkny)VOdzs7pJ)7y_|lTp zuMj;+*YsmV_QX;x38ca>Pos#BIrQj?zq z(p!Hd*Jg;A-g;p}lA8P^kiHxfPfF64^=^AfYVwmvR!`#VQ^fRD-I*jwO@0zc?~OIX zCF#BP>}xSnm!AaE7xq<@q|dL$R+pay(!2g4tpTGmuLSSU%S7Je(|@t8;c2|w>{E&? zlX_nE_J60o9ACsJ|INGmNQz#Z$dsKw(<6rrOj&$^0k7I!YhNa^eZFDRo%BXGN&fGz zQ+T#!>_sufi??UVqnv0L8 zm!!sAg_xcVpYR1+iAm2l!_;e~##{w5epJ%}l8k@4qT13l<|>epc1fIL`IKWuYK1Gv z-fGNMAboXSo-Skhl838}Nn@@8>A7&Gpd>x}>hPC=#H?t{RUo~cSMDdWF89{kpvGiH z{U+EtxB1w(8nohdntADbIV$$|a>o$4keMxG}RUorh%-x%= zvPYQAUT&et2+<~?GgpC3yjY#DY_V<=_iYskM&&bl8NJ?YS*dD*F?hYDrHJx-X^<6zj*Jon_-Ai+wEh&4e zF;~+`S7No*FRAmaaB7?+HRdXi2?wt(B~n~v2^-7qk)+041=2Hl0zc*m(lf%FTap@c z6-fWIA94^W=F>m=FO{6sn5#f0d=Sr%=T>hg4N-f%##{x`{B~7NBFT897nu1!(zA$l zchH!tK&F%+cgtmb#$-z7Y3jvWW3B>eW|_;cA+?zF-0qWE#?+XrKzf!fIYgv&UzuB4 z?eQ9O709F}Z`>o29(w6oN&QmA)R?P4n&nq;sz&tIEKrxf{2}h28gms$@6bMUr?(7U zZ|B<$C8;r2kt}&UL6JFHPL!m^Tm{lRa^k)u&8>;*wNhiQBDtp&-|dC{Z2t00MHy3L zt^(;TnfQbxz1a(@-fGNMAU*wF;XPi&^t4{2YyyqBilooYPf`|H^fUEJpfOjG>^qI0 zO)Ro~x#IFXHRdXkFU>5Z$Uz0hN>XF4B02EtB}H~>@~b2@<|>jy8XQ(+muu?9TVt*w z`AFveip=!UC>c{@t|Hm*yYhQz=_t|Hl`%6uZ%3bMh{rn0vha}~(&wKnx689s1m zq$D-wDv*(hU-9Y_F(bpq@|Uy3ZlW<)ku14vv?8-CQcpD+a}~(sE@!?VQoN8RHxR$1 zD`INQRUmy24^5M#@BF~=vbP#@70G)`cPa8@M465na}~&>7d_)7neGtOpQefWS~#+eUc2ctEu)|jYSG%FlWK_ioDrFrEfJBDUg9< z=MO3J_cDWJZ#5PvkY-Ym3`Dl#^E8W<{aBJ3ixkOk-B}blw@7(OYAjMDn^&VNEEcoc zGI~9-t}=~9isa~LyD75wpeH1$u}FdRW~~%ZO$A}!uBji1udRUSg zixf!n`;q*tDM)i+akVFCEK(#VY`vk#A;na3Qe%+<>An1RdT$R77%F?Ku}Fc8-#&j7 z#S|5$@vHZ%H&=~C3Z%KB`TLSIKOWy##?)A(KqkIZlHCsxGx3$1KT1+#kpgMv8!4SSa>8X)c{FEDCN)qZ} zHSVN&w-4_Lf;5k>mg^R4djCeIe|sY%VYw*Yq1bQo)6F#Y?;n4YKfnC;#xuQpKAYU8 zcmEy(C@YCYtr+LXbMzVh62H6mNqRlXvYbP>yY3QeogSpHL=|d}7u#_&_u)L$U#c6W zSEO6-iPsgz!Ab@E3p-xkeeWRQ!nupT+2c_jUlBdMSQYRkcHFxm55KCDK}FNEbTFN_ zg@dUIxK)S_2Ds;XklylRUdYKMX%Yu#6>zH%9q{;14z!eb{G4yvDLnmmZUFz*-ucM5 zJA(;d%$<*nJov4|!D9vdJ3H5j~{#I@O?67lDyt(x$HdrxIW-k5k3r^r+YZyd+>FZ(n_7v4a8*K#vubns#Ucl^9@_NSlCO&4r&9=hyZC!CZx zRJ#Jc*}iN%31{+B^eT*d3fEXEad2e;|J9D0!L7V(tUPk5^1>$Na|de{@ZTNy*gEXb zT6o_!;!8)2gFg%SA9g%iYAoM&{@~6>v#otYb{~%n z+y@o42TkFJUfHZjN0a}o!G7x1(8q4Vr$P0nZRdSCTHP~zb70)F0( z`?t+HPPmwN|C$OlBo0IO5e%p>G&FU3TI6dFc7575M1~NJr!GJq{Vc6_Dg}m}u=i5$qOB~!_ zz#Ts>?EN(31j6|y@AA&xHc#SU2?PGn-g$5H&pIl+T2J+02EK4QUd3?Wh3aNjc-D>T zHUZ`^;BgK-SN$I(Zr(lQmz@WP81Re^{PEv5O59uRm(mgkn;3A%Zy9^$*61p6&y+x;E!rvNON8;cg1D@A`&w2hWg-=<(UgBUP1D@Z3*V%no z;i(TZNgSMHzzaI?+22rlU3R`#Es2Aj40vG&J~Qr$!e6Z;vSK{%;3)%M)PXmfxlrMC zmaFR>jAg(bzf7D`>YZ7Hui*c7v{cjk`fKGR4z@Gkj^8g%iWcGRLf}cBj{_11?-_8%PZuXuZ1uCk%`~-a zz<>taYwvv0cX!$4vZ61}R#-*{7aH&+2cGQ=r%(j$doWZaDtXa@6%BX=J6@sn*cF7g z=b@|6V2ye>0Y4h>fE_QND~ZxDE}A?l{&HVDAUhAHG~gjSp7c%{YR7}^HU=aftlqVr#KEHmys`t2FUJpNqVvH5-I_`q zjB3EE+Hten;YoxG2hMDDT2v|U#DQB4cr^!pdSpc5`&~0-bg--eui?PQ_v6xgEBXsw zwbO!c4R|dF{`IHH3SU^Fl#CAMHQ;sZxVO>)&b)}|-sH>b^&cE;!0Xv@UzsUvI=#fp z##cCDiHr_5HsJN`xOw5%of0>9$E(Le@Uj7K=)hNusi^QT%8M`i^TdIn4R~Wa?khTq zuQ;poIoFYyYFS?3Y6ITHj+b|xpGbH+KKJ-*FFzx3u(knjX2;F5zfO_3x&QI`5(j@9 z@D_GF@wZOLC7!tQUJ;3d$qjfbJ8nMKp{&Hs%DdHF2Apod+t_h$%SRhZ+*@Z{GZ`K1 zZou2wabLlH*(C1Ed`>-4gXax+2M1p7Iz7uaWM z!b|lLHad46>V*OCY2oQVaN#T(KDwQgU)8xg3hD0plCS#C*iBWPZO2@sRM7i z!bm9p{nQb{uv0(VlK$Hf(lS?uUaSjr-c=8Y|0j7dWCt_|lq4_iTk*f^c40rN>S5}~ ze<(rTJ12oUQkzN7j_1CUB>3jC53C0%iTFc7eyyy-Wc=PXWhD6@N|4`3WFz7!CcWbu z@Drx!Ex6^Hn4YcQw7W=P#e zqklB8L8@Nr3k#jPPDXTzn5q#_|&@yAAXl_a>^8qzze4VQ(8 zmEavZgzqilJi*x3kimDh(W8Vhl4Ay^d^AOp;Av|}@0`-(iLAk-_pPg0B?)%6hBR}{ z<#I!@63oo?I5jGI3r@C%Ojy?bCrKuJHtiEhf{CpmleR|wB61-2Hfh68T;eEVf`6?c z6T2+hCu1hIpT_Sff&}YYLwe3flZX@}VGC(iOt;))Opq!{Ffxbrq+-N=Qi^`B(AcAW8>8t z0*6{ddSJj4!{)!RimcS{m1 zX$@(v&B_lCA)Xa;Mc!?a1UFhkrg-YnTw1?Xlu{;F3rT_zts%`KcZL!vu52@BLJ3KN z2dyDJYv)ZT(z>sFzwjwZg8i%^lREmR5ZR2+GpWVb6(kAHvxYQNQ~Aoadh4B8NRnVW zYe?_d6Z|sWl4E*bsL2T;vEspR){*72O;cp)DqJQjNU)kUqSN~a(-cqCa9Yn+gZ&^cnhRr)CNzcF%9!Y|&tRq8@@WZ

    xhIQn-cX=g*tA1TR=aCS}fKNHWRY=Y2_n4Xh)x?*3kpam6@UCSrmEtRvs-c3F|*9#N|g z%wG-ZJ6ZE}N&1ew%NCl53BIp}tPt$MF@=Lv!Pj7rB*F64kn!ght)yYS$736RD*3b| z!R^(MNrOKBf@02KGO1r_wT8gx)sTTfcle$y$UwjG?PN^wcr|43k=acp8O%42opCWj zVDDCKzvs3g7F*HxAz7`PhJ=kE74kuUNH zc^_m}Z#v-JYDjZU4PFU?G*_JJA!CAVt0Sj;LUS1-C&h1h1tOt%fw$zCKNo=E|+=4FD`!4VgH%M;=KgzWZiD*;{aD zHKbYUhtrZYi!4xY%V5lENN-Y>jgs^xR#MMH;K}O9QQBpc+Xu@hpU!LN8&$eP_FV#C1Q}-(k;P-hyYg>rO zj$*|x+_YShV7+Q$dNbyFL6YW!_3{k>UDv;n=_Say=sDz;Ix8L-<&pBEAIK4{&Zl zV-#!La%fz8ocP!}UAjb7`@nDXg2ouuxMSBy%<;x~*^h*!_xWxrt`~4~LE}Z%xM$OF zUs<}hBKbz$XlmV8S|_fS8sO`K#>=enz^37f@06z8^Z4TX9+ev4@PfuT`Z&#H*T~-S zd|$fui}D)Fo_D@aYJk@Z8n3d3+pgisUnnb$hgj>0>(=vopcoHueL>?j*2rMjFpF&; zNgA!VAD%7w_?|B`!2bn}iL8;yq487^_Wy*2S@6V5QUjb|(BR}zS{A!TG-GGFXBfY6 zKO$e&8!0uw69$dRtdY&G;hlD<0%?f7&|B;EgHi+BVbI{m)wCRTjo{KO{YZoEC*%`% z@BFpY0G}8%rm;pYyN36>1;3JpaHPCFuVs)L;249(4A#hF*D%d?nMlKO4FBACRBC{C z3>q_8BcEL(;rF>2q(;JXaVm)oE;4A$VvPcJjifUxqNG93X!J(%&d{^6AK)j025*&V zh3p!M&wa8)_9M|ZPTixxSq6O1`Q68X4*AUYOkC?8lSR8^!z|o z)Cul2Xe?z7pIyTYzIcW-tmm=A;;-|Gc>y0AGA*H)yP2ji^JTYR$K$hIyy1dj0_C8#Gq3Mn#84#`^h` z#t-?~8y5Wl4;(c3u^_FIUBkTnBReI{c}&fvJL^gfaKl04C)TK9*YH;Tu!hpO{rJyP z1AKAN;E&VN>>8fQnO8^+PwlBKr3N_Ups}7csyj65Z)9geoQo&(Yt^L&c;%q6fi-G6 zG+rx^rZgU_utsWtYYrNlSfjQ>W8RQvN~3fB(ozHbbI{nr8g(5SZ+2pT#yXcqU9U?G zaMD5JH`aK}p)vW(b4ufJw|eFWPaQP2vPJ`kM#`TbNR7lRHOk3;fV&PF+gPKKL*tFQ z{4Q&qOZ}(R8UvplG&^W*vZ5sDxluXo@FVbKq8>p_EWrD;#tHIm1d-9;Lmcs!CL!#T4dG{Cn9jbp6Q$*z$UzpbRy z@a-+2o~6LS2aOY~(Z!)rzVQ*I@kf~vvLE2(gT^V==;qM)*f&;cBsKd{-S@%O2aPkV z(ZjCcyH}g*y2W_-et3DF><9S!pmB~hp0sOJcBu&`Gjwbzw?%8!at2GAhKWJQGjlOn`z@#|# za)d^pPBy-Qi1h(^0MNL`8vX4W!ODGBD~&^AGe`}{2!IAX506P3=+MX$ouxFs{~(vt zfZPCR++vNvb`7)1#rmYtlE=f$I{Bv5fGh!M++mHO4voK>PFETe|4{ci$QOXdJ=S=} zq4DgiS(HZ7T;-2J<^VK!`J_GP(D-1;T&2-wiFzJ`974KARTpavw`+L4HA*XuBiGz? zkeFM@CV&QioHoL);VT&AeSHj%sdq;}tq;g6fCf)}+99$e>auT4Chc#ZaYnZ7m_}M|6i|2g78d3wY6QGfgH743MytR7syO_{0?=DdHD9BTQ zMgi7%!>-}WQ1eBp;r-&Xy|N#Wu>g%itTEZ4kvihI(zv)bAT=O&0UAYEV~SnFd+95F z4ie|${qTXjM`0ENG#+7%X?6{t=Nx|p!_wI6{yNqV%x8c`an_h&*YK{%n2R(z@EY@u z$xG(GxNh<9Zh}Th)|hE&@R1AB(-q{f#|a8&gxwq$Z8os&lES&P26aG!CO&bV@WRf97Tbae(;WKe?^K zb5*VG5(nm_4>LIaI%)53P7z4XA&K-X#9Ll9N`3!_Kcwp&_U#r$4qV22m>}WZ7IQc7 zn;gE^Q@apJE)dl$PRRN~jKta0klsDsb&~Y%I@MN^@a=%Vk?CIyaGrSQ+fS2}wJhs) z=Vuc8iKlHv@3KlmVi ztQLP)*Y_`fJ=6C0Mau<=fgu9r*jh#bN(eINh9NmC~O z%aXd4oJW%0>$`Xl6C{k+-(vpTl6v)4grwSu6Cb&Fy6iqUS15&<+i8<8Dsn=0zW@E( zi392TaL6}Aidpi#*YQc&eOO3;i^-q!Bk%wB8Vdb=4LL-I!DIxB^IPjsF&Vk;TR+hB zpH|M!VYDg464=|Sh+!D}-&W4yulND8qZs=Alm6t>Wb!|(oPGVu68Vhi?4GJ=G4emG z9AE0gI7LRk^-A*pvU0X8p&5+b-#&VUbBv<< zIZ0|p@RD4&mH%b$YuwqbAiSuu5uYK+pYA?MxmZtwgAb{328W=BqHRhy?DTDteim;_yOj5F&Ta1t&QX#b|1&e@s+MVg}|-?ERk7URLlO` z$_br~Dzd_Ib_uF6sTn|+|D?iSpCyvEOR|Lu4jL6Bbpr^b@0rmJCFvX5>a-;P4=cx4 zc-L~0>LN}&kH4Vo{{Q3bJm8}&p8x;ck7h%PUZsOb6_5@B|CxPm_r^=+8~?w&UPk16&&=+#&+g1;_j&F= zj2yjOk|IC8_dt?N!^y~T=lH5Fkm4%2Gna!wBf5-hxEMJ<|6fKS|zJ=dgs<>t( zjewXS(SuZN@*cmD<9o2StSD8=DKOCZj!ZG6^ZJUaK$=V4)%N19 zM4#lK6hpde4*eWR_y_K-s%|XrMLWsyD2CJzkGTP)m`e47f0U6VITXc_*~hL^Wae@S zk|f8NQYNiWntlmlWze9d!!PPI6?4A)P}C zmWF5{!Gr5LXmnOdk^@2<`Fi_oMZUarQj+9Y5JQ&vpd?CV+gJg+`v(@z^2Y(pSeevmVAloA8K37LYOOE?6 zWc1jQ4dALky{T!@BYWU3tGFuUfDS`?b|ql_KN(5SjyWqNNsi?(q@K4OOsHn9q32m! zO_Jm=4nuA$ayJwNsC?*iTcNb7o#Y4(LmG~qn0DZ})r_LK)to>M-lR-g*ZuS%jN1U1 z|KKstADz==wB)!=%A}>$Z?i4~xgJPMtNkY}k|c+0QYN*qzeZs-HWi}{yPp^>Nphrx zAzceH6af+zEm$1pR9`DeatMVZpY(77*;$YeuR&s9js#|TC98vxxc(53!;myq99J_K z^Y|knyYyRoSJN`gM6ye-1wsPDdxac9WTJIvOxsaL>rUJEiHw$6(uq$`!WrDI6H14t z>q#{yknKy(=h+t!sY$xeeAH0-B%78T`F8r(ihQ#UnrQYd*{WnnBVh%KNFrLJ>-DLU zBpZ|r={|3rB1!jI_i;&*ZApfV`hL|(AlKqmiCTOpizLZLB10On`5-Sfk1rWbOMfd# zvVF*qVV?z`kYrfP2DmdI<{`3a$dJWn_B1ZIuOzpZmv$pg}wy+q|xvTz5Nji57R&zYrxZ=pcZ(*)AeL4r_KO}vU?J9^E^8($rA~^;4alN4{^ksWX_Le57F%?j*N+itL-K0%{k`vNjIT5vh0W|Kn}){;4b~^*OFueRx*ZM zbH2muO^~ix*V;%j_1dvqveM^L#gAYqt_?8+8mAk!l3m7>KBNM4JenT@LG;J)9e4AO zkt9?45Ykoc5S9e-NV>vz;^6=>r7@)sA;V)@!9rtoAsJpXhmh29StL)x(9R~L)86J= z@Yx7SXOTy;%ec~qkcMqtZb=#+7sb=>B3h>OA*A!-HY^Tfh0jyZ?2=?kA40k#8!rM< zNEz<1>K0ea=q`_pEMgzJ+ zJFQP@wm&F+GNq4?)T#uvgB#Xr!yc*<@L6L?GNlh8oddqZ^Cx1b&)NHk(6wzYcROzA^N_o-1CfrMfWrk6wC{V7SN^dV&Q(AwX?RdFC0-M3U# zNiwAmAw5Z7;TW2Pq-RrFQ2EUsVoD!E>bXv*0kQ>>dbXTXB*~OMgxvPwjwVq060a?W5f6T$^!cH{Wl1unkB_vp+VdN< zG2mw)EvEk1{u)F=P0tBfmls?zLQ)MMn`Vi7Jqb1H@b&!NzaoFZJuL@K8 zQ1afTY(PRe3*^mu_yn*R@l5GMNMq?x+;<#`q%p6FN0LnGL&z=(`(b|1Fayaht;YyW z@_&>*gmhbH`y{m&lT_lsls<&?be`NEqV0)3J#m@E_AvTnN*_YHPria}7?X7W)=+FT zA<2|Jlzf!{Bf(4lJxdi6OzA^Nqx1P~k~G>kS1S@z`Vi86>MqDHUY|$)9xty7Q~D4x zYEjT%K(4_aikj8smL!?dhmb}>I_y_S?qMXvXC5ZW5nrU3DpRs?;ho@fg&^zO)J)A3 zO@s_60m%2w8kuCMefUpT)<|SRhHJXd-0T-T7H18Fq8BnunO8iIA?_ z1MyxFbG++%qM9|CqKS~sq}rcK(z)T$Mj0(rG*Pnudzkl3pUz$b#l{tmTc&6tr0acW zm=CH)thhr+LFUEo*MBlydJUr{hG z466YN!?5Uj@T)ou$YIg<@lV;|S8b?hhSmB6f9-)^H9^Z5RtNHuVRi8D>VjxFtZr>F z;ld;ZT{mJiDgsl*pS%71RD7Z~S$$h&*+jjV%?B>qGVUHEJ-HBEHumTV=--H+VcxJ5 z6aP;wjK5MaI>(13H6UpNa^&H_ud7!n1^Qaj)ROEosuptDWjj44h@ zgHB&tS|}1SY}d<%(1txohHZYBL6R0TY;54aNc?=G3R!cO zkAUpOd~2dJthEonruye!xFRjH#&xabmGCXIhTLth9H&i%)GG9Dp+jQ}VrUgQo!BKw zrk*B^jd}GqRN+>TU^Ok~Nei6IMF*2NL!=z7=9-;*I9wXYnqa1y`T-0wlO*q9NSU-& zF12Gk_`C|BwQ{JjQ66L2Njse{cOQkT0$CHRJbw?` zD#OU97OOiaPobpJ}w(aV47D$lPp>j*w*+i1$*Gb--;|$2PHz$Lrjg}Bdry-Mb?KNx(Y6>6*hd0s+A!7?Mm%>y5=vd z20kNz)LgTwIwZN|=hVn{^Cw>ivI~;!=1koo$x+=?Bkf0?Zv?UilJZ%7wk}M&_vH4X9KHOTl$gx)7 z_!7|8%9+asN}Q}C1UKL3@58mSo%c@z(t_U0w$ap0Nfr}=$BS(of;;c_1ntqX1##!K z(h6r*6heOX=EegcF$>i`d;01F88@?{5YjfX@l`oQY~8w+ktA7BNXWhXLta^H(+%iv zQBJQc^9)i<^GcCrh2TT{@rXieAwRK}!?+`Y{!}C;H>tHXVWlAmA8!-?nDK_Yx;d4Z)}QU6HsEWOYfLEII_A>4#e@tSfyGx=xJr3g3$ZLjEfc z!N2#zHP@6Jzkv5}3?3ekiILu!<%bNoc9X#wTUrCZ#eh6vbejfxMb2hUt z?H?pbviy*c*Z7BQ6#emAz~Kgk_5H(;qh6e@K?L9DkGqE@J(Re+&+O_FC;MXrKVag% zA`wz3%ZK3ks`pVYk=kG=T8c%YT^5PmdnWXahxg4Ha3~y)iuWpt)nDT_UHZf|Z1Xuj zV^7N@x(-|yA&{liIlLAY$kFK3X=IMV7Kk#-w;H4o)lx?M1ajzM^{_Imd(6*J+D><- zgEF20SN61>4oBiKZDEKkr2h&;R?=Oj+1If5Ve$8G!WwU!-V8yALqEh26**O3l5i5&p>#<03C{S2kq`sG2m zane_SFw$)8ef*L%M3#w^J3w1Gw9$N+Gge^>RyKN)Ly{@Ym%}5HeN%5@-g3tQAA1Zei9fufrhqii!3MOAafTn1PvTk?>PSY$ls7r ztIR*prz6pj5jdo?G(=`GV(1FmIE%lEBs0|TA6UM;h6==$kcP;7Mhsm;8=`&Y+l9z5 zZNXRTh; z(#zoy=3V5&({|eTTNRi_;N%KSBink9kvKDr_(;pF-h(p0t(ON#%dA#y21zpIY2>wk z+^w}v`+$6faesFA!9a;Me zgYz_7J4UNpkC{At&DK`NG;qUB3&j9T9wC?E9x(em#mOTwlb>U4_09G(0UwC?>XY4z zN}Nm{B<>vk__i%$#{do~4@?=OJ{v7@GG!1vmp^V;NBso72J<(hJ9pmyAaOEL5Ij#Z z{KF`ySiQ#{1B$kgIGG*@Zq9e4>)K7Z8UlDcdT%#6JBXrY*QGcqL>Bb-Zr_!mk-X&g zxxWbA1?OEdDG=`;`{PFNY7AZ|qehOiwY}cyR6uZZYDASe;-~*}0`Uo-KveG)*RyYY z+c;R3=^R2L@V@m8BEXj#4Xb|u|5OzNBD0HH)iw96%3Yy(v&E&obatTlBn9EOsmLyx zDlpITNs# z!ao4o3SB^F3IBG+EZQYs9lj3jgIWRJRry@J8Qvs)l|Mtq6s`mcwY3hCF$H4ZN}pt+ zVo2v-S#UXwL(+Nc&O}8rlCf&17CsSo$Sq$Y8U95fe0)emOD1*3r{l{KzX2(tb&RPh zt~&ORWr(nz87-O#q8Q+0&DHzQ9tC7g{6F;G`(Nvmk5wQXuX_1izS1XA>^{%4MLid>x<8UA4tXr~nvDd^ig4+|>t zZEB=5S0}9YM6}LqwQ=`YM4P5rYGiz)bZ~=MVWriy_y+G#(KJV2s*mRAo6~OwpRJM9 zf2oQa7N*Zlsrd~5W)AqYyhk#8+TZUbnfgOLZg&vW2HvBK&h9vi373!ltsIx=o85icMMur&g&LRv{u<=1iQAv{sls98L#W;hKV4 zJS%f0Nivy(kJMbB*q1^J8=y;9;SSvtnesR45i&M9;TgEAhh%KEExRSjoTejW@Ne;n z;8TqF;KPfaNRm;r2pN*z83-iYX_^+2wtGEElKhMrL;9Yzn3~l=QcwCEb8gYMS?;7Z zhK#sQNQxQEX#34wNoL)b8fj0H2}iu>A-h(sk0ePt$V3}FZAeBS>teLQlOA9lEuzh7 zzP%zd{(Z{xt*2h*KY$c{>#6zkJW1x7nOd~&&FcyQ*%fWO*T3*cGWUYiNJo(ccVx7V zg6q{)VNOSq>*?r`uuPF%_D4vc%;`ukn^#f zA=@tOktB0El9292Lz@B#IXd*vyk?L9nLbID&0Lj;W94VTy#hrIsF??kVSX;ICs8vQ zG9kJe6rJL$3ABW2U-ghAdHXX%w%b+q5RftGvt80!wem9ODoHzCe{^s|J3Aohy0#)% z`ee>k5;E%hTCw0$te;Vf?N~pFb`sf@iB_xf;8P$I(5F^;oEizt=}6+!@m0P^h_*I@ zj&Y06NT0>bbn<`PE6&%mz6H`;d7sx-bA0g5)JA+vSW+j5_6zhG<7pfyeKO}NNwkU4 z8KGYTMkAS6ZKk?cNU6p2kY`QSe)6h#R(!Wi`eaUI5}!$>5+JJyfGk7Pl1iM$-5POK zNPWim42_wDt3!7rL+fmuE=lqpWQH_GEt>=6cqEMxuhgtbiaLf2s`U!jvT{fURUeC+ zaUxpszG8+nrnG>)VXx0g(_cxFRDui{THq;MPs=#;8JcfDoL@10lJ}D`q-V~WiIVip z`tzhD$y-S|GG+|S2c}O?z2n&=N!~@uksAuanDvtD+b)+Rc>^g&rYllbk%1$=mLz%a zC_`Gh+yQabdKi1i(z$VCNit_v$>_5*T^FXv#&1=|$edZFWb8y3d0wB*(jJpOnKP@D ztbGn=6EoUcp=t(W&a6_h*2%vVSu;3X`ee?m`bcZ((!(KJG;^@hC2!4Ni#)p4m zxBia5jJ$h3mgKOc)aIcUy~04Wx9mo;MUT<5B*~nU^+l`c(G8aYbP-9t+U8-BWX{PF z(l>M*v+z(l+JwK1nhgJcRU&?_3a|CrEn6HOEsQ;?5>g3p4uk;g29v^BkT&ti~Ei zGG}v%Psf=7kcpe$XyZ6_rK=>DZcMFj_2@~E^H~gxR*%Z^w*0@+6c3!+b zFDz2?EprB$_%ud#?4!uxW7o=PnKQ_QbXLu{2*?50PG^;R_a(`kK_;Z*SrAqLkY&JX z|D>_%TjmThB{%;L^N{!D85>Wi>WVpoOh{+>Odm_qSvCfDGQ_xL&L9&q_DTe)UJwFu^-e()`3WB6#`TRz?{t`KDFrLITTrKm8w6Pv$>S4-xf|8czxEr z(NIRqoXw?V?OLGKc*&aQY+jN(n@h>)qmZF`$?7f2O48LQwH`92wn-0t3mF{TE0bsA z76o1vDxETSnfnDU^d{+k)>76;RPy{6*`T=l>8&)0g$3^^{X?!l+jvKRsjhap0nWB za6LakpW*3qXHaCyDj*@9LGK|6@J9PCWV<986_Ake^_s(MXoY+SRKTb=A4)Ryr&RSH z&$R}hpCPHQ_!GB2#28BbFje@}?2w;Z-XR%2G5&-k85NL3>vnvL+bzA3bQi09Tat_l zNJwYlPay9w6&z>21G6Q`sDOm5erh#rZ&}l#&*}&6B`R`;y0MutWT|M22XZHpmNE^x zNs>_kiBBye1hNM!%>M9G{=i#FGAbY?EB0FrB#a~YDO;wyBpDUZM_Mb)_-qo8kb8g% zIJNrcl4MjsAE~(t6&MOF6k35R@9_PKOj!jaWNg%S$mgsuFMtXdQLTU^85NL_!3X9tiNf+4)fVWK=*x>KpGi22#wo`i~`59?7VHgf!YT z1!HlNY(n+6;3P?!X+n~ijiXO5(X|D8rMg=5f@K??7C{-Qo+u)Jnc&E5O85NL_ zo@$fel!Mu~o^rdsk!ONk#=EWXP6#uYjC~WXOh4HB&PxAR*ne zA8iM+4U+Du@yn%8Mg=5f#Gd8N;a;hXWWe@K#10STE9^)2Wy)(uD|RNA~$l8g#S z$ab554F|G5lI_-A8ZJpj1tg^F(k!S$%vaegw8-7s3M!q`KSWK=*xI!2Yox}X+_-Y{-Y!r z6_AiI&H~`iipiuFQ$##1FYZr91ter*)YeR($c;iWF`~S>%NP}qke;PWKsz+Aif6$l zHG?rKAR&{&Zo!-oa1MPYxi2-B?POFyLWWjfnGbv>AQ@U=+;~YcDj*?^;b9&ig-&V= zYFR>(j0#A|pelu6?z5IfpFyRxCX!@SKtdW5hZRyj$MsPA#*7L`$k5!2M*=xkv@=tm zO428z0us_Qqeg@zJySX;^_o!uDOu+_%wDEXPmSs~q)$c#q~uS%FDo+f=~ziJDj+4( zEQN7v`ZV6>Q1vXM0us^^KPV?$l|$G=mUac&NS}-fNXdq`iz>42u+fraR6t5LDG1}o z>oew*s@oYAkdifwlZvc-_!sGuQ2{9#ou-u{BX|BLNk#?qk=D{B^1@7F=3u2g=arVn zsDM6FGjiYT1>Jf9`_{<(thn^asDOlQk?<|d@8$y}EjnGeBuPdEB%~g7r6Rcd9ewH% zn=?w1Q2_~Qn{@L&Kv$8pjhUkKCPoD$q-XRD7zx_nNO}fOI4^xNDj*^CA+a~1okA1Q z2jpKSNk#=Eq~pXR%)!LU>-ep)x<45ekdS(%L7=8s+!(E1;v=<>!Ki?Qbd>xEGYpaU zIYQE^JDX7f32CGm(NMP2{XSl*DMJ|*kdXG^Y|yV}4rVXB;(OUcj0#9dR9uk*BGldqqXH7r8QG>Vko~c5ofVdb%4iuCkdThYgCI{Z&s{n0KUF>% z6_Aqa|5zb?I)02fD19<2AR(QlKVK+GXV|l2l4MjsLI$7y0`(zSl^~Blc0tWUj0#9d ztz6?@jjt2#LEp~B4l>41gu~MRQw1bG-G4ivRxwHUy{022 zNgmtymnvYYfC1nq9bm)Z-&ehl^$&wTn?ET&u~9-ExWvc$Yecr~9p5*;_W=3mzIeF5 zTkrbbr#Ye%y1+9XMd4ncXC40)2nO22|D0VZE!R^B3wBOHgS=H54#0a4O!`hD`o7zz zvbZ$nBU?m^jj;uRo^OTR0P@+)^Z>*F7X^T~j95Jy|I;XJ$fw6ftl zok(oh@#B8}Ho~V}!SzgJjp4n!i#;0{!1QqzVnat81N?0`Ch3j9hG>hU$MF~yhfk{{ zHt-p#$U*)#^dUJx(={K9(c=cJQZ{_5C9xsoQ1dx9(x=XyVPAp`Q58FXm?LT-(H7q+ zMq)#hzUISh#D;z&3&zm``&2(Vpn;5oD4E1Y7=An=SzGR9YydXIb>&5rP}hc-DlDU(K(5YGWhX0 z|2X2C96kzhKzl&(tUP(1v_TY4Vxt^>Jl@}io;2wjhy$`b=+p0Crja&?_DO7r3F#|; z8{sqWE&v;E(MI@}_l`&#Lnx1Ru|hHKv$9g13#`E#n|cE3qM_mqq?ILNach3N}VyTRg8y3GE8wAet+&A%@^$ ze;fLti*vw+n3MIDE8NE<|vB{pL5**-7$YhzvC#@`toFCz-adQ=*yxPc#l3L#OBn~zYl)54__6u?E9p~* zE%v-@izDb*PHBTEx5S3nR`}6B4oBag>M0w|57m-3h=xmSw8M{oN@inX79DI<#kM%& zw}^!d#~4v_iH-JXW4*tPke%lsV>b78Lw+99L&iaLU1Fmne!RiohI{E8xaTabF%I{H zcYjM8MBybiAj091oBVA=oE{bd_iZHFh*-B}l(a##USgvQe!RusMncW;Fb`Tm2Lsi& zVueN022p*94Y4`3&EH15eeaip4Y)R-|0b5oD{T<{m)H=)c)Pz1*S%oK#muK7Tt^Rl zDs2!YnAqrvAMf^o_L zD8|IbK>YZCe;hGoT9$^kjKw%&KD;5c3>@o3J0>>7@^i@FMq+iM`rAk;h z+@Wk#+j>sgAo?`1F&RI;lFY`Y<*;)`Qrmmez$tLXP(wQLl-O8EE5=WHy?Av_{#eae0Ak3(>KO zjam3{vIog6EzY)9HtIa8Ds2!&o7k9xAKyt9N4*Mlm5uP)B00de5N(^-_!e#4OJ<{P zIOGl9{;1eoT^FKq6C3l<#sfba*3xC)?FSnhp-Zi$-OJ0#wh+CW*jR`kKlHPq83l%A z10He^xNn2Huaq{3@=a`r>GrX|4ZY?{80)5bu7}6Zls1TxO>8X1kDvM5u+6;!x~p~t z$X%ibipp6&)HartTb^`twZFmNpDlg+8>Nc^l0zZD`Z$lqd{RE8A0cb<- zyJwxWL3D0nV-cej z7r~+pqJ0w^YthDge;bYpnD2W}1-LUiWm|{}PHbRPD_i_+7#XUE%KmV_4cjhl5IvmO z_!(`a@wZ`jzGw+HM80k>)S-;DL6mV~;}^6M=x@WgJoRH4hjIMKEop;j~E zjWLCDDjR*j`$XCxYB{liOM2xD{x+P|`xFEl{qVXt%NgS0;dLRpIkB-7Z3Ow-aJ=X^ z1Z*@#8;-k6s>nEqf=+BCp^ePRY-}5_SH|H;d~i(KAX+-Hu>);n^|#@y*caC*vn?V0 z4oMqCRVOxfp^fbRHiCa|J{oL5pMbvpTMdV_LG*QEV-MQM>2E`;l$Zymu>NR6E52Fm zMPQ#2rJdOL6>a2BW}{~G17#!JrZhI9xf2`v(Z&bKY&2L1d8Idws9YUnTZsBjY#c-z z`I6bF+a{l~QMt7^3juARIy|v)7;WTFW~1icaL;+;2!B`G8wXY7iH+aTMge~t#`L|Y zZ9&Zs^ZMA^XQU1C_FQ5Ehfn1~{x;mNt9>kOxNonzD{T;!p4d2nHVT_Ie5ZDkzg-}s z9R`1Z6XFWATNV%V8f6vtUN8{M@24+$ZSXw^r!h9Eqfg2=@ZQv(z*BnE?K6GIp=;$Mf#+2hSZN#z6)e? z;d4)d5@Lx!&XKs3qrMg2t%E|+S{Qv+eAcP0B7I^w=kv)gu+8F) z_U?DeCy~GzGCm?0HW95c=rg|b7Ps_Cgl~q_7j1_tVjgnRr_RhFNg{VMWcU}cm4N&Q zeTENPCJr3o#7IPLhID^?CNGdZk#y%P++F%4(l$dnvmOGmz!VCd0l$fg5q%Otn<1<3 zn9&k?2zTkU>KjHDl|G4#&5)L`0U3bYj-SGDHRjR znj=e`KtW@IAYBh{OOgoHDU;R;UzVN@BuYcp3Zu_omn4y=QzkW6=8s?unGYwq0`ey) z(kDtYWNi6a#lfApKVyr>o|Gh!q8T!Hb2!eL;{FW&xwIK%PP(WQp{lbe5=|3{0~QcKb>(2NHK#Mk(u^NpG0D2eA@1I7zU*1A=|aQ zYb8m9WrhsypQ#RzkSaq8lMt9+l0;5sNKa@rxGHAfdTck;#xD_(8Pff2oAp3;LZ9ww zIh346q+^D3q+4-SMr(h!c(sg{2*w=QBn`?qBC*dNxK|;$O(RJn`Z8p@<{ zz>8~VO|_O0ftMkprjLZLh`9{u=>Ata zh_(iTjt)(PK7y+Qk#HH(dG7m?K#FP_UU}h=`ymlh)F<5im=eIauk!4J40GZlE{|~sp|zB0O>?h z&pTBdnZ(tBh?WfLa8yBAO=NG5f{6#DPa;(^r2EZBH)T8B&(i-XNg_}(q`g4rjzEfh z$o@e;r6&+sk|B+wKjNmW=v!m|pGx2*VkAfQj)KwWCF5_ZdWA@k4CyQr^c#?Uv2UHB z->#DFB*G&@I&M$D2V@f@9oK80lO&NFIdau;tN?^h$I^7VB#Fq#kWQoARY^K+Q;JEF zNQ(>^dmNxH$&e!>svK8j=|kcuJ`4vc6mn#Rooy6ZqH#B`Pbv>Gq%pc5@mOX+1aN_RM9HRLJgN-LR^&aWGy-x6!O^!?D7XwmmyTW& zvMVxWC6bUajb6Cm+KD3}G4np~Qw2z&1?lSy%=U#(Mu{Y3biPfkAleM*Gdkz%07a(!(g8wRI{xt~ zkb97{#9jVIl8h2bNUi<7WkAkEQfrrEup}8Jl9HV=bq8{aAlvVmB}qn!^pV!^e&6D3 zatKIkc<)EJ;)xz<>?`*{&smvSQ9)wu`SGD>7vzl8~`|E0zX#;{J?HsC7k>j1o!6 zq7^RUY$EQ@qUAop{Z$byqeK$YK05aeAjJ%3AN~v#Izci@Bq8-D2Vi|RXE6Pd_$p=7 zr|;M+b7vcq2L1u0n8Az*g|G$_B%?$UpY{^z>_Cbhvb%3#?juM>i6mrjkza9+7b8CS zqg84iVw6Zix&kj^b}0JRrPWF&eKJZUA>DTy76B3}a;S%H{s76B87-qk64JhLSsEFw zeVu+$l8h2bNQbrcDn-7ns8&HniKOKAjxgH2`qQR0Poz&qi6msmgLklxVp)jo47t0< zAxTDwB&7Z6MqJAxkhK4`F+`G#5=qF&wC$lPwpK+l(h?FZNk)kzWJ1CQ%w^%YH7Jo? z5}r$vQ6dT1?oDW6AYm4RY3SK&HQzEyBq8k?8WvRT49M13`ec+yLPni@*b97$^)u?& ze$}^(5=ls{YreHW_P}VhPK91dpNtYoNXOopWgyzR2s*a!X(UNTi6o?bS#&2L#l2!* z^kSPN86}dCF+G2?L9}0@&zLSl8~+|K{yWy zP1<$7Hfkhdre>5#N`_Sd{mDxjpW%*(AQ>f+kj@t&P&asW@TV29ViY8!L=w_fH$xRk zx@vy5Tat_tNl53kG_xh?ob9 zWl1thBqhf`z2GDJ;vR$OAx4R$WdC=d=y-khIjim!Mv0{4z>v<0>}Q=XeKJa@nvB&0r8>kDKE`qT%PRI5FsClb=pp~@&AMGod@yECVZmeCUlsb4DuIknkN{j&3g zBpE%CkhaUkh5#wDH{1Ds(dLkih>6=1zWq}+QMtoozm1{D3A|bWUu0q9O9gL*b(zaYi%jk)e?6ehf z6EE4};#ZPn^h8Sbybl$mm+by=4@ok5A|<~wUym*n(BN_Hv^bAp$Q`&B9t zoSsNXW7Br5bmn6R8NbYwtHXbI4X9D5+I~fTRA`8dmQnw%`wkQ)m+?Fk10l_+2r&fe z*?&AJyNt+q-Y-#tx!F8Q7^oLnj~m0`g2@*E%+LyO!hnOj!UVWK6A5anRW!ZH73(+9;wLGk0P$Wg2{@RWUpK`T9GLWfW)W1>@_T?=H`k%yLy}=Qx*UT>Abry8<6#J zP&qFjR<~X1ZymKgs#^j`(L=U7EmT3u2!PaQw%WOYY%hEU-a9R$P5mfhc$M7HL)KzQ zhL;WbUXdvafW)Wm*yNWg+F#e<7N%H=83B-x@qNP1gU?3jGrn_XH36r76w%i0=fmI= z$Gv8YYpTl1|8NxXm$c8oCxTk|itlR5Xc+;JL~ENn1e5FtByH2~Opzob01{GP{Pjv8 zMdF~(39KSXMgSyabk^Y>h&Da?to|mtqasrl010VnJE8!PyOFfSX5S%6MgSzF_IVy? zr*#IBT5QL0l4JxxO13E!4di4&Hu_n~TZ{ncBdy`xa_j*Trcw|9o1Zx>eG&oCf9|t} zcglr@7H-#D!`r=^Am={9P)RJ=+-E!WXc_cP2u5o=I9LgQoWDci|NhlI5EIRvA?ocrvZdbO1#BOMY_|EnMh zV`A>pZ^jmpmLww`5;8c; z$Xq~*dnGtv1zc6rCnFsa()oCMb|6LHI&XIVR+5Z#NJ#h9=+QuS!*;sQwCpWOMmi*< zeepUF9L;F$b4sa1kdY24`QQ|+++Ol#yPMJ{BOMabvA)LlK*F5{g3*fWcx+c(6-GKF zWXPYHmjJl{$&j;48cLFp4hd<$vLOgaG2hyc|EZ#7q(eeR{8Kj=?iI0SM?C6KP5NY{ zLqaBW{QeG*n=smh7FT9Sl93Jx+3w-_!9X@ZvfZ^a;gV#eLqggfpTg3|Tvu-GQGyX8 z9TGC?x0;`TPqFew?ahKmXvI}wq(ee#?ZtPXb;oG6Shw23V5CDrIyO%)3DLr#UmOX8 z)O^cGhlI3GOEV8haj)3NW!)g7Wu!ww#&qaA0@^tqea1AsnVNJ+$i%oJa76;fAeq=Q zagX%LNQZ=U6zl*pfq7LNxf*4cBqJRXGO5W|55VUI^qEw*-+DyKBPlZ>A(s{pnIY~NiTvwG2 zBOMabRsJc6oL-+Ls+E%MWTZnvI>)tZEJ^3!14AXrNQZ>9Oxt@4uF4U-Dwc8Y)oRa3 zhm;&qvZf+?<%Qh=b53BSLrM<6`kf+s-zq0bMmnTq&+0!YvVE+YZyD*3lD)btRb+<( zbEQv4I`om&vVkuXffU(Wna7(|ZbGEPWZ7F;%da4bnb}*JH&38f&B~Q9|H{7nE7um& z7h{G2_b7;tGoQfQ0%1M8^)@@JO^+ zkr>gDkdD@IKLIJSH%G(sFD1!{j)c_D3^^{_sUPipUy_XINJ!i9a>aoZd7o`xE+sWF zq9Y-lCk}0uKAnf{ssB|kHw zBOz_YJSfY8tOjE!|KU^8CnGu%GPv9BN0JO~GgI{tBRUe&-Yg#SA#b!bzquoQGNL0P zZI(Kjfh>&C20u-!wuczek&s&RyfJWp4?6qhe36^B9D@8%w z`d{Z3qi*?XV8dP=yqdLyQFuv&_#}nXik19MD{3)azibGhL#IIk8UM5eG`s2onEe^y zkf^lQLA?%YTKaQHS_d4)!6--~kkTcCkac^P!=()-QcbJdGwzlmQfQ4>S+%?(Qx+=;sUPmy z0?4}PQ{P_*OD3~#Qx+=;>B@4cDUjl{g)1odq#{#2t>|=*{u)SVE6AMA-Hj#5NRGs3 zc-#_5%&m4L!&`U2J$4bTHD$?>knv+-me;HhF$jmFFGWd`5e^C2pw;h5Ku$)oL5o+f zB*_SegbY8Dy&aHgkPJW63B?c*Eh8Kf()IH9%}|7NMAG%F%r;3f!XY7}J+J-&pHOkTBjWUX8CnNt+vd_ki zKu!~6?`C+;QIL%MN6A(LA=-4i1=-@3ik6Y`2wC=ETPP~6X^||uzr#rBlM(R<89Ul_ zA4oCcV@LK>*OL+P2VnjSb zIs?+o0iR;lbXuNPmLwzM5z_c};XWY6oM6m(@_{575s#4e+V|o9H0K0+jry%6$%uG_ zGyR4Sx%Scp&G=8dI2--OjN#n~4mp^1<|(_4egX%#YO(B$Q66=Z}a zLK?rFf<)Qt^Wa={e=DF>3La$cFzIDB;^p_+VNrRAG^@Rn16yjD_`((8uF_H!$^-ME&04e4n zJ>#Qk(kCNKP;z0jNB81#@0$?%wQ1r(WbSxLzFkx#MQ5~^PO z;5WFpB_;``tR!TEW>cUfuuejs4eB(;9V$UGWhEiQ4|KzEYZcM%%HKhfOj$`t*W+?? zA#ng2CjHy3-$;@vD+w8GJA-2gQaUIr3+x#yNv5nMq^18Pn1HQf+*&&4-y%t-tR$q? z=gK}HXQ5B66|DSxYR%aoOb zv`1Z1bAr9hX?0bYvXYSS-qy?Dvpcra{kW(qCYZ94kXnOQzw6hwLkr~G*QG+Qf37Ifxdqp6(Aeqp!47{K=wqRT0;H2 zl4QzCLOM?0#T2q0f{uf6xaTA01g5McWXy;}5R0r|AsN$eaS=%}WhEgK`}eH?*K-__ ziCwxKl_XPE5;CcMdl-EI7m-Z*%#A0LM6^s`5Js4MW2>$FBFs{Q&v)P z^87i9{Bp@MNit<6C8uS`p~wjfdrFciD=9fT*WZd9a`>twnX;0SBL^N=D@d~G#H?B5mlMS$$&{6ZY_TNbD)j2F*tad_=Tqf#>U-?2e=>kbWxhGw^|Y?q zyyrR1ng&^unTPkNOnFa;?kha?VAWI~dxI=F(Ak^_4! zQ)HJfdwZk(FFUKdHsS940_-4TYaTf#{I8wWs`Gt2t7(Bf2I$rQwzFC^m7P`iR>uCY zoc^zk)oKNL;e#1jMZhrwaWIO-->4c;QGAlZ#%i(`QitBIwh3nZMqnf`^ky_xY1O_% zv$=(d%xGLx%^Ag68d8RrJQ@Kb%7Ua;^57B7$V@WjI+l@b+^&6fm*H@<=Qxk;v60TWWsK5Yk(B3eC5 zQ71M6}io-zYNmjn%sCJ_8cQBV_e8yCf+xt^Wt_o9i6Eghy z)OO$#?sRD9(}T;UPp0Z7q&rs_j)Wdax^s-i3RpzTRNaKs-$vX860|0`o-cozC`sli z5JEF9zfEv^p8!FWa@Q7YTpfl>uLQKNp0cN zE|O&GbxO{AuolP}g8a639!WCwx{tJ0+H}$ZLLVB+Ma}da3 z7_H~(1I!=A7-H&mLOQFQ+X1AQ!JL&p_(GCQy-rBuVA*FtiW$t<{W)g4!Y5O&6Vm?m zV%V5BXE6Kt-+z-NQ?C;;IPNWKcw)o{e_s5eB$;P92xj7C66N97aQCF!Wt-H;@s5fD<( za~5h4?}441xw1);(Fh0`S|nX5@q@>H;CPg|nj}+P>&h zTTp1VBpG#qka~eLEg@QQ97X>yw!0)5b%Bu1y+bbpDdr*P&izd#$vn$J$e8_+c8GQo z1{<@dvAQaZEwSF>M2q8mm2CfEj6h<3zMGuianP)i&>FN7t zoFqMciib&(d6t8cB`W=@$gnYL24kM(pycdx*AzMH1C@g@&vFpbxLe?iB#qnMu>ux% zHuEe8AuUHL^?<7aBM|sQv#LmvQHvrqb%L?Ri=pbvkxEsf%Pev{Bk(&Eu2&mSY z*hh6gPf#;8^FnGu>Y-V&RzC;-Xu7B2UFnl~AvGaweTDXN2}xV;hz}*n=uCw4v{{Mu z?n5L!Ez6{lB%?DCQt#;80HdcLl6w12!z9T(%R$MqL70Py^;0jo7{%~KMxi34`{7=!KSev;e+8%!&pgXPNP7P*{vmAtUy1GmNvJdvH zQ%_P^D)TG{Asv^h><7~9+usw?OP|cM9F$zJ60=m{(=q3pL6T&i-h z#wd=IT+`r`B3B>A^Bm${VH8J7uK38M$R7sb0W2gr#qnQcm5M%cd2UJmha)f#8_tEk zU5p)MJXk1aYEE$^K8;2duPgG?zIN#|^&>FJ1;DFKKxz%Z;xI7u+?unp%NPNWNUbIJ zO~o5lB%dXJu{jm#69D}m;L}R(ng^nUS&Ek2dbXnw8B@?HrRFF;&kV7(6e8pp@!zo2 zXo2}XS7D1j4NR)=XMG+{;?-k$;qnoF-b~?I%z|`~qnQV}V`k@aNSx6iNwb~niY7o4 zT7zTFxw6^JDvIa>=J+J`W5#A$g?+b(~GGz^tlCQ6~ z2C_c-)SnL6smPQyNJ6?QFTq*05t6P7`SDDG=-|}fM5Ax|Y%h?_gwOQ{j!2TxAc;?B z)02mQ1g#AEwow7xQxQJ@!}*_7awBpD5oklMEo_W=nrEBwsfKUk8C21&_TGll~R83Fu! z(^1`@j0Wi=ttCnnoC0Ju;H)J=f*(ttj0Wi=HRoR^N<-h)L6^?klTl$4SB23a2^qU8 zGmdz1f5!eWALc%jWHd-Z1}{$-4?e~H8N4*}Qb{rzBq2TL%3TL?C`Ri!p0rt#j0QXW1j4NRrVY32AJ%LZ)ucV8)h-sC$YYVl+rX+J{5Z;hn+k1E*z@B%?tR zGPudmmq3aU9~@KamLwSsl8~OP`(6Vn`qmTpMRiFs8YCf&;x)ejvKRKP;qLdnBpD5o zkoG&S8!}q^jbisC$!L&-bd=l<3#j*n(jgyqkR+o)5>n6b3Nl#l>CQCgK9wY+K@u|b zBlj&J;j{>7kaG|4U&*?mD=Y7vI&xLWz*n!Ea8*UAPMPOg7cu$!L&-teSHLtl8$7zN%SU)siHmK@w7%+u{=-MQx$YDvULhh?dbH38`n#0i=1F zK@VE}K$46GNl530yD;yW_lk4P1+0mMPey|zWXu*zd59L;3L514!VM(JXpn?VoWK50 zNO!+PGI4Ih07)_$Bq2S0et|^UyegiA-Ri0^8YCf;rUbnKpI6Xl(!}WQ(kG)q5;8Q~ zjpg7|FLsbmLwSsl9KMb ziHg)CasNe(K1PG2t>QZyHg9*`mj^F+P8B1uMr^pS8XH~`n{GuXH8`=eo--i(&f zAPK4KZ@vTQERwn{e2yd;4U&+ygzdWk5+^NfT|#P0lF=Xu>1o*HDv-C~AI(#1Xrv?= z4U&+0n;UpWvoDf*tKe@X$!L(2H1_TQQmmi4vwkB5Ik`)R_b@yj3AB*|!ylx*gKJi$vgyrVKHMuQ||I5kR=4etz%mhIfOIW@9T&?hS;*(k7`$}o1^ zPK|6_14o{>omKjx>MpLz?v1ID&fr?(p>M^$zO%?ymAx@4E$Jc0nSBd^6xEgEWJa~F zFe)u2XJkQA_;gHdnqNlCsI-K1=6$zXlFr&HeT0+{Q55VkY3C6q3R<+J;Nir%e zA+_m4LHe@}M^c;8a)Klom6no=R%}${JYPk}sI-(^9sufx*XQ?JRn@_$w3J-@=ORTe z{3*s8EvM2_a>-=K`@B9E9%(5_Mx`aBai;_32{_Md#;riyLB`R?skD@=lK^*_m#pz> zuOu0j_L1)}X#n`bjpwUyn6y6pTNK>zZ%s?_H9dvpVbX+NMvcnx-P*ZWktu}y-< z`{VkSn^+HtQ!DzK9}Y^K=%xhk?2kK}x57!F6MA>nJodH1eFr!R-qjxupEU?~KpcpN zkNpR;J<)dZVjY4f_~ZJ8gK$%OgWsDtTjE4UC3p{iJbu+nShKB|hiUPPHmj4ML`x-j zFMnJgc?E7z^Eiv%qfiUw-S^#o1n=XIhyVQ$b7Z{jwD4O^QKuAbC#ovJ`}yPUY-^yv z^L~q1!1F|j6KR#;1N?FQnLY>bX!Ne1Xm(oSL|-NNAb&i%{m&gC_)LgLH=Om4!hIqu z!H4+cmc?H}uUq#aZkc`;l~&PqqO=lxm_M#9sDqO^Gys04A4Yjj;6!dE_=sfqoWqdG zTBi$q@|^M#Cz>n4NBQB_O6$7df^ZCQYo!%QDE12P|3P?tmJ^z6e#4#f+SN{q^nC{) zaXik?u@;;7Jxns@8TQ!4nWjpdsILSc?~ezsvg85p;#Ln{*zLT;i3CgVul#Y(rKvdp z?}xqSId}nAP|<9n!xDU=KkkgEfV*&FmUMcWHJ3OMV+lUVA2)UmzYe&VC5>O&s_{w` zS%OdT$L(V-tpZ%klJ*4SbLpMPvIL*zj|aD?(;aYew**(Hj5&a4JJDtd{*6EG$<^@+ z;G*Y^w>v(NI1y+GKGPpJ$`l$2cu(wkBlwyc?nI>}_-udN{#O#VT?B7GndzkTPNZ6b z&-KS078h}1pnS2 zPniD_HV3WS(0jt{f|!hnw*Lnqx61v$fP}0Dgxs*!+ayVZT;h1Szhl?hxnD!CwL#o9 z|Jq@R6E&CMEB*1RdAdUqX%(w_)eIG};1Y2YNtfWO{c&yHg2{lxsDYnppQ&CWx-P-j z_~Uw>wT~e97^L-p4o{?aBJL9WM}OS8bygX`#m(kiw#OrJqVN*@Cx1L<`wuYKtP|0D z%<5BWq9HOb!PooaiHpi5fbI$vAZWcaV){w%MC&E^27lZ$uoDh+Bu-Rcf^YH1Lvwc;4c^6d4-J^E4sQ|Zm*Cs{apOYkj{%2~ z2lLd?3X`RGqW=gy)(0j=K8`&gI!mm!%*vkxZZI5D(Rhw$^^fW z3=b`}18}jb>%n#QOPnan1pgx$ela8h@Z!Sz{)>$zPUK~R|LKoARzHUv+Dt_q^Kz{!EV~a~=dx0CJCYiE8OpYDL9Q6DOohK@xm|v^9BuS)UDlHSzm2SgZ@Yw-< zy3#Db%PxE}udX9x_=;{>fSiD2`1hTME7B(jGd^`!^)*0>Xmz`1q#}JE*Z2^~ zPtm8dz|)F~^vS>s>FW3bCl*ogxZ>(oR-{h>W=Q?PTUf;{tZOoSp_(WwcJ`u>?sHwU_Z3 zzq9^0@F@;)#cvl=uQ~eu6hl8V#zHnNiBJ7(+PUEKbNoN_lQpI(pFWM3AuFZpb{Kr7 zN3v4jtbpG4keNO##qJHRI-36R;9vE-2?QFa;9StAc#mHJ3JE7x8tNh0bpWb_vg zyFj$rkc=LEu$&@&dM-m+He~_%UVIz3X4%kns3eJ$%aGcJ@t{jt=c7+;{qO;s8%o)tMQaPveNhDgvr+sxU%&f!= zW?$YJ1$p6x+IC}%8-$LwzYwKr8bh0 zJ?pfUi*E#!`A9`v+?Wta60Mc->3aVfgb(u@ zMO<%g-;^YgSsAiw*dAOR#QIq^WY+*m5`~o^wY6WtXt(yqc4~>2FcTM}kBF-bsh77L zg=iZgsFw~!AzzS0S7k_7o>h>%n)iw;`-?S_B$6sa#@r682+>YKpE1{GqfQ`v5;c_} z6MsGpc|yQMBolusyhoBmNM%URf$uKJtK!*vA9Y0GlW3?6ne@Y$yx{XX`b=87t)(Q1 ze9Dla-3sFUDYj@rJ2l7JQ1~RuDMK2MJuiWriaw2peN^^FL{o+gy8PX3=-Vnt23>rE zb&2pv^iqcO>#`B-S9MabKsrB;oTBvDBj(z9wFYK(&PtSH-A zl0+co$W|+Z71=V|J4q64lq2^Xex=CW#c&%$^bnCnIr0Mo<{)phxyKchBvC{e(sHQ) zDtf2!s#tzsg6fd)NyJc&JhbyZR+XSS@!OHczipr(vAx85gGqvGda}~Pv685cO zUtUC#MDtA9r=~XwLP~6m=%4mjFG(VIGNf%q#SK8-K%cgyVUr|Dlum~9%=%yvK+ll$ z%xH06l0@WWNPXfioNtF9sZaRup(KgE$&t1CfV5!lw(2$Js49|3n+)kp^XYydOADXx zjTzD>Q8gLTv3~{B*k<}q4pJVW7ofv&Y!Q{xP&r!n=SH<{xhRWWEc*&5?1{Go6vkbz%b=F_5 z@&uw=GNhid&Q>5>h^vx*!e|*Skt`X~vH$aJ(x>Csqj@Ds)JleQMz@Dm&>L;FAODaf z5h@wd)^=k{AfX3FZoN&m69aN zBu8%l3-VhpnG}ngW@01|QIaE*zQ~}+trwbkNvcP3)=aJCFB@NwzEcRz}Ml3B7KrmMDrO7XV)_>k0`H7KeeMe>X)T zR&*I70Fra5r80l<9D<0&@JprZ)>n}!3xI@-+3|EJbeTw7V>VB1BS}U8B&75G4+i*z zv;%ItSHB-sr0-ZL?QBAZFRE4tNZ9HCk!nt#QHo4i03@XT$(sMi*?oXTaW)SCzdNz_ z9=pa$FGm;Q4zM7o2=)p_MNuQR*u~g;!`?M&>|*aC_7Y<+v6pC!i9NQc@jvtK&E5o= z&piJ;PcD3){+M_7cHehqcK6N+q?Tltz8R;>%o~7AI+tvE0A!3BZK262y3D)*$fQeL z@^O$&QM$C~qNh3k;i>sYy>EkTi_+=AYQ0S$Gyqvl=cLnRK*G@g`?gC(ysbwa3IE}# z`5pah!TafgGI(7nJ+)%@d<+zV@JImA~XP5OvC1vTR<*AX;|0f6U7u7fLyLkhqA{sOUaen^o2%f0NSM~aiw%B!EpNE77 zAd6Y$%2HU|v?IRCh5MH%rqBRn(xdo~*FnPVJa9WpzLe!8g$5v#&e4}sK&lzcIcnh* zlI%uJVLRP!6mkWrW-zx4L!C(q4L}yN+Ol8a46}Xj^McZP3r1)FGFfG1S~^H|#8+7q z)`nsV4L~N{ML^baE;PiKn)QoGP021W9NBGU@5|VkXEHxSgI(BjHM) zHYW%TKqg(c9IgTK8X1)QfL4&>GHP!N7&9zC|#a^yhu`L05VzAO?~OI zT0d)6sZfTb&;Vr8ur9}K7%glo{Il|rey#`&Kqj3$zBj>W)%_1nPDAm|6ZNhL4L~Mc z^5$3tQk^RjbE)7MX-0m$U~jkShBt~mka`n3I<#a`zbU4nKb_L`x1CpF5n(AUOe%fwo_;T za(OJVw=NGA-#}7m0CIWOFPAQV+O~z>r4Ge z5E_7XX$tI_H3H;0*g>YiZ;QB4OrZg2mj<`WmVKZgvw?G^LWEvB2n|3cof?kCx%LK1 zr}`yFQcR%%$Yj-JHSi3B83mdeiyicqx6lA&(tY|sXj~iqLg_xmO>g@M4L~NH#)aT& zKM1AMs1y1{0iglNW$h8|K&tiADfEEeIusg!T)wXem!pinD&}7`7t$UQ8h}hX9%>I4 z3AOCaac|54l0pNJNw)%CP#6T}eUUdi!Kqjl1OGCw>Wi{2@yW%~Z>iiTMfK0mG z-&a77dAC$yl0pNJ%Lyy1>2k~; z9sj=ZkYWlAKqegz{oRaWI;K~wNm6J4GU*(C9BMM#XszY-+(c*qGFi3lse>S4FTuIe zB6Kjt6dHg`8dfB4f$3lvO2g6?!$=AZKrXj*@1)CA$CV_71|XMvdV1?}`wx3a3JpLm zcl|L*m)k1Nu}P@`$mO<|Pj$IzH)W|(1CU9#_j^-e-@?%VbKjdGy(lKT4e?)f8UFd< z|Mwk;&j0BS#ExOz`{0A#|LZG*BEEy6(pLuUj@bm;pehQt?*i_tKgs0I!(eqcRx>+{ zX_*4ch1S4{3Gal7c3r41`IqME_dX`?J<|^(vKDClNA;n#Y$}EOuKw+**@&~})9rkJ zuZ-NB^v4Vs_A%tvo8#T2@XA zy5h2mvQHfRiNi!`<$y;gYDejO=Nsv#w~XF;4u++8{A@-Te}nV==OUG z86TXHJHLy|101p$nD1_->d{$ukn!XUJX^1^{_zGwuGyfo^%_+iPcOCYLYtXwc1YAe zr`?Tn>_~xyS;4pCPazu}X{1z*XIvSn9zN;;c`|`0$K8X7(^hO|&n7jhQjF z5^yu>7LKawiGMI7K&`Ezn-I9phHOP$hw%TDr$B@a0qNT4u z;9@B2e5!GmBjHkX3amwCuZcv(rx<#RCAg!-*>f% zvkoBRlRx7H??Vg6q^1*N_O%A$tPRNc)QmhZJR9_Jw1?OO1M^KG&Ti>rTzjgQ?Yfpe z7D(+(>KtiVC95BC*4ATOd#aalm$h|Z&l}Tm*SV}x-!!6jozUB3GQr&yk5b6i42Fbi zhmKQVp|{7R^TC^NYG{*+^Oil|lVrU;Hsl2vcbI$45zzFqebA)ebS&Z2kXeI|@kJTA zW5^+x#I;GqvC{D{;;hTZ_>zp=?O9o9K-iMS^M(5pXKgpef5^xUlaK!fAKnag68tl< zU|r%u?~Uy>!_+j)6Lu&$>D^S4Lhp@9r(^eW!jPMwbXwc(Hc8fdV?)*+<7M1)!Oqvf zp+JLTdvZ1`CDs0B4LHWvWZdGlo})}KE5M3tFs!W@6RXPrF8H)iA= z-unyz9*4ZcossyEks3E^=P|B50L%tob9UHG;A-uvIZ<82R-AR_7}uWQW!zYx3*-vg zif_!`v^7O%?K#G^CwLimx?FM}yyYt2ciMeoGI7?UV|;hUZIAiB#uJD>3%5O{-4MKB zpa##{ZH({D$TyUI1>7M8`G%sA?})RW8{=sid0N?uhk-vto>q9Ti8yPYF@7*3cW->f z3$`7XeS>@Lp)tf+Cya6J8CtgM@>u4;$)feHhms1ZB}p&Sju(xA6*PPY`FlAI5+AEV|DQ zoT9Yo&cC@6XAL06uYJZV-guz%0;|UmXI&u1Z+yl}o`JT3EqcKc)rqrK5aYKpa#z2R z?P1S{T$R`?FyZjJN_Qs}TS>9ncQ*C5pt<+RMB8O3CM z5;kP*DNM$l7c6@Z94>M|g8Ti~c=ww+&sejB@jo(du~UPNaFlB+p;N%`dfLP~CX8!O zVY28|Pxpiw&ghQOtM2c6ouaccoAGxUqZ{*Hg;mfr7P-;EgtfLBJgc=CfBzXTwGH2G zjTgKEWthfU!Oi%`&v=FMFLYkK^IPJq>Sp}YXT0nih-`~qw90TB=cTuur)y7PvR!8^ zu>yL4HeMhc`+&IZy#8ifdkT|r_YOB!!A^r#KTJ_gf9pY<72%9)Phm3dcCtfl;%<9g z|02$A#bI1~3X|QB^Lbfp$v*+M2Ieiex^k(I?buw z7-Fg|b_%J5H;QR7Gb@YJi)0+Kb4oH!HH|Q^v-xoioo7}Srx(k}U9QdF4qRO+bQzQ@ zMdz87#pz#V)3P|dY(^fF(h=r%le)qc zGiD>+!KF4^D2w^HTa|?#xG5(F4k`AcD#=XC;`FaG26pwY<_P&nXXLI<>H171l*KG? zo%iJ+6)_b=S!coVw-h+jvN*j;#=xfR&#|uk3AyoDe!ZN}v@A}qmXRCtEEx@4%e;@g z)Ax6#WpTRGXFThmQo!e6bi=;iH`CxVEsN7#GV(xwmlMFVqYn71TQ1_6mc{8F8F|Y} zru)FvInv@%C4ExKv@A~d%E(<-Oo6z@{TSV4j-#GK3S}{S&k`!N!Gi@a^B59}?ZH;L zI?RN!m`Ufy!!|!i`6M+7&?6| zaiJ_`dku={2-x4-F|c9S0==0al*LRst@Nn^LvD!Bsn+6k6f@JZI6XY$kUb}C!}Mn* za?j9<*tb{vJJYf_y;erPw#>E;Fe^Ya-C$VrkE_1;WLg%d*U88Ydlv17vUnkK!}`E$ z6kRBb*=AdRzxEtt+m`lrud6xM~=6KWbS`Jkzo`Jt`yba3k(0 z@Rk_8!;l)$#4|06)9YvCHOHCf0at5R&6*|kj5pJ=I6WpKH)h@I1H3;*H|#H!O3^bd zi_;rr>9roBPeb1DLu-9b%Csy_$M4aF52>|Z zeb`WV9PD+6Nyyh9Go7XAnU=-r_}Lu);%NnY6#{+_`M#Z1^oc3cvN*j>M($p-bx+uK zRg}9M4;`TBnU=-r?K1K_-fN&iYJwFQ?h<)2`VZonmc{AqGjjKDFGFkD7QJetCB!o= zi_<%1W-pk3fEKcwDIq#WI=ReKV(~nHc;`9L-xvN+A`moa=^MdT9 z>V#it@IqP4j@ND-lVEx>{*1C)i^lkTpPC?rvY1JyrJeB7ubQHqS}rX|GSjj+eMH6~ zI}h6W4{(1B>|7%181YQY;`C7&xs&e}tg6*Y==jU~PsB4Vi_^zs=&r>!W8KO{x*C>&QSO-{;U0y>F19-(FN-E@x9~Q z#rNvq7TTw4m#{uPdv)*GsJr%GYy0@5-ralt`}#C1h?mkplGB&MU)ujIyrjY9l;pH3 zI5=nlCZ}hImwnL9OFr}`yc`^ZKS6^l`M^bZIf6eOo((U@;QdZM3fCl(j}?NKBRApY zBxEMZCr})JjQ_JD{#4(-thl#12jz)zFK(rKgT@WjpJZ}1JS5}Q@XEedzk(D5-Z6ur zvQHFFYmwD((fQ)%@Wf_mo*Uk0RT0H}GG8Id8V39(0@k`{kh~fzBGq$hFgX1YN!BY6 zqI9l_@R&PlPZ2}fE^~W?gDzvY2OH47YE0C~O!+d?$370xe+M5G{blLQ2 zI><37T{c$2#q(&>0^Xy%*7~X&}LE{z5`AYy}Q z%i)b;DyC4$vzQU@`rL+?YEg)IWzt8>DtRHM>H7qnkzrDY*W}H3(};@6ig-a9zkg8@ zj5^|tLmPG{$?A7W_IdOpNR{Iodq;dA$x3%Ynr=3#YcOO#rbc`Hju%OxEMa>n@Xw{& zAZB@#fsgJC(PicjwlLXp!XAicf~v$|XgTfW!tjqUM{823@|ko=$e9absyV@>L(3KG<*`US?2pg5wK^rX*QyFG%;anb40gPEj%UPR~k`mGy#bdiUr;sOXEL zY<=HpYWES}#{0eZFPIydc;9xoIWL3DEq2%iF&l{DES!I$n^WYdbB0?QDlKboFAq zbym-5*B>lVr8EAoHAV1Mi6TnR0nfrCuP(%4$J+6r2cWwHDJO|Bf>xSw$^K z(`si}uT76}w5FAV^>c+4(~?}DA4mI8$<;Nnx={O;)zOmNunOKwn_M@s9!XY0OL9pr zSaof3QH8rCS@kT*DPx}Ma?;W5Bw67s$&E*{z$*Bi+Rjw}+a!fY3)l?iI{EBWcvotp zbe(uQgrrbyGudtTjWQt5q3pKvFQ^N&eJfPkOgcvodjhf}O6U5!%_Ld1Eo`UDgm5VL zj15t`j2kGY=HQIKjya(WdujwGwG1z9a_3>JI6R=NEO8gBc=a~1veH&O+iTd$jvXP<$N^~}m`X)ENi{5uK`%>e z(J{sv`>%_6wgu)WQz!g&F%LT7eJqjC^yBw=({IYqWNpxA#5j;{C>taNwk0Xlr>y5? zUX$+|*n=lfnwJlnM^dOynM|FfZloBBGIjEe!@A78K4sE*PP1JQQ+3mwr>uodv~6eR z^(m7s3*Jls31=dl`7!2>Z$Ll&Tf+xE1PCCL{j* zgw-@Of((X;2l={DOrbty($u#CtabQB_3+xWtjY^9rcj?UY3%t$6_=9~>Qg37C)$^TmH7xt(}9oBGt-VCp+03Y@Ygoy!GMPP^p{ka zENn9K`jp9*Lq_%i3F`pVr~R}0kQC}uCS4v5G{P3Ds>J2)Yn2V)z7^_ICKGz@gbC54 zs?3DMRkbOmP@gjC(k9UaG1Z*l()5(dv{cN@KY5i&_rF$c2C3!*_b10sQcR&fWzzBf zfGr@^oZxut)eDkBeafVJY66^}+81xTuiOcpPwib1>Qg40o*&r;>eC|lt~5RMU8&3z>r=Q2C0e< z-xZ-gWpeG+2*?W^_Mu#RZgdjG6zWqZLzg*Ytr(9obm1I*-wO39lSx~?asl}Z%B1xZ zexsN|ead9VwvW<5s+G56)AvJ33iTpIF@^e+$vj8*wukL( zg)+~9EsaPD^(m7cIrhJzm>z~@aMeOPvxWMUNz>9GJo^5`n5OxA|0F5Yr(DjfdjZUE zO3t`lnxs&la=CDSkS^!cNhT@Or(900TveCj-;X6J)Tdkydkm|tZM1_|>+6b8pK`h6 zNmf_|d#mkSP*2q}IGYIdDU+@Pp1~PrtcB7wDPLY1tx%sb*)6r{eUN8Sc3a*lk)%+c zGU;3=svyV?D4oNK>c_26pEBt({M{vx(I{O8?^B(A+)klBWzy;4W{9V)NKW^BD${6% z`jp9P%__oKW>mRmwdg^5RwLA>Od5ypgzDY)9NCaTFi`D?7wS_kr&k@X%Sms#kQC}u zF6Y*nuFGjr^+^i#DVNJD4c6tN$JcC9s!zF`HxI8%s2R*S<11Rrr23Re_m|PLVc)8? z%>D5#e5wU20O`{Qxopu4RtKAGwDxDEaA`EKbc+-F8$dB z;RyQ`VL0?y75lFevLF5#8*t3Kfe=Nzs1bAP&m1`5YVdd1B~two^3X`_;U&f!42*sR z+!aUKAn|uqeIRFbDC640ON^U0^iGBCK91ZxZ^TGFy8SZ?8P^_OVmx(WDOgRluewPc z+ez=2uq&pFfA;N#&WqPzS^6zTcOHA~jvn1!mNKqA`^2KVEI%I(ybE%dNn0azZm&%l z*PeZ1-1SCdT^?Sk>i0Ihjq|BewBJ^izz?qbDF zz*CUN9KQOLI4fEi*B+f>(L+AEyaZkzdB|_~^wtflTp9oD+Y60><+nkCQWLqc^1~+- zot3YQYfoOW=n*e=EP&|MkVo8_eT+D(VHww+ykgumxN|Y!*O8mLCa)yU3R%XrC$AVc z4ru^+wn?2b#!egc&Mm8E89$YA&l`L8!309J-i$3@>Sr7)X&FDAk(++rn*b~NVKw-) zMqkn3SzXKc*^E5!;h!E5y)5#;3n^+c$AdPro2`dNp3lfzjxGaPrAe*OEqmbu(%MnS zDqI%*vu`hSdERIVyyL34ak(13g*Yp78P^_KV|zX!ITY^x)$R#Rh+kTSIIDFT*B)A9 z+~u3#j}TqWHZBdUr--u)vW#mFtugNYuAeh-HQTuV-c{f8tm7PGOj(e#<=^g6zHF5UpMN$q@$|Q@Qq{jFXMMIzHv>jABEE;OJRK9n;vVV zpE9fnX8c}8Zn#yn9qjqt$PK5@e@%mDl`!L{JT9y)uP$|x{8tBx7h9-d=7X~+0v;LzfS5_#nu{Zbe!kr{uQaoam~%?eYcmL7C$ z*iXOO!|G(lpJ(K?a#qC!dKgBp`EK<=+IChfGyXCoH_rJ5SDCrUjl-|DB+e>k#$RRR z&gW*s`eyso-fcbniL$J&MkXYR0wa4jDJC zm;p7T=?{!tlDNg?`M4FnmVvR_fp$F zrxn~eq%D!G#v*Mfa z!Wp@9)N;IL1A8A5@*0QIiL(lv@uC^I%a~qkfHy$y()X;MU9d8o@!}b|)AN+kz*R!- zbmQP7iq2|r#!F=6)mk080~}@?gP~fTYXQVrLC$!ojNCY;wmZD`?}VlG8zmy;QC0#@|1_>Ow~C`TN`3j6h7_bw;;!#MUseE62O z6Is-sWO9r2XHQ1QmWUh!J5VKuu|+L$@Oz`M0mZ6#-UVPcWi*)fPZ^M&7_z}s-*zNf z0WV1N{+HKau%}R((<(0@DO^ZqF;fqDn<1uZp{MR2j0>wa+RQH`GwFQrY&nS86Jt83 z4Z*5allF>T7_G~pAs0Yumz(zA#cErV_F`R-ZU%E6kZ^jyl=yc#J`SZxdz~&wmt!YQ zAjhF}IdW_RNmim~F0=Le{TS2mqR-D88&qpNmj!PvTpu=NSe~==KSoBw3Ly$fV;-lR>I(UeYn+1(K}37G%ds$1&wnYj($R8*7tfrL`by zm5+hT6Q)tPowdr2z_M8FTUJ#I(zvE0yr0^a5F1zh3HgO4SwSsG=a=c1VXs161uO5< zylzDzx=tq*3%!2eN8yrS4 zJxb3iN|IH}f;4UOg6%Xt#h9ioYXeELLRpe~dc*u~dZgs8t5%Y%MwaB>0xNa7dt45Z ztUQ+FhJWhna_zvYBw1xF$pt0wHY07c^QQG7$%&S#@C!*+#tPD9;i#=3Vg7@RasJd!Bv}P3 zNN0!e4IovP>TH^cZ3A_#u;Nva)w*u`9i++_t98kVb*qxBZWW|)=^cDm)cI*#5}?oV ztYnqs`iYopYI5zl6%>3Ol;*8(^d(9t z4w+2dwHlPxGEQB)z7WM^*L3-YGwHl12TX*vC2HNq0=mq+IAqdg&yCF>VX=YJZu6Ub zy3D*dWYYEZSV+i>Ds6TB<9$tCW?mdJ>2k0mY^U~}yDmFs-6km%hjy8**Zmvkp*Wla zgU#0KhI1H6p*XZlL&(RyBVgY`fe6=4pT^*QN9t4;ibEz7M-IjW2~Hrm-kbcjehdl4 zA(Jt`j=}_KCd!y=f9n&IP#iL8$u$(FP*X*e7Kh*~G+LoJWYTp=*@m$EtJKQ1*V|Pj zh2oIOy16z#gP6`3GvZ@bebN_-LnckrJW7DPh0-)4_793F6o*V2#}{r2Mx86h5%;nC zrQQ{xIOKB3SeW!p2Qa3w-*aqqD=8F*Oa{Jsn*$^)jc_6M={A~}_=Q;EENeM)cN|Ey zxV4;;yCTIDibEFDHGA)kFiuqxxEeawCn*$%OeW0i2Fs#Jm3RpgkI@7?L?{lKbm?cA z1u<3H>XMjKKR<=ykV%hRCEkNnbApEh+kGev_rKB8bD=n7 z(s|=O>{hC?%z63lArw<64w>}wd$b7TAq?r|`9|MPp*Uo6opEjeoZ0(Pu6;gzCB+nq zLne*m@;!v&a4AaTz#oQ^6pBM8L${_rfj#sM%Fqpy|0F3ChfF3NDKP=$HIzwdHXC5@oIY&+m~GibE!iD}xV$T!7NJ-|cR z6pBM8(@y7t7L3D3lxh36O&}>0hfKP^E$0H;sY+S*7hb_6h2oIOJeThcgY9gCG4q`B z+dxt%4w>{Qd7v@H^e8g-3`wClWYV{|`fMT;hfKQ8xdca^ zu?}vhYf6>w6jLY;ne2AB*Eo=nhe2_eR{SYRp*UpHxozk>kO?TAW82LmDHMlHy38#P ztFHDT&MuSvl1K{0A(PIA_1i(JEY<1n06nJ`ibE!=b#{FXQe}+QzUhP41yzP26o*V2 z7o7M6?}|Da0EC>JDI|GM?oBWDgNw<@r+L|Q)^oN%Yeer)nXDE5hYj_zw3|>a!UunMyUcPyW zFCOsH8QP`EoeRQC7rb7YxENlVL-m#1Y8$+?#J|_l4PIJ6{g~V)0$y6Z*Vt=4XVR&g= z7hW1ogqOMa`)0p`mpMD|Ctv&6z0bz9g0VxwX)t)7Trn2LKG*_(=YNcSG0f-5i`v3V z>~Va-F*SqrGr8$R`|tIMeccugP80rKpX%p7s6WZ%f^ula&)o9ewFB~W<4uIVTQ42P zBLMp8QqO>03~XL+2ZYn^PiI>hMW_Rm@wy2qZR6RyEL@9>s%IMF2Py=hJbaUWS_Ka|1E-ZXTA{9GG5ue>+5$15Cu1=9{~4^mD?(k%q(|ij zZ$OSl=~2D}oRM10oS8oZ%cSp;{E&YbRnFtPaKwI+LPczsrnd=}$&eLd_G@|@ANM0k zq1R=XhPul)LtjL@ouTfc*^fyIwHK5Ahx!eI(ZUJ~duZQzSCT^Q#bo26NxLEDX_So% z?I=T1sJ)nsxLp;FJ`>c_(BZg>AC0K(TcP%1GBo#xuR+3^1$9ui#O5T0+RH8-&d*s0 zRd|jA03FWH+>t<1sJ-mc5PAF+>>cg%bs`V>>gT6WdodZk{UIDf+Owh2n=63KbNS=7j~S!TY%srFmX^%p%m8EmTl;Y1-}H4EkISc*L7_ zJML^k^2-mmGCO2P(j&a8a$uQSPW9l37(JEVQ#0S;}2h&6Fe4` zzYP+qe~39ZWjINp_F^%c-#rOczjixv^P7=fNeW+9&7|9^wc{zK+w#h(B!#MtN#Ffl znuC0XqxIbz4*7+)okG>dWMJv;t{~G;1{No3W`vL~UtVcX6U-5?{36H-N+tX~z< zS1o2t)i1^L&QpF7N$+eQN04k}{*pBRFcfBLTg(L)AXn64Hi`J6oMv32%L#)Z>D6Sj zwqKIgK^P+@DfC8|44j^{m}KD8CM_tY&>P`0)%cq(*F`{GpzR@{H^Sw|0?E33+aM1~p*O;1 z<*K=KS#ISCl0t8UNuMLVVcs*s(Ez2x{@uTk?9=Q^M_)jd`N1HAPzF@Ip|2~#myffU z0Y?W{2KhV&!NHSzVCqI(H7i2RT zT&2lBB!erq#%p5gh!?&fn@P`8A3MNyuEXv0JQ)rprY42n2$Np-3&F)?O?ut=PLC<{ zMwm2L+W(ZKxx!yiGiot~-UyRkuk-I9>GiVpLYtI&BV3-dmeJ+urQ=Boy%8pT%dDIM z`!);iA>WdBUy}Utg>#=44d0RUY1;2JNvV{!UpTjZRs?Uvk8w8MP=lB`>6PtQNkuSg z3N;UF3QLp;+cSpdRlDeiqfi7hnG)l(28!TLC{sKy>dS>t1Tz^Ey>A)BT!Avi=TQ|J ztxyCr>DwS60k%_>1io%fyX!LZBACgL=69fE*QU{skowRA(GDu12)4_d6Xzdj14VFa z7;Mgo$useCsXBRtBG@hsZ7#blgqVwPJKOB63|$#b3PmuJUIou!8&pkco^QQ(krawx zCWHG=i~xBHV+J>S@l=<~Go1{X^ndWA4oFpy`v3HCB}t(OX40cnjmsd_U4HJLYTVLg z=0z}*zVjj=p7Ak`)_3S$J>eCKV7oNEZJB#Alp(N?LlJDPK8RupMX+5O>dt-zO%(06 zjk<$}=!t_+1T*Qsb7l@0?JFFu|GcB;DW*^aGub%*xM+y^Gs;GPoxVX*D1w=cxVZms zkgCLs*qv<*Nuda4GSoN&j$2a^jA^}h$D5>31ly&<`93pZp$Og&(BXXBVG$&SBG@hs zk!gW&zp(ZpK9LI!=-Vk2!AwREY+McGMI3E(%jJ55K`4Tmte54&OOTsUM%_CYO`{cx zU?$D89rwZe38^dgWLIV*DHOqWY1&<>dNJ5Jc*L7_=kUf$BWg|%ieS4mcx*h0sd5U& z^him7PNgP=BA7|fUw5ttsm%$;DnfTwlR^>9q{oc!9)W}=AjIrHPA?9HBAChME0;o( z({uqP{H(V_gd&(px5aoPjTX~w_?E#mTA>JL(sxH=Xpw5oINv#wyO9)%U?u|#9Drg} z`$&_3w>4Xn6pCObecMGv=`m||g7&wzZ-pY5$-wHz8-V;3_fTNDJ^K176v0detUCp* zCQSxRy-Wp_F}wf4i6ySKp(tKT@k7GPn7)%VoL>xK29 zxjTd<8v4V~$v+H*>rX=rtnja1r~M$ESDqV0oaGFRYhTI6xPP0{-oW!8V)=1{A>N{1zf#{zR^AI(bljdk8RC+jpJY14nHP)F6eD= z`lfp~w}kH96S{VAqXP?%qdx6AxHa$IrxE-&s&lX2O**SPKG>nfey{DLN#HmB@DX2P z;bk$5C3)#vcv-Rpe}WPcbV=kkp1j-%UY5;*mlbd=E_wMG zc=@q1ysYX1FDvW8%bKe2vU(c4tc9k2@|r{NvVIf36or=!+wsL8UN%04msDsrBya4B zKQ)4vO;D>QZ-ITAym>CXZ1uwbxfy?gGCz6iba>f;W8RK2w!6(=3wYVx4qx)Klfm5tIjji|NjMp*oExY9B$N9uEE!u*0f{q5!^!=pI&eC+uaCRt zr~h>SMGMyjJ0T<_Fa|>l$DNBw3aux0?o7`fe+ODmNhqghnc9$~(0XFBt;>XE5OXWa zw$+|Fk`!7`O!}VK2uHXP`in3*9y_o>mzlSon6z{YxC}8JQChk*D@0OgJ=tZ>N%hRj zq4fkwup#H9h*{1gh1Qc@8sg^v@&aN)!DukV&7P=_R%ksj>C>ZB6WC5AeY$ml<4$`& zh1L_3)3ASO&BkjAFngagwiGjBaHSv~8sREYTjWp#&AYKF&SNN7DVX^t*78zg8b z;iCewP|Ppif8pQn4J>xrjZFT1%Hvgcb=(TACwolOyEbXhp!mnOp6OkSYnMq1ttY!Q zMD+%iPu%sXoc1jleItI9|^J-%Gw`tg_0CnPj=~Wq2ToD(0V!q z(BVS<9Wd`|F@@HXT^j0tI}`Sfb~ji3#G*$@3auw58%D2y8BF`U{)SQ4u|1-;Q)oRg zS?|FGnD?|N66)OxennDfJu&H9aTTQM*tCb)q{6PBNeZneyEN^Y))(%Ba2N~Fv}aO( zSpRH$DD!5kT^h_UUgEVJNDkp#d0IM#q|ka|(z|h8C=ax@yLbH`@g6(1hlJJ>ljfUC zpv<)0XL7abB9cPuiOCjw@0Es4ypE%VpG%MwT2D-RJ`aN1$!hN06jkUyae`rwh5q|ka|(sz9lHda(j-?cNUlVq8b z6w~AO7?5z!8_WqV7vo3@ttS>UC}u0p@k$2OzYLj-ww*%jiOXfDAW5^yCHWyu(xlLO z;y&29jKiorMMZbeoQyZ<&dScRg(}-;#n5|*8|7CX@l0xf=NsC99 znj|gG)*ndxoJ0w@Gl8X&*mq z?V6xxHA3r&$r{cxLrB(e45>>oh1L_7^~PeBYQ=q9BXT|D>e^_9))SZ00`VRJO-_Cd zC59%2))SXmTENj~lg6HdNeZneCjCF|8)~q9CyW34-cWLAF@@F>lcA-;u~7!kr@(!h zC4BVl6dFiO*4%ctJjt3{Zk?i-LIa7(umhfW+^U#idw;!7QfMGC>D~Uqeb~-RI9l&^ zK^I914J0Og#^3#!q|eyDN0Ag7NL=1nuE+Gbws!$Zp@GEZ!2@1;%=DeDZBl9=aXA3n z0NQr?^nK?`QfMGCS$)bfY>D{b9;!ZR>n4({j2G6j>fWO<*VLrfNUAz`JL6x{-pR0h zR*=SLn-9bP0|yb%BB}tOm!ns+_;kyND2ih zlRllBuY&DV(x**yC6Yox%A|FV8x)479Jrm4}3- zkTPkmQ@;~PxSj(^cF1Yy;%JkhP>?d|pR@?x731G1{o@bMASo22c4>Oor1l#q2^Io0 zy^9DcM^Y$A?a~m{!vT7z+E=ngb^6OnQYc87tl{-x4M>LI zJ8TLRqz3^yTyWR`Z87cr6be$iG}P}{365Ls&Z_#&y6Z>0P>?d&u+H{6AXVwpu=+20 zQ$r|7nXGrq0<)L)MbY)n7ivtS6$(-&eaq$dg`@8T?jhd-4O~bH1*u({_Kb_K3p-~F zK+~Q<4RetE^1Tq|-(SFcY21S`&9@tbkrWD2drX6OMEf!z)vW0qID8~Yp&(__dXo)5o>Xyb7_%ow4Fjh%4CgdsjeWQ zIRZ@Amy^n1}vI1*|=U; zl0res<&h5cb-Cx2-mVl1QYO92xm*DW_a;CJS=j#t#S{usCe71pmL_Q)_j_%ULP5%; zcfC$GNP36**C8nsq)eLc7Q0E(eB~Hi`q1V+p&;e*T-Oo0JYLD4q)?DD8CEdd8_qJA zi=ZIQ`ie*KoDrObr!B!z;MNo%nJ9Y|Vp zrt3MFP>?cdxtS%Bq~+YL-4s(ONSU-I7Po+ee_=c0)^{K&6r@bnsPd`>$r@!>>zT1o zka8I@0@@)a3xqV(2<=spVhRN*mlKv|)8+75UL=Krl*yn^O|YSBfslrvx8Z>#g@Tkx z|F?OZ;OIMm(*JP{b!GM^$c%-8l*!OyZ~H<_Y_1wY^Y#BoF@=JZ$(oxsJS16jRiU>e zg@TmHupI*`k_=nDZ#YSzAZ60Kzy<=zUbG%THGU+q=EX35LPjcmA6jLZj zx%_21oMAS3_SQ6#LP5%9TA!!7-13B4!BRoWWuJi_y6k+hi!G+~sdh|OpU@0OYrCpB zECjC1su_%5WdGOtiGP0b|9wY;6J2=D^p1u~+Kmm-@jc_aK^iHQwz!%!h=M=w1X*fw z0wlS~9S_4xd?$E`gPJtC9b5-Y?uu8ByHgasZFY25{>;|DrX%&+Y94+li$fJ%6QFU; zqS0?i3YEKE8e(=|$^tPV--ag&cGN3CQmCStwA}w@GDv5Xmb>o?krZlSCfhcgVF9@m zW!tEpu-mom6e?OKEsZvO3!4aQ4#bSkk&Wb+A5`~z+6gKy<06!vkB;KHs`jl=U9y-F zrgw2LT9v&<7zW}>rKFIhGZ|Srs6WV&7&Efim2i?mjmTv6BQ9wm^P#Msp5<$jLXF5| zVoa}J;7EXT7e2(VUfFgE%YLO#glfYP{9snJ^dSoV?>@51EE z$yWY3Ng*F(GN^Ecwj_fJbk~mrAs^&2%bu56c-`)*Ubx^9L1E$OoB>D!&E$3{VBZ4I8D- z!9uCY7y2B>EQ8Dv1#k5_GR!CNu^t^x4 z4dgPcK5U!esS5 zMc`C7sZ+Z8u$uajAS5eHCf1p88jb|DL?z~5lT4!(k`*T7hc%r7F<;?m<0C3#%R=p2 zAz87@>^ZKj1et9n!0b5|p8ry^VwVQ*PxJnUcV#EW^xj|UJBleJD@=L~9tR`UzVqHI z^u8)oFtHbs6)xl5AvrR_h#}3X*y;hr6p|GtJ(8-!sjf*6&oF&)6Ot7sL#qyjl+|{B z!Xw8H6jMl6n6yqvDWc1UzfB}5Br8mYE$WE(gZbljhP8W%7ZBC^DI_aQhJI75JV-6I zs^aZQQb<;qv}`MeDTk7leuGbt6p|Gtt;@FJy#iWNmRKg5q>!v|`R#pZAK0X4H~knA zk`*Q`h8qzep`3@$BHP<$ImHx`6()o76#YQ5`q>9nND9dcmwx+UDb`|Ee_aDAYVBPS zk`*qSm4JJeG#ON6^Z=4VvchEbGi^tatUmSnpCpB3g-O4@F?i{5BkmzTOV}uqLbAeS zRPnWsK;A$ZdF?J2GRSIXn+wf>i9Q=0#{Hy&_0RLmO{SSIHreuaj5`5}qLeCDp zdWFXKgf5Mc=HPrBUB=#r30}|#8#vMUyMrh643ru;)l>qj{c(Q$%W>uU-USFV8T?#k zY;pX(-~N{dj-gez8OuOkN7<@#zT+f?8z@*B>36qt66^3uiMpDS8m<+1WYz9bmbO)7odrMNtrkG4zmj4K3Q)*R8 zTvQUCthMVQ?3cLLSDX_2+M}!Ky}UJ-+fZNg)qo($X&NHb^sW zr=?A|QY3{ujLD#;-@*K@$)Lsq^NzU(8P)kyMUb$6p=s3q?l_V{ z9>%1(=g1Wx)ofx;n$nDgRXt)dtCN*BWag?xoNa^$k?A@aZ7;F8`ma`yhHNKO`}%r zKf;wC?fOltsCD{METmQ}>Giw1#0uf=;4bq!F-Dg{YQ<#C>#d6+=4zBNzxf}d(F&;* zlh&%w`3aM4$tN8GaIvj=6ipjS7vaSUQ3pu1#>r7^nLTbgNWq$MHu$}KvTE;Xf zMp8(vnDnwnt^v6irI*XX%_N1?iphx3QNP1zRl*x#?%+#ONUfNROssGlBLZd<>*Y)q_k&3sOuWwPG@H?$Lg5^i{{0i6al+Bq^j;OvazD>klzi6EHr# zRUAnnwX)0XIggb73K~@~2^+HK+>o9`Qn;#SmxczficW=?XK}O*ZZ|GOQb@{}j2`qA z90{f)D5Jah=-VkIWlZ|iE(D9IaW_gIzf0d!Od%;_((7DdXvWz-?r`sPJ+T*(GA=h4 zt_gA)#`OB36BfeiToIBoCOr;j!G%UikJRutB!#4m$hp^0p}HrC$o6G4aFbh+Wao^l9D8IzW#lcPX-;gMho@AHmE zD&VoGA@6Z4o99g+Mtw1i6n)jjLXu) zx9c+Zo!>|bNg0!V>2X-VY{ot0w>DTW)P$sr$*6X-=YqV2GAd>cHg(k=5|T0|&ELAT z0jXvabDO1jRZU4DDPz)mUL!bHYNXoc;7ji|Hk383r6p}J7_uzVMi@AC@ zUW~xeN=X@)BaW2NWuG8QA*G~@$>5{OW8nRS5*m`St+Tx-rf?-srC#0a&9UrYzXN(3 znqx!Zzsc~g_D`l?4^x$zV+lRulR9<&rk7j$p7DL-+rbBaz#Uc{dWPHn*B3fv+7(>2 ziUx0Xoeg7%!Jxrwl6(I5PMOp3tN@=NjB~7T88*Bjw9CGHtCOMCaLWjgH&M1qp5;JN zNat7{>-Q!NPFU?@zxA+bN`TOnS9xT^OWF zA-!5`P9Z6zb4*6WysrYIRg*+SbWk>uLORD}-Di>%(m5s*cm535SF@6Jikd!eQ zI&}-qCKd>32%Wg~9>o-rGA6C?l`tf&fBEDjDI{e~hL>7-9%K!S8D4z&Vv<5q#$@P? zP`n}nr6r8^O8R+{LQ=-0)#q=xPNhk!XPmxog`|wh&~klCkqj;IsSU*xk}@W(zlFjq zZHsxws7oO!W70A>HXI}zyD$&+FNw*gdOwAvjLD#OcXN^qiZ9uKq>z+xIlm>QRw`!D z+{HIY3P~B4+ehrx<<=Q5ND4_Am*$I*tk`0D#I+zPBxOwc-ER%EruNNLes_vvr%df3 zAt_@rs?RyN6Gpr06V1W70fwrwOE*P0Y!&4J3u6j7jg+SIUy~UZp-7RE<_h z%9!-Y6?BTEPmcOoD5j8CM9KDru+p3u(qAv(*jG|VoFIFlfe&m zHG=mu7LVKDyZ5Xlg`|wjJ#KY$xuY&#nZP~tA39~9UrMYR3t6}6F%BZ`>z#hI%f8qt zGqf7GvpdKeC|mVv_oW1hWut!2yo$gsyNA;6;R3wKq26F2L1HpC`vaJ|wXb-M`FIrj zdP)ij5|dW170@g;!Ey`CYo1g#?L7%ch!e!fMYb zTUIYyMp8(SnDlB=1*R7519H3?RL5?P8m*8ZF&R<61x)x_+8PnDwh2igL1Hp8d94>n zs1u;y)z4X9XoLib$sjl1Yak1v461Ul9>o+ABqkF#ei{S`l3LsnS9|EmijW{N8UOIY zc!;TbiSc&=o={97L1HpGH_W-V54DSS_ziERQ2SO$khq*(`3T5kxSi1xh8jr<2@;b& z%??A&q64wveRtcjw_Gg#?Mo@It$BP6)zx zCEOI>kEDug2bft+LTHptrtAX(P)JPiAhV(H6201wnBo`soxHgLW0C(P}|~A-f1$Z zMUq||3JDUIvzO=9WlDSpiYX*WTyE}Ymuq}BkrWanE}eb%=rJqBV82VfpF)Dfq~G-` zj&Q_p#XaPAzIp&jAwgm?s%Oz&Al0>-sBZNJlN1spCe4HMyauUe6LX)Q%}5Ff5|iFP zhGIIWr1#SGwMYsH5|chzvq4FqNgubwr38t~DGe{^ za{LP_eWV15$>5vSu&bSz*v6UyDAt~faOj={V#b%NxN^8Ro^+^i35|eRxnjZiOGaO`-IXbC~ z2S+R9N=#ZFy@Ixd_8I4v-*Tza8l{jcG3hn#4@jYnDnIiYl{1z`E96Q{M(*0#9!3j! z1Y|s0D&iF(wQq%thsmJU%A2nfPcawuCGw6CW&4#VT&6knu3t zuH3+G5EJHOgP~oiqU9;3knz}M_MBe5VQtL@w`9To;5AJkg}JRsGT=g}jBy(3q`o{Aeng1u%%Eavy@)jm7tNU6&`r&q3mVZ<=8%iN>VKOMWJt$2E4YoF=(F%DB zmpjuJ=yLn=5RyXP!sU&(gLHW<@9o*vll=12Zy{etY=?KHG49)t(w*_vJ)DQ6?1RM& zelj_cWbmVfsvbru+!oGmWcqyhzhT}9%SA01gK^E7e|FL?6PACLJjGUQkITh+9DeLq zZ}6rfHH`|(Ka3O_=kWD?kZ?T-S|v{>zac3s|4dr$x_5w0 z{D{(W>d`Ec!t&3g*Y|xe0bhpFtH;S4B!%Ul$;b_ReudGFLm9bvIvpBAgyo;fpvDQE zKo&+BRLAuniYYArOeWsB3)5&8HR&gwUHKPDVfkmWU9khOpqk!e%y!u(`;!!wf4j_{ z)6oUe=xlHS6_)?f*}f$yEdO?C@EP11(hco9t9_Cpmyi^eerI8qAZMcVdX(=3Nn!bC(ldv9f07>WF3%<@EdNY~?kx}j`xY8!u>7z73vWkK z=ZdiWb6N4%g1XET`>oWA2J|_svKa>7>2Drcx56cv^Ek11BMlprupGou94KPbSAVhUGhRKdUd-_3`9u%WmA+buKIK`k0}9b6wHW_bNsdFENpoU|zRq%pprC%EXU_0!a!v2b1mm2SU5h^bg8*-t92$ zR(nXuIqWif&e}5%L(VY|VD_A0?I)2Gat^yR_)J__3HB|V?=VYD$nt@tkaI9;_U)Dm zatlhcmlf|NQKJ=d4lav7#hD2*Gmr&4b|NX{987vvb#x->S@CFXl0weGWa!oIXJOxl zW6aP?O@AOMWn5S->`1&A8p8$9L{SnrZhn7P~wxrFv zG^La!`TuD-yr^>>mWw(t2IHECvoT>;JNrMh9Nb!TfkD6|3@rzzQm!P0<)0;6)|O$- zL3*LIHZfx_RK*mQeMN(M)xvakLk}k~yuv}Cz zh2@{g@D_^~g0#S98p0b+`<}s`Xf#P-`DZd{ z!r&q#gN8NL%MfAt=kmza0lM6?9&bWbdq`ORxqOn|N|$#Mu+5>Qu>5n`wIUX3{&*w= zwRPx2Qds_(^snXx$F26^RQ}~E>1Ua+{4;4jn58txpD?C*@A$S9Q&|3)^#1j?1d`r2 z{hUY&%RiGoegV5l`gqkyB`GZbTo%4vRhPN$<9#}~Z>8m*N$p=X6J04Q6FhKZL3~9-8SeYph4%2L?k{ERnOuy1;i0!~TQr=n&x>Y*_l_8`c%le&b~f z=^HXemqO;kWZcTxd10`xP{yrrovg<^t;Pj^CVh%z&;2cj!0MV0|3=S!Ar(k|`7t4{ zcXjc~)HRe|Z>)G}N88Tdz7(^@{2w7r)b1;-F}r0=lEVG7Y|S09J%Ov0FkgahA` z6f!g>1MazFS^gYhz@1vxNeUSnlZKp~Zb8g`DB)*pbgS(YGBhUPdSPRTsaiWePUZ1A zO(liz6=Krb;fH+?6WTkFPsR;ZnF}66LT<;Tzf0J8h%sO^tsow0?4}<)922h3nYc_6|zfHyPE^k;G12_12nb!WfWc%QhP}F z?i;%_cwOxQcW-MskJrTwA4ujIp&xzr@7<2pzR#QSh}{$4LrgeP4TgxFJr)udZZl>w z>g%d7J(?z?j4E^W6GQb>WB zjBM5lXR)0qBV&8%Z;g-wGg&jXSr3r)P}Xc1RD@y*DKL}%^?RI#(W-^gzwVC*NtV&R z^80^GM!v%j!sMsDslI(bsx%D`-m*tCc~cwa?T51}3tWHmhbk~+$hr)M`l-29V+pzN ztwv1xT+Q+=1U`(?=knjG3PUMm?M#OK)o>2Pj6fOoY=CO=pscK|2>)Ya&C`sqT51A!i;UWzGHCrkz`X$V(Yw3q>l>ZqnV9=Aeu!sWE# zS9Ce~>^_PqR3}VYOSi?kraHbW*5bDckQAyDCWC(c7N$*22Hm>7hon%QFj=E$_GFSZ z3Y}G#9dJ8^>V(V4^<8xtQLGik6si*@gH9A}Kr-m)A=P5Um_l{Jr2o8$Fb8SRS@_Q~ zs75|Yp*pckQ|ngmpi_5t z<~?)Hz5C-nb?N-#jn(4+!VCZ>_E+yBVDq8)`9`}PL`qJ8TW#uUd>(cJNFkAHd>Yb^ z$U!6R*$fy{{5|xLFWL+kRbF*y!%NvCgV+6A7|51L2Cu!pooq_JKZn)U;?oo3R6$z2 z@~etL^8GoC4Ee4ns6T}aDc1aZvMKrg97g)QE#DY=2=pVo3i;)V0Yq+5z6Rxgcn8z> z`=F)@X)4*PJCWO`+Up^oQ$>=9^f~@%2$8>Sw@bc>f=pXhZC{yB5xM7qJ<>EN1+r{e zwaqN6#vl8)+9PZ9F53vmpRk8&^n9hRnpZ~HBYlef2cB0iJd#h56{`P~#N%vKOm)0k z5oxM*?lHAf5|49oPNVHAIm=LsNJ%`-$=-E0s$`D>B4Yt}wk#g!r0cN`D(RB)B+I7k z2mm94$COzC^EM9qHhA~}k+DFVl6ahx&4*T0$(UYZD-ucj>GB5c0YroHEx~4|#3n>a!eK@xFa8YsuZCCH@Z?El)k$Ulq0o#S=axb^ zEN;wRRn_hjw;GQWs|tJ2fy&IrwVd>Nh;~VDlM*)z3Up7eh%n%x&hyFZ(n6h$Mu=SE!wm zaF~&%%2z<*D7U()_=e*|O2T1Ah9s22D8_&$L!!IKs-)eo+4XZWE(4n)H1#WeSzQbz z;V`r5^=1Gr5@KQUx^*>b%bW1%Y(dsl&~k))8ql9B#N>L{1Ek+){7}*u0A!9J$K$7vYj{n2}K> z*F^#enIKRS4$trzClSF*!eK@RoctB0prHhk0eeSnBvKL%Gt$E$CL9_IYnx72?Zxc& zL`uS8M%Jyj8#1wmtw`4OJJgy;NjS{N@Op1?Esa7lJmky)A|>H4BmE*e=YiV(fux^r z#2F$b;V>i3-5u}Hpqis!{z0VeaQK*ZQ0uKe6Ae`s4zk{SkFA7D!eM6EbbexKFnj>3 zY&xQBMd7+435OYJd30$p*u>3Oo#nFQIkG7UhZ*TT>OYX6$~zvsdk=LcQW6d`(qrCX zsHyUxu*c}x4~dk7!;JLqk^lp$pM$maPVGIHNJ%)%$k;w2OgxEXZ2OGdL`uS8MtTnX zHI{68b`4WkBuO~TNK3_UA?#O9g;~)) zZy31U;FQn6^6Dxm35OY3qo)5Lun8+62)kipXB5f{HpOc1KRPUmNJ%)% zNWXQH;8s&eza4t61%l5m)j zA%(}M0_l%E6k@m_Heb=EBphaBz?FRkhzvNM_7mBZgu{#s{3dDwk%5LY`G}N+!<>xx z@u*7ruCGC)BphaBz`^Qghz!_bP}5bCaF~&Plh#2{tGvP7Z{Tiq0hENpR??8zY}Rw~ zq=``t+fi*L;jop|MO`ZitC#)(j!M+25V7@-qaq218Cl~)o3cQ{-3>GT>949@m4w5L z3>g03ap)m4k^z0zsT&27aF~(7t4D_dnTBNWe2+TRPDwb-NQ-;X1R^bEU#uch5)Lym zq=*MNP{n3Q?gt)3O2T1A`aJdj8G7hC*4F3d$4f*?!eK_5ia%~oB)lbO3z3p=n2|nz z^!h-g&#s??h?IoGoP2%^gLkF2ciZhDQW6d`($p^>jHg1HI=^X7q$C_>WR31ao&vcN zd#Fa6ysEU3gu{&V`PK}Pi(YsnpIk|*gp-8Bj5LLH%TJ`qJ3(C&B;hb8r+2|{SlBd; zDD|A$DG7%;*)j>D*xTPe5<}|2`2P+OB)YlrA|t5#Kmf zOol*Fd8>2s`enGVDTeLuOCKMU0)hB9*w&0c%Aisgq$Ch$RrWS)djwU6AQeQNzDfj< zl0cl1f$OjN0V&Rl1+Lj%mPkn;&PZK`r5?0118wTMJj0y|QQI8sOTX?_9&CzKMfK;o zP7=uian`}Dv>mMbX2&fs+(#HL)KtYK(KxHJDRgKE7+!;A!c0G(a$|^;MB~h+cac)_sJ7nUJjd+{(ZP~voROw~4tEC< z0x4+cBR5o&f|Nw#R??9AulHY|Au0f9NPXD_55fpi5{+9)o!67L7(dNLn_hqG)lsn- zjW_L~9n{E!4Z&p@ganD)zrLYr_;-6b(J1p2kRS#K6F|Ipdj=3GiN;x#174Uh1MoeP z0Z)c6BvKNMGt#5Xp#IR<)ku1jxLk}#7LBtR++W++x*blT_Su1W-L@%r373TA%y4*O zwRb?)M>0IV?_nY(Avq)cTK&=lstmIjLh_WM^NEy%9?mn126H`hOk~71m+sk1xDj}TdRuOe%B_TN@!}5B;p0A-U+6;3H z!LU)-l!WAr^j>qp9c*qx(tG8W0Ypkdaz=V=TY=;ZBt14A#ruW^ky=+9JBqV2~CAb8J zst_xcXR;Z(yh;ZmB_TN@Ys3a2 zX~5dnXtZhqkt`%?oT?*i!gLFFoRqodbXK^{h4{CA0^K)SdS8%^$rwoL% z;GE%ywRrVy<6xOl@apRpcO;xe=nOxa4PU(lR;Vm|`T5m^voM|Ee`xU#?{=2~hkGA< zo_k4G!X>df>-2!{A`l1(nCwUxx` zj0`x}xge1NXBMiSOA@Oy(r@Fa5-_153k_@Py3+VWj<|6pvAUHsB(|RDOnx@8A|NJ*^D z$zg>->t~Te0>iUNS**@U|C5l($Rd3m=MX75O3ujO1+^jHV~EGu7d+=j%oJg5WwAOZ zJ0H5BlIeL*5cz-Ex~|~?ahW6N5eS=oreX?PbeSYn=cTo zes@YaB5j7vF;%o3tSh((wMcKoVG|p7Eyc)6!e(aJE)p&wT}MoC}+hu$kHPE)a8(YU`crq?&(`gw2dJ zJ#2x~;WpORba#`wpi07KD``l5Rum>~uJQmHQtyo!N41rN%~n$9^`PbqusIuTdR?!t z_K?l6ImWCV)X2TJK@Ax0BObY{WNy{4?XZ~{j&i@=6Ud23MpbR8=0YT4Ga~~Yem(?b zDI^1~cT|HbN!ZLtkM9bD`cTdnc;s`#45%1Xn_+WIkhZaPTULOj)vz56*G;(XNw_3z zW`@J#77hin9+KfrPrf2j5;il^ulb%!P-O_$LE<%WP}7K#u$htOIlEnHWX&Tx)FhiW z!{(UU+Q!!VEd!zsCA6!z^}zRpOTuPm*mSe*ATSJL1k?Cx$A5^Fgw2e!eEtO5$501J z%e$koL`uSDMtU#Z0C{5NrFPykrt~IK5;il^WBpyM?R2#1v3f{LA|+unBfW>dMqL1l z8ieZoKVkM?%qB_L%*fbbn>?YNr;&^u^!s!oC1EooJ!h`_iEMgKny5xLlCYVP7T<&U zz$R!~=v$Ao8_1?4Y-VJ@p=3SSJc?w%?j{R}l!VQU3|%}57H-96=$y&LiIjxRjI7b% z);S>2q^?FSBWV%-qDyP&7&BBmdHq*bp9HvA_xjHUsNT z#p592CX$5Bj0`xndN7dz$JVwWQW7>Z((fmHN3e}EWJ zY=)Hlpd(TeHZ#(cYZY#6-o)DaeDY8;f|9VAlNIVtCel>4ubLl|gw2ffxzOn?kv?Z; zs5T{GGbca(jI&Rv?c3{q)J{p*%t+IS-%zUw(lq4WFd`*kGb3vZst21+%5#P_`c6~l zkR)toq)+)7D4B$-@+tAluVhmaHZ#)HwA}zAP0{%$5-ACrIl1f`UzMDnORcRWZ06)3 zpDrrdZ+5{fo3gN(lisHxTd%a!RBg-{A|+unBZH^!PltI6y#)8lgcpm5l$`j+E$+sD z|DU(G|Hl*9Uv6<%QvNdsPhdCc+zt1o3yB5{n{0u`B#55}bc++8*x2sQ{+&Qa`jr9j z9fHY+T8Ba_o4mzh?e01!g;WGdW4MWAQeXtGjDnPe&n)fWSGji^7_)mw`jub#Cy|mM zn2{~MI?xYnZbY(0t_`P&lmx+y4A~F>_q}p#C}iEA_^hv}EenDr&-^6!%6%0`xDTO+ zx;sY@DT#l%&G`?#fXstr$n2_nh_t`?>+SkGY^CadM$+5q#t0%Mu_&_{dFRzLuqpgi zblDMHV#%66O&kH43&?dq@)4F|tFG z5#u2R6NY4m26JDMO%~WmMkRIJ^07c7s7oES;{}nDn2y3w~a|3ZqJ-WEprFKkLeD@J<%@#YDT z5U{{ZI2@CgNJ)Ui$#tI~C8%F0$ko@^5Ge_B80mRn6UqJU|6-I_0?+S@ig$zB~3bzVG4@p7}Mur_<5eTH1Lt#hP%_EZS)Jf)$WlGQn zAZud}S;mhJBa%fM5;ElB-U391+#P?ONET>F$k1~WVE!mJLr=AzNhFIgWaQF@EmU%0 zxvE66@Ipd{)c+pa8I0`=iCTprr082oWWoA2u)uGni44rw2t!CgN+JtRn#wIzNw1Fw zh?GPYoa}Cd_))2CVAnlEiIhYZj0|}69pwHLGT^~w+yoT0l|&Yd^t=3cC(QW0*h797 zj$mp^kdnxPk+ zI`zX7RHC*Lg~rK!zg$+yJtHu(5Trz*adOcSNI_)TTu|ICi3*(uHJrumR=w2cv3XPK!Vo(k#UAYTHN(2%kJJk6B+=T;7W)Mi0&<{jP z1QH`thpd3$+VC04)PDQbJj3)%xkb8bIR}~Htfy7Afy{999+>WI8_68ftrbHlda@lE5AQuR7?&7CJ zN(2%kJ-1H>_pgwi>-~L+ln5k7T4KzQlg)YsN`064L`nn_BSZIXf|@F1=(byfh?EE< zMuzS0TNp?&hr)IaQEMv^NQ|_M%rhHESolF8W&W*7Wr;vyWXO$Z6oP^b`7=)>)m9>q z7#aHe*PnukRn0@-Q zNc#BHcO+6GkQixd{~iKTg*3JD=}DwSAaQc%e(0era!Y=-ha>`tlQYx1spRC1czy$W zNG6atS${}Hm5jKEyDfs02qZ=Z?f=c@3$t1F--5q%s z?<@ON(zUIb$j~KrYuh(yp-Of$!AhdkHf(@B(&_iBy@_<%7uc1^h(x>O=sI|xh`x0i zJQv1Vv01yOUGl_}Vk&vK#0?_rRI^K7F9fNVESneeJtQ)!f?e{|&W0*^G&F?BdZq1? z-cwcb$bf%{Y+#=pvLZ$$d)@6sWTUEfZJzbMtdd9HP9n02w_S4YgWptgJD#vmMkOZF zE;+c;yHFW%E!{10wC~5|=|B$5ryTe;|pX*tD-pjJ0;&BGOpXbc{&*y2NFA zn~g-ejQ2QCqhH%!1pPAYk!l~W%sX(iFDc0MV&+TH(8yAmxZWGX{Xb`Cy=00Y}(&s zbw2L!3z5zTN5KY}LfYSCb?(2_M4S-^I;Bunt*R1PIi~3} zB9Ha9XS3?Sk;{p!+NTz%MWwbUyV)ZveJHPPqJw!U+daBm; z&wlpEs(a=`7E76ZRkvlLY7!LP94g~Mq|454r(}`RxB)*uExJH# z{5rjPJ%n(lrx##9K~!0G_!}p;=i)Cy0DVi)q&Fc1Xbb;l!e8Z2A-MN-x(`|ZB|?nu zI!_7#Qo3|;kL=W~dq$6rtvbPXmbL5LsgmZuo3zbnmC_RI$>JFJsG1kZ^ook|6V1_8 z+>8APJpzA9)PDn_yXC*~GHwC>0|Xlb%i*R*1x#&}$0C0?4wtIYa1qZmSH_^(S~yB$sHEad8RgV|@c`ld;9SdSdj{&3TF@szLKlUU zB!C$iGQ^9tKr-+})xktcPHQvL_1Ra8ptfU? zbbTViRAEz+0A{4ylq#u2x=s2nAK8>7fEj6;o$3fANHR!_PH)hhNJ#>ikw%Zh)qoV^ zX>=XmgGfmNn3K`<(}5J}Fk|HIe~FYNfEn3uw*G5KSC_-u_M6tnhe*k(XGXdW9y%Os zc0|%GQ+!8?=v&FLWkx#v;0s9%y+4vpWv7EkR%Sx^M(SMWPMDF-bJiZBb~?|@ca%s; zx*8Xo80+2X(BbDTwcu%&?qJuU!}7|wPKYW?b`q?H^+|cVmx1GmxMQME%5`Zwk&>LX zmDG7OIE+WEL^pXvty3qG$=x5L|a zL`tF%MtYTuy-K9lcUwG(ltdwnH16A08c5+hjeDMh4peF@QIL#u8PX$xNS8q?$`L71 zkerNYgqaCp(Gfyg4$?DUY%wQVYF{pm-bP1lBFwh}2(EX<}`?f@5+e7+wO_M)8<#llGV z^7wEdVcQxMOVf$!Z6{GIjCA?0(hDGik#xDE3m}^k#lp$AnV7H_v(M$?Z@5t@YAaDJ zjO^Fx?tSpz;EqADG+l-dCJR!cSQzP+I_o9a?0}?OSma0|C5nZSPDO8=2GS47s_#Fl zs#l^|80lQQcwTC!v$Lfg*_0?2MjHFY_XRQ(Z5rDw>Q5vKCAdnmk`5gPTfPOE1Ista zoCZVJ6Dg57R#KmM%RCZf&QCz<6A!jl$5SG6tfbDv{XV9^Mc;Z9Dudyc7!`@kVWe~8 z=HID3RQI5&T_rMykv=hrsI+%u5BUU@Dn>RXGKY~~d6(ZJ()0PTGDJ#b4k!KB8Hn_% zXu3nBMCNev(D|n-`IBCqLlT+8NY8uCdlTt-;_@Z3DUmshH2%^PO^M85WYs#m zalH-1c2+g_sZZn?<-mPG{QpYW-3#Jl9V06bnv@J=Bm9lZ>HopYi0w znLy&?nEH^xQQB$DnAep^i9mX0O{_uioPQzo&P_()Ia zt$Vwk?Yj5=GTXza9fYHq^}*9+)-Nokp;g!ElZssc&75l$7}O`}9?ZpRW8R1@yw(l# z7^4Q)xxCo*5J)kLU5;$>B%F zW6!M5)#AoJWgZc3te$s2;cUbiK0h12-g}aYcYTF9S?xG8d|@`cbDk6xch?DV4sGY7 z%kaetjy4?O$4t+8-E}T$ojba>>D;+ZdMkIjB|CQP=H8>7yQOodo~<&viCj0{p+K;~ zX5}ummb(-S--s7B1K>Y{QPBjJhD*?N{OKZG0#cyF>bcnfmBe<|g~*UxWov$j(9Qs8NUm6a z8Ih6*%}VNmHob(zhyl_^kl+2an;1&8DT%W<8ChzfN`?=B?onzhiL)5#_I<^p&`y|v zpy*5X6U!#rltfFM+_$5JO77LIBAb$EiIKh~*X0KC9@_LRUZp6Jl4yyMuG=1MrcrU- zY!a(9)>aZNaq_`_h+&nNZ@b=J*n(_Iq9sQ5yZ8!Hfew|hw*AhP5!q<8DT$UCS?w$D zgkzi3J#G z9Fd6YkRXl2HmmE9Bo<(#bDyub66xHl`$Vd(Bo<(#%U>rx5$STXsyh25u>d1obz>eA zY5ebcAlYP!K{9V$H;%;EPPEf?{kc*^GO-{dKbasWkwtzO0p3p;Po@WD^3u4TDtTe}HX@k__=2=bydSbT)Z&9HKvB(bY8V|(eW2lPOfmb~Zv>~~8gENFnysA|k>Vh_GfJn$7*6*NoU#V-U#H(^Lq}5v>D`J&{ z+@H1~o6M`SDj(5QS?BiMj+W5k35dJp4?09RbFBzcUcd{42vxX>s3g zFF|K1F9q|}4cbgNbFvISqs3j<&ptuJE7gfQv=e_1GzqD8z+; zxm$++sm1%9ELsPg2}~I9xw~eKChN@SGW@a@uco_?b8RT%?hp6hof93zRwY)Rd0&R#)Z#{$e@;=`jU^JyWSzNShTqcSt|v-20Xz|{yY4%%j&SCO z8Gc8DJEZ4!91YI+N1z=#JZTn3ICI7fzo)_VNtW8jz$5<*xIQT$usz`tkIe2C&-cqw zd5BK;+}Efuk<24A!+&cG>x^GdLR?55mye+kfhx-zbIS~WqQzYg?1p+Puf}rSer_k> z%r{%{Vqa--^xW{5YGHH!@tquRp$9m23*8QRi<<)L^yNW3|A5_Y}}1Q z{<=!Iv5#j&S!kJ5F zc-d_D^8Z$;_}rls({R7e@E;T$Z5;SN=j=*Rf&dT0@tj>H$llt{4HT=O8ZK4=tj9X4 zUR~$<2~XSUJLAlCefql6m*M&UI3?zmr|$&-A@c#g)$zM4SZ*CyqS+$(g)mV~>XW+7 z1{t1fJ%IY8PGfQtDOupS=&OQX0I%+;gVspk~-HP+F_)x z%&FqyE3X788759%dJV2Ki#)#lE3zpWCPuoIPQ@-0Hr)yjfE?BT941D(9>sS?WZB%U z%giEW!}JV4kAxdaWbRyZp1G?8xf0n3ib9*Iw}{To*&l8ZeODYcx00O~=KQX7-BKJt zP`v=qAh&X@@DxZ?HL0Zr34T(ggGUhZ23>8u?2HAO*9Dpi);5mv*7zV%yugvRE^D))`rj)F{d zu>BW5`cG+51#H&BD*I0mUmYSy`>$`T;lFY%n1c`<-hpb~h2me3_Ma>Y3Yo1364W;Y z*@51_5^4X*qL49*-VhlwD1I-I_Ma>YK2mcHk-__K{zatyCyQJ|GEpzWG=$YA@Y8oh zN>&@|sDMiG-A|;OZc7IuC94f51D?U;RcyLdZ;mQa^sQvIVWjKBCwSybsqMXC7)l~3 zTWuKWR(W*=BHhYQeodrgwPBmUu(Fi84!v^|Hh~+!zak!le|5TV@B(A4{DGYgovypC z90|&v?OOfl9s`$3^*hyV)f=^Ct4^&l=f<8nzJXhcR82t&7jjB~h$Ij9i*16^LKB3~T4-0pShS|_Ed`>pJW}~kOck}w` z4OwU7%kX(x-1TvQwemN9PR+vkATxY{g5xi>gCGAt%Lu8=k6mOfc@Y*5|2eSc8oc;| z9m`F;K*~JR(h)A9Zg7c!H8C^%C|+FP5;g`dk)RPXYlCvgto1Yg^Zg;RUUANP$axaO|0J`QVbU0WR_Qd+}J)=AivElfVUMCSp-7uo^9j zSl4dPm$_gy)Pu0o={%oKgSC4=!V~x%$=!1cJ_)Q?-8%^o83w$K3 zc&$qmAj zp)G>6|Ju3MAK`BVm>o}(P072lSZzb| zE(5t_@I^Az@dM0ZrM8lUJ0ruB=3}(`3d!*1->e`~@@_0fh87(U0@ILB*!)H>VsmV# zmEX*LlzB@`h|m-i>7?4XKu=FTiV*0??2eJP~dTrJWLKXeD(PJx4@d@%e!P)Li3Dan)L}~%=vxPr-MS7N zU}ej)$@U;5Hd7y0b_P6*IKQBJchM3cj&9m1WAH~)z&9; zHr{2hioxOQj+jB5KR`Dd#Ow=qyS0jJ zO5U}>NXwhX5kN+wP0RB-zC=piwZX{H`UUb68Cs{}NFpWg+F+!m`sE`;T72FfAyV?L z4NiVt(N87wRt15ejHl#X8;lG&xf$lI5_^UGzWoA`lH=cu3>>iy4mK-f;1I7RL`sf- zb8}&}N{)YXvi^HWH)Pq2^2O~L;dv#;zZqG* z;f!W5;}76Ws2&vo+EO7U@7l1EhJ@=87s#(9T;2kDQXwT#xRumJ&G4uUHgBWNs43fb z5Gi?k7$cixCP8vU{|w0{eLtoXDT&`18FRG_q&W9$PwlSpTEUl8e(jODqH^Cn1TJ8{@rw}v2wV(y^Im&qURlHz9^wYvGWIM#-+PH)|o-iuy zi0o(g&NgoN0RA|uoy(U^Rmtb}YHJLy3o$_!X|A}K$f0lTk?u9Bs5af*HmLJ_|2KH>a&2FL2c(<{?>{rQ8cFDUL zpzf90x?Oy(`jxS3?29-I9jkEf6xE5G`I$O)_L)z%|%th$1EH2D$IugdJ3X!k8>PPxkT zB%4*=jJ!|eXAIIp%&PB!Tk;dJ-RaIl$a9Pc9J+V87s{Z5%d(q0hQg!aSO=R;$341o(x^7Y< z0JoN#hYQOOw@Yslv7WA|>6f4jh6FkGn_{0qs%tUop%5H8w2rDuwJr*@s) z8@KJ8(LJ(;m-EZsj66)%J(njXHo3swA6{Cs+;vT)nj7xKuqFLdxRcmzB_4f{gd z_s2rpnn6Iu_l2@HQ&nS*jrR6|x$OumEHJzL_K8pA#<0l6Dy<8wil82RA7s}n)M|zw zF9C}=*iY(m%nNchf=upQLPul{_LC-$x&b8292k#@PvJIJY)Zb%{g$=10qLH=WbJ;n z9d95q2m49JONYT`4YV2R5{wyO(as#~CrwFM2sYm$89pHpGfaZa!G2Qc^E9vtyX#;x zxCr`MLFQmTY2UuWU=!9#*iYJ9^=~3`u%DFS2Ocw5SpW^Goy)>dDmHVlpVTOJ4cMHD zHjVZ2qYo0b&B1=sgvD?x8Nm0!e$u#CYCG-kCq8l2NByqYn}`bFeG4BiDT( zDtfct$%)V{~*Ayi(2fIRp{+&hRS#7}F>O|&XS7=N+s_0W#Tl1*9 zeTdA#u29F7Re{`xq)+>DCL(jND-?fx8;~mm8N2gqB6F}S)ZxFaM0&MJJWFH_c7^_q zS`Pa`kfDL=-PL=D%)zcuokP!HSI7xT$685ah|IyRP)Z2o29>>?@Pri&iL}2f6y|yl zVmJdRFP$#T>F^68bFeEkcn!=xg$y0=GiHRuU6zAgp)Ljb5ozgg84p1SG6%atA?q%x zWS|~12!gb~D-@civkAxuY-gxpA)Yo6WDa(Pe#R-Qkb!IU`-#lKuF$?ixc?w*2JUqP zFR$3Nzbh2<)#f-NgYpzI5}AWtp-xG#?q%6bpNCplv@-|0LPJu2gBcI|b+9WmppUu^ z+20jP)UA9(-XY<$le$vpU{`39@iEwhH5XRujX&b9kf?1Ac7Kelk@k0mlD{hg(Y!(?7k)K~Nc+1& zi6wH?A~LZ^OahTP*cH0mdMxx1%B- z>Ag1W0Fe^GYb6b-Ev6oVB@NQmAb1-NP{R<3;I)!EWBA(sU~@9sG*&;mm~2V}FC!y| zEx8BgV2J_2n_0dFkrKhn$fzSz(t(_bWYoS&kwi)aFCzn2l-~nn1tbIK4s1=NMDQ}Q z!?|B!L>ypo0>OJ=#~>mlf|rqLxe{H0bU-ro-J5nqN(3(>lNRn-03<9iAb6)&uScXr z@G`QSW8dx2PBHs3K98(Jq(tyCvRa2bV`)6A#pAA?a%W2fFC)!^7J;KtPKuiQgiIz< zB6u0;)4T|bh<*>Y)2BiG3Pef-FDGm1e1Kdg$iQM1iIfOlMta3Afbdx%y`rkFB~l`I z8JYXc*^xS3Zm|I8-k+uh-V(vfNJsBE;K1`#!P+{yRG&vSC4!fc;dMOr!gz|=7hbdX zAtEJ$myuybFCGT6F4_!p*mIajiQr{qXon-91Qjwgu|XP<62Z$zOYF5GL|P(?4<}M0 zcsc3P9!?r7HZ9-J!0kxkP$hzwks&V}I|CVp?F_kFPYu*0f|rqji%0Y#GH~W*b;e5s zFDJLuvy$tc*b}^*{4b`YYV&pNmefv(;N@h?T;Tqdb_OPPT1BKp@G`P`dy(XZbshw7 zi>Mw%N(8T!G$g#~yo0<$!b3|8krKgcC3R6hc@BfS4DxueQZER8Nu)&ZGP23U+>3yG zfn<|WL-6>Am>62Z&JME%@ZL?*nsudXH%!OKXW6MNv!)?dQf`t0vnm1-*yyo@y6 zpLm%_(>0fpL`noNBh7v>`H3`p9>b#;|4Z<4vfBQqD(UXKikszWj|QhHOqnkSF>*1PiN50+dFbj=?JX2rY> zEW1kd5GJ3QGPXX+(`*^2y8$|eCug+y6DF^~lRKsz$Ht1>^+^!{pp0ku3N7Ac>NlBy zZ-!sfb(zraI~BKTWQPBw#RIwoKsHAI1o42D7yA>=gfhcdYw=LGI7nX_{1Fdzngoy9 zD3xbwnc-`-c=+^xK3e=>(~rkfeQUW

    he)cSb*8Er{+kx>@S^W-SORM!-r?58i)5WiYliRE;%TMt zZwEXV;%VO;6HyOZXZo7qd$oAdwub8f{|@n_HCOQ5i@4*M$Y%I{E#B>$nW(SCr0rHf zN%*66rnDJ;P>WX^b{?{d%D7kS(_RG9h%>p(@WWc%Joa56;3u*2=8<(9QRSKDX82Jp z?vwEcU63Ho}?uX83U}?$vpYH{o6_3&F=q z&oc?m@RM3R_tSm{L5E*O>$z{d5Xl$pI;O)Jep-t=)>}UY#CTQ29YbQLkaZ@;8Gcra zhqpR19>!fv+VI%+B4vrznIdQSc`Y91ng2ZCQD{A^(ovDjK%B{PhF{d;p~FwZa-ra% zeJ*^U$}?@waLgfm;bkn{!_9MT0AuW z5l9&*&vbxd&XhaD?`rYD&M#^b9@zek*xSKzXY!rl_qBNS5l2yf!HNSK zzW13kWSwbvhCkHchD1X(nDdI0O87KqHQ`LiGyIVTheysfj05YSuE9;L|2;q9OwBX= zu@-MKXEL5hdx?0H>A$5A&Llmh z@*#%mZd2gLWqZe+vCg#5V0{u=H=2}9eVjHn1%6z%cicseZq^tK|AlyDk1k?Y7IBs= zXXBpj9d}X3FBSzH^0TmV|27Jbor*bcQ{cyCd&gbi&(FF6ULNtlX-Ah6Zd2gLWqZe6 zhwCke!r~W!c!%F=y(ZkIz>mv%$DN3G3n7x0zaOY`2Lt|``Z8`K;Wh<+T-KZFta#GO zfBOMm4DqD#XG8`RyUwP-kE^7;VY}rsETuUM1@`1%6x=EncnLd&t)*<6f<4 z>N&z~3j8=HEp8s(1^Phw8clPLU`N7j3j8=1E$)-D0^L6Zx9?IN zzDo9M;^B=-LcT~jSrG1bMqMs!3j8>;77zPj z={&&epmoc~=;~zMrofN$)8e5$XZ%KZXj3<_@rXTdQ{cz>YjI2Jf3(bb_JY-VwC6~osCU%`ofgcy9#e*DrgV<3jANa@|M%HZ#{J01$9@wsE7Zq>Z za~k0`1%6y@EndCHKuBQWJ1RloH~T?#&^85rTpbN=NcgY@T!iAJ68@T_E|oR~eq59W z*F~*6ycMk9LF-YomrbO~+Z6b5^|W}CsaNI#F821D44zeZ83k|g*hNj9+7$S4 zFz1TPvUS1qQXWvPl(t3Rdn988|bh?xlb#8-& z=1wpd*(sMSxn?z%(kcifo;W6;OG*ASxA;VE42x7Aq81`4IdWY`uqZrza!~9M{220i z1F|c7tHtE-dHaCbgSAW!8C$}RMJt$+_GbuGRgYjwYTdGE%x}ps?n-4dr_QiGzYxhpyM&A$cLo!55Nzpm(PQgQ zCz9!P2^qA=>t`TckqnyGv;>h%s!Pc9^+~Yt<4_;T^tI1&6UkJ%giO111p3xN1ZHXH z>+K_w33LhR+jQeAS~+~1)M`N_leZGm)Tr|{Ab-c&n(CLrgo>DgOxeoFkf2RKt`lV7 zK8yzh$waM$^sd!lB9Y#fz26hb^sH@CKkmZ@P{MhZfKC0lf1lt{N@0^}QQM?0qT#w~ zFrE#uwh?vT#1hG5sDupv))8Yqn1K*&7dV4~i?GQQsD!kn=fOPr~#~*}EraNV%F%I+T!e&^N4ONI_l2by4zP%3{SB84n&d^so?hwh;ri2Wd zeE%_#L6h3x&a$X26Phw|<(?KQxol%OBALdNk!Mc9U9HqM=(HK55@D0cOBvZ@5AL#w zb_O*_{+URoEG49W`V5T2PGJxEx2@|yBombqGWwUQ0YJV+GWzF*bBSbvP(qr1Z3TKj zc>#`T!&Y#9N;{dLk&xz#zxWbqKK}qWp+yfdEh8a)^X-MR8;VWeyg#6P6(o}}64Lzi z$L>U$A76{gBDsQ*k%z^L)^B4EnGZGmiAa{6{DQP5CbNr%W{va00K@hIc-4B|LNxpj zugY?g$;OS#fZT~>a;4@Kso~7|^GYx>^ki>PU51(f>O%i;8%3nV6*DqrTjO3pZbUL= zecr-EN?b7`Ed>`r8qiP#NlWetLx_~PVn+Im2>Tj_36>ae#hKTJ6De`UjI7hM(gU#h z6v;YW-+2=$am9>`9^7~kkPDEE?(1XE6*DquM15$Z!5PV*%m-u0ro+UDFZh?KZuM*7x`_JqDYkECy{s;WbkxMD_{s=vJm zq}Y@)d52=;ByKy2E9PXC8*PAGgEmd2m-`VZam9@EcKZl!Q6asn^e9QB#1&gf{kWU^ zcY!Nj2qyL8E|pfDxWpA(NnM0bsJe7VxQM6WMLQ*~n2}+xr^doefTRfQ_WrXSgF`_| zTrndp^)tRD(h_z}6%GHN?b7~r=J<2k`q_s2@27-5?9R0J;_s5a$BBn ziIlivPMUYQtEBtS$wW$AF(dt>?|Q++JB~f%ZyAH{Vi2{JxMD^|FMU=C$QMXPFWjO^ zD~T&+q-oij20-3K(lm1~=2e7Ei7RHLd4Jx0M4GpIR3K8~iaGhIBSy}`runr;Ya%7C zn3K1{#;WAyJec*x+R9upCpQPfdYff)jdxEXC9YU=P|yc@2dY~MoSMDlLlt`8d7F%s zE^XVTb#rf-k@90oDtz~Dx3(!=T6KeG-Qk}vqi^njvz;0Yy>b=xWGL9ygMG!iu}B%2wYzA0t`_*)^$ z(|>v{G#mCj^VAGilFbZHyVeY%W`}%O`Lr`te!R(&Y&u}H#%<)wtOR4yR*r9|of6s6w+060t zgJGe{vVL;iWx|=$XSk9o=6GC@AQg`a`Hyhs`5E4_7jz3h-tFII(<_*-Ak4u1w~SC% z8|MBQ-dc-Cub&MwPI(GAdaawA!_${<^%AOv!^ign*Sc=}sete7NVcqc7xe)hZ&;pTt(<0b>HbzB!P zyh}FxXfNz}(RTBJ(_;x|;(*~93jV)>_4pF2VIq9OzD%jJMRhybGyG_&hbWI}m1NKF zt^mFR@#Hd_|Dn!c5j(5Sk6JwROfCqy48e$p9$q?waNByJw-!&?T`~sn4Tz^KalK2p zZN1P}i(87nfr=Xn3+tcuJtW+=Ug)pIea4oA#ZSKtai1SwsaqAc^+Ki=uhZ{*Ww8DP z@j9J`sJLytFi49>4|ALg_~<%mA9=IhG_Aiu^n*Soe&S|)i;xH+j?P`7Ehno z7PdYdM4Xd8s@Hdf+tv#sw0PS7XAlH9vr8B+_qjArNw=tmsW+IKZm%lWrHd+ zZR>?GTHF*o8oEsn!XDNSw^EbHx^2BME*tLF6!*5F`v5O?q%GmL^}+-#?(Mx}6ye_G zuESoPvVPds3zIase%!rz6+th6VgbEyx@JqlZR>?88eA7q{X-uZ_h_tqM8)BU2)C^l zrfKo8_m4126>0pidzq^Ux2+duXmLx^x)@js+!DC{55jHhg;`oWtnTGpgok-I{Xn>F zy)Y*mUbN^?!Y!X#;aL_TGi~dId0IU5#zL6$%2AlmLv{Zm+_qj=pv8kmho%x9lqp`k zBCOli3yZShv*ts7NwFR@YGW0$Zd)%b$%Y@U1Wqpt-_)`Q;kNaH@;nz?=Ys+QI;wcp zwyg-atrwK%xft%>bomXKug7rK`PWDh`FHf#w)KMYJQu^GS4{H3+U0m`0_mS(aFyUH~)I~U&3wcg>_ooSATiBia(#- ziE!I`L3y5wRo;AWeS(T#m?SnO<$6JRo{Qt#+aFc&mF?PPS+{+pp!p`H@?RcjfUs0# z6b8b-1K_Xn$L3q|TBr0jFfGq zQB5?23Et3ap5>E4Xc?u}6#78FhakScgdrN@H;A$AsHf z8vC?(^u!yuXfH%OdQ_z-!fh*!16n+2KY(1`5jogc>M~;~&(4v#m6K*W$j-T3{CM0^+_6`wEwV<8E7N9Mj^a z`1wBoegtt-t>9WzdD}|kL^eEfdO5(?3fw&XBH^}`#wjiC-OvQLjDmaDcp(xSSb5t@ z5>tRiI35keZXIp7p z&4!!qqpw%+GLd!2x^1O#U5i@`#bD9RdMxgrVR;C*tu$_G@t|o>RuLXFz6~D26J2Lp zX=GbzgVs15Q1N-crx0#iY23+X{o>3SDt`Pg;p?&MY%7g>+3P`+ig;FARNl7I zc%a4oyYIz0e*&kCe{$2Bgxgjce{1pRjk*5@9HtJeb*rZ&5N=y({G-K9+a|zLss9Uc z)4GY*3Ae2@o@jCN^=_XCH=o`tG85Q!ww1;+E$&-zJ5*e;?wk9E7_x3#X}r+l<`;=e z2{-@!Y<3nd$xOV;hX4K!22QbV-v3P#!fj_J-YEG0%1k77hNZ{w5&JSF{F&Gg!_Kg+ z8kA?nnD9w9;~5;ocEpnle;7fXVOuXK&x$cT^jy8efCnKSx<8)};kNaH@~jxcQ}+KA z1^9ZzQ|3%o7k=A%L3vh;;g+&9E&~qz3D)1_*+tfE>VkN#Y2G$=VUZ>spYh>M~UWj+p;?W}#CILPV@#t>fh7fL3FU053 z;z5%}S^%$#cu<$+YUOR}h4{Q$Jbm$i7;yM?5KkYlQ=B=#w%gPT@%goQ+L50B0iGN2 zw3T7vEEVE5^+J3>E$&N=Zx zA^zKJxaaE^fWzVs_}7a?oP^eG>V^0sTHM=jNG9RlCGHm>>o)a5d@&8KANS~TZO{wz z!MJ|h(J?y+x2YH6ztiBlh~Tx5Pga~>#P{n}mupim#Fy0K;kvItD=8ZxVb?#aJ#SMl z#DA~FEzKvCCEQ|eDDooMbvE@vd>Jhs*5C~ad~Ox>VJ%xhLby`{t@UUB&+yeT8tFdLiDV#mx`D zhiQ}bRKb~CA`=PyXIn4C`zkovsA|nGvN; zEm@MmcA_J`x>}ofakp%Odd2s{%84D24C_&S^P@_;p_O;AR^}7YPsArS9%slfLvy&W-i$&>`3%;K>g-G@sxP%;<=M`vW<&85#K6x96G}!)T9+r$r+4<_Y zPM7bYsO_fYjYLXb*vd%1ZP(VpXgo#IZ=LB3kq+BLiwffZS2|S;Fe8(@Sa!l>JAl8D z+}abv6466U4@$_;=RZRbt2{v&`smwPL^3HTAyfXFg6HML4pGYMycoj@n@j~t$i&;* zU~9&(5Nn%wVb3KZzbav`otC(Fm?tiYq@}@u`zpE29_e$w7)U<-9wdE!Ke?4irWz%+ zt+Oa%GT3~LWSyBSMia>dql7GH90c2$c|>ZeT!ldx@rWK`Poqo7=%piJwi{sW2bDQL z|5YNH%9M~nCk$T!Sq;gceUAnZ$pof^OussC7R>lYNT#2ybdX4HGLBey^|*xOy+C)PaafNqKDXH-?m9zavKvw0Lp6slM~)J68S@3do#f| z{rYp539z#ZDzA}?_TLJ3$k9N(Bb0@BAMW|ZBswqW!?uEmE~Yk zKfdg|Z;51D*EXqZ^zYh2F#8}z(dimJ-hn+?9Wumy{j;w6E^Eqvuks816+qhZ5u9Z<3VIp1-sR8JyVARy`6@ThVS_Zi@L2ILHbMyobi3?Lyb^MA*fRgjh`m2hKH^bnK( z5;APg5e!!a88&_~o}m>aQ~olt#Wj#TS!BaQs!b;PC8WiBcxfOTVmmF)t^XyPOz%s` zpiQ{OD`e2xmA8pxQeQ?MFAG9Bi#!;Rk4Tmkl#%c67EsCOZE??7^biyHGIB`iH!9h; zsyC5L+e=9QY0ph?Yl=ABf4sB0_Ayy6A)^nchXMH(`!;&dn+0T(DS8Q6?nRYbuqG@- zvfQIC6^LXHtxHJLpW;y=kc+Ttp2}2x84Cj>q;IZQd!e?1G{2gPA-m{X76Hh}ihebT z^ew&kYa*HWmyvn>2dkw18yZip`z56LfdhI6rM5RkjE=SC8vP5>njOqi*I3EJV*P-% z1@vms$sVxs3)Q!vKzw6rgG9Tsz-!2xJVk&kj-?EFvKAk)68$F8u8d6iC8;vF;s;2k zEER9C5u`-BGSYA9I8aE+TS@)q<;FuVf|O`iMkcp-I128A{b)0}*=beXOSCH^L+>wM z4yMu|rw)KQUWS4LXu z-1!V-3AAYm8N7mQva~0kAB^ud{=679;!I@64hsWgBJ1?@Vq!Z;!& z+Le*z$_{}Z%JUS-awRU-SIMGchKgCqVi870&z{~DY%WDIdU{0>8e+62(XNaP+Hr3_ zknTtZ{rcS_vMJH7j7&e)eFV&S;WN_rpTO-nG5aLim62(04*f`XS=vAO3lk~Pu2wQ% z(>ovIpobu&1?_qzJdsF=cD0ha;hg3|hr;&fo#Ot? zxZTl@NQri3q<8Ds2(sy&)M+G<676aw_2WxShv+cRGN`P6{5R)15-HKHR#MmK?z@vP z`c-Dkn_p1dF9PdL`t+PBO`iTasaY1_E1E+N%bod?aIh--?Q(5gnR*L zSLeZV$)-fRGSV{Uz#$?nL&Lm@lxSB*h7C)G8L!w3>p%YikrM67$-2X8sAO0PRijI^ zDFG^+i>L8e2Kfs)gjLFR zf@y*K->|MYKm-PQIrrke_)GgiYcP$Rm4=2-5{&q9wqr~~3s%k#Wx(ABYWd;UfGcG% zwam(J!;iC_WlGtd4)=V%`&dTGLcg!545ph|8Mu`ZpY1@C->z+LFb0pY48Q41_fZ*4 zL9;T%qNF|5q)YA*jH@Ng0#Fu>qmrl$rlnaKVlmBjv?=se<CMWiVCE z$`A>uZ0DO&9ds~lmsBQ`)SI z>iBWClTMbT6Dy#M@30I@jUKLQ8PHGpP)wzF8T8 z_;I!~Pj!|SfHIVC5Uw+JkBBOLoGrG6sdQFG zIF^y^98~(PK4ajX6Miy%*O?bo52n{y8MW}^Y=@y*emk`b-TP_x&f(Exaqlzb&dP|y zkF_VF@-=@S0cKVP>4mBBPTE2A!cob6ata)$|kJ5+~@F1gkk;g_&Kn3`v0 zL}MA*&PMrmj_eF`>=KsY8}Ee&aztC0u4iS4U@Y4KDbwhQ@lb}?>@_8C7dsqS52o;0 z84b}ywo_83o-Vhcj9;)Grh1oz*2glK)@Nlj#xk-UmFlKD8w&j)){l&9=N?mAnCfR` zG{ujz&P#OzOS(d6+q-{TnCnVCykk$Fr81cQXJy3V$8UQfZOseo$5%V?J&Y~Jq5AQ8 zPmZH9SR}y85H9b%rVL%9Pv@q>To>8eMt>e}M`f^>fRz!CAAi)A(QtQkGL_MA&P$;~ zu}@iaz{(I|HH2PLbjgNPs9Fh$0CI8WJRq6oMqdR*KOisNVSM`49xem4h1tDg!MI#+!I31&GhGSG%yN8eAlh6JTA495bq+^VvW0cQu4Cfo4@iDxg&KFfH z`a`aAq+^VxV^q|SLE3iPmfZuz`ei#?)EQNBR#zN(HI4YF9NmqGp&b#Q$whz9e9g0N z$hv(@*7Z3k5?UG~$Jb_L%|}^|F zTl4YJ-iFTK%*dK&{=hnpmE8XCJ%cnI757<7uQKUAJj;3}v*-^<{Yc-|JoU{+CTnhQ zB-Y5t60&qRYpti>4_`6qS+x;46w$XG==)uVX&=+MA@v=THNV@Rg~{kI&B*GVURGnW zdXx4dDWukRm|#YF6)4wH*w>IvQDY<$yJfS|Go--Va zF&UrvH3HK5hG+jyi1k)7Zs;9@oMWmpe=l5}qLUtP2dyy3XJ(|k(>Tgug*T~r?^m%F zNPU~o-jrN%B85r!=@qB3&V-$&q)#yigDhLb$X5rro086R5p}JteYRmW>m0DdlYyQw}0h2Xn=6=bo z9rePD^nBjOI8V>Z1u5kd-ek0?zxA9r((sy|sY^vcLgzWo)Dk@FU9ipU3KjRU&heRF z{UguM>l>+d6?4V&@K;9eIsTp5d3wdIrFB+8dWEbI`_9zb3Cm5%E{_KrWUJ|mxwR9+ z%}CGUn+(#^Y10dXd}~Th|8*+s^t5O$On$lAluX(-#UR@axX9$BI8$_t8>-1?={1lT@R+^DsJ3p(+q}Pf*2~2)9(2T71 z({R!WtJkz@3;tch?H^O}bb%QL zx${*3>zr=;GEhaXS^dZ1sP*)|tv+uG6}Mt$f1^M7{v#gDb@jFjOuEjo_x{Z(A#5&zl^HK>VMrH1HGt#w6-x45Ol1|sc z563b&?|>OurBB@jfWnEa675=t$-6#gq*vqmV60xV<{(!l=U*@*tB-$t4J0Z-O{?DT zC*wT7yK72T$y0%KR?oNCu)c+b%}AG@9BxD1c+%;z;Fh8DzG>gOS147Ub-L%dXH*^c zOf9~8=p!d4lVjnLe!3b#^Ud59U!(v-9+<;EGiXtEbM>bsp<{ z9A-*(-h*`tD;fUoCX-Lhqka68UIrQ3_bQW551Z+9FXgn2N%w3GPcZrXGc&U0z5dmh ztocWCV^!pZB9`eTyCX*8f81>>l<98chu7puYXvm*I#f2+3OeY&RdAoEJO` z*66dvZ^apqRcbzVSM!K>GP!T2j94zv1FZmK7t}K+}#*3gGO9{9X?&rD38JD);B>Y@@Jaqg0|9~$iJaqGVx`k47 zowRc%;eVvZeeIJ+0e2_7!PBQV7?(E9B>ZA}yvO~Yp2BRzl{Y=^EI-1yv|lD?3%ZXI z2A5FkYCK5&^=GlpOiH_C3esoHoFVA%zo^MR!+nC8l=h^gCf`lpWUozE{{?=WaIaMk zOBt88qa^%(27J+XxPH|RYbn5|pEZm{+KH0zhv{*T758b;NZ=mxoT*q7!zFDXN%+%r zxZULX=PqK+mGS_)$+fe`GcN5NDS9nvTLt8j`c+3kKjbOPq_n$XQ@mWi$ypk%z_A-W zfVZd94jgpJIBjWTL&Ei&oF&}oR)0f*v$ zV_e$KkZ}DbXBnUS#{>hPP@F19pbbc^_q5+Fg+FM(HM-=2LE3 z2;)8__x{JYw6P%J{u%K4VGj)4XF>tSr9A}+56pm9b8lnd6?1T0khc>gJXps`M?XC+ zp?WLBPQvKE%TD8LGF?n#;eIS{1zPJ%~tU;>jK?bf=p zPV=1v&#V^8W<+Z}wPQmK(sU=m<3?NBNf4yR<{mHbiL8*_jN^>^x9GBUnb3W5SP!lc)O$EBGx-%0SUdYIOaMc;Z? z$Tpct^PL2*#}lb`5v13D7w#LR=}v;zqzU#0Ip#4tnql##I|&|L${>HUT0*A+k*w2v zC&9Bo3a($#Nl)h`RNV=SH{VI{nCWP>C^Tn~`;y?<9CkbO|-cQ8C8+G~Y?^c=Y>GgS>O|9k+I{ z9vMHf4(D0sKf@9{i_b9Tr}<8T#{d_@_j&XlvYU09?<9B>dQ7XMx;M!)%SedLcM`mN zQbwzj-d%cCW}W6c3Ep{r-)E3n2gfmKzLVg!d3_-!z1CfA%B1;Df_LYW|1#+vQ>D5= zn(icc|6MHDATOr;!le05g7@u}&kge01tW1a-%0SASIO{wUeoIsF?*uvPJ(w4u^*s& zuzW=$xV7dx310t22XJe>{@Fc+N%NfqZ|7y7G3o7;!&p8r-%0R#cg7eMuNN_ataGyI zPC~7}3w^~pYhCJohDr0C1n-MoYcc74F82c_&36*qN^hav{~?sUxs?db$E5jALiKS$ z2Y)SOeW2D5sFAl)bJkfSd&ewH zn(rjI6?LNu0RLdO`TKs!r1?&QOH@Bv*@`35rESR=Ce3#ey!VB5;nsTZ>`qsOi5@cF zNvJVuA!Rj@q_akvr!SM{I|(%=J!{80YmAMlz@+(3Le=@MSYpuTkj|>#?(4~<`A&kz zSo+FdYy7mdea@u$PC|`ZL&%$yB%L)pJJn>;d?&%};w-v8Lil*MvvrJBKl7agln#d7 zdd=x<#82~`1h4arRogM-G4I47wNpQqyz$s`~aNkl_{67r;^q)+h%~dkPPJ&;z)TG$nc-nVDV)BPO z3es{x6J9Q`EN_AjtttnxQm<3RimXqaulA$;cS*BPwS4DP`v|2o>?52Q`vaDBvFw5y zj*j&?1*7WJ_``h!#R6r_?HX7@w?9l|%-?Zj8iJIz5EP_;?c@z0;heC3@3U?QlhW>i zf{g2)7pG~zi^#YxQM9@xbV?fs3ex{l>Nt>Pgw8*{qB2B~(w>2W^s3!$G`bdgv4HF| z2c4sn(sqG@Z2D{|$`JiqW12phv7Sk3r$9l5KA1>592gm_quu+F5+u=DX_G)f`i8h~ z2I)hjZ{r~zOiKF$3Nk6r;o`6atYK+dlJo0{On$=FKr=rWp+i0*6N0V2v1G@)O z0dt*5pPe0+Fez;fC|c{CB|JOGGemmZ`_N@9qKBki0R`#xU%P`Kw-V`f>p>!u(uRP7 z^mwK%WYXhN6)N_HPH8V7bJA{d%(l~|eBA-v+5u3I0cF<0@^mtwL_1o>6FQ~Ee+3y>deM(e z27dPJ5|h%pzk&?7av_n)fIm07Gbt_kD@gzO?@NOe;opB=xxbi{R{IrXgEs>ZqI9ys ztC1aMd!sxp zbc#`tR`wNSo$G`9!|ULxisYMKr`D@%i7~n%h#+*2BOaVne zm9Bd9_Zn9WWGIpTRY$yMor-`ek#TXeu(4{tlgPN%QE!-31XPLiKhtzA$kIgm@9kKC zNku@FNH4F1E9mTfM0%AUhs;JdDn&q*$fl3nH$mqcBAZ_6bel;FYL{YItGDihwGSNm=LYge9~lvd3%RADL7HREbRRn}U4Z zAuo{$Rht?;qzI@I>GR9oU(mPLi1b;Odmrmm1XPLidi!ENNbELYRQ|0_)xS7TML?Cw zzyHBSV0wk>b$pDGtSADiM0(t-iOH&y9_KeKWSxqDY9s9?M{IbEfQq1sfZAl}0wxs! z)kbQ;+J&bW&-QelLH7&N6>H)=6#-Qu1NW4q6cYQR2&g|7HBu`@K$XaV!dG@O8Ib)b z?fM9vihwGSfrY)kU@|c4!~9Gt0;)s?obUUD$$$f)JD5}iREhMTeX2Xic66TpUsZ5s zQV~!kvcZebCWMGzmnN$Q+iEME7 zPy;3#oLUA)tdEK!ph{$&%kj{uKRv0=am`4O6aiHty;3t!Em)@_ph~1q z^KAo}^a*Hf1aU<`mB}w=zct91!RJ}0BB07->=-11)~d42Pi?HEDxlKJXs2M?MRr-y zyZvyYS5O+K;eYrv>rbYoait8UvGGOQt>R;QBnDW&cKgF3S&rzU0pl=`*1Nxbf=i>P z_2(e__$@0c-pS0P}08ju(nxR=5miZiJQ z;xcL9zz-yn2aM<2uOgUK1aXP<%-OX$lb+e;H)2u|#BHSA7TAc(JmO1sIadGj)< z2;w$U3$Czh8pg8|wKllS+*l?RL0lpOZ_wjT?c<0Hyj(LolZqfNkpcCy#4;J+bG9Lq ziXbkLfj$ec-DTD3UgiRmiXbkL0WY&3VKU&!47zbf*pMQKOQiqGY_x(T(j5Qgp~5qg zH&Fy}iS*4HyO>E|ryqK=PDK!xNsq~xVY*J=np*}ksR-gS8E?Db&o?gLF(ws3Tp}C1 zb)&>yoM(eqD`~M<^pGNmOJtpUQ)%t#5?Ml>|Nd^tq#}q*q<8INo**9(>FpCCiYDq? zMG%)rpN@OVFzM5w_!HKt2;wq1@W4ic98hQ^lZqfNlc`S@8Dz@m*Q}%}h|6TtgGmP2 zq{Mb6rSGcxAPRo0D!x$cM>xY=)Mc?}8hCK?KcOmq{>v5&Fs1iuLRL@5HQl)d;j zoWBHQ7?J+<2KHf{ihwGSaTd4HAa@fPmt1c%lZt>Uk^cXt#eghJr2q9P*_c!WREhKo zc`N(lsktS3;%T>E*PO$5l|)4e`(9oAaRuqX7(bdzgVXtph~2# z!y%+NI@#d;R3j8C0;)__|Ee&PzAnzKS*IeP%4AH55eC`b<2{p#fGUvuuU;EK-Y3$#W{rNVQxQ-l(kIHb3X?u< zUOi+|5m05aUjdYO*4nVog}zKG0;){*jzMIwl3#3KZ=wpQV!RLkpQ~c`Pppc|iyFCA zYHTWYv{Vb%)RyR6c)u&sbW0a3@>x3Xf`~=6X^HtBBCZm|_Z1ZoA~gjfWdlSq z#>$dh17aR#zGZF@#GJMC3U13Xry#_@+7JV%1$`Sp^uu-5mj2YLeuz|-`MDul{Z4{j zwL?N~i5L&D_$7%jhy^GvEsKz4Sr*QtS2;*@hgeK)S%~{wEep~h*8W7o6Jj0Klr8JJ zLaax=VA<#fv4L8(@eYZvAU4yHH_@qX+6wVAu8y&6T?erRn>m)PB_KB6gV@%I1Xj;1 zZ;zAchQ2R|)~6LLk6+(~peL-$6n=$%LIrM*@ULl&UY%GV-Z7RbH1R8CPFeM52HC(y z-NwQC^|k3n(c8&uMmq=X7@C-$)QjpgQgCi%4E>wdb9u~bmqwX z(shaSN_2gNhMp#!Ua|3anN*}U66rBL8rO8_U(Vw(sbU@`6{!sc_UN`oH)-u>%)W&t z{S?m_#uXWZq}cZyZ7e znX+UdlL{{=lbv!^HptdXLan6A3(BO+(+dV!`jR)3=4C}jo2-{+51Z_X9-+}7_v+Te1UBw`-W(&=2yEkm2A{nl_ASyo=(mN>G)tTlL|wY9(GL_^(_DgBml zzarO!OD4tA;7WLx4EV?yG)_XhU$5>rS-UjC65cHX9-lxJtB!}aLtGZ8Ef2GVch7)V zZ}Yu@7cUaYxHQ%ho}}Zp1(A%QJE{~pUaTWwUe?QlyhRnd>77C1csA3si*2#>7zS}O zXuH@ZtLzw845E$He2*3w2*o1V@ZGvP3zL}-;;?jzHNX5*fm(Bw$EPYXp7|iAWx&6% zb7R~u^h-l~=7TsQ1Kv!d&>9HHz<*P6ddQvIcE|E{X9I*%CfVEXkd*YD|sj^Pm zRWKp#Li%q&3geIr&@Lq9xC@h?kS8X1UPcGOJQ0)Q1{tIxCQGdiT9G`6$)IH&zGI!H zd7{1hyrt7Yxp%iqAbV^p#Rp|Q?heY&DH(k(%Hw7H^(8VzXvGrF}looAzd%Y=`k^Hk&>Hl14gpYBoy zA(k}Tuf4UGbt>GOjkI??k%+O>$J6!j!}Cl^54lyewocbs-=T*@YwL7=*Plu0-gN~z z?^KCvaK`=UJm;M#n3Ktoy-ntd=6hr0YqU0iNZ-GIX~d-Dj1@Zl{A~UpbE4$c zM@90(Dspb$^9DI{SuB&13s#Xsn!+bob@o5I*-FaZS4B2CGu$BkpU!4dik=^kw!oRu z84gT9-Qh4BJ?2!b&-EGHe1$WVB40?(m3A25Kd7@qoDxLr`G_-=$R{-lp(J#8O5~F& z6GgE=q{126NV|}p-9b5Ey2Ba9d^VF?t8j)kQVWb37KJVwKsp24e}**!eSj6tP$Gkt z6vVZ4IvF%4Yknpb&d^5MyHDS7A0*Zk;0!0u|A|S3GqjPKPfM3*oZ?Yxtxwag>kTq< zXDE@g7T3TucPc{Uta+=A;HGef66w`{Rc`1!L!?)qb+p+nf}6q_N~FiK(H*$89^Wl4 z!=%C)+DK=wq%Q*D4Dk=nFn-GsCKb-mMrw^xXVpZv)}q!n>bYbWlL}`jk?mLe!ujgA z5wu?%h*dECJQdE+M%ugXzkyvheLP)vjakK{!Wr5~txjU$>gXZS+Bz|%VeGn2g)@}M zc}M#q6g&2%^PIPT?OY}m&QKzKuPyD2){6Yd_fo$gCKb+5BK>MF-@~L|&0%y6n6Lze zGnC0`gI5{k#O}1JFGz(ml*#0siwyFMgIH-4q{%V4F;T0s(<9FvrAWsnKvC9qX*!p=Yyn;kF8ejEuw6-phjm8|I z*&=#KF}EeM{oc*<(6pB&)MI!y8w_ak> zul+cz`s<`(w#ek>xmOHwLmx`e#d#`bi%ia*gczu|)^GahZ>^+iw#Z~cBP^I%$(V>* zOe(Bix->tdA&(r3w80?-J!Tg&$TE+k?3|S(*Ce&SlhMpsxUTKBxSf|2}CDP-UX|F&YC(`4mtKFGY7_vk* z8npx&rF|VD8x4N9g-L}WOJw_BZ{Gp=p2+r_m$zq9VaO8c`=}%88Qm}W-kR2mNrfRx zq+diooTt^J1z#z`q{5J8^2cV+4RWzqq5PO3%j8!FuwZA^Iimhxt4@_6lM{|{u(|#J zapA8zyM5)tU-^h$$=wr^jb*@(MT3|UwrHT`4O)rw2&VDUvX`l^iU#TPZ%r#2_5_m% zUJE}3zx;wuur{KBBL9|VvX=MSe=tj0_tdmJevJ&$bTL9Je4s6KVzBX3s5&;~be)R) zTh>|lKmUO`^sR_pTE3DZ($c6Xt^xXhJdZ5T3GoX*`Ftj`PDTFx z0l5y9n7+8AO(qMyA7PAVzPSzv8m z^pMCXw0u`iF{#MEWwKD%Hss%f^w#d4#iSztmdU(-c13F&3o=jRJxnSbu}l{E!NVX6 z`s`;?;fQ6j#1wCXEIKL|lja$PRxA{r#M;_Ie_@kfjHk*G%Q}mejWfuC0f(71&nPlF z!@SS1&gn2$bXm6g(cFB6GnC?pmMa8qRKF)v%X)N!L1yj@WwJo+E718;=*(4=N)}Wiq!* zbC6Yaowt5vQsE3`GLKya^sUH$v~26A7^LZ9gq9}^3AIxxp)*Gat#FCHRX9UgXYPs5 zpi?X^Y1!^pW>Vn{Wiroi7!iF}7?wawCqk#f8Gb-+LN1cEiQYrosxql?hBBG!7+kk~ zJwaycZ@5u~Gn7d&o(@<@!%z0+xUxlWt-=|~WS;FPudL&leftn570&PjGVTa^sE)34 z`%oqo&QK=v9ccz}2%OmH+c%MB~IB zz0*IwL|)Mq8WU~lr{C_|v!GO%uHO%@$9$N6e(aK`YvZ;6^raDPbfvuT3W(+AdkS{3 z%O^#{77!dYyVxZoe5j9zR9LPQFdBxmz>tv5|s-5OWZC2_iGD27QQ{Y%A9VbVW)BibAjMx_`giS&Ed=`53exBY8a zN!2ik3G~eX>n?VUPusRJ$9C!)de}0SvX?Qh(L@|gL@R*htArLQ@ zlJFAqG!KnxV9$nWXn!m5I`Ou?6`jd)V!?E~+1g6GF$Vz(U$x@(0=hsh=4Z@9MgC&5 z&n#mrj2(sVS6%>>S;m%`(V0m_wq+x=-qn6@3!Sg2vAtc6XJbB2ROAv8SvQs*Un(9}pw*3WrVTk^ z@rukxBK;QJ#<}QEviF;R*RTYIOOwdJ)aS5Soeb>#eiZ9exHOqO{@*QwJpB3)lM0t6 zlSf8c_U~&xAj=XNdwISna%l1>9Fs))3OcEIo97?9qn8<*J2PZPAa7;GRuJe$BPvMw;0ch7bHRTMG3ddw4wWh-k zE`rWwq_b)N^>vt3I3|f~@_t2OCY!tno5rNVF-c_CVv}G)c4U28*Frf(F-Ml5a7+?e zx8p@uSb}J6-FCTYH~V9bNh1B`&OpEF(cf=IuFsfMI3|e<>@j*RlYt3yA2O+MOftED z911yW#<6o}VWzz$u4Gh@x%Nl@T)Z&2AiyGj#^tC^7spXh~ncarUGuR`T zX%qX1qh+EjmjLtHl(~F4@-uW6Dl|Mec61+4QkECW?0*oS`A9@}JX#-d*-_R$SYyJI%$wJ?m>il9_LFg<^q+|Rby5T~!)_l1=VEHY&45S5- z0dq&sXHwymq}E1y-+(#U-zGA$TFKc=Dx8u;x))q=5$7pfsC%xLhRzlA%$tl~2rZFL z-9u?OLrJGoyd?|kRII#6q~EO`?Lc-Q((g}~mP{%fghU2Dy@EAWoeccDHEk1#zEwB~ zi41CAnAz{3?Q@|sYAkI}e{2ene~Qf`>@5!=krkV6M!($>uZur;&A7svCB^Q}Ki5E$ zF>^J|-SM~cOe(BdBAsITU}?cVgh;10|Mp{2Va*chcR_mqvOST0ryloZQen*!8F;z- z4kiQ7=J}UNg*8iLkk2EkafHsG8ZK;EpRgJjUFS$|G+tQT)HtIooy5H zh^E)ohj&bYH`UkA!`p8@WssTg-bntU%%k3ukTb*4fOVSZ5Dxn{AR_AzB6QdnyqQTw=_l!QjU7B4ozsnUx_0a)yb-ll z;qE1}?O*h)F9$~=+g`jQ<{*)Z(oZ5ouK8U;Yu6JQa(UB9Zmpv9lSt2h$_Apf2Z;2% zl5~zqMd>Gz(T#%FLMMuHO^dF-xek+xM}^qPtahu$AdF@i0x+xHvS7m}DE8EBq!zLK zGW@1q97ik(pfXH&lhWDEW?8`IC;n)ySV|4p6k3=`h5wUuhW~p5C51g!Me*&;H;#rg zsfeNy*)`?`M#Mpc@2(w-mt?ZqJhRr?Q}G}SNvHPWADU%? z)Sg@jWm54V44Hi6+SDLl6e_`_;z1ZP`CxeggZyvG4JH*2!jQ@Pztu9xJ9`bUsdx~E zM7mczk37_F0`-u4h4OS6kLV#qh9Z$mmp?iUZ?cBSrAu#%bc|-1qLi0NzxQqHptT}- z^m{w@E$dWdC=wY|ybx6+f(*+4m&nvfry@g<$v(-;4YK>*GpzFy^6eg9AqrY`b{*Z> zN~$sxS!c;)*pHPgax;xdMTR2nQDqGOi;g2aIo&~DJ9YfFJ@z~FVN!&DDNPEGT#MXS zzuq^zRWVv3)f0!z!@oq9xt|-$2o4l3v@*8>;+a&0e~ENiyy06IRSc0X)6Razq$2!F zWS2hsX&p?s(Jl#V+cBvK{}So6@!fflqP0$|5;P_i;a?){)@`c@@&&clZoxmIh$Ev? zgnx?qQaNk#aVNY_XoB)oQANvCUA5?x0r`c@JCC9>`LexuR14n(#+vY$421gQxB z5*hMm-G9(p=tcNH>21svMfjIU&p)@HL2LID>3J&41=gtu{}LHpTigzMg~;d{5j&Yw zgnt{E)o$^j@(BNf0cN%P_O3C@6ye`SY7q;@qC^xOq(#guI*oNI!oNtM8jDyfikR^0 zfgRCJBdN*Z7aCM$ToK77#a-Jy{TGU1Oj!O6&$fq2MI@IR3T+;^XKDk8Z|-kJ{=W^L`CciuCph~zSPvnp~O zD|un#OePhPTq51e`C*gZZaj66d+~}6Oe!L|L@r(IbOVmz2O^hF^&ZKjB9cp_-|J@i z(OOso)*9}Y_=ZVEB$vpbT(eg&8TjsAB_8iZjcT=IZIM5aN90d!k$;wE9jl;SZmmT|A*tB{*&pddJ(>ezGq^pTbtx= z<^B40>mj~uNnXm9_lw2kOhL6PKR82k{^kY>8OPeB%6WXfAE=X@@fn53mXenKdo;vu zhmAz`-x%%0q+)VQq<^kuv(QOVMEV`5If+Th7_4jX^iEw8Wl7LQt+8X%pFxnzXgDbS zXo35(`O$~y3?u`Qj#i)EE>GepiSZeZHu^6V9{SOOKA$V}($OTNk&fm|$EZl+IEjfF zjy8CGL*r;AVtwdCIGSuo($PdhK^IxZih6QVhND%V|8rKS*Bt` z6z|j8j8!}7_}6wg=TV_Zz8z7bz#1)gFVWj~)Yd3Xy#A|a-Gw#M%+dOPze_B35UH?6 ziS+xe-#nZ`J0ktIlzPEBC2KUEhhYidF1k^|1Gl7*9~OAv(x^_1OXerxJJRDp1z+tm z@b@F%FfQ4fgzw6L=XXOzX4U?BXOtC}4NSuKq{jn)iF{|^%Nj&7E?Ja>|E}XUpOqD1 zN%y>HY%q%D^mXXS~!>$okfWw>fLu-F&Wm#wKU1I~`U%4d_QgE{$!IG$~O*mb^>{T2ps zCuqCQSC>s;Trr3?QuFT~&>M<{+4)yEK8(rC2l0M7#ahsT_*skxHJ^j)RdpN4d=MX| z$AgQf9y0JHGpXnkCY1RgKF)v_O?qVD-|eRC?jwWvRLAK&6fa9eh( zDNj8RQkIh0w3<-)6pkBL9cQ6f@sZ|!P!;z{P$|l@pi0BqGpShdk;veIuW3~RMGrQ7 z`VH*Mq+-QKBHKP+c?7M^LS);g2eLA$SP7BHkk>=qp;P2tAurcFWm2&cB9Vbhg9m}^ zPC5gZe0z{dXi?2aGUuj`dnurRrarQr2GTGRvR+5#J9jSs0UiZUACWC*N zTZ2i-hkiiX+-F8Z9zCZYI{SO{wOy-WBXe`}6^1PNzn}^$=AaSdXqbY^bZp0@!jL60 zIQ5H?AjMuoaL-3EOezdnBHKQ0F&eE!G6+My(~G9Kn05+7mdKFj-LcSWFLJ<;`+X^| z5TwG8B{FakJww?33(^@lKZo$NG}RS`ERp>$Zr+O4{!C>5lf8L>KcQ&xzqg)(8g`zL zAl&{poLj3fWJzc6vWgUy1Q|R(e=Q~zhAfj$2ch7%lJ}pUV^U$rGWmWVISF0oqg`}G zAN8%ukjX{Ix!KZ7XRv?bM6XycI223wbmm&7OC!}dy)=8iK%?X?@aM|48EQo^L;y`6 zf10;`v}WLk_>vY#>umwoAcAI-CHN5c`)w?1NLc?8hXu?7aYSXfwn? zA`aZ9Uq7c;FnY_yED#sa49g$iKwP3<|7-$r1&aZe%hMqKqB~%&heBK{h_-}Ky&qD6 zn!5-hbRmiIc=sQqy_Ubvk|+dm6QR^{BMjo!X!`Xa#D5JT{@qUkm51dHy>XkGad$fj zdx-mWAnu_PEf2QPukRp^eFt%r&gfW9h$B}Z9=Sn0><@8zJPCB7uQXwqV z0t=3885RLC6un^?@(^P9B@)#jMo>?V>IO0LH<1U3HST7kijl9nM&{UT=($Pa9izCg zWeCO7U8tiakAIa9lm7&P$wN=l2635k_xMYc(J*$N`l6L&lwAqt-lEH|+RqV1zWRtOp=v#YK)SA|0 zxQ|FEX;c)>+(z0Bym8$QI*$Xi8+h^ZTh?iwm4vma)&M#Wlg_Z_T?a5}{xxM`xtyAV z#F{Zk`+C=zRD7$7t+m>Sf-A7t=ZLyk(?(>=(uhgLccVz;pjz}z5&CmW2Dx^`gwp#~ z@!cpA*?ZUDSR8jiU4i>TwoNI*q~g0#B(l$`Iu)7hbNCgDvUuE!a$_hh__n2Z`*hhm5z6&pzs8M*F^p)+#v zgq}<)Hj*SVYArpMRBvt6qHgz?RBR+kWaQ{B*zC~B$ia7l~}P_EIuie6tmEC<2SVRirO6`Qivl zaeb~ddo;ip6-D|Yks(zE)nYQF?4^-bovQRjBAZPqQJTqSW4e9Cq}#FdYfL%4Tv}K0a%m1(lrYg}5*q#|5MWScx;Zrs{7S=Sg&LJ=+`a`t#{ zl)jE$)Y{p@=_VQ7s1)HsBAX1mg5YLskh3J+sa5iV?`-N3Vh_e19~fOZ3qKKY4B zMYyn$T3AR0%7_n<&al9>otadG3yEz0{?TKQB3EhtvYrQ%if|#3BOC_&jn>+e&f%}; zAsy0tND(e1a!}>9XD})+i5yhgF@*$DE*RL^B4n??-$UX-r7iF@~ zo`>(ON~gkjSVJtLa(?K}HSQ zREc#e!i7Xee&;Zq$;g@7VI~#fLL#H)7pcr-)QsjYm{f!diHuBXxrNEd?(qYeRD=tO zj2`eM=BND_>Y?b~KlWo%5iTS$xcW{odV&;O!MP-pif|#3&6d?nV2f|IVES4n72!fA zA7l+S$lKmSnN)-ei3}<2*pA7NV&kZKq!6VF7oysYw^h3Z(Yr_oMYW6LVBwR0GOcz$ z=W4f0a%}Ie-QrW+!edjrmJjHbj2rCm(0?daL>r-awy0P1N@jWP^Jq8bIVzcj?TU(b zGO1)5ib|%P0cI)wy5Ruq=ne#zrTB}tC;`*r&LC%2TyrSJ$H?oo;-GRdsf@gImG6q;o*{#naG<3{BGpgpPU6 zI<=c-Iy)`ihwRLLGm)L2RjL$j+#>ifaxfve#FY-h$ac zWUon!`?5|&*q2C$fBF=H&LKkQ)xa1g6=7c@I~+eti{A5y>~Lr`x{NAi@+vM)l13KXdHLXofO}J0$A;n^$)Y^z&X4V4PkI0BkXRx@U zw^osANMy*PbLdz5D@2AoNb+VA9ST+O!8CCy2+*NWsr$#7RNR{;kzI$hMM{+w ziQ8B-@B6ieia-Z9&wXq|*tz(@zN163)-$|8_W{4$Rt?!t6BHO0ERisq5 z)@p4UW-rI%*{1GstbOQxt4OINvQyu3>(Sch)Y?wH{}lm-bShFRiHztPN9TEz$cXq2 z{;X4Roufp?MrdhhZCN5?TlT=}lHOXyb&e7ly=)?qG5fAWMlX7fbvT_YIl-)NdmpS4 z0}^A3B<1(mFPJQ~&x~wxKCutT3q&?KbLBRZiquhRZOe#8OF-@+vSsUoWtps?`(*X} zv_D^GD#p|C9YFi@-ho$`l&+Id_}jE63E4mvC7o#x92+pHNLQuS)_C%C0CL=KiLCKp zg%^`m7Mt}@)7~Lpp`mSvY}%s^R`>K#Q6##O&OU<^8^RL&iR{xq|6nE+myb$haPHq= zKl*NQaE^$UOe#`jiEN!^#}w#vA)T!q3e!5Uh-HeWBuHeyj{ei2Ge405Tfdpcq<3|* z9%?nZB5ijFf7>dp`!`G~p06P39F|lR^V8uP=^XaO8e>!x3B5$7?0SKM(BTr1DLZ0v zvQ9-pFOfZq)_DyQJ5!q0vtUPW5OZ>uNjkZO&+yia=pD78Qr0q1C!CMCpBYogXxX25oOC!ehaHd50%(afXPkz z6E8k;o~>I>MwzaYt;0)V-$d`Bt<%j~+vfGm$xOC+Uc|`3wr@2f+ZG>;LR8n;wn*7N ztaIlrGcuxIc4ThW^XxM>fXO|Z&B&nn{R)8mjCv?&&I%)szc|*63~q6AC`jaCSn&*t zd&)W$C9G|(XwCM`r^~7SA+p);6<0E;C}AZsq?jxGkWPjatSQ#p$(txjSeb0P_=rIU zMlQ1IRF$w2*=+5iM@%+b`Rz3(6*Z_tMxAXzE7)u4Jfn{Ja!##!AdPerT*iX*+0;oW zNRf7+AbsHdn7d3-kV>_CGahuu|`1ytSCq&(&6|#q;vZEtiyqD z?3wBlR#A{jWUq-;F~IuzY_Cy`#99pLR1~BV>G0>wzR)S$i^G|Sx2#i9kV<5Seb+jJ zoJ&2_VdrOtlTZ|-5}A;-;-6@3DI(+Fc8Fq~<}283vd?`9owtc>{XUP8awrN?NoU0R zSHU20u5hEPoU^h{ML{Z&A@}UbrHMcjax;23lZt}WMmiMwtY9k?q;O6sNb}8Y&!nOt zmB_BC`H{+H9Yti?S3Q~#eJ3RC$)FG&9THpSD z?U+;)q!QW2r!7)teLUN^Ju1hfq9B#XPCc5E>wZQ$J0-LZXHrp+N@PTIa0*B`M2u&| z)I&@v3Q~!TZQc;};{Yd&f;8aH3?>x?sYFK4ZSD%4U5JdH{_Pkh6$Pn8_TE*N$X|)< zy=9P*2r3FviEMJJ4J^<84AXdxI=a{o3Uvqt=}G4q zm-AgTlZt{=BBR!Pahl1frQa9}V~T=QA|sDD_hd5ix2xZVKCm%0b8@2nF zRZJ=hQi+UQSZpAZk+bp#GpQ&@B{KT^cPN_lD^8>5*PF+rq9C=A4oS!JVjnjvXcVLe zmRDp_QIOh5E&lfRXP~nnjY|BL`J5^bQxv2U8IknQR`?jip`Wo%ML{Z&kyls6 zLFZW_BTs*eEAl>CkV<6KFEMDX*k973Hq82-Nku^_k#T`Ou}sF*@B0&zih@)kqr>J0 zG8r9w-8fH0K`N0EMVsx!c@CoUjL5U)SJtU0NF}m$=xQoR1=%|2w%D(x=%6S_C9=(< z$~Bm5^KS)X$y-s7N@UyoPKcel&bB!m@^Nbw1*t?vB;~%zWJJPmBbZbaq!JnQZRa$Q z#i)mZrrR6EzM>$N$l#C{sE_nz_Tb>!C0VDUAeG2wyU+T7{F`((`-QIa)U8iZkV<4o zzMl|NbTY)b#APNG1*uFnYL2nAl6BVcCXcEheLzP(Eo$;S)Xb=ZJ8-fNYsBkc-!Hc+ zR@Ii$BjB7cL-PW=f@_c4;s0TD2=SBYZfrr`jqQi$)4K&H$M)-%iY@YwZNbL3!uyZA zLOepvYk7>3usj-RYkTOwhr8j_#m-ph-`SRkcZ_XW+udtf^o>#*IJCxhZS_5{a)l5%A_KkjT)7i%~mUTYL90U8O`iRih;>Ib`hY z3b`;!j>YN3hkkZ*7dPKLdG7b9V;}Jk zf++5I5}e)Omk0Y()1Rp;3dxSbMmEF>gFPY+RHjX)1%E**20|jkD@?DzWOzC6ADC1O zgiO{DPn!}t!`+HGTS?VGNMzWLdA?$uVLwcy?15UV>T}8JGj`dN&L}Y)PlztN-C;X7 z-`sY?2CsHBMk(35Jd=tplPoa2bT%qe#rTF7tw<@1=xjxo$)w9~ZU$MVHN35U;#GbT zHj;~mPrBMf7#rQ$C~UWy+IIbW_3W3JoDxfy+vwj;qV7#PXoBvvMPv%QcnXD~J(kp9 zI=d=P`OsQzw-4kq)Bplq@~-Gb$3+o5%#N81hFi99TB#Dp$Ya~QmW~1Av^3Z6AD67DbFbyK;J#9+9i6)jqYE0uF%*tZ zB6Ca)84u%eCo;#lwcj$SsQo1}JbpPc9{tjm@b(F`9w>Aw%uXU*?C6^n#N*4gDra|5 zUMNWE**CT`4tJuiYni^+!d73b0_{(z-C@f{zT{&lOjpt#-sx@`Cc`6h)n-y*x-yyA z5527G43FN&h#k(PWTA$kq$PNyR~+8vJTe)5 zZz#O!x_p}9-SeQnBpsRdP4KRl^j_T zx3G%V$_An$KMy3wuj|a2a*IjTM!arNlmllRrf*ga$1uUrF-+sWt;o$+43lkgI#heP z;2#VVg=>du51P?p_s53GMrz^Xr%|djlyrsAUf=R_N zNo0817A!pLWO(0SL}Ewgs2HXX$j7e@a$rlko{3tk8YWQ$MA)WqVX#zoUP1WiivNXi z;(x^r?j?8%r}EbexcSH83w4s4^z4i}KpC&7Rh^}2+u-74D1J_Q!YjG8S54atd0^<6 zyt4s{1;Ef@Lo9UMf#@g2*0?l z4e~63Iu*lD|gJ*i*eH@J=<@%U+G6EPA0`0?tE{YtYRih!yEqdU$pX*MmocP95Ib` zDrT}o=Gb#-CP;T8b8H_cd>svqG?RIJY5q!N*z2%EAYTv}_OxGT)~T4k5*fZB-+Ly* zS2sD%q+416$<^c(|5@Y(=y3C z85i%<6wE7@#`22aF%59xz=gASQAQjQuh0A-3Xq>aZ3_N$nyPwn+JQe-rOlEABF(2@ z(EGC;nGAa4bcD%In1X@xkykm6MQiP!`IUXaq-qM<&NFbu*}6E-pXodU7v7*tJ49`dQ$2N4ZSTPCO zweT_PG=D~RxP7B?(D{;dhP|Cuo5@db7{9JQ$7J}=<7xj`oaZMvj2{|Nnk{sOFI{=h zN`8vNs5gw#R-N?OBZ>l;{r_Kwk=Uzuk3`#2iOOM!)XL`U99)Y=k|`raLrR!0Cw7qZ z1nCnjYHw*QrRiTD5x%_0LMA1PG7`JAgr)TMfpprn9H-m0!!h7)VOy(i?c-xew&h@~ z+=tU8Hwnv097=znaL4bFN$UxG*qx3>x+58k)R>iYjAI#&u`3ai%UT31KA%~xC>=vA zP@KqcjJ4~@i1b2Y_V|9*6OxTcI>s7$`;>kRdO6_#97;-?g^~}=QEJ1Fr1*@j4f^l& z$4L++#*m;LwUQ%AWV5-?7M7-majFQwfrNgSl;uTo~cwbq$R2(iL@ZY|ws1zMCqq#`+#$j&vVkxncFU^OrQQgM<* zD$HCW2fT4u2A7+I$N|?TZ)Kf|2_})vrnG1Xv-TyjS^qfU{z#`HzDQ*2^6pp&(l2Ij zohQ4fnTV98mZFCoYS)At%7!S6v;F+XEZka!%awGt2uY0tL!j2ed-r=Lr5U8q+2T?C zV+MI?rXy1DbE&_&beXL4RZMIFsn|L%at~6Gn(U|Kd~_Hu!Bx~ zM4xNNxcLfmwE0eLYso4nV2)u#Zp~GbuFm_IIZ9;b+@GI;&Ur+3cKn-WnjjVCD3Jp$ zja~tB%ueKhQ@*K8D$G$Lo24Aa!c2|^L^g{%K+{?1RG6bgw$3?~k~5JgwR$^q8s74@Bl+QeloV zxyLfsAUB_*YwW0pROa}A-oI^g*$L=fEMbeKtKRtELT4?0GR^*tM}OOvu0+<~yl+xm zV)7?k{gEi`owwN7YaqJVj?}eSJtacrj5A!Ub8zfmM`2HE2|SoKx*5(Xu{cIZVNcTJ z9rvL0k08au&bXV`!;#5$(DITOEak$ zTbayp^t3@bRw!mARbwlWEp}0fU~TQTB}l$SYd^u&WbEw0xhA2@)`-qdDRPLLujp*a zG{;>VFbkwe!pB|k+{mP&vn8@c^wY~|zHS*&;ZvAYbhbpc%-JT5$(D}JpE0TEY>8~~ z_P{VETRgfu!Ahz+ngMAd2sHNnm8cUEh#azYp(>i z#`x0NmWio-lY6GLPLA!F(z#c1lDH}*RJ{LTIwS`f(U?kj{|N%N<%v7QQ{;MmS~ zSic4?eU2%$w({HsgAHx+OF( zVM>0Jv%Nu1j7wxP+?;H-p}Rr)<$b|qOZ^g)kM_{%=>|D<&^absdziL%!WDQhYYz=C z;lX6vCZ=Sw&J7K+!Lwydwu?3+UD{r-SzogPXPGp=nZ{*X>mOLB%i7ym@6<=d{AL=L zk>`pTX?`<} zOH}2t1{qc@E0g9o(^Sj7*s$Ab4*Rg$uIn_tnMSKn*x4WceJA<&3VCw=!=(9*Efq^< z9m=h(Sl}|QC)IT-p0pr&uqy8JQC#RfRHag}c}$w$*y3`$NgF0zem^srN%I?9T*eJR zI%ge~q0h0Cp|{rj#+J$*3gu<8a?4JIm^8n!rONb;3z@7k;T=|(be-lmwp8)Igz>QU zP@Q5Lljb+JRO!}vh(ShwgY_LR7E?KfU8sv+#flQj;*itFxkug6jwX6LVlY8~A z82gB)u9)99AM31`qe*in4`lwFEXjr{)OIP$WQ7_#P=4v>d3d0izpWJcB$CNWEqC2u z@>q%)S$@AWR`T^xDZg#eaVF37Gb5|4Sz49JDoY~qalN(YhnSI-CTB-BuIsEcV)H~M z|Egd{R(|oYA(NHwS2X75RcAA@%GjSbGFfG4@k^}J{B|RkX+g;4t+Q-gVZ+Cp=khMU zmBBKvmE5v`5?YaKn&o`8-cFa~jq`%=n ztMYZl0yrp=8(i(zy%Kgh^iz_$#5ibL;@9G!(hPT*Qyq&PI_@$s8%k+)kEA6|%YYy3 zo!h{dtrz70b!cWil9u?5j+2hObY8T6FK#7p&*WBu9%8I}W31g;C8cB-d63dw3eqXg zWF={d*p^O9TtMoQ@v6-mysBOUugd9HCW!J&E4?fRXHbLsPb=~S?q*oR^A8U$*M--B zmyU(_{6~ngh;V6T=#ZtUimycLCKUr9D$uL)Eg>qGfT*+)q819qG@mvQ)ha-^pt?+} zO4kZhA>mG#n+HTqe+XAPXbq$oY1QjPc!oiEgg|)HQM~9Vb>krFAO}vX{U3>%5N&so zSVRKWnbx)i&Lq4XL|AY9>PttdPZfNF>GbLhM7?OdTiYJOCk>*OFNF6N2(P;&Tp;RT zk}5Xh3ZJ*$@qh@O=c)D2Rj;jvPT}RH!t)av*_;nifH=kDv{Y zi0?=sa;7z0Nx}=5|6e4iE&kmh{Hj6(b%qGsM*`hs2^bI2go^OSO(25Fg*B$=66_2S zLOFJ`k|eNfXKC6RBJ?~7`djn0B&dDkDMuYw8)6Jqlbzim68q4vq5%L=?u?O?-bsjNC%(L3t~Y*h*^&zzKf(+WHQaEZ<|xc zeMx6Kkxr#$bBGpSLrkJ`oV*)iD)ru1hakTGl3wM6n3k8sS%`10k${z2X2wIbJq$5p zDZR=C(FOx+X+0KVHXZNV^-vj}K%xjl3w$Ikd^5eGH(JnSX^Cz~Yk~Qf))Fovt>q+J zH+WU@#PvFMN2wdUKHrxW-7pkp|B-G;YjqXJXw?CtH99Pb`m}iQ9seELGKR3(IF(rLc01wbQuBBc?U#n97N1wh&bxo?`aM# zp>bK-oqjzCvFvk*6^Rh5X)>%LGhVZrL>`D9^tT?QvL{)3(gKKHf07`qPb@_5MG&bp zE-C1KOY(gZZV>ZuMizRsmu1cm^om0Gocs_2ar%}4)PlbCAo`)#Ed8lf{V-OR`8gq4 z?IA(0+BJZP7z?rZIf+n+1(zTeJ%U(B(S8w4hD8_@%VKKF!deguhC!@dN5UOq-Axjm zA=Z;2Z>$Effm*fkHi^j)o9W1#=u|hsmMlL{fY?eVy=5f5f)lfB{tsds?7*@uJH*?g zB)XvQ3!?RD1` zFC=n71cyL0#h|1$q509Q6xyE|hyNxU|GNOhP4uMY23g&$ zk@V|+i2oWu{JWO~S=b$V<2D`s?luw{#QjK^&zsI+g?C$X^hT zszE&L3vqfZ33Q_6bX$m1r0Dbm67Uge&g6ZZFX7iSb4ZZ3bALme9Z#?5pl32?->?rX{Q)af-x5h!Uen5L=RTl*FK zYCt?)3GvKAqA0}k*7WKw&VQJuSe8cvhG`-ON40OX7WK$m3O-S70~Z6WTo>;?JuE(x zzNWs0_ucfzY6?8!`GInbM?9{KQ`GV2rjNn=f1I5KT$I_@$6-vst~Cisb7pW2zycZU z7F3i$Q0x{gSQ+f@cI__gT6OJSJ9dq=+qJvjbMC`==Iji2AK$;9&t7qd?{jWF=XcM! z_j$&zxZ5RAJxH55IQSJ?h7$=5%U-|0LYRocJ%^Fai2T=@#=)rNOXb2Pw8II8aiYuk+J+GU?#t}x5lbueht#WbMvkI zU{h>)c&(^DNKh6(sOXeMk@J0tF~Uj zC)xrDsXwq8upcLxQrjk4r1xKcVB#eJN$=CE(A6lUW?I3g%(`npiuvK=eZ);Af6=n( zm*kF{C8D-|@x{;uC^oH6LGxv$bvzyX4ELi|vg9OmstS2a(`Mnr^;9zVxrIdP+_XsF zyk~9`>6?9PtV*`kB-=f1tdgzAfftBh(>`(2p6fBWLbg))cE z7tKgEwU0RaZFPjKvtt#UeSRxu-&9G>tyiC2nWvCVpUqw^h}1kB?ci54{1lLij}KZo zoXCvnzZlrsx4J3~dc6U)*$0)?RjIKOmmtC?Xuk{7vlqTvBF)ElzHyaE?RQ~%CI);2 zG6(jMXZ)yLL~5Uk@+|%Ulg`5Tc^37YLSzml?Ea5Avg!SE z;T1%B`>h*DWbT<-q|fI*>Wue!JqcHfVkYF#^d`l(uZ;qm!kZLdQ|APcd8cXFEV;Pl zbgFI1IYZkJnQw*`=~poX&S0gfpg#9%BH4QhBz^0Xxyuo%t@oExmx$DU6RS_nWjJp| zJAJA>fmO89L)wo6__$x+pppeG2Z_{v6RWSo!ElxQuoKt%VpO!>#OiAt69S~-!Ae9v zAX4@Sg6MIv>h;@R>M4o&b5vS>5SQRy&F)iS^6zvdFD{SH@e%cghKPVfE)F*+3O z)P9Gn&)%yzheSJlw$Io^q`Q+=ZGByvUnJ7E!1{7TdT6fue2TCJ?E89L-m^DW6Jy`c<9r+Haioy*;@Ok-k@sL*7Pdr}i6XeIM1vEoNoL z-^x^mNbNVy`fPr4h)AE+^PyW5o7!)j_1&-mSH`7L%Y0XKqBw7m(WKe8dBnY8)%w*htIj?@lh-w>?avl1o4)@Xd`|83z55(;PD(r3a~Kk@>HYdMt}sMxz5gjw zlt}Hj+_rgLViznfzF-fvxfhs)$c&#gYdfjST(GIk+fftl5gD*Zi;T#Acs$t*|K70_ zk(o3j*NETypCB?~-N!2`Sz6O({2q7$N@-_Ahp}p|AX7~(GWZbXJ}emPjRsXV#< zAFG=1E>nJ1N%OcHDmh-uX0us?VMLVLHXBnHQ!K*YW;&=vhMzjMpUCjNoz&TvNpn0S zrjAl;8!;Sm*l9L18#QhIwyKY6bIlaUC@Hng+(nCw?BUvj$jCOsFg+*Q+4_VQ8NQ{@ zQ6j^aPg1i2(VFX_QlAsv(p^^SZRYc2GYB(d{~1Mw2jtePHhpWTGro2DU&>`&$HUi0 zjQgF)$h}Q;WHb7@mdz6Rc85Z3!K1+ba<)w$iPS!x8X0mHqGe?cMV7k+hLpaI{ae#! z|7>`;OR?GABZf%rgRPN$4MD2Sj*%0IY^!Y@M&#^ozs%v6y|@hiM~wTR>CN`nK%@NQ)|D+jp8alYYb1xYEw}ZPSR< zK8737=9)9vjA-0q9g*!?Y1#C>+&mlE^gWyMCz09*cq1;a_(ipO{MHL1+wIk~IkR$o z)#ik=xIrrVR{Q90ME0ArRGSVzy(Y51zoyOO_wuSX_kRf|Qv1+wM34p63CegzlxeHx z6Z-GbwE4K{Yt`oMnYfuC+NpiqIHJ*=IMrszFx4jvsGw={O0&DF&2zog6{Ge+<%p(( zVa1r%&d{Uk`gUNLrp><}|E1bIa}Rf7L_4*QI7ifMI!U!zF(D6;iLEtlPR+GZwK-;( zdY5S*j*eJ15ALwEcFssrwJcG|ELCPEu`4G~EyTQwphld_1yJ@q?;O zABT%Xj?}!fOPtPhOSO5p{beGx51vN`J2g{n8gIE0IZE?^i4rq*;a-QL4&yJXyFuDV z)+4u-tg6~vxoER$^PASFlz7~>qH6Qjw)Mv{Ww5mzgmzHNNZ<@ZR-6w-bb^Y zNhWWyS)%tGJ=xTLkf7!JB8$mp%Lij>5IJ6RFS1nbF~iAbDW`-AL~1{R5Y@+X2HA{? zD-%uRgjHJY^gOn3CD@#b5rF6JKC0L3ryUCp$eELDhIjK*duXE8@o`+8vpQ_+W>L+Zc_nWLc$R>LaswA7`Q!SzxkmZo{38=M*$TcxqHXHx6 zWheDeW2XXDiJWpzi}b4(rQX?o!I{)tjrQX@UITYQ-bBg0dG)xgYWBKtEt?GweYQ|- z8*Y65Gu3vg=3ZopN6TQ&ruq1rPwNq>{fJPLKL?H@n@tW+@*r~B2Cdqb7+<=-YIDd? zRm-#=E^1P#W_Q)5Z=L>RbNa7ZHhufe89+9DyJvDCQv0!_=7V$fBAd z>m0TU$hvs#u&9o4WbX{+&!xz)a%cSXyl z&xWcHuP8QsR((-(#@Y|4)h~3bI@pBO6nvvk_F|c+o%5e++4PF-ik@0TS6;1uQg=zt z_0S?cb1ymxB;?;fvt6pMC!5;eYGvA<1@{Eu?uOUfttoVv$Y+`-ay&m&t4X!>e0fY& zLG1_e!fTi8N~01URAvL&Tv$M>oqp#t!)jdVA-@yF)aXk45x$z^mRNxN6WducIY75+A*w(OZSiOoo- z0&}UIEkEv6W5G9){19BZbPiD+2y@^BvG*r6F%?Ar2H0KILcT};=$ow}3_jq4xQsVn+?Z^@xDJh_eMHjJ~dz+DpKL@Xx52jSn~ zC;iXXzHo3$gjwzgyIt_-rz_yKl&A6}7rzbHa0lZSH^@6#Jext`0jpVy`)MeA8$#g& z=jbio_>)%z6n^ed_(DivsT2uC#gp$J?JMF4cMC7?VMo*`JkM6?tSfTB_lEb#Y&e!(Ih zi-lNBhr$IyR!h)uEJi|64Q*6$g`(SS*oqaVmTHEvDgVkbx=-Ab!b*{4H$*w8d$3u(7@ynJrrS`p)j4m0=hFfbQ~15 zhe1&bAGD|m*GsO2ON^R1p{NJOlk4JbQx_dYofc5kzlH_=zXqGIr~}r5VL4+7E)M@} zbOe8b=3A;i!GHQf(Ga^c6f%028YxhOoWa5k3ezkoLhnKmhRq6tMXsgRUMzA$QL_;g zb-badjTfkkm*0mO#l2mj*aL==_juv2EX5BpL4m=2@wzX znS2ztMvkD09nA&BVQkC^T;3c<;uzNX1h(y1J-BkcWmrHHEOnPaQGYQOKJe-3g;1Qr ztDMH|fRotIqt-$(vI-Q#4?)qs0u*rx_|MExjC=#d2n!U$@K@SlKjY&X$!&3NbUKFx z_IMYZ44rW@w9E!Y>&;NK!ryC!qZQc_3Uf^;qVQ7DSo`SwP>fMdI|!%ubI_whaHrnH z8};XaHK3l#V~p}UH5qrSlPmuT#aJBEF<99qD4va{K`{T!CWReJtRfO`g#Kiik5%OkagR!Eh#r*Mg$i7$|1r^=7_@V%AptiFujwLz>4x z-9Ka9%l|SDVi)Dv!~dxJ0$fY=cF1Xh*{nSis$x+!1ca zTJz1LR!TY#Ypzku@Tq7V!n zHz_k*w?l3CZFcS}?O}Ju%v}$Wo{~ijootF1pU92jCF?UfTeUev*Z6+Sf*&^ki|p){ z`gncvnPUC1>dInMY3cDr!vKe52efp*d2t%f*8vPyzBGruh||6Ul3Q+u>opf0Q1Xd8 zRmZ*qVC2tb6xCrn0X3dpT~2t7nS)_o|3_=iWwphtZ##oa`p%*?0}7M%^jmYTw1Pt^ zUSr^!&T9+?^hk(Lh>a^70dJz~5!^1OXM9}mbcYkJai);Cp51FJLUVa;f=Y=wQR8#Z zO4ufx6X}hRr9&g-BGv(}ezGQ{5p+F8oAx%Wn}(;`CQFC3Z}(GXEG7!+guU#bN^iheHjAN|~{BfL1XdrYUU zYF|s*+0uGp)VXu0cxSWVD4>X(J&8q6Gz)$TdIdkgHBs7=gVn#R7y^yxBl`47R5y)V z&I*QJF8Cfm&>gtH&;1I%-O{1czb6EbPS}kWTBDYaN>+6pNhF&E5;8brKiuPrN1MTp zwb4 zGUAQ8#ti7%sZV^LbVvMOwZUsDxfbENf9#`aP9nZ+1t9w&=`^n|tTL3^N*@1V zWZB0hF@S?Kkb^_n`*XyNggqpAh=-Ahk)b zXImsqMJvPdUg=xOoy5q{(NDe+89J;RtRNLqawjpe-MNf!z@e8yo9#|qg7uz4N{+EG zGA5!IBytoorcu-)A|;1W7#Y<)8!WIDGOA{hCY20+fGc59Tgl-CMmoK?2(vxS zC;YP**T#aBY|S&$@Mqp*(5){--<~_=M5JV!oROBrRX{Lxm5{W|zwm`f$!0ergKIvA zb&3xB0=W3l%|p}3ACNwKr$2Bp-s)ZOQZB9ik5DC;)3+{kBReb03#;%~Ix_$_czYvW zY1eMmBWgdozV>@ZP@Ak*kzD)m5QZ9}$0eShX|8eGrAuHF7R2BY<3D{MQsVg;>GbQa zY(NTWbQ=6BiAd)8Sz|}qHn!}YZi}g}%AU$_UB!>5D|5_nVxxT^IlA*$<-}4J4CO>) znfqsk$J-hOq*Ubdy8~7#Y>pJcr1r`n@5krH~RKV5Hex z4bImnwKdmzr*^PJ2sjx(8=|H((p+#U*^~$YBMm1WSAapCfIVbb_ba44l-e>OV1xS5 zc2M<|3gF5~;QC^Im@*L4n5hB7AKT$=mVH%m(`waOFiBweKX&--rVCVj|6;Y-Ocxmb z%nq;iv9OAJH_=n&nK&@~g)Q#%ctiuh72k29V0XfqLNNS|Ep9k@7M3>-&qdE~d!3bV ziA=CDv&^mi67B~WH;{>6a#tgg$pka}NimGS#J+JSD_o!e@Hb%}q$B*D4F4&A(%lCs zLi-^7yLByV>fbXazEMKgu8m@P_rWks_p2Y9;agjvelU?_ko9)?&s4?Mng%77oA!)>OnY9b@(aI6tc| zjB76hUFNR9Oj(B~KNj`8+hGJ!w6D_Jg2Po(67}HckF7N}J~cxA!*LB7Ha;9J5*TP$ zB4bSco%Xf`@pA+(2?5OS@AHshCS#ItOP~D)%C$(E=(Cy3Dw)25F`J1aeCNVo;#oq6 z#38HK5y=!xV$*o>(^RneE0V?w-Fguz5ie%bu($aMAQf-5JLfARCE~@%zya>BfP8>9 z1LGf7B$A1jq_(D7*Q-H0J0NK?^=M9{M7NmD(5*ormcc-wB2wS1 zIk*vpWRfK#2mM@7C6i_e?}mNL)Jj4cGCaXxLaD8;ZY8qGgi1o{qnrm5sc$vpHjzxD zB&2h`6Z3!+KEXN9od_bCJV{8y$BuYcLkJCh`+l72042)AM#XZVZ(f-3FzZ2?_AS3e zHkmR>Yz9X!hK0CpAdTAa?sXteL3}OR=3}REF&Oc<636#X9@$y!P;T=~YX*`ozi1~jweO6ni z9h*7>IRHtg%|+bEro`zpQm;!f0|`gxAZzvMQ*D(@-{~_lvG4r9V3__yGO_zX)uzPh zGtzh}`W@JW3_Y}SfATD{DRKIYG^}3`3FJ5=4J$_DR+YHbB~G7_fgOv%gmM&1fWX!j zR3{;E`iwMHy5SG)j6<6yL*&n7Q{wa)8M=7eG9p9g9Boge#OX7#-QxsUIbu5C+X)SySPL`s}KBh5p)dlG3*EEY(l#OZT# z*8Y4dIdSbZA|+0rk%rqPAz*f#f<0vT+b@hriPLAKzJYk4M3DO0&F&H@ar&I>`(^>z z)c1Nakw}Tt=j4|)kVH{xtA9To_fN&Vl{kG)hJT0PGmUKYWipWxr_V@dr)w}OicfIP zSm8X85~t5d!?UVKpj%;)1bzE((_kVcPM?vM9YZZJ;{%bjY$!B=NQu*DWN^fIh#qzQ zkqmBJa$XuKbNVl=$GHBV;fvRQgfCv9J=!L8i|Y=HEFMpAcWt**X?*dp5_I!wthn*^ zZt&L@5s$Eyx*CC5I=mDS7?VktS+%YL4)P2NH6wKs;S$fy$nY}A&kiM^%5xAmo_pGiaOS=l{?QgU9K601 z@bQQnc1+DkIP>8Q|7?o~CjEK?@cW1d_WEf#;mnaU{HrZ)s_*$7+TI> z@b9*G=x_el2oFsyB?5iybmr2nct=NDJWi)80%KMdt+#uPZ{k%Z3-jv?&tQwkj9k5m z@R)(8hY`-4JHs>C;!*QHXC^#q@(u`V73<8yGdzneZl3c5X1P*%^Ms%K63*N_!=3E# zbyG8`_~M^B5YBu(!(D7~!{bYkZd9JhGu+pUZ71w`=I|Mw-4@q3PsVtBD)zj-$?o6D zI`jGr&uNDz|F&Jl6Z1AAoVk96=eETSnQ&V$t?~{hiV)8HKg09d;(Bwxp9t4S<~mL| z69I09IO!t!5Yb|5Xs?C-t0V6GkoS?&WK}cHm z+*Di4lz>&ah;5aFV@g2oLnjur!L3_~MHh@Vmji~UozSsv;@fA9D*OYnQ`Xy9omB5U z{?r9*QO>UCC91>J$#}gAtQQtP9~vu=QI9I~cck&f%@pjK&Z-X%_ zjn>;;9wrv=*!J|Dd?i~vCgG0{gvUhJtxnd{ck+R@c+~hl)d`R4cR=iOp!M{fd}UkQ zJo;@V!p(iYH6-ilJNc@1_`I`_eN@_R9{%WW!qa#1)opRZ-S`7A?vt_W41bnwN_hHC zKExK+H+uMuaD9#XBJ{?#r|;xL?eGD0AuXd=*LV3QPI)1ozLO8L!@qs`Tg6`{sFhFO z$>Y(ke?5k#ZxNAS#p~u2I~Zs^eJ78Pbp8u>d4FdR;EIoVaa|l!LR{kHnWt#kCKYnN zI#|UCmEHTFm+yZ6wR{g55Fck< z!b`+LIqiql=-32{Ay^c%dcNQeRlv{d60uRiZM!L34?nb7uxh}cFamuLbXl4AAYOMn zj*{jPselZ{!+;cO7vMM^_X!nJvRPoQY-+8>i$K>zE;}`BHy#rZB-6EjMK4y;KjVgG zU^5kK>+k3nLnMxwvWYDx z5*IeP2!nDJZ6?mmi+M;vGBuOb)_8MWU$7|_KgJvR8xYBaOhOv|a?1kbB(!O`5c8c# zreP8?aB|=dARi$aIDW}KBAI+iNK>3!6KH2ABuz1c|0I$rmxK&Gm(QEX&{IpR5XnSK zLdF$}-wHk(md6ebarr|A5y|vQLdGn_9V3N|nVY)|~oh7b2NJ$;d;eAeE9v?%Rd?_+kz*ZIY0N_ufxnJZE4J8D0&`OeB*f z38`=MHaC&_=$bJ^GDVV+Bd@+y$q~VDI9I7H6C(*}$T55;k%nv^XA;SDNJ8p63_VGt zKJKM2kxYUlq_gkwdq4`G;OsdFrBn2+M19zuZOnWO{E)*t>|0}|9P^2ks1GA8mx61- zjIWBM<;+)=Wa=ZSZE$CN7q2b}$>2_TI;GjvtSc4#L(Gq zN8!p=43os^Gt%kE%W6Q1E^|6K7`HwJDRKIY)ED~WA&|Y$rasSRi%O>N^ck5rD+lBt zbytu~oV+)RNQu*Dr19@ah+LG#kn!^MHAG6BJ|hjM_Z0?mBHA<@o06AEiPL9f;OMR> z7tmI4`hz=FBU0k@8EJ}IeGuB&5lK^%7~F0ZeJgSLj0`=#9BQkOp})Vu)w&=hPM?u+ zxxVZHXJ|m1aZX#+#frq~GcsoSPH;>L88hCqC)t!ZeMUyDtp_2QLPjl#u1uuF=`+&2 zsyHm{71F%0^*tgbPM?#zbBtEW&C{n4DRKIYG`v`ki?Zq1Lx!jBXNi(R+vZ7x8ElBBU0k@8EHB3ITy_MDo9$6 z;FEz$J0(tEEc3Vh&(Vhee?=P&V!Flk=^4{Du4#Ns+b&)q37xvO(>emx@gM67Jh)%m z!_X9=nZaEzz7e1NP@u8%EciubZ`x&hEnJv(f~oQ&fkpuj$h#{C0Rr+IE~}F1YYr3J z)TRmkpgCemo7(8WPee*IhmroC|G=`#aXpThf3YXEc*e3_B(x>2&T& zMIt4d!$^JEF9m>%M^ay^(ioLYUvn6lxVnqQ%v zU63^Oy)lDGiRLge^wy1HM222pQin*1<}fnOuwys);&Ny+uJofaL`pP=kukfX+YlME zB@)*VqMZ`WVPw?#0yl|_`lHVZA|;x`Nb{*~kwlu0tei%qL~}TK^8hAoMLW%xSM4WK zqB)E-W?c3f#uL^qFozt+;+jyjQ=&PH)c0_?L?q;{rV}aA98OLz|5PO>XV^ldL~|Hv zDEa|+@ihK86RGdHW*m_c&0(Z-`BTM#6h6V(zwSmNC7Q!XV?L)~ z=vK(BLf_`jiO;!+zLjVWBP|aez~+IjI)DzAyN7=xQldGG3{Kt*2^QTTB!dTR4oD;a zr$A#1zB@;8X)bG8{YsV44m1LCEp7nhK&(VSrm7g5iH85cQKkkDE`ZY)OWM>r-Bh8G zIDID5{)OhZ2b=5AroYSAb7WKE^cm@N)(tw_QFNKpABXWUiKwl_=`&LA+u<{iebA=f z?It8Y)5!FlJ|h#?#@B;kx`t%p(wS3ar%rjd~baW z#uMzqO!&APm(ilO5~t5deW$CiSW!rQyS5*RlsJ7(PWW_FB}YH0Po%`@Gt%(W>8wN= za!tnoS=3hI^ckt|zO5RO`cAW#6De`}jC3}%1|OvO1m{xORG%Pm`iwN@bTC40jd*CW(YiiAFKf=|MLyAcr97bf?S%A|)EdNPW$Eu(ho8tlsqdBb7{FqZpZZ zW&2++nBtMU#6OGQBvPVLj5L0o0_x_t1Z!*jl2-(M*tZgm;$)uV4KguN-#x9i|5IRcXeERe%9Cy``|{7GhW|id;&v`G zkiTFh0*bUSs$}}vC??LSt)Jupr!VpzsV#a{CQ{<`8R=ia4;Gb<8_}kJnXQY6lsJ7x zI$iG?4`d3GPFKoQBvRt^8L6-K5uJWtB=tW(%Ak_zJAFnb9vgTBhUo^9iTj3${07SiQiPLAKG2eU$!_y9WJ3XF5q{QhnQa|WDF0JNZ-|FLw;0CK$T1lKf zCs!MxwrS-2b_OCPPM?v6(sxS{X(--FT_8!EJ|p$x%VBCoscrxG-DFeZ^cm?~tsMxe z;uD+$4~X10&IF0mXQa{d8M^IH*h9ub{x`^`#OX8A@*(>InDHS~VW-I_$ejNF{)~mke?>Eq~8Sr3pyIKZvKcSqMF);7lqQKF1dKue%*o#&Hwk{?%$XBb@04 z!{^%KPLDJF47ku)r(0KB6V60~;qz^Aecefa0NxL+>qG0}9;9eHJO0b?g|>L&jpcvC zfZs$s@%*OugfsbI_+ne!`0b+^tS?5~_-R1_!dc+J@TGS6PyHc+R5likE`Nwy83&FD z3B&Q+;lBnh@Gmp!?K89$uFgc5br~w4^*GbGLxeMNVfZ>*Jm&Ghy@bbH?JBbQ*mX={ z7{0+4kNS4xFyT=zyPYEIOlBCq$rd+%^@7EyQhD>U=FbRcTEp-yws>^5Ye9rZJ4DYT zoCyxYx7p&xV$T}Dxc`b>XDk$Oi*Tko4Bugk>qq)Sq^sciA^kQJ&ZLLoJMHkDhP*1i z!K5Rc=?}wq+v0}uAKDUbFg6moJRCSCLJZ$yi|c=_0Z0GRDnEUR2%8aSO2qJewzzZM zP*{8^-p1Kf=Mz<)$q~a3*y6@A;z$%E(V^%4f}IFwn#Ax!ws?wTUkC(rH4wLaStvH? zu<}fp7=FYS51vvPLQI`lUk8t0ggg7_>$o~G{Fs9O*U79Se?&rOh*h`C?llE7D!=aeT;Z&_@FF=r!PBaY;pgfVVD!% zfVjW!u`PtBFFWUKai^QDssV06-09E6qJ*a}I~QzmeaMV?fF~fXH+EAUfBLd>$revM zU1%zdZaF6w^_#L^5*kF=gE5dvSarGDf8!#ja2;Jpu&Ww zFFSTGkTU+%7&fxgUP_Spm})(J*?DH$c74jUXN2o}`Tb1R)0Z8)7f9*X?w_pUGdH~^ zJbl@DWozA_AH17zgIndigr_e%cJH6kPb~uht6_&Z$H)O_Pv81>fP45Hty*sIODdFNslMawZ{M5~lG8(~!rI7_93K7YKQ$oi5G7e@!hCs9#*Ks}`j}bk@G*d#xmaH8^ zWNg0T7-k8Q$)$ueS3g{zNOOrfjfiAQDIue)E!{z6v~Lg9CKE{+*{oDgl`Ma2B-v#8 zC?SnuP7u&JF2Ei#8s_&Ul1Zb4)bIC*CQ`rfi#q$5D$2;$QPWlOLg$WTlL?}PG?*Xz z5oxIP_W~lB7D`C{nJakuPP9|Mxy4~3nG8xuXUk-(AL=mdJCRHQC8V+0iU8+6F&)=QljS-nDI4{Ov#shCXr0{BxLX|-qkh?FRnmDEkF^xDh8A>%^;brbbPFdrfM_NRU7pwK8`k6TIjS|`I!@HV^9rlr=x zFd_?H)gt|Kg~mfWmm%q&dHGNxB`V2m8p{pB`*#+S#?sw#5GhefMh3oo4GQT9cLk{A zgDGMifipp(l8o$>xW5my(|}~Bt`{znO+UR>JCF8=%Mbc0qU57pTrk)YeJjydX4CPH z@El+h_A#N(M{eyTQlhVnG%dw7Atbfnk7?d{Oo|Gd5`E=lHgiUm%y45gkrI7nWL#{C zZ%|wGat?7(;kf%LY)bT%k+GQv!kSPaW4^kyB2uESj5HTr>`0_JZ{#K-CHl(9=)yyX z5*eMRoI2wr`pU@?PZz7CM=PN_IEN(q%1C3$Nsx0(J4EU;KxjIW5`AT)eol)oMCzxV z+(zw`=qo2ruJu;QBe{AKDbZI(8bXdiJC)iRs*c7ChZs+ZzA{q3=EFWB^-DM6&axmS z`pQV>sB5a%bZ!}2o=AzlGSV2ZW(`a{n1SFE%8$S_p0Fv=S4O7fC=BZe9mF)Cug>{# zXIYREePv|u!j#NF!aM?fotvFzpG;rbK3gW}o;*O^{IRd3%-^GThqCw@<~}j~%eJUr zuSr~tcmhcl=h>wl0z$fP29p*r=@4Li{RZ18;zVn-XU&mzR(3g9LsJLtISv8}i4PFa z_Ag2k&IFX<$}R`P{bzQK0P7IFgQstDy#?V+MH#N_axmOE%SPDUaunU{^v{!agfl5+ zxU$Q^aD7Z$P$%WUqQ0Sr8g-_dj3W}gC2SpadzajVsV zWBSE#Wut)MrqvsMgPwKLM2z9eMghn3e1Zr{!9%}1^Cz4s8N*K~DH zV)Yu=el8|CE1~tc`azEgXL82yleTzl&N*)gk9q!49XO_G3_op)o4tF?A>5p4jT+`M zVPp7NTRgh>7tnvD^3fS*j-tvlbz}H>JKUHEfnXY*C*T?3OyU@R(H1wBUB4Pe9C9Eq zY2C-(BAn?Q!~e9!_47Z%-KOCB(Z@Fv&cu%4m+kO#t#YaO??n$0&J>T~S8Z`aP5d@G z#k!#qZuBdzlF1&!|F*^T8;hF>*U#6fJjdij~BT%P6z@z-sjYnqFePWrNRH zK*e>#@yfw_l1_O_h-THwRq>o8TKkPOmLLN+gq03F#a- z$^hgjB%Le0#l^j-EmKknsh{2!f(hktj(+MKT!1QM`avn{p`_3guy)WrK$}Uy4gV&R z>8He|f92P~U~?6c{y{C#2MU`^IwhoWz?~yN&PCFgkRQ`-f@G>GA%m)JjsX&qunrDE zfm^E)$plkEn(oYlnV@{*p6S*lbv&6`$;ifi;m$}S>rdWJHknXK$hZmbp@%Y5!P>@+ zZiX^1|M#0@g>aV`+O(atx32AUT zRD(!EmiL*7WCA23d+x^czo@ODhtmNfnf6FX{oRAGUQkH=9jE(5GTD)k&QsRp15)t` zlMCV&l9&lhaU`U%*RsMu>O|l6*nN&jCN>f>C8Y9TnDKRxOsU=sk2VUMOlKry@P!hG zfgFis@VQnfuSjyO_!ntSY1%veyyY-1_ysSOO?O#!hRo@w$&OWFvgN!N3(O$FWO-Cn zrZ7|o@j33GSW}u^qO6w-=;ecfkx=`9ZdsOLYs{!S>8l4@+@{{KfG5ui$t+Nh8-pc&6pe1>dlr!Nyi4y@KF%aw=5)-kfy6g;ef94O~0l;7w;faqOZ)R zspiv;DjD+kB_bvI%E-7;K7FBwDr0Tqh7G}_lBlgjUl|!&p*cp6f{gW_U7JXWzB1BW z@68D!&9zJ7A$4I>qOXjMZhGk(k zw+uyXCHl(9l=8WX!HkDq0(~_O^d?fGuZ#>n=?t-jZUmCS$Fk8~Cev4&lx9(&ZbC}4 z4g4)M68?5@NcY?23iFg^jUL_O;bDPV5DRt{-yzR5_+RcoiT#*>#;0tBE*gSn0%8Z8 z$A*f)%_^YQ(6LL5EuQ+ID69^%zC=9ra$*6(nTj&Jtu5~VXNB=#eLLd*yLXByjMkZy zGCa-}cdi)R0&vmS&VF0esFUd_!#mjG`pLtt0iJ}`^_B{lm=tYKH?P^HlP#W9rOP20 z>3fJLdA|FLaHg!xdKX*VKVTl_HCG_+Uv>-RBo*sS>KNY37B}`PwjOX;vx47sRuvBiTb%$NYU2%dvnTNNjqi5|lfY;n_#2VhzGihI+^jXs1kEn)aCc6i-YJypE? z+((2nL1B2ZEgm;Ewf*i*vwhdZb@EYlo@kF&)MnREQE;vaK9A?r+d7(T%c z?-m4kBBk<%*h)hPXX?Z7Nw&EDR#^xP6$25>U@Gf-B-c4F-cBTwJPBE@_z(~aN4NtV9Ll-YElDI(I|=FBX2f0~ z$06w)?dVP<6FLd0KUmTT6-ocNvOB4^OxYx)ai=%bG|fA0OAuiZ+GL_8A%l`qLxKE=HiP<|J4`m2o=M1~ zH`l|WKa-I0qc;kO;0A3fv?3&wpxqub< zAYG({!2wHlU>Mvr56l$pROh2rlqeP>^}8P~1X6Uh{;s$18|M9^ zOqe7UJtR>{Yi%8jYaXlxask>jE*VmVNQp`^GN?z*nm~R)GAM3tV-Rtjfgb&y4sOQiM}#2dWaePfl}LOORisul;|rbXWxCGlGBG_ zqFvNhqOXiJTH0g$wG4a6m^2EvTm&i6S4J9gEU!eQ!TA^_4+SaFS58)X1rd*8)9`cu zU?L^@%E^W8+N$K-t_O&e=qo2(#=?p+&1M#SN=>P)L|+-{yzL@J2#VL-oI0CGiM}$@ zI5!Gc&Y48t&RX`BNQu5OGNqG$KbZ0LkxXefCMS^+ePv|un~5$!g3kqgeHn|}A2=#9 zeYHt-!tzc8qAlQWa1d#K(oJ>d<*CkkJ=(^^_vnqvm;N()_GdTOzWE*cW(1lDm>*jc z>S-J6S%cNC`TOIgSu@vVy=?*c6ek)|ztvnpIFnC?|744oE9@2z)?t+g8k*U0JK;=2 z8D7X1caCZg?%GjwvUAgsD8ZugOh_4C#1_}@T?ngTM`!@Vf9oTss<>568D7j5Pa5!Q zA`CHvb0Dc5P3H+`lFD#5Tim~GH;Bz0*C6iSqAhBis65j+hI`xM#*J6O`KKNCp4+@W z;Y{cl?rVz&#aE~YxQNt)qDD9p&eV?KC2aAde}~Tl;ktvBKYG@E9^p*57+%H}*ZB?v z|B<06;<{qH?h($^i{W}(JSNph_}mYxRD9fhJhLk%EfY9~SFy#7Lz+gw ztXqm*XY3U>h;XKI46kO38}c^5<*&dE4jUW@XHv)TU^_f$8)R+L@RAqs2?_V|1Gir;Y|4$UegwL{;flAz!hJ&?*3B3nfx)l zwk>X4;DpC%GK!ub|70fNOamES*A`Fd9t0Ah1D63p*y=1wsOUN-gbc5*;P^}Dtr=E~ z$T5w13o@*52WSafI$yCK)4NYxZ!c5-o-y&N(s4y)RcNSIp=(2^M_1)d!s2*nNalVq z(3Wx7mJr7d(u17#fo=X39qf4i7ovq41`%6g;?ji1%q-yGGV6J8n4Il zZ{>os#(~X!SmSa*wOxp0nk*rmdpkf(qI~O>bB}~5BAFaZNd0AhI8LMVto~9x+&U4p z{eevEss|v0x@TD1q^0?Sh-4xxvFV>!wkp`%fTVxl;cDM9{gsf$3#L;*LKFpF?5rzp zwTRj>>6MT{b0<~?@(YqdGqS@_DkM`~33>EmS(rna9wK@4T|SXBz?r}VS3>GS&cZ4` zg9nnjYA;3njwI7s2^m(#a}O{ewIH)4-oB#RGMSZ-rg@Xw5owyWTeZm)Rzk*|$k+>N z8;UmLjv9}VO(w1qGPeJ8d?rGWu?Z6^5Xp2^LYk*OH4$l^xOohbOj0Fe^xU(55E(uD ztU8{ONRi!T(Z7Yk9j4SadYku0vdM&0V$-;IJ}f(xgUiNwAN+`98Y&?T{yo|dX(%(` zFCv+I%E(srSEyuo)2&1@<&=?oOMF$yUC%{+4QC${O&RG`6>xMkK0AVI0%&fd6bFOf_oC1lDdvp3B6#z>|NZ-gsa zVUr1@gbc}^1(p>$IB@`Sb_%9xPol#7 zq=IxM{J$)eEU*Wkd{rt^V9S83L}q-bMfz;PXM+{eXT@09B2a8*{H#T~^=NgNNVnM5 zuZhegiJryv#3I7oxi)xm#irZWVLFv8t!2|aqob!ve)Kk~WKAv7t(|ebO13yZQYG7K zk`)_VRmqZ*JXLbMCOOv4StWmIEc_IXXQqRiWQ##pRI+{plWJ3QRNV7jLWLAl(miXu zP!F`3*{Er={fobdbc?+GfNW;&qD8vzzuT2a_ie*NiEMpBi*zgWyd05kImf>yGJ32Q z>7LElUnRc}3?Z^j2`$ofNpZD@TxV{>NJiXctw(E-9&H=x$fig0v$(q|$mr`@r2Fd2 zmxy#6=t80?uH~+1YgI&w3hK777PcF4b8CEsb0 zZV_496X{mF@=7AxwbCNpvuB01e%icsT;-*bd$mZn3so^35i{QHSoky|`{Q>(401rn zE%BOei+%!qO(UmO4^+uLn&kWYpjc_-`Y{0YfbV_Y7>?GtMVe1RMu4g(L?UWdZmeU_dfiV$Rtgl;5IGOWFp;0I;dKf^is37 zWk+sQNzdM5jfNg<=m#y*qw0xFM0%9FotBF8k+B>NuxMJ2l&`Kpp%wMh4^I$qTve<{W z-H4p5ITKual~&h7t{oPserR&~@3Uj;TQ}DpR&SC&5Ntkf?+Ev4ODjl{ORhBy=E~(>7?@{1gQTG}3Iocp&0%^a;~{)gs+P#F;~7 z_LZOX580fdIfvZthGtc5UT!vy$eD{ZZ59dhCDJ|DygEeAnx{#6y;D84d!hTP+Rt97 zMHYQ=#Gh;yeJ~$3-IVd1vssIDZEXZl>08$(1=YLk*WH?A)xIrN(*JKfg(YUfT;+A2 z|8Zw~lq#>T7(HBPs(0DED_S<)6E5x|o9>;eMIO2MbEqSs3pQ7SkLlw1;g!LobDF= zNoTV@rZujDJH}|KQF%`J$_wWXUvpfdF?OvSjo+sKuxZBH~>cFvN z2E*-MobI|hSnYY&G4s^D2A0uaxZR7>Jv!$-O4dDUbx&3+Z%u13-0l>N`^M3E33s1d zV8(UJvdk6TF^|sb52gB`NobH}< zB%g|h?-t1eVcnYQV7T3j)7@IvdPlfhP`%e=o#i_iZujDJ_k8cisrc)Mc#uSR+IH5Y z2gB1|oGx6s$fLSlX{kDDw_OqY31^uPhNr#ioZ&0#jZm$R7*tTjtwFC9@8)1D6K>z~ zl~M6)2SyOiav%)X+2NO_jaTt4$ri#{B81@??eO`z>!|pk)vBvx*${?jw!@#qep2yc zqvn$JMC($A;aP2Q_kf93cTu3iRKi(agyG8Txp_D#&1_vxEu5^V#AaIY(p6p*ZRn5uH`snl)i~0Xuxpl+%QJ%-fDfc*GsY zQYQ>AXooNDq26&GLlQ;i1qY7hPZ(a<4j;5>w`#rhEE8EDV-1}dUep$M-&+q4PAP5w zb?8rovrG!ZUG4DA6_2R+gmxPUXXzA%yW8R0@8P)y#rpJ#D$a5$3@>hnzniCe8~5{5 zN|SY#SYf!AE$+Gfa$Bnsby@CvrL+qcD?2zR^N-$*!1#W1{*E$&`BW+dV6zIPfE&hjw~546SI z{`p#%aJLf`)%%?#Wf)%B7I*h}6iv9hZt57a&N4F$uWE;vn$khVT^>CnoTXMG+#{UjXc!)1i@V0f;r6f?IM+~pDZ*KzhT)-hxG5VR*Hdt>PY(%a*&2q2 z+2S6?8`}u?$hB3yVOh$C;k9gW_g~K8PMpH3AqSoX&i<(vc-!nX&Fp- zvEf-S5zcZs3~yqKyZ_R50O9T}AN3@hC3G0x%nskaWQB@Py@)5fMbERW4#Okt@L?_8 zRJ`2@HI8Gc9fr5C#ohKTcuBb1!d=(NI?L}cJkkzdm|cw~+>#TU5zdl43~#OA)=W=k zFpY;4ZbGJ~BmAwA=_z9O82!J~J?WprPy%mdnJc1*fFm1f!`T+R+Z+P+wH7XNEUanR zIZ11!yDD!lVE8(HjwNtd64QSU>s&3ZvCW9H!;%bF-d@1)a;Cfx1~~3Tyj;aP;yy>5 zotR{}^7aCTJNH=*i&4i3h&y-tEJ7f}*|AB6D{n7gxc;i|T)=TP?V!IfNvtXaZrvSV zxbnIIh9{*?1YGwN@uYblcTwBf0ZN9?730lt|6iIf1nW5D4*v14)t+akC>cKA7B^lB zo(K41#EqvL;aPgo^Xw=k!x!4(K?~db0r+RcgQl!bC7hk7WcXrR{OG4gL2#(@0pdsB zj1${>*mdksCBv86;=0f=U_FC7;<~DXgt8*ePF6B}xh)>1_sIibBI03w9wO{VoE@)Z z_)1&cwBRK;cIR2*u?KG z36Jgb91JT1$4*-^e4Q9_3xOsf@yo9qOmki%vi$~8tQi$;ASs8?r!nU(>mki%z zhwmysR>ilNtC4kf_>$pUY;oh#{XJpUt;DV~&feIGaCQQd;oEF+Lxq6ugd0k&o$k{PGvHD zk1g(e;Q=hf(|p~jKVZi~nKtZbCd2pH;>K+wVMXDXRrLIZy!i=d=QA08z!py#Q|~$4 zGK~;V89HGt;p~tm!w=cwAvxY&1sqd84k1~G??}V>Nlk_yQE){XvjbxPJVAp49?%-$ zxwD1dD?rteJ-cU3dj;$XivV&o)+FFJC)MjRz5Cbph?QJd|z)48`xsI?1Ro-EvKbcFM zp1}KD@>~E*PbJOiR~N?WAFOTCgodhbX0j%+>EHWr?Avun`ghwzqdbTynuIj|F|QPm zi;y%P`t+LG$;3=T22D6J9mr2e1`R*_fJmle67uLv7jUGRFn8{7^uaX|AYl(N36qez z$_a2vBm*ur9dzYus~()GmxK)SPAUq_KqSM8yxL5)Wx^#PO;f#Hi8PHbRhmeqSrRht zUh?EF&_u>vXXrj6KAZNO zl1iy_h)K@BNNmj*YdGZuR?*8ti+|*qxk7f~R3qh?IZy~LQ?@3%`=H$;R+$K?P#?NV zHxa8HQpT;K_#~aj)`}=!re_7SP1SvaI*&v!+vJWId3SFMJtfgJ7D)u^?v0|+3HWv% z<5q>#e%5W+Z(g8jU(n{dA>X?bDbX}$vs{nEun=@SfMmI@PD6>5Xc{A(55F`5IT=ak zL;YqDDbX}W8VVMJ09$$D-cX>`HI=l+YkYVZnRKmJM;MeBXfx^0$GGJpdPt&ajPzd; z2rCfBO-TAL8g_+9iKcNfWARQvf(HfC@!lXJC7Q;_pmPV|B&#FL2GF!quM>!rXc{BK znl}JaHwekF@T#~>6YZ4f3nNWO+WtzU=}?D1h?M9HBim=J(H{J67}{*F8;trQY)bTn zk+Ew%;8sz{*wx;vh?M9HBh81K>xeWT_&AzKiM}v0`nU^>iefYRh(E5vMQtVe!pWzG zIV$-uUj`y2`oc)#Mcqjl&o$UX#`A@T5h>9ZMjE2Kg8x%ULsY|;L`w99lOrG?xRku)K%_)p z7-@X&n*m4{(YH^ImV@F=CPUp^%{bJ;3H9{Ed)+yv5Q;nZVq(hCudmF>zrLsKf}oRJKuxsZU@KnRp_CpXB&XC&7RJc|n@K}zI;*(}%L%rUSDO97CJ=!~k9 zkjMoioeyk9Egh+(L)lsV5ISjk0+2zku<(4n}bM+Tre`|_$kOmIetYl zXnziMCP?Ihkzq}yb$OR+I z2d)6`w6eHW`?%M#IcP+Hp zK1U}Z#yArsBE`tqJ;kpO8T;Fvxl~(;NHNlU;pkH$&1YTi5h)QVMn+#L2D4qMZS+OI zzC=nyij!Zn!eN0l^5fpUL`p=8k;Vs=LSQDOVhq-wqui)HLviAXUrq}Dg^nz|`ShM4X~rP=(SVw%}Ieuqj3XP9kzJ=Jw< z$25VtW-kMB0#+h0>p$w$_<@*aTwWlviq-SFkyY1Fmr3M;>3X@O87IN!L9|&e{t~`= zNjO7^Trkr4e4ArHiY{|L7QBQ=iCi$!;9eR-?2%~GP^57?l}ukQ7@71W!%Y|_SRaC1 z+!`oWAvnMixnQLK#?`n9wHZnOWg8}vO^IA^GUseanJBM5_s>!}l}L$PFf!=IyJtXt zN1H)^F3U`$L@pQ^*5=G(Xs1{ug|%u~hDeEAFw%7TVjdz*#~U>yQX&_OY@e+?q%Shm z#M-vcQpb}>iCi!;cFQJMSt(@f`iA(xl9)phxnQLE)a}7UnvYGoNTftA7#V#&6GkSY zw$UfM)g@9Q7o2=Q_ohm|9Ce3CiCi$!c%yAL7|*rXL&m=fOdwJs7mPG?alzHIAPuq6 zs$-JK1t%xn!k9)ON3CB$HYIYw$(O@nag;_riV!gk-YXKh;ADe@`zl!*pJ!FZQz93P zbg7&Ll30pQaMAaK%)dfPsA)VjGZ7Q8pUjuTUZB1*YOCF<>vMYAyT4IjC8)c zrvs4SDIlb|QxCnNuqn|fMjDKl=K(neNrS=kQ6>M6v-1Fp>T3G?QL(ijf2Im01ph@-LDD-0~?zO7vJo>88Fw!ukyj01X8RCZs9N95-HiE7#UEw z6Qod1V(ASi*i-W<*`pXauAX1`-o@{PM1i%zV*j-x5_t8T9(eXAd`cF5Mpl?P(Hng3N1qiYjl#NzASH`FBXeDwHy=pRWw|cp4<%Bv z=rhvl+p!{$W6-D7w0gfrX1?e%a)9fR)-X)ZknI1y$Z8@bi#{U*_7qzWJ~ts5@avZz zL`oKYPL>7JWtrznOFjqIE(t_^G)Ak&;E9k+oC&p)zEE+6OH9 z-Ba*TN%)j3`iu;_7F(0Zu=5>m5-C~q8QH1Sm5#6&f_Q*Mzu1>Oh?Fe)jO=ju-~u8$ z?CbK7NXeql$f(PYVE(8+qt2HpMWkfWXJquf$LT~y-*~5OG?GQ1kuh#R6(KUlr9%nw zDOvOx>Hl=%9heELv4{L0yu@2$VpJrHJ|nGz4AqIW_C8dPNXeql$%U>tG;;1;ZCjKq z`i%58|1~M=9Z9tCISaJ}3D_QgzIpojx&_f1T|6tKSk*xWYEc!y+*ZQB2OgtRZ3;U5t z^Z4|X&p0mWp}uoVY;ZNxH&`J0X&8OYp1H?}tRs`$!tqRhS0bD?s@Lpt?>zquJ8a$O zj#GeHse@MK;kGv8*|F1dPl!{?A&WW!)r|JFd{Gw4&Y%`mdUA^c6nPKS`J zux~b=84910ZHAFcE`HVcqFa0dgJvS;Zt&^&&UD( zLwCZUyg+h*Wngh4CEE-m1FrmoTR7yqFpV!84-qNZW;j_p2yvo&8`Mk&!UhN1#k7Ojh?Hy>oOBuNPGs0C ze{DmRY!{5|RH1MoSVkM5&rX(;-N>h8yI^F8n~R}eRkFjyY-@;=Y!{4-diOUx>M9xa zJnaOLlI?<#F*)3h5*g!kVkeQ3?Shlu?;dDm`6u5IDcLR<8IbS7U6={*bi+)@IldW@ zlI?<#)|s1piL_2hnMb5#yWr%m%RU;pdBER9O129|`j@S_he-bt**6g>*)AAq9W>U7 zNNexyjfj+N7mRf4a2=jabxm-KQl1kj*)A9v;C%zPD7YOBeOo^843U!Uf{{a>y1}|< z0O<<*@{&B2)}eX<)ubqS0(1QfU6urg5T9}85q7K&oIN-}6Izb_(XePMWZQQiqJ@)ZXs4?S zDt$ppHX23-jGz8BkkD3m1jhEgK%``&VPwd*oR~$4Y%yeG3tX6lPsv8Z$lA~P4gwNn z2W&L|Ed7f}$wtG;r0sZGqLPUVN)jpAXc(E0yZ!_il?e2ikgdxSA|)FQBjXN_y-8%; zo~5`Ii*`yj8b(H+|G5H@(Px_BGAc;PM#IRMOCj@#j5$~N4Uv+KhLN#fOz1^qZ0@p{ z!wa91jfRl{^}MdZOxS=u6i}xbJk%;F*=QJPJ(gITNbAv=BZ-u3G@N|d38b9r)B1d} zHWMTp4I}*{(?C9|q<^c`dB~?^qhX|V%d&5Yv~HYZBvP``Fw*V#4}*bJ*M#4np>Pm= zE7@om8MzU!lN!v}w~_0=izZUC(J*qT@yJskL6|AZP>-bViIi+Kj12ty$R>!k8ms*)G_wUg6dEg~8`xY-Grquh~etbsCwUNXd4=$d*+%K^vW$BH6O?Xl;3sY!{3i5FIxbhUq1e16nsIPd+8v z1tTjM9-V_|w;>tu?kyHCL=Q=}3q}Tve2Dihe-`B6-e-xFY!{3SS!`M%I2bFcruV=(G0iAF&)DqLpkHob2*XagB@}g(X5kO129|CK!BRk#KH^K0CcB zhbI?;lx!D_jN2Ld4Uuu1XJS$>NXd4=$mo+R;TnMIGy2db%q|2e*)A9vb9yg4WhxnS z#22%FK}xm@M#g5}1v5bb zt#wb7HY$?sf|JjJu509jF<3Vc(Mq-pM*6o%E>EO?qc2>Elx!D_w5~Z|A=0{hi8qmw z?SheRM~jXJQe6`c;CpY?XeHYPBO}*FqRjEZ9*SJy{+LL~cEQM@0BHU!Y(&kA&TV9Ajj#B|eUKgOzV1)V&)Xr`eRaSiY#r>i{M~1g?{V(VlNbpu zPb0ZI`yr7iASu~x*aq!=Km9%Qcr7HoZ(kP4i6F0uxbootFXB{R8_Y<*S9^ki1c?Z5 zD|_*%A4O}hzdlw%T6)#}1IX`?wDjydjY#LMS@~>owO$6ab1{-lE+-r((xr4(DF#XNs!mOb%w9Ar zGAgQ&Gqe+)1x1N!(^ISzI4aqvWkvd~|L`yP?1!Z9y4DBCXO6{Lk^W9!U=J-v()yuh zJ0f#d%!;g7YQ$zBk0DvH#NI(fN)!v5LoM45KMsA{63Ld4I|>mg(H)E&Fm4q@Yj}&~ zfKl~35-HIgjPz=`5*|-=#(OonIf}?HR%F#quZO#F<&Qz1UJsl^@c>7qU`AGC^qiHT z=bW1(89i%_NTrZ0@^coX^TRoP~eY@W;Jp}v)!d9lIu@Z*U0j(vubCZoEvZsiFK$>_Gfr^M)Z(G(=ng5 zN1ab5vi3+b9@z;}qUji!5Yl`*3}q9HHlcF-CL$%8j*)RMPb3i;_bf^14jdJUrekD` zOXv?mRkdhio&Uz0TcVv3O~=WgEwCo2?TiiF{xgvhO~=T9E^ol6 z?dojj(tU}PXgWq(A1}h<0r-U#?BO0!n86;BXgWsv7rTxtm>~VX+~0JjLzy=8QSO+*ZZXqf&ok_%B~lcTH?o0+n1?WmN$4`S_Asm336Ugv1i&xYGmdrmXUr>mZKIG zO3UxzZz5|&pAr?zNK3bz&~WvuZ9DN(VEjB0do4YYGEl2LWjyvV0S#WK?O=XSUU^hMHl*@$ICN>nT(t#910hn68} zeUZHokrEZl$cjZ`>H+yXk`)US%1)$2#WJ#G^FC1EbZ&uU%f@vo5-Cx!j2zJa5L6)y zZ;%|2me7YtiHc>USNLG4)~Pezt8N*wHsYvAR4gZNFMJ847*DV3RfUR0QlerR89n7; zAhfd?MjJiJAoc(xB`VfVIzJpY8vMDo1JL>5z^+2YA}LX^c2ZGVTw4h}1X%+7i8xe? zdPt&T8Cjvwf7PI!;#sMX-;9@r#A+f@v5X9uJ8=(?Fn6IcIdiP2yJ55v70bwwKbjPS zXmcPLa^z+{@+ncVj9kCp{|ivDpzuJ&{(2KOD>Yh)ie+RS!=;Acb2O5*-)|{Sq(sFs zvi9IVzt_nAq3ej0s8~iOct>7=p=^vk6UwAECQ_ne85wtbL>nUGF89}ZNTOmH8U1hJ zl0-&7D6OsW5*5qHm{;+?5*hQ@If0^;s8~kE`ZU4{tY~L!`K9}al&Dxn26VWDx)2UO zU=Fpcu$4%Oie;qrPU)LOS}$JpCsLwf8R?&IG^`}5Pk+}yQM<)?D^anW9MCjHBa`bs zCZ7@&%Sh{~@u;*!JFR=C9VSwuVi_5^Zwsto24C!<$X!d85-Cx!j8xhlgr`isYoRnA zGmuD$ie==`I=zR2&-UnZX!Y4zv=SA|NaK*#)4``u7{>lDbCFMpie;qIVrgOUc^iEy z_476-QlerRX^Ok{Blr|6wJAEbK9Ld?%Sa{mctOo)i$@!Yl&DxvMm_GRkxgC}BvPVc z85#JdKPVcfL~Lf@i~6G8fU{4cVi{TUz6WGNhS^BgyuFB`m8sZ&>;+#}aOe%xRd^Q> zE}aA6AN5bB?;d+Hi78On^=w%W;*;YO=S(=$tqgyw$1OeP!#1wItoPf;qrYqp$%XEN4~_jJU{w@%FPOgb~iPEW@4k zxOv&W?%+KNar1)cvOqg!=UYR5Ra-c@{WevYqJc`uE%}XOwJA7`ylSS zsHPL)OxiL$ryjTd*B93WP~@O*|H(K{IMcTbchln)i(SWA2Wb|FT(=csE5vbUBA4NL z^mxlwccF%<)-hYwIUYjZnbKu=K0Q8QSUAjg!)x?DAaTZi!kOG*t(d;L|>gS<20%kaW_JbHS&QqXqTvq1fhnJn@k^v={T z!@tzw&JU*?iv$Ubxw7-aUKu};cP4=uUQCB8u;&$lt`jwOrOuj*gfkt?@Dh5wLeXeA zz)+vK3T_8QqJhCPG0gB%dOTpk`xSt%#z~&!zjdSzj|7ga3+u$?xDwP z4{vSI@U)5Axd>Cq4ENIG3D)DoVaOYy_k=<>3Xyjvl^Jf*<8hBJ?jtmq;2`IK-bt{Glck1Npw=Ye;qO~9W9qn;4X6gI=F>+zutmTd#??T{WC@P0nw zOlC7YRF4}+EX1A{>%6g-rz_!1Ycu>CJ+8F583f*Mp?Bq*t=cBV1UJLO^tdUZ_bl)( zwh2?Ssj1|hscweX(c?l_!G(z!?CH>k1GQ`{XicD?RNkQ{Jz&q8XXh163>Vz>k`=)Y6=16Pki8Ti8!{^$D$ z_^({*@5RoC!PRKq-m1U6IUHDm)7^{IV-qYZ?- z6phz<{SY2>@jUR5+2XKUj1PM;isSRu^GzA(JW;S)bf7~Go4rh)FZ|??ZoHM~(!aon zxm>_-qFVfrop9FoESw{Hyw<%(`=B+85U&*z(B{*v`CY~B3om45U*V*`3JWhhxQe)# z0RNVZLJ?YcZKF^pwp+LOWRUimEL|AMZ?@hO5379$!j!ZR5cCrCQ|sk&yh(%WpJWJ5 z*^CGtA34YM)TdZF^x-+Q7u6sr%w|s#)L&{R;9pt||2fEiZi-@x>(Sjep+}E|Zt=d< z#y&k#Q&Ky``$qOiZ4Up|+A0b2oZaj>wEa8&z$4k7Vv6l%%{Ol@1FaATMq%!qz80T+ z&gwe*_iQ&{X@T3%iZc7)wY6ycHuNo9T|b)tnoFnua#uMGJ>&_X(|_6eLZ~V!Syk*y zva)#d#x+2SlcvS%)4-%kN>&v{MyCf)2J#U`8=X=libyuIGmlmY3n+UQI%qkPVOCeX z=ZEd&9sd#eiPd=a-b1hwJC8wAvv>G{l}~n=eQ9(0&rr7pgzo{M)4MlI%MdB)GCQd( zUe)UskWjWzl*LOr79~>BWsHpOaTA8fRa}w`Tx15y3e%E>lRPN3d!~c0o{*XI$NZyd!Cdz3b^=^(6fV=pNrVHX+^}j$e3S_SL_zySBs> zb_c)7&a8#=p5Q*PNwjdvEcJ4#wx)clQ@Gz*;ke|5AkCGhzmj zpLk-D@m{f5^}Ro1I6^zdCZ(XtkhKd(I2jKW-Cn_8I`u35*ERUBzwW}1Gf=l0^jB~E z0k;GPohc4K&i;WvV&KR5#_;3Zbo(gQNhu6VrU7QTqSWc094S8etWn$@dknNFa!SmO z-|;jpx!7loVx7MAOM*+7Jm9kTzNt1+)>@{793PD>?O;N$z#8ld1vqHM9p6~A z3+vctJP>sj{nQ&=9uO{nv_7|yvWP#~mDjR?mUk5@IOcq%{8S>9&|?5IdwAu$U{ihIsOFZkns5#!{Qiz`a6FxB@(5Go@e$@ z5LvHN4fidAr`iDW4Z`1<_j@8G;fn#q^f*g(+Ol)U_#U=JO22jRt`rv4U&ScWpt>ak z|ABxGV?cEaUF`nx5ZY7x9QqW${?K=)0sIlc`U6v6V@pC|2-#5>_sa$%HZ(g7zAGF} z!%fhtmA@iV(g%!ee7Gn|2A~zC@$Pwel}z|#6>W*nCTXppm}FRoWRt|zC{hH;irEsf z;lj(m5!rC=!gWNlI<|z2Sma)d$cVWc%Mr;+*fMh1W~kGs(MI$;CKhAtTUNc6kaa!A z)&%khwzF>OBe3^~c7DbrcO2l}c#qof1DdLz^fr~kmkco5jAN^KK&i>K5R$Rh{6R!Y z2AGkJw_pAle8N94z$=!PB~miLjBFA=8ct;mYmscyb`6TcPYp058%}?Dg~*2Ez8p%V zWPlkNk#Xv8A|u9#Z}$qHk^$yqTDjdC**!_DMV}a8@zB<=3;gVmi>!o(UWIgh2K;*< z{GkbW5c_(#!*93GRN2=GU%J_ zbHS(BK?YTCbc{&J9Ao5wt2Mx%OHTAT;KJe!L}tB+q|b?i@lwh3nPbEp!)PUQjQQ;A za`ifqeGS>SkWa}RV`QI_Phf7SKKm3Czok?3&}S?nl{_cHaQ=?%tXr{`Q1lS(|FVcA zH5&nH)EVkaFu>vCy(#?9SVZc#glX+s1j*R20{Df2PYp18xCRB`?-X$sd+Z?VVJxc) zQZm4d9B}4+ICNPK^f};I)9OS@2AGlQ(~AuyGJWC*yxkytN(PvbeLhUvLS&y;rk{zF z3@|4P4KA;dxrU4-QZm3|5sCkw7m=_3w?)Jq);8J15fNc2$ySoByS?aRn0JuDz`Toh z{pRCkK-0|Dn=-|y1#xXZ6kTa4yPh@_x}zV zs^PK-bC+?bEKCR482(GMg#Ze<9KQO|D|7}5kgHw?XW^R`!^5Mh*6{T+`efk@O{%wn zgt`l_@oYTM;zJ>db8L@<$iKGmmM39aqr=-Mo=obGOvHz_0jD4;sU-}P%j)nOG ze{v4J`SH_l&(7RLcJ_rGTt8(hTq97g3a%epPUHcbVJ5LFq8~lJc2X&@d@+zqgv)%J zldxZqlp59`CO#)N zpMk51l7szi;} z)lN#LBO{a2yFzK(=>hg_Qn!J=+~lx-w@&iiZr%c1k0`J)7U0u6-8@^%aRwh=m$^ zNb=27HY!0op8NtnKOh1#TZ)moYhQKa!YQW@c0iYqUQ_WWtt>o=%c2Y66 zT?wL1okPaRMNS%-l~2Weo&nZnbv)hYlo6XfMw>T(R^w?ZG9v*?gtR(7N7JLg-#QTV1rIx4yMq0kko=Bu6@W~V+C8~gt=6lKA zh&11c)1ESkDqy4~{IL&_mio7~881-J%r)8hbAiIkI>b?Nof0%m+=Xl0FMxza^4g zEtjkb=1Ieni8N0bf)|)XJK42x8QEaV8I7!W7_Nh;B)btVA&oEBRRa>%BIu!KBfleZ z|IDn~>9uu(6ObUL;7wPXMru#lq2XDQRRW;gVNUn7xRF zEaCslRK3UBX>EXn+y|be=ds6$lqgC@dS7}E8s4c1lHO<5p#l*;v(5~S&3}p@pT@>( zP*Dm}q9~b9W6u$&Kt#00F7K)kDN&T1EI1yrG^aWktST zioO{{N)#m{Gu+IuW;lx{BE#hbK1-sV5=F^KP?0dMPM~~*qRdOAL{ZvFLtsn^IKdUa z4%racE~zC9L{Ty_sLc>ml)`6F^U_y|lqgC@n*VqXH72K47_IqW-jzg36eS}Suc}jF zwTIFt{3+Xh1(6a($w=SashE|3HiS8p{cSjr5=F^Ki}h>FG6iYzx%GlbiK1kr`PxZ* z$^>b?v=Xirs&h!9C>d!9Yd(QUOK9h3L`oDTBh5p8L}C#7i)qw;DuB6eTBXx%g^ijl@bsN)#m{jSmkX86(6pzN#XJc_Q5Cg}gCBs|kanP5TlS1zceVK=FrY{*DslyF{ z9owvdsoo4|Ltw)rxGf0pOk^^=tqxa=t#*ficQNaXbrRw1)`r`aCd1q7araqGO9L(j z&V5wT>Vz}7$?#}BZYr<~dR?7$Cglq=;Y@QfJXVie&wh>LE)J)xM|Pt)5^ZO~li_iC z+&rh=LkiwJtkP1#nfhdSydL*`mFEY*;W7%yhrfT;3N=iEGCV<#`^{+_Nx0vHjoO@N zI+Wp^^|)!@Fh9UWkYim*R z&IBsMd+G6@*swk1J*a;F?u0Xy%J5V@Za&{}72r^e1gX076(;zi=b2PxcyB$fct4yD zdKJnP@TW*a{0h0inOG9CUyYIs)39Bur*~-hx6VB8u!$;_FgEawkjBTa0HaM*0~F2g4~;B}4#Yj}{W=A8*% zhELJs#wU{z2So^7clFO$^3GH*!!z`_*M>OUq-r4UH78cwal*xlNneIfcfkGL7t!#% zUsWdWO#d=my{X2etntD?Nd9fX9~q~uv`hpuT)np?&in7!&--zuhyE9$b};-q3sGzQ zgs5#A4+1wiHZet2w_H)PFy^YA08Q;R7k|{SOFgAS6ckX@Uv;8X{YJfJnMt*^kT~Nn zrh%@WxpU-(i@G@>epk=z8|$FmH*$T=&I_71+6~#H`g?GjhgUg6B-6HBnKM!;xd%2_ z^-UH^iKHDwGG!HqdV1dQ0yGy1pxPkfR|*Em$Y zOMRbh1%OAeYf7$pi+e%}JYzidunmsp%(c|`Ykhz@Dws{BrB!cxkvl~_{uFxOTp%2d zp4Dfk;i`?1t-*xh-K65BALMQuFZdXp$ya0#W9UsPE^KkWbEqUDM96HPQ zar5*S6J1MQxB-DW9~aDNFX^4X3J%WRynudmJ|Vzs*-YpR&i!~_Iy!r>?+q}pGeUs3 z>#47|&t%{nojrTh|Kz_&-gX?C5&ey z?4gWp`^OW>o_dMT2w!hVBn-(&MtC>GEKo!%c|ihOqk`RnZUE_qWN^-(cM-|*$IN{i z0{66^17s|KhQMDpp(YSMS?ZWMsTh|xg4NBIJ^VCFJdrqW*?S}jr_26GLbAVl#t%dqF}#K6BF-7 zW>_LspDZPmkf!qOVD_mM5L4+vc*Z57W!a#N{4;18kfMi7C%$+^BufM(WXNxSz-%|5 zCRReWkH_;S;gjWn64Euu!hImsXV7B{-m(!sS>`7pEwQn% z#5;AwXf5qS4id?dJ_)HLHVuH~-H4>p?E_XBgin_5Nl4$A8=JrKwF=x^MJWT~En zv`qSC50RFMc?%NBvOF1CclBe9tdp-6ku1TJk<-p3X=FyZYDBW!PC}Zm-2InG^W})6 zM6$F_LROhk{u>xiXY8RW(=1qe6Mf6xFexD`m-}Z7k(JA~)OH8vK9QA9x7DI$Z%t^%<*KaJiL+zy)V^2qsPxkgn3F)zX2h4Z{ z)_KU0mzC0HJj;fE$GGhs8cKxp` zk!F{=kBDSRv5dU>CP5>wL~bXN<-;;^LBSguIq&Nqh-9g-gf!Lb_bZU1cw(w^Ok3kw z7Azr+UqlZ9GD7rF-c#CmvIJN{dYyUtmPoHZU91!>%Y7xJsaF1CTC}0vT!>_8uY^=4 z_Jg9Z`fdwlLP=6JJX8IMw145kCeP7TQ7utYd}6o3Q>&i9`?R~FP$XI3=kXlBW*v}C zu-`mK4P8N`L}|06-zWM(1t8la=@Yp~)60^Km667a9XgRu;~AwM`IIPaMw$%8u#_*N zHNM^KM5IJ%GtxM3_3uF95rkr#URWDtiPC1IN$DB`B(5=v@!ey*ts+)LiPC0d#-?|J zKxvCPnX&qPIU*%Wn~@RjMTf!s=!rffidE87l0<1UGC2EfP=f}zmZGkC~Z5b7?+&;0eT2ZK+r=A%a^2fN|ZJu-JiwIrtx%t{B%8$ z5~a;ZQ+!)*AjRx6wZAimNQu&Bq<>)eO(17rwEq4l@DNgrr$lKp(&FU%BXHT!TLSnwQsd5sA{~`AH0A}6;`ub~yWD_CiPC0d$d;j~b+Ch!kaelr z$}dscjP&mA3paAqXuUfPgcMKhA&JsvWYFJtVKq^G2HkMINu)$+Gtv?{Za?^p!)PrL z@1GGVQQC}Dx(gf!NQu&Bq;LDg2H>+Vg1(U-;)s+eZAMzghhHGl^4%P5 z_DPgBC&PkZO;CMWLZ^=+pAx0b$th5eCUWA!_e4sRHY3d!$4@2FeD?3@L`sx4Bdbgq zeGSG_3}}_{H?$Q@qO=)Vx%BLxiL6|*Mnm!`QQDmRHXYVl)o11Se2a;cC~Z#et_;tK zjr`@Y_GC+xHX|#Y^8Y|&rK8m*kxz-zW@PBCerJFzg>xwMuRpL>ELIbV(zcTZ>!#(P zTh-mcy1wpxA|*=OPAbM2i$AziRd2iHTJ1-ov>EBKGy9otYCfPvTO}=&NQu&Bq%tlwJIq_iN8r!s z2efC)ls3C%1&_6JEr71VEvwe>ZxGnFKbhXL@}zgGc8u+o*14;1^KX;mV>|Y87jHC( zSN|8hAV6L?#{;pH66yFCSmo3wJ?}zjIR*kMyR4{PK_mDfhON|(_)z>&N^iq+cI(4n zqcPg>95S>L{w1`*G(NL296wfny$X+`M+@8u+KD)tkNQrtVXvz*8zO}-tB=EYe?SJs zVLZ`1jchR8&uoZfUj0QYEDlqCC0MiZ;+U92*cO%nFdJjgg@;2NtE#L38=@X)oRr>= z;$XP|voQ`o_R`xh<=D6nY{X!H7++slLpE4ez-&ywk4<_T8T(y82RMr-DPwt`7_!0g z17<@k^FDeT5rJn9!u(FcI3m87o}Fy4Oo7=D1!;@kMsVJj_rV69S}MU#C4MCvEN5Ug zrsBtbIva+-gBzfhY={OEhQLiDgvP*eVc7$-Ar?pVcd@XsHEvFX^~iR^Zb6Q}C=QlK zFdH-QWAzuZFdOdgzH3YK!~LNpKiOaz1+#&-@KOSGZBb0!cg_MEVy>Io%oM8)wuR*u z%!WukD(h|d*Bk`>q5l3rf8U#;Mu|39mceYy!#JwwZCEO=oI-7}6q~ErVEG2Ku>frZ z>uvbO47vw4R^!LU?TdIK#@!Xp7%@UP2>{FJPFdILi4fPkd zusBRtj=@~F-RAr42TzKFWhl(Xa{M?zP71?0<3$r1Xs0R8tED534!A1uh z7fZeITge8?WSEV0__2Dimc^m;JTM1x8c+rBr<3nRvcYm1W@7_>tlq9=Hheo?XbEw^ zsS;#2tvtUb8!WqFHa6kM>J?jN!!ors&JSV3GIECx*WrM z)m%n4SjNL_h{Adchd!M(C0(;IZf|3^DV-neCPm~WpCCmZH7UkXi#bDd>D z%!XL9BlU4qnKLXeEXPjRr&Y!_b*4C2KE!PNh99@p+oUT&*W#hVImYrUX5$3f=&EarVm!T|6X3Adfet!QTVx<;gJoLG#woO+UeslA z7^mG?1arN+u<>1_5C>?3b+fVV^NhNnvE&ua@UiQLuc5YITotv~s$CdgUH0)FNf~fo8h=0bp$$*-#fNX@MXKLw%)Gn4& z@e>@Dk@_^g538~hs8sM-ubepFN1vZ@ZgO}vX5PZ5@z>hg9B28H#HaD;%WfKZ_i0m# zmSs&ca?Bgdw?swPIP`|7`(U&zSCWx0XVe4|S2@M_(0?%bWEql#%ve&eAml}2-et@Q z7D*iXWO^#1-iAah`}LI1AP_I;KEWlkCbH*5y= zV~7IK5V)p@wu-XMCv#FU&V7nnL(D$olw?1OmgPGV(*1trJv5%~x16gG$+8>?X=?r^ z1xPXbOc7he!-9RwavKThZ{F1r$Z6O^{vI{NQjR3cXe6Yia7Wmy)Ol;kGckY#harQ=C(BtRq<3(;oWtb$rnR-iwt#)hvJwdyvgGk!K)%OlL*|_m6?!CD zE+Qel+a>p>XuX?%CnO}2ECZ2{LFX=ekk6o#-BwdOS>7QbEw!GZ%8$ipEmgbKAd+Pp z5>n|n3UXLi@C$!p4lgB=3fKL3 zMgeHBF5jWeKBo0ECl&9MVi2uz5`B6nye~sO*{|1?kRJ1HTma}4k{&a5YqdD0>m{Ud zU#o=xf%=3!d*?Sx$R|_tGICV?YB2jiWdJ#(@CG88hL?~&&-dUuBuJl!4K#(wl)Hp9 zpI&sHNb}JeUC1ZX>oRiuW*8CGr+HX!ZKY-^T|%0w{sj4sQx|Nfsq!ds3X3zIX>$o_ zba@D4>C^y8ulKjLQDKT)LVEp@fwg9p+}K>4$D>cC!zHAtVl#MFY|&aG>QE0c^(`Tl z;SKy?%3i~0l|g%(+eogtKO*g41nUZhR!3LbSnjKC>Z)=CR&}sc?0uVcG7(UA-rA zH?+YNKeN#ioBBj=!??cDZ(u{58yWjH=t%v+v_G@a8b5xfw_$RtaRO}M`llH0*8Puc zuq=StXoDX=*W1WAJb47<17iMXObxG3HdsEuY=C+jobpm{BO*9oSD4R<7)QeoyULOc zmKiV`QTXv|y^Y}fZEu5(>}VtC@lAiS!Eyv`*!UUa@T)#u)UnV8%QTn` z{5UnI-iFn!TRY9ht=ikEEiC6?Hj>bWo8E?ZZ0;LiL!5DV`wVzOHdyw-Y$T(NJbD`@ z-zmR<4fVNw{d_gqV0j3$k%BhzIoPY-5 z<@Irx|E{@~Y?u#h9Y;1;*28R!K^qSD0jkXZ?g-fUfPGqJ$g0U?gXKTW2D(UfxDQa- z_}-OlRQ_Va_hf@*Ld?blv|-Y>rE<>^J2e}TAMjhrVvez#h}oEgHhdgx{5}N7MYN^z z(&gGbW!Vw4fnlav^foG8Tv?xNRN6jRi-YA!%*Ir-;itC|`o6{+*y4&~pN4L`euLV= zGA3qY8rtyJ*)Ujt%LDaJb+5E8{d*7DV7U{sF#~N>(AiKt)-1=229!7CLQ|b^BNKhf zav^484%(=!w_!YU3D;7%LjxLSTfa4AgJng`#yqr9#lgnRuX015f(8K_{T>t{8!SI! zHWr|bV7(1<{)&*Nt2TV@Iz^HVmMJkCKcbDQ4mQ-+l889W2U^`F8!TsHHWs0c>JB!R z?3hP!mdn`WC=QlUF&oR#hQnFD*QFEq?5j3@b`~c9xQ?;hirH9+HXP3KO^s6bYHe{pew5;1 zSr)Ug3T@QWw?)bDnhtaQDz-)G9~^75!SgL<1E*kW1J#DZcSE$}4cC%K5}^p-jE97- zCATepN`ZYUv&yUCis!daFner>A$hhdeTQ(C4}Fva+DV__*;u!YMAFCl4CR4%>R1*e zA&qMm^&_9g#nn#`$#NeVd2tP>72CbU6J<<9vW!PYrn#byZG_Ppzb*V&BeQuvJ_ zAW_XL#>?|_5XrI|iO-CQ18``>yvrET+M7t0(@4mMZ)2f`Y7nQT4gaz3B9dh?5;ExF z>2pA4!)SwU|ER5nEPu(IGz2cMbPPyPw~)2WyQ1|i%UUug72~*BP(x5(s9+raK-0vZ zamI0eP8yA;`>EDbsGTfBk@z&#*)|GDG5bu_FCQn8LJq%p8`a(j6y<&OrALt z$affR$k43{kt~mpkluA;_W&uP^{&#e5RoiE^&hiYWG<=X6H8Gwu&5IamGQ{TKLpG@~lNb}y?H;FWF z{YTr8nA(?+RR%tP1|&SApz+ft4DgwM*2 z|GGpZ)AKTNam-MSoV8EOu9%9Kkd?NTTu5Z4RUc4Ti+RhmyMzqg)M6wo@5Qi(LYK{J zOe9n6nUeKyoB_*H3@bjmGrq- zybqB~xl2g%zD5OzH1AlNL?qMeGO~Xk)I%a#bIS7BL^72wAx(ZeD**W|w$oHDxdxF; zn@dQqSKs^qWIZIk{@Ik1NT$eTYgM6+<)fJy)^8O}^{$)|6qV8^o zaBsN-_sV`rJN<>vRVseXdM{Ky9S`dnOW}rp}Q+l221y{)t3NG6&|J-P*vlFWgT(|4?C1>-3y z#M3vo#p=KCDajld8Jtq$9L)E8=rcHJ1g>9#l<0puX{Z#F=mumwfcW294@vaDom5Q4 zE293dFWOmT#bfd*(f^F}h`u#}M#ZD;9XvS~(Mt3`BTW}JVLm73km+o3Zz3i7pOOBn z?%@hQ7o+uGHZvQM68+Ce%c|w4DO$_Y^SJVfXeIiek$#*0f$EggM)c{oKDHf^68+Ce zYv=OSh_uGf3MW#c{~76ha&$6~;^fBrNHf$?B3g<5XQXNV3|Ao489(D%7?BeF&q(jq zH(Y=eYl3&vSy+q^J|+5}k=4qagT3AWeifx!v1=A0CHkL{K3*W=ZPEIaX&p?YME^4~ zIDI>ei0U&qIkp6m68+Ce-;~p^|Ec?tZ{mpcL`w8OBbAJscs}5R?Nq*BhJ{tpLlXVZ zNWYwKp^EM_2tmJW@p#)!kP`jRNXy^-pdO%-mRt326DiUEoLqIbwnnZn;=U_fAhxLswq*oc2Y6^G6mF-dcWSdB^MU{L=Uk$`jWlOGhgcmK*DMbl{dG< zCPYfqE%Rv#EQuu4mS9KnACHwc;Zve+8EJeJ(i!@;7m~)mw_+wJNQt^-q`BMR`9zw( zT?2`yN=no%BQ0Oo^dizyamG?2CF+)u=66M=5@~+rqeUxGw~RC`Zw6Y?si)|nB}31W zPl>u^q_NxKc0h`q*Vwtv10p5rmXnQ(!=7Rz!+Vw@Qlf4dX#YH21H93>cy1dhQ@8A{yrYC{UJOba&VPa-*HYo@Yf}&s3Hc9xKFBUzyetM^5HPIv3Bk(sMOMw+6ofJ#z*np&;L3YVD85;e%l zem90|WUsE{iIk{8PL^`Y1tj=|XRmOlZW@`n8sudAB@=Fe&m z2s<}Ha{7uP9m%Ie4Kgw~aqdi*A9;}s?%W-7Qqe;aHE1VM0pfn#5kUNJta=Mlq6Y1x zVk)%59oh-|BeXN$pbr{pzq!I!L`HfcYSYuuQBiL^#l*h@YoYLJoM`~Se%2Nepa!tChzHIWiE$Vk)Fiwl5MXZ(bs=ZTc4 zK}LE<6rTm8SQET!he1lLj*3JLGO}9X-H>h@pqD@m=3O&`NQoL`q)*9)1u0se!WHq> zrwYLJnBE=m62Qxqk9KeQ=Hq(lue(sH9+2_h|*J53={q6Rs+%$%Z;3!k4PQlbVK z>FZjqv_^i|tF4+6HONRy{jp^=vR0SU@15Nm=&4KmW05WNUU zvGW=`bkUwNi5lc&{Y1QTppvyNIg?L`8f2ttRkfm8w9E3mB2uCT8L8|G3x|1oAKR(y zh|6yyWonSU2WPjUlo$<8;h*XU0Ujbu;Ezmeok5@Y#SEbxdcp5yh)Zdb8lM{9v00zQ zxNnntBzEo_pX?sdqhl6j(X`>|ShZvd*Q>_-_YfGg3!aNs`{zTO#0&nJuC%@2A6r`- zexz>3((3nET5XO0-xd5ZQg7E>NW8aR)Hr<1ODn=(QtjGRC$ozKpSl(8Lc%^UrVW}D zN#ba|UDLFua9&~iPVRzds4RtDrb(IIuh8x|bMtmbe>;c-j4LX15&L-HCSLg5|)N z4ro#omL@pZ9bFW28ra>y?!}5@$Sza6%&t4y-Gz4NpxrKL7n_(iNpE-hqb(4xvrv~A zgBG7AyG#qas=x37aZmV>y2qZSWSlK94rnarD;aCFW zr|N<+RO-FHFqmr#)(nAj+WbJlFtN^pF=H@?v|tQ@r)RGO5KF0sz!N=QP%w;k2nHe; zoF)pr({#ZorqHMdF!D9PoMIfBT15-SuK!suz8K6AEf~ePYy4!O>j-+MVU!k(opuPO zF9sua%o+M%JVv$O0_MWeocr-RQz#ggQm|mG7|ieXU_4xJ`2*byX%FWF9}0%i4#D)t zV4mTRS^8j1A67<#IkD!Ls@8_*NS!k*OJTtTU@+<_jHu?DdLO9_G+2OrKD7eq8FkJu z+98;M7{_z`F-ISa{}tsnn45y;{Igesj#h(Vi4O|~*T>Y8_MY)?S~&!0koQ1G6vbyq zJV=ao2xch8@e+T`(+6X@FdnOgVwlX2kKuA4o+g${v0y4;Fn`#CvD9yjv=}B!SjEy5 z45J-_5h7hwlosfN@w@o^CYW1+ZS(W42&1kB!;1ARn6ELIKkdQzb^a53W}ToD8gHOr z80`?uXt0s?7JvMx55_uiE^NlOV2&popkP?W$ASsMVE(cPV=d4T=Zpx(n(rJu`RXt+ z+94QRs?+|%AB*(Ccz-zA8O(|0(>vc{HwuO&kt~=H4Cb6Y81KYpO@VHOJ>%WEJj`!3 z7)Cn;GXdlHfIpV#gE1X_f!U?HbKU-_4h6&VQWi`#4CaD87*p^PEqgar>VY4K3Cw7R zU_et0?(KxZ{G<=Y`@8;dSx=q7rth1qq+nR8%Yvza!CYd&JSpx3w3xuA2e}d{7)Cn; zGXsMWvU0gTm})JY@X>yY9UU^Dcm)cEWzQ^_ni$L#doUpv!VkkvU=Z|ar6C2wXop~6 z*B;#46@H|x)Cc3!EX{|8$-81D982+NvxJ-lQwxK+W)H@D!p!VIt0janFY1R`xj@9I!LS^k1%m~s)Eo9-;2nBU<5YVlI9K~2)H95B2xb8W zBXX5B`e1w)Uxx(MDGEETq(O2;S|Rw`k^L|`!Y?ZH^)wthsxSZ1B>M8PoH zA(-VDj7Z$J=!3DG9o$k2ru13dkwwq2>I(}7=ELCBhb)-LYPb`Kp0Ttn@_>S2v_mks ziuEoCKhn18gYm8MZ>SbbuO4_BAcA299TrSe4CXNlX34t=S}+UlPNHBK{ZTNCeBKxn z@&P!&mWO3V03mBbw3k?2YABF=N z2Q4u8hprE$7RX3!K?!WZZe0r$&#DDrxl%7TdW>4vmRi8dcB}=k1Po4d(psQ+Y|d5< z=rh=p9vfEIqZTka^A;!`FZ1;Q=r2J&J@YHIKt^Hd3#XL}2b*W1B@Yx@;DmwR@j7BE`U0#iBXnLt9Z1k#yO*+J;3vq(l_ z3(BJRgAOgo|1Ff+)UO#Cd*nGuEnsC#)`Bi*!X}cxs@PYRi9)=OIl#O zaI_teJ+TGGvpK-8+5#DgEhvxP59?cCo^%=JquK(Wv#-}u3s^aowE#MKa9VbI3(Uo$ z@>2`UMHZ(}3m7eFfw{$fNGH`6n4273O)Zd-*a8pqepKHAOTwik)B^J_(@yp*NG)LHW!8cuwBg3aVAUUwwH7RYcY#{KXh{pqcXuzN7MO44#+^j$XfhI8 zU_$RF^er$Q{|7QN^%%-jCi@<00V{K}79^vMJoXltT2@H|8j5T1JT^P_idw*ENefIF z=SKqBLy+HpfnkXj$VhAfCe>-D^er%cU!x*es*9Gq9(|ccEnww#)&iL5gVXZaTVO1? zF)z@KkTw>_m-DN$h|!W37~3>E3Z%$ujV=3cr54CYY=H&6pLS?LuQqwK7EE2zj9S3T z{;UPqz_k4K7I^*h<4|gW*Mpi{s0ECcwIC=jQ~+%)2n=6HEs&Ae0zdSAM&AO{xxw~X zly5Lj`0mbAb$|MhP`s zplrmi!5JWpfB!Ko_7WO{XBg+{8CMVPFRu(`mGTp|cYdR8kn7f9F~;pD~p5|)<4L|`W` z64IyOF05IJq}|8q`-vK9KUncEs z=hGDX8Z$ECQ&Om8WJuiP9Y8`k1!|Hl5>P)0Qc_i9q<8UOCQ`KCE~SqWDJcOmGHA-o z%j7d?_|C&bO6qltwB(po3P?;$74wUA2Z@vv*BGhPYcd8FX^~bdRkkf9Qc?+Hq;J5| z{opehefpL@qiwvB+7%-$tsmbd(o*M2SMn(-G;z``*J>io|5|9PuBw>rZ@VAd`c32JE?f|ZGZ(@kcW_>cWs5o2x8t!5^Y8r7wp6JU>}mk$vv(TDM@fS z*}hIr=%G%6Y}g|=k&?uckv<3OUm((FbB$|6N)kFonpZc16;t(To}U9R3y5|~5-Co0 z3WG9?jcnN$N)ak4NnjXhD)cv!9kHFJoWFr+RY^(Wz(}tP2VMXfhNRd2hnNwIXeEN3 zlijMqu4^NkKE`^6ASFVXk;V_zLE5R&8lRosPNYPjGE#}WatvnQ8H`q`+jo_XlnKNC z{a#Ms|8y@0bSk^#&7^Tr3>2QSf!RcLraAo2v`hG7s7?bVualpm4tOkAhMVXM)p?_x@Usn~VMlYl?cj=wljm zPs8o1li@*n+%&sWdGc#@-M(JMT=wnY?6pxDHp~_bg|J7KpiH9Fk*^hTHFb zFubuIhp&g@7AWS9`>~XMgfpSZ@aB5l+u$7!cq^Q_rr;lGcBTADg{m;z<^w|d;iWqoJB8=-ga+~sBy&SWUVyXkS$$s-wns}ui5xF{Ur zW5={8!;|#5_xO8|mZ;-yn&>SADdJ3!GCW0(SBq@x3-}uhKBUiza0;HOQiiANai3N% zhEed|)~0s|XVR46{q=b8szJYy_n;NKcN5O^DZ>Zrao^>B9)P#U;4NQu6Uj2RorzS2 zJKU^PHa~&Y+O;g=O4Ie%$vac33?Hrc?&tpwsw_?^Nc)D&7by>VXL6O{7Cfd|89qsmTQ2hua~ZH8RjMC=yV#BdZH7jNX}|W%wF>+f7mBAO%!l!2(&kaw{kUb-7@&mf;RZ z>ZXFPA$awhv&Qb@p+KnOOxrTt;ndbVWeis7zeVppe?Ab&0|w6oF2fy;>nvUS!hBb8 z^VVez$vacI40kwbvUp6Ns^Lj1`w-5gF2fy;7)+;zU_L5zz3Ho;u=Xbe4%52~cdRW> zeG03rdNtDP!Ezz)vF%LsGTc^FwD0f6)DI|d>R{J-jlB)GgH`WL`7->f!?<6po}>kz z=jmg@nfzt=Z9T5Mr~%ou;T(Eb;_uKS!!#^y6b@6e z%%1wnY9`5jjE7LJgWPVEDiuD*(z;XxNq#=^eyazbyL_=WD z$YB(GrXn|8eF3!{SB!nn&w;j!SqEPyDW>6>iQIJc-O~(rKQI^7ikNloD@SDzo~g)9 zS6@5La8uy94S)3aw9xb zk(;i*U7F#h|MtSBXS?2czDP;JGZne%>WifrZv68IF8uW|c;mV+MG*D%3+F5S z`;2wrY?Is+^C8jOKH9Ss4Zor^R`KDN@?Hq9`fwX8Ng{*l4;TR77msBsax;U^K%+ z`UZ`Zcu3Q;{UmOiJ^0VOr6q2gEcu41k7bI?* zZ;m`~ZpOuCcXFNv(A3i9|O7v`#+!XV<&|ciA zHpjqOfvL3BMn0GzowrSLQ_M#~dvUGY#C!-7=8xQz8~Cp%Ez*j!O>$Fe`_8(GtLEhZ zzMGt{IBU1HwX#ieQ_P1+GwT%xO{P6V2zUy&@W+a|dw z=98isUMXM$g$dL73;&FfxNVY~Vm>6A;acAbaNamd&THYju6uC%Bsax;J~XTL2Eg=j zkXiVy(nS0@0somV+izipJfYg#DJCW!U&D+~ZksS*SP*>+6O-RIM;a3$F2Nb|-Md|A zu=rX&^u<9A)IVKO+ zU?AQm!}Wgq^cP98G(|yHKNp0=PKRBT;hd3l*Ril^pP>x$?Qx^teUAXYM|i_g5&uct zK2G}8k{WEN|DnX|zu&H##O(u}UoA=7cI_M@)eB@@dnuZVfWmqENaa^c(rVX74b9jn z@M@W)83JdKN-=6$tzK9%1{N(|)rK9BBnwh1vigAf78#tMghtq8@kvG2m|oo?L*J#8 zM35{rsmPlDqSPwAeZH0?SyWPxO?M2(>@W&ZH^UdKqqQw;+6N@xdY4iA)LPthVNU4U zzg6fjaTbsihQmr%pN5Hn)s4r}mYQ=?k}Q}gNbPQ(MX*VlplJi{QniCzR_Mtx&q5Y! zI5&vr#9>PjYfZb#JL9m2cT#9`m3y#|Zs`$2z&6d?6Q*oYE&s;AnKkC91_S<-LIHUO#?ED~a0+ z*dbqB>u}&x%q!eCfmiiM<0Nh`U`PG%Dw~I3sBs$&UZwYUlej{_*r;j2aWHIb7GzMz zQ<78&7$?geM5ytQCA(geq(Z^I1dNlxr7$xrZ>j7quCYSE7#TjV zdkc^SsGs3|pQECaAngV0w9fz=wNG@%ae+CZYaa`s&4|Di0>%u7m6%SciHi(}6`n`A zxF8h*CdA>M_d&YE{tszQt!$???Gxe$MaL$Y*^NRJJ;gJ)oN|xeTH`J0W4w)}O?(R7 zw=(7`-bRzWB(0#gH|T9Hz0qOTX!`olsCD!fiMQl)^u`{1*4llJ0@8UJoK|O!v=wS= zJ+oJ{#Mtx89+ntu{hhORW4%-(F#5l*Xtj=ocl?*4Je4fQ7#}PwQf>H`wuLI)=#3?3d68XZ3{DIs=X=-7l&$)ozm zgtkhEi|H6WI3}pwsNu=6U6O|5;Uh_7A0JEZj$g9dy1=Vn!Kq8+RO{URC@|8su%A<7 zJBp?C#Nl~R6s39>s&yEiv*ToYe0aQ7%CVizrAkIy{ZHMEN=R&-91}Ov(_MwTU99HE z(2itm7kcYXZyoVAhL)@6K4dmks-EnQ0l6jyq;iD$gE2O<+F{<$;RV}f?L-1?d{1E8 z6W1t-9vh7-QN#R(F{LGsT?s}ePM-<#M?uC1(JB-qiysQIb?us{5gFLE;_B7-lNL6S zd^jE>y~hgv?jP?%O?@YvIQYS7>4d_4Hm}|Q4eA;@FeX7<@u2GJPKx#idq=nRi09|Ry&GbT+8$6Uhu?^_ zuTZKYz!LU*+Wf^^19kCF(<|IETY@R z=b;EW7KM7gcpkf)Ub1z{QskKiwlkOrqu=P@A^$HEp?#q|*v*+=B50p0vz>I}=@X&d zz^SPqPYL&Xmm4KX#XM$HsP(WCOF{lA+>a^y(No;Fq%r(|m_44^B<9b{2}#3ZlA1=3 zjCuTeJ~p~SJlOWU-H6|l;3N)ladn1WHONVt53GAk+WfY;ty2d@1HUQynB4862j`cF z;i;zeCoI_ZMSe%2&pcObcV{#OaK-ebPsW>4=$$d`hKw%?{5R2?h&UmQ>fWTAIJK0B zzlx>%;{Vg&KfZuj&nJ0JQ3Y=7tMr!Yb-eYW+3&*fzr;As+h?k)dWm_#b_Yu#ku&#{ z?e>qFO6|^l!u4ll`GM0xidEgN?A$C#vMc}C%<+<~Gh0yN@waexaokHDl3(=4$R}Ly zcHiDZP02VWF4&f-J*5-bSeGv>w1li(k-vpNQpXkUi_hoCt6b^{SGh}a?C{60Bkzo8 zXMuMt^k?g0lV;qe4rmXyO%b117tZ{0Fh$8cBCKBo&)aPWH_UZ#`u93FRfJ*nB=lmQAt9 z9*dVsQnC4bj6B@TB71hSW`bh#=_QTnhgV?sxmu#1#`Hr||CKfsyGJjnB`zvLhhQSA zCBA+6bxA6AkBrod97%w=J2bX>p;hvFW76W+&NHtU@oT4gGu-)~_K-QA0od zQS45MRIEZqYCoht2b(p8x8F^_BfV9uLQb}=ixp^mCdlUb+elKe3OU*7S7a2%RzbF` z9V|)3D&%C_RRb-u$^8!zyF(hc_RzwS#bMl=UG8dDEu@_h#wf69Gei2Dah8WTzd5XQaX%xw&2zt zqD*HAENdGw>WaalaKIKEOSsGjV=!C`xsQW9V-4Y2K!FF;Z^GHCW4L**pcgmh4#LmZtam#x2soq%uljW7v1y$xM~0h^ z0pQjUiPsCyDRH(Y8E)Pu$?>jbzV+fO)=Qi%Oop3Zfamzj^=Tt-T5r&kP7%e> zvDL}&<34>irvG>d)?Llfb7T6hqVpxrmMFu`yEK{g#5Z?T!LkvxjKs<3PfDDvQ-+^3 ztuUKmCdL#3mPh#wQonHXMBWSAfWBv9$Le?nv$8oP{rKE)6WF(89Yk1^Ee)TI1WF zN|LQ=1v&J@*jXUw5;*kO`yvA(n`}iYNbTZkT8v0Q@VcPYl{VR8RFMtb8+kpI1*qnTKwItaRRFP8#zhsf)-%OAsTYV}r{S@u(O`B=gA|%Nco{F6G zB4s!xIlhHhb2PSW%_+#l_g*-S$pad3ZDn_nMH9)^i-Occe|!}-?-Qwq)b8u?me1nH zNbjc9e>#3M0_l#ijGEf8{reAO$62J|O|j*!HJVWZQi@sf8~s zmyTh3NIrxwcz9oudVpn3ny2Mx6?OP4Fg2Aq~;9`l)nbWs#G>$Lv1B*;_rFX}Wu7a&P?zpH|*uwr{RkkyH-u=s_Q zk}PaK{qzYoE6v^lg)_-Yuf9t=HPO!^59|ln8e6SOD<{^H`S_VCO`Z89Sz_kXNG@XOaH=VUi?QZF$;Es8YPt zD3Gyav&!?==z9gi=H?MkC8yquw8+UVznA3JH=jyY?z+b!%l%`?*!HbYB?o^&Vq|(d zu&`U&+;Qot%SUpNty`Lp#SLjgB1%%tYeNrLEf25f zkiDV%QwG6nk*hsjJ+*UH#y}ft3r~-oM3L1bnKpRy%+xx*hPBZF$6GnSUe9CldVpCiw869&h|d*)%&;kc_cHhyrcnBj@| zT@eU4UjwXToy?BGy;RC6Qwxg4nHMf;dhMW0jL^U0@72qX6Q9`ZJ$y@vTKLa3=++E@@ zL+{K+dS}chaOl-Tt0bvdeT=L#>>tWNkX<7K8So0t0ntxI2ExdyWeW}iNpVN3TDY8u zJ2XOy41|%|-2qrMt}r6Cn~pGPldX8JHJn`WFarHFSL=eQ`6bB~yNY~oA5`4fA#5&s zGggvpovX;@i5MXd`R34XCCQe!id-^vx<$^P7$-@#x>aQ6n~1L-n{SO1QIf`%Eo=pu zxNRCG-hWd+6W47hC2cC!G#gv}#s5gk9uTS5x!2c2@-_FEP47<0fAQ=N!s^o>QB&bt zGpH)|q{YJ&ZNtglp>SdaksFR&ruz^~(thzUQfqOM4zbn|sWp4ani`75!^okRK1JEn zm`C8y)2ru8n~KH5$U6NNfYh^ytka{zSxG7u4SVjAg2u$i9by$#p2=QTa&*6iU06={pxIKQ?YnB z`NjubEpqx*OGXuo=P@!G%iLr0m8=`mreg7Ma&9Fg6dv-`6tQJ^!s20M;)kco;;Q^b z-Ar6PqO-KASUf`VhI#|y@3@vo7qv6^%KfwW^A&1Gyz=g#Kg80)pS|dRBx_;+Yd}O| zHZmFC_COF*txDn2t0Kyo@vl?sH!v1r2d_6dcu{;}6aNZ}q5;2&Jg$8ViU!mTSNVQ- zkJC_K9rL1rCjwi>T;+!xfiY)3!3+$k@DyXzL2>y9Xw>(Z zcCCrjOTY1sBoz|JNbQ%V$U=>sL~2JG-;|_6;y8JFY;Ta?2=c^hR1X#XR7e~rPsZ-H z$fI>d21?gcA#sn9YtCEb&nvG9E=`y*>hrdk+nxf{~Z{N>E*yb(890QOQnxd6jdoX3&2scqo-j6#11Ix z)pj#1(q73Ksr4xZhdkem>sjwNNh*}wOBxM2JcI3_xMRa;5ZM5kg6XY7$-Sf&R(gIA zyj@KF3@di{J4q^(oRM|XPGf(lpChtP%Ez50sZer8hJJOw6G)M)hHia9Xa5?7Nrb5XX8S>flKY~P31tniU=e8sjO3q0A`G);44_gwcKRfI#Nh*|_ zk=mD?ky?9_xGk<|Nh*|_liw7?*c!XYrnc?x7)dIWoReQi(*ci3Za!vRPlb|m@{3Za zfOyD_hYCoW3MJ>{j(aq3O`Dtkp;K_NRuoF^C5<}TM(py;d0YFTQ^Y!&2?{0ml3G~g zx;R{qTr@yoEhe^?HWf{-HpfuJl_6&PSjJ#rb5XX8Iri}TS{N+hTrnF9`Z%*Zoo&A^^i5gUX?hLb%y`#i|a+Vw1>90 zAY6Cur!R*I>rC4j{*N!N?YbI{YxX7K+WMZWCC&t%;dlM;{gsvjH#7ZDPlzfjOY@iU>!2XUflT!w1*GI$p%KUPr+gbG~WxQt3RCe}+4K@!(UZ z3IU%%c<|w|B3~lwECw(NpQ z81DCT7s3C2JJrIkw;V5V77`eq%h!6y$Tbrs9uiy4+5@q;!0Xz29j z3&p`Q`p$y`!=E*AZ+!_fR{tL&MA;`th@j5+RwV{r5hnb;J=yfxQ9r?XCpq8L+2ki0 zI;sfShlx*w^K6R~wI=BX{Qs2js3mbC0T8%tm{{+NYeOex!n%2{VoZeCQxI++Cd|hK zc&!@^V#N1h&;-In?}DPZM7VvJFdq}(#j#B4Pl5Ba;1R*JH&`Gkia%ym)X_F>`+KYYUl+LopXe9gj&61NW%+kNqn z0}B#?rw|^p>)971ZXYJh#}%-l(<`(Zi7?TMaQ%fsn#AqH#Mi#owG%OYaLv9ZTszqQ zh{Wx~#4bPl!u9~*djx)LlPG-Ab+-=_d;IXME5$ARP;g~w-9Ak0^~V<*7XDMAITE)I z6Z`z|^RHkxES+yxQ{uK^BK3P8+^Cc1{BGc4&ezFtYQMy7!$hk2pa^#1!um$u#wEk< z1arRY-y%fP(AkEG)E|AUYr%gMpfE9u@ZfV(=wMyQg>9HfHJ>xVtcO%d#O}t#L&}vA zr%`0xHcX@*_Ot%YBxIEy>pMEh0+%`<49`m&xlHRO| zg{K@TA#vL&a_zT1b1)DtG|J&yA)3H7>$?A%FL(pA3t zm;Xt3nDTqWPO9flURKU|^ehT8=F>F8Pc#jbxUKM~6%_8U964&yb1$JE*uz2iQ^x*d z;da8G=J!-ZZNP3S%!;_7b*^MxNn7DhE8=6_XwWVBC~&IL7!8`l(EYq(8rlkfS}`A7 z3k&@PMRW6zJM5X&VtYZ;&{p`X{CJe(EUw+1wM!H z(05~VNZeNV(@Oi{@9)A!(p2uyd0pyB+*bJ0{GO^9vg7kAz(W1kOw-x?0zo#l{Kjizv!dJXiRN}V6pXT>eMeV20 zJ6ZVZiuWaMEBtAGPgSfFSQ!V)=A5s6tBjSc*b0AIP2Xt~7Imv0t~*ZCA^Z*FL#1_F z;ZLjWiwB>12NzDCPI&NvoUJ8pEBtA7eesa8P2jwVhvY5ZUE;RFpBCne2Y)%CgT#Z^ zykkXdTj5V@;D{;Cw-x@h7k%-NF|I6$hxET)QR243pVrvK=^w53X8Cj% z1CkC64F&bXpXvC|eA(84>hUaJK0YF9NK#Dnz@U!N1BT&&DXrrNB?NgYL=mwg6Qh#{ z42eln1(dXK%dNC<_?Gr8z2TovOf~N<&P(3t{Z3+mIFR1p@4ZulM7YS-!Sdv)BM^)V zfOD0fa3nu9j?KSv8{&;aO)FlA!q~tpHXuR&Zj~g9L%hz#!giO*gQn-h>W&K zZwOM5`m)kDVe?0_sV^?HPm*@gC%yH%V&uGrjRqtBYz}+{Xrn=5uS|)v=%X+k)}zB| zm|RAN!@3?AAxRc^6l9%u_SXSH0j=N({8ubJl?Or%IMtXF?$ zt;AW7Q5e>4WA`qT>znRvlC+C2>21t91UFnDXJz0x*M#95D~CwjF21C_- zxc2Zm#TT&(?BYv$8?z4a7@mgNVOrPzGjd7XF21CL!F*D3rTrS`&k7GD&D9+sFuGYsV?%<8y`WhKc%i-HV( zr1;ynB_8tpw^Vf!17;Uh(%aPX!{>LV4ZP@k$m^?eOWZE1q_;8ekoI0KJm~gvOGvfY zPw4%}t@q%3JMq|{KWQhC`VYdRGe0hZt9)`PDESk`o9zOczEG1kqu7i?yo-EUQj!Ys zW@Oa1u+Px@jYLLmoHf@X?ZumsddBEdu(_E?E&jk6N!p5cn*=fJUfgI9-=iJy<$#R_ zLjzxxxI(3vq6d@<&d9_ye)0oig%m&J_C&J zkNi3s6R8au)`Ke}(wi!;6ml4K?@tWc%>v2;?2n5yK5_f#9V=R z-`F}qlJ??#$9JBDyqMlY;vqE>I!WAKyzlwq!AHu_iGykV`#i}Kw-@h!eesY&MGr_k zBo|UK&w$yB_d`GYwR1-;e9CXusM(A6BNHbZtGrtRsHXk{#x4t60;2w^pJaY&x96-t*JSh)=9c-}~rGzh}y6WwdzA zwBH3-Vq`wFI}Vu&f2JI_%OaLmD!eVoGbWkyoFo;(z{xU2$yt{mUwDR!)nqdpvCiN9 zqOVbobxJh#T=kaHiKjnJ-7K|jfJo&5-j6D*(Q=ygnLdldan=G_7&=;(Qutu zA~d#&aL-8X{Qfc^VHYoagHGC1gnLFBxkrbA+(Dr6%+3HwD#AS{XWaT6Oh-XZ??#!J z7$Fw!6=SP+tlt2UzCDq8`>_s5DpmxuslQsaE^K})$f?PbCCMVa!lqW{w{Jl1CsHe2 z)*4$Dz8lkGQn07cM-r(GI5k+3ih$0pik3F;HF!HvkYl%7Hd#Pd zc&nw(Mka3z5M;_Vx3tM(xr%%x;$w@PJman;Sr}K4`o`OIRfJ7_Lug}3vIwpszsNdd zkz2#wl_U$^3R0`pH34!PDEe9B6RL>NRmnym@)zLNy*5CAv4g|~4&OxOIB|j5@eOx^ zYF%sSsdJUVm>V$m4>%^x;8i^Xc0)qsY~6k~9j;Y#>R605hAp z55J1jjzGva`nms&N0L+sFe8n9`EW{O-oa+2mx+Kq~1b*M%q*eFej(Z3&Y?fEk(lqrWC#-irN2 z?o|uUN}CD+W~3H<1BX<4k{F?0c{fT@A;6p*vlf}0M@AFV-jt+5fH^t(3d$)4azVTj z7nhc#LV!6rF}Z|Ajy-r@k_rK4q`uyHQj+=y$FE9KA;6s6@+{V;>8-v#&blfJ0TxMb zG4IAHC)oetETzT&^(-Z*)2Mj<*aVf#3;)a?56Da7ufKi=QQwh6{C&o%ZK|X^ukWL= zw9q`*5(iu(P%G3VgGO{x_LB0>1z*Le;CkRyy&)Zt2~rUgSkTu`_IL;62?F(fyCz6d zq3n#*LL2-E^_fYe_Iwc4TZB!8vU4)3lDmSQVsk_u&Kq@&%^!tfJu0q;j% zJ}gQ0lY%^IGEyJ92qWYYX|CRV*K$cJw33r62hhItJF=v`GH&o5d#iLay`>J$bvFx}6?mbPr zE~G|qf9LO2B&k?-jMNIWxPZZ)L8O-JKg(Oivg2g6&uPdEK~^4kLfTX;J4WgU%RwZ} zdlmJ4qr}dDF0f+Raq{J_k=VFIa-(ajWF)8C{`#j;~$^}ov? zoj1wqmy?%DQnBn9spWl?2V>iYyw!59J|#)Tvg2gkyt&as+zp3U^)<&OsaSR*z)kc9 z;0P>}Q}DSUZXw!+7A8_N;$>U8EdPXuRMKx8b{>_On2?mL-bV@h=Ckt50Q<>b!!ePe zb2M=AYqB3;oBr?%R{9O$YvUSXPVLNIfE}9u7Df!c#%ti^C>k*$6)T+!)!#D_=**uf z&~LpewlPF1RyrfK*6BrYeX%FUD`MpmX;ZP%IT?2a#ZphfbjY(JWRXq9N@rxPJvHWH zP~Rq#wRTRsCv7TLIwSQ7-yMLroru&^JJPeG#Rw@@Iwyla{{$m+M39wF4VR>1rE_w9 z7;U;f7UW0o(fP5ksaWZZtZ}**X0g7W$Qr+wJ1I%UO6TOmCEcaX8u#joJHR##j;}( zr~lc83WXvg)_>nOMcPy>J4R~ZwKid}X9;g>T@8_>V%c$WVB87}87>uGJsVr{qF8o} zthHlc5e)NN1lIaINMxtfPsOrhq(1r#G|}}Ek$QYVsOS@y9VaW^SdI}wzyn!gzbK`W zO~ta~N zq*`QCvFtb*(HFZa5804z1~zRfmK`ItYKwz#_7V-_Fd!(IDz>**+Q^7(IM+?66StM!}Im;>N)k^M5@hy0S0&>$|T{ zgZ*5>_j=Lh@1IylgWfZx{Ju|@nelyIQDU`cr z?9GQ*6WCDveOs{%RVeouqb36_TGKY2nFLoug{$lKT&9nqE;ip@V$8<=1Hn`k%%|Po zc#1^}bj{fHSzWmLqHy)AVn@kX?#H|L*xr*q&t>77YxYBA5Y9(r*Y(=FRA>>nLdv{K zY%JYJ4;^xmlo?C+b7L^g~G& zD6)?P8TdXc2>Fg9Jtrd}|rs3h4h+N;Q_)hk6$UM9qQ_VVS*X|w|O(0jdn`!tqacd&HQ~oQb#;&Y(sDKM$Ara+#0&AdVKB2^-Z=! zLc{`)E2-W*sLj9Bh%2`48H;?{{dLCDIc?g2IS$ZRI(5@+Nh;Ka*>o59=MKEZHOK7C zd1JRE6>7ss?YAbGRzH7AsU=B;+Az|wBhMC)#mJ`Piyo1ZRHzLjjiuEdg6T`7v2b2B zNh;Kakpb(klUw6~&q)Jf5|a~>+QyE=PJm}#_B!F3 z@y1vZx%#l}nlYpLS3;2fN5SeXAXBjBl*GQtQAKoR#!kv>$D>-v6Eb^8G}oBl&Oopp z5a~(|A8e6N7p!H)c7yo^pt1BVSA9ulL$FFtXeqsQ7ao5|lGzZfOTV86SxNNsOvmby z%!Xj?2}0W7C{Co~>mRKV%7$RA9J~xnKMgNqS@|~7W;O)ti`UaZVv<9!Hg2b_ytpda z5Ui4O-vU{VNXK*4yGSw{g7w@FNakFN02+(((etlOo7oVo_wT?{^TsRfy-D9oG8=-` zc2Ne%*U4LV3x_p_vLRUC2HgdDj!13S9=c;dj8HZN>*@zLF*XPYc%8oxEXiyL*1fZ+ zig?Js!bEyRYb6_kb&GyN$3y<{%R*^08-lgr9Iem%vUrj+`lKGcMfbqq}yOUIUKC);4+!`f&_AIJE#p}9j3 zQQjoPB*()m39=0)L#&NP^zmTdHne-mA6nzFtLtRh1`{OK2Hng!KGwGl$HCl`br+@a zaC}^Rlx%}Z6KkU>eLT#!4ddg}S3vinHjLMb7nE%$s&gqh5vra*3Zx>DlS(d!jUjP1qB-vb3kd6h1Uj$i*K*yUe zHkTxuVG7bn=nM66^dQn0HfgIQ*}Qs;q|e{BE-D_~R&}d%+4!dzRfEMveR>>QxF#2- zgKIw7UAXdQrX;fw$6|LQwbDgKqs4r)PLkP(W6xBMgt_U|S$Dv(X_CxF92@uFryvn| z@fxemkz_XF*uqh_FhXXnbM6+)+ib+KRefKu$jsCO(q=Z|*gLiJSmgX~#SWXMeKz9Q z%B~S0Mb4=&eN$v^AhQ|AXos4GIF^V%pOSc&_Kjl$hR4#cs!-b9O#Bu8GGX$YgktaG z`z+yq<*Vxd1&e7VdiIdD#$~ zo=k5=&N$Mi4OCHsDdE!5hNjJGNX2Rq2iZhrZM3D2NBOql?%F0l+IWqca0eHmbAHhV zo3gA8QGOcZ+lKbjgwN2%8EQjYd4RrnCfZ<=m$lK6J|64W#=V-9uu`U?X?w#<$~M?E zW^K@yj>f0?wxQ?9{jSx<(LT|#4K|@!8&UM}c)vFE;_a+9_AVAdJNM&Lo3%j)m*dm@ z+SuOjI@-VzfsD-gMQk$A2A||?k_bucMh#6e8}c3}imzayJq$6OWully*K0XKC@dK?-gvF!3(f~{v|;XT z^?(x}NSuW|hClCX-EnyaR+*zDS$CWt5h!sM`xsut7dN)O`6s~sgd1C8MK(%9#{wY3 z>6B}N#+(nhGy-58nRGGSeB=$o9eqV{MWow~E>5u|$U4(2hL`fOZY&CY z$7{x7=sbA&kHpTDoM&RhaPyHj91psK1jK_EXyVcIWroOiCeI(a34P7&$3yHW*yxhDT-Ua)0$!eQZF8@p(z?C;yzYxTj`e5? zya>^b_uD;`xV`+$@x_f#-|hww@{7(-qo>ZA%55({^L+7uA7^0+I;s;MFlG8P61SJ1 zH+^wOy?ELYqB0EYCwjataeMjs$_FwBd|Dx!b?%<|1A(LN0{JP`Kpeu-b+?xv^J#?)*N&y`0FH7aUP}i4Bdy!Z zkNLDhhU@wOiW?mS{^ieAByKN1=F2Up0?k0$QTd)#1m0?k6MpN+gHSX?~ zx>v}JrH4|+1N;@VvGmJEbSsO%?X}DNVRbLAxx4P~3g?5#y1Us1F^9>zy>^*Dtj=(~ zKu|T{wC~b%*C>(M6K=0v<`1hg+;Qax+P#+`+;R4bsOu7LuU+O3t25l#elZnbG~vc) z58jh~x7RN7Nr?;(xY`q=?x;g}z^^Ze^nt9~Ygd+e^}VGB$AIr3KBjIvUWy(lt=nst z@3b)%RdYdkTp8s1qVf-al(@Zina^=&&THTOhT|pk`M%nY+FwZAUc1caxHH^6Xl8xj zZ&2UeeLokaN$R`3c3txAyLPh;qNRZZ2Cs9gD@yD3+I7Vj*UJnViJ?Q83ezU{i{fC8 ztlMjs`5brVyk7U=Hx^!|vV|8cGEU<5+V!U&{$qvDfEN(X?>!Ob z!4=v?5fur$sa>RZ{;AW(wil5)(KK|;c)46->5jb!-4^XJA=f@|z6f_{8>nf$#+;V8 zed^@*v<}zw$R&^;9Fo9%hj@`X(WS6YoqV6xVJzL+4uuxiQP9THm^s#!w3i>hr**g+ zg@(gM zHh!Zh6_a&a`I$hE%XsXR$KCroRAP*oL?Tc$CUOECii*RlB5flhb z=WXR@f*H5jlF@Vg_6S3VngL#)J!@TeTltw_Rx3DO;$7N$nfRV6)`GQ_p9yBQg5%G= zhQhODJ&$zWR(>X!)rvpq9~s^R2ouLi72PaPv2!B+ZoX^_KV{@MCF5g~&D#vZ;|C@s z#17rNcsjov2Frw!?Ex9F{^H%RIahBroM3z2jB z!7qA>Pi$^ODByd~>CEE$Ye5y8f^*Hx(}V_j0#=yKhSD>tzxAbl2qKx?zL%TR^5YHAIs5GkV7}jkt9=46*;XsuBC^ZTcC(v0gBkuC&6(~ztkn|E9~;h(Ho!s427spl3j zO$2j#{X>-oN*~1Mv{XFS$;N!EIZZo&13=Fz)b^%*MjyYa)+rWwoF7hG2er9`rZwm4 zT=XqSleE_M>UV&~(*G*ZL6xwn&?zsexsy7g zu56Z;+{2Q-m!v|c7^w%}r~Ls66u90M2VIb)LZ=w%DE2#5MG#)`Ubx~-Nh)-Tk@{Od zYyuN0Y|gq9B1wf#F)}dkpBN!W10n<6<@QQap;L@>%pBVSWECPEljg0Eq(Y~>q_ODU zp%7e^On}Cs+a0OsAg+o+r@W-5o!pH1W1s?q*YU$bRcZDqbc&JgF*RNT`6hwxkqL&h zsn97#>II982YH1^J=dnZl2qsvC&S+i!`O5aWc@TMON)Lgbc&N*ix#uUc42oVsn97- zwp~!yBAZTlOOgtm;^c*V3qcka-kzwv%0sGj%IB`r%D}SzkB8rh(Mi#9BgNr&NAcIk zGcBo1^#7XsVdk}Vbi!ZoT9kmbujWxMFQN#`o4oa}2@6t0BVIXkZa9P>-E@4EsQiH2UvN#$?RcP3N}U+#-LN=?55T&zV$ zfx+n#XKKapmA<&X=sqP#ZD{E9SEq<@KnX9CEQY`5iw71;qT(IONZ7wVs!&y0XS&7k z)xNl6?qAe*nzfo^WX}!~XX3^14}5TA(Ze4*;=%yJWcU@OSd>Iu12vzTw^zJmUtE9bSEPbwu+ZDy>Me15#T)I5JL=Bu09@>n95rgvX@?kjd&Nuf z#q|%qKM%Ye4W0g8`bvr0D_*KE9#}u^Kj0|0B2x?PF;(LBiZ{*|ckGUz0vw4K-q$pw zBRAo^z2Z&q!HtZ37iQwZEeCC6T(33hSBcvzo_WB}mW-af6#X{u64eJKcb2%l z;+Y5h9G?{(Z{ZV~Qprt>yuIR?2mBnLeDu17kJv*uO9rhDRZL>jgcO=n+x)=nOx#IGj)fu{ZP+#m2G9k;P@8I&#g=6u^`Qqm^k zpL6qIKpxVofC{o&v4M9%zE38r67gDrH%^jF?G&UVXegz2VzoL-x1r=p*knSd zAoa|b-T~Q`yw%@1vq6$f;}m3I>Baj&HY75zSo|JIGI>*wjwJ_>{+p-Bj<++ulq6F& zd(y~oHSB?_vJ57TMUTELDoG}4_N1m=ZT~%>oFEa9N7R-i(=!F>e)T#@847i{o|BJv zk|dKd1*wOO9s}|ZB2ieN$Stl4Q!y3UeO+OUP_dy3QLk{ zmx>(t@=c5E9Tq4_CR-}po&`hb3SbtnL(3utd8H%gt7GK zmoLgTm}apyc2gULeA>|5^8#t+iDH<$#|$guV(P`(_=egj?AwOkdQK|Z5Sfc!@b$IQ z52j{mY*#=WI*2Z_#MseRZ^p(d)p^erwruyW5H1J|f znYOVu=o>!iC4Jinth{D2+Q7CQ+txpOl#*>Qm1AxEKyAF>+lFJ+Yu})aO4Np9Xw5fd z8%*z58&o4pFXPjOk&$ya#?*zwcPL-={o7?5O!-(Fw985l@@WGP+dqStX8y*Sw*M>Z z+AlKurMGw*2Q5WyQ5+3d!1_1TsC?uZ^+wC_y*dX!xQ-w!yTL zwQ-W#2=!|tt`U-4Pa7e->1^3I*<)>xG^AHE+n|3r&?|+s$9@i-$$}K7;7@FtJulmx zYI%heHjN$`JAm|1Dj`>4=1CTLQp4*B{&)IsIHFBI8Hu;7<9PdBbmnvX?Nmp+oqY*! zXA0x({CvEfqknP^I+cDgC*Cg5rwVeMN65 zoTcBu32^##oCT-<`31dc!XtX4&@Hhiys!fOyVsft__1Jb}asT7`Aj^7kz}_`Bf~38S7Wnd|8Ioi&t{@$^Tf0DtdbQ(bp#zd+;%!eF85Q!@ z##Nz^Ze)~ea#xZ}vh7Jtf94cso*^c`p0f>>n>j*Es1>C9{hkQjMh5lMy=v71Nium> zkb3)wiy;3bQg6Ek%ha^VL|H{HJGBEN)JKpRqhF9DlVTOQtu}46O>%SCKuIzIR*`Ea zBfapDtJW`(q#{{mE88fX{uM|uVV&=7I_CWggVpXqogukjy%{Yd#-J%nt3JI7-?@Z?s$E4%5e& z+&q1iEs^fAq}8=3VFmn#;^6)5{{1b|UZ)tT7uf;LaQ;9f{{B#s3Z3$jMrP!m=V9#} zKqIqxo|h%5&?zsexwo90hufowu#V5>}#8`Jev=oBLz zXaB@T)7;27jvihiZ7OuiOBxxa3pT}7d6%5cD85g`9kQv=DKDw%0jUl^dB|JcXx~oS zROl2V-79_`4ssEZ?xmZzNm8LxjMQ6Q+YIuCuo>qS83z_6}{5gR-EMB&mWEDjw*(@O`#{07e9ot98#RxGfDBeku9#fVSAAQm8wnnMX z^k2JrlMX9IlxG=~_uwYotb(%cyWS~_Q123MyXI{fCC9P zc0}BgI1?|1XZYfQo!@|(I2sck7`~hi4#ah53dZoozPRJcpgF*i#Nhph!eb=PWQ^fU zeQ+bAY`rqLa4SI@8PAspkvP*bhA;EM@rcVIm@WS?;bb+mQTTa z*8iJwiQAMD;^SimB*!Mi+iirICu_Z)P@yV)ijX&vTp3k1;N}{06KItA>Av{HCRg+O zj>gQM|Gh==8(neD>=tmF+Wm#}(Ox@QcB z3W^$ z11F4*0@;knz|_CaN|I@sf^-&rmllOZBoOuAI$*L$fN&<~)dZ+|^ql1#N!6Q9UP)%FG#WRPD9cL#nbeb}s8L5}i*p!E|Z~?_D$7Bn^^IC`5uMH}3oeq!YSx zE~;lw6bVMUHiXrHIVA0P|0uw^!0hW=yyITd$Q)US$O{0C%pqr|Nt+6h@RFMQ^z2}G zTaRqIkL{}>Nrgx-QlDCc0-8vH_0-IKl2nKUBb~YWrGhL=Hk|=Ak|e1R2}T-ctL^|f zm`LN~0kMsuC7=)qMh1>4)E*>~A6(U;k@KWYg-9^cnZGmc?lI5LoB^H128?VfM8ZoN z8Fd@{jH|MWoXx2IMNfke9Y4yEj0*i`5fw^?owy6OB~*eshx356iphL4Yumoze$ zFZvqRumYiMOE$ePNrkd`NiFBIC6Ml$cR=KP=8-i*3T0!YzIG$h5Ko%-(eIW`g|acy zS^8!Nkhn7F?F(ZzNpBU(#z^Ddt$84a5oz3wq*O$VkV4rQ8MyNN8jvlB3|v-_?z#}9 zLfIJUZ2oL5kV3(o;j8I*RFDc~^O8nJw-|Wpf?X(E*Cp#EsZcgAsp&PA6$XU#60@(m zi`J#EnT_=4r)!xs35awbD*U@770SkKj_r_ER< zxQiqe%Em~;m`@w70m9~gEhkD+p=^xQ?>0Dq{G5ng|acyX!YDSkPXSE(c<;u z9x@y0kH5U6to{kpi4NyoGlw);B%NUL;@PEH8#33-op$(QWWf*HD1eq><5S-V9uo56Ib! z_Or#xrx8-kp9@<8OY=@6Dr-GEo~}vijnRE^jKPBDUt5IA5aD+=B+}f7^#o^ z_XNnlh0VliiIP<46eqJfVbwb@8{qA+2y1K=I>pJ`<&hJ6$m`ozNSg|s;^dVq$|Fph zXE%ztLu0GZDMlJi|0o4g%y^^mC@P-Q2&r`H@#49&IQp1{v~42(Oviub%eHu~`oaJe z&pUda&Hq1_&h=7*u;NVb_2(8ulJ}H(FOLKYC5#Osg2)+ZWf@L@fa>Hk_0JhWGWwoh7$D0$z^#?ku>CDzE}) zs>N{nGR0$Os>VMvLx9H;Zd_|6M2{{UlP-o2@Wlh)c?UZN@rz$t;LP=O^OUg8^o!v! zzPR(nV~v1A8sL1D)Xyc(M2z8seQ+Zq>V3L!@00Ht&EEY(;!MdH9_xc^dew+6AoG)T zJ?I=hHl1g3#_(ajxckRy3xMO|LDP0d{wQ&#X$+6^#r07)spbVih4o>*4ojQ~8^aU) z@blu~jL`!Bu_x|ZGM#7Y#_$n-`29S)G4dvU@q(4aF^OZi--CDcKL;ML@RNg=Nb5}J z7(U9hPXDN!ce{yH+R0Uu`7y@phuEjJwemF0c&YY%bVzIfjmY(N z#V6S+oG+wr_yxAZb#Tp`|DA|W2pHMfb5_l|2a}D(6%36#O~XSZ(@dEaQhO|?b)Bvi z2y<>CU8kD-WRYIEv?q6l-P zEt53`8MwX3I54e<4E+3*$XUr-rf3S%Ilwg*q!4mvpEfu%H*GR8vnP#=n4kW@Rrv@e zjf{aMg$$BSrepS`rZ?OE4xmEhtseehfV9aZOhLMTPy7nxaw6ToT`46=rd|qCpSlT} zXWS7sUuo!&Boi(LX#^Di93vD%q+!%3DM_YTDzaqb=Pk0xfDB18xl)mZgWk5t{1>hD z$&^Y(Ms?i@Qp|Xx(^)waxVAh-dT+b(FPy)z9|94GZ4^Xe+SSU^eYSJtO|i645B_|u zbV4s*{GKEgBEd-4$;hcNmxBh|b>y7bln8mT7YQ$EWNs)-(-HqcBtAH}RN7RCgqPHE zmfm$2-U=1X`Ft6RREPv4^{q`%`t~G{8%ELnDq_JZM1qmd%1e5KL@b3!l$$LAA@x%s z5{z`@YKpClBc4cyBY=*NpCl5D4BSM&FXm`TWZ*|%wU(qpBpB)J(YPPTx8dD1f|C#PIxs>51^M^P0BKVp5{xtoc1x0^k+XCU zNh(BwlX=?Zwn)d8Es|7-gecH0_hvFK^f46vW?=`Gf#WQ@-!tgH*m!i8pYBPy?18>AkSkKdW;omIFSmCVq`$Rm$t!N9vZ8Fyqn*YHlJEN zH!^SbK)J<52QxNmeT zBT0ouG13{;7xTh=42HAQmj@)N&?rVaUaYeWBsQ3MZxDZ8lG#XP?o}xQh7waP@b=|h zl2m9Ev+2yNy9}gIapybj#0sRbRcMr#G%}`E_!?JbJxm%IQ(i43Z7MX%OKN&btwn%} zk+=Hjl3z+vp;3&?nRofWAXgEYGxx9Il2m9EBlS=A90&P8*j!tV?z|E+UZGKpG}=A8 z4((6>EKk53XS4qN+&82^re0p zNy|hcgX{T!N@Nbs>w@V7M<5d4t}G~>P>2MRSUu_z1$eRS^bQU2-5b+=g-9?mAorOg zFb9E#NCe)#Xpv7(WUkij2=Y(rcjozwcO9vlCRBo!jT$ehn?KMV3bB6B*wnkGqwNH9|WsM!#ZkQmr}Z^w2? zDnx>jMzb5UFha3J8ufn=dr*>5g-CF+&$+o4+2vq2X;UE*ob0^lrbV{dVXZQSNQgw{ z`s0aANw}MZLx(wT zC>v9WTwkb43yZW@Bu2(A-%H(`L}cu;7y3z3ahB#K9g|Pr!%7Xz0_d2WRs9u7DzwZ? zYJ>k;5e;ugfz$@yI36WQg_bcgqGuxP8U2ZjczG4onZyVcGA~bV`v1lC$eBVT&d3f! ze%%7{b@~?_2L4k}e}FZqp9YSB-Hma%@OOdaJV^EXf{ePqUeHGBN+{hw(4}KaMSLP3FFdRP+8TUed>w5Nk>Q#wvbEUB)<6Gx>Aia$#`81pH-A|RW z$d?~J(5(YJsaEjpr(DGxj$1s<4b>cQj!YIW@Ojg z)qcfH5J_`aclW)L+&tnb-fEqD?xEQy$j;r@8Is)k=F`Zi-->OLWYqCeA4+oj)~Ay9 z15ms$ZARU`_OB#&TzVSWwf4X1lI&XJ`N5LhwdHAKMtBZ%H?h2sRMl9@C3&3C?C8ze1Q zt@*axIV7nNU`FeecdTZg#a^h_@buRS-aK}IegwQN`0Rsz>G|pv}YPF z$T}iZ#y7H-okD;anRKX`1LTiHCLMV8dudZ4z>JJ5R_7SV14PC>H<5O^!dry^Gcvx# zy)u%F4?mkrk_rLlWS9LACDUen$AATrR0yz_bj)fUeiZZe4LIwV72#YbNreD=NiDv_ zFr1C*pdrA8oHHe<5MV}jbv+k|nIJYKT^^pMx{eqjg#a_M^UGtgeKN_;FO{Tig&-9I z%*d$2pCeqDWYqq~?Io!YU{2mlecvLlgl~|fLVy|BHKg`nNp>wyzae3Is}NvHwHnWKe5(5FWb6dOZg)Q(TRzn;rOP|=-A}3QA3hqq6Y?bj2)cvVn-%MC!?yE6y*IjUYrsfkT4Hv-!D;c3-cKw$zZCZ-IPpzI? zd}4Dd>K_!6rXZ%}xDPNOGV!vwjLWl^mAAaL5yOHgjG)k>(PSDjBD0Z|ht%E-@>L?& zS31ziBJG0$%NJrloG=~ToI+&m2M3Q!QV|rqq+{|QzwO83Is?!#`AVDel2il*FR2Z2 zxA+p?jv<>vT(t{GQV|pw8IiaQ`LiJkZb4AUy6}f26+wZKaa9+S&4Wb7 zh5Skfb;4UkP+(+yw_#XdCK=zg{S`?nf&wQ8CQ(ojHsky6-YrQ*Q1FtDS=|@sz`UIY zXC1R%K4Q%wMNsgPT70$frx6rTI7Lth-M3cSR0IV^b`9w;88bo5_^y>U1WHm76d2h# z?&BJg>^$t&cu6XP0wbdy{=8U{QTL08KtyVy2nvksQg}V>V1>6`3YKXmZ7PBSBfEBe z>laCO?Oa}nKG{?R1x7~B+p+)`q!o>A4I~t8c%Bj$?X2fZuhB zI7&7Z0_-InlP^ubj){yZ3H;npI!_hLP9eZvQX8W0{{-HSCYyur&)+IZg#a@$V%T%v zf*e3(M8B_ROHv`gjO;La6vBo1qjVkOtHelBA;64m{_9soLDGWNnjbnYGGrPdg#a_M z&*GnG_tBroKC|LtrA;Ql-dm(v`aQ*b_{TM_daAYB@Kxc~3R0*rGn_KN#ByAfPswn~ ztG`T6ls)5M5; z=YD_jiA~0y&!>*At@!phvUU9dfh)fL_!)G2asbwxLcG0EDV8Gv>71WenOQv_RyLS(M=I*Vh>!S@`fN40fX7>9Z?8+ zrk^L9y&JhPv?i&LeJ|;lQt;ngSgk}lrsQu#@(h$c039bS$Sk+l5UYNV)j#^+l-8#u$v~l zAmh{W(0#pPgcQ2X$ri(Egj0-#8;8M(IL0S}pt+|Ylie>fJE8J%)NZN=>4KT0Rq zQuoN9S65bK-ls0phF)9o_IpEBx+2emtOe|`PBucU<^m#LErgkpgVZJQE zMxhxj0F55-Qz@*7-^r2D-RBLLq@q5+$k?xHA%${GB{FvFSc-hYrb06q*}HV()#&_L zB75hXM7v)>Dm24OqNLEfIi+ zBRl*{-y}7EF0aG2e{dLTk_ydW`iLMgTgn+nZfWXgv}zeX1~k+&(U zEBq`;g=R1^>7RR~Hb;m|x_O7vQ(;q~8H|i;U9T$0pNNcWc5#v<6`H}w__!|&NyZOZ zAmR?qK80p*G9>|5#k3hea^xauQ=u7*jK0&nEap&W@;3TfO@|~En&BlKvqsfNDL?Q{ zfR0(Qag;}k5mIP|m((IxcM1g5hHOTzNTeM%kt)q#-zjs!Rl>4RnWS>j1pH^dY%7!1 z2PDLW4o*lIJUk{;COqcJFCd%#Ckd~e)$@8)j8ZW0Yk7nCL?kcCi;geo9N z@6r?qz4zWBp(YVjL?I%fDP4LAQbc+QAV?LYD2P%NqzD4dM0RedmrkA0K!Kub?|H9Cb#z-P8-JOqf?# zRonPT-kF=ohW+s zQD0q@I5QE3m-odRYQ~Kb|MylJ$F4SCUIsb46p2q z4_!591G>GAq7R*?(Y-8UfVK-mXBGzi|NLmb#F?=$yqYiGtLgcFfFGmi zy(;AJPLj-B82+v=-g`(%oO2WJ9rN`x8J$@S!)vC)$Gfw8@t)_qNSyf$!)y8CG5<}g zhpcN%jgPrjigqY`3lxUe@xkr!!{cI+b)SN^$9L!zB5~$846kS6^p6Z{o%BCC$Xoxj zgA{Bsa1gFrb2DR&YG5^rmh$6^cxw->PD=bWbgV87PMx(|@`z9TERjOR66sYh=&18` zHf+rW!A)R93ulUa9{ju!$?}K(FDu>#k130#x-MK`@Tkd!sYOIG4^oibE{CCbuwz<= z{ambFRFceo{FCxP>{X4PiqcREOdHxJy%eY%p4SC?}WOOB-wjvyvR+;1m+7W z^7B9}1o!scAded^U^oL$NAm@Q4Yh4t3h%)dmloM^^-2 zBpya~yO66onvVg8cuwSxkfcI97HN-tg?Jd*Fx%INXTD&#p=+dAD^N^@co^C9Y2r?Z2eT#C`geACrLGVUBZqFg z9EvUq*$v&)vzu(KLOhHdkY&IWkS8hT0Ouc~HlWrj#KXv5oquTx66X|BZyUZ`##D%h zk-aBRrnSBxdylI%L6QpbaPrgUwAMGtgdCBQREWnS?eSA8xsVA|1KH!pcc%M)MfNGg zBi2lV{?F53h5y?$SP(C67>Z33l`uuCKJm_En(cglRP|}!Ie%=Cd5fB#DbVFJ1!}gA zZHD81?}2pgY|S5EqtRH4v(B~-(!Q~S1#7eB8!#{uFs%kCw+_+=i@Ev$;9vo^8$d5N z8o%lJVB9j;e5sut#rWnyeQo-Hn8 zDi+V2yk4pu#ujs$G9l39EID>_%=>ZsN@;iznhBC{+b!2=65 zF!=>GGy8DUJ8p{1;^guhYmr$gf?V9QwT!9AEJkWA8m~lav3$m#Cd+C_QjuBDk*|M& za}{io3wKIVky)HztcIrK_TTIUZjXMn()N^1#Omy6vxpfJHN*RiOz*j0->vc3UoI|rv z!uLhun+DJF+xkkT@yF=n?|hG8>%9#w7}%5!VQb%hnLGx|bass6^zpWI$5_)5<)VSz z3moHX+XZo^j!Ii^~afLokHIHGfFVYta&GJ*{28e^!DK zvqx*L-9>tfMXN38 zeiccw^j45sgI6i3?~B&fC?KxuQ9oHytH}CKT4986(<%PcXwz86WT~toYn`p)CEwXV zcc_V~k0r2*tXqAXm#pggNRljVRb=fVR4kaSt^Bm(vB8oS^MeIVB&o<%M(QC84ucd9qPuRB_fTuO74lqV_PL$i%u{no1BjXc~X$|_Lr8V;skTDqUUPx3gy3`cc8W;m`$jv0#`oH1jN0At4dfFGk<;>W13@$bgDEho_@Md!j`v_nTU zePpIM@rfS`O8*w5XK$g_7AqiQ>iy|gaopHwnuas}j*)%`u{t*QA#FW(UYBIX`{#~= za|F;2H%6knW=us{U`bO?4!cD=(*IB|lY<)!l%!${&>}TwuVJ)CtU)oIUHZpL zQc)H#QV;PYfyAaIf*Ngqm!#t50gMdj`gs+QPzEN=_OVqZsd#w+Bkhf9wg5SVNPC?l z!h-0mC|(}G$e@D%O$8%XKtZ`jzba!YULL^6fP-Ju16hS)2K>-_kR%n3W0Cso*>U4= zR@MR3XMa|Y)&(Mm6x(qYsoAETz|M~TI>p5Ix73oP;^hI1bVh{Y`im}VUT2{KYbB{D zC>Uw`AulRj{h5fl^*-I^B3i3>c>p8zxXC(3s27p?u+3Q{sd#w+Clj_|+Ds#34|*i2 zczFOPC!VGf!HhX-)k;Y!ULL^7k9sD6Y%f|nC4c)g@+GFR^d|9ly^3iywK4U=XLKRR z*Cf&|^LZV~n0jOM?z9D`G4HiTVi`0`HS-OD4q5!Wdc~YOQ3yGKtx3Ngg z8FPF+T8lh`+q5n@N|FkCMev-A~jp=;g&d+c_^lB?C7VmwF!2hRZo^31=4L;Dd@5pY=qCJ_TB~pyM(RDYkHHA_BvNlPrN4}+a2rkz+dkb(4j8RT zQsFk79FP??Tw2WTed|h6;WnI%6JI`qY8R~?`)6Dlsd5{(^Jd^=6bE$?J8ymQdo=zt z|Mqtn0|F&%JYHWrtv^2PT)Ce79(bOSnEhXUH#4UeH_(?rW`#kzqZ z*7s${nj_CT?3fs0%fjKl|DzYTyoKSuFFV$gojHSn-$8JF?)|Ewgr(@rU>Kh6Wyj7= z9g3mxqB3zdf3um4&RmA!>0WlMYgaP^M?r0Wjm(C+7~z)KJw(EQC@ zGCK1chNpYkvAuTSMc{)7w^zO`?8>LaVR*Wi9S7w&@iD;qga#+J=M(;YKQMko#npw^L4@HyrNJf0<7;L$SYoGm!sI-c@{_&EQ8~P{pNNapwyubb`4W{@sj?Uydm|!)iZz-qN#=Kom;q<% zL96z6hzvMhysIRc)%hp&+4I+7Y>o8*_1SZCh{=)q`4W}Z>^@%sdV^xxW;X9DV={yD zA5(LdJ&_D@DUr^|KOB-|-liaJhu(=rKMB-q`#v5kNoH#bQlHuS2uQ565IJ$g3Q00Y zQ<1aBKK7EIPFo;JW@ajKW|@s%GVy#pNirXMj-=1OwJZ$N$N#JM^ozIK){Pm~30Egy zU}C;a$Tr>b3H{rrv|rFwjM~CvQ{#TT%J-^}!|;q>18YJlt{L&gj?qQ;*fY;tlkY~V z5#Q>aO<-`X1Wc*#5=1ln1WUJcjUWDBGQc(hY%@>n`(VE11!9_0dwXWY4_?p$Ok2Uk ztbaFyVAOuL?zZh1NWRh>v}Rj9TJ_t={#Nrit}q~_ePaRgf1kYYL)jkzgFg?}%NrithQqS@oDh7KdB6a-|8fx}a;h&7O=hi|&n!A;H zQB*r7sqoL|$nU7uFiGvG*rTEmQurq)!*0?XEJ*#?sM9j0!ao_Q-x_-jWFOJb3nQAR zk-T=}w#P2-q&Jsl>srGo@E=_1?G2-4BiQD7dUI*87D*BKfnX{p9#EN!Y=ijx`F*iC zr`M}A+u~V&qBrJ!9di#iL=)m%&%2Fp6L9awrb1wv(FoY)-^%g7Ho+U+h_CZm6gu;v z=uGuz21O4;bT$C8AM}6!qR(IT;+muBl|L|aIjJFz#?I{$S6m3NN=-evQS=Is{{hsK z>lUNMrwFVtJd4zvvkII?=S6wz{LHmVk_y9Pq+V^^Um)vJYxTS}c=P7@kFHwqs|=wvd)c$wTi< zl%&G&80l==4K}H-Ceqn5i}$Q343Ckv2M?*AfgeE z`YuLDVR+AzNsKHYNrmBY^77u#yyV#qg(RskJWi(mIuK+p(b@xXOVUV{;rVRM;YyuY zC{vv`nhqiU_}!X&y?e~yn4zBDod$Xa4Cv{3ug`#iy<>WHdcRZuZk@Yz!Um?Q21>Ur z=Xie;Rscp0ish(3?hrLuxSCZ7S?lY#Z07pf>nnP4lhL_=KL)KQzjvjo#F;xVJckdi zIcGndg8@Tzi9@&*h8j?`}jHXYMKL6}0yx&U}L5xqWdXSA8e&w<&r+ zVo~ggnbDb9F#L62-2T&}6yV}i*~f=AkvMY{e&GP)OQ#hE$@y*{$?lKQTA01BO6GP|Ux6(Zt95j9cm38kE9@PE_P38jk z?_22}4K|AG84A1x;YL7vsv-pL-?w}p4c2F0=$Hx+#tYxt*XRd{`}eJMj|SULZz}+j zrdrLm_5N~+`}Zy1M}swI$35qOe@nQt{<~CEh{pT(t+YpjS~_|GNtI>?HojW*ObTZ#7AW-yVv+-!y#J zo%0g+?_15%;U|jZ1`f@m@jH9BOv4qv)!f7_-$K3WptE)fR}xO(x7e7VV`+X1q;y~N zE4Jatx87-wFPOsBOI9l}-{Nbi%c2czJ!{+fl^b0UnQvR=5j&=|!^QTSEYFGk%@=p{ z`;W|d2ngI?sTF(82iKFwG)M&g1hk&qZHTxENVs3iioNcGYtGF@Fy)#z z5I7eWx+tUjwXE1beQ~{G7HlP&m6~2J>L-c&wXE2izPM3&Ydhf4)ORD_IkBlujrVI= zvA2D3`-2G&fR82Iej&NKjPBR6V*mEVgBJFz0+9AWwV?RfStah*vSQ7*zOnOeG`!RW zcrC(>Qd5UX+^=QDns0rxaDDc@qgMfL1+CA%Qo4r3{aRM6`PMfJ*KB_+x&^W@MYo-g zdMI(fmKFQ2Z{M9`8_frflLyP{dS|-C{aRM6`PMfUUC%KF4YvmouG=Pi&%0mCihbf6 z-JUmf0`S2Ce{xjZOho71uVuwPONZxcxYmpR_uF3Cc>k7VONVE>e%p)xTT9$zLDBtN zmfaWE|GI#k>9ngAKR>4R0SQ)NS%!(5mKA~yv)ilATPAK>`AugWv@wl{?Td16$u9Xd zk+=`ULD>@1@xkaxNTzIrJKkB9;Klu!NL(8qTu<)UYCQ0NLF>sCW{Vk!M#Qg)#I^Im zHRt@E#nAXV6x}&>^<5d=uZhI9_r>)(Q?X(&g`}5u=asl$6N&5SiyL`s!u{-TQS^X` z;bI1&#``sqxX!+~{pTB*fun51&*49{kg9cG#!4g5+$t}ecQ8M68CQ+ z!_(nseO#?x!yhG5y`SPpA1-w3b<jX%ki&?y zmp@8-BO)d#T!|r%QRtn;bnZ%|>7fzDbZ$BOnH)ET-WjR)S%FE#T#@OW57SNWV#F1C zXQWZ{pNb$WP)ws*jvbOz=$(=Frw8wVL=A|akKPuWkJL|v-WeIR#?ui@Ya)Y|t~e%R zD)i1s@cN02QUy z+V0jta+)y}dS|3F{*U$`*AeNQSWxV2(+DZ_&PYA)d3cQ7Nu>T-ir4uSdS|5lt>hsf zu`h<7o)5h4q|iGjOEx;~C5!xhT=r9;cTN`UNV|Y$%-ly?Nm8MAM(U3oc|rE2*6MfL zOQ%rjon7UkV&(!UDrO+mjEb4Jl*LTd{(XiF=+wVjpI-QmpBGm&+U0%5)ByVC+OlJt?T> zU`Z;>%_8yoltJ-;ic@QK{V`>=7$JqZG157!Br-wYNTl=gUG#EfK`P9Rk-8^p0s2Y% z8i;%_M3M?~W2C)B&m$m55NU5*iS}?rOoh2|vf;;wmqykpep-?WbK_*SieGrici!12 zNrky_(z)&)NU_Im586%__o%fhb4!2E5&_w~7NgmI^x# zANlb*jhkas5*lHS+e;KP(|f%F#s*MNP8dPU0WsnVy|b9kqe)rO+9nj!dC2pwBo%sR zq&{LsW00Z@(udUlM3M@Phu(m6BJB#;}3bbfrGwj>pLXQW;%+d1?zm`J_Q(-o3b z=$(=F`s1)jvkxcIUb9)MBo%t+r1^BDNmd*}o0H;vD)i3Dio4HxW0o4YQIZP1bJFqP zCdmGxwfcus(@2%xeTtc*z^IsciJh4e%3`L;!2aDj{Et=4gq&WBG2)L*sD@$$)j6t| zHQ(G8pZKX_(%&9lIR6TOodtM2-&X2-$LFh;b4Jm3+ET##FeWMdIT9SS+)2WCMQYtNgws6>i8#=Z5z% zwmMuG=W}iOk&;xnAtUwo!)SpPCSo?894ASI8#2-!e;O;EwA)H2jH)h4g&T5mQurTU za_kJ@X*9M9H{@jRYmdBSkL=xLOobbAvh>#&owU2eOI8;Z7hm z(FsFl#HVblEE}O%A~8$0-CVR5jS!Qw?ffveBwwOr`l6c~;quXGa>Q4lyE|TF5>`w- zdDjo)zytu)lQ&nYB}s)zSfu9sb<=UQR!H6XbJGrzRG0)K^=UW00ojyVt52#a$`?Ap z3X@=@@ohd_j5Z%MGv)`;4Q!&H3X@=Dz@mbmfJ9LMllbJDv657n1S5m)ET=NQ9Y8JU zqWIPj5mR9jj5KDuNCFLsG!lPkCSxj0!Xovg!Vmg^*#%Hf%6f!$ibYI?Nm!(&=h%Vr zMfXrlJ>*zBNh(Z&k=qE~V@a1(;RMPoWm;@v3 z15f-7aukvF&JTCXmPepYxJicZg`oHnjV-13pRTUjg4+3j+UgtyR61)jt&1{ z>1ALq89ubWoXA*;saWn=q@H~CK~6Aqi-w+jro%uPQ{i0}skt;Au4gVzoli$xlBB}B z7^yGXoeQKWjr4^r#Dqw#Rd^R8jXkfg1NkoX)7Z7_OBqw)U5pG!X}23Bwm#rpn~n=* zQcQ(+F)~x0PZ#d*D;~>n{N76BAweBi%mCbt-`w)skh6M z1^vYA3BJv$F*2sYyBKMoxA6o>Ka(R|>r|7j>+e z1PvJI2ei9*5M6N+9;48^Me50?7HgNzY?7ox?-r>im5+iBjJ*K$q_++R zNK&D9i^NsweK?;wmYVokXrriiX>1jGXQcDHQ8mH9XQ1~@{ojx=6?$i+{=wyU(9g^w zW{cKcB&pClBkf;gi2*s5Nc;4AgC(iZJ11vUL>8ox3H!x@hWe?{J12)VtL!EF)%i!p zROp?P(ItKdXERj^-R`w@M-i0vK1N8>;9kKY@P-+cawtm>UQ$KVa* z|J$Xh37fpeVk9`jacTp*Bcu_3zspMTiJwg!x7eUzyFm%rPhSSulfZ`zBn>(TqsPZdTQQa)gio!iDQp3&Yrvbf1t<~#{$}dTUdot2_`Zvf+|DH(a zsWt~Bsc=t5>O=2=vS$}Dhjg7QNrihd(tc!fagY;;v>&`oH}Q*pD%_Kk`-gnuC4X4G zUXlv;vrm&jjuWkIns;&Ss!VK0ny9-Gh+%yuH32PV;COppqDVWi&g0Z2Qx z1Hktxazl~|dtsz~+kCPY*f)NzpW)2}g}rcceW~4Ea>XyS1tnUmuoq6wYzOO3i}_JC zx-UhL3VY#X{ekO2juEY`b+$M!x)mK8BP z*cW&29s3Nf(v)!b&LOuY&ishs=EJg9bUpe0xJ$rMy}*?IzWATSnJF>+Rp00?_m8im z?_xvV^~&1b5@*iD@XWrrzUko*;H|0g`nu!QCC==L;pXGQR^v6}%-(l^zel+7(@s&a z(a1B8Vz~K+0)_{qWNa%)uC*KizpB-t`RnPCC`} z!I@r>II}T^n{Oy!(e1~d-T)p)xP6}sD+;sk%*z;VzM+8QsZG%MG<^G|f)Zzj#&Giu z1stDy1Z7Veo)nlMapr0aH{Vde@%R6weW9_U@r_dkrQzJ#7;e6yAbt5nl+G4fSsUHO zLB(}i-P!uSY?FTvO7~UZ0pEQ04crI+;b+o3QJM$~^XoyS#pz^j?Os1DH%z1v;qLjx z=;msXi~c>x_p8A5{_wPZz&-?31 z^)h3AH{e6?psL+P)kSIJ--FUU@2}TbTm)ok>boA95G$km_aNWr{Wa%_JOcr4Bi#9e zgD!4}^X}h+(mn654~)UgXU`&{cbMzVI{zM&?s9z@-ShtT zEv;&M@%g>8NZh{%rF-7rKI_fBUVPl6{Sx=@LFu0Nw>NyY1GuP-?C;iqkBFgDcu?B& z{??Ocv;npY<8~1>7VQOOP-FSLlBh|Ox-TfTnD>=1eTEumc&*Mzc=PfCEEjttu95IY zz;W@3pY5-7FN#YjKKD0(P%FTqJ!aBz7f~^m;kT^lp0nLBTqsqLZ^c)OdYwq-uFqA7 z-o|Q#`0WY+-1F5<4 zZ!RZE=7$PW-**&>GPkkxz4>=Zl3AgGG=Bg7SCDlmrg5!&bxAT8RFDDZJIw+4F_8i1 zcF`TF;;b+ORFIiswqVs}K0cYL&5W^bp0K!TEKil39kR&rZ1?l|rSU8v;h;;r@RFvqHeaz<+ zq(0?F8T2!!h&j2=6d99QoPxC9tydZ3BqHrMFHe#rb2kK8 z;U(An_o0l*JWWM*AGZdixwh?kNz{WFA#P{Sk^UYtn`qtxfWi=CUD&{+l=cSje3x^` zmMHYjDj~-%_aNj)Av%g<+h47{q*X}qmRO`dFVpRlU_vPTynudQcT(uxA~jduzhS`U zos+KDQai|)3cWK@-`x~v*j&Bo+wY%{q(bkEG=3X94J4*8^!8$fYm!vxosj`&?$gR1 zD<|mv#GcP2sn9zkGqrk%#l0O)jP+KNU*!CyuI%enLgy#|_^uNrm1SX}^B-XOI(#v|m0WYG`V$Lhqcsv=;jhY2?|Y&t*)7 z-Z{By_dPGUbfMSz6?*4n=ilI?X|-3oWAye7@^6*i+3wK)Sh?i2c8BOedEd%Ke2cK6 zd=OVSzVTK9Mnb)MsFMTxVt|c==!mgk-&J$mYwFQw18?%ZJ&2j$0t7vCYA{{^HZ%6|yNdGp*NcXFDYaktP@mSLrc22!6V=7$GA~olj z>!_ObY82Bs`Zb|cim7lxM!FY0M)K-ZX=&~SL%d_Fa6v{o@4P{EAy%e{d3$k9*;<7Q zGBP+{N$jB5KOr(W_pfhAQsHHcbnR)p9OOPCT|1-2l?(J!Tj=GXwD-e zDL>ZI@ti-@&n8=7R&J$N|%xDEp6fdj)p|KliYN}s1Ut> z>5elOXWl03OBO#k1DqxweaTlhDo9)*T^@K6?E#pDyn9smQb{VL%Sh*igQq~!8dP&0 zzx<0N71Cv7$fQGVkYWiCGJHpQNh+kv$-~!OAd@I&NX;7OB&m=tBg5LY$O95fEJ*kL z#3V^7q|3;VJL{)|>?mUXx~7RF71FgxePM?I@M8lz9guE|uS6+J0#r!XA~olTDM)F( zD#dgTNWLv&Dx}Lu_m?Lyd+1a&!IqD|DM^KN8R@(+BM$v6AYxveI75;O=`u1n`-)K@ z#WFHDxX)!tDx}Lu*ValfQ~O?u=~}ZZJdIRImlYF%G^U^~VjE;JerK=^Qi(t271O_0 zpWeefL+L%uef#$r+^u7${+{jw26XZ?=-a8cZ=q4ES6|HgswrQT8vl5eXe4yWj#4+U zKbmADv|hASeBx(^Bz>vTCs%%e0|eOpM0*UyBq&1_m-(Ob{@VE%#0?-d=ijTdN>brh zjC9=mFB$E`ni1x4qwqy9nPI7sdEOV0lcOS$ndi)UBuVC1e63~0)R&yyfV$lA8bE!? z$&U?5Dy+&PHTTl3&Ct(Y6w|$U9ql=Y5mHzcBVF2|>L5jZ;(U_(9Z4#zijg5ntv&5RtB++0P`Yuqs9dS1WK3`U@}cfBl21ib>`} z+_WibB#hZ|2gLzZuSUXvw|{*3sv`E&0Dyx9IIeF&I&R!cRTZwBSy55gH-pq%SqsjR zq{5$=QwG}lVIg8*?+%Xf>}W49>EE9inK>@CDHyDj;ZNh*(sqkzt-_xyQeSFogMo6q z4p3k6WJ{PN75-$An)^s-S@g3n#dIG!R$Gz^e`2Jo*q)0ZdlTs@+)B6%jjh6;7#Xs< z9xZ^{0n|diT`sB$A{G9`$k4C9I}36ik)eySu8^%&_!A?;mY+gxX}#|CMf)g zk)hF_(k^3n5i_c>@I-2@!k;WsUsPc}WMfsE~3V&i`aF2kzAU`KE zxbp{_WK4xWaWZUH9LU3h3^5j@kt%=kUsc3fRfQ|;{vjN1BOTBAtnEtK5~kX;i@b~p z{-+X{O~kky%ZsbbMHckp^AP;w^lO-ri%Y<52H`U!VQAq~6n!~H@CDnnla^TxaXhXC zi#H;uA&!StMafLK;({%+`OHIR{0=6X$jtrid1YXQaag3jWd;=v|A$*NnsoosX5mT9}B1^wbr?6Bwff9q{28D=}yfA z3Fzo6jN`y%x}8#x3gcj;>$Nwtqn|~HbY=f*uOt=5!N}m&b!miV5*gfdt0qZ>ad1*Q zkPjrpj+l=kdZdvmPmaOku@exIOvBmHHVP6GyX>(d)geGlw3bRg-| z`feEM5hVKbUuyL<|5lvU;uOwtXV+)cW-?f&Z|e?}Nvns7gIM;EdDKVe0G1;>bIg?q z5@#Z3_*x%aU-EC)I>2*-)|dR2slUXT(iy(q2iM&D8s5Qxi`m}2rsD4sXL4uwMqk`j z;30g?Tn4#%jB`{E%hT^Ks^?vRjqpUHWGR}2i_;){naX!QX2TpGI2nH#-D z4pTqFxBB8?i+-5}d??{z(?`B98_z6&;oE)j(9+ZL0`E$A=LIU6`Yx<1WGQ!zTXxy=G5=UVOPt*77gC25R!0g{0qMWsUmQY!tP8qSp(I zgv45?Ndt$VaYn+VWu?R?FSX73zm=2;<-VoNKu(Z6CIqnOOk{FC~kmf62XCR|5IeNlsQqOKuQQP;43I!~?b z1*kT))_EXts%$NDG5;|&_qE#7LHtgOC^9B!W2%z2J zg-YXiDdO+>!srIR7paz2Sb?wfLMsfoH&km(+vg?ytCo?OS9~%7+Cv2k)qZ`uz9bc@ zwMc!byV7NlZvfPn29>94s-m?D)mo(HK0iAg{p?3E-9LTaUXlvcGSU@20J<~RF|JbY zixm*%q(Zff3`ub#H_W%{gshJ&CSxj8%gE5RKVz+CpHHm~UHR4@l2oXckzw1=E_f3sh^7`l7mZp;!YeOsKZXz3MWiLbVpDId|V! z1gI9pbnXb=DoKTE8R`D{@H)6V{*Aait=8Lv_;Ta9EzCz0|RE|M4Ah2I&hM#{ciiP5ls zpMiZk^y!IjlcS{yviU_@5cgSKv0};hkoz#S#7LOu&h_$j#l}Jf0S*`7>MgW&Ik}=b zE^~HQ3&(#LJCyf0Uv>ZLC&`znD@vV(R~n^=42(Gao|p9RP%LKVvxSk9j(3R6e7x2$ zNh%!5BK4(JLUE=Y`2p%n%dVqK4x*n5hq6d5i#}i{`bm4(n)}I_c9K*$6eC^T8$1Ci zDiT-w8fzq}a41HGoW64uWJih_a^h90NJMKD4#mjO6UQ)T*r8rH)RFr*l_sfhC`N|e z*!&epk;q|JbJIdm#8fyGBSVKhLgJZA%+UUqX%kzJFHu+Y+g}}-@FyCpFX~Z+R+oZQ zI24QNymoaOpt{sg=apf!J`tqCp&04@XPFD+DI(o}&GMd4g+npY)zC?qAolrObw2MS zV=5eqk-^_weHCO9#SET%WQQab4#mlLVhey2RZwt+|D;w_4&`^Fb#eu-QE0AOHU7r& zzN417s$3o~TcS`c^UA>R1+*H7Br@>zzazY)f7LQF^O0A#L3>q*%)F=hGD#{_YmxfW z$Z0sk4(u2~wS`a9sz;nDJl|I(?xkC zsZcE=LykSV2eJdj4B6X@YCsWFp;|_U9%@OMwUEfr?{AEfq(Zff47)UbBFIrhhMgKr zw^@pq3e_?)v^UBZ&D_lm?flP5Nh(xpk@})8Ge1WrVEqEse%SYxBo(T)NX>bvFDShZ zwbprVA*}{PYZa> zT*IIKC`pAEF*4-RBRj~>6f@-Fu-_!9@FGTro_|Kp`3;ewKlf}dNre|NGVED=6Odzx z414qk%2)GzD!ho1p$Yvmf$U3U=%g!RhM-JPc#%cwi^iV6gG{&yP+v6q-clJ;;YAjS zTMj+v0oA9N&f6##DF_BV8@qVc}pGYjaogAMZ#~ z;YExL-WrRwoOy#!@TQ!!BPz6_@FGsuUfl_#sCR;EMIB5dRbJ%3f|%en3eDBAmX70L zMu%!Y7~Vj(M4?*dihSMQp0B&kp> zBSS81F9{Oo3#vVrb(JI)s%2#8*={V-Znd5Cm1j{ZiH3e_?)cjx@btGO11y@3L@Y0*Gbb=5E(tMHhHqw8jOTXxtl`T zRE!!4C+2Qc)es@#d9_y=_-6wfK*~WQ;mWW>)Y~J-Ubg#@c4>t%*XK0?GgdIal^K^o zFgm39-2W>ew4#rPN8w>ohxq%04J+v56NspAG3KX%9nT`Jff)eNJ7oUcOJ-PmxQk88 z4=<`oq`Qctq$CwCX2sM~ceVQ$WLJQC>W&3}OH$!t7O9o{c{BDO?8hi(xzqcaN>brs zjEt!7!8~Q|Ku6Rr87xVKi*fSZ^9dkP+i6-v^}hEdscMR7dx(szkfKXc;bM&R7&auV`51yno8ip_g^O9Fez-~=WUM0+A@#%M1H}wM zIizqgi`1e@6|aGqqJE7k`3YUa5!t8kA~q+dm(GRm<&cQ9ZDS;y`KzNm6qAl(QZ4%X zdQ5Nu0W@SqFLxHj$O|OE%qg&Cvm6Kq^GD=n6@--v(!T^4>CRs5M-17!M7lFg7G(^P z3JF-Gp1Q6uyu|?vhXhs>5ynrXLIM`4mD|@Fva=tdnB}(Z5*rspDkQ+jhzd{M1i6XG zh_VOP$gx#OfRhz3(FtBG$Z|i^8-BzIR!D%6B}U}R29mbKv=ReSUX`Rm0*s6-nF+$l2k~5kr8*UW(K*A$cSqLV zcu82ky%fcaDl|qcuIa2OB)}#(%>Oo8&0l=EC35}@Cb%YjyCJMXF6my}SM=!-RPX_4 z14MJTmZ(H®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ʋuNrDoxPB@<5w!C9 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�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

    u>Yj=_fke_=LfV!OY(ip^+>Fd7OIQ95B=Y4F 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

    gfc(#Fss%9O8c;|1Hc#xP$ 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ා+T!@W-Lu_6`A}>V3IfyN1=&A`_ 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�A6unwtl%A@8V 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

    %K#`98c1awl8@!TU;qn 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

    Ruk#&`YX*1h)TLE`ooSy%W$nJkfgho zZWKPLBi&UbbRzbOeK=a%_~U@n?5?%ycoT5aU5$GZz76cXKB#9KP=$1N9gKiWPUz15 zI;^d`54Y@*m!XNm@}m!KDBhS-&_w5kCSoM(+ln^}L0HmVYn^c}4mIk|!a8)8=gz1GhzSi7|%fP&i}S^pfK8@mQ5fk>8?fhgc^m=UC|$YB&VsgB6L3y z)(=S1T}47CV*jv}(%ZlPP4lj_av-!^nUaF-#``8UCUJ%ek^one}|jtj$8J~>(E4D z`O&uknwYntiN>XT#29<1^#ZqZL0F;t{?^TKsBv~@VI3Okc|&m!X)&W6nEVd>I_b_B zr|xHum4Pt;40JzqdMz@MLGoz7WZDOe(Ea!~50F9KS)QbIzx`r2@M3m97x!r*Ii0#+ z%GeedF}q**2=0hU=46s+*Na<)NbPd#`aqKIs@~e?K)Y#wgj~Ckc1aMD>7EtNW}N@M zYKJiOpI3wH+wtx`Z#TFfZ=!;VC6Q5&W+v6#`DdC&=(-Bl!XBKEd@IQop#c>x!? zPyM_&;H0}6_av+j?7f+z1)MvfyZ+hi?;!`x?(C1pGu>f5?Tv)xnm4L2G(Olacw@>z z6I~FRh_QCxjG+VjKv>eb?9yk+SU~q(%sNMMTT@|j6-*$LavE027rZx z814+#+MO}ZJZ08)1%@D__~R#-2X$vmlDZoW?=%OVbT=wB#zg{MVvKj_Zd6_O9x$Z4 zQ6=s2AUT;NM(t;pfuz~psQw?+5`^w7+iSgL=b-+lSg5Ai-KcwZO%Rgl{uZ3gIRDGo zfx;Lw?&1BEbT>XbgZB*5UC|$YBy%_5BSBis7_-O2`atNeBB2wpciG|G>I$X`-Hks& zdjd|nt8q`lMn~@lUxn`}@Xzi~2MmE6r2G6OlnAdSraNxgBX2r6D5`m* z@x_@4kKH%@jBgsCq`N-xSWz5moZVSihlcv83;6mD>8?-7wg7&ebZ3l1cYVQDeCPpK zNQgeQb!ucHgXNhUT^1OE^jVEzDf`kDebEJ=|}ci2gL z069qu;ATRMK71A4VD>H*gt5y6gWoXbmLI?kW;G5qr;8%Bb53 zA57EiZq$7G1>mH+8uuh@4(z=v_!iw2Fvdv^1YSf*Db?9!^zW+8bVs`%_AKX!e?u>EhZu~w5 zACvPv-C0m;y3a{j6UG2A(0$Zf zE8*8k_ayU7i;D+F=sx~?IJZJQ#w4k`;hSsC?#93X+pa zVr;HA07#+xnh@NKlkTeCvU9LAT^=CCVrE-x`yeFKJrA7CIRCri4q@^iC?R{-PO1!VY{RE zXC~OQ`;NP)GU>i>8I48dhG;8=)P?o zcA92dmM3Z5Z`>>byqMkNPD3$E=+1bj?uT1n21e+9uzcwtIhiEJ*&pz8B|`U~KOF}o z>CUpf)?51=7+0EJ0#fLHVe`u%B-1?~oXt4@yW$RE8r>)aQHAccv%<<&=&tAwI})?a zU$cP}y0`ca?>3~niiA$YKCutST(=ZXnP2yny*mR=x~p+d!VX98ALxBS6*0T->2?xw zknW4b-|q|1JuCkBAv94~e)O$^CI(h--e}ypMoeLStNse+0Ke{=Z@0yvM%`Ihr|uR1 z!CkY^J>oDjw038VQ}y$jKxz9vo}|q|p7w~186$zb)O<+p>FnS~4Xk>`FYy0@{?u=m<4?^;mh9{S>{nHvw3 zbYHS3G2L;?9{CiSsB+Nw)ajdrJ?CSl zB5hg&Pr7Swx~PU8kkg^Nmc3?KU}$#NGM~fxN>VwQBwB$S&447`wcLdc0!g~7ddtp% zdx#rI(p@tu;vptQGTmWo;f?dZEA9~H6vlYTT2sJFxe9$f5Dzn9#jMiP4aQbYCjILL*>y zhi#oV@)!mCUno)Z($-i zox11Ekrx=Dd+rujg5>0q81)VUDRj@j+Nz$bddtp1;iuby6uP_bUVxmWyMko8>u@&X z77A4Yh0!JsS`Sf$?qjFnl9Oh4RaDlWX^R#DDRiIO2-d$scNGbpi2a-4r+r-jMj?(UG5?Qp13cNW&6q5F$BE#2LzF5_C0W_QLoba%Tuz||^rcc*{Y z0GY^Oc?y;<4h%u=>;pC;gSxXkN$T!yJ^??zM!LJhr@Wg;PKWO9vWo@+L%O?5x)ub< z$#i#D9~A*4>F%yj9PX+@T2*h^IcN|KcS@nVyY}HxK}e>%31>6T|E@SF(Y^J1o*&(H~C!l>aRtNq2YLeB8g#?5-lA6S3lB*I7{UFl`;w5QXkx1>b~8SLm+B zJqddpy>GY*7I=Q$vme0&CEdRf1^xit>1y~3ekTgckG?I?#59B^8h5S{U)n=$&RIHA z>TagG3J+q1?kucBcXRr^3c%1}#!Nqs)ZGCfV;s7hMXGd#F#s$i#LS$^fL|xw8RN|3 zx_S{9g3P=%(R9+CF-hufHp^Hac+%Z0-fCtdIUTy2@BB6c7}DJ=bdue^)$E7&G##iO?U?-Q1RPJVYhk z75(8ya$rFWkfggA>&Ddx>8>K76S4o%SVK4^R`w%UAH{AY^?u>EfF>}M4 zm;S{}p#|rWLFXBhr0!a+&|AQZ#Z0mMe(|D2%qK3-(7WX69V~7ow8x zivI8;S&{vFAjM+lo2^kmlI|)JJCTAN&XY>R04LqG2P1C*PP(gcPeM#!@6BGDzW`N8 zcfD%sQ;>sZ_xp*yL_j-PI6`j}mLGkv+4si4BFY<$JJ*PLcHfNe2i1eHq`OhP$6g$2 zT+Fbr4h@YhYjOfZx*Mfk2jJI9cg8q$H=57HSrf335Tl&Y5}C+gdFpp*2n<0+^~1E) zMBQ1QBy~4N8u&s0>29>XTP=~C4&99pQmzJubT`_Mrv*?FIhiCz-}YFLAl;4bUk!w8 zq`RuO>>Pa52gXw9ZVb4!E(pnVFA8Tf&i}4>pfJX{oL3+!>293(6HhAXuILXxlA9@T z5lOlm*HWejl5|&**ol<(;h5zLZv~umH%n(*1UTug#ytsffxXvi75^JlA>BhqKgCVDB zba&0Gw-*@F-SzG)+**NfF75R&N*#dL4nN})=iFs`U&IC`YJYkP(?5S4US^oJkG{wG_2 zB;8%HW3ggSx~oX+L~8qRw5&fx15UbYZ?$ zPsF#K1?Y}T``xLaiNbn}FA|!V_o0c#oomDbyKm-+t%D#e&F*G}&$r@G<3zy1Iy5wo zME3=TbT_M($qm0wx--V1yV65wfeH+vNto=8rI?&iQfV}T*v&AyXjg5+e9m}5%h08*^ohu&KPBbJ7tURhB-6bloXxn^LX|*a%$L`DLsZh;ymuTgBGO&aA9f_}v{?@WNxHk= z*qa(i(p^PjC(_!7Mu3yb|luZr1?=-KVz2>J;hD7)Ks+@uYBIgzobSev1t1&X}ZiKR)?6@Iv=> zO>ZWW)2aLRDp`OLx^M10CP+>ui5cx_4y4e1S7ZesNq1Fm?Q>wp7pV)R(EZ1Zn}d){ z_tJ1S`3KvdFQ(I0js?#2d;xnKAC&tcCebXSqsiS+j2xW9c= z7;vHc(n(kWCEeAyC*dcD?weNQ6fAVFw*nsbiP=5j2qg;89rrN1(?Ju3^%&m|(8R!9 z#T#7}nh3Gnhtmq`U0ew(PQUJTbX1pgXJMThp6TcUM(Ez)nzeRkj8pf1*YWWUV34!P zpQj-Y>CPBuo^DNk1V-rIw$t0lpze%GTKBnKu@WwHAN($!@W7l--9HY+ZJN-1Sdm;o zaxzKGiLP&f6uOVij2k@CUDaFL4|As52c*#bvqNy&k|de#W#Meb`9B)r5GLgzd}<+P z_rLc|g{Y*vqCf0N+}WOl0x4$qOjADul4f@miJi!3ACCLucKE82(0y3OKL97))wm~t zs;|6^YW6DD5mX`F^?E5TK@M8GKhH;r0(8ec%x+kec%!f$)Bg9)} zq`R@D(IW^;iy5Qvg{wH!xR_yK9U2-NX5I#dbT^9K!e6Jw3}YO+8}DUl3}XOTNQhBp z?nPuGgXO7x;T$jo8I{`-gSxXkN$PG4iNJS1NOz-Y1YG!zoDSWMHWzeYNOz;fN<7tc zi79e2NsR74O$L&5H#+Wumr#YY3X;7#9-+{9k=l^I#pziQT zdhvcrx*JDxXNIVxyP`k*NG|`j7D&?FxG?1kkfghc#7?|v>u$b%Yct@ayIFEU2;ii< z3TI@UlURy_f)dP$HBRCDlmL5A)d}|x1mkO#!WxRWM)aNip<{H7yy%|THG&(T-I<_? z!Xl0@8k(5)&_vgSCStiA)>v>Q48n?QkjWEWUr)0I4z=&%ktOs;m_{x~1uaS+`)jX;WPq;5J~0>P8R>pJ5J+*2Xbasy(lw$Y#UYE2Yh$_wALHn^vjYxq(4h+am#gq^ z$nau^p?V`Onh^1I^vJwHOa{hOEQIU(Ys9?W#iXC4|Ih!AsM6B03DA)pa{P4C4wt)1 z>rpaX?srGP1nB+g6dYJcZu%V_3I8jbI`cF+2h+9aNS;Oo^GPz*tzcw$#xD&?hNpgh z)*{6N^CWU=pI`4HNo~T*X_8ExGgwZ&aAvq6iQej=Z>O-x;z3DmKj`l#^IgVOJ&jOm z`d~*$QoZeSAKtYPq}KhtZ!A)Lb8b>(t=p$9vhs!xEYjXjzBaYcG0>tyTe!8EMb3FK z%Odv&J5H_Ze{(Fd!+h8X`;Rl|S<#D(kCUXXN8ONQnleFij`^vKB(@L2jE2*3*LSSp| zH~vLFti;iA_NWmw=jn~GTKAJjM&d19kc)$o>l zG0$F$EZfH`NyT5~WTY{1+V7Gy##ZYlNyT49WTgHqrh+8(`&FREEPAW>t8|=x4V&U!f*dkx-iPg@$f@{yQJj42``9Ayq`f6c#b3qY)g5rBc z8JXi&dt7$X2<5mM^R*-uU(v|O@HC(GkYspDw{@*3zU_{YpsTGm6~Ofr2bBteC>g0QG%Zq}bK6>jDPBfnWay)f@Vcn~IR9*UN9I(#*TYE7 zw-@TWg4Dj-@T(*huShV`7~eFFB#klCYDn^7&~-v+@%Q2-8CtkuRY@wIQ?s1cI2kCTrF*=v(OL!lfcW)sEJ6HXqiZjF#0{mAOAq7cnU?P!WdvbWlSM%H>r zQPbn(=7M!Ba&6U4vbTzQ#Y0gmz#0YqI|lx}48_2%@V{7b5dUPsdt3;<%7XuN!e)3# z-hSOib}Kok@8FU>`g9vKsMmmDC2NcSgEa%Yn4#FS4zD%r1jM;c!K#L@p;_{OD`~`k zNDys-bJri8R)))6<3k+|JHAiyN*XOw?vrGmW>@j_5}AyWM$Tt9BpIHy|8k2Ax_Q>- zO@;?9;^4I}c6X3uGD;d{N?ekpUM%lri!2`WHdA6!ON$IUx4T#+(%5;>u*l83+E`@plE&CC|B$3M z;$~4vCZnWLwH#KIMQ_W*&9KPeC5@{dENKv_T})$LWyvUM#Aa+_kw2L598;JOyriM0 zNxfE*ddQgWl1xTPLfqB$H9nh-+QcBKPDgAjxEuG}`uWCrP8}0xYA@ z*e0W-@o)957WsU_KuIQ}r1AUt4HkK}{%lDmqoi@>C9b8!*q+#hg$e4d;!j?(#hj6D z@mxvj|Mfm9$z+r?o())Hkq^GY?I`6;MoHuE=hjuGKaCtI$z+r?%B`L)a~j2;SohCl zlr$2~;A03HA@_roX=To2lr$bp#?mU0Iqt+;^H4HM8X3D^mSlLkiEqoC$tY=jTeFlT zLzgT(D9L1$G`iidZ;@RxFO+05N*bLzS!)wln~LQuvQV&fpKDD%ugvLM@iJ19$tY?3 zcC4mF{(1~wUL=Q-QPQaX7oHJ1D|(e3nIxHvlE#vsvBXED_VxSLIw2V)jn2Q|(`u2k zT}phdl6sqrl17$KhFfI%o%1D`jFLv(+*2&FYPrUeOh!qgnWu$C){VASZ^zRflE&mk z4J4V2l1ABK%_SLHs?bnLCZnVg{WBIrgz-KXmaS=ol2Oulm8+jcKD+X}B$H9nI63j5 zMIQcUnIw}@(m3;d2}x={KZeb@=xs7e8oOp=5l_qs+fQthWb#TH^8mdJC5=(=zjzxK z|0G({2y>P+8V(xXYv|AsLx%V5KA>0d`o^e$_a$;SzJ|pGTzrP)E?Ep0_4I}md(*=I zvIqR+CtA_=4~&tg?Mu9AP>eivN*9+gSb>7YIE$k*Ffc}VzCZ5D7)AcAve}AZZ;Dxr za~NZAU<_^Hg*!5aHYV1J!HO0v#s!Qa{(3lD(C8JO;q*?&qUX-CQT8LXUA|y3Xto#@ z*blwj=}K0N?7eYwMq|p}&0sNT4J`i7E$fFiDjKI>>W9`b^=d1IUD9ANXjSoXU_Z20 zD;HWZ%4Wx9o#=;M++ZJo(E{JVp?d1MS$EMYO8Vhr)k z;p|w9jh(B?7{;{c&twc%HeoUF$MMqx`(b1qcSy$2@0C9#W3U1Wi}3Ipqq1~En&mZyo`^p%s_`+hO!Wat!&#m@TN?huQYi_xT7dQ2T zm0?&6TEUC24PpJzGyd_V731z2EJjldR*+#a(qTWucQLRS+Os<&tr%zS)Rr+=X@| zipgWN==V~_fWHG&OU7V@8x|ug##rq*FW>dhWejcJQG8-a{TOSPa9E7DFoyWh5bKB5 zuuESnMzIw5?2=-zVh)Ru17nC!Vz3y-!V|A#3}bj@+;CD1R@PxLaJb^d>+L*7=JjvL z82XL3y2}`>z{6tX!5HH8Ulv3EDeb3LjP>_w${4KF!(!ya7+V9!)aaaInv4P8g|@|t z@vpT7W-+Lmv^_9}nR5S7E5=p)V~JusSow#=D1`mk5g5a`)pCUue{RLNvb&^=!3st!MiGp$C$JwzkK))5@dXv^SaLk}S=Vij^BwWxrt5{3 zlUNKq)Ohi!e-s&JN5*i~I6lORVV9j)jCV1{;lO^l zHWmKMiZMUOLm7h=pjeCw7~`lT#s%LKE5?xvAcYuHR*GUVDq)P{fid)2_w&jadWixk zBApjjlwvWeV2l%iF|_3aEKjv5-+wA&u<{g(Q4M393XGxmEQFYR-Z^bw@ey@zdid-y4V~lYnFoy9-lkqZ!(P8pj8H1I( zSd69^<62-0eWUwF8AG4`c}p3C6~0)E<{0CTz!!Wg#$V;HkrV*Q02Glm?n?)$7P#$vR=7gq9na zPR0mzO~*nY^@A12Sd4ZU<6dA4{lMS_GKRi7Bfc|9F<7aL#lR(S{DZ(4M#}O7tQc2Y zkB~7~(Tv6DgfSik#?XIr;lna<%|+HNEn~3q8H>>wV>}6rp+@>C7`79%Fja;A%3a zC;Y$Ee0(i%yNIn;tSdtDdp!Vq?ScJUs_XT)Q`XorT+P4>4S7H{tT$wKRxV?>xLYw?kDlO_xa;HjPbAK&TnrZz5yQiV z+_)rhGe@ya5@!W28~-tFpf>I^qj8-~oi|2(LGwBuJF9ImJg)=4@!3`jpRksu6~tLt zi{T|4c(e;2N{H;ORxg*G?_pQ87+%wXe|`)XaRN8P+FQ6?%wo9ng3a9(>x<&VUC($x z;;fFv@PUEZ&2!grn?kt0`SU#%ZkMnaKGA`XruX^<-lQqsX6TAz)hmXJ!WBF3X2*v) ztn4Lb;~iJv_D7-^?!08SWX4*e$o^5Ti4tcuD~5~h70*7i{Xq-w@YY<3vvL)~#fp{V zt-X&dJg<9##95_^;bIZM@r`Hj<|{hiw-2s*=-642%Ek{koHrkzy=dV(Q=XMLt4}e! zpyR}~X#a(U=O6olh1;bmhQA$%8^3JdDRFJXrn(YmRVju$Zc<^L(`A#mnR0`5-dRD4 z;avi=yMNkc-K30<4`-LzSuKj;BOLhG=`8Dv^1XLRoRy&%K0Oc*D;=LtcHW4udd0%+ z3KYY?b>OFlMoHWp7LU*T>AbVz6T^2o@O^`xTX^dSQzg#oP7D`YXl7m5x90~~_iL|{&!&K-9MEpEwdYa58@MN!daoo#t&w9;KzQ+ zVBv$iQau$XYF1-ncrge5cRnmF(-miYTNZ1Bl%2hq#PHgIc##t=HcLEg$WxERS!Idg z9Ru-P8>8wKLqR#alRV`)_M_?8tC53hgRy34S762l$R!u!bh77rbJ=pPeJ znVprA7``&F^ZL*;>m=?vP%($Z*=MO39_7HjNAFqq&03`-&Wb+_Kjpx;b;4&g)Oq-h zLhByK>OKq?TSw-+nR{MliR)AHIsUx$q+Kr9>lra!D`!yXdalOJn(&D+l84d3)cNxbgOgXo<5z3&UGF@Cz%;SolYmYDk>bSQy^lfp4$T&BALv zhW);$S?CkT|QXFnqBCulrSZ3lE*QQsS(r!tk8}x4)~UzT=x> zrlvRw@vgwXA;XPS4`n>|;VS=k8o^I~`gs^!A0f0G9^T>N31I#pu<;!62dDnG&sH7D zWrxe%Wqel|E_ZWpCCGLJo+j|Gi}4>9V>&*%3(O7dLhd$E4d^HTLl^8w!`tSoFCz_q z|9NrDUJ$b@K4OMHFJR+&dOb@a@jTs!;cMH3vyzVD6Kdhbhvt`LxcM{AL4vf40t!;w zIDd;IwUy^_cS0m9jIPId1iu9$!O^6_OT)}FQAnkgMik#4|mPL+T zdetI>o)x`ON0%h^T9fZel2vI`IhW3OC`s+>p&wbKU7%5rMu8(wC28a;T}_g#HlrZ5 zTGwzU6eCo%s&$;KETbUxCN*)TPNZJHQWu$%y}P6!T{UMkm!zv2z1&G>h1GHtr18VG z+mbZCkHu#=M6xoDiZoJmw#WiUPDzqga8#uGN;Zou)ZV&2S@A|e>VH=T&_6jRl|11;q zH|SjzB3V&JL2CQA^^-ZZy`SLbl1NsMQIL9`9BCz~zx58*P6a785%{jEitOtgjbOI@tv&~dU#ii&K!WVA)ryJ%f2tcao@ z!`}L5f+WK-)s2%mS^Y#o=J@O3f0E4cBExY>veJoy49}IVh9twY7qVt*Ry9$Op_~7` zDap_c`>jwB(DvE;C|Ga>YD1`AhihCr<3MdLvyN@>q zL29=)Ete##ov6s;1-Dt`q3ZZlg~pbZOpqG>P@h-RX4V1P+`ws60pX{nN zdN}`dm*RVHsba(4j?B|PQ!YqPb(TCIETDY^7DiZY!7lh5(F5`D(mg6lJUp}u*2<`^ zlFHu7GTaQrwXKKnJW+OSSsM#yRR)HK1>$%=Tzi-Psy3Z> zR+nISr9fPN{}?_#7RO#=J3h!GoE0Y+UL_EB)&2tCc_-Xec{;6=@WinS1;eWa;zrB@ z``EWtq#FR@tW3f18V^pTxswF-vUa^S@_53%q(?Wahb6)YHD$AO2W zA0=`9ZV&5{VO0x;*9*k;lhgWJc+9act?YK`g5eDUaqa6*aW_ZDu1)zjT;i;L!SF_b zxZX8vhQ#$IZ_*+RN1lCPis6j|aqU&b>=M`h{4z#nXO#?wH+A3_W0&(r|q1_VKB3E>k z+1Ur77~aW&cioHCBw<~%jFlzMDjp2)9Ecm+V!KP+Sk~^W#97&c;awegSkC+wp1t1) ziL=@V!@CFK`t{2nN?bp-`?SPa0fgZ_199Wy6!j%;bYFbW!V`Pj?b>!m@*+AeS5hrDKRvuya5C@*`P3w{|()WKPaaJQ?_)rJl zBA?I7UZcq%3%5Va#PH#Pcvx<#3Q_07QuX*;;;dT2@R5Odj(=`6k=b)RJ^o7KtYpIQ zQGs}P9+$Pc2+vxkoy1w)gyCZX@z8B)t(8^i+NSFz&Wa}tAM3yed91rkXz%ZTJ_A2Xwgn$=PmKEZ+CSd-GiFMS^; zaaK@a_@qEwe}C9?iR*P!K9xADsxW*?Ag=AWpIYMD+BdAV4J)lMd}<)Bk14-b;(FgD zRJ+0}j@4HfKFxs_jVxf{`I=vsoo7WBhR<-|-KJPKXua8jRuX5G7KVS}zz3yoWo7>$ z6Fu_6&a-k0!@mr~3k@neP~wGp-U*f2Syfy2Y~2`%vx*GEmj&X+hIxY|Zp?3^OPrNu z7`{9Z53M!lj>JRD&!Q*aICQKw!|)Y>xPJZp))Lp_aTzV93s#_E_^LqMC{R9J;zs&{ zze=1{X&AmH5Z51#TP|_^()7*}XQdj3uM5Pr$FoaHT)Udy+RLzd4Z}A$@L%#;_c$%K zg*92Rq7B103H#%kK*8{_w%8PC@#c z@NdZQ&JR9;bLR<3&g&`umvmsTkJccFUbx9U;t*a$6fSpfa{>OiCWf>NN&en2W@sub z+~2}3pzmRew2M`W-fCm%>#}Hsw2_su$VMZS+OAWn$m0up z$lhv)zDQw_c8N+wE*iSXBIkDf&LV@J6}|HeEXq-D^>+7g(N4W(g(+3e9Z&H#AdYkM z(Oed3*Q6ArQD)H?NgBnbjFluSM=40HANwO-E zf;4`aW{s_JG(%cRvI3HdtaKqv<}}_pR78@jcBCS!zV)R=zWXAZBw5)=MP~i@ZHvs% z5ZAMGK3T;`LF#|R+gI78$lDfa7mF06wyxu^GN-npW@|~ZI+23ZKdO^il6t@8ct51x zvJ#PseAC1|i|{t>4E*>Wk*qqTAhmm+2Ng5O1g?qL*&Sbpj zQZgM@C}@Pt!sm8Nk`;FpInA8mUW?3hGN&Y2T}MTxyOQ1_LmEu7NV}w?AdO08trdn* zwyJfvXVn}P>CU=K<}?Z&FD!GiLXL_oRpq`#7D@S1lB|ZKBD=3oVUeA#nHFi6Zxm!$ zsRP!v5@s~SXT9VttK2BaoT<9vXZq=U=1ehjrzBa?MnQ&$ez!xC;RVi5l_aazD9F$~ zt?+3E%zvz_x0VWYrfH>3Lb( z$~ihO79VJYSm8xM7W$-otRxGKJo7@5tmdL1UD*a%^Q|kxhEtMc$&cT!z0|4?U;y zMxKEspJC6jyum62cCqEC0v2u;3>fZwc-!UDLkn+qqql|IRRe}QAKtELbxz{ioCb$1+%6q3 z-0|>M^KM;b;e$SV$HMLU0mB^+Z?#`C?X>XN)8Q6w7ZDile0aNT+93;{S+AUhCwk%> z4{!CJCcfB3+UPAJrc0ca6Igb~!&@yfdt-@f>+(@`39Vz_C(Ll?!`lj*aGOQh4fl*` zGCM0QFx>I*R_i+Pl*F~h)ze6vRTmiUczEk-l4_#FU3GiV)P$X9B?g8&9^M+~e#bkq z==_hDpeQXa8CGXtxZ~liQGMj+7G7d&w8UAlf#J@Fw{=?JN?&9zJ?NUmS;c|j&WE?T zB5GQAss^-}#bak>2ZlQy-s*RDTO+Uk`kd;Kgxj?ThC3eKYMX|ql-ae#v#p_H1qg;a z9^UFB=Kmsbz30$l^4M7wg5i#bw|b6u@qvbLKE*w+#91kV;f{y5TEeoy64$N_v@Tfo zeZCBLJiOH_Mp#p&UikOaGCM0uFx>I*R@V-vk=gZZCqI!mt4uK5@$go=H2N=zYeyU4 zOV2dVv+@MP9S?8+kG1yzv+4T&|3}p5b%w#rJ#~y3y(M}t(Yt6t^xhfKNwg3>ND!R} z(W6BVQN|t7iB9z13I1p8Gi%-DoU=dj{XPFY&+vIZ z?qb3N9tFc)#aneyb}(t}p6?uFxzu)aW>hfTRlHR$l^Tw?;-9>i@PJ#va98nG>2s9c zGD_>`g%M|#1;bs%TkX#SP{gyJxb=nTkzu|C!(GK&twe8F*xGo`>caMbM~0af40jiA zU%h;cxOy|1UeL_JV7RMzt4&z)0N+Sz#R%*J52t9YyD-@OKL-S_7)#F>}Da98nG z&vJ_zuP3fO3~^>?Fx*wV)l*-h(v9{icS6Dgt_H(h#apf98A$o#d;XTNHlXL3wZU+A z@iuBE6mD%i^Uf6*o%tIKcNK57f?dEewQ*k#E3iH0naRO$SMgSBHz)9#Xb=u%bMe5k z6Fm%f6>rVLw>M*SGh0F$w9M{cxT|=ZDM?us@r-X*3NIbHj(HvocNK3VmFfKvj|}~& z88)679}IUDZ^L)wf_-hG>%vz*8-+M?KN#*R-iG&!Elzm%x^OC8bRDxm815?G`ertz zg_&wjjrVPO@Dt+93}Lvdc1VC~SSp1Y-}0>Y?cE(ycex$wTbniJmEHvywFtAybjT=G-3E=C+^EwbQ|KnL<`O$&YTm5Z*}4JhsxTI%!{|e z=!ULi_6ftcIdN@yry>|#o3*tiMrR%h!*@7w_2i}R5m)!V5XCHr&Wsd>?{eb4us{;( zOZ$!%C(KP@_#P*&JX`h!Mpv$t*ouv3mI}l7I&p2s=QQfHmDdX(&U_Vy|LMfTYkXb; zqlcHjLUSE6R~UZ4iL0+G6RzHP@jFIm4hzE%IdQE}no}5E^G)oIII~$8e%OU4ANwWZ z>eKncuY()MycUMXIdL^vgHXhk=hbMsV1^6B|8nBWtpXJZKe@XoHlDdI3_oV$?^`e6 z9$&OJstmRMhQ+=8pXWD7MYxX`)%~(%Z|ggx{@YHK*w38p?;X>vz7_B$1nu3c=s__J z|KE119Jaj%d#B2fAp=k@WI+ADt?oG7&bk?Fr^%sBs2Hj*c?e_0!hfo z8af=85tk5Id8R>Rz($ae%HjRNNGkg^Sd@#_GV4b|s=X4|K~nA99@eBb8E}1MWarRc zM7BA2p2&dVBOw**BoUIz;;1`B2D}~_Ij%%MBENoIjmUt_BO@=Yfp@X!TjkUjkh0m= z8E|-HhzYJJ45>nalBo0Ysb>+86GM7d|s>3pkMpBI#aGS^vejJJ# zo&w62c55>ioQEXyW+X9{cLQnGR9^0$PvnQUiBw1ku7n-4#K4P4GDk)dQ;kl(kx1iB zNhFyWBO#R=lVLNKh^bsI0fl;TSC|hYA=MJfS|ruNd7BU!uwZ25sF(D1P>0=tQ$`{t zb6+H+a;wW97*n}cK7z=A@ggIKyxUJ?%xx&*h?vZCk&xQa*zHJav9a`&F}p=ZR>?vm zUMpL65yoUri;PTG8kRxgu4qAXX*OXdi;SG{1U^i_Ca2^+iZPkLA|dtCzg$I9FRJ~9 zB(qjzq^?79E@J9o<%=Q7TooCaZBHH|GcDgoWWZ37kXn^8;AYs@S*|e@0>%AgUW$w? zQVpy_o6MW)6C|09A|p#3p{Gpyd>^AYw*pU(@JgZi$2p|KrdSB*S+NrnLz( zN@V1~TuF(Hnfe@C%RCYZ>07v@9+JK}Jr58Wut#L%-nQULiR<+3-U25A#28}Eh>U!) z0TKn9e3U2(NoI;jNVQGJPmokw^#co0#AJSmgjD=zzzz^Gm4lzcnOs3KD?~!7KURP( za)MN+c8EcexgavK+Q{BSR=7@UFlKfdkQR4^`5Y2b+Y%Xx zt<`>=P8k5RI3%Qc>G5w!s%K|p!ZLKuW zzE0+8NJ#C_vyn(@f4qf)f#@M-XGqBKx*2mJ8D6UfRAmLpoD2!6CFvB4q!y%YL6Vsm zGO|o3*ytffpH_70EF_tKAtQqiwI?!dEz7mATg$8q38`k-3@)WT;!{Ru)OLc}O;B^yz|}$5x1pMvdQK#&F>i#mEiI_Q+b~w7v96N1a^x9g zRrZxOEKB#4ZGmBG=|SxeP`hjWaoANM*Xq?SfNJXbY^l>N_)E7aHJ)ZT!at1_?bSpdGTJ$f7c3s)i9#ylRT z1`D)9Fp0;$12tEnUY)cDG8mzz28Y3HW2*&xAEuTA)XsvCc!9d=_G<17-=mtcD~j#{ z^MaTf6q^o-NjxD)y2|)!>W(3#_FbwQ);|($W7~F^S~RGMNgQ64hh0^Dwcb>){Ox|b zxce%qG0%vpa+s_`_B6S6;b_c~DHPFsO-1JPoM1HV7!MCmlpJW!xl~pv9H4Pp)BVU^yHTlen-?UHb);iFIR0 zO>Ol6)tFbs)QWn8ZUs?Pu5g78*q3O`Y=q-jza)`CLq`G^mM5JPW9~_8MqE zKMP!G^vgb^_O=(SLQ`4oW@=?Y?I{Rlg+E+d5A<3MYvPq^r|V2aHRgvgwep}QCh_c` z=Guv%7b>%m)Hc2>g=)+rV`>#aO-$n9pyt|`phxAQ8A)4}cs{8Gd^4t28Pvoiu7H|r zpMuupHaNNVY!wgc$c=CKkHCbWBwXb1B>X8n8XcG zbM0c#YK@|Ms-A2EcVCPU=D9I7FxFzlBpv~3u1yWv@U~Xd?6zrX5|tpe>s})SrkGeU ziNn(DuxpQlS*I*~0FAg(BQD7lRAb&8Yg-*q6O(upsJXU0WD3qO8`Ux%*#<9jaiz?! zV`}iajTMu4E>LsrfQT#sBqux;U^-_q!1 zz8+I+1Z@+Ocs@{b?T-i_TaM7XUTab_w75Oi-;BcfnVv zbvaTC_6?gFIFT-iE3)`udR--+r~Ubrq&kJ#3T+w>9A`fhT7~V zxZdKPD%Xd>RfsEPz9UnEmv^j~#LIwM{JsqFM8n7kQYV!K&()rhd{3Zrg&OlBnOa9s z6O%X$rNbwj_f-8MS1nS@mU%C#F@KV&bp|ytiB|x%Q%<$8i4&lSqHSR%Ptmi$JWHn5 z71YEeUJ2CBIMsZSSr4IF_}M&{tbZh~l=+xUtvjfRNxTZE{q0fCTAfss12Vspsr3f62oS0ce_V8`sgIx1=v9Zu!O}onDf2*? zT3=8TlXy)~yX;i+<*fuYK5-YqFT8DrYRng9Y8E{-R!rixLG7wjO-=t5_eCh@wU_K#CdJGE%}J(AoPVtpnTLHpYK#p9pTJTw-z!-JBSW2)D;8zY z^N9mSDZ}00s$6AgBE;2XKkuUG0cVuq?k})QTkj{tm1FB)67G59W;+|NA36#(54-E8 z_m4%Kd7mu$Tos@~~MIS5HERd%%e2Eh``*#7mU38tEM*RVCW>_+O znG-k8%}b5A)_awhv!U_Kp=7x0>oSdd%M%kmct5QX1dBacBoY2$&7WenfsYW%w2 z?i1c+CpDfqg$&=~!l&j7CcMGy92lKhgAD)Og*VOl3*i}SjY6Dxfehd7!dE|n(!M=i zw0=!p=lM102Y0&gm&0cezS7wVEy~l9ZH^^&$ z8)Xq!mW+c%mB5*w$MAj5=w|E442Wy*(mY3;8F&oe@5GJ27D91XG+yhu?6& z_z@TW$AV#m*Zz^-am;mN_)!QF6k6O!E=p0jrGR z=bU(sQ*(17Zg$b`Ag?-WtT!Kkk;r#xom<;SZg-zIygJ!edOxnM8Ev8!`N`3%`63(lXI_ zb-6za;>;*w_){1DDswx+*S8suICF*={@jWC>O{~~8TQkS{D?Cvh~Y1txSA-IRu{e! ze~X+F9vSBSF#NR(PnmKqHr|)hNAo;0dl>%4iJPsuwm@9F@#iUQJacy#{?3UT_3{T6 zhYk5B4Cg<=IYymYFCF|Ja3JsT){PcTRT^qchip;VE4B zZ!Mu*W4|U!WxRnnvq>19%8BdUGuB01EqR=#3+9V3JdF#lR*fcVHCy@u7@Zj*3{Pj{ zw(|jLlKX4WCl8-x{r?xOpP=3$KT&?bz5tx*WfXdRciQ*I!Q~NnNVZLhusLjZS^z(6 zKY|R;JWhP-p};fePe3nxPcP)K{RlEVvi+Bl7(K_G%Cx}u{En}~_9Mt}<;D;wX^ZGe zhcsQV@t$7DVfztexccq9nux0(jiKcR+hG>CcE9}ya{TKcgYckHP%jWuujhAs`RzxL z;mSS*YH4=ktAs)6&BndF5WoEha(w=(^n_9N(>h2WI0XPh}+B%M0<_k08U4o_1N08yl*{J1+D^)Wr zCOmLZj@>x>5oEa5d=Kn@vZEh)vLA6zFT`&@f(%zi&dQ3o^3mkRhB0RL!^YDK@rStZ)?dOaS43A&E`Ec!rx)VS z;=;QPC`9qBzjOS+``Lnz5bmFsQZG2RkVHDlV3-O0L zaV0JftQQ2X)F@-U@9eJg^g{fK6IXv22HSD$=qY>Cp!NLhBfsXtKPj~napkw-9Wc75 z7veWuc*r4m>51sdh_8Mo+{+8`N4W6ji~A6MV)Y)xJ-rZrqzkXOTp|3A<4`dWqt4R{ z@khDv#7)}~KJ>&-hRM;q%(pMqKrMP3EPi7vj(7 z!joP+j<_;RCmYGr3-K3l;>ygWP@%kN{RAl?DQK1I>4o?qb9-<5xOV@Gj}h0Jk64G- z?&*d2i@5OC>eq;?{&%8^0}DM*FU0?;3)i=Tb$ZeI2~wwpZ^h`IUWmV#3*S%_>h}WI z)a&&K5A083H?D*e*PAAUO+PjsyS6&wo?eK*lnXD}w*%oTi!?yo(+lyJap6Ty?<0Is zFqCG+nD_KT{NnBJ{bSeYkUS5d5suMSxRegZCv8OsMNp zh-W;|-@xdeUWmV@6OSyJ9+ub_t)HMAkNPf0+|vv3*LLFJXJ2kbJbdu-#E5%(A^y59 zd~$k7tu9(WLE%;MEJU2`^c~T{RH`TEU}z?d(e7XDgGu-T>a`c-FG!>eJWCUS}Fc!PF(qCL`jUU zbo(V8M)$N*{9ib6bwl4fh^u+*{fjWyd0Hv{mM*;GI(p)iQ|rhB^R!a@U%K$w$-brN zA)l4U#(P>R{x&XrNt0N@)BZFCaZfA7-_D7L&3M!u@vtI!+aT^~rT9BIabMoINe~Y| z5<3QQPbdm2uD>Liq7~RuK@%M4!+O@xnAg(pr z(HC*H*@Zpt{hWAsmzXz*ho`T%6md@{#vkLvweT|(UH$IQ^@w{qG5)Vyc(X>Z!|9^+ z6QsuaCm`BRU)*!cT28Fo}Yb`r(4fC)ZWMaRFPDlh~#+Q-N24P9(kN|vL4@36w(f+mE_ zA1SO9Yhxe(=prU!KLiX9-STQO;+ZFXQ3W~!a8D!0Zyy3;c=UHEQXwAMD@LqR1@7qw z*r$FNt`{uP8gb=u7EwO{+|$VM+sAx3e(C-o#MK#ZM72`jUYlC{_PHL8A3FgzP;{O8 z-7fLU6?i4<{b%o@4|JV>q8JDq56fO2aph>C^VoHXJ&hduxIa%oNeR zHnsStx}sO_2rjnW_(XGOQFKou$3C0GqU#x#v_V`sQZxnOo;S`ujKlG`-ykQpqfZ_n zmRitwZzIP(eZz6H5^QP_xN>dWEsXBDsl{&}w_&&uSJXh;(GGN!o&jH+sLtx z%rM-z^p78Lt^3{2u<_nTj(tXk<4^MJCH$+z_YwCta_mDf96uNvO?b5ovkCvf>yfcf z!Ek(PR#>fwp4YN<%1yYZkz*fwVYsfe0XM?Fac95TkGQvyW1n;3__c;d5my)2`jc?4 zO)dUat|#v68DJxc=xVtReU* zA4d1w)Z({~pK$z5FR%}7e8ulH(|Q{@_IVSIH%m>UPECJ8Smw}pZzIP(V8U?ia<%;! zU0HBHAvWII$gxk9Fx>1AvjcJMRYY&Zy^S3E2noZDlbw4L-u0@ebwK02jU4;T2*>BI zI8At-H8jtA8#(qN5r&(^D+gwqU1h`$Jc#bOsl{)f3gP&D#W#3i^Mt+ zaBm~WKH0(XXefKtUj=7?rOLT_tc5}W)+}p^p&u*~jX40``3I9H2 zAHqG29Q&{a!*iVfWf9_Lhl(^^cpEwP=?sPkulAQiJd;*hY^i~+^EPtq;}{IjdAu== z`N;AWS7774jhyq&u2V*(`vs$iUoPWE+}p^p4_vV5>cC2n6N?+?+ns0+;+~sY{H_JL z`pr)?&-<>Xx`4R16JsB#;L$gzpJQ|-)$WfG_jY3JGZYNhvwsd=h&@#fuR&{CZzsk+ zG{JCfK`;-L34ZZ1n#MPbS`(fj~of!LA1jF_9OTmS*8{g;ZHN?H0 z82cOq$8Y3ILHN?Cl@RxKV(fzt9Dn=I1;W=9*@3vX6JwurV7RYdUPuK+ zPTXiTgywnc(-I;P_jY3bb>eD7gQ^(aSH7f`1KVpGZztxh6W4qHxgBve-*kFGdpa?3 zK~7w$dgU47;e8ZQq=L!H(@Kf^$cY%D^DvWE|Ckr`9LGQeTHp#?VeUj zToM<)<(p}Q7t0%mxTlp8m&}Rly)(Z+TrGN}GUA?AN?dXmUMnwbTD2e8kmdg%?rEjO zrL^(?wW($1r;RN=cnpJjCo2(ydY+qF;#>v(kl9P2VkhvB6yekvo|{_Y(uwA<0)OW3 z28}>GvpT0MM)&kW;#>v($gbP=Af97KvI2yArPOh*0>5&<>3zhNCiCth?&*cZxeEO1 z)M9rDe_Z+<;a*-yoU6dEj$6=-@VgV}A@JPP66Y%LD~IR3CH&J*t5b9@FC@-Y;8&Jq zhRu-T#wn?f(d^~9sU^-;;8%l&!Vt9a_UXjl2zY`MdwC&ot^&VuXb5cVu<_jgq@>1s z-Z*!GfBg0>gg?uO4n6(3jDsV13w`=eN=nIJ-v`PSAkzooE>UrqVZar`9CA> z>4n6(3jA8<%P@D^*ZxOCdgXe0A#wR!UDtOnjXL!}X39=Hy^uIpfnTef8s<(r`s_S3 z>O42K#JLOnnGM+3VdH%YQBKT0B|4Cu#JLLm%E?NwUJ$ra>O@lPI!`Yo&Q;)7=k32o z_`ji(3HS0s;#>uOwPba$;O*#(pKeFo(+i1n75LS#RV*H=g5KDkUPzp)z^|s9-;(ei(FL*bo?b|ttH7@| zt9ym;on6y*tEFs>h?Q3@!CDT zkht2;uG6B1fd6OXU*{4nF&3k% z`+8kL+|vt*a~1ftX4i)kzGiJR#67)`I9GvR`!Z2rp8vfP-FHtfB+gaf*Ct;FFT}p@ z&pK1Ff_)}6n`vDIezQ&J0>q6CpC!Y_dwL;pt^$81r8bmWMf8ln|3q(CPcI~{opaDe zmaW|a@f_DnQMJL-3yE_T_`@$6JrED?Hk_8ko?b|ttH2*V?e7VM7r&kjuibM~OPs5~ z@7tNCAL71jACYnEX{E%u3jDrH=Ux%sGn$?_Pb(#^hqLRH6vs*uzV6H%Y`mwH66Y@P z4=uR?aW%!Aw1|6JDRHg>zjEu--H0pA9~42{(@KeR75LTP>-~eEgl?rEjOxeEMh z&x{QaSN8Ow!mOv266Y%Ls|#1aZf8HZk!WWqw~dLbY+}Y7jbVZWxNyD?)1NdxK^W<*w_KDNY70zao;)d@SZ2Z zakqOu(RH$syq%ayPFyo5K1W;~@+%c5y`7jTF1&Rzuu|-v-#&>JC*DrXG#6gPSW5Vm zl1Z@Zyq%cuow!Zbp@B6VZ4b=biJ58R@Q*sYzcmFq@S^om*E6iY!H=~6^W2(J z@IzZu8uskayG_lmonzP@73*$#yE{Knla82yhe>ZT)ygjuhzCor_ad+OjmH;tmG76x zYH6bY*!QZ>+KrhYEwsPy#W~fiOFd%U623WxfBZHxVzc}+sx^{Xt{B6K3=!(EUqwQO z?k#PtFYTD2dw$A}Br|{{Wb~r25G132n!SU_fQ29-^-7a!BB_@<12t`Noy_);kuO($ zO61exV7}R8!10lhH@~;~)xJ*s+LH`K1~$IP$b5IM5Sc6aWg-JUkBs~{!7oH6DgarN z-P*u*7a7^A(P|=_o%)=}fV(3jqXz9DGGgXZB0qdru1~d0nfM;Mux2ol%+ry@{B)GH z)Qu+#ZFodv;Ea-lG_Do0QZt)0F4Z=XWKNER)SfTviKO;;(C%=jVBjBrZL298c9t3Q#h__lX{^AP}LBv zWe$yueD%piBA@xz5E(FMWaPXm)`~ek=FDH4BguRj89C_6S476tgi60?E&H%$8F{#| zb>tvE=7Be? zAVMqX-9?=tgTxm6gGIVv)8_tOBmZCn(Q z0W(ELrX6&NTAQNrUL={1A|Z`i;Mc~FzJG2uL6TW0GV;-t!$jV@_6w5CJ&}-Rw$pEr zG(-A8CL~4zGfpIAj>j#0Nanbo>jsj{Gm((NTbEm@qkWyhn;#5ClG!B^GUvri^pxd1 zU+G6AnNuPmmC5z@V@ze@1Te?MbuyDgLaGzG^+8hoHZ!%B85}Zl((GD9es`1Bn#|jf zkvpTT9L4S-b$hdU*ji?5NJu?$|41bDh+~D3WR8Y})JA1Ehots(DQYb#r#ZyO-V+zSb5qA$A(h4l(;}%f z@|Q-E`2rHsSRea0lE&(12asfzfQ)=Q&@z$YN5ZQfZINVdfQ&p^uRf9f1_h90Mu3FW zM~^&?q&}hySVy97nFk;vTR#Z&ZHq#5oh(&$cFNP-2K<<#oUM0zLQj11j%1Qxu44BaNa3tL>cB=Kfs^pCH0BN;vQ+yjis zK1oEg4@vD+QrJ*vx7IuH=49iV?U2;#9xX+rcjC=SrTHu( zvmBv?ePZv#o0DhnJtp#aqa7Gil6Z46-)Ab3QN@=K>795p(m0nN5>jzLjT6H^K~j=< zGg7-BlNm|vWEUi%v)C5bm9%>*523>mM2^CKxqycubn9SkowyKj&BpAzYvcyn@oubM>8Y&4C? zz*!O5vy%6owHYb?DT`<{2}w!f&0^}0`sF9`cC6)S+V_)v)Q2qQl*@sblJB;K6dR3?bXHBDDyYuQJ0NbaYZRHdiPc(* z1&|D0x1O$3l6W&R=ihZ`rp|dP%T#QwB=KgXGU00|VTiYbGUoZ;NJ}sPb+qpy##D#BJBKkPDLad)jz9eekz-=$u1HdLPX1nxW@>fQM@ccJ zBxPr$u1~&%F?HXkGm(^}?2Ob#1V(~3C{qO_B`G^2jlAQ+F{Tmu1tn^dl%0|K&I2@? z=v$g3!7T&Rk18uXz2Q>k%lEs~OC zpOMCjqyP?St-o5gFFRFl*|lZ6Ha*`j@xS*7 zSdILvjP+`W-zuXI_BB@v1 z4=*^I^fnnd8JRMcNMm6;BE3xpPL8Ozfylut;N*xM)7xa=WR>J+h^$cbGa^5DSB%6X zpw?;kP=dYIsI_BCOa>maQS^8u^}2U!5$SC*Fw#tta0QZP&<>b{#dS(d21e>36|Nwu zXSg*2Nr}n8NcHZ$Y)GoNuT?}+Vlpt&-0%ZbNktEttFI41^261AGo<|{A~Q6D) z#AM(xqyGRK#*P_LsW6fflYx_o`nDo6sE9$Nx5>arOa@Ng*t?y` ztCzt96fyrpb-zGfNJZ?Cko!m2Wh6+6$-rYyTn{FoeOJCcFo?(xSNGN5AkDMMu!JR$ zl$Z=Gra8|@g{1jo@o`8>Oa@M-+L)inkBgi^QerYN(zuW@7)j&Q_xF*Mm<)_GW6q31 z((IcyhDdLdfsqlJX4FG6BF%-bkd&AVoJ=smN-OQYHUI7S6iJE6z)15(^$J8@eilsR zhpYQV!V40acU3whB_;!pnWiULvtlHeAMcolq{L+4Wcq5fk}^}50b@gqTZzfQ$r3HV zg0^FRnvqr*AFl34hMb>*WMsP82{ER`WMDCaW4EkDGWg)*7f4D>21e$5Rf9%f&ga!> zHj$VNj8vB7r7@%|Dl-OSN=ybus=wCmf~{45IZCSiB-VK z;~k-1F7AqYbbdD^B~}3=^^#)~A*mN%xf4l=RlrE?hgeASL`-ewJ9-OBtO7pYwW_9|Dn2{cg{8%g81`}v#$Cp_#YTaxfIQmy}) zl^Vvkwr;BiNJ`RnM(T@BHbhdNpJX4BlC+(XN}v8#3Tnqxy50Q*NlDtyNaIv8u(-r^ z8b`kxiKHZLXQY|EZz&|rES*A-l%(y9G#({skEC(;$u=YMi1gkZ&tmEot&xFb;ZfAL>;oYsF?FT( zd?Hi*3Y&-Q)_SMUJZ8+EgG9F5(3(i^^qG^T*LEi|@2rMIdZ*8v{I^>sSErT)HXB|j-$asBq43fs}vKx_WW~6$vcSR)C zQ*&A(DM_ChX|6a<*J;i;vjs^>`pn7HyK`eq<4xpCBqixHCzbVGku=kM`vyr#`pih< z->?@*8aGCeF~&Z~Kz3L5lv+yU+5|Hwrg!?xV(K*pLW*ZUWhG+EBPmIr8EK>&be+g| zOc6dPu)E_y&_`T0yWvApl0Gvs=Yz`sBAN4YwX#S`(q~303sNXZDpTif zLQ;}GGg4hzism78YGtyTBIUbq|b~rYQ#Y5Bd*gZS)JBHlJuF8`sI(#BdPoI z!TuyMZYAk6BaMvZW+G`MY_SqaN&3vmh=V^78Pf1eBqixHBh{z^kows7GxVclNJ`RY zPUhZ9D=9UsW+;-9^qG<7tV)m^ikRl8flz4|JtRq=8EK42{s>8<=X81t{)c*bty@Qt zR7)tdN|hwuET%p?QBfrIZ)bmmt(7F+j8wXuY=)%LYy^Cok+@Dt;>}3o@IKhDZI8Y! zOK9{-5^qMDnJQdG(oEQC3dWQq-i$PE-kgS{ajGy`6OzQ6k@}okWs%g!r-wbL;yNXX z_XGI-k^kpst`f+bUpAN7i&(psj+;nl@`vBqde>BXgxNU;!$~TuFDswh<9iVihn_ z|D`&d5fP-m^hE(AB~}3=jTWODBWW}}53eZ^Q(_fxvg#M$vx%5S#p2*x*`&8sz({@C zY*q)Q0<|!kd#;jjMRUe53eaZ=8TtFi2QJ+z1BKdx(d>)+8SON z;yNW(0gu_VB&1w+%toVTBPp>87^&%Rav-T`IocyBu?iR&kzgfMpzYSaIS)%Z(OQXB zz(})MzUoAN9=-rciB-VKAysz~*}r;QBqde>Cu`S&N`c+lYSXOgz;3O?D&Su4k;RsoA?e6g)J#x$BLki>|XlI{GQOj@!8k%`iRB_c?P zRlrF7Qf8VH^uNc!OVuX5tpY|Gg;tiKnE3{R*(pegRlv!N7h;J_SE~_{603lb`ibt_ zkktR${3((WtALS4?n>*CG$N-|Cer>lPOE^EeYe2kL5v}z=fe|7N~{7#>c_9c!pwd? zi)lWXlNCwx_OrD}N~{7-wySc5$X3((A}O&7IGMXG z)UNHPEN2ohlEp}nSOuKi^9rhJHo3j!TOvPPX>avS10*Aw*9${ZVimBM5!EtV@$8rp z6?fb~QeqWwvf!Z~h|D|X5|JOSv=3jRB54l#D+iJitANEc8_z6FWc`zek(5{koNRg` zFOiLY2GdB~6^T{A$x+L|*s$-)h{r{U^tK8Z8QC^7m_~w(Y*mJ4O^H>&$lzyBGa(uL zv|cBSDX|I|8Rh%@7bK&?HYGq(Vihn_IldOsST~Zu_Sgk`j}Fk;a@#laMrKy%d=Ptm7pn11Iz7Pl=2a zNASdmmzWHkY~2R-4~iZ#TKsSUTPracI2p5kC6RsVUqMo0GBDCNb5Ki*6seW(`xBG_ zNVfAcQf=Rzu2XIMBV{@gdxDc~BEzt?YO6vt_etytMw*ZB#2{%t$V6)}i9Nwcb!73= zNUFo9{enFtF&P-C-&zWWoVY9cKaap<5cgAJGB8qER%$Jh%97T!9+H?0j5JM1F7246 zvI|O^BBsP-;AH2DNr`Nqi}Esw$-v2?bt&sG3m5wwV@ga0Mq0h zJg|V~K7H?F8u1^l?z=X}_w${FC1ggJ4Ev>QMH3UN?z>a{(2_SS#+vdiCjEK4VIIB$ z779d~4~w*Tqrtk+WBtVcDV&2)wMc!G3(ac4{kFfM$UFCEHcjZ`HP?u|-)kw7lH8w> z(HDo@LNfYvmR3Z1XPJ!DzwWpINqyk=-ykW;{TXQ#nLZgwBkyuBn#FZWa(_;0RSOcC zwLRn(HtC)FGg9w*8Tl5jn`*X6wGI%0vvgAQnN7ymFbAL|$cw#A$)9bz= z(mVI(Wa~IECheHbeuJW^9rJ^C#fZoXxrHE&umyXOl;r+AX79v(kkq>@gVLvn`QdE> zrZyHz_9CX4ZQM;HCAmM3S>OvOA=%d%?dyW1B=={emSk};B-M9kA0sKr{TXQqZi)6n3CL|$E=xZD3KMaz z@Hp(4m(xJmN?fNT_vhrw9Hog|GGii=lH8w>Mxva3iTw9>DAbCWl3n(kto|@Jl13#T zl#m1|$^99rFTV<(2WwyF!iGAL-nl;~OT0QxWZ@Lkkd);9j5K$(ibB%dw3}i|a(_-1 zYDQzo%$+|7V@h&=P9`V>xxYOUo{t0fQuL4{_vhq{wabt+C!Tynq<8Mm$cRGSnj;wz z)%_17CAmK*!{+uUGGzP|Bqg~&CzCv?i=_E>JgoD@b^eEK0`<#Ud7|AzX7$f&ASucH zSxhr`3}m*VZ%s29y+0+nKPU6GZAWCzqLA^4)=F}JPB#6@T4u$^tT(w9k>0sKBO?pf z9EW6Nu3~kOl;r-548A;kJ(9uaN77x9! z8#@F^N$$@`^-xl%7KxbZo>Ie+lw|OnT)#P#$kh*MzLjL~oV=Bjo)z`dj3pRTlEE|5 z+PIbyW9px+28T_I1W5+ZNNxFc@B_tlYDBSRLnCOV@fi3M*6<41Bp*s3lH)Q z8$Ah0Ne0hIwc?z>NGO|gACi&`o|B&yg{^(|=&SIA)(Mgfo{{Fh9y^dUf8R;>Qo@44#q7xNK)JrtKnqo>act+~G7mY_!-`X}9V@fi3 zPR<)SmdIIOWJ6Mt!9RF^Z$T?-%wDu=`jxG}2U|b(f1YRYQ*~_Fw`J}=y*qTyUAIl| z_iOm?t)Tlm*3qFkOM@FMjDgThy|P*@6kZCe$Opd2=9ueCJwl&fgWY2`etS4P(gJ6x zIm2CF>JfeY;}FE7{~EJ~@IWTWaMzc5=;IFUL|pGX0*+yc=qyQRxa&(jj8X}IMBK=^ z`XJ$f^Y9FJeW`~Ld8sYonGQq~9!S?2?)p*>y^jXogy=fG**iFuWj8*MvoqZFr5<{< z6b9j+q=MI~jRz8UhP%GhLtogsG~pAYtzi+52eNmDyS~&z?>r8SZoBaf66Pe_^TxTp z)WgWN@HXN`#yQIoXL&q}?)p*>{i{ZO5ZBx71}jNiJ4@yn?)p*>GgpmDh?~J0%(4P! z89l>YU+SS3>juW9eeK4VQHZm&p5g8<^+>VnDB|kNPat!(qmQMWm*K82^)SzkYk|1A zZ`?V=S#h7?@n7m8l!Xgt7R&xQ;YRrzh_fu8;qhOfDZ=fw3G72X~8jr(#T ziOc{Z=k)r_Y;j{6;DFKEra^m`pO;EA3qaW#70CDC4Fnoy%-~LGe zU!Hq3;Q=Fn;me%3k)c-!ivBL>Z^W4!!0_cxTz^!BUK9G?k+6&s*Ul^fhOcnp>u=tr z=<{j~Mx6Nq4FA=M8!3lfB>dUcWQ5zEG_D|?<{B`3iwjRtU@_vxgHOOZ5ZBJE1BU zcj6JnyKF%`Lf=7So|y;?-|505o*X1RUAm4KojC~%-|fQFeKH1d^F=8z1;n*8JAvVU zIB~Q2odkqeN(9b;z?rAO@O>`4@ON(r58p&(BW5fxe7_4Xnz$R`+U-jiow*APKj^~S zh7BRSMn_s2v4i{!hfg(q&z+4dQHhpDk*0bZqcfj@;eIC`{Lhjb7(MvRx`c=`vw`79 zoOo24QymbGO1S$O;>>Yi_)#aWY)uZOc=5n0t4h*FN@hDS{J0ZW|H}F+;_9}~AzKjl zop}!oKk33Z{bjB9?da;tcJ#zC1A^hFUHJXR`w2gvhF((4g<$wuC$85SN^e-bQt_$S zcxFW~{G1clem!Mn+IHi$g}vG!&in|5UvT2aR|k6{ZnWMEhL7kvW=b&pk_%6@uNva| zi`I1Gm@~ofD=xfj&u%>ieyAg<+zf}mw=*)Ov_80<_ndgHG#CFuJXfL!u{R&0vy%iY`U5AfubO)taeYxz@nQhn)2%rA$cYP zNZdHR^{sjo-OH^w`pSjxp8<;@8{e8wtf578FSp|8zb<^zx2Xvq*;cp}0{3z&j=pu` zM)Rum5jU!~6|ZE#z1@l+C$9hWc^KmQv<_ksEbzdwgTReD_K_1e8=tW9_-m8J`JJb~fqow)wv?kL3di7Pi^bZ@sJqZ2p296bziqu~!?`zwq( zwpoEi4|d@xGkijL&^(cP0q*TqWOm~EHEl2A`pM@lu<`7}0a^4=CvJRt=n>*Zu8|!O z_jW6?x$rEdpu8Xkt&yU;uvVe*-fl&h6W7n=3N-$3yWSYx+pX|9aU*|JEJZh)zaZSx ztx#R~fUh4C-et)zh@#^~N|MNSvqdFMRBo4uw7*4wQB*LrXeTOODNYD^~FSo{@6_jW6C zyYK_o3lqM1-;acQx)phyctpF1Vu(jH{%rx`-fl&H7hd~!$XZ3$MU=^-Anxr}6m;RA zR(nEt&e!yQ_jW4^J8^S#wVsHZG35_nbZ@uf6Bqu)w5o*H?g%ApF;#lI6-8Zm>jt|C zuebM0#J$~$;x7E#SDgqS60(`_z=jAm+mv+TksTMkMLe>3ng)n_yA`FKc<_sJ%@7ZM zyjU3e@W^<(6=j`xlv;*vTvYbV6y4jcDDT9TlP7j!bS3V^Lu|aaTT#)8s}FO4)gnfn zdh1)^N<-tl-HOj#_`!=S2;aL$SgU}0yA{=(xR&&{J&0>TCDvi%z1@l$PF!!jbs6IN z7n`BHDn^~RTT#o2YrC2(LR|YjY$)R1Zbcm@ZY(GVH8VRUb^qlFVUU(})Z zyLo$ScEr8Sj#f@w{U(f-h3e3!2@v--J6bz&{l3~98?Rp(LD_`2+0oXCE6baL#U@6b zvS?rqjP7lAw0GiWRE0r^o7pSxLfqTz=;*?`Z~vR{mVcE*+}rHv?7~aUUQKwuE!1`1 zW=B^iuHU;?1#$gy`79XS+wAD>!u`h*5We%4Radbe8E>X`@sao#gyhz5j`itfJzhbg2-`2`V#NZ31*p$hB7XCKJ6UleV?Zvn z@X60mE;P>tc$!XFGck8X-rEBbAhRZ#<|p#snPZV;hKPiWeo}TglF_$AVH}B=%nOl_ z`t+98h1(aee|O+2lFSB?kj7_kp_V1O%_x_r4v~TV8Zxrbl1)VB=?rUX(OSv(7w{cC zLnh@xQjb|!mdJqbA&IFs*ff&JT8l;z8L&KL zgw!kQ(~;CmE$xaVGc_cnmf<5W;4jhg2Cm8%+)ptlFVU{ zk=Yh(ATra-*F<`Mssej|nw`o(-N3#pt+V-%WWItVrdj5mL1eKaZIEP^f{d*AW*dFD`XA3i#bBy$NQq~7p+YmBMan+^2?ah=Q{kdWH?22d0hJ*2I^ z-X2Nj4M<31^z)NQ8bhOsBgt$58JW2Tob?kijr2w5Ajup78CmTmlooBWVn14gF*86$ zwtkwM$mT=9=NCQ1d;kgQo3I3YYRkj0EP!!c!jNPZfP_>VuBTP1S}P7tR*0A^`oAdFcL|%_a<;kL`;_MOGy3LbDF{Q z!zpVb$ufNjsm!Wi^=tg|Iqk?cBw3O#A(R?P>MK zQhOPx_AE(cwvTDtvaDW0>c{nsNa}~Xz; zVHeoAM#*8Yhh4P8NR^yQ9W0w?8e-D7t87d|AHDHDYUuTDi`|*vf3h!DU>acUoUlu6 zT%*MtcuMX5$gM(lCi*mSAj4-G=|RJ;w{eY)!~P|WQTNHxN*u`bnMOv?u#0Y7V`x3t ztZBESdM$Xf+U*EzZ(th1pkY_un1)gA&c~=>Bu`!+HCX=7G%|yRU4CO4`ov*iYuW8+ zHmE3R1U5P_4KO}W*flt&VU|r+9yQFAGcTeB^8}biHqfvOaZE$6Ijb*f=-IBWMh)f; zFb(nIva4}SLksHys}*rA>Vp;V78iZWd;+E+mbG?Cj%k>Wc0!&gG|X*j2A~FW448%r z*J9V@xJK<@8tZ1Z9tTi^c?V2G2MxP8$2Gbci>Vz2yU-Y8E&|gqLBp=lagFjn_g%SmH?SFz<2`hz(TOd~&N*!4T6VMH99Od3ze{)_EkUIf!92pW~0?tfE{MIia4pQAU>cu*hFuM08ircBGHKi^ z@(SC*J_CYj!1Qv$E(vmt4hO8#h<#s-BDY~6ifdt>1=A3VbGt6cH1z$o!B4mE?X-+E zuQT_8X_SO^*u_Dv(MWt(pSIRx9md<>=`l0Lga$TZALZ|7h;%q5?uKn><-Fb!c% z+hszo(Wq~2(#Z7mJJev_2Gb}H*J9TSxkh-AhNxj&@BcMwFqeaAR0IvXV8}H#_zI$i zIV2rC+~U5lFPvZ+l|jR<8ZwQD2CdJdMnu+Ndghq(!8ASt4ZC#6HA9pYu>K|6Q;Npw$*}Z)Bp{;h{!a|-ZcXnB_=dL4d#n54Y7>3 zD~VjA+VFwYj^JRL$CyLHG(@??E+=x0TC-M?M&`_8u^r4SVH)+|TI`x4*BJ0_JZY4F z-IX)~t_jnCOFdy17MVum=gVmQ5t%&?JP@K!nSa7G8i9sgU1S=;4-e8iJ2%(j4JB5gajGmkdj~a`yTUY@gN9vf zWE$%Av=y-(>N@esWuhI-XJHyGK%=*FURU>A1`k7wQ*~(n2Xkwf20TtDhPyPntlLc*h5Ku$!F(I0(H%5KIyKamoim|^nm^sI zsKI;~rqL5LM!Phc9t1zo9%DtW(wxj38K%)2G{!nL%zs|dI>`JbBh5j~n_(J#LE~Ge zhC29VK59p!gvIb$m`lSnEPCjP2~G|D{9)M4WRKJ3V}3ym=GQO{Sk9lA=+sc==Q@lU zO8=whQG+=*Ok*HuOm=FRS^DQk4ddLuwNZn4I80+OXiRl!Gz+PT8m2mz*4oU?VH!h0 zW4cQtdi6upFrH_FKw_LSUx#T72aOp{4gGwVB&easA6tfXA#-?`#z@eZWotmRtMA)3 z9W9^cqGj7yv)YGjn{)x&re4oBZEVwqnL{k-HxTqk3VI?MR*1uP5^hhiJ*=SvpNvE@wC|ZjL(zHfzO)&dppBgt$c37M-@t4c`bD%Na1kpTliLh6@}!*(KZo%-4P>5*iXkc2cA zo;!o2F?SYZH=>8waTXal@WdBH_RkGVIGe2Wp}y7syu1lXeb*;&jKn6rH*>JNqR%;P zO$+hYIjbaC3N{(AdL*sYpD$@l>89YLyE~X52_fee&BBs`;)p{hENh2X6itb2*WJKY_VMsD-Mnam?I-Nw)oOlG@XrgbKAtNK# z7pIY6u1XI}DM2zDMn;Zl4Q7MgwVw+m{9g3A_Mk{j4aj#j2UsAM&ahkkz}TdjLh(w#*mTv)Zat~ zJ{?0wwi}w0Vt!e)6Ozn8k&%^G&`fQVpWhToW}C>!6dfK=%q06Eu@`rRnI$svi=W|@ zZ1+&(sb`6_@7(`*uNce28xgrU&0Zv#F(QkZBEdQ$6Yl{FL9~|HArexbegYQlqP6CWwTL$T9LGBqOwEi;!g2hlDiee*XkXb7lj`NJMLy;UOd2_y!Q!q7m2}f@C&_ zjQlsa36am6&=_LohJ=imIl38=5mWvihcTI@AtOiUrM`_A(Y_p#%*c?D9qyc?m|wo^ zLZtU*4mKy4o0mWWCGMxWzV8zxnQ0-3X-?Ly6;C|*ZF5LhMBg&2LPk!Te2>V9=V6PD zAeliSBexw2%$l1^z92GSOGwDbITbaG898&(1|*poAt6IT`oIPf(L*7b^v6gt3qnFh zl^%Qo$*7XWIv~l62MMXX9t`QVh^f5HbrVTuH%Le=&*QtN=mR5|+Mv#!&<-_-p)GqeuhplDi zfrK>vN(MHJh-t*Wp>+bY3}j^6Tu_v=$(Adu#lJmnnNc7kzt03IwM|a0xDiQa56H-0 z`u8VtN$4L)GE+c8`nIovG)-(E@ogzr7)i-y4mKyKlX9pSQ=QO(-uBEyki=BSf83kM zF>U)|OlBQO$cU(SbUz~^8jV7d83qzk{q?ig6m$6inyHyhAR&#g)FDV3q1qsf$;<%> zsr=P*3X)1(f+;AnyvL*^`BO(a?RFC)7Q{)))< zSD{!a=3AEZOGqR8#lU(f%gU-qvQ%F}>hDsW!kGH2ozszI`TBcg;7o=)@oxWQu_Yxk z_I?#R(d&XG-th;MM6#I1dMgF>Yms!Y#e|Cg-MF$Ye&dnlV;jWpVW}1PqKlL30&=09 zl0e@JxzH~!m4d6WQj`C393$%MvPfo)82TfUk_?{N#kryjbwM(hF&L~X5tD82z}7=c z7^xqQhP9|@t-f#7ek3IsJR^-secK{we0?Ark%6rol9)!PL-3XqF^x9cZV~C7!Lyk9 z`V(}W`pQ)zgNMFl+cqRI^$FvyVNCs-=LadKcLvX6UVR33oZUm`D~MH(i0Pfdb8`9Z zCPXee2OCkvUHK2kF$SlGEYt3xzV~5^xgaGOJde3$+Fm5}buZHq>7Btd(v0cZ4@tB8 zA&M!<;2Eh8c?tfJ-9s^bY1~ROct&a!66`@zEB5g!Y^@}NXJkY~awvX@m=W1`L4{rP zkR*d=q&aL^NhHkysplan$>2FTFAVZi5!3oEXfdn8NRVXkob1=MCy`wv==o&ZCnV$6 zEb`2nq~c@dU6m1A%Qj6&NPXjma3uBBx5e87S}V!mS!<0U4;CP4#1v?WG1+HFNMah1 zG2naJ<5n92bxUzqBpE!98T3O^B=uLl#KaA)Wt$;nG3$Rk3rV9!+g2D;lEL$sMMD1~ zGSA`qNJ=tzM(Qs*E=5v*xLK?tptX_=o{>iNt6(YHJyhwtv>20Za*$o;^dW)y_B%h6 z^F-fDGI$nKe}3;O#?5PF0b@!scuv+C1KG4_t@+s(P)!i6m1OXoyp{ABk(b7NMdXK%V~kt} zS*C~?F*u#b5MU%oGI$m_yF4weL#IYag~&lEHIwdHH%oF6b6cq<03-$jGrj z(@Y&XOeu(@B!g#UNU8>13oRk&?IB%|_Yd5EMWgJ-1jFdgI;qKA|_ zH5Vc&$>15OeZ05_l3JqQ?;$D4;2Ei2SWp2;_3WfsNJ=tzMrzsaLf$4?t7TqU1W8E- z&q#fsN^f4hUt+82_VX#p;2Ei%Y6(8J9rNfD;WxljCduF#Y3$gr0!d?YhTa%clEHJb zPOZO*tQ=DhNl6CJ$r06{ur69_44m*6l9CLble4-{BXY`<&PYl!ct-kGK8dnOE3S1M z*i{KO@pa(wrd4 z;2EjTX%C*29dlNp(|Dbd44#ojiaX%++jk}L`CpNgWblks_O%*^q_RCG7D-74&q%ZC zV9FiL@}JPNBFW%6IllfxjA?%JS#FFe$>2HJm8-ln(~xfTWRV2))ZB z89XEPI~_J4sb6be7h5aI;2mFd(bXEW7yloRV^nY1-I@njdjH<)$*$_N+`LzhxmG)c zJrG*=az1FMWzF&2Jn*?CCpS9rtoho&5E6LSEZrL;&JuKnZ+7Cjio}dXJXgk>mkAG4 zbQ!+YiR-75zd~H!P$vp;mZ~#+n-e!?ZCi)9(Wyrr!UOp_!*{sw-kl)z7T0dnoAnRj zfux<`yPUYbEdtg_0@vqOT1j}I_RjDZjPaz@!P z3x@yc!q*QAM4#R@HAVNlaR;2ZF*;%ZMmO4I68SNVI+o3|=!cxRz9)B8#P!9-5RA?~ zVS(X?owzxoFy!^3=gsC>_aM&ldWOe2aed6mT8Qf%BN`&kl6!{#<;1o6L9ogd(Y5F~ zl@VtdKEsbW@rZnP9wHu*^3*QGS(?xA6HeUxb{vg)v;D~oh_hUu;ip{q^1-kKu)A(d z3Gr%#8^;oUhM#faLr22wAK&vwu3~hS^)vi$7hY~c9N|jzCc*>7dxoEP;`;8q9TC^( zZ=g}f@_&Y3bmGRCbqf(UI&{5_(U}Rr@XIbd|Gb2Rr^^$EICBCRe$|D4e5D@Z`t6+C z2@e$X8UBw8Z+;JUqllh2N|hJydbn}S6JYoa7hbyTWWvLa!1h}4nqbBN!*99pkAA<5 zxb-WO{HCC5itCo3;*e#NWzCs5#9t`JM#$`{=kJNNDHU9 zMAzvT(yYO2XXSo|KXT&w_?u}7@48O-$q=161`L1V#3RCAzbUnd^% zT}D{^i))YQ+*&N$;M$p$!0@*&d`N>Cgnz!4_8c-lA%LF>a^cN?1?$d^UUFL=>^gR; zf#DxHadUN5$nESKH?b8>)XZ66cp?`*YC)ju+U!4p(V4x#@FXt$+r2bhm>p+`^(S;4 z^B5SO%!O|#5SVGFyr4nr`E?hkk~{IpX?0@o+9SK`rLghLZD7$;I`NPUc@`la{2IRP z%ARfhKi2L7N{XxL8~Ea`0Ty-%?9NPg54*4sLI@Tdf(C*FLV&QiFYYXEL3eR?cL?t8 z?y$JK2ZyigHdRy4Oc!w8^W~g(o}8Ebx^DOMba(yloq__2R77or9X0( zJ20Non+Lzr(qQ%Ai)U1e0*8);4~(bw=FXH&b0c@W$gNUI;4Fb)JdHPZ+}-<-_~CwZ z+OQac@pRtY>3Go`xij&zvAFLni(ovxH+S{!TNAmfQTS%$ERbM4z?(ZSMQF&KJD;0@ zg!RU;RD$u0-dx+C7s6Hbk{;5M9zW>#zVZh;Y_^;x&C2iEaWV`U_7fgcg#6R_c+Ip z%xX#pJ~AxAU_8v5YiZBq!|JXVb5(W%oaGpd=kVsihtB3e9=v?=G#oq&GZ@e5&Go83 zWkat2kcoO&mS`}Z%ZHCiNEa);!|y8Ugu$~|gYn!xy#B5xRJ}y<2RL|^Z7`n4n`>zU znjv?+xR4t;3pg0hXL0zC^#5O9M6lut7K^ZY1w8eZdLj!g@r$+Qm@~pBMT?u`x%v~E z)d?lkPfb?$z>d9M)HC7t06Rt=N^kDRS@X^&WhHD)Pr%@Y5hw!&jmt^$>)$~r_~2iZ zfxrBj0woJbcs|2wW~=PFf->80%ZHNmwAg}ly-Z8e_2kK7lq?nzq_(~aJT0mtq^<5q zqy2{OAdE=2gXG}*5D2Ja%YK4FsOh@ccm_(>xq9zOdU6m+u3R~ZrIv6xw6T`7U%|lM71xQhFz2X_kn70!&LqG3u4r>}twgC!n;i!w%RGe9x~{ap zjM86(+iK1$d0(r{f-l7$?CbT%B>52dsI z*&`@fz9C5C_o@|98s*~7K*^#FLF$W-R7R=KdkzoFYP2lXkmP~a3rOyH*c&AaG$c7S zA-$jagzLRXPE=PM^HDZ6PmCedbls=}H%ja5yHqDBN|s; zK1yx+tC1wX{vCu$Im|fv^EKhOy$MmW+(N2pB!{O0>uTbN8BWp@SxB;T-UlSxUmAjv zr4^E_Svm>H>T~Ei#DWS*W*)GFWI%0LhoH_OmQhHu&6pJ=Tb^4$(zLx3NtQ*}BDD@WgN1$ z2b3%y5Ty2l0m*_owpzBey->1fK$5AmEhd?K^KO)^$^ReurEf2E{W-|ol-d{uAL zH+<>f!Q?wAUAK-6L@BiFtfsas%`=qR{I_jLdKNM8gU#iDTkr^}j;+@FH~1pH8m-W> zGwC{2iH@!7a6Eb_`-U$a%s&;4HC?l+!IBHBrhUuKYHINUYmxjAFBwVumYqr0f$h+; ztNnEC9R7l&eap_IHtEn4l-ihrg;5GEJCm+68xNs$9h*^}KIB`CdLd(viKC@~f zl=_5?eNhT6JC{55!tFwhR^QYdCK=Q@B(&^Yj+wlTWAupF+#dYi3$g zlVpY@|B$qA*|}^J46%>ePpx?}x`GKUJC{|Gz}Lep`CADJjD(h*%XCYUlT0}@36551 z*|}_5t{lnw)9Bc;6$R3 zH751l4R4~HmEGWoObEII1*Cr~f@zEuqdnq48$Y@v7rMl#b`2bhj58Zzi4D zcKnIb8B(6wN}=&)(iQb~1xnY@_rr0tLgUS(^KQx>D4jRw1)vlfZzi?N`NL3ZXWp$w zDKy?(w$AvLWV3|yehQ5@mow(VQV4bSX_NdnVNId&=5kH^G9;I`qe%gw@n$k;Pqq1` zG{3xJHr_k(yuq4637uFOSZzi>n zV`FTTLgW1e{(SHMPRGwNProbX_XkFp|7%V)eg4PxuX898(WX&Yc&qSwjT?kD4sX*U zqGji>mQ5nUnzU@!piRs0=3yn9G;dI>ad^v?4Vss3(W<$tQiE0zZJV@f64A0r%SPoQ z>NPWG(1p$(hIX#9rzh94jfF1PT<2oW+@~M&oB9)*nS0+KF__i~9w~xM=ht!45x9|@ zyYg)__tQS?K^ZXRT|1KYF#tOe_p)5blBxxT5FzI?# z33AvV6Z*NH?SfeytEPPnz@)bO<2sbu_Ncokg&2U#SY?i*bbZJRDWj_S4Kw%q%bGWl zSV87s{q$Wo;E_T}AqHSIU3(|SN9o%3v>Zwy24K?JV=K&<1(_xNoZb7trP-?akNTjh z842sJZ|wx1JtmEg?OLET+Vq2_NJ$|EU{XK+3g&Br%#wckq2D*46k-4_pI(Q@m>?7S z=?^O$Ln*`nT<-Xn-cNmt0XHu-TJ|jj;f&Y+In$eJ_A9ZT!* zTn%xD8m$lma2dIL2FWga5~37h04@tHI!7}9fH^3I7=X)BO@@#hkrE!i)o6tnfXmC1 z&XByYr3gwP2H>(_3wQtuGEZASEwB1EqN@1~Gxz)5`BA!dEoq1~g&2Uy_G=A(kjHG=G zz~%9+u-+-i&-}+Y9PWowhyl3VGdU;8?RjAJu6kF57=X+9ryybpGE4dyv#b6{(mn=Y zQvYv7HkA6)>kwqBnnDb~<|H*RhUzku)HH8>}N&j3|pQH58c@Bb1C50G($Ths-A%KfmBz8|X>u8|L402WP>W&RlU1Vof0iU^SiJoij+Lir)jJ z5Cd>oB5fm*ML*HArVs-#=~|KXDoWSV{~!WY$5w~|m~?(DNp}b5`!di@DJjGNOzMea zEytRAyy>@43NZka+JpncP-~j=kf6 zIW&AW|NeQszG@LtK*^4yoPU@mv-!GfC;Oh zn^v0(7@K(`{BcX@KkPer7Ni80o<0_3V95=QPzoJ9li33T9BrcG2$ z*L_zplJ*@um%AR1BDr-ftSq-iYu~{$sRczt-eB!#z%A%(EotAuGwHhfsT4}r^=^|% z+IR3wYU_KO*W%AL|E)0^rO?4M>3ZH30$u9}J)8*l9W`2^gJ)7-_X;K=l+;&DzK&Ap z;F)x-D^UogYh{CKD1{E5NoS`ek5M|?-h%6t8tpes5@|9JO@J2{uT;)RmjydOF~C4~;2%T-U>kzAG%Iw2*64xY>L zrz1&5SA9UzzJq5{zkLbTpIS%gT0B?+plS*oJeONHq#?O}{S=f!2hZh>yg?*4b>4+i z=-|1$*D4Rm8#B+6wC~`V%yKZp1C&{Ib6jnw zKq>V8T+Yjzj^wOC-=P$Geh*IeNnbdwg z{V$GIEBbv5N}=~>GWf}d(I|r-JZphc=>3`0`zL~le06N~o+jc)+f=gY(nnLgI^}B=S ziR*X8oE|mfgRiX{$fW*0!L|+RwQtj;UFWchZJKm27Ya0LP`^k$SQ{Wu&inknQo!VV z1J#MpE@fFW@q*IEw@r z@8`{3uM@#6yH)*G@(|*l1^$c=@aFo~y+0t=7ug~K+fU>#wYvmBE6vRwRqUQ9>hJF0^?JC_~?xg!dbk>4yw+A1;(fQ@DAJS5wE*8 z8&+rO0^>7%c<$%BiEA0m8A5&`1 z9*0a@?K{gJ7+>nm^ zjr4DSAnsXA!1yX3zCZtA;;WKQN6zvH#@G1pP2>ED&r3u5&O!;s*ZJ`2S-KM+u!L?> z>{kI8-{8&l2k&4}gW7lf+%$*^)Emd*3C1`1@Ll(RB)%ehCgd!mV0?=Y-?#TD@l^{` zBWFPc<|Xd1$psblQZL&z%%G3ojVo=got6WP~*c$<4=bzu*-!Af;B-Sq{PYA#d)? znJyL%-l-?2Co8rPf$<|gJo&}%kvl$Ct&Y`MBEk4EA71zaOkAo%=gc*fJ~AwpVElwP zcP);5h1@k^D?JjkY=ZGq-rV^%f(Gw=ymb=}o&^+)pYi5;tjR^Ny7q7yowO{aVEmjn z*G7JC_D<~z#xMBr9rK?OU%rn%aV)Q3{Gty(vyDFQ+RnYu9;?%ag%*ro z_U1vCCyY0%XMnRV=-8XM$XRm1_*HN2SUF-n4&E_y;acP@zF_>i4`1+fCGpAiU>->g zo@E$}-}L6j-|y(GGfKDlgq#H#jNkU=j>Cz+qv~50Ez zCoPLK7{Bk$gP*UaD{b(NF7$B1at+2GdUJj7k{(!H@A%IzICvIrF#gzwA8!;xd`m8R zu44%Y<4=9~)Y%ZSS$CPi?>l347IQHE+?#7mS?iJh*MX^U%C~%O+v%+cjx!MH!T0u;7FZ;}s3#d}Gg21+7lk zqUNpyLusvWhneb6Y*s$_e!t;D2&8c4oQb)7V*i;!=I&iErwREl6Mio4Dc13HUFgEh zo1AG5Eo=IfVz9}99vyJ_{utB&d-sooKOO`X?N?Q>)g^(gHbWPn>IOC+0_#$gWO)lu zx|z(jvJhM#l+3nh8Qj$@>FL-7sg zlJuk}f;3`Zf%aWV{mqtsC|PhKNG*2$87N(EKEjN+8ZFCA1nHb_elkASbk6D-j*`VC zf;9eZaucPoAi5SxmXt^`S-Vdp<4&xDl7%Fa{Gk|~w}yN35|k_-k!0M;OR=W@YJN|W z6V-LY{2ZBAnz-hR^?Tp!9MTU@-bHfHi^L@DS5+{n760Hl`wCpyiIN2(Qq5Q+3Sv#| zty+Pk-cMmw1+Td%@)60|N$A+J7(}S4^(gH5ly%&F7Dp@mos7KZc@5?QtTX=D59R^2 z&OR1?NHy17A4YO{uhuA8?jgyJC(e;Y{YL&$SUHi#G&mOh1?lr74`D~=}tL;&OUcs z7d+XkGl8WTl8oitPBmXI+>eq47=kpe<(NwH{4!{PRZW&%Nb-mJ@F=g&KEr(+RvReE zVhc$os#guA{;3&V<5^-M$ut|FWwvT2j(LSOSy&;-AKQBNGwbPlB<)vKuxmm{x@E7i zW=M+JV^Fe)La6Eg$F>tF{VPR4E~JhSOD6;wI_Lv*m});m`z-wnB?~458T>F`Qd6dZ zyFl>Wyn)fZI2n$9Y%A&yX^WpRWg^RMeh^5-t}uq z)?^`sAYGSppF-(6I}|1a)o5A%AW5ys8j`_3Lm#Ciiyj227yY9cNEXdVg^A5#}BM+O7mJ| zo2FzEgOiEg$t6r*br)3@@!v--qmPXt{_Nb>LgeNZe0_` z)q~tyNfs#x((&n<*@Awq`KmRndQy_534+xA83!wnR86hV;bJIRkRV8h^LO|@thJwk zBk2CgG6X^D2UpERsqfl<2y3$VK#)edne@pvQq-z~k|hU%)UQ7EJZoM^Mo-2pG!UdV zcu)k6R_lA~XROKc0!g+U+?QnITe(oO7XN?bm%bOVA@x3UQw}(hJ1*Ou3OB{R7r{5h z7H9;lU;jJGfMq4ktC@9b2#q(Bfq%D!2M1L%u=>#oD22wG$!x?vzpp}Io%{5l%GJ-{s#%TJQ%Ai$!$F&N!mBwTn0qKVts40 zDNn8>Y2SD=>3Z@bG-^t^ZdQ9n(!TL#QY+VY0!pn&yJ(X3jW?HROTiKXYqW_9k0WW{ zcyoDk5CkcfJfDg#hC<`bWzd`ulBs{)gEhb5>kKz1{)$pRpL-HYq48!lT{oi}qI8`f zeG{e7cr)o7U3?Zw=g|Crq7)i$CXF#kJD@ZM%!Orb>H;h@-c0Hb4-7)7UyDhGQfR!H zG*TKcO{(4%BX+gND22wGN&QM>AC&s3ebY$VH{M*XIChof?AR0-vE>NTCp*hkc(k(4 zq0AdjVojm(W;M0z4X=|tH{%*f&msh=X7pbAlxYKI(<7wNc=MX|52vP@)yKoMjCwzX z#+%EHf7~Uxd?~ddLgUTlgbL3{4jTc%w5lmI-dxt|HG*WNW^^kS8gDL_*Jwm?=C0FN zQ)s-oe3PC&pW36%bYBq~Z!Z6+kc4WMJC_w}3O`7|r0dq?`Y2r&G?-ggM@VSAnKb%M znTOKopq42rDKy?p>aTitLa9HfeFtj_jW?HDCJiCED%QU!g~ppnqpAiif%VBQ^JW1_ z`^KBghes}xyuNHbN}=)Q^7=A(oU>}4$rgoDXuP@HxsyIC##;5W0_xZbjW?HRrooqn zteS~x9>DxQfR!H^e+);&NEp@$iHB<6DWnoo5|2N&QO%0O@F+PQfR!H48D+Q zx+%@~)NGoLyC^yo8gC|@zs5D&b!)WFLa&!&O`-AT()|cpA9W@;Gc|-ocIq4w8gDLZ zA81MPkH@P~3XM0DuDyT0Lh0J#xta)#HdfycrrHD6dG?Pb*(lm^HBS#2h?qd zQfR!H)K*<}q0|4c*d8gDLlmV+rqOK!YOQLxZ>GimhQMrWVV zB{fBALgUS(<4%ILRP*wr-8fpI@n%wsSd$2)R{u^QN}=&)(vh@EDU^=bHGf1YG~P_= z%NjwmZ=HR!>(g_*(0FtCt{l9dmVCStmLsaqr_gwFx%&v+9rTUKLQo2gHPrcqXYnIi zHE7eWNdxnG$>-7eqp9_GbhAV@;CNwJDCvY60edRGfr0k@-&t|bB7h6lx@yJ)+YC96 zJg}+y!iVClLuY)b`C0m(Us21p_Vq~Q+2%ePht*k|&bYO%npM}zWr2wzHF)h8^~=<% zI_uRLx7JlNuBX|b9l0KFUU#g{X3812)>SjE-Twq#o>l!~`f|iQT|48}x@ykz?W{vQ zbiR6&gd@-XN&&{Lb=90FpLLOVET?*IR@~FSGj6S`=Dg|1`^0NH{Alo=CZ2I?T{Y)F zC4rvN+IPLjNaCJOo^fkkHRF21cyRl&_^XApk+XK5acf;Q<66N+HHhb^IGVU;GM#a2 zT{YuI!Z??Z>n~oZ2TeG1tg&a@T35}u7C-gB$XzeTzQpRRyJy^5SIxL{;kg^goim!M z+o-DU`OQJbt##Fm8|$VGL~hLPR*I@$QXhMmvS!>`SIv288+cid5ZI1HZk z{)}7esu|Zxz5E%umbcU2Se*p`j9crf8Q0_eSb+G8iYkqS>TLR*acf;QIXLmBWIxirQezw)VW6D%lT+*()7xYm9dWH{ELYfx`34xXh2jPLS3=e78C;88$v*Q;$! zkh92uacf;Qt8UD#^&Yt~_Is6D!M?NHfN^VGHRqX{H6os*Qd+Fe!UM(+cn@B`v1to( z{lv-2$XSBG_#tm@{z__H1xA%6@hVUSvDKIJ8iNy$lZP=>8xW}0^`=QY|i7? zfEHaHdE))hC@^j<%VylTH5sN|EPm=jD&n3WNnqSsmd$zYtYO5pWftR%iJF)ENVBA`k&3NdLD$wGp zH!igMwRgx_@W8mWESvG*$Brr{{|+9BgKsyYBhS(Y#&3F`^UfO4W3jrk(*8zRokb9g zTg$Rpb>}Zj_7nf<;Be$DhhW@Vmd$y`um{AO{WS_X3nLh}mSr>Ux)!+@x$E@8s>oR) z!ML?7n{%UVH{zKG9YM}w3C68u*^KKYNB2ao=iWaEIm;#(x0YoyuAS*j*E(&_+=s|n zK*6}RESqsX;V?*O)oG)>s-~7fz&X!S3dXHv*_?k5-(In}o;XTHGQe3>!ML@Yn(^QS zA0S=Hq|Q3OQr&RyEU#evjrUpSxWBm|R(D((pdn|W1>^60_~qX8VCFbgED>^+TrmE@ zn;WxQm%!@AsIAqJv-pDXPu|=a=gKtXj+gr`AZHndhsVV7=Gw3`dy#8Bf7pwh1sROT z@#YTg17t7ieRpJdTmv~vGZ>HO&Glp1J0jP&ReX({MH-AJ@a9I~IY^*Ybt6d|m6yY5 z!*UJA6M1v}cEn@k`kCBiusRDj7*FEOwc+Wh8POuoZbHry4#t!D@U~g$fn2M9K}|Km z;91PUcnXVuX_3LMJ&Vk}35E|r$N70W<8as_1Gc@?YI`ho3D~i%5AuM8t?AmyRvIv# z#+wH=Y62&MsvcOiD?MV{h8Z#Gym_|i%^o4o*1hf`9K3Cq5tH7VYk6A0G>@vTeSc*v za@#N?CcvBPe!II9zcoxP9D}#QHq400=*_h=)nQeYReeKGx&W}h8j&5kOg>z{y_tBD zg!G(f8)n1=d2`qMy6~K+s=F=*sL5+Jc)Kto#^KGiYNKW%*YbU&3%~8}D#W;ac+iP$ z#AA0mK}X&$%!tu___K@fpl2Pr6J7s6ZX0IAxP5r&>YT)r?8->oF3gAt@#gxI?30k| zC#tKZOmOII!;F}$-rV&x6?{eAI`Suj3S)KKFe4_+n>#0mcR=nOSm-z8Y`p?IZE|>X zW7^`Q$ci;H_kT9h$-yDBPP+2*D9@}_uV$kh$-sB z_x}7VRbQC7CJx><%!n!O!{_vUMttCo?Z|DzjF^%>yzyY@POKwe&YDYweYXuWVoLe& zP4n9lpYmNVtZo}-#FX*odYnU9h~Le+4Y_TY5mU~aYjyVhLA>PIHN-vNIbiSmZ{FPX z%t2Qh*NIxOklThCF%`YJ5nVGJs~Zv3)Hea((AkC=F_nCH+;;GosgAsUtF{?}H7P>=ZHB+rrCh8Zz`cylBCXguUbiSOuAX&Yw5RQKWUBD)a3m}?|fw+%C5 zYWVO+)rS*5R(KY2+b|=hrVl?-9eN{m=!_LlN)WdTGh%A{@Su{bh{qZ91i5XP5mU#T z>;G-Zg4-L&fA6=F)h8hvqCnA6Vz$rED)iV%)oN2D1$o4;X$M z2X7l@#I*6@jb#FVRb^ zZX0IAbn@o<4|7{0*T0*s7Sq9@vkfz1x_EPKhhJah+U!afvAS)T5!20wKU+-agD2;>{iD%GE+1{BhhovtF3!0Ps4MzlBAkGG^xoWA*7!SyH+z+ z2juo)#u$skf7IuHe^VOX5=Pr(|Sin`Am*!OV2|Sq^fJP#*{>EmzhLH`Am-K z9bdyNhvItkIw^>IzOljf-FI@VY9HvKEM9CQH2!Me?J|?dD4)qOZDFI>$h9dSAhoc# z=erxMy3gd8)-`ZH@ra!+;x?H{WR%b3n0CCLxyRA-Bs+BBOjJ$Bd~1Vdajh zZj7uGgWN7NiH!1@95Xtfh3|q{yhTI-;x-FFBBOjJ$Be>T2N2J>;{b8buP(5UjL+nl z_V0iHA=lo!Sf&gNoZ_CXrD-lVf_`qG^!pVTs=pwzHPsj$n7$d$S9x5F)gMF%(19_*N$drPTVFliH!1@9Md9R8^r77gYH%B zyIp1y8RauM=1$)jo~cxIccLe?klSS@k&-*@SD>3zNSC1H$n7$d$Y_6W?!TsNO|0&}A{b%^^}gF> zCXvw@ym{#LnIXtSFD<5hx64c-qXWIUb7=>v?p)BK99FjrJtCvO_u=z%oxxB6iQP0S3W(|>1=3a|G``}aaSl~9QdEh`Atm&JSu$o7@LXK_K zJQQuV$yQBfzPNN;D;W!>46Vyz;WfLlrfT~Wv4x~;--yp|RQ(qbe zH)~Z>U(oP6)@0_(H4FD@Mm2K{h>JCS(;rszmw0Bk`nl%M@6G#+b!?gWa?OYd5L{UM zS@&L6tmzvWv6{{1!+B@zXTy<;uqHEKuGw>8IMr;o>^0W(&6!xu?rEXnwQ6?Cdmn2u z^TnFMHC<*fWyM3m)sn}@n!e$br)F@CK`%_>fX`=e^&HKrU0n@8v>#XqC zV65qzXnATn|5#-{*jW4Ntn&MJSd*DA*DUuGyj8R0ua&T-Zw$t2mMsSHkvg`{(z)Vc zO=iAW(;YZ-9M*Ivaa6^czS)_lraRpzm{(CX-O1OM$C}K1v8J#c8y$Z8Ib4PC9;PorPOSy+>qFW0Pc ztRU@Y$?@hj#j5F>JhGa<#fRwyt7e%3cd#ZiU#zKp9FY`jYES;ok2QVcN>5Gg^%#gA zR88&qoiMD)%$I9ks5pXZ9!dTW*7Qv(SAL7GKXmBy@ zq@OT1XdP^pSn>_B1zv%nV+WxObVTeY=?N<(xveN%m{iTcbvY?HU^%5A!;)2=fif&^ z++$diE$b4bHZ9>@l-ig*nNhNIQjmJ1gV|B)wVRwF=?Nw!S!lr`lDYF&AnEy1njp0a zm*JA8j*u1=K~MZ_36~_BEqq0?ZueDG)00F>a$BM1B-bXML(&sMN^so7;EZP4$?WqqDMh$6L;%xr+tsGln# zj+TXsk{r4{1tdAJ-cEH;vZzpydX`-U zQ0hTdFOl@5gp!Q-b1lh+uIDIOKqyG($u14{D93wUg`YVIzx zgycu{h+(!U|MMHm>~8OlxMV(fTGHLHcSV#e{S#`s8@>FSWbHQeDPzH(B!5xA1FS~t z&ROCS)?}HVAdOMuYhX=da7JonS==YdX3b$Wq;-VC?*(8@mh?%oZ3oZ0(&SbHlq}?v zdrdSFeK>IpJ5rXGFD zLQm#BkCFv?f^-zE4q-uBILjP){!4|Dt$z}vb6%FqI9lh_%@0Us`r3KxoDy1*N953 zT~Hr4ejG|6+O{{t%8<2t}CG?lkF$QoHO&cO)U&VA9ch=?;{R zPHPrpO(CFQ(g=HV9i^d7Nsdy88My4;=r+l=XJ|H22n)C@8lHn>p4Sv_2`xX9+JnOI z!#C>v)UKVO2@#=je*$~6_n?QdQ1DU>*7V8@EQCjY_-8*u$0r1_RT%7c`F9idRX#$AqX)nY2Vy)xv~PRRj}mJIcD1a zS$_3h(fe$Hi=UF_tbbaRLUYe+ZeN!KrM4vtG@xpc#oSCk-LUYe*>OZ}O2R~~+bJqU_YYNRhliKT}(A+Djz4(K! z2|{zvr2gCBvMBY^r=hu5=Pmo%l(e6t_Cd5{jW#OlD3n5T&uVHc^suX`bc|}LUYgMuz-&w2c4q3gV5Y_ z*`O~p57x1*^JFmA6qA%GfRxGF^BsBL- zhCX=u7G>!DG6zu#%{`OOwKvzHbgsz*&7i8u7U~H5>HPQV_as+lzKK$3(Rt1DQPWAD zz1R|^(4sS`Ra^~`s5<+!3MpW+LycBw(V2AhuR`|~SKq}OQ3@?Ollq>>!&p<_(IpE? zp+)DiYJy56E0(x|QfSe+>=Om8j@nPXX9|e3)P4#rI+vsUVHVbsBbGfyDYWQJ1~=&6 z&Xg|bI)dxn+=o(V(V28MngWris_Cqk>U)$zi_T?@>eT5ttG+IbQfSecbmyEN3v0T= z2GVn%(4sTxZ2u!Yr8?Vwp95d(sA`53Eo2{hbioshUEsea$mB?)z)!PS`{w9j1jd$W&ZkKA!c+PBYKR%keYWU0pR3msNX`}Ubh zZF_8Z9brO-YzsdxYBCQ7}-_uWZ;eQsPkG>v5D;%!h0?K7*Xy|@KyI;_z? zTyK!HZ=adeD+JIH(o1hVg;HprxeV(+4{PeizWOMI_L)iT$;$I6wY#a;qZHa_CiRjT zPNUQdrTLGfbsIC|8EF<)AKC;SbJP*i`>!aCQfQx9P3>-ZI&ZaWlVg+gd~ZhjWOtiU z4Qpy0GSJy4w9l-j+o%bT%4)RkOfxB95ZY%ZjY;_;P?~?4QX?F#&^~inKOa0GshUQu zoySoM?K78;Ts=wNO0$xref!L$d+51`DBS~c)5D6;K6BYG93HK#BNW+vJk}K2XD(~j zgI3m(RVq_MDzwi`8p}dvp)?ja7hz4IedcoT!wMw(9W0MhXrH+pdomZvsHqE33hgtO z8$Ko?xjGd+g9+_3lOdxj(KA@c;D_(9rqDh!>A$JqL9FS&KF(W|Li@~Q=-m!UQHI_s zLd~JjJ~QcDRj)Kk=Zc>w3KrUDE|>eKAh|dmtUFM52cdoD@=U@dBv0JFg;HprnbgV~ z5Lc?RPb=-9mOyBqnRNBu3{kL>t{$~gU`?TYW>Vj>dJ0N?t%Ig&g!Y-sa;IODEIF_q z))d-jF1wX5ug2DB^>$+@@)p`>E{9wRC)vN+k62S^pP3A&V1JJ;RD(F*M|lg^g;Vg6Q~ z3C^a^tD_X!XD0P{@jTC(AG^_+Ahgd+I->t;fi)e&E4RX$Li^05@!M|@Z>iB5B`;(} zDYVaAPMOk+7AB|7tC^pl?)P(;x$hzH@7jOq6RAJ> zraA9M%`TZR6kw z$vy?nlC)pY&ZKssKJBM=X3uhx_DwsNb0^2cn%d0zFw?2t6`^V8^2569B;TfkK*W;v zO*@x|;_W55uR>9hUwv2fsRurx)F<{Ygi>hQdCd!hVII$VKhNxeMe_(nRC^`E^VY5h0mW8(ib?OZM{IgaFf10Io7O`&P$GD%C%`c zIWRWNbXuS6-cy=jO`&OL(w)-v5T!e5m0Be2n|3Z&l!e)HRnxub=h`TRrk%?L9Uwfk zo9=^B}J5lUB7!4#Bu5f2~9hfi;CtaIj@-;rO>o9 z8QkU^JSUi6kujV0)>-qS6qo!x(ewKvw8(B)H8ltR;x1 zn4O@tpF-2lq|tiGYLrIv934>#O*@xcZw)88VFpBF>evcRJC}XSQP*Mg42KnNN(xOo zlX|Y65X@TV?GJHb6|<5;)6Qk0k?`wgqSOF) zqa;Ti_?_g}=e%FugUgFm^Fg~wB<x#u>aG$yVsfl_Fnx!e&QKyqDK zST~{0TcLgCa{4%Eg4KQ+V-LYXeoNZ7&s;XSe1&AK(m#{5Z=adeF0}p`rFLXiU6exm z%%nbQX)KibKQm!2SdCU_pSjF`Vm8T~DQ2S-+Gj44O`*~1afbMl{Q8`C;~DR$X3c@| zQ3~xduUWFjJ(2|i^Pm*kXD$;Rnu${TSTzEr&^~inyARBHt205b5=mETVaYg`vlDra z(1a(Wv8K>Ia~b>n4y>uYYE9vduwCA zXodEfN#oz;bnP=1T%lttw9j02|1}@hG};c@h&6@wnMrrTSP)I9(Hb8UQ5(X35>i+d z;GVOauD9+s%RpP4j{{2YVQ*tsbh zYYOc%mviFLHNhCaov!gh`^@FC9uTuz$9DG2npjh4pSe6e3tDzd9*i@Nq<#C$WXR(2 z5L_!6GIJEQTSEKHr2oFdFfXg5|Blf0SW{@9nGAj9KLcgx%F& zS_Eqf?K77T9$U^(f<&8}+x3Biod9mq1tSPk5OlmdHmPM&m?gn44P~oWXrGx3j&RmDrKZ~F#+mwJO`&~e(%CUTJtsJuWrLYa zb!>(9najolA%d~agxc;2D24W!Nq6z^k|^DIt8GImw9iaBdz3Jnw9hp=CC!aeXrGzX zzb^`*qZ+NAI!Qc~Li^05W6qX=C>@h`{e@C!pP4io9fjCO)ii1yh(al}&s?r9OWl>R zs17|33GFkN-LluDnr)iVRa0o6nbfldWJIYu5~sn@3hlExQ{MdVoVU3e#?L&PT;@H| zoG`|JZ2z)}A0yf{3JY%)UaxV3u*TtST12$$9M;nOl6RAq?HaUc8QwgsQiJgN6nd4s76JFqMyb3-Ft24k$AiR7JFPY(GnfbD&IJ}%P zU)DnQcyyxqa-@&>asYyv{dM8xmHBcgzxi?yqQb+lQ0&l2__r74%Q4-2IhxdbIhe|P z*#}wK`mE;5x~cF2f3TrE{QtI^FWde!U$*>fzHEkryJ>*=vhh9q{~)T^dK6yZ8oqh5 z`LY4JgcZ}wmwjvCWgWb1fEQ@*_rVo=AAE53!DRWqUFOS9_%!S=Z&{JAVUYVE!QHnH z{(mXVm+f#M_8owiL*~n|wdTulsCN9A`EsHKWM8 zvjyPamcqa7HDAs_272zY`Eni()A`2c%LO=oF>uel7!3ag8@OnW%KSz?yub;0>5lnw zIRakZm@ij)nvoPPTgce2gn1HXg>y$wmtv~=6PslV#eM$fkmWtsm@pf_PF*KE&Fx-I z^1sU#;wqEaQ>@dlf!9o9u9GlL|B;!$z1Wzy)lF#TR3?m0QVEKs{NG~yv5zH9fjvq? z%d2Ey_wsOxTJo!FBr?VsxEW=}SSJUg6hadx?%tI-M}50_`#S0Q=gYI~CQArF`9hNmaFav+>TR?V-jk+LvVFf4Y*i4|!Nk z?cBX-D7Djn!F-EV(>~;3Qvb2>LX>*gHn^Tx(mv#2Qu}y64@&Lr!gnO?LmnpeBaOPD z)DPT*i;Su%ggjg(Z#jfy;yzDFdj6^r;k-32-h*`+>by11Z7G9N2zgjd?ZBa&D78KR zWkxB4JWRTN-}DDcSA}cep%g+MCf#FBnllO3Xx+o7uS6+?JWLw5p1~}&wVzl2r6VMS zJWRS{y9<&0umP@a>Rk~+9wv=z>mZ!8YF?TiNYXy!;c{-GmLz8ug3G>D(>~;3QcpJp zT0vD)|1L!jltReE<>Bl}N$$G_HyBk@2zj{d^nuO*bGC%D^ic{SiT$&2;Np%g+ME(_d;X$Pxjo*ctTetnI^ zu@Z4mYKI!NKq-Vgtfsri>G>$#T{qK}S_pZVG+ssxLTNlX>W?*rkcZ1Hf5X}VwV%cY zzt|{+kcUZksgrY1x{FV|Px9+)B<_sOK=MYjdMJgEhu6HbW{O9iPlQqkdAMBB44O!_ zpYA1lsQRN_VP*IY`=vJWPf>^ec)oZo{ggi|8-@D%%rT<+gJr4;X z50hEb?U{r!Yno>K6&sH$%hB%lP$zUOuFKhhZR@qOmM~S7m1@4;vpuregpqQsr6|~cR?W@V$!uF z;tWdHqUjJssP|KdhnO@{<{OXFNZJv8c1=kk9%53T_Te!~ebU*DD1~^4%OiJ>kv#B; z?t(%*#O1X*jY(dN4ZWrstq>0}89ek<2UDsbB6vuef+&S}h)L%(^;74%`{g1^ zz48Qz-qf)b;vps-#~#shyyIxKN+BNNvcTkKB=ekr$yznqudlB7 z+~osEp{{l*;3^o{d3geJd#Y^@Y}FgG54F8-SSa!7GTf&u`8Mw(ltK^9!m+T91AqT*iBn8m0EpxJJ^xhi1|^)g1B(b@mziFD*wY z^w3Od+l%c-sjVGy1f|eJGwCW{;3G=cuYr^@2t72D?!oOzy8HZ@m1 zJ?BS~|J>+@qy2`366ZRvAbDgS9U-BI<~4JL!s=D)2!*=VV9jq>D6w~Ie3aU@^mS1R zJv6K7?ig*(Gg>v>Eru>cDfG}x8ux3*pfs)ryhSPW&|Iz_vW(=CpXf{wdT1uy1$D^v z)e&<4bmu14{Dy@RR|+j5dFI_gltK^9YhFInjpXSabR80UXfEfg)yURpr>`D`HNU=4 z!X3}u9%~wJH)KaC^w6xPadBoDk|*3BQ3^dYmv;(6+NnlsTuD$GrO-n&=}tOu07`f4 zZg)xA_s~p+Tz_Lei&-^8&L^YM3OzKF{iiR9Hy-La<7Lo?~} zYhsS{bIrH&ccT<~XePCuo$I00I$pViQs|+XbS>yt0Htfz!TKnL9-2ubVVn&p^-m8e zvlM!0CiQVWV8NC;w)%)<)aMC3G?#m3KO(tl8|B_Y56$JdOp{3-x=Q_z&_gpB{7?Fp zrpyB8P;lR&S?~x6Jv5WfiPL_?n$FP$>AV$sXfC7bzycrZ>>Jd&3f2^QXeQmA)laV} z>5f?7hf?UFnRHI<4E?NCb97nC)r20JNxi}tSVpI${_EjHSX1bsnRFbg14~JibnHGu zcV3}~X405ZRYPfvz4{l{6nbbbA9nqnFSH?PCEhkGDHO^6&y!NTNn7 ze1C#V%^zAFb!_#ZOEXB?#{x`h&n{L+sXgkLgrt2ez@%Po6HGK(HA~ehLef4K;L<+< zOuJYzb)M-Yzy7Y=y#n!vC2xiNj#7vPcunp6Op?J98TQoSoe zEWo689`j3O5#YgoIdt%c%b#VzuOuXjloRq!0^m zS!XMR?Ut;09U2x(etl|vW0mbB*LGiqQiuh3&GCQ0M21y!v_Cu$shUD8z-65{uSnL^ z;lWQyAr|0r#q!D|moytm()w?{FpZ{vG}9y;?OOvT6;w?j7T`7ioLHD-)tRuE&yruC zTEEjh9!l*-@vjpb1au>h|bC-oGR#>XvZQ3|mDm&w+{WVLl{6Lp2K zMxA{^EWl;hJ*w#rIY389_{~5jLlf;cKS@^2(721+V@)9zVAB6(TzY!*e_r$3E+c0;LcOFzI}582a znk4nExcmZWKZRI;%kMnziYs;OKd`0{3oxmTDF_eas-`xo<{*?pEWo5|bNuxvT^lo* z4S;nH39$f^hI>jnl!ogNOm3>PPlyGW)Hm#Egi>Fdur^8|7U1%JBWRb^e(JYg&=aE& z3vl`NFWOK2zh4q#O(7OwGI;XeRm_@M;T#H{*cYZ^)qV=G0F%yt`@O}{I#*x(f=i z0F%bqJaqpwj?aPR_v#1g~L&xD@yw#!)fnt+l*EWl-zbOUj;dWB{AQ3|mD`>}q{ z)cQ4-r)>}H|Lan7d#Y^@>^1FI+}_ux)-xvB0llS?8RLyhhf?UFS+o&0B8eHQSu$*3 zLYM+kd;bkn>mh$7N2xpfLs1GnG^?rKo&~+78m)eL+cA>%Jv5j5VoH$Q9x#^V*QeIM z5A-LQwjteZzTxkrzgMs#O6^)OM9Jz1#k23B`DlyBd4p2Ve`O{~`yQIh7Jge0ZO5VX3}_*YdA{d zX~9D%g&vwocj|0MQMwanqLe}Cp_w#Zw589A@t`OyTTo|TJ^LP-%e6D;95R+A&P>w2 zhh|bYT2{l+>Y2;ZXoVh{%Zm$dkUX_I7;6eWG?xRXLu#bn6}{(iN^pc8n#<~a>XWQ^ zitei4Ftxs7&2f?o9?!th3OzKh8TDgol7n*7nIQDgTvqGUkz|GalyM0?G?xoT^&~lC z9NlfcVQT%^qv<5?rG@DTbq)zVG_P54FDxsv-j!eT&@;d{Os!w(@(W7sY~QX}Q|O^t zO?T9$4=CLO{d%DkdT1^a)INdI_%Mo&t+e1eA^9TVK9oWa&1=5d8%Xl$X1ae0Jv5g)&I}{DzWq;F^BbntgZqpm znW5(altK^9Y8r3qLT_mu+sCaa`w@C*Cf)H0KyPWu_cMEAO`(V8QlAFXXx6)uY10Ri zU!Pk4bnF$%keBJAQ3^dYtLgu=#%z@S50lqLDfG}xW_5Ido=c53YsU1H;0Qf5laBxX zo@`3Bh{&7^DHyJ(cIm2ycK_UZR(QqLvy&`bu8 z@3q;iX&zs*haOoz7milwp_z0p4TL4s);Toi-ffgZ56$JwnXrJxl9Rvt8>P@gGwB}P zD-xx9$YWT*qRt_qhi1~bus-akRdaU6g(!s{nn}H3rNJom+9NKa6nbbT9hZ$6C>>{d z(w$f6p_w!`w2we(tjt9DgwR7X=}x$uo-o{g8&=|Ig&vwo<4|@;Hq;R^c9o=DP3WPS z)H`%qfKqRic*(=}n7ujb}Kl88V)r&?%wEO0H z^=n2auW$PWj=c@Hd~?|5YWOC{2bu@i`m(!cs{8Yo-QiCr!b=)>6Vx0{7VoWPH2;nk z+S-dGw{UB$b!S_f41cWJ`xUUsQ17jUP2HCfw-#1^$sO97r*ULkn+kuN9yatZykzs< znx1z7#A|9#wdXJ4#-#R?wfJmn@a%In05-H5Ub6da?NyOBxHWx4M>F^MyfshT&$b5L z^3{y6p|$YxgU{B^y{t`Jn>;+2w&sZf*w$vlA7_FMt%sK%eYTc$7JMVu+S8ZwThi7% zQ|xSObK#GJU_)vi^(XJGX>SfMqpfYeGn}^Oi454*=EEO5U~8M<6M3`!L8|O z8pETs^)7f~1hzG}u3dG(hPJ{>UZ1UHR^JG>_Vh-z)3i0)Gh{LRu?`#B4lntAw)Qlf zJ`4KlA64-r=I4dQ4Qy;nVQX&K&`x;y#b;~T8t2D7)n1f71OK_&nr9lHZ4G+it0AzV z-SAS#du#64!6$KR#Sb}X0u9H`@!iM(3OA+s_Y4;CQz^!RZM!{*Mw#K3g zwzXC8$6>Ic{qR!Eduy(ytD|shu0pHmv%umDwzV~|wH&aagYZ(qdu#3uhs)yD+#R04 z^}!mO=i35oYwD{kIblPG;pJDKttA}|-$__~U%AA^6Z-tKhvg^J?iiL*8ET$E~s0gl%mH z{BZ%;&{=r--Dhi$zJn%D9XEYtuW7V3&tGB4wzdoYxFBrkJiJu)+1f<^d9<}ZE7RG_ z;uW?vNYAeph7HBQOI4q(HJ&~?F9U>dZfDpTMPHzn*RSty9+2Ou4WJ5i#r5& z+nH&Z-DMXD4#71z1Shz=ySuvwm*DR17Tnzl?h>5Wb(^ZKKv!nY_j1lh^4{{hb-Smh zyZ?22X6pq0MxzCKhtg=_k4v!8&ccsN!$1$=k9yya=6U|h8XV2D;kLSMf!CC^f7od1 zL|+yLdJKOw_TkSWaej2E&wv@Gm*k~8w$FOg2J%v9S{V-aJ$uu|pV)55F z8fz1=(JsS}E5bm};g2TYkEY)|+YINX&pt(GB-T1&qg{p3D#1W6;g4qDk7hI-_zFie zjDP4H!rDn}wCgZh6&MIM;#Q0AM>FH~jzOaxG1|djhgX5MnAm7H;m6frpttZxs~<;O zHjYL+nw(w*)^=i}-Gz(DWdk2c?rW}LknzNM2+MTNf(b7QS2HX3v`ZvGAfeSkmO z{V-a#(J63l`it`Lda2P^dy0()N%dxJ80ZuH(cy>DVonJ^LJloex9~7G*0N%wJ%G{b z!a!f(k4`^~mNXunk@VAL6Tx4H(O4UcjrItBT;KZRb^wgl<%iL-e}WjR-V6HsL~&`f z@YWU^?Fsz2A&ds6u3O!{A1x^1NLa*Eqj^u%9EhW_b{8A%8T=T|&$lDPXg$6kE$Qd; zbgfT%;oMXljkUnoXfNQ$O<^>6@o)9|ezf4AU}(juxdlgyu^2~VZ80|5EBJA97%e)C z*5~`tTv0|smPu!wV*>(De5Rw9waVCNZ(y{RFj`C)t=|u$y=e#!N~^iKPR@hlT)n2O zea1%n2Y%cdMvD!j4fuXEchq;=Xtawl)r$s42y3aa(cZ&oZDBNc@ox?KVYFm3Vadpz z+v~ph;jhDJtj)$o`v^a752O7AqYe3fG|%*X^>8##>yqlW1x917H#VBO2z7+f62NG~ zz8}rKC*ocl%{}7+oVL{5SUZl5_7#3?4bl5HylHNY_>qTbm61j ziU2?E3Zo@~(MEkgnzpwfJUXiOn>Hw&x+uYxvbG%?P2CoEhtZP3Xk&gD?Nz6`G}>Bq zZ>F}Cwer|#QLHg;_Jq+=z-Z&XA5D+^7TTEh-1Y>gg})ASW9>aQS~U1^Zx}5Vj5gu> z(bCV+i(8{vcU@M?ujdpM2w*hU@?)dLfYJKGXlY=yN#Bp=+S~;m+OUte5v@AGUx(3H z8<34={iOHJ{xDiP7;VZAqb=(?iAL)+s|=3DT7zt~IPhaQYuyfn(WZSrnz8WmV;s$B z@P06k#@dB!w0Q7i_&c}VFxvF*M{}(!PC3gp%C!VXV=Y8BT73BNP#8^v(Pn->n%1dC zf1I0^E6*JqjkOioXbIuR!(lW7Mw|WpXn~JHf5OoMx0hduqp?;a8!a*XcqEMGh0*4I zKbn4QPB9!!A6Z$QT;Vlk?MF76x=k4kqXolg^S>X>NcpZNjdm%ax^02cSWA+PmfRZS z=2#dl1B~|P_oL}|X2U{@I^OhIy>r7~htXJ@l8u%UemovV3xm-XeLtEuxFobo?RVC% zmEaPtMq{l@Hd<=<@kAIc6O6XxhtaA}qWcgnoly`+W9>{fntB^ghS7e8(U#ex*`FSY zW4$*E{_s7Uopa^0CL0WI+|F$q*Tmud`28l0M#03COj)NrU7CGATa@x;p&*h^M=Zda ztU<}Y(u(zVGt^EQ9c6|p_E!kP3+4OSBG0p{X;69|Y*nuzNY;21YHAyHK1HdmOsf)^ zlHpB8Nlw1EiR75Gr*S)l&*!l1^gIoPR;1duo_lS>XB*x;6l!`lt6z*}%eCn|R5QF$ zC`c{d=FwPFi(YB~$?&G2AU!t@)CT-D)+tp@ca}Kt zc2}na)|?Zh(eehIHkC9QmxZ^sl72i}w7*$Fl=`+3a7U~pYq|+F^_yEdkh~DN8%ow- zljQC+Pe^X54%Zb`lQq*MIiTr6l0Da`JO%GE-(TC|c{{Z-O3(9JC9o!Ik_k1n726Y| z)D{KM`_qqSi+*c0n`G&pRFgHoq?+c1LnH%Z!hNIKL#)vy$v)?flI&JgT{mD4v8I+J z>qRz5*2qB@OV+@Wq`O-Jl4+*Fm0iu2HLE1qy~-$(9kyH|8Qz$Zit*R*X zqc2ONWKAPUP9Oe~(eLIBY(D}1TI)6Tg%~pSsFeys?&XpV}S@TAysqZU! zlH|6YkWbWhvPO+0kB+9Ry}m!mB9yEtBgxlQ>E1+tl9_I_h0o`(?ezZj8J;{_~gCjJ(f;CwaMUbxJyCI0F*}9ITor03J zI3#)QGTryNPF#XpdG)HWc7`Nhj_XJ@pRQ9KNjPh=)`cKFEzR2~Jx%7S%nFjVDFo^M z^(*&*?D0zl&sYt$(1?IkzDw<>chi! zvbKUGx7RmGZfs4VpS2JKnZEm^hL*HuY_$uzL}-b#W$gk%x&{}%gf(6L6V5@&S_6{o zmJhze56do=X$ zhke+CKJE%#+O==cg8hH2Hx5hY-%sH7Hft8Qz7Of`EEEvWnnQrrELS9JZ)8&cUBA*w z^%IA$*(m%&j6ayFn*}oi?7U|J94>c?!LUcw5OLuD@BB^UDgUgW4`s^vgP~ht%kXE9 z1eway9X@KIYNm2+eu`3v@$6$x88#+QfHK3HO+`sM2Sz5fGB4Vp)Ji6V8#OgsA;vSQ z$I1K*r5^qDYLd<|o=NTbs^uuP$Js8B41X?2*h5+&_jr&e}o80_JvcVp>eYW?IbByQm=d)! zHMa$Y&vsL~7AS=n&t>-otEgt@t4g|U4Xy6%QmEg zFs`H!5XHx$f5dL2I;HiyLi1ADs{R?)dn!RJf?UtG?d!|F! zL#Eyh!nm5Pnf^GPsf8HNYMS1PJxO|I!BUi}Da3dtjVEmq@f37ib;WGWwrl;R)ZBN^=QePV@;uT zz-6l6V8vDKAwAgnFzGsa6e6{%={nrG6H1|V zz~zonbVYJ)%@0fYYTpX21160@Z z1*OnBU{e3^sT4~6?Y5s#3atYswOJuMQEGpLPDd%U4!CTe2$mSs9@1Lfr_3v4e)a_& zKSuT)cmJ@4Qdz(A#wWXQ5<+BWUEh>*9>N2nN~WBVy&)2Cvr2V|>AW7%Q&SkXdaEY>Iz-f4RMV%y~I7fCa>m&}}L)9)p z-_4fJk)6xneSN8>whGqlZRzt>(IXAHK=M;fy0I4`JFl5*0X!CDZ)cW*udt>N*_kxr z{|yg2DQUziPT^39>`Z#zmxMK5B|R?(kHwloWM|UdDR>D=cdIsiPzsTqN#pQBc&fpk z?VcC2Q3{cr%apC)Qf$jar>>zCB0HCvH(8PDn+$%s52X;`dyH z8^U9SYPR~Bb95>8z4ERVt#Tiw_0BGiHHFB|YHFXaB_jFu`g)Sik)6whV?#*JiP!_B z5ZSrxaP}Ta>(_3ObdKy?o{bv*{ycVpq!8J;TwA3x)m*$V0BZ`7oy+#o;PbEQRnb~3 zh35#>J6nkCTpnC`mgLS`E|T_T%sRgQ)e2@(PjJzy_w7iCJ&BrBLS$!BYx&Ptlv?9G z9k8Y!EAL-NyhG`Er?*BaM0QrwSbZioN@HniYIF*bolDcbkYr$^hFDXG>`dyfe}MpF zzgHfu>4;K@>`WTn_C-W#wC@#-q|cRiGj(@pq^O!^k|zmK3Xz@FG}EOlO)`1?ktl`8 z&ZKc?Dcta?n#R?&)VO9JrQi{d%OXSJ!E;;Yy%`Z}3Xz@56a#XQjK720ctT|7(kKd% zz^<9T$#|?OM0PHV{6*&kBVQ;y3#Q&>zE|FZ(l4omHG@*To`_P2?5t+8=-KF+oh;Jc zFqA@MXEHeRlD1egIJDPRltN@@(iML&tn7K-|N#tMR?s?@rK(w$mM}EnV$}$j)nevaH3L?o=;M;vNzr zJCmLzeIlXsEGT;$r4ZSfbe}l+7^VBbkeMij$j+pmrx_&xJ=;$aPzsTqN$vD-h|g-@ zYDXGnLn%adCiMspN|O8-|0_x%vU8be;7gQx?3yW13Xz@3^ov&?vZQt0wj%q2-eXV- zk)27`p8E%|rfWy(`Y46S&gG`{bT{r=orqe8LS$#s*s$;u)-+aLpmTx{*_m{0&rMec z*QTqm@~+-xLS$!B8#uoR*3^1FOodX2>`Vr}eM5I|fzQ(N?6K@9 zg~-mN;XTz3rQr_Eg;I#@OzJO(QtHqjU7Chci0n*ilMX>+%s%2rHz|Qqi0sed=SBa$ z+TYPS{BHR7)gDR1SNkiK@_Tjv&MDQ5v=$PqmHZK3c3JcNS^amnI_cF<99Hu2GOB(K z_h$KiSlYiirZJAx`PeXMR@|*4FYU8^mf=(zSYS|d$gu4lya$x@{j|K+bQt6HC{FHM40L z$;1aeBzM2W@3l(~rzvr@%ib zwGzE)JN?M)x!RXSX}D`Z$4J%mo!Pb28}gylqMyr*(vQqOeoY~i?%q*ql>;;F0%M9n?{#~pPAi=m}m=1 z{b}S#B%PPp**QULmI&_3?DtBgQuO}xo!RyDsr#YSV<(2xr1p>>Ps<<82$|ikxv{Ai zr5~An@@u$rux0-VFG%{%?Eef2KPTMDk_@FEnf<((lWOkSQW&KlnSEmG{3QEMg#@Ga zkRO@-SyFhg#NN(Jr}mKao!PSAeSC!@D7D_jCy{hsX6MI{`*|^v zaSyFS=|^V2aD5I+V^4lqmQ}O$BeR#zTa9E+BP~kbncYY|peD(vhvK00BeT!((2-ya z{hPK^SY~H?$Sk~SGuAZ2PQXHn+D<<*d&v%6NoGy~xl&2rnca-lvKC6?)kivp{K)LB zA0#DNZDcE~=|^VI*8}cb)p2WhS6xKuM`kbIa~a9((-NZeBeS>6Gm2!jL7z!FFSD~( zC8)&V6)1zU7NVoicV-VR@tj_j;9M0FVNE}hcgAs7teQI92f9)QhobbIyxnQ{*1*}i z{A}FV0=+}~o&DF7 zLn!@7!DqKlMCsa}08+4eRs2Z7i>iM?sZIF(7)swM*p+b1RFtlWeNvu@q~P)~`l2-QWa)}EeWzd}<o)~|3Wc>zpJ2c8rqIB_!4cfK;k0;z!h>Zt_skV3vEWla^y!GFI zyu1l{^}K&_NB5|fwBFd3+>qU^#&ihI5$wm=!%Ggo>lzvm5HT^p;Wy)7hkau$Yl@G+ z+q=ava(79Qb0*HAOWcva`51~_VnSoan2j3(oAy} zo*q+2pC6ICTVjYyYPLp;wfj-}5xK`Sfd^o0**{NIlzv3+PMc1WYSB2#y zL)E8U)OPx@Og?AdMU>i<3#+iEACddFD{v!czq3ol>rc|>GPxdMJOnNKNO&KX38f#A z`{?NxB=@C&hZod#`u>2rp5Z#&(%Z9jY4AL=lD;Fi9;Z%Ak`Z!rKSKO*%++l)6N21+yP@ANM7BXSR122DfzUDho+9YcOZ?h4f(k}N((wTfWh z`VqM=23RfrZ#9qZR!s>deJ_)D9r`;;v(5SAxQG0R+`Y3xbWz)Bb{eW$3sBRK$o=c7 z9V82EjDj`&h}=sTKmf7#?cBdRqx2(kcgY8LR<>+586Is@N1q>&d)$;tBnOV@iPDeA zJ!coRr|g=OF2D!3RZTyZ$@|WQu&!iKmxu7Uj*@;v?q1KWz+=nc4ku%x^doXNdOXXL zCfo?RYJV(-(vQepENWG(>CS(l97;bT_ivvdfT-bUhCx!v*0 zcgLFU=wtsz={s_p$)3UTj@nK$UQl_Ienjr~B{Y<-S7kG!^doX#txrdScBZLnS;M){ zkI0?B&}pifvk&DJKO%R|^v6&dq48B44r=-lxd%5sNV3Ni)no$cN93+Bn(pI`V)wJ+ z9`Yk{Kf75UYif5FWNOtZfvYFlX6QyErww zHPdWx%xXt+Y?qSr4=c=F8f#W^j$oZk0s^|!>paWa#J{a3u$Y{~Gk0j!VpiU^WoX6n zBTx!)mp@4VdJcpfRa1K!0-Z)xQ;54v>dRNbOR1#3@KH9B&MVAZj+zeZinbi;8AQ@K z?lP&}8x3n;_H1u1PDau>?sB=j^BR(iQbIVlx6?W9GO5Q5v7XoZHrq&xVO`Od&T*GX z>y4ZNrFJ~uXp+uxmq~p|KRA)tduYL0=!U79LfmCiyZ_m0{CwL(H!4GC%9hUG$Ht^_ z^vYqB#(`>Z`=z81cbU}wYzNPF+po&(sYOr%iu$0moTG3}Z|<2@zmyu!?+_ELSRxBaR-KDq>@5O7mkAVg_8Q* z!Vt;Sb_y%ZTvj|uv(?KCiic8&yIcnDg_U%>X37|2NII`DbJ=4gox$|Z3mTym;x3o1 zS5Bvz&ES_!+1n|^T`p5iq_c^hbWl2!LfqxD{U?ZI_I9=k8%omtJO6RS>zl{G1<;o3 zlK+WPh`YRIiu;d9CJBJsFZFr~PlYq7Ev^6!9#vDD-?I%$A?`A1HjLZ>rCBQ-+|a0+ zLfmE2xHUaJO5;+yq9}#9%jGfyLaUmsF+Y=a>9lJKahFLm~Ty zNdC2fuGvD|s?hb*jMzR5r4V;n zP2)`DpRuO#*BW>hNWGpy+~x97ZaOCzcj`YzDa2haKaHt)OM1jv@EJZ4f<`6yh$I6WdQDIc{A?ltSEPQY*3o8tV2rA-}r}N+Iqt z=_#^(6G~5^altSQ7@ zCe038&Y?70u7874h`UU>3rt&%(w)0Do%@8i%cP$9Q!$jfw|oVxDa2hSU4zfMP`U=} zs)JI9yG$BmzLr2~4DU**Lx{UvUOP?q@y7Z4Rj{TIce&hLk?xF*wF@tx6yh$EdfpZv zaJG8(^9N80ahJ=46X26v>iwz5IW!ri5M0?uqkjyfnGeB9LM7QQo?*LiDBmBA4h=jA zT_z<%lh%YaLiH990x3_=8#_TbwA1s_xpcV@0x6Sv+nHTZ>J3d;J5x3NSbwcL#Z9tw zX;|N}rE?%YD)%$Z|95y6hr)2e;ua3#hONs z?D?^#5J-8==4+>+)M__Rh*AioOuDaqvU-j7zIC5kvlyix>#s#dr9^3Fo81eg5J*`~ zWBemH0jt;382DxeN+FPPxwKqslCw;@hzo&~%L!U7l7mNW#G1apAl#_=@;9QdU$$!_J~0Z?@w5&|ic+Rc^SP-^EIz*>tfeXqZ^t_&Ac z``lN5Ukj8%AZ0a8Z%c>-N}8!RR6;2PQYMXA*Tawa@x^1H6ap!iEyn9u)2I^^AEgjT zxqS7@OOkiv29k6Rq)eLQ>RGSZx9uEs;y6knka9USA-$gF$dWHn3W1c%#y{7ln$;hj zC+QqWnKTaOxrox(Qk4RX5J}M*#?a+>_#aBQdTo~+Jwj`gGc747$O8xCS9EmK@9Oim~gfB24GDg zkTU76)}#*BbeDMp>&)u?DFjk38_s)7^7kTNQ3`>S%XZPmlWf{O5lSJDGN~mDXg8TBSD|*DTGo8q+AxM1s`>@WsV1lQ3`>S z%Z^_Ql5Dn|+95(9<+A^q-XuFMq+>`3q)euN{|DSjS#33I{q^~@M>ty{kTU7^EIx@f z-6=cM5ibN%Ce5tr=`PhY<5B_;0x6U3INhLKsrIcq;L9ZEpuC(t@hE=7i$WE^f~;z<-gZoEgx{hzek=^;`(cc_Dz~+DBQ6@%l0K( zHFB%}@NW_J>GAv4bghM0YZ3NtvL|Xi$>H(kA2V;Ql8-ECwJfbg*yidqvgMZl|W2Lgr;spV#RQN_}PkEQ6`p3YnM70cD4i z>=RU#q;uwFQoCC4FO=GatML4iUDG-9aybt+@!NLJic^B5bLQppYiek3*?Z{y-_QWG zYdU9ME)N}tJ7Zh!9SbdQTRLZ6CiU5WTa7qd>eHvZLMdckCbdhCkD}Dh?1LtIuqcnD|-;Ywryj)&s1xw@V^)$}EDTh+Xyj703))MoBTf>N8B`6Nmq^D=2x?Nb4zSuqdv-qaovGB1<8p6!DN>q$CiUM7Q%cj}Ka=x}Vf8&`Ws$h=GjpSl}_GWb~7Hk3l< zWzsdRe2683;qJ{fc_-b237MBkcki6PV@-FDb?30Aka@Z6UmlXH+C%QX(dVHQGB1~7 z!k&^Gxv4oyA@ee+{Zj5vlv>V(I!Yn)GU>^`kghA9yxC~BLgr;szaHaPtf^mmkrrzT znU~9s7wFzZZ|fx~WL_@kw}OR2wQu!V2k81KWL_@!JSjnPN6Gp)TOso@8JIj6W@|m} zU@gKXne_#wka?MO*I0THYq~3+td3I1yiA&nyWK-+*1H@5rI2}dQ?HFr*A-4dm-~O>FO7+2ufG4HGgAGA@ee644MzU8vAV0w{KgNLgwZ2WSaOS zk1XDfQpmhqE~`e5r=sD$~ z2~P!cnc@9rlCIm-f)N5KliG*A@WDQNw$D?3!r2Oelu5l>dbpq}sh8_cXH6lHa#^z0 zR+4!dq`;a&AZ1c}|EeEK?fHz1D1|`Eq+Yu8Sd@CfDzFft&R{|y<#I~5DkMkOo{mxo zq)ckBE6zZvJ<8!Lka9WT<`x(3gN*;;Yd3Z#91xsOr^q)fV76r<~>yTRsuD1|`EW!u$PaJKFiafYK50x6fh zLPwJ9(r+tDA&@eu1r~w^pgL}~lr3ta6ap!ep3pxFq4bys=u9mHQYQ8NKP5n^Z`n$b zT?nLHR@(rr2{l{2%riR23xSl&p~)tY>^)&6Zl@4Pxtup6{LXm%6uNs80x6S$Q8tXR zYG#IGC@>%`wYP*o%A`C0^u0J+cc%PZaJE7qWzsD11{#3&d8j~^O(=yx%B0&>0Ya0K z?i9Uuq7(utlh(Ic!sBfAs}d;@Ng1te&?%rIr&e39)5J;IcniNZoHH}(dPvC5Y zK+5I1r!7b>D?klEA&_#}XI1!FvrF24u%-}5nbcDp?1VM-_y^#rV0FF~0_k)3dAt94 z5jKVMB5cVf|M}%pQ1i9*$KTJaKepNd!}>^KK!Bbx23*>5tN+%^$CZ|3qki{|Qc-F= zKGQrPAj(4vMyc`lY1m))twXtIKw>pS92n5~mnu)Z{masTfJklNZ%n-Q=pM>Qn|#TZ zsWLaQzQyVc$d*alz_mivjGoMgj8LLzjto}K1{RD^qClG*BfQI{kvai8hn+ybom?J5cbY? z{tedb;0*0D^(4yBRu7?nucYsGgZ|Ut^C!^)Vk zNzVBh-o9$KQGB)=^vJboJGGC=;KFQ6-|dFKhQcLX%~snzwAT&q zc1~@Q3)?|+#IEVH-Jr)`whyHqJ@qA&ezY5oPw7T-*S0bwo!7tFtD?945PtME{`d){ z?{!Xy5wLZW#6DIm!NK=nUq&-Js`O1M3v_yDU>w z+D<>(4P!nWCONogBiv3u+70JkL7cH`9vhqxrSEowo}+esk{OEAksy2sneAKckQNiA zwmo7utm#L)VL-dzP@3IVz*@9AZhf~K%!sAvOl`dH@&%;8pm}M(v-k9+?ewGF zQ2Js=lxC5Hzhg~5+6^z0o+J6dy8@*j?S}U^B9nZUT}SChyJ26)L?pMKk3-UV{hPg> zrZI)CpJwXma6lzy}u)@1HrN$VTCtaih)v~=b5qunqu zHUvIZ(>*#9-C_9AZkSTay2<_~$IYfA-j8;}f*?9tyLcO z8KocXhRS`C;A}nRx~4(tyWLhqX?S}DP zpW$|zL)t)dM9tQZc0-k}b5Xj>t)%ygAMJ)R_cx-{i`Jx|=103>X2A+5U6Vdn!P)xJ zZdlc4HA-XQ+4(5_Xg7RnQHtcN19S}e(QdeSJ|W4IRVHIiKiUn|6C6RQm#tBtZ@-@Q)=SKX+mbwR+SBt^xUEvJ!_(gRzyGC9UFJu(;&ue9S#Le< zJ>#d@*1mZV)4!*^r@e(IJCzKbl%XX`A?@;K12VPBfl?2t^(RUp?Q;2|d1I1~6K5ys zoOZc9*#|xcsb;Gmsp2N-oOZc13}{>0GVt9+lFn(DN$t_J?I^Xsk3!p0?b|5MX_ra8 z$fYkR^#T=LB%RYPmx*HKBpI(@VUo^im&*qk9+14#@D)lS?Q$7X^(T_X^;{&K(=L-{ z{D;sqSNqnCT?L++ReMNCyG&}gOIXbwTWZ%ma8InHkan5$l+w$h^pt412Bna8nKTdF zfXr&ocDMSaF?P*s>h1O)Z8$S&E4a6?WxO*hv8IrAdCd&H3z9Ty6D<7w|ph2gBHq;dLcFiGdM%WCSGpV4;ep??fUDWqL4U)_cdn5wBiE8d=@ zbK2!{{Qf5-M=#8SQb@a8*3UVLWbKsj_<`C(!s0rY+j=G?x$%!=D224kH5-;$Z6^Cz5{^d>7vS0r!zslT8U(k_>2cBa9a-sE4F zq7>3Dljf7_E|li|1aSAI-Ydf5I+vx|LFd+fRf?s8yG$j8w993R6m&&06K8*jQb@a8 zhP8@MHG|^Qt0JUbE(@fj^N^YQ8eJWHf8|!NXBjNPsqG9-S2i8aR!F<7X2?%vNQT7O zK>JomyG*){w#{PI%m{aHuEW2>)1+$O3Tc;bMt_V4q*W8=p5Xl{vhht44Co`#a|5zTS)@4BlltNBs z($jofag?5>c?+Qwax#;K@p%GD!yN&Vr`kh8PG(Zyvnd)%eS3B2*C{FFWG-Lk-b(UG zKDxsYax#-fyhB$}8nODP#+pJ-W-_qg-659D0mo2a{+3Zu3OSic_mtyzu%>(BTRQrL zoXn)T`PWA%&9z7A3?}4cCf%LOtw8DSkPTA3+P6YZW>Rl;+EHpHTCibp?jgW^M83xe2M`VH+ar7TpfvUb(5c(^ zFH6$R+bdD(sRzx(nnILiv(@icNk#JNqHQFdqb!%hVzegNbHP=VLX_pQ+Fk1v`SxBZ zbAKyI-wU^ElKw_=Q7|>Bgec2vE<8V-H<_@e5M{Z1)-)E$+oQu!3Q?BJ3Q3xiEEfA7N#`ibq;@@4Ka|>;dGI`+dS?q! zmPvC~hk7W@aUI8?6rwDb=|=Y^nP@I7@2HwWlx5Pmw~4L}#+4z-Q3_F(NwZPGj#RT| z(qBnBM_DGlv8qr_Z-iKHQ3_F(%S65DRq;l9OUIB9WtlW@CTc*lJ*R%trrJY7l;tw- z_L3yC>{yGl6{0Mc@tVV}vO40;fKB~T3Q?BJz8Lj&!7yBmmogY6rwDXAu*@-Kp7Ire2!9xvP`=6{Z`kKVGt%nk@uUCXFcXE|C0KzaQ2V0x6S$zo@T!P|r^XX5DY16ap!e?s28882jxQ8WJrs zN+FOkX)e1(_qXQUMYNbD1X3p5ZI09H>27qj4b~I_DU*7G%UN-@dW}fSPzr&RN!O;# zFHyRd)Tf9i1X3oABkGGH)RAE9ctWW|2&7D!Ny2JiO>2>djszi)GHJYS{SKvZZ$F*m zg+R)r-X_*xDD{R%=vpQOQgxn+@$ZFOYoRgVhV^A#WvzerwEk!R6K^H_`{TF&%i6Ah zfc61D{p&e#>wCKXW6c&`E31Fit6vJ$E{g{v=o2o$qCh_N-(9!nR6lW8z5Vf7g&rLvM`hjZ%obJhAtU2y6eUrrv2Q1OQc2h`dZ1 z`RnK?jjT(dqh?E=tG7m)Aty*Cd;@DAw)DMv+wNL-lzP)4a7wVHbL3^SwZ3%xCdrWd z)@%ArI!9hEM@Q*Ivi||Njkjw$M_w-LWQGf`y>Bb+glEcZ=^S~PG%{7KgVHb~$3rPZ zUMBS}i=q2$*KApJ6-npF%cNO%Pf?U+#h&nS2Q^zE@-nH1ZvBc<*Xnpt3Xzvd&-l7< zDO0oc3~!MOrSH{SZ}JXQ(;MeR4wORVWi`#FSvO!!vu0=LZmI1QA}^QyR(nZy`K2yO zA@XwB=44@#b@!wq=^S~vG(%zCSM4D)^#GYfI_?MdAaQV8g3ZvBfia}3Mhrh%VpujbljRbuh2O`h`d~$b}yuw`;#5Vn!>Zn zOnRFPqj$FV_rV2F3Xzw~mTRwLO>e#aB~S{Hm&<|~Cy~rrym9x`H1nS!$w0x6SvqZM!qY46)IReO+h4x~()rI*G= zX=YhX$B+<6nbgy*tAbLGmg64Q6ap!e)^BePL+NR?5*{#8uZj>zne;~4^Z=##xYu}; zLLg<*tb8<>`;uxpKTgb~-geUflzOEFQBVqjlu0Aw7dWNaM_)S zgl-&!K+5Hux#>s_9z)wHJWkBz`#a(Nzgq(+5(t5m%jb=rP|frIG{x-{0x6f1d$c3j z`;TChLLlYx^}z6R-<2dDlJ+I#`#{R1@$=PBSkp+^gql=BAZ1dY{Bj6Ny-%;FSkw21 zXLVO8x~}N43a3LU1X5Phd^mj%)-+GtgolFFyG#hATsAvgmSp)+A5jW{l*>$Q=(shL z^q)eJ4r=>t?wtq=iULlZjS$zY9CN*2LK$de@QwXG7w)O^*tdu!A zN+FPP*=J8Pl8x_ByHW_GOa|9?H9;9%qD397DFjj`LvjafL>Zzdn2%Bjq)fUaw2x@X z%mLOvu7`=Jp(_MZE-##+bG&<3eu|YsAm#GrmdZF=_u*)>akfGr#GmOa}IF!@XuMIEDhNB~Onv zg+R)r`}7#Pdvk9oO)YOBkTPk0jMWBbYu-pgS9>9lGU;ABsTNB2v{N~8wn89fQeV<) zElPdthKVSJK+2@+?c}5=UDr~KLMa4NCe1X1E}%3cXQ3vQ5JSpjcA*pkDUf0E8=m&@%r?~vTMbskCQw9Do2FMCN2{O2f1 z=d{bDQ6tMBlt$%+UX()GWm2ENtqw|kR(WU|sy*cUS0$O_wpT)FjyU``N+Ip?npJX4 zK&e+)y&0vDcA4~S9+eiQXG6ZdD224kq_@N?SoToIt+&ALhbV=#%cMD}P8O8rn0%R0 z3Tcl!G9w9BNC z@x&gKM$jVYwWwD`c;cAL*0pPrY+4?!e@Y5zmr4EH-TNr@lL@1c^u7FAuSfV9tmaob zYYJ(X)%1qdI*m2GMm@MIQL`1&E|cb(Io92t{i>MDcS6QdQb@a8w$A|fQ0nzGTkiRU zQb@Z@dLuMSPV#-8{3M;9IOcNVb9z<0W20R{DWqL4XLZ?yHNBI+!hrBX_w1s$D)&**t!x*A?e=5cDdYT zLJz{0n{OV+nnK!TGI-vz7bt^g+<%W!NV`mibcjWFH6bmxenlyyT_)XG7QuZ&R=9g} zXKEE6rI2=+^aLEIyBhZwR~wW<+T}7q(M`CWo_KZW9!yBPT&9}>ckpW8dQ#tjPeZAr zPe{8=Y7bXgx3;#_?p;WVQb@Z@dQPPMiqdnm2xL}OQ%Ji^8uOxlKxxeE4U29{3Tcg`_ArPz<<*K%8O zqcjS4$%eBP0x7RKnnSy{LTUE=BLPYwkaD@8G@K+< zO>;`?aVUjA%H_CRbPSn;UeL+VkLB0mId@RaJf$f52+sqvn)>|n?NREJPtiqO2&7CJ z^>@WbX;khy8@JQehEm@?=N;DcWBIl6M7YVeU(a82(k-MANLfv9+LI$t zdJ~PH_oom@nKT!^f+c)a)0|$Kni@hN<+9N3@b%)QtU}6g+R*X+W63nvuC?743^VXO(Bpn z89ed&3Y5Xa)=ft#1X3nL8a!`+GNj_L!YGA6%A`9(4>-qL%}y(jrn^!Lr4UHD{IEP4 z)^xv2+y|u)NSXA+>iCT0m;Jd>3W1c%6m1ru^u(VW6{QeJnbht?h>TJ@Kj|4tA&@fZ zIkdPcO3#j_bZ;UAQYMWlU38Sj@XOR{5&|igKc9z&kvfJ9ZOUMrtq@4LtlfytLq^4t z)SwpvDVN>$!4jcev*i&A6G9+mGH|I2?xga-F%&rK??9Zb5J;JHe~m`_*8MUfofCvW z%A_}}9mGmCTdyl$Gps2DQYPJZ^4>-1KL4DWaY7(vQh!(~{NCikpA^)DK+2@sd$SMK zOxyh&&Q=JdOqvzC4n}DfzDrj@A&_!8`Pca*hhOv+NV#nDt}e-j16Sj0g+R)r{-8&C zl={^U@NkYg_X&X%mR}zw{`c}LeC+jxbuMab{Tu$<{>Sknuqp8)u(14ExMPEs?aMc) z*P(6O1}*FPSc!c!v0eB|?3Xr6tT`8gLi*!=r`1m!R$_nn8sn~2@W9`$>*1GmxZn@a6KOs|v{n7YdMc4!&IO zJ(-T=`dV2@`d*2hcyByPW8eXJld9KK2)?}L?Zd}V>Zg8zOTI0ggD;cjiOtZ#QAeM- zt8#yoLhxl$A9ofytV-(rYb{181YagSkKgV?>A7+LEJ`8xGU*+Vbq-2z`zVu93c;62 z^Fp1oD9wFeV0~QeAtCs3`K-Y~l2>m1j8X``T;43!oaD&@S4jF^iJcUZk>r3(6-fGC ziGBLZRFwMVPY`_7b_&6l&DL1->LE&F@@MGk+S2z*Z1H&3QD7elMz+IiPzu49*G%Pk zKr(h6>zrxV6oN089qNY5dUNKZ6oN08&3eMkf;w)Es&(OcT(zA-@Z~a535{groyAZJ z!I#VCr8knS*$AG!Q#FO)%jM!|-AGQEvJ<5ce7Q_ebSue7ImVFmy%IZnSO%2(s4{d0 z6M`?R>2191E=q6J{m>dv+bINJCe0`B>8xp9`z;4bA^38+G6CE+s@Kz;aT9JcR81lH zGU?6J%UVIRr8h%CSlhIvbMWQz%pTf9-raxhK`8`ZE^qCC;HzfqJ-Xo#N+I}ixq96m zk~5aTDw>+D5PZ3e9Xbr9`RO9fRtUaKn&;=kYN5Sv4;Fx1RaH|6zFa=((SzjW?sOg! zf-jd}KS0CAuKDCH-2ADULhxlW_}=4MD1$G~rfZoHe3=ZHzi%kYkg26AV@)CWGU;xS z0d7^Z!`+*^>Q4A9f|{)me3^9JZIsZGX+gR!?kbJa_tzMEf9%v_eR4x4YUiYITOEm%{C%uMP@ehWmY$BOh7r4X5!^n6(I7^UY~ zLfW@NWM%kF(PkZk^?CQ2bPbGfkL1(K6;mqRH;W-fQHo=0+3 z4hZ<_^%NpAlYx(ux3*+HIEDf*UhRxhh|ElS@|S{jM)fZ9guN<>Qi#kGilD;7k=M2ayFecg~-h1ty}A`rg`i_Z>;IZ8t#@rSgW?reM^S@gHnjhtfmpN z0~P}8J(M~%?OP!-bD3y zWzy)=<0wk&I}Acm3Q?9x{YcCNDD@4GesuB=;PHhiKHvP>8Zz9_V?6JdCZMM%B zCBd3Pl;yH!duYblHA{?wwG%a4AdD2;+CFJet0%5pirz-W@apHgHOqAZj8$I6vZ>JM56U`;>Pa0e}i%c8xV9dkja zSnXRO%Cef?3f@F0z4_WUK`BI8Cd~_dX}0FR>B&$EQI^ZeNt<9zb3lA*69`e3Nv|=F zy3gJu+vrH}<0G_Nmz~6#-bLY|Nr%v8E7ZnGBh@0Yb2PRYC?$Sc+1JvP`;vdyw3c*0UW}lr5CI z21+5yGU-Vbi_V&!IKRL%GwNL?1X3ACU;-C+oUlu6@YvpOh^^{ZxLO(BqS*>D21x72nT zzjdbLRtThAj@k`3_O|RfiSA8=K+5HkXLL?5CbvJ2vlRj%A}FH z@^zF(^t~@o3W1bKcjbvEP`V2}4nipeQYOs-Zy;8x*VAktp&CjdkaBsb8XdRh`t_+$ z3W1c%Iq%<6&C!YI7!m?0lSa~r`%oHDW0%L8LLgOF<`n;4!?liwfE(7isJ8WQ>kRzu zAICM^q_~Ewe*bL6F0C8XuT-abhX&R!A!AerhaAA@uUh9(xY-NL5WE z`gFLksG36P**S|s-tfptw=I)`2^myCp9X4hQsH>~&B(mC`pseewk5~cn=5j=Qh zOXtwb<)Hy{N$wjNiKKJrWzq;dJ{hHvM*Yf3yQXvKWm13IJQ$_^a2lNCZRs3(nKX7r zg?^>Ihqg?Gx0#Yc=;bnQk0T^w5sq|f!+pom%Ev0PQt`?)sUoT%9fp_kPRiW6ihTLwjc{}W0f^fKwau{Rw` z@1+;;X>3)~kM-LeeW1x`&o)cxn<$0Q%WFowM6ZhZrQt)ALg?i(>A^BoGr{|FD233= zWl#@zEZ3f`XJ}87_tY)bf4o;h;thaDN0khT)#VvVA@s7EA%{v%B6%Q&7o`w-nRG|G zV9h9kwT5fmXhvA5qx54Hw&?9Yv8Jc+8fapu*HZ|+tfr@VD|n7XZKtPcnl&he(930` z@^nAsX^<)xN+I+zsb@M|0&D7Fv+ki3LNAkA${Y|Q)oiuo@vfm1LNAkM)CRCLqof%z zEnQcH(95JTSA85yNn_^I%~(?iy)gYX=tecYD6@heIp^m3VN z5ZxIY**Zo+DWun1c2b6u>5qZ5>+a~*Bvg{^+UPbsSfX~BAFHqfH$ucyGOWX=Y$%05 z%F}+tew|S2&uXSdDFjk3w~vF+q-q+=9!(|b97wsG)g}tbk?G-aAGMu+e3JI%`{5|{ zTZP~;7+X3AQdU#n9?+cRl1Je+odYS8MzR3t(A(P?bwYHi=^RLz)bD0%h*Cc}@&ZZc zK+2@Ct_p3ZF}Eze?Sw$eWrPy9sOHm;^{}S!)lN*BPv?wAX}KrV(=> ze8@m;r~bb2GL%9fb_8v%=Vj+-nIV2XuXZxMqF(0+mgh0w=rn7M4V9WHmUg2zoK+5IN5`9Q^ z$=rveeM$NLCY#FxXJM_zuDN~^UEG8~%4O&qXjj@YbrL$82!WJIeMjDEDD|b)D6$KI zlu7TP%ZpKZJA8nZ2z3kzft1VGV+@q$`;8Q3g+R)rd2|i5NY!?lTldg0Bm`0>y)}E3 zMd|%DP9dDFAFHr$3icv-bL~fzLLg-|g94T>BKfRoQj|g5aMj1IhQB;28jQBnW|&%haXPqV&ct zYm#&hq)diHiCi3I@at$5Q3`>S%RS}iqYPP{Xgo?GkTU7|{9=wJ(^(g^0N0aAEl~=A zlu1wi&+xq&YTtS?H{DAzjjwB&r@{6IB+K0@ic$!qyk?!|IY^d20?+8ES49Y=`sq)Zy0<2^@dJQxJ4c51dlAmwsu;@?OPI#LCt z5Jx?%?YVo58uTdT0|I?&ZY2&7DUYNox7 zH9fypO^G#yK+2?dY^&EOy?uI9fDr;Ilb&A|wm|6#I*|oy3W1bKqihPgIv9C>KY>yR zq)fU8jeyl=^eMe^PHtt6d8Fq6iuXjb<5R`WtV=$WeR6hbhUncnOmslU%l z(m4b(sedh?qtxFN97WPO1T$$=iUy19_8uykbp%Q05X`0P^;D9{8y+O-9D=!g_3IOo z4`%;^QV79Z7R&-C!*8!=<%=YJuF86|!nKWaz zhKrkh41GDjoTTqn*?GmF3u()#caNYHLNKdobp7cj$(B2IkaP~gT%M2LisaE2pHK=R zn9IMCMj*Ls7j35yg1PLx;ULMzr{Geo&R{|a=JI&rFp_(Nvy-&{&i5ghNi*_YXf@gU z_Tx&3c&erlf|)ehJZVC*VaqineSWIeh?vE?-LPxw?@m2MDTH8F(|f$xCzRejGvO9e z%~lA(TvmuNfMk)#VJL+V%w_!E8p$Y|PN5V+FqdRtUjN2IY>_ z6=hJyRvwf>2y zf>li+1an#7c4v}VAH+u~gkUbqZlW`ow@58$%c`0}2Gu%&YdW-_Em z_OB>Iawn{eQV79Zetc7fkiJk@$`g3Bv4Wa!AyF(zrBk! zJ+1BxA?X}~xtuX7gyi_?(@+W_n9FI6-jf`)8W6XX2VJI9t!CsiLQ&txxxF!J0w{X42F3Onj7{*3V#JNgYE%2xih4ePazuqu3TnvZuV^wy2Fq{mP z44ZoJFiIhi^7J3}{tHSYN#s{3g+R*X%XC9Xo|~|Xq;nwU@>G`lB-c$@Nz(Z-VJ-us z948rV><5z0fs{%8S&!8y^)rj;1RTXVkTPi$sR>b5?OP-GBVGP|f4{MjD9nRWe|NDh z&DJ@P@|w4AO-E@QenxLtA&_#Jxf5K(?b#;N=~eN)D(em03#;r(T948~uV1~@g+R(` z>bF7ETUf->&Iy+ZSgm1X3k0M2&7!T8wIxU|^w%Zx@T1X3ogXCJPkH18IH9=JLu2!WJI@0hU*P-g#+cIAC%_xOH%4Oba{YVBjfoB5Lt0DwaF3VM?vxzrri)JL911Xas zS-w`qnjy&_T|y}YQZApQEJ*TfFr9COK+2>$eXmTG41_S@j(Oz?))WFMlb$9IA#SOC z>nRf>5lQDj%H^op@FbNj+s&SWQV6764ygcP!j>%yQp6JiDU*7|(P>fYIUdlRln_Xn z)N%yS>!}60li+NHK+2>US{9mAYPM#A-qgku0x6TmU!7?W8Oz>v#hOAOp%A}|10Xmy_$_%TFQV66>8a)dp#F|Ef#B@(B1X3p5>(0T` zmFh@vPq_`xV5zf-5J;Ic|Bte>0CVc--gsbHoZ{}Vo8;b`-GxPpdx7Ha#oc9bhvM!| zaVW0E-AZvNR*HQ%6j_Svf6mOFlhb5plYgIweto|1d*8WpCwJyOGf7?z2}RPlls5!P zO(12YnJ=^*l4gc}9HcCXh1HIk;f}lFnv7<(sz(<;;fWu0(q7k4Ud1-TAxAM$a3irl19qjbCL8TNO#Bu3jx*IrW<+@ z8U4;KYpvPrzN045d49Yl) zT#^WOaipj3AZ;X>Mei~rpgTSLe1FN55w_z1dK$sIoapICkX~^00g}#X<3ovzerK0G z6P#h|++^?`D2&MK^dm@rOwf1|-A=(WRC-#ierkiH zA3?gz9yn{H$U^6#peOH&A3=ISZYZ;=>zpzILaikI2-00Q?jf?(oij-K5u^v5f%6l} zGonF3B>f1|lU}7EazyWwMEVZWJ=SDGGNerxnm>I9>Co&g*C832K5q^5^c|#wf2~V* zC3t=lC{oD2)qHA}jiKNZrA+h;-nZ@&l77VDBiCUkQ1)%`9-}3ae#GG^x9NU5#*~L5 zqHL`nak%A&Ug&B6Y3&Cj{fNUI2Dp$kn*BH!N#AkUh+T6OlFoPg^C0Ov4jXyvuSL=@ zc0egmUZ)>%xMJ-7M3$(P5lKJdaJRfL^Zo!&jhwBUK#-Q6e#GJJl`o=a@P>;JFeT|b z4qFLxi?F0df@KSTfTSOBcxCqQkqlmtG%b>T#Npjd<{|0aRP!s6e#GJDr)hl~bnh|E zpT6U;_)*9y=xGM`7L$zXAwS}9ubUT$?3n2>l77VD8d-A_StbXqjQxnid#;IKsP2k$ zOGXNZF~s2)mOBo|6$41jXtw`}I4p`CzT$A!=;CnAi0j zC@v>F6^Y+u2osI3ER1c=I~Oa+SE7l;8RX1pcY||VulrX-ViAjNwz*b)IMwxHlQ54J zSNXRpGT`2&)vD%W=kj* zRW@7W*|M&uTASKeYbTcr6pQizQJ1mVCjU^O3VH_Y^hIt@u|ym&j*}9|?a5w0K{Duk03Ry9G+2eQ>K$8#W==no&B0eu77WfDCkuGJRM=WC}FNTwL?gS4$4UQmp@fCJ#U zdT8}!NTylmi`@HabyG1C#KX*H+xznGoJgiU=!@J`JV=bZIHHY&(*PQu!clZPpv`7!rZfW^427AIXu-RLd7RH@EGYxXxBU&ULkxlLS0XGDrV? z*=!7r-Q3+NJmuqZ?E1&~(KE|&U!Ik}EBR26Fh$rZCmyl^$!rOHk%!;hJ1Sah2l8;_ zDSBt;@bxaU4NWpg>|4hXMMIlyXoAIA(KF`?@kwRDib0MN`tdRx@WXa{G7pMVN_`0?6(0SC2qX&79#TV?}fgTq->C z3NThg>y6crv_(H>xJg^HxV?sp9$E>WO~2e5f~027aFekLA6e@Xo~6OF@SY3?k!%R$euuSA+&tNLU%=LC<_tF(nEY-LF-OH0MMyDcT#tbLVY$}P%o%Rd z)@FJ9h2pM!gx0oMP&N`t&78r=xsJ^V#dXTLacDPpG0Hg@qB z8bg{ngOQaJwiiWg_y$`sXT+&i8$C611|ttYTL-J8U?30QuQL!y&78r=p@BWcPGlT$ zXT+2L;~bhBHFE|dhs+)-R-kcGOLF3Xljy0LGZ+es1MWB(3h?e}xyBdM7)7&*0I zBe4dE`vZ_u!y1=HQZr|~bmz4|@f67-sM{j1wH5z6Nc>U%M7w=SKhG+^+P7xcX5D+V z`mu9F$?n~o_0{JPIkD{OBmM&aHpb48&ufayeFAo!k0p=`?oHzFu<0c#bHU~O3;){V zsnK{xR`Ezncn>rhkDhfD{t{@giH2#&d1#-f#^h$kPBBQDfX3wfVOdavO*u^C9lU(N zQ)9bpg{Th1Ne&v@Z3mB|2Ah1ChAcoG^3aGCG3%$AxXE!KN#w z5dbfr^3VwA8}fXV=nt6M1Nz+hUsBXy(+|^#2QQ!V(6FsuaO{-8_dz>Wcb+3}9*i+I z5iyMfpmD)dV_))3;(-uH6eq-#bUUt$YoNiVB&LxFH2(C|*wpBo2yJo1D`M3uS zHaRhkB%pEGQ=|9h6tTs%GzX2|JqpqLg-ugTLw46y4~@8a8a96^9yYMhikm0xq*Y)9 z?O+oY(?||4|K*_(m?GfiNilVahnASSE({rq8f@xf8Y$uBzdbZ;Z7w_(k7!j4X)|rU zd_zDx*d)d@QiH}#PmQ@X%ikCMA*b!RY5uno+rg$YrjZt2zU`?o_Ck&vq8)FbPsh$G zB^RF14mPndjr5@LKTnOyt^}gs5&H;eRQj?@hH}tgQykNfh249e8b{LR>maTr2s94= zwRj$03!ChiMrL^Vfv3ipcxMiYF;*Tl#DBvlf#to`OndG~7%TKd#{q&IEx=fz%dfUY zQZwzjNn0IzlRw0@9|zCcFPmFPvT2XCTUG%6@oe|h4yz$Fl>v>Z_WZ+9gH3=;BN$$O zt~A{7$?M0!`xjrEPh3r95bbZ?&yAwKKP8g8$+$a6=Kg-a9D8s({W#om_@=1oL{%_1 zHBcYq{In`95A{kk-iVNJWMu_$csbiZSTjYM3yZ2O626~gUHkO;g-GuqJj|B zx2@XJ5cT75%Ylv5x6XCnWbFY)f*+p}+1Kz_^fXuhLdyX^4!86l+Zst{Tca0Vryqw~ zPGwz-qRWTuzJ}=O$KjTzLE^z3MV=cw z5J^7{x7-*emW@&5iK23S3U|f#clVhSr~XXjfYNcu)A!+)KiY`(x$<;w?@#Y+KMuD{ z+eAHN3@Ne}J$-+7pJA4S1-^WO8EJM>YkePXF=BVxfu!^K1$y@Rak%BDwAGO`$`_%f zuh0t7PUY*;3NS}4mkaMR>qG!mS9#4_< z<8VvMagztQsHn*;aLP$FTwdw(Yws|FQ^6m`eK$K#i$oWk(rgpp{F08 zFL^TJC|+mqUri_)`94r%Px3+R%BhhM{ADve`+Og$v8VcVC6e|yRU@#qejKQ|`ACE? z<>@#xnpUZP9H?2HqBN5Bndfh#rymDuPE4dVwXv<#eI)%jP}A_~F7!0Y#-(Sx9|vm2 zxx^??*J<=M<)KME9WwZ0G3*kjk6ie&JM8?lk}eW1ojb6f0=MfGj$vyGAT zeV`_|`0Jra28Rr!HJBdtDTjKZPLG(bJXelB7cZm3-{)x6gn-dSz zM6~J?5!$I$MB6ScLo2rGTe@wt?#)_6wCY~DSyy4M`OXAZQZ|ybSR%Sgd`*JQCVnqs zgn&AU<2L?~1q;LDv#KOBuKXxNWHjeuO2|xEPrfYo8~d-HyIg=`^(gZ8*fpKReSIk= zHvZ#nQ6Zi&3%4y6Oby9Q2~F$2*@`-%(h;ks1Q)-33ucf0YsNz_t5@Vco%alqxlgo* z8i^z|;hvF3u6wnRG(t+&MN$*)IT=|cIg!tPhK0QJ)O>Plou`&8GX2Cr1N99QAj%9rYlZl^x>Y7Mzyl3ku)lWh#L~s+UP&I!pWqS z#I20F&V;k35*dBC=j4Nn8;HEKcMg)8aL-AjG%Wn&7!sc+f@O`oE1Gc6NGt48b|fux zEIdvmsR{RtbUuCm4oT8T0#oNN;epYoEewVK?A<(nim;hvL~_relGk>y(l5*hs` zS2!84st=Opr`fBCj6U2m(kPIOS}V@)!jvRis|ojvG-LIfkDkVtnNYb@Wb~h0VWcsm z`Yj@-B!<$GBsJlllO1=%5<`vKwvqXXjQ%SiIC*457?B5>K=Dm_YQjAyw=Zf=AYQjAyFND+~&ogyO6RG}=XJM0(X5e5kf2kfaV>QT(q$b=m z(r8+79Fj&O7qwOs?iuNP^$r4yyerPpJtwR8D@kPK zlB1B+gnLdV9leRjL<7elsR{R-{AHxrZ;g6?&XvEGBu9egD%J_LYv`1W8S}=VXh#S&3|105$>SUD5nJIwM0%=U;$i zXwhYtkko{GPHwEQjmY)Q<$@2^V485x$lxVsx(l)ttlokb-CBvBnsCoZdoEd8l09S( zod!W$UZ*CabF!A13|nijQROs}nuyNH2Ct#D%Cmm@FeEh*osrJqJTs7V=4?!TtBL50 zw13M*v%URGZ3t%aIyDiUk!J4vP+F3$HA8C9N=g&a8EO1JfSw7)k!xGgQxnlS`99n| zJG@>3pUjr6)kJhgnn_+>q}C=(PpffFL}z4>y_qG*DlmqEa!#a~R};}0X>T&|AbQ$= zIzXf*qBGLEvsR4RsQ2fM9`wA`M07^lJ12oHC^d%K=Y+C=>>*7=XQVNB-Ebt0{+GKT zsfp-}44yj>lAQDmo*i)rNlip&r1`Zm&1L4tPGynQM07@4l@CKnRC-!J#(#{YCZcmP zTlepYOg9s@_hb)gB03|Dp-(y?X$;IqYZFaG=j2bj=y_|@KhzFAHTl~6m*N0WF5x)B+Dw&Y~eil2#$)tpu=fzfA6Mmk^Rbs*`ySG_lRMxQMiX_Sv0j-*j=BRxxf zZyXzO*NPI1x=!c&!b!+8`fSNP|6chslE#@{^hDHTOHO7V^@_;k&HhABO}1pDWv@{b zNh|HtJVrW(&9BFCwpvjh;{Ez^)?xd&js7)QbPCqt|C)gl!DRN-f znMi7~CHHJ`5Gpu|tlb5+?&MwZW8-+w6?m2^a=rY_za%x;l6$UC^MS~PL(-zBCR=i{ zb0}=PD9^?%>LIDgmYh6s2o4`8a!+3BTR%3Azifo{vLc`5sEwYQY{@ z^!=>}kJ?Q|(s?yMtpPOIl6hLc|CI$vYiB0-Ad9>!nrz9*AH)78vS2r=01?u^to{yT5x1AlA%Vwlt^l_CG!kjn_PUnLEX>LMOjiKsmYd% z3|_cok03=|L}bgUqmCn~$(D??yILGTPkXinlxH>Bl9SaEH6^l40UEcOY{|(wFKG2< zuNd|jTdT>IjC5uXeTkmV)H8D-smYd%w0{cji=_QUmc&SEvLz!;=NhP{$ak5Uu_%pr zO}1pDaUjbPB#n&)X??57mYjS!Mchl}Y1~Od6&y{rWTY8*Cy>auw{GEeYO*CGgR*6v zC&T4NTQbt#aBN2Ov{z|a5J^q8WTbVi)@3BE6WM81qsf+xw70r@9Z7q= zM%B<$lPwu(^g7T0Nu%wUct~opB_o4pY=C-`90|dr*4#l-lPwu(zO9`eN%P)NTBT~T zB_plU-ymD6*&*L<+Q-mjOHQWx8LAA5jPv~pY^^3+GScX?gyv79?LC@5HQADrwPw>h z+xVe$0D5Y&CHqiM95L#|G-$gm2A`NF#11O{6YZWceW<5PkI+)>I=5`qJ*ZrZy3Hb5 zw3S~+s5|Zq?Rg@qn*aGwPwqcE9Tpu`9Sn1?J0bHCUKt8c?^4jPIqJ2K znD?AC+ywxpu?93;o*J&QGghI7E6b{?sKH7BOk*8rgnDUIEuWV(a)t$=1}h3MjSZlY z%TvR;yo8=(*1pzlNW;DL%rrKEM!1(o#A|V1qwZ~mE6GrU6$+RJWQNGRUK(ZIxkw}P zF&K#Q-m;Pb)7SHpPuz~{9*bN#*yfn5}h0vok=5?j_J}WISjlG~z%u^$HrERs) zC;{u_;0X`@hwWfR2BxteG)j1C*z@*FhV8ItYMcu-Sh;~|90ZM0UK;hPmL`qjPmiJo zD?Bib!=O>dOQZ3(xuj9{vfSi==Lai6Fb%MXEbFP^G%6lO4QKK?|6)5>F@k9v2aWQc z8jb)b&A0X^`Dk6p$`VZD1ZY(7)G)uFS{B=3rnJdY6?pi#+F!#JC#J8Bre z?wyO*!b%lP<1}bg@zfB%PhN{O{xYVc1}j=H4On_cR`b$GmE|wecrl)y>#TgiG|q!Y z4Nr}r&`hwgBeImpl8Nub8$!PKSs{aITm+3;o*MR6U+!T$?BzzbLk(8aU>cV|qmHMB z^>p%C)UfssDuEiTxWP28fJQw}4STO+P==K6TYI(N^P>hUb1;o-pwYln!x%NQ1Zo(~ zx-LQuR`6gN*FmF^r$+F?8*tb`wj+4h66ko@r>ykBG;V-KV^0k$?!8W9i z9+d+%jON)|qXsLHFpc}5(b`L+*WCa&5Pa|H}`snHW z@(eCfUMFK>_B{Em9C{j?Gr}rLz6sc=18>ixHdx%rzBTsts6n3YqE5`7>vsQ1o|6(B zAWwHe$J=v7bKw`|xu9WY@^mvXdOBaX?~9(!>$!50r@H{;<>`F3EVCSJ7(I=Uym0zPdKyVyJt0qbfyv9$ z2tELdAay@8CCg2oZYD-g=hNX=(9?N#@;&l&7o@yAo%fE-Ku_oOpLUU_n~BlWIFP6! zdK$~FLkf}OmKCtPJdGVk#e*s8Iye439X%Nnvu8jt2)*ilK8n?XJl$XR>E-GCl4b;Y zI$vK{LY{6WMo%kY4Oj?CPxI+uNNn;tS%J*U(~8|9E_#}8e-o=#HHH`yqo?y=9M~~d z*SUOpR`g^AH7`%+t}3u!BFB((Q$&CCWK4{njwBO5pr`%y{F3O&3UFSYj(9I25J^w_ zx7$t7lQA)RT8DdnK~HN%_3zM=73{n`tvx@lKu>GS(d6jKn3z2?Or>#aep*X`loj~A zJyQ%5TLI#~hK+q3ObV3cPwBNlox zCT7p_r|5ZW7_VTpD6f+hOuaoz4xT`s1$Oo%&*(o><9$CDea%kSIpVn7$A@vt3as9q zbI+wGD}q9@?#&6XYr>Z5h+i`#O%3d?IiM?((h05R3~|1?eFcmtW#R@oPTQw zdAgaHJ#RjR!o9lALt|*pW(8tz&&zjqkmnirI&gKJjEUK^$mF)a9Pv;+x2cV~OV+)$ISpnM1(|IHjJ^P%ykBdr-@?=bmp4Qqj z?agdUsm_3bY)VEfmt76@#-YcxY?d_SZ6`Wp@ zeQTvlLTgRN#OP^0X+wQ$o{Xr9o~$75tsxfo>s4I!>MoUm+C>D z?gF}(r`2WVZ1l8Rtr<<8ZYD-gSGwXG$n)R1A?V2p?p~g*?}mk=rz>veL+Htvm_0M) zI!2yf{)MW7eD<*dy|-uTN{%a%_2{CLEp>M`t3qx^t3i@ z2q#ZB6SHTTyNk%vK3J?X)OE5A0B_G?1?hQf@J3$=7;j3=*cz= zygieiaC-*+m>xYD6SHTItoPB=ieoN9Pqx9}?U`XYY_O>JXVQ1Q(33GSd**Epgo}tMf zP~9Xn-pcRMlQA)S&KjQrJwt~sN{gOs!^7KinhWYX@;XDuUlHq5b)Aff(KC3=^<9D& z<4A0fbgNF!1hzrq6k{%G12O6g}CdkGE%m#vy`{_tTzd*hchZOw698+ngfL-2bC>0^20=_AK5D<^|iRfv386!R| zr^XOtV)QhYrK5U+F=86*gvt4nZE|^e8VhQTB+u!I3!*1uV)p#==Q4DiJMOE`7bWOKq868A(fuWvL%PsYUPX)iq#Y9MOd8u2@zC)=d+^0XIw zNc9AJzCohyp~etnV)V3jOzVK2*6ck^(UWcJd3jpve}5zx*|*m6Gh#zhc`_zOPkV*d z>Cn?2`lcazvQ0oQPkZSTEzr|mXw+=f21E zk|U|vvty*u7QLT)0X-!);R@%sY0pT?2uu-1^Cn!OKBE_+c4 zJ&i?$#7<2V8T}3hBh7esA?wTQ6yKIb*QwcuV5IS=0o@hjUYEV-so7274%&peIATVchaM#B6}zhi4z zWnSZH1Z9gyWR|yZcuw9=O|6`Hy5eq$K++Yf@NY7^mj_QEa#7JlNNQ@Uob2&8q%GA$otN)NQd1%2Js ziR?R?o+g?)Cnx7LsY>LGl!?((Q>|oV=)hpeu(GwGy|-pTQd4u}C`ya%q19hF6st+U0&|625G_BZhz+Lu`rgp>05?kgI zS)}P@BsCQnMh4Y8D`JC+BSEzfr9x6uM`5IW@)6jTl;hSup|IFZP_5NeLm27GB+h9^ zk*>5Qw<4*jX)w~hB9flB_9f%;AgQTLFw)r8bu4-s8&h0CQd3`GWbpCNv`P&=Iu3S1 zA^)^P)ZX>`9b2h zmm4CP`|*GlNNNHpBaKGQf{-*SeWehr38aiPGroqe@R6-G6W0-i6*V;2p$oSYE>rCsT1jY=wxA*j2e38b9t8?lhc z4nIF8a-Od-WQG1ZlgO;wD28YPDf2X1SapyzYDYdrPfZ|Yq-mXuMAFPMJ`R!52U12F z`vw(7(pbNfqK_t!a&k^JSaPWM%BV?)(UTp+(>+Z-HMJA@AfOeJnn21uZ+4-PV4Sbh z9!X6g<>aDaun<(Oow}tQlA1uu$!`Z>qEY0FR!~ls6RIYVGSalJ!3L)!%`9twK~fV) z8EMR1=6-*UszQY^O(5lDy3f7P(@3;|7N43x%1G-|!!t-)|JbKvYc+wClY>jZ0b6;U zR;L$jkkkZHP8M1U+p&tY8m2)~6G%Dv$3zG)irkxxrhiQ!Wu&V^_UuTy8jdZ7o|-_) z$!?S3;EeQiH6J|_NlhSSq!rn|GLqK)`>BbHK9F*9)&@(^2V z@3@-^fSN$c$w9xRC9-qFdw89iK*~sGnaU9HjKO(12YBTM7fNIFuK?uMi$ zkTTM2xF-#gX5|mGHqiu9MjEeL{f(q?_tYKq)C5vSn!)jDE;G|)Sd645ka9Bre1X4x@RofXykm8*tHsDIl+k>PgkTTLfsxZwf_I@`bk<8ms3Gk6G$0ptPXyRq%rqKFnVeNDI@9_4@aDlCk<kMUyf$*Hb??%r?|*l5|FixAKXqz6 zDJUBU^ZzcID;AvMzgIWyESI(ZY{Cx66#-8ZXrpaF{CPH^`&v{}_$F-BXL+ThG#ilP zBD^!jj4haCMY8#CW}Xm8ED@Cj=%_gZ%=-V=j9(;6`Qh~{z*13?;kEkiKvEO18ENc# z1WOA^8o$klMTzv(1Z+l{1Bb%2AW5@ty9-46-tleR%pkJd2#UCKD%GPQEHX~ibra?VcUZ-nNVu+8D)C6osT9;zO z;!Bd&xpMiD)C6osx&n5>!$6VW)~`iU6R;U+-Orex$lHOi5R$F+W5;*;(|1HpeqE2q z=s%msJdNL-NZ&iYjXM`Y(rlOlPNB=b)dXzjX%@{5aYNouv*4&%NNNH$Cj*0^6spKr zhhPUndTIhTCx1E$ODILwe+CO7MXJ9O!_&l^(E0UxK72U~@9}^({n(EO}34^Z}cbaZgV`()#w9p0}ES%}DFdGpUI@TlErpY63PV zuUFec9(L9GjZzdauWazc`jgiy@Y~~r3a1MNy zOL~UIzxNGEO~7Vk@aL@Y1Sw`h5wJhjt%Rf|U^CJ_a~Zuq?b9DmLQ)g3Ik~HEZ)~l7 z$I%~<)C6o!{=T|7k;l$vMN$*68R?u*VF!}VaXo4DX#zGQ9d-9YIbHUxqfP?YTa@n= zO~7WPdEmh)B+cD(2fXzrp-20W0bj1FP`c@OL8EGaewgE{q?kp%!%O27MY)0Bs2aEkv)wlMP6;dFn z3D}IZrkR(Jv?iR+futs2bMn^v!bJWZFAI{IfX&HWqpuLT&7vOC1Z+l{fzQ4oX~ymj z+j_ExGy$8D#*_E%mDGdAgOT)m#}|Np?l>D>E%77K5*cU1i!6sN9@!F>Exis>hgU2H zo01LSSr}gWeNSBkPAh{`dbe5EyuHN)6eK&tC-?aPQa`cq~cJ z_{)8ev65WM7FR%h1Q{#I`NGeUOc?!6F?$1yd|OGx?%1CMX&d<(zCuNLCjQxnXTa*; z=LQH;EI(}ls}Ju8Kr)5TzD@ZliP+_fC!(6omhwZ;O(c`}Drv+%73<_;n=P=o0Arv0 zQsy|4X%G5nZIUDrzh)Pndj**!N%wjikj$9F2WeYg=zy4r1G+$Km*+bVMFM$OGW-1b z<+IsW{3u8<)!1xjGyh!#$t=fxdG@KkHlZN*1KFq2J2;3UJ)L2`$U(OC>jc>h$bp|z zRY20^bKI7jSoyZ-R{7{EH>P3@Btw1nP{qov#2tw(3O_bm#j@*%AQ^tkS8FSrG{mD% zkrhrPNr~k54}6g+BbSN3jk^OpQ@+?E9($^XhIfsgbbni53D2LeACP5;c;l$&?|`&7 zN}!bPs1CetlP-UrIqZ2JcGRpnjwed@-n-jF=a z@(p3CRAlt;Am(YzFwdf=G2tFW6GcW}6y#*@d`pPzaws*C(H8|ddER-4$lsU3{*>~J zz9`7aiCIPETlJ7Js#NaNR~Tah#te}>Y5BBOtn zGSb>Sehre=nzL<@)D#67X>^~L8A+pEA_(KsQ&SXVq+|YF@qSl5HAO*AzFrRHM7h+lp2Z17Qd1P< z)f5FenW`h4*O5JBCjJ2Xe<7jLX()ih_(Z-YtcwDX-IbG3N@BnxY^h&8pX-6r_5n{L4>7s#T5Ws+W^P zCVfw2zijjb(-Z|6X*_8(2T9{@W17kRICaz6@fVS8j_$$MYKnr)(^ad2Sn;asbXD#P z#ZTF{nxY^htt(=SF^aU#rKi<{rYOkCDf{9RIp%W%^wbmu8R-h1vlvNNmOL4VjJ_zy z$s-BI6S-&pP$V@)K~Da8^*)h*RG)#QrYOkC;LIP1%--}Bkc*DGD;u)p^)!Bwa1rS4UD)6lA3ReP4Ql*&`<^yH zPcThUkdv!wLg`(OTWj$on#(jrK}H%MN}op3i2RkRW16BMCvV0}L*%9TIq^C*ML~}r z@arx{-fjPm>SSg|b*eS%-lA2bRkMgL-9;sjl@0mkjrW(3ZXVc1v{+_$ zW8oRv_+}Y2s_Y2YqJAibU9j2nKy}2;ru(*wza*=cEQm5({YDJO>r{tXM!K6N*3vc* z`%(gitDlEqxG}dfJoZ)NM`fq#E&EM*hO1wO;rM`r3kYu;0_#E5cy}&kxcX5Tj$fWO zm+*rL#CL5(;qGwCaP@mI9G`mZZ^DNRyhXS>p)y?k6b!@7&grHjZq|PYj}F;*7E>9n zeg%f%#`=fU^Tyn4^$B-pRfek{fMK|`vj|nIt!4AyBF+LU!_{xUFx==9F$^1TG@C-3 z1T3{OT>b0|!yUgoX^*&L(q1Sf%WG%RmEr0aUl{J{JD$4E)#A=J#94l2xcaddhFd3F z!HEw!>a6V>mLSeTEW_3Bym0)JLsXWd@cYYbh_fWi@M?YFWE#h>SA*$TxgU=Fg>d(W zNEohu-G$@hALk;xcdKTEyE84r)epNc+}Ix)4{>8{J9=EOV9Rjzn=TADhh58vxY^}c zC3I)$mf`B>TsWS7;~c^R0~RCBA}+(#FS#(>`1h39eTaHo+^R`OlGvw97_NTAh2dtM zhe3#&rSCw*k)w`SOw=mrJ(kl>g<55IA#98cR zxcb!=hMTqaLiUxz#w_`2A>r=q%W(CBEgT=QU+k7f;oVO|0G8Lz0x-kXZ?!Poc)24l z;>PuvP)Sj^`)CZq)z7qWyvM_Qgg5P59B~$f8Q$LWE#s=+6h68yuiaHPTW7>s9%gt) zPu#kB4T76`#~nZWJ>o1BGrY4GKI@-kgb)20);{vuSu$pLS5Mq!-Vm`Ss`067yd&Hl zj~U+G3qMg1DvRpcw=AiRILpWkkMP2;C+SM~q2Jyk&Vn+-dwJnjjgf?B`na5McUoq6 zA5Yx+ROKq-*4eka3+c;ca#c4kLBbbo?Nh_e{Y@L`^KSlkzz3ICj=DB>(jGyG>y zJotUjQ38i8I$Q9wX%NNbpk;xY;Uhh9`?T*Wp}T!_{q~5nRL$_wUifc!2NS;L0WAwz zv}X8NFZ{^<quwlO zGkmfqZf?s1(N{gFe|a|w8_(i4!>4-Tm5Zhzyujr2h_lSi@abOopht-b@6azD;w*SG ze5MyZNq(KKYW#q!2M}lJo8hxP@u0cmA?($HQ5Q6}$FGR92+r`ip1A#No5|RC`~G1Q z5obA^;qyIlSI<1*h`Sm+-j6s7;|yQuiQB*2qcmZE&>eQQ<%O>s8;9^Y523IiuboA8hOhR-jjwZ|E}^>a@m~WGXL+6BYrXLQ zJ%+NQ!q0p+4sjOR8NOcO|NW4SnB;7?#h4XyrLPa!WcNz$W!rUZRi;&s7Tw!*71=#V z6rT9!UYK>bvWE5zl>e#LZgMXNWe7q!pq~lG?q?+DM4xU?=Pdi><@RPfN99*)&x%t zvwt#J%t#HhRwJlU%JIR<1x({0ygbQM!`QP?jIOA5Oz$k8aL^9+p%9a{4&RSJ4OT~B8Yki9Ii4EUUn8NAqWWXw>O-i( ziU~{uHq2ko^VD!9DCX|d+re_yh5N!P3QXfHXe{v5u%4{wPwm(@q!qSVREqms{c9_N9%f>=GSkZxL+yIR=UK%C;fn6ij9~mFK!FI691Jk$#FR$~`NMymT zyVNl5_Gye7to*<!&qlU z45sk~EKYi9e4GvYxawNYmXdF7so}0gK5a+$$3u=k&V&{4WT0n8&CS2LJd~fU>bq&@;kiQ^PssDuf?-Z=HR&QEp(x4yKU=+Hu`e!_lDjThwrrokQb;RXmu6d^Ftf z)G&X4Tn#nMxg#rMpR%$C(?||4-}2IE`1d5z2rn!L5%ejmeK3ubpmE1bWBieVq|tie zTx*C#mOpoyQeWgB3-XMrL^Vsi%e` zaeSJy?KiFsLJd|KVH#QCiBgFYOq2H(+Gx_|Mk+iKa195*6uho##pt4X*fXRjhDuu zi$$m%(>}>JCX97fGGQ79XuR{(FuzNC88wW1?Mmadu(}D;u;Aqno*Kr>_&rJE_fqmN zK|5ISglU9;#wVo_)4BS9pRNnhIxzVAKPy8EXLhbWsw~n&SlPsbRQ$cq>tNy+2b0Br zzwJInz7oxMkKkzt`8pi=EU8ZQiV**-UtV%~!zPLgDG2pxHH zU>YKiJh(@s?^FG`2SMFaUZ-i+fE{b;$!ZQ7Pc!KSIM<`d_$#I&$tn#R(zu-PCX&XP zea(<$^#u)ShFyWP1d zD-D}Ury0L#=tG;$*Kh!(%P1AG?Lc(z*R`H8i9`N=z!!W`_^jy z9aKu>NMMx#4e5&gxFeCDl0f}Tk?wkcj$BwAR-Dq)HM1){HCYuvN3KZ*dmxHjdhQ~6 zvh1%TQ@n6L`@UOplt_2t*O1nk*K5(!I+kiIk}T)z$OTh+6FIZqFeF*J*O99h_apL` zPW7+e0b6vkZ$p=kPl=u^ziT{0U!`^s`Rs9bBw1?L zkimB=K~1TwSfts4Z)Jytu)I!|)pcZzaVrFAO0wd0sH{m+_YXc=iARHzKL*53Ew zU?Q`~zXJ(14@g2~y02B7yh3_#1k%1g;_NTT;A5 zPy71Josnd@TSL0a-pG%nt9Vxzk}Pd&Nc$-l9Gy_3@5l(q`tq)@jIAM!>+j$^sw9m| zZL=fElC_2meqld~Wbl(>rI2KKT0>fm?$1Ngs=ad!k}O5*$n_BsL@qDB0ZEpfb>#3j zP%V?!X$^QsJ;V~ThBU60gW9F)q4Qm#ej)pozZuuLw%_Pav@qftwo+{`r zM&4~P_@MYQNc>U%MElj9sl84Wz~=$rsdhU0=a$UiEJ23nJ}l%_H~L?O6e4k>`8&v?s`2g&%y6}B!SSDJKsiU@Wol4~EYKZ< z8LoCLIKFM*IKt--JWcNIG|X_dS;6t1iNgr5e0-3|AWy3>QCh0Wn$i ze1V+s7?C)O$qZL}5)5~Yu3HLmM?}*Zh_kHBaJ3!5a97-y7JB!W?SNjhf|LqpkCS=!H^M7bcxH~^H zTx~sYyhG_ngjatn4|GG>kNqG8!_}?>!;M9qUm$J_-%mRzEJ-t5Z8$L8Y@L&Zi=|^`N1K?S;S_z+E-w>absry;fJ2aN1Wws zhN~?FhMW02!BRD<@vR_i%TdRExPswoH-Y1=MlL73;?jhOv&7ACwUNMZ<7|U5h#T83 zq$1oMyBV(b5I9~dv-?q5FrO@n!+mGjo8fBvfZ?w1Q$RG3*Y3)^@g};n0M2l=bHH$G zcMm7x))I@J^DKokTx}X~yyr5yaaO%D{n4F8afYk?0*1R1OoJ3A8*jZlLlZRnZ3~90 ztpbiOKLy7O)U}V#wGQ1`C}+6ZCE)nhdb0_iF`gRFk~zcG1_8&@v=nQhDED}iZ=pNe zkZ1T8&$W$p`AKKQt=(^0BF-{8!@qgq%j>Tsd~BKlh_j&X#^1&A!Z*f`Mfmjh^tfPY zo#6pq__5Uu318O>3Jmfc$09q!13mH3O)ozn9y+JVW5ii*XLvj>{LQRcgg>|`_io`W z!@@hm6L{jm5B~S3z{N}>68zP$v*^weJi`-t;`X6?wxYYe`*a9z^4i%(JHwND;mgiY z4;s1>l6!R+bwQoxLv2G28rKvvAMwFfV*;^|a*PdGj&ES;A*{Zcp5}S<;~{`Cg_>$S>$N#PA(rrz8_ zbc)zm7Qe~yaney)4v1!7ytvnw+x`6aeF2JqC4MHOr4x2c--)sSuP8+A?7OR{10t@} z7EEKwbQ*ZUf3tzH;OMaU42m%8Qx=Y9yxad@GhQg+AADF*x)74#OFBZ?Rg$c5p&`vA zHz0gUPcy-fU6Eup3my6UV|bS+^2n9#M7qlrI&$?O*q&A7@_V9xRBJUG_3S#0&(FjI zO_9d?M{9|67b!HJ#`&v;9je7Q8F*77OfTWqGe17y~C|lhqS+&zs>>$@8y`Ign&!1D$8(q+&XbYHj&p5cy?m z*-?KDX`Gj3S$Unt$yqdRS+PJvx^|v8jh?Qp1p?8N)d_TDi9IEVEcD_wlB`6aA+3M= zy5B1=N?bycRR=VrYs|9(rT|NFH($ziDS0ba|sApryRj*V#^mNr6)fY)t1kia}S-KEu?;Q_Gmj88R zuAXy=baj1$B#Zt!vSR*aME>v(-4&MlHDp*=GP<8(=GO`6$pXKQ{9)%4^b9Lm0;+5B zezL5uA?@cnyg<@^W-_f!SWefGFE7wD!T!QMm$8VhAsz8b{EVKCzWJz2{UOqaO$P01coVjc*3*kEQfjrQ!Jnt-~H5kj^8Zzk7)a}Bvfmp`d zg6-X4NN7DNrv9&C9Ye?6HFK{?Ow$^p#KCR8N^; z)?h4aYe=(hc^X4z&4AR{S{Ac4q`mRJe&}g$IGpBemasLXb^oM=q;>n!GW2BOT0^?> z7N@m|E0<#$k}Oy2$TYXbA)2VZO|bt;7F8Qj-ulX^VV=r19=v2_mCUh>Ub4tB?XoS73j-PEA5&r18hv4M-Y?22c{# zBt%9!?q@EIq~qq+rPx}wJ*^oDu9E|EAn7_}6NMBt5;O^sdAf2o+Dl}{>9l&#Bt%YD zPcxjzAM^f*o|=TnNmtkBMCSPAF_FGd^4&d-|wNlilJoXCmEu${J7ONX}_U8oPcNg`_4SGEdjW zJYuz?uG6*Zmoi9d5+Wz_4T6KMvWHwDJsTpaNr;TJo^}=6aEi3qb6z3~F7J(`CLuD?UNmu5L5e4*&1TP6 zmq@k|thp=V%e9N6r~T-H*yyRrmfZ8%cQo_bAMPVklPwwP2*~~?d46t8IZu-<8RJ}MTQbtD zQW)MVk~GUUX@jIDTQbsKH|Gr`?bTz$uD!gUnrz8P>v{#@7d3`1PRfg-oiQ|9Rd)f2)(htYjI!;U|bIKY>m7 z_}1CsFYOYWqAa+&KU@7?rWtiSm}!`4=bk|g<3*e>)L;>oX_SJO)fr)~aqiVx)G#-; zs!JN~?M|j4S2OCMFxS|exHD-?DI>QH;9A(mC(|ek7ANE$H`fSE24@>&e;D_M%SF4? za0gtbQ64nZkzuA`TzfQ`GeGK7$~Xhp!VYjVjT)eF$+I1<>?KB^hV|)YK5PdI$4sLZysQosvvwGNP1%AP z#*QgJpazS{Ors9GtWFg(4acjlJ5j^&=MB2IEHE>TdZ3|>7Bdak{Wh@Nkp1D>F;G52 zp+8u3W*QAZL!B??8U?@0MjA=skc@iYvJlNQ8o|rzkTKV2eXs>-6ior29FgyR7N?m; zV|ZDeH0BybPQpZ@t|fi!52WD^)=Wd@GBZ?ugAan#0TL%rVn2 zv)3z%?J&MIu8A5fY%`6P@Ul91%r)-JeTEw5{zr>Q!yUVshRoLL^fA}ybsjz=CHupy z-t%A7U;&(Iz~QBLPd&%FS@p~b(g-aYpETT2oN2U&m(@9B-i|FRmXgNQ1@lmYg>t6R z5nfh@k-5h7Vx>rCdQ4LH;HPMuO_8pf?N^gJ~-B|C)eV1b@#$hWmRs?0Q8hgnH=FwjtEn7Kyr zmr#n5?FdQtOis#hEvy*8G=2sRbxcbanj~cEP6J(^58t#o_rZEyU)M;j}(J~AU zO{o4Te2nHwRv=&+qd_B)=U8{;$-AF4lGNEF{*rvIvr+-m7z-Lnyfg~gp%|^&k)l4$ zm8@vMG{%F5IvdTerS|HMq+u>OgY97D1Ew(%G}HlUrV&*QY6`-NcRWpsC$nkLOsUBpppz|-gVLMpyfoZG)4RyGh zX*kj+*@f+J*s{x_CbWZk=?1A`7G5Ar^>8h$NWnBVf`&S9%{1&S zXWd2(d-;JkupO*i!8A65hB|f4G_2>}B2mNoBXL#KV1)~&u@yA(dG%?rhrghPD}6vZ z)Lgx={{MR&vmg#)HAxku;8*m5B7Y z_inw7a~4VKa+3T=vhsq?bMq$gMu_U$sdEY-$%+aZ(s6F`RU{pou9ilUl@c_hYtt?W zRq}qirfvTNNmfA6k#QeRN78ycgQ65G8|cXVUtzyOd8Wy99X(mGKu4xb5En`7P3H$h zx=REa(mI|#4w0)f1`+8l3}{H>!%sJnH2x0nh$JfqXh?Hc?^Z~f^Cyv~=5#i%`&Rr7 zBBpw0=Xyj-RTlkqp3a}L5t(>OQEaW|bT;=KzZXhc%ClP{x+^T^>pVM5aJRP7x|it5 z!o7~n_Z3RD$}?R~nYZC-!XmwnoDkTQ$S$WIq9+UTI&$BYf`3{kZ zI@0}Qp=?}uspVw1#}&mF-1)zt7f@v9zdXVO&GHTAm6((p5J7EA(U$TtkM$%9D=Bd+jPC$%40zO!46_BHv7- zD8%BnhIBQV2a7S)w`IDYLr*{U-t)CwLS)*)<&b32TIU(B>JcQZ`|X+`$pW>GOx(nM zKc5erfh3F3Ix^?gk?83P98Dvhg=Y;JmgJ)g$Z`ld*FH+Lw@YN?^u%;J?)D|UqDY5taY9@>e7g}9~n0bNfxJdFE0kJ{utW*3oPg-4zy?HKh4&hGiPy-8A6M1G`TJ&UbRYRHuN@YUQ%y2d_k}RbDhlJO6 z{`UjY?ZqIv?cX+fa<6T4G0<6-^|X=&k@qUry0fI&dU;~e=BC2eX4ZK&U%nE}XP^V* zXP^_h!3JM%{~v2_0UlM-?EeQAcXx+mCPyZL;0_Ujv#>yb#ocxB5NsC~3GVLhEQ{;n zE{nUnyZ*ZSq-yG&ncB(!KL355d*Aoo*-zE?^y$;5zg0aG@rp>ANP_jh9Fr62lPLQR z@JX-!o#gWWZ!wmKc9PjEj5_P%lSoWpAD`?Y-DCk(kxA2eBa=>_C|+m@-%2v+gzM75 zE3(&K&*Xpk_EoK-;JW+I+MXUl#lp8=Xe9kl6Dgv=;k4g?^zPfW@~x573i!+cG8Vr5 zOE$TCP&u_H8|ESD-M3%8^c#}L^CUph>zR2iFll)tb5*T|q*vdr#cSOMNdI@OZOv#T?~j$9OR4ql+qI(UMj+`w zMy?bV>D9Lz^>>d0(g<%T`yq<-?%TDv2c(Np*XjSdv~;D4^zPg3S&u9Q(w?-?bs)X_ zb~EME6+oJC6Mq3R7QVeja7`eMTE24SS88M7+sBq~hUB0&IQwGZ+goIlo=c68QTx?X z$VvWO8(o-)D>d?*lfJ+r(-oYKq*vdrRoWEUNQ5(9`*Gx7AY6d8>D{+$3AdL8(*M)AH$cY1w?CeB97yBxBI)>5&RF>N-knk**|yJ1 zAieu`!X z-|l;|`ffoQKH?wWeGO#&P?53t5%YH$#rDw}A-_kZvmoj9N6c+GR^oNqQXQ6#U*+`f z+iitvH;0@y`^Ei0#=^IM{~Mn&`%AqDkg@RXTT%yO&Xqkf1L@tj>lF((0#Yv)QU}Ob z`1Xs>j{>P3{1tP0_w9Q8k2jJ0xTqcE^zPgB%sKHo^~8JSK|Xa?y!&?F%o{I=oZ|Z) zVh$y1+6+kVzTH;pXX&AvNYWONb{CM|eY=@x!%QHJ&klbeW8vF}^!pb`TaRr=fsBQ3 zAJ#;eG)t}4J4qQJW8vGQd&CFQZ(yQXKzjG>M#dotfix0rm(>(?S7PDYTgM%RWW+^O z>)p2-Rk!6uviRPHkTVv(efUsW`%(8(>zfP>>3{h4PrLrtw~GVZ%C|>|{~RFx$NIBK~`ioZ<}4fD6<9gY4=Pb!8aAm)AWg zaIq2zeAa}~>Jtx6zpU%8okga5`%r+Q^yuT$|I><6Vqiaun)!eJ+F4|Ra(4wI3V?$7 z-e)71teji2g>y~RPudk?FSveVBPDrgo!^c2s zZC1%@w^Gaaazfg>zt{()z4HROH&rC#%L!@ree?rJvsdQMKr+6ZkjBaLVi~b!f^l?b zK_D4lPRTFBq@!1J$oSwRceP3_|X3%RSPxL&Dr00G*CC9FlXHTr0qmJPmBEP84 z&D#xqG6SitsoxfIGQOPT)cZ!ss*uX5{}xBqAJla+{d7vE{H+3#Nr%dJydoK2PDt%) zuLnSCmlFLz(s_WMxlX(qFDIlPd{LBfW5%}3;!#Li|BiTexze%T_rYEyduiK%WPCZvsolscceU2qcV%=d zBt3tZos#VaZ$`3JqB}q`zMPO|?Lp~*G;0Ju2a@sSgf#9Z#5LZy88{Y5#+Ora?BDV` zht{()GL!UFY9=tgoRFsDSTK;Le^b0GOh28Hd(!1ca{EJ^eT*-s8DdNU-86(6!S=sc`D;fU>rRmZ3RE$3T6wcf^R{l z6Hm$R7i4`S$IZi&r;+WE?#uyEc;N3)R@_9Sg`) z-)i16j-HZH1!YarBKtl#0VLz-3F+I}QBRP{Ao+Hvwh~Cj(G$`(sZKt~X`3)ic2$&G z#?cef>@`T%wUt`4`=8fa zVsb`qu7NqdcZ*k)FA1bJKOCPj#+4GadeR?eVCSj+Q%%3JR?#JMK4>V(e<<4Q?R?fkv(kW)LE zzc#3iMYp(F%X>)HFOQCbait`uS*1)xAkE+FLSo9Kr-Hvkhc7F^T2i5j9(@q>AhRrsfi8AHla9g8E;8*{+?|tl2OfZ z?PI(pA^q!B4F}S{){>8)mhqN^w0$awyEoh0GCn{u-ja~|(wx%qTdU@*I;VkTyd@0cR0##>UdO`7Ua6GcxSpP+mL zUrE8@Y4iLmYoC>)spA?$TUA6(3l&2fzq1U)Ak9_hx2`{{nreh=483i*+}^7gdZh|# zgC%tkLrY>@ktyoC#i$_OQV_#`_Z!sVw6-LMs^k3X8bh19a0bNC`j_m3F`Oos#85ID zxy9&MyEn$DHByzD)U`P6E{SnVrfA|8c&L7aPWKT3{06p8U9lYYe^9XZbR>?#s_fRRL9A3o*ka#se9nm1_)b*}TyZLmU2C z6_!*CXS0^XcqC)AagAXdzbsocN{6wwczU=NVvtFUC-UQVt}(Q3H|49r8q?Z2TS5$C zl}U_e^5YJ!G3>pzoQ4?omMQUCh-oG@T-U)_820^bcGMG14T4dK9|3#xUdbm8~`_#+^!P63P2QEH#PoPNwML8pF8gQvhRZ zE8Gfn5OYmpe2^dabc-?R?GB95`3!tkCTos;Dq%tlV!}y`AM)b? zt}(RRbx&Z716l~iaN2Qaj4yHI#{*qs=pm;vK@8n?RP^AiYazy*#86Inuv-k@;`uN} zk`Ag6Cg%sS=p;sbnPRAG4DD?W=d*t?bRp;{Ug+2=*kF79mKYi z7>Q+!;chXa4&z+cn>@}AI*5TMG1RVcgli1#ZeLmGweIbaIE65Vv%ySaB$pqLa*NS< zd}WMLd)r?SgP3{}Bc=Q}+BJsRpz3cB!z_KV3dA7xp2SEkKOXBE!+6xK0mLv)G!KIq z#ORY4stz#TEymOh+b~9-@#=w)_k~z~5<@N76J2ANg$mw*7-pIpQ$PnX|0G66`SE18 z7zeAD#u&?`Olz)_G60E@S$;g#Eyj&GvRth0t+}Uv9f&~+0wji7qNcmXFs^n?4Ka)p zkqt10vtdnQs3|zpHHH~?1Fk{F{gpc*1}PGd7&+y~vt45t|Gtz3GIcG+-;G;93{oy2 zF>=d~=eotXpFa`CIJ~zx#2|$O5+kqtc)nYVmv7=>jC1#KJtd8862n)x7%1*P-raYsc+*E%G^sGq(M$%l#wxZyT%Z|pceuLA4q5~G5QamY1>-^(sbA%@@S&1pafDSMC@73IfATw@r2hGc^nM!Wl~ zAqFXckQkNa$H&}aTzMrb1lIg8cDGUoOXPhar4SNBd@}I!3AY#rI?A%Hnq$WDrRu?y zF-TE_#HcP~oN|q!y&i%4G3|Vf2)Gtf9w9M)mLH#Si*a<~UC^Pe>$x6ckU|NGQA>V& z&WhpIj_)qy`>5md{og#fErK?elfVDnW%D4Y_iua$<@hRJ|B4JsS!6SivFPEC4jT-l zHn4$OVdQ|4;s?|7)kA_%tzKkSamYzZ9vqpsay7`Qr@P-4NoS#hA+_JmUIJ2Un+><) z@tx%jj;!V=h-A5drkK-N)ZobFrR1wZjjcALMj(>TQU*tMPf;AnmPK*nAKzKPU`Rde zwR3FEigzFN<_-gVnoN&ID4TU`Va{#9TmX z<(sNEj3h~6f+6iquFCWNDyO}6-R+>3lp`3@Y&b#|sT65e3oi;JDMB!$v9`xBAdLkH zm1mP`N$G(juZ{c@$>YZ-Lrzj~;K&UXe34w7Wfzj3PnMI4tkLE3G$fmuBan0!7nq#d zq(r%a)PBzYK$7wSlT+KZ&8c>M z{Y6MRiv|p-=T7(%a_VVoo&l1S3OF);3Yci4Uwh|6^1FIF|HoZ17ZjBz4y@~(WXFvFG4EW?&B;C@ zxgs}isfcA~NaM%@kuPS1_GG&SYGcvEzfo@|lBXi30ZHsRmvimaElAEa@r^`GIY;gZ zY>MQ@(yBu(=Pj|~9C_l$3?z5ILxV*OI70@k>NgO`fVs1jUy(V9?dHf$7iBR<-OqqU zS1Q2>5wp#Ze#u%M5Tw|L3G4FXy#q*Mu^H0l`=dYPv}G&NA4#XN=E%l#vm;qEei9&w zo#x11d#57VcHBWAiHT-N|0+$t0qI|IEIwt#Iy0p0*`tR*+U^$X0y&9cW=MTpR(!AM zL-(UyCpMWQb2r1MOi#CBALJzFm?MArD<`PcL(nf9q!*Cdj^LR{dN#k5oU-8zk`q(OjjpBE zv-zduyWroEd=(|XLTQnn%`YXlZ+(d5=9ia|^lW|!sZUKd3rKy!vu8ju=9iG#>0EMg zPw<+LXC@fMm=sA?>rj-3QV> z?f3y88S_g>bNTK}K$?q(H3X6|zm)u`e0Ly?@3)r%$(UbC8k6vTn!ac90?C+PO2*ZC zV$N@qWsgjaE$Ok-wS|zzp7u$R+>uFk`7F}2`6Z-w{cA@cwaXvm_C}G6`6Z;jG^{F+ z`hs5gtdK4`qgF4OKQod=qP_jK$ZgE7uq)$RI^lIFS`d z#x|3jwqFwBjJN%Kp&OE(Z8IgOw_F3)X`7lzHa(PD#x_%O{Tg|`LCqoC+S0PHph(6x z6ViWpCfWT`r2p^l#skUNWbAJj6onUeFT4?}Y13EYD*wwaRawO2^4{Co;>GPaqJzEhsc&a<*vzLQ$xyNt2T zgtYCdQWJ98w%@|HJ!6{*X|9ZxhFjfFbMdxcKrLgN32D#t+f^X#X_w$Wfw9em)H83C zrcmY7)76zNV>SC2+e}DX`Zs?7X-n&aYdm9{32AIH2LWlUySxK(GPaqJW)i=fK$`K- zWdV}0&4e`GCzf9hP}ga^T88^R#x@gD&z|ZRAoa|}a6iP@Wt0bSxUBSCmQiFWUb{nFsElLOGs_gxjsN@i%Ntb>DkIsGCEab zB>T;kaH{oeWhuG->UAXN7LdJ0E2n2GOGtgxqhvtp{ifgs ziLtVT)D8}j+jDhSw7;UUsKHoSLK@E-Bm&a7GV=##JzSXn|EA13Dk(ztsU)iPF=l7DABh2(+{UqCJM3t@!R&V4%vq_*!SF5Qfk zC8R#<=~y83k+pFP$yixR=FcsUrCDo2&c5eCEn{UV>C+=0klKqbSW@%;%iVgjr#Of7 z8rKs+PR7d8oWVzzK~6oe-4-AjD@(~V3xw&6dCGn~X$~Y~WhvRV8D6LU%P`qVQ?rj8 z>ZUe?lCy&4E6N(%k+L`?R+fU}luTY>1dzt(EV93;Mu@Spgf#xnfzPM0@GD*?V`T|x)}G-HInA=&WEVu` zWUMSDADkSGDJ0verBvJ zCCiN(CCCDb%&%VnwTzV|q^;_k`k>ZUCO$r&%rAsda>5;avTcKF)P$Ujm8Im03$hre zW`b?Xaa=VSD@#cKK_6uIPLci{D~W?D*6d@fEFtX~dtpv{!o~PTVyrA7^>Z7=uv$6w zy}u`eoQ##FWXs?%Bx`Pw=i1b>!dO{KPC743!Rk8o!MU~p$yixRE=;E(IrgUP`>C9a zl_jL_*h-HD*-XwM-^g2yfn=;KA#IzNWr3Wwg>e@H$yixJnsc|JcQ8j@ItwIYWeI6d zb}9qr{P+gx2ib`p%NGwzTWp>NG%*Z3XYP0m|I1`YW!3P{E+Q?vi>enTL&SMSOK$+%@g z>O12d0#g4wnS47awTxS)Wb~7kNRBA{5lPQ(nULDe&O?FJu4dbXq-VEG$&FdxA-OhV z4J19gWkTxdKF0-8PxUYYNzZPXklN)PqL^#l741TTRY-bv%Y@W77PkSZubEaJNX9J_ zQhW9x36R?3_)n4aeCnByX2#JEfHc!KD*z>lBnFak%aqLXLzbT{GDi`4?o`cN#w}B_+A?{{$0EaW zGy;-w%aqI&En65CnXR+jVW^ypTPCD&4WDbl#Iwkncd8^3ze{jw^cNIk(X@^rV# z$+%^bQ$P5Z1Id5V1S0AA)H5X;bQ5o*n4EP!%F@2d$+%@o+VVsqndju+NP2Jlj$SYK z)Yf&5NGx|!DktNXY0gf02P4^T;7}kLw@k@msVX5^s1`n-j9aGU_#o+AEw#}-Ye7!N zEmQKJ)v{7(k-MhKV!66b#w}CQUk^mmx3xS`ZjsKfJ5z^FNbN7bqd;nFBV=h`k&Ig= zq`5T9Lm*~`ZfTPam$1>hm^y+Vn&X^ zXN7Uggmk1S{tR+DlI@dwYBfTPTc)H|L+-}a{dD9zlK@D@Efdnra@7w=GgGChNP2e5 zl&tA{0LjV?aP4EEmN}0FFBAb zzPKQgp4~Db1G62KO?8zsFw@Wf0Li#zLI!+GIS|Nz&-Z0*TwN#QmI>+ie7j{cv+%h3;UHAS3Ic*&`$wM!SWIQh=H!hcrLUo|p18H{@EDa>%c?qe1OZ*3r`o|BllCMUH@w}8A zwa58(7@qJaAQ{g~$-TSQVa}Z=a2;YiFC|Zv-G}6{o|_;i<9P|`yQZ5dNU=K>o_AFW zTs0ZbOGw+*ak8pz&4f#faNaVWmyqVkpUwhl9_}Vxq#9es^Agft^lEM(?LjrJ0m*n? zLh6OLL;$H5SRyN;DktN4328Gk#R1Z$?LoDS=Ov_Z`D_9pjdPoShn$S(C8Vi!z}3X` ztAP7k#`97#ed1uqX{OpV0CF;(mymk#UuyxW7p{vV#CTpxrp*+9WXf{cAm{(3eOo=W zvIwP|Y-EM3-5^vf+P9H^%9pqzgL-6}!wfF91@zd0{7zj3FhYzV`Y( zAoZoiWPx7gWDF@KhjbUEN=vQY_bqNd<9jxwgw)QjkcQOq`p1{c2Dg>dvmvGA@<3Fp z%}+iSNzaCqkb05{Wg({?=kr!1JsVO&YNs>r22wj%y%dt34Jje@87rr8{116PT+R4cv~Rzc+5)8ZJW8Gg zRU~6biCTTfGTFYhX5WVDXOZ-5NGU0PQXk0*#c{L37*a}RPkaff=aexUv>W&xVwc+VTyu$)iR{n>SJ(mr-+wF{FevXT_6+ zPU~42zZ}PwF{G3s18F9i)E9Dk{~E3t z+HVq)CF5@dk};$-XNEC%kW5}-5|E4`rKIhxJUeKOP`0sHQezA$C4$h{kdmAM9~#Q0fFc84KEU@1V@L_<_b^C)2k2+HmiyhTf$wa_ zkW#W!H1a2DBOw8%bd@&d_NSxWxBW;v28L;3^BSXoLQ$Sn^KSUIi}tPEnE#q#>x`X zZq|^6YjvIWJn;_z$yixJ>Sm%_KG56Efk zu7YbkV`T|x=B$_)NHbjyyq}DfrDT%%1Cfkl;QN!YvV_zF-Z^&|wsE;(gcvKUo~5S$ zKelgcbZ*o-AMXnQ$v_3V|dsts|h+P6J6&J|z>2}X8JJzres_qMTX z-!5q-8)%9QntNXE-W18WWhyp}Pg5ZE~;LBPq3vTc+gl1t*YPoS`d_j9aGUh`M8t{G*KAy{Vjx zTc%{46b6z%PscgLxMfPNewho&Wd{aB&RDc>@6D25y0GrbEiDg_j9aET!%9v;vb^>T zNzZPXklH!*+YBnFcCt@8AQ`tzNb_LNGLX~UTVM*1j9aE;{hc95*6e-*NX9KwGH&}n zfi%9|T?HiLmMOVl`V1h=S?6TUSj~i3v~LT%kY#o?LJqTTA|M&JOmaG^7L>ahi>$Eb z1dxndCZt*5t~~0XNHgF!e19@-nUdYQ%6*?jw!d8iax!k2lI0eTK(fR=*``(_#JFWj z)(*qFV*Z>?e(6Gyj9aE;qf#m)Kr+sikVe+4(xI!IM#kJlfMlF2A@!Ac zoooD(2Dsib&XtnaKbMD``sH^sAt&QpDf#q+Z1*X(`h&|Ifn=O3A$iOGvZQ8C(<0&^tK$7|%<|piJXIt?9UdB;$Drsn`Ab z9!R~`tK*=S@w}7_7+3>Iy&v9B@9kUn^Th2_n?d3-iyA7Y_T%n5AQ?kS$DiD{a_)^?NKUyo4oT03l#tq+ z!>@qU9)GKgr1$pi!T!=TS=YI9K`4@*4JpZ~+uEf9QqP%Y5t5z_DIv9|`{g2G<-9vj zmekbp5{q9^K9s5gkovBv)q!LTDaon(sMo)h^JBJkNP2JI>J`62PBXW50Z7J>lAPL+ zqnUuz_Kw~RBx6VkY2V*<36S<(8RU0k)Ce(#l#u52oOyvX&sTg7Bx6V^S>$XVBm=6+ z;;PEY7*a|$>(CR)`cu$&GlrCs1$(DPQad*rax&+M32D52JReBoS^5r0dOlA~NIm-j zB=roLa8t$@Qc7MrH4Sp=XY8`*s75Fj-@ffws|1oQx@Q8CF{CtSaeFwDf#WVC>G?b{ zCFd-uhU8SgZ9p=Hl#)@8WfRs~!Fs0{41^VNY1Q` zTMovMQu1QM;YgnB(iCzshLn;eR_{kLX#GGWJsVO&YKP{@R*kiq?4F9x3S&qKX>PkF zw>gS5*PXrtIT=Gr$tu(3c}0s18Hd(~F{FevK8D@|(s)@oE#zbjDIv|N>6-y*jxB}- zBgT*t(qZc|3rI)K`c)w(V@N4kc0>~-i~O1$NXC#7($uEodTZvHg0_+|q?By=P;LaR zv2A!G4di4DDJ2Vimu+f`bR@B+J|hgPe>ZrDV-*W09;l{TC!X8&X0B z1}r!OWT4+#8<314rDUSMtC9Sv)NmjfLrO@$?@48|S(GP4`}SjwT|jzo-`a*8#+{U{ z-z^PD#>$eMw!O6ygIe46D!4sotSlu@XO>Mnbw6!K&toBlv9g5pUo>(skp6S~y#Te0 zl_jLTL=f(z?1jE|0+O+^gfvo~+X6X_gr9tXWUMS9^|{Tz0jW>!Ii*0I+}UQUX8O~%R+(s$P}xhAxdbI5l~9^7j(R+f;q7b$K-PTQTa4p7Tj zSwfn(Kg(l5){}ijKLI3TWeI7oct+Z1McT`2uYhC>DIxXnGSciTQZIY7H;{}WC8Vun z>o6c~LH`B=$rw^X8gJ7|Td8syPt2k~GKQ3pX2~>Xfiw%|od6_bNGWN*hpxlSRqHm8 zj3FhYUgZqlPd%hUb08T*`ci)0=6{>8Vz26RQ+$WEiTF=3lVko#DIR+tpD!{0mv|fa z`1J5`|D(pL2`kp>|N0W`_eZK^ky6IcYn{$7#;BwE??vlbJB!$KVF#pXT0nrEBp5j( z;TdruKg7yFe?2+A^=BoV$s&(9@(8B0V&-2VM1POB~l^lUlbD-%gKPRWZ%lrQ(uRvXaS=z0|*>#wGjiR)s{+Hj>W1bGB@R z{t(lBfKNuu$b6S8N5;K7fy|Nqa!(-RJ@iIaTlMvgP%OVg?Ne>J?@c7VHbO%>Up)?F zNV~U{fn=%yqzn?8yniT=p^3gcL(+3KfRG`_&WoLer8eZykRM2Tt_Dyt{kB6$rb&7L zNzc^)LIz))BW9|VGx*%}gGhR=22iqY>+?v~PK9Gj{ya2uKSS~yTn}VO&Wvj?r}w+^ zvPC^4pQfGwBvTC_YC|#viZ@Zr*rskHOWkVrd2dfwSQ-%xWQFq06gQw<G35P+n3Jgn5Hd9Vs3bs!roJlo@9M5F)c`_<^xc&L z$dF!na5Z6mi;I$3*OWyv<5B6VR8FQEK*;c#VIP1DuhLrj6h$)C076!Hl;jGK74BBY zImA>0D7m&lJ|vfXD-1cAY5*a_>y5(qXZSC#$0F(ZFgGQSwbnG>@pNcrW!!W z)5+^2d2C5?Aem|aAuBBFc@D@53zs%T((AX2!wb9?2aaRZn$fr>Fx3E>^TM0}AS;}{ zFYEB?elpbnLWajHmlVk#&!sm~BvTC_WQC>OdLg+mzC5yGk)Epogsk)=%S|9F-7EeX zNTwP<$jl!f{|0-o%pc;KK=$%n`zK^*j+2ccXK1#|IOCZ*0wGJMJ1uIcadV2zn@{O9 z^J+s*rj9_!5;?c(LanIc`}mZ|{`W;7nPcFDEY<6+a0J#&DAhCB1|+@yAa$8-1x0Pq zBFk(k(+fzZ0zq?rOgIwAQty+>x~;mOOa+3FWd|n3u`S#0%t9cU3IruvY@81{%Qg;{ ztzwmvsX!1ibnG{L+lP*_hS3*w*zOAtzITAY}QPwS?ETW#%rz5AaDY|NoXNQ_hKyMG`#DAZEN+QG9%g#7}V+ay~2KjSOFK zNO<~~wQo+f??5tD50bOgmZA3rsoY(uzbE5f(|ZHIur0}TA+(iLTi7>STFCi4lQ*^H z%N52MU%uqE3_voK7NWLjcwRp-Le*u?qG7f=K)%@FEoaE!di!96LI!L?cg56bNY0X{ z3kHjvVtjpkN}deGef&%7-}#UGS+-~oadghQD`gA(RSMKH)g6+v!mR5dKvtO6Rh%EU zo@}PNL&?c2gwM8eRv0&FDUeKchmwcqi~4j7xj#=4Aerh8Awxclm213m=pk>8p%-MT zJCqEs)Dg+xes3YC_u~d3uEmhZZQF~8+tfwgrpOKB8$&4X#|^Ttsv?V1EhU+KUXGSX zdM;{^vQ~~b+lBRsA>UQa1te3{AY{G@KI-q8k7tPdVo1glr4!lJr^|yY2*o!C4H6C$oMfX zkW5j7kb3>H&4JXbUz&%c_ahF&l8yt?9MC5kNT#SkbLQ((6G%PtzkPsYiW-FU&yY6= zNdM&H0)b?T8iaI|?lBEWM$9mqGDQtS8u|Ck z1=6s88IGjqGxvnl|9LSRNPT-LXKA8<#}_IkCroRHFVDx=d3g1fnB15jO6P{@*t5~hnS)UA&sEg zm4Gz-Q>F)!DQXZ>pWNsXkoxGA^^o*>#6i!y7}o?n^ZU#|GDQuN(~+%**veRU#gX<3 z&LO6#K}d6}Y$wFb__f)0Lr$isLCIg%ZbPz4yj4IlMGZ=RD{vIaxAFc&(sNORkd8lY z%NB-uJ{^%8-T=uIH7GfM<76bKJ;3raQ`8`&ImkB=kY?XOryyr6jyUYkbP36Ar$zzE z6g6nh>8pkyIj&_PAeo{DC6~<;+t!%-IaB@B7d7LVq6Q_`Wp%E7OUL3CG8W%ZpH$}) zUXv+Jkev3^iEbj9Hl<fvwBU2{@k||9P(&(CQ43I{v0=R-Pr3pgn z-*d}vqbjxfo97!LCsUdrq*0`mJXWDd!;u=_*-UAIlI8LbL$YXZG-^y~f{=b`>IDk2 zy_!QwMnr;IrZhoFd+^0skkekWH|`Ud(gYzL;T=W;=_u2(KICM|1ccN&<#Y&AlqbYF z|JK*!kx#WIFl7Ql+7};N1v%}rvt$R7G5dtn=g!^&r1)F3xbI^uJ0We+TOxt94M|=Y zax%u7kY>#^IET!NMfU*77;j3>oBb4Wnp3tm0+KP_l>8%|D8Iz4w|$y71d=h{gwz-Q z`7@CE^pewnWQ;c@`~QN^r{4XqvOqG%`{nyftb^?FQ;Vahnq;2>op8XuZImnUZ4C4$dKpNQP8DCDwil-`wb<4WWibq>M!<^S8|6k?mit*n0Bk40-y-g&;_;Q*v^xZ`y z%N2hJIT>G0$^31_A+H#<`bYUaW_4E>UrxyIa|QnaGW^7~iAZ|(<%A3!->x)}q0xQR z-c(*EsC6iG);3j>lsUa0HVB>GeJYZZ`+bC* zj4vl@Lr=AnEi5bNv6lCMWPCX#kDix@fh_XCgOxxszMPWFBZNzdAs0PS6&iV+j4vl- zSdwk&fDDVjVld=nd^sh{9>bM7ti<6FKr+6ZkfBqLm4}?66Xz;7Ce?aBY!F&`fv91{ zTxZzoVvv*ZRyUrxyI&rMDO8UF6gcOV&G zPRNSmHj7Pxb)6MQJ-UdbXJ1apO7ZgSM)F58wFj4D%lL9iCZ8&5J66t0iS@rAC*#Wr z8UE^>sQg=G__IILAnEn6LB%e9i-4@ye$Ejf8DCCvR!sLGH4$V;OSPJL$Nq)aB^m0ku#Mf zOB^q~6LK<+p5`>VwgI)JwJhRRT5lxA(G#-l@Dlj8FZ+A)*FZ9ko{*(?`^CqcJGQA> zot#6AqbFp!6(KKyEVp>4s!2+carBfNTJAZLQ4be`TE@{6GHgxdvp|NeXswP$$efI$ zr(~VBm@};Ac$^80qo-u=0dX;Bj|pu+E#v4ZIb#RDk;0~An++u6=m}YT(qZ9r;|f|d z{>Rtf4o2whE7tyjI35Lrv5;3mKu6M`f|}r z^zkV*xZGh->;1?;xu~z@AZNLL^FIN}R4z!)@LRtG0~vnxXLONF<${uzF6Tn>-@dgW zCsVl~WW_kU#WlvfKfeuH1|(CtAY@p!rY4YK85frZlBrw}GPKn(c_7=`Yc}hEdlRN| zLH<5?u=6Vo-Q@b?BdRW<9E$|GnGF;-G~2N&~5(m25InsrZWOA!6mTQO z9duu$-azn-Zg_&9WI?a995DTQwsRn!{9HZ3GrQt?eZR(t=YNH3067sr@T_jQ5xN@j zxMQbccIUAGf@gQbM{Fs9c+2K55qH)g2%ggo|G8E;;#zP8#68})+^)FcXuJk+BSFRh zz)3ZNWY6o0>#e(223#-IQ^U4q~?S6naHzXjlW z;yrbj8iZ z1BDZ}aIKM}~{l&C0GfPV_6_q<%s0BCfbmHvUJzjZD@FUODSX5rg2x zTygzWkMn@*EB020?4*)G@DgtLyxNHo?-hm11u16`yp$_$`1J0H_!afL&gvabY8nJD zPYN3ZFXx7DIU|nQ#*F;PkL3U-)eV9NyW&Qo8P^cMT?h+Lq{KmR zc`|W;4|z=(W&RQF*2->VSU(1`lR5{%E4bqN{7m@3>X9}55O*FzAb3SLJg}E=aWU7P zxatAGNyUTUm0fX%e-2S}vv5b;I7I;`WeZ8v<) zsCtMGPmV5_)I$hf*A+KM)WWxn*=qCOkewV>Ab34D{LDk)ykdrK*?X+GlgbFe8@S<1 zzu!bWvUoShPRb($Z|H_^`lAWrqmtwPnbb%K-q;P_)m9`Z|aH% z&cBxc@W9T~)E8#tQc0>M1aIz&XE}9NG)SziXqL?t>%z4&B@^k-XaQ{|0?}p$0 zf`F4+2f_Qf;(pn>o)Ng1I^y>oKKZJ~wVdvx;6d<6SKMB`R0YUxx0~URom4#t9_5NV z>J%yfxI=HF0Zz&g1RvyzYdxPF5_ozkUaPl3or;m-NiBllLtJtD`rl<)K|M0|(R1+H zNkM|(zq{i4s*Cvm*N4si3gSs^f#Abjaog1WSpm0oZG|`~6A=7QSKMs8;RE1i(dB(0 zJE;{Ae54z`rq~a}2Y+3pYhV1&E^Qr(& zN(TfV=Z61TM)b_B8>ct_WhCIFen9XE7XH7-A3BLCb2D~-&ONR3_(Pu_Ej=B9Ajy(j z$%LYaEM0w~qL0e?XjLf&#QQ8aW8LL!jr?Rb6(2nJm7h9)>Vcl65WaT6bIZYz(n-Op zT}Fx^Qoc{ng^G50>B7nkAYVF&`Ed$Sc8DXt9vG2L>acR8lvu&CBmV&%1&fwz1Ug6v zHyxH0Bs%o1<*I-Vy>yQ$po7#ehz{wJBZS|JiazNa4}E22@#I?Lq0i}F6LgReZaOSa zNpu(k(ux7K#>0qT>l^BDej$SB$S-w>V|P)}r=2>C&X4>+htaBg80v6_aMNL`+e~%T zNID2~=>M*}g*u$aIEaoQsUwfnahB*PpY<5(D7s$s60G?_iZX6GESF1k=nLB2LLL5J z)Hf03{2-+nqC=i2jmRf;{Oi=APg*1DmofKc)I@QvBu0nlb0un?T6UT0=$thL=+Hiw zS%c%@tnm;X@|0iuYoI-DWg#>4X6RL9ARvW%;q7rnu`1gOJV zEFwCJNgd*uii*BObnNXdo|~BQ*!s&>)Zq-_ro%GuRL6MZ0_w<4axaI%2z~3DXGJd zI<7f&7%c*}fexcVbMZJ?^MizN(_xhqhz@;qPFYT|?n^9A@OM2C5OqTF>W9cJ@gS>e8rf*R3LPU;Yar>N*#P95f{ zhM7Qzd7zOv!DWpH3E`&0Dsm7Vdf(E$L5J@1UhP5Uc#z5*(IJ0iDx!eYamT4c@7QW1 z=+ImC>H#`P2sa&8wS?&KuQN{`OjYAyfBVKc9wStu83(?`2I7=2jlnzJ6l&W5)#>07}iRh3;+=#+bht&;N?>WaG z6Z61$I3kNy1s$Z^=%&M}-w++97hxM292$oW-bPW)=~|(m|@1L`P+*L$pDnqMtbLizDS-SrAe8#gX8A zbv`$a1m`I!gAyHL%m+q@@fzF%3{(nS~`qnJ#jpo^;DumT6J)l`j#zWwQG&_P1D zjYn0t{m1Z)J3)t$vWhw=B%c>j;Uzk1Ngd^-jyKNnF#6g>SI)XGMwblBPzUo3H2Jwz zbtB_pWSV{tbm;RNe}M5IrDCE(_9-Jmq>gt)N0NI7QAgZimq7;!;Wi#t`Htw&AFdOv z)R_CyIk`IeDaV7d>$Hj0YY1*-hd#Xw452!cB)&2P8U-@ZiR% z-xB3SA0k|)u z3Qlx1kUA99(iM2GQ9*Jr5XQm)6S!}@nz-gAwmj%ree z>O5F}&Il`r?|q}xc^!2)L%8X%YNb@iux7G#t;WMhb}$NbkODs$kET*b4WVO995O%p zysv)d=gp^w99WkYkZVM{}t|7`CV}KRI>im;0Oo z9r~$3+fawI+2E$bs@_r^y&@t&hxViPS{M(~av(b7S+lJRN4sINxL~cP%_?pI z9VCRC4yz1IbU3=M6o*x;@i0Hc6G5!^E$Lkl9dfuL>PQ_4ojM#XLi>OYM}wbFfDRJE zO@~!araChDNK>fpi#aKe*z;LBNE3wUXe)I@NF9lZj(8z|gAViaHZhH@`9VUs>1gTt zelh>LBimq>j(~kLK?muk5FPEMj`~tZQl}1c(ctr_V|xA#po4^P(_xjl>3Gy?HXU`G zTO)#4<3ZXoL`O%d<5#I8xl@NDr1g8y;VAw?Y;mpeAR*jzv~?X1$F&!YK!>C0G_g6b zbddfI(a~Az5QUbgF)4|TQ=Mv~jsq7Sf({bGO@~#tr{nSIoh-zu`{L-o{ZG(A8bw4$ zSE-|k)RCI#csjf$>bTQ)7U&=$+;ntw9S`$Rn#rKUY`D{@!+8vs=n%;VMl_Q;(mHjR zJ4>Vh9pZJvYD{{k4oAv@a!HQa zCl^ly<3U2W>9AT7M2GpgyEMtx^U^)tQP4qpU_?hRsiT$DVSO*k+9y8?jxaqKZ8&t=SII@Uh=@@kGFz6u7G@_%A)X_%j$m|>s^Tq5C)bYT;b&P~?(_uA9 zhz>`haY<1}bc-LT!+Cs}=;$YPw39lr5*?p&=0qJY&CxI(q_O9w!|JvW9f8lXpx+N{ zeMD@wt>>1s_lS;2siT9`k=>~y@cR3?pd;{nZ$HpMLb&O$+BQ_j;OBKnY> zFVRu$k9Vje>d(X1 z=^!E8bXYwyqQm}=?-I~qZ{BYl=pe0CqGP1gAzlqpWBi>u>^qv?1|9aljvoXaB!rs| ztJy|$7<&%j{?rKXC7wxZJV=k0=n!kez=*z5hwjv2Z2Tf$*=jvCR^?m*I!FjN9ah(l z>Zmu!Sx>$+{4VGq&0eBojMULz>M)6pu*0&HW9cXncn@@t5N`i8<3dMU+2HbhbwlheEFGkeO>~HB z9T+iK>Iib`@C(@>{fin>zcS79fDRJEO^4OlB;#QpHLn8%vFCgw4T^ehNkg3Im?Cuy zl{yMJb=U{iY$ige`C;#!ReWrX2MOV(!)lQd9ggMwH-ipG?!VWA4$@gCI;Ke-;sp{l zrifFAV{&`hB33#aqmu3h9VCRC4y)HnbZ85@{~>~iulb1M^i zV~RO-XtR>s7a@eF6CtKV%>^AKgqw~@uJgnG@q2w35BtzwVv}p#7t-q|I^@R@BczTJ zP965gZ>Pa{*l!*ZuVd@JkPvP?~`qGOKKF-qzv<!5>#_#YjFJk?x$mm^LOc}H!>ot-^~yzMI9T$(~wUeq9(#*XwLo}7Ik;ulEqW2N|V zP6_7p#sgpw%`vmYgJ|7M5`qzL&hK9X#GA9*E%rjXi~mweo=3IB_uhaz407^i#l(xw5>G;K;@_u}JpeWG=IfMAypZnVujkBx;v4rV3nNd?eGu{D z6+19uq7)xW#2-KX3dQg5D7LnicoKpWf8km*ia(oYwinV(y#CQ=Fo@R&hDy_=)@E|* zgos}z#ZQ*vD>%jLkGG};@%rt%*FXXZ!HCyif0MgYHS+q4s;|9}?&42IHbC+9{*h0l z5>L*&5b-Od_^DESMIwH03;B~OYC+dGw-kF9Yvf4?PW+L+^6hGgKd=Bxdkh&P-a2t3 zOR44De(7^!CAn?rC|7{UsM??5YPhp7&Wi{--L@={L7U@50Lh(RagutGS(Sj)v$ggG zk~?og$R8pl{3)6H)*l>@%Rl+H4L5M7a*6j=%palISal=jwC0o?8;;D^MK%u92R`*;c<^%ASEBFUU|AY`_ncu4wWj*Fz#Klrcf z{17}7$*Uz21Ie8xAUPdbsv((v@OC7b{=btne=R*6NV9B|d|1@8#C7bQr1tr1T_CmV zMj{}&9=nsYKOH1@x$1t}&-~Z`B-a&pl8)5bh5>25Z7u8-{`&9(z%Wl!ZatJTgA zB-eQ+_M#&;(En|Y;_-JpIOZBs7ijBC!EgJ+5&fR&T$QaW?$ zZ9cuhoK?TKLUNb45z>z({EFm;A+LbsI)NnT$_=@ZoS>})lIz_Ovi~Hp?8l5yjnV?mK9_3Xb}%<@Q0Tb(EPVYk?{!*ROEqbo87dO`t{A zkADhCuEXFY&4?bdW@C*|@i}rssd92X0YXlz`UuGZ2Zf2UNUn-c$o7Y-BUx?J9U!^7 zJ0bfm-h*V5&BcJ^D&>Uy{bpPw+m;GP(pes7)}g?r_LdS>uLC zK3}&1NUjn{$h4p1Ao*cH9U!^dos;x^8vmOh+sHfaduBxzAh~LrleA}DyBu=befs_m zBv&7El8#K@=K^Vdsq`C=Tt&-CYSn9{5~T2cq6Ss;G`bG12IVB}ku7ESUELLXqk{(I z=e`H(3j0ENT+cwjBp6^W#wedG$Hl#rnIM)+C!g(g^D3Pn`uHi5>DF! zr1|BTs47_`W2OnI&s!jC&{ocgQ-XnH%rqhWd-T5uq<@F$qFf)7(|Jmrxu1?*HEsau zSeGj$kc^ooIUPABOY^1FI#T{t2}s6FQ?k;&g-DiczYj>pOj9yr;wDHYDp>lT)Ahumq6$_%ug>WXv?l>6m#U50H*AJ^X=W%rqrKzHLRa$glZ;WXv=n z%^PuV18JUZm>o#QOcT=4udQs6s)yE$7h8x)0E6xemmq0 zNdKY&>n*kJO~}C6rDcgj zsSTXm`5feA%rqfw@fS<0D2k@SOn>Vyy71Q6GG>~P_GbG_Lr#00IPsA5Y^EvMW2G$3 zDYf>t7ep(>%E_2%N_Oqt%t>YuHryf^GfhaXewXY(YE=h_l9fd=W}1-pTV0m`X}>i5 zF_4UzCZzGW&@v#68({%JGG>~RLkBzenthIs1d=h+l>GaaY-p&lHI{$<7f8lTQ*!%` zTu81@k1I7}rU~iSqRxInc2#re*XT)*lQGkTw6AQ`0dm?G>}mldW2On|IR6+)$KgVF zKN&MkNNuS(XV8 zmI%fK6H-4F{Q^k+;MK-JGA5Xi#-uNDd#-XCBU?R0(z6MsWS2McC2o-|QU)RE*#r|( z-`t@;kouapLy+{^QPzh{7x}E5;)}|2ko0VVY0f(x$0K>AE^h2&@pl{-YvM7F$vHd0 zdd%tB1e2V`&`q+2WsOk3t60=vOfVt!ypFt znnR2UCZrx+djpXAADM7@VN5U~{o8z)3#5P36?rkIXA?|F$BJUokg5@K%-@EaY{mpr zGV$KGNXDu34RSIjn39D$wm{NYf=f4Jf+^`^3GcUh=QDPL%Y`CAtx^Pc_=Bx8a} zPW|g1Tod%Sh5I4t*#r~PXk7na%vpQKJs=qqOvzI9n<80AO9&)mf+?A1dMhN8bcqI% zF~O8euy;73PQS{tBGG?uj1tV)sm=LK0$(Uf0Q~!491d#f>PFIoi z+ELa=g~_j)sGR!XSDAohOfbpm_;a8vsaenGzz#TX852xN#}2v4wn*O@Hy|ftf(dCJ zdy8)eb5FIufn-cDAsuZu?Z%vqzSKw3vk9i;yH2u*Y^i;cCk#l&1QRkKRpHJ+1|%FJ z&YoK9En|WSX<|~l)u#&hYaNi+vuA25%#bx(M%^`c^d*dM|V`XX17Pn-<$RZmywE@Xk zSwd=I53>QOl`OUmNXE(%(*Ez6mO$E%r#T5EV`T|xT)ZIGH%qN?qGAak87oW4?l)&6 z*``egAQ>x5$%P&Lker!FHmp=*iLtVjT)8k2k_(d#1(LC{g!HSIS??Q)NXMpt!9X%rmXO-U&6x$6RjSoi_xuw`#>x^h z@3|Du1e8FMc~7M14J2b_3F)7_7kUT(c!jzF$yixJ8u7zk!*%N4GE4=Mv9g4;J(%|h zNZa*|dw^uDEFsOEn{EMVZYqkUL&nMy(vf;(D3Fdskz*kzV`T|xz71Uqr1|7vVIUbR zOGqPS<4Hgo@v@>JWvuK=8M*ZTxucw;X{Q$5I=5}%Xx*)8mo{yicXwDF<$S@NJGE-t z`o9~?Kkaiaf<~UG`a*UuIhl;O@4Ki^JhYBu{(OQH9MJ8%9OK>+9MGv(J8?bnD#fmK zy!6@tAPdg_HW^69H51css`c!e38|kn9^Ah{^9+?A^lVq7yNha2LJA9J09Z(RYBam|!$IzoCvbytjE z4_5$^am|$6ba*q8>srdXpHdr(*73tTzDVAU;|C<;nrY7Ph4_>i!O_w+tDLcD9bc%Y zLr(GIYSO7Il5x!>r{muh(i2+q_EdtLKr*hGl98qH?cnG&=L3+8Yo??&xOORYYZ90;kT{9sALKotC8&EnsKG}?GrsS__<3i4WI#u&QPR2D8(qYtG z2&BWlNmdNib;hD~9CfNTl6@wLQ^pp_xMrHO@u#Xt)~lErNX9i&vdM=)BpYl^0wm*_ zDcOGHWF%X4k~KJWov~;gSHCF_7OB~nzvBI;Kr*hG3$9>+=QFkfl5x$1v>hM2 zQsfllE51j2q^H<0T57%jtwdXagh>TiQjr14YXKRHrt`eVGvPYzv$`BW(tFc+&Xo`( zXPz4dB;(Y{b=nt(7eI3E{=GmlPMwh2pPd^5sr}JrE|82Fy7VR>hyqfiN|i3XgP;^qdPkZRDN+Rl z=|zgtkq&RqKFnlH?tIC5Z>_gK&*J{(zfalw?ElQZH`8w;DL8dThTI+o6`BIj+mIV= zDWmEb+@O_IaIx>muLw?^kygevB~a7yKd=Ec1*gu*)-CrF*?28vM)my^oH{2f zm9Io(sZo(g3QnDoMynBvku;j!sfeWD)H!MXbeG8BVRev9zUZ8E=XHml;Rb8p-M_-k zHW(@eMd#V+Aho8+sJ_QXAt~5ro}$S4`~xII??=~0Qn1gQ{QcL9NE)lJ^dr){edgq< z9FUaLy*0*lqDeyfX?pdfzb$HoJ|7B?qb5U7-s(e|-t9Bf4Bb_KJdtyILn%W)RKDKr zGb4>6kERj%=5RQX-t99Z)z66@B68Qr@kDyJ&x|y-6@n6+bA{#vK1EWn&zwxPz7LY2 z7f#J2(z|_Tq*eUiXe6zyE6O7&*k?wD9yxpm$fQ?WnUl2* zi^#xhV~F%_pE;SfG`tqIrg`o)E$ovoIvar*AO+(*L#cN{$wv29u+L1>IDcvsky|V7 zCo=h>bLX>=GRxj`aA{u%*lS8 z>4`TQRj-GnV4pepVdFs341bR_1^dj&rH5-0Idr%iH3j?3$#V@l5xH@}0VDwzptTHjSjjig|oIr(XRFlxHDR*h=( zE)(oCCkxE}6iM^e+GVII*k?{Ii-R4kj^?m|q$&M~Yr-4Jj`=eZNjvL~fv73iXQpY_ zii5q(TGKZEUWKG!pBZTt9WFjM8HbG6nK6A2pv|1*=)hyY)Dv`+-oy#wyCqBH;H}u>J_L*sh9mq(l zny`hRWkF5BJ~J{X)c;4-Teav__Bs8bD@Y0^n32I#UKGLe4DQ;B($6Ur`BtzPK0((OBd@Gn>Mtc0FH%Bt~uZ^3K6ihH9 z&0Jvvku)CFfbCvdQ!v4dG*)h;8O#{7g3|1Q3FhSWG($*p=l;p4DVShR{*{;3V8-sH zl%x_&Fe8hN$n~+(><-URv5)_zb)R5@85w-4kqdhpytV+%w}J^~r0rYq43gHxfoJeM z1ryB3kgF|VD}dS}q)hOhQk1+AOfVw@)7)06eIHfSSLNz!zAaEwFu{!U)U2@_EldXDVShJ8Vw%RMbe1POoc+h1ncy4mH&6S`kf@@ z>hdi=>Ddxqt%7&ff=3eGy+%Ft$oZt|4Ns8~`{_yjFJ9`@Np^P+$T^{m0@WZ@b?TX8 zTdGUs+vvY_YJX?vUxHZwWn;Q1rmtq^efVLD#rkjU3oH138eDO84v2m9UopN#jHMQ$ z9!v$NqRFURad1C0DY$w@8lRL<L&&fV{eKSPi`*|*sM*ddd0=1^#>KW;IP@o2qp1%W|A}P3fM%vYjswAb; zTf6+^u}BK8o{`p113pC3`rZdhgu1tatLNnTi?xaTz1t%s1y|3>WyRo~>s;G;2Vs4x zHHEF@oa~S@oXBQZh7g&2QG8HTJd#Gw7+6DTO~KVOO*8uCA|y>?%L5|4yLv_%yDC*f z(%9?|#VD;QxOz^GEA@=XukO<*6aMHCC!ZF8e1N{T#;p%wWvev>SI@~~V`-Ebd&a`| zq%LWyYclDeMYN=M3Z?A2^5Lnsj^Aub?Bkib&?~$}aYUDvuaP^F|4*e8|q_s1K z=6J!?bMlJ-@aE1a>ssSAY6`BNk+%Dtp+vs^_GcoKFN)7u11lk|X-|lQT#LR!f~)76 zO9IrY_ANR01Ain1SIT^}Z$-`Usmt~vDY$x0 z=H3NPMc>cx>{-B(>D~&io{_;1)15>z_~z#wkrcc+Cx74Fn8+i=AnT?z1#iyDYc9y| z=-vkZdE^fy1#iyCkZtdQH`ipy#!ZWm6udbjJ>|N!Lef+6T7D!2Z_Y^bv!!YU?r54F zH(W>Z<7*@ZZ_Y@&#i8p++6`T>!CyZ^f;VSmXpw?9 z6MwRD_sl7cH`q>-}$%>2%I2E^0aRdA(@^!)VzYId6RTv`g5eLeOB zSIS7cRO3NN+L75mKvHm}jI`!%x`d=PaS-fu(3*lP<>cX#9f{miJO)X@m2z^%)a^u0 zsHtwEqbayjPB!>=3XwI379!HSD`lk7WlsepjW*GZkrZ4hBh8}6@*!#Fzk8WT@2-@Q z#_E%>?r@%jWfgiNDY#Nj_U}8B$eyF=i5FZcC$E;+M&#M6^-)uBrJUTh3$o8nZ`XfA zYjnYta&k_cc|=YL*ovBhE9K1P#8%weU9S~(&N zNx_wJvST)Smsu@#ku!l*X zr#-=U1(Jd*Wu(=1n+Hj&>6i4j7q)71az{1D6*$*+V-Ct63a*rsvnPxoa`OB1BnYmQ zlMB*o0C^|(s>4-Jy;7#!OwE?;8Ms3>+=lWTa+@a zf}iE&A9?B#dGrN&Xu;1iGGtwBaU?@l?0JE`75pqCJ#igvBt4N=yC5m}Sw@`6#OhBJ$YP>P}7s;bpVorpJk+7>+E?X?Mf{tAu0G-Muz4*3s1ay zD=9ylrP*jC1wYHk!04hg6_f$Uz_3k}sS^AwBR$`=&WXMCe61>sZ{KBtpJk*mauLn( z#-I^rkQDqZBZC{S9gUj7_136X;nKo5lO3D9m;VDewLGq3w}=IoF}VMQ}DB# z{AyXkeA};YKO_Y|%SdC+odl;dWf|4N1V78k_J9A1y)~LIrhJp&XYc*DK&?*H=c0NL zVCw9z{@?k(Oe^4jU%WkP3jh1LPrf7t>RK&3e)4%>-Oqb>R$nrZeh~W}T!a?dJ1L*6 zRQ3;q)ybFozjyBLrvD`+RqFnyA3&-~_p<+yT-Q`wKQ(tsy3Fzy&l0>2$>RRMypN<{ z(HUuc-9_m+n#SO}a9gydV9^?+OJQ=L#8Dpme7-Q&2eW6%3PtCXG+7!h*;ly>AC+y|q?Whh)1Zt?wo_ zKvJ;ij5OYl?SiCHdNeEY0znkEH{&Pcnv?<6Gcwkx2#7gN@Vhd<89||61i@dg`{B7x#qrapAxyX z`B@|di_S=E-29_RS|jV0ATs&F@uM~gSLk-|AtVKh&NUDHRDv{jh7Chfu;`pT)~qOz z`_i;WQn2Wp{B!>oL>}`WPh|3imex^ZAOM1$x$82ko`+( z1`~`nBRzHYPe#&Hz4u?JDHv@=niE~LdNW7PdV-{2v^i;39E+M}A!8+yg3;z=v#A4! zth?wRBn6|*$;P+;CbG_$*GLLRn~}wCpM9n^ENdcZtV}~Qm|(OS89XqQu5EDdwcD__g3)HA)$blT z9qY47zauFaZBCxdQw4i#9m)+!M*T(-j5a4%Z^%#Nk}x_?!DutmIJg$lu+F;gmj)YA zQ!v_`oD|ua$geMdg`{A#S>gEYhHC&i==FCdc$$i*sS7?&8{w#@Qx{=8!Ig5$|7ERc zB#qA>Kx#u@H^G%M(kyi;6_RH0rfG@v?n*hCD>ckcy0>PgQM6)7{!7Y6^OIwcH0r;h z@t%UhaY$4Ykp^t`efAnAD=0fl3Io`Nf7q}_a$8%ewFOqvl>P&nRJ>j;w8nqT2-g<4Z^rA*WM zyZxU;Ud{OkNx_wJa>FHtr$Y?I|YT~9t%qo*`-fA()8|1nWiy5RaGR7VT*bo zDY#NbnpLvE%FG#`CI1{lq<2@!NaNU+`A8c3tly9nTq!4KZGhE-)-)!ypGu^6SIS7! zcY7ZqUyYoNq~J;!X0E z($X^&{@r$(`vh0YG{cLohp(pUYa3o*BW02WSIS6Fs>bAFe-L@|=6ci=Tqz?%_SS?vjP7m7&Vo6R6kI7IJs%WJhoq-s$>B%} zu9T7H;F9-|G<$c0Et>kd6(kQ7`gC#%kaO|1Gn&GMz!A}P31PF71x z>jbl0`-?~lu9T6*E_TYLG*w1LxzaP`Cn71hQbu~r9`N-p-CIx4VRFKPD`lkpX;TYH zyZyoPs42KoMuvuTgB;hp(A&_WrUyyEl`=B0Qg5}w@Cg7iuTND8i$k)BohPvbe~ zxg+J&i(2kDY#NbTAjz!+res`Ckjcy zm2z@V&lY%BtgR!V%&pH;aHX7Fa5;v^8K)^rFSt@h8e6mcjHI#V8+sB1SIWtu)oK&j zZ~GDKt>8-k|K;C2LixA6{u|BGZ*oC*92cWKZ~tp~2CCkwRii2dpKE(syWtcSe;*f8 z0a7Vgfwv}>QgL0~Q&#*9F9gF=lf{EGK;lu8g3acJ|A(evA~k6&xIPm}!Dchk?7RmI zx+cxmRZbA;-DY$0{bk*VEZuY-k;xZ-M|Xl{pVQkRe^e(j`QmS*#jxYqA#1)~PNa96 z&3bEWECjWDhg@OYCDOai=H!r7uo!p9zJ4)8dbin(G#k{cgQQs_3QUK-pMuS1q%ma( zOeT)znA>fM^lq~mX&qgzD2KH6H8hbFY&Ii}cE2@4(rCJNGm?VMW@JcE8c00q-iG9R z+7wB_W;4>BQVvqHnzTnx`xi;UW;4>ddvX<$)?evzAt~5wM%sl7K0?yY`N0q*1)I%C z>z}}}NLp9ly+CC0#oxs{A=#d9kTmwy-$A5zo6X6#QKV@!K15HvV6z!%_YV0BHSJDi zA>F6XQ?S{b%raOlznr^b`)`57k|qV4%}8rgy-i43E8D~JR+ECwW~5zZol2I!)hu)P zG?CtIHYcylrIBr)Iru4(g3adSE&Yp_&J1?R8j7S~vl(eE8@?5LYb|V5i^yb)zjm&I zuy}JcGrb4qN?#$tW^>Iu3%4L?T^p4ONx^1w^3es@@vJqin`^=7XidRpGt&0&+nmVP z-_l(XY&IjqFI35gWcbM*Z%|XP*_^C8=rxh$^N&SRu-T0Cgax%g(i7AYHsI;=6l^vl zgP%|9ie&J^U-)j=c$o6X1|zookrsn*rXX1`wRgQQ@y8R=>GbS`RoYBi#D zpJ1~YX@A$MEt2-E^6#OhV6zz+`oXu5!YBs44J~t;-erQ#W@KQi6CD+l1<1fAf6`bH zY&Ii37cbVs-g-{Q|BAg8Y&Ii}Gav6j(m2{I1CoNxW@PY;9D|Vzo_HA2L;4vKY&IjU zx$l9s9|-4ZP5I^nBn6wz$*283BJyrVnl%NR&B>GJsJGUko%>Kzu-S|>{wenYHI1ty zZy+hyY)-De*M-QXcWF)#Y_`|puj^B7ca@J-#ov4{RSL#2!o_nODS$l@Tq!sFQ=b$< z(is0Gl;8Bd5?m=G)wef3LDH;UxHXa9T`4CcCqd#-+jcYb*)$@(yHZ9Pz0a&c()cU} zcEmfq_3lbJS?SjsM3xTxh)D0Ql#>e!z3{aHT>N$W&!dWHm7%1Ar? z$<0XGX(rMtNpPi%v`(c}Pl59!Sceac!rrE!`1{R?yhM(!M7}_9rA*UUI(#XT#2g^SKOmDUGm==HjDVf z7FK6A$uoZhY6`BDYreSL2}$G8tqDj9u9TCfid-Y|NSfzJ3a*rqW^lBPq*?eoC=u!L zDY#NjwyX}0-#O1lA&Za{Tqz@st;??>X{;O3i%9RTl#{hfLHW&@!KzGtjHKX78ELm% z2rDy9+Kq?)fu!I{8EL)z7qTguv>tCQh@{|3Ik~7y2$8ccEk#mrrHr(r`oKmBr?=+& z)Y}w%YxvMGSkpP=?z{o0DY#Ou`TLUUME=(FD3XFJWu!H;M=+As#F-pTh9Tr}Sb zu9T7C2fi7FWcaRYunj<;r{GFCS)vAP@X?y#(Y-GrDY#NbdJ4Qeg{0>l7dd{xl`=B; zpEMVc48ECx9EIRY8R_w>Z~{qBs=^zww}LBWWXQ>F{z!%#+eE83!Id)7(`ZnABt7+e zQubPKrHnLZKc*+%oU)Tfnczw}8FzUjYMK!%D&ctwu9TA>zfM?5wJ!1tl7cJcWS9FJ zNV82w50Zi_Wn{6()ru;z53J0K-K#?DTfvnw(o=CI^dNs+3@%9TcE&W@zuN*NhgUkzp-ANBTCuC(@Gn!yBD%1F;| z0dujpp1p0ZqNd%ojkEGyAIXU;B ziJHc=)ihQFSNi`i{^k{mzaMn%s4kK872JDpCZ8vm-T^*;G*#Ul1dm_;=eQa^9!65|*^D#}+`fsVvFq|2Bn6+% zNOQzS50d7uKent1zY}WHUk=}ha(=-;(g>}3pjX7tV5$WA$bFxPZ zaLW$ad9%7FZ+q+AXLIuRvIU4d_)|V2z58rV&h>mn(2TrgqMA@w8(^CSU!%d-4pD*7Zv8RO{XfKAUR}Is#cEN3(ZT$U$pT z@Y#$EDfLcTBtxPa5GnX5mj7GEMk9L?&PT-J2Dhj=r|m77y%{(AQS**-XmkD`c7 zzWQ6|M_5TYnpM)LLsIbBOw+V#eM4kmI+{%cpUp{EZdk`VPyFi^U!bPovpLzc`$Qzo z+V^)8>3rsYJh$ffSE-2{anVLn@Yzh$_(%WRn$z2BW8;YQ?z1^L@L*QdG`=_qxi|eJ z2tJ#U_Ke9>khI5E2mh%_!Dn;Q`X2JPy0><*X8uSDKAVx&>1i}mTSxq8rWSlQBklIv zs*`5(Y-LbW@Y#$EOFg|5kf$&mZsXGBu) z*^KmjS%lv9o?bm?ASw84Mw-9f`~x-3-4V3z6MQx&J3Lm)Y3JIS%^!iI)8{GpY);N- z-kQkqWlAF{_-sxtE}oOf*<)y|2tJ#UK}FVYSLBzl1_{bpA2JcTw}Q`Rq~{Y|!*!ma z4ok)$Dfnzg+PnADb8ByT0xnW(3O<{Wp{?fBQ@vH0JLR(*tu&And^RHkyN84;Nd2;$ z^4VRo=S5QR*^KnOzPk{wt>dZG?+Q+mN%= z*G+Jx-0^SeFcwK;Wrf#B3a*rqW}iVPku*R35i*ZjQ*fo6Y)}r~Q@XciwK3g@^zKR- zX-wPH7)fKoOmZ_B+rqMh%-78=3u9R!;iGb(BA%8BvhI;GWm2z^t>nM>U zx9z@dEwSz{s;7S>34vA`lq}lfpt+WMK%E>I>w=@ExMR27|)3`9^7bK07J3@%`?n*h?{VrsZ zo%8&78?BcGSIS6x=#2hI+WkAg-Z9-!S$qx_CA+mO%gQzLEQbu~>t3y3i zpQk74GG%ZCSIWs$>uFUJ{Hg)XCW0&FWPz-Zd2}>$e-wnh6_bxKc)X?p&cc-gEt38rgy?Wu$RE|JQh)#)U~AVQ&Rj%E;hFeGDXn=d5dwq~J;! zY5j1V-h$S`CU=n(Tqz^%w5MquZ@oG`7D>UCGSa$vcn|j0I-d#lUFq>DxKc(M&kL79 z(sW5kJVb8(_)8=OSNi|2{z||6T()z^_MgaQ*n7~SFV&#v@58)w@mg1o zsa~skk@|Z{Cl+^6AJTtpn0eo~e{2~3fVxOFOVKw<^s$n+Da zVAOv2P<>J>Fpta>uE9UIQH>w;*AG0Z>lrjKn%${Y<3A{|f;na^r!+X^40W_bg#`OXk$Q8TOs>Xjv5`~ZZMWTXn`_B{VLykg%=Vl7981e0( z8b3%P`+?JO!60?@Q;l2Om!XLjjOB|VTdB{%2x~G+ebP}#s2DSa+wjjHtH$qNXnLr| z^#&T4Mcld+F+7Pv-^dH75c*<$u==EQ>p)Q4OERgoof6? zCQ&%E`w}V`4HsrtA955DygpNaiNIGquY>%aL(^L|{%KU>8mt<(Uh;mOMB&?W;2fN* zRIEsM^+`t|At%5TVC#l&H`VyPgr=`*{C!p9`bstK05}|zSi$Udcs?mSYj#q7NGq`1 z0aMTqGxWmmH8gt6yVQTVhN;G#SvCIS5-S+%W1(8$oI`vum|+}+gd77?fT_zDo@f`0 zEhFfb5vp-#g~JJn6|6^JS4IV^+v2k7Lt265BA5bYgH+=WNeCDC z6*t^O|8Ej27{j-M$92xZ9X?cjNGq_M1yg|W>#ITxa>3~G8=@NjjBq$wHEy^7{*x0c zgp@fm4i!A-7QvI~oWm$Jocim(|Hl+y{QAQ9b;0QJgZ}tug2S<@ap!`=sfiWrjk|iF zf*o2dkNS{v4hfZcrU2vD7sjs(Mwj1k)%a(D!||$d1MELNi9(k5ucCrAqQi0ZA+5l2 zB}@UvuP=;W7mO}Hos-E1hZ9xf&ZipxnMoANPaaPS+sEmtt&zGuET@v7;0NQ^7sjs( zMwj2$5K?cmoTUECT>uVeCsD|J><3c#`qWzWA$<;P=RH$^@#_oY*9D`?Z;WdE-+{v^ zs&N;B!?}qStb?s9kwTS&mDPtFg@m7HV+t^SePR5%V08J7Q;mOaIGm;$cM&+8pIE`T z7*ZG&jE{mZs1IocmdjxZFn)bu{JLOt`Atxbe_lA8p&EA}9DbWv!JM{?b}X8?O2K(M z3JE*@nF5SoUl_kG7+rqfsK!4(9Kx*cE(V8-k|+ee^EsWvqBihcYXz1YVhS*RePR5% zV08ISR*io_IGm#zcQ71&pIE`T`R_;ta_`ps00e^EGGs2aBghs%>FWO#6o6vox=qdue+Sni4` z!1(or@#})onkp4%a48 z7`kRMo`d0^8yKy?a%)Th#;-4oUl)unzeTF?x8d+d)wpBfaD8G0d+t{=QNhl3;gx)%b_Q;R@Bb~_xJ$y}=EMrt`5*F zVEp>R_;tbP@>{7I{}OPxNj2^YaJVb6g7xbIItQy!Kri(nM<{ojMbpH<_o z42OG@C}hj@Jt>Uc`dEEPE3h0UQ-Ja73**-ns~W%cs_`!ihuc--{s0btO`?#i(NR*E zSn0C*kXB&1PNo3k*B8dG3r3e8Jlp=|;c%yF+|}UlKoW(JPxg_*jK9BBA955Da-vKD z#;^Wsgf19eew!g=Mb)@|QH{F>93D!n5RtZ515^kfl=`*$kXB&1Q>Fmp*B8dG3r3gU zR@L~w4~KhHP2wt7q?UzX1KJZ=_~;mSbfKFn)bu{JLOt`E7%cFi2hd zRO7A#hes1Dcs__oj|#yjv-MUV(&xZ(u}lF*moJQ87mO~y9jfuK3Wxhu>&YzpBQ+ zE*u_Hjk_rvo=vP^o+y^E5~$Pe5A`9fz;en=0Y;ZEj9(XwF24h+@vjeuCsgD92oBFB zQTSxXWjqJt_Dy)|v;xaLGX)r3zA%1WFuME>sm8wn9G+B-y9FFxNTM*e5bUIIRx|m# zz>}yISdN-0!07UY@#})o<#$*${%Z6L(%+7Aw}QhQ}96D2g(d7%{*VRxpey3F9-x3Zls>b~>9NtW<5ZZRtJ4&ID zx=22u0h#pltnOWZmTPAUFuHtU{JLOt`N6a8-x>}ttH#|K4sRz`2>g7es_^-!*-z!< z&4F3ehx9qHoIF#2(d7%{*9D`?@2qP4+rr^h)wn-_!+#PhgrpfoF3U6YZZ`EHt-x~k zOaVrhFN|Loj4r=(s_}0Rhu2l(?goc<6Dt_c??atPj|Zdgz47Wp&N;j_dFX28Has9;Pe2y?$yV6_US z0Hezn#;*%Tm)}j*_^T&kkn4eJ-2LG2MPdcxRI_fR&^X+qKBN^`O@k@G=<w?kc zcUv|7J>c+>YTW(d@Rg(B{MAc%6wB!^zckd3W+oVR{U`5Ctt5Nv|L*tWRz+z^=_gGS z$f(01CX!LBOVQcW>&9~;6H@E~ zX?45`Tk7-`va0rRA<0tb0%@cvode0xYuPs=$x`A1={dO^%DGz8vw52v$rNnk3oN!A zNjuGVdX|D0VhXnL4Ge@dmUEu1^1X|iEHy3k*4nUl9g*X!7DAGxoF#H-lQBfLpFzE4 zsbq;PZ^J9i>20A3G*(iujj!Q&NE2z&DDfRVeJu4WXqs79y-(!BKLYVQli$W?%-yh= z$iXlEMUtgz1x=&VxU)o7U8UDZa6gm(5f|ggnIlB5zSkQyS!z|%{2?HY$O$^Jp=T48 zGL^`YrD&`eA2)!ts3ut|R3gvLIz*b=M(WijoM#HQ@nv3chscK|VJW9IS?W^K>^cUF zi1Q@W`F13c2`Nd5OqHqxlA)J2!rDb^vQ(o$+8OGARd=4-YvuHc6wZ^S5Czg&lzt+S z!)DAtO_myz$a-D+5*eMJmar`4Cy|%lT|(r}gIiFOrSb&Q?mCv<*>)}8caUT$I*I(M z2W&{uSIBO+_bQSs^(K&3y?v1Ccdl*paab$qyCQtKjJ@rx<%O>iIqK7&kYuScNpskH zYB~2-vtw5iNtObW$kACF64~i^5hPh^OCl%xWhL_SGqC>D=b3^Zaq0bp-h$zczM`j( zrJ@AQaG$HN@kU?Uu*;Lupe9Q(31rZNsizdFHkYf-TPNz#U71js%!fb*AI^~vHG_W` z3hPFFo-FAkk=riN$PWH~-Ag1{GD#x$4qrf;%TMP+k|l`*GGxhodY6Tak6VN!Oa2I? z$0%PNH9gtQyGXL6jzF4Kzs-)MX+5lqBumx^q;d7?4J3`dL&53kYs-=_0%^Xp;|h^4 z>Xt^5C08Uecje&;WQ+HaWJwc&EVlm4b47j*&rq?+qru7P-m+wfKziKEi=k%ljW^|x zWJwNzwBsjjL(lU6k>c_EOY>C(CtslGPv;}h~AA6+4qln}^3&)A0wN(W?Mmd~-k_VtFcNt z-6+*R!H@H;g*^&~AX&WI_pmD`ZWa!k?dM2>87n#hDLe*8W#(m2*0<}0mf92)&4k>33{C+F;d^om2yI0E@%=RCdp zaYmY{*48KT<;BKCdiUduH1_A8P2}$JWr+0d#~EqP>ia#C=G4wG1L)ogew>lUpYvfm zfODRw4i+QQyB}wyoyS^*q@8`-H6#T;&Pe0O{NNcK&BdjbA}RQBMuxQNehkTw=I=lb zRG+8d#~Eo~sM`oh`;WWesx>M2aZbiPh3#&-w|4PTbCDGMI43&}&qHME-^wE?_;F6g zb)}K5e!#I3k>0;n$4KizP-)b({&_Ki$b>Ch!dNlWe5l@cZ|}ia49aZV2K6erET>4qXH z_;F6Q>;PpHr?-s{fH&5ff*-q`kYu zXe8}zry3$D_;F4)xlMDt-QWkvN^4EQk8{$00rl2SQ+pngf*T4_baYlMNj%kIYr@j8`vzioKH789U z$Y<;O=?OWx3N-~+&B^jD)#~;wSvDQiE48NJsu>xY?KAjc2dx>Jr54Saf~#hvXZp&y zNP4Eu+>M%ot7fG6)Uy>y^HKT?ND8i+lM~Ow)@a>ZbL^t~ND8i+lfN{jYis@-q?Xgp z6%t%ECr=E9T%@CUcpf++eQgC-&B&l?xxfGnfVn)V$_|U5|n zxN1h)5C2|*q<#0DACVMXH6ufZZjDi-@(-%iKP2sRBn4N^$dF=-Z=+^Nk)`{P6udDb zP4m(NB+a1Z^xO*Gn32IJ+CoNA-<9B_m!Ptt?~34!8EIYriB@mc<=Ift*QDT$8EKbk zSraww5}oKg1#isB;JpcRU*ODhs3~}3Mw(Im>3*7F-%mwS@WzZZp1-D<+W5DBIFf?P zWk1{*5Wc4hxY!wVCCruNKn$z3-BQK(63JSzG{Bt2`ojme2k=_j{(=?v$i$>D88CU~J z!H_c2TxF7``E7xJi1cnqIa#VZEa&ujn$`tcWDACrlkShxAZa}N_z7wXhLn?^Pr8Vt z*(NFkNx_hEvgVDGM3x*&uSLO-a?^FC{U=P4Lcu9@M>Wk?#YI=m**yCG$yF?T`&Ilf#wBn3mtNPFXz8>ne7J`Sa2 z{dN!xDJN^M+D~NJVKmWi9!A!VB3U+#n@q(0B^PkvLy1m`>jL&```>pJz3^we#107=1+aXZEu~PkNj`3_6v1GFREf~3-!PHSycb)t$p}uRme6sWn4BdpZC~ z!SyoIe${UclJ-->g=7lKu#GZQA+k<6C@APFB)DF#IkEw~wVf+8 zHuE@SofY2^nQR%>&fGtg$PA?+x8!JgcfCy0%>O6M@>*eHtXQPPh zJ9;CMg6rjEEf16mohwvr*h?e@*UQQ8=QbyD!N?DYbUu?2=6<0Jd*<9OB2W55GFabF z!S!;@m*eG}pVTI@aZSj>YE8lQGSc?VKqK4sX#;sXhfMgT0pS_4hio{2ns)yqm5~%& zFV}3=5Zs`1R~r2DCz68ewXK#_6r#dO6wc3~VWK$WHa4G|>vjZaVSp^z)oq~LlvS?cl| z)by0tUJyya^>VV_@j*n^SxThfdKnoSIQt(YLyL@^jGBV$Wu#~6;;cw|7Jt1KNx}6p z(t76uwfc7MrbMJtT3fMHO1 z&`+P>dKno~_U|018B%I=RU`%P%1E=?=OtsS%frOF1Le|TI zWYm)Xwyl{x^e&QShG$=*reG^sZ_U%g4iR}^@hBp_+e%J0JP8Q~-CMJ^s|k{Vt>k3j zcRvuB|HorQCj8(bUn+BQT)(SCj_5xeNx@cfvS;=eM1InaUNnNOjk_?Ps zD>*sq2`mJiD>SKdD(r0vim8Xc2_$m&e4670Tgf#;Zou-~(R_DuVbm0M_cGGhTIURs z#@dCDXxGoJU@IAEpKARQN&86KIYk3h#ZcJP=V@o%q0+fd zZv|V)$tAbj5jpSuheRg(M>E38R|Q+CHN#5grZj>Qb({w~O>rDw=!B#RdqIBm;NJd2Wq}fEUm5dCZ+!KKFVJv~)t z-;$nB3)6fn*h)^uPWzq6$S1Tm5o{$VYnF&1@`HizV{Zjp$;i-xWlA6!nr9KMY6M%! zNYA43P>9f1$TROJDkliGl95)15tEU$(nOZS-U_yok>z;!B#RdBsOnmBtyam(yS@iN=BMxJHj4a{Un(24Kt#qU@I9J ze8m9EuF2rDe~_kND;a4$pI8P->%lACoeAX3vE7(d-miPTo6FV-}w7{0NknVra$0#n6$3=QdH` z9RNq>Z;@Y}Lx%AwDu$NLxffO!nk<{;4ZHz0DY#Z6SO`rjZ}Md|Yt{?sGWjNVyL-H^BB z)-MVX>D{$5GR9M95t1>17hr|zXnJ?8oJ_C3Mdn-~zsUoLOtu&rb8yIW()?v{86*YQ z$~FCMaC44knx9}ty6&y81(=a>yUVmdGH!dR<46jwm66eZb}EWw^rSh}x1=q^S3WGZ$8DDDZ zH%JPum6JX1gH3iqo$@tb5k;QMqdfFkqyH-w4uL|DNdEzIH zf}Dva1=q^SF%?D=Ib#0?Bn8*X$yV2+iTo%Q63ALpaIKtNJ0pn5m1YAXozG;1x!-#+ zH0H|TuZX-*ya8S9WQc{$b%LAkQ7`iBjX3(qW5Qf?_03p zO7}MTVrcx``%p@7&huuymPiV&m1{oxeF%|{yMjB{nu2R(WZd?g(~*qZoCgXY4w-B* zH2&S@Ws!`}|Bj8M;99xn%cV3^$35ByWjC!UxK>8SXUm$CG&2OzyG(GcjEsBHNv+wO zYa91CA7quZrr=r`S;|%54u(qSp5_ZiZi4Bn8*XNc;Ty{EE~i zF#GJSr$|mr_O3)M8&C{2BbJmaL1Y2FsQe#uLPV~Dkloh3jmW;0o<70vvff6dvuTt? zxUSI~N$|Ujj64vjiaU;GjPM7@fZol7io5WbAuQpCK7rqAFy4 z^^+j@T}H<2X$56BeT8Cn%(#W5;CDIs=v^qNJLJ9enUECxE+b=ehrL2FHb>Flkrezc zBW?Fz-~(^MTflaWe}$yrcNrNK?cR@?QQ;%IBPsY@Musi0U>lOk^7#0K%{})MlCytJ z?&&kG`~cKMAdO31mmv91OmbxWrc;n@(bqP9U9F}_3LcyFHZrsbJP9K~GctG-WR>)j zAZ%D>WK{b#w33QyHD@rAf;(rV6&d|T$^8nNR@jE;NZ#F=+llPp@{I5CT!ym~zMAVsb2uUF$z%=6)uV0G2jazUY zioRM?$Ov%qLML@cob!zP3K;=T-fgC`0dL7$@gE~8WCR!)Q!d>OBx6b)_zFoO zBf!aAy58#Cm2AJ!%J~0NXzr3@mFk4{`UBe7usc^@vJ@1W7rxqyWbv6@piZty!LsvI zNU>WMl4hR8v{(@=J14ImZb9UkZ)wRP>|f^O*1ss^kmJX6itHB-Kvc%y^!H zWoMekZ&lh8xx4-rBE4I7Mw;Qht|4g#@2*dzcgxO5fO=Ot6%1F{o{#(0Urmex=+O5ZsnGh^H)3oPzR#Ufg zKkcdQucD@4**V$O7naKUNwC|cok*m2%g)K7tN$c2Z!v!&z3*RUq#1D)ES}ahL(;ZF zQn2ite7@#4A|H5Yft38uI-5Q7f(dpsyL|f%Y6_N}YgYO#gve5J|02@6W#{C|qYsH( zJf3DS!LoC5a&agUI=vlT^BvR_EITJVq}@hjv({~p6f8R@H-7>N21j${F`DC3P-wna zBR!ECvTV-_M0&UEj5N-Uj6>2mwt%dUVA&aIKRXUaO`oTI?+qCk z!LoC5?C`Zjel-qusOh;+uH+0Bp0$bPWRL6d@I=j6e)kd}3NyCWZ^yamh7$guY3 zHXs@H(K#BQf@SAqj|x8!+39hXbm)cWnSw&|^e@+;raf-%G9(4d z&NX|M26O0Kp-wInNx`ynvR{@^B0tMN5J|zZb8=YDxH3j3% zHCsMwLu8Zl^hOelHzPyCyP8Obh7P7gieS7M>DhE69!bxdhNG~zg7Idg6>@;)KC4KE zc1Q}wn~~g~4vK~6m<2*#U{R{A2e9x~sw`V}<=;Hg|hW*LKBCdTs^d&B(COeC3f0D|jswH3bvQ$dCrE z%}9pSs9X$5!OAkyY!wda5dFlP4YD6YQZS^941Q_ACRI%aKj=WIL%~)u($4ek6(sE} z*`A=LU@JNKS-MO_cF@~7^phaiN=`QER*%R!*d!IDM6c4t%-q7?k(a@pv2Bakc`z6It?O$uI_Tm2^8 zcOx0opk*E;1+UD>$F9so-Y@cu$mGl0duMhda@YDsL?&C_j>-E5T$#Q?F*&xvuY&0F z6udI)ZS;k|V20OZ^x2!ai1hB285vXMYk1xr&58rVi1hB2IT@S>R+mk#RTL{(@xOm0;LLsWkA8Ik$o_7UmbD>E`~-{)hIjQb@OtQQ?k?_Qaa zF^!8YLo((=J3W$uS7u~vj`Wa+(B~POC1^U4$(Of>UY(3&%)raAUevu6yfV{_Y0?%P zlJmqji2RaB?_Qaco6Ltqu6}bHNx>^~@~6MH61i+Aton3s1+UD>L4V&SvcG)=Nx>^~ z@^f}_fzo7jEwbN&>YFwRO^31O~ETOGNy(8Juc_kHp~4pk>0&BBcop|qH7!d zG$tLAf>&l_{NxNru($E!CTBxZ@XDMFn)-yuB2Tg+DR^Z@#{C<#9Lc!*^I+|!@2B9E z85zH@sVW$}9ocg?LovZ2y>H59WQi>2VEwPJZHbH@z$#vof>-8b?oyYC%u$fuD}q;M zWZcCeEs%`+b0Tbc(VBu+W@LQDJ2#PxFMDz`l7d&}WN;IDf5r!y6f5$OM3jUmtkrz{CKr-@tQCigq{+y8! zD>Kt`8?ij=9@G^4IU{46cgTgBv5j9;MpE$SjEuRuy#|so7jKq8Qt;=DjLmZE4wA6} zO=wjk_;XIiu7*sFzP7PZzI{vJIU}PQjjE5DQT2yH zd0RhyfUOX{>3NNQ8VK6qx1|384RWw zx4-r0NXG5{ReNP{u0jTbk@2Y)_8{_=?_xYpA%nrmtTj#|86VJw#;1_MU}Q}5zhS1< zqb#P$ri!R3WH2}x-`bbR=;Py&OujJwb}u^s^Al19WzAHNR6Lz3C|lt5dW5URiS+KF@e$Wf5HCi+J zda8*?3cj6@#WQ@L4aulChifA#_;yCdZysI<$@t~vXbm9vc24G-*^9_bPxhmx;M+Ob ztV3QRYvekKq~O~*`Oeqph;%o}NThe)&d9i}+vwWHt<3v|NbkO#kukMKZbr?R3OUas3cj6_-)(zEyEdhtW(%bBn98j$^9*%mhX(utt+5Dsb>?x zw{!Bv?KVW-tp_zxO$xr9lMS}OdfCzZV6b|jz9qf;c1A`&>;S7lXJlVpI~qyBw=*(+ zWG;G!;`{a8j-=q*Ihpr#FlxqU>Oh%C!M8Iq?sipr;^WSp+K8HhZ)aru^yXtobM)a3 zM0)q_j4a`Lpw`OH6^eg0ld@xiZ|7v@2K44Fk@^#V)D(O>BjZk;s*9R&`);ly()$Kz zM#h)QtJaWjdux7t9!bHsbFyIj@kC~r1z&B@PoLo1IT<>5I*|plr9x8h?VQZANR?aO z_SUy#cOsLmahEE1OH~*hvQ*~Wlq(Q?JJXC?`Ndo$4{osstaCS??!F@9_Y~`pfiku9ZVc-8l8FRsXGtzkYsarwc0BPJ@ zPHRoUeKRutNPJ)HZTzm_LfBiueKRt$MBc9ysqTz&-{JZGMpAI!jEw5v?FMQ_b*nT3 zNx^+H(kk!YN6GC6O)K_ys@Dkan~^cimvu(Xm^zsop{C%z85wc(!DB_L%#m{6`%1w6 zSpD<~?wgZcU!F$Ii01bwzc09NM#gPh9Drop>d;S7Q*hs${I_clB5xk6ilpGa85!>i z+(qQ`;nR>5+&3d*8kFgVWXuQW=v^kbZ%&5qA4p`8fB!*E!F}KR@1_GKsy7`pRR5dI zrUUxx%zV>9V7Oe0zXx4es1nrueOR`jZ2ZxDs=vy=`uLRfFQ->0Dh1S^xqG&Q04Ayc zr7MoU zC=Q=lnk3M{2lFVk9mcJz_Zr7HBa9(pk1m zi37!?DFzEZJw&1p9e_{ji_KCHEYMO2^geuMOX5Jq^B0B{l@1hjd1)&Q#4-{r&<_x( z3Vi10#DU@uWPXEz;wR)Nje%H#f(3#z575)*_9TIVB zv7Jc*b*>C4Z+&X2UPbcZra0q6euCN!2*HL3D7gdzQloIS`4m;fntpBM`9qB>tKO4K%n~Y znf-|a#peEDDh0Y8Nz({ReXu~AAW#DcbTDzCn6F(cC{X>4XW&C{*H|Wm1p+f4pjQXK zB?;7Gi%R`F*C@u=mzM%1Y-nJCeuh9z;4?>(1p4{xc?vXYC{6w>Pr?F$VGn2qfsQ2! zv^E?TQu?mN^#54>vvX=JZNdV94+_wB@kEk9BZ8h%pt?V6X9(AbWl>llSjYsl1hJDz z0{s!Sg#vwFLN9rAAm=5TQN1@=pgj<%H3T}HI8bc*bFf}>PVM9pm`n9tV>uQU2;L0= zZQ(O#5(kQDSLgu+icCYN#(uw!1%e!8Kzj)EXOcjvz5vgpdlY@}9i1?WL7=YinX8Ed#V^^j8w166yV;upC1h_{ zATW;sdTo0>ai9|KWS>KUF4l#)RG%74=CD8~A<$>=nHxz06{rh)Pn?VW*NZ3&#Bw_< z&}j&y9owzMf#R-hAButER@8Zy0wtt+SRj~X0`w#Dcj7?tRSj6%J3Y#FL$7(^uCdGy z3-l)h(%11$l0fFP78oe*_Aot-LLin1Vu4^)9?%zheJ@F%_y=7uP`uA83qAyaSYC() zx(I>3gwH%k66oFTVDa^-#r>T+KLtui6R|*-AK2(SfB?G1CrALeu)FcwmDcG1I0#^qTA21 zRV>gWh%o^g|HOe}Zfz=yfnwH=fY*dRHI}?$f&PUU-$0WtaiG|Djw-wA+_ji1zxrb! zmdj#+o}wpnT+p`L7?s;My$ z%XG0oFChk8$AHX<14T7|^Bj8=61;H691=FbR5lhFhKv^NiPtX)g94Ox1 z7jkU6M{!3M!eG*YSayyD$__DBLKB=MP_C|jP@qft&y(svELq0_<%Afkp$SPGD5h<# z)fgxy@}gcu!CQpo?pUB)5MwPgMv_3K57WhtaaV`;jqVXk<*`6{AjW!VEGLkY*~_SI zd6~ptq8Tt`{9mezddv*yITuhJIR!sBvDLJZEdGDAy#;twNB8(22n3gqpv40uo87(l z?k*PG-QC?SxD&iUkrr(!PD@*?6xX7~-K~`1r4U?-|L4rjnLT88dguK~zh2k-t?pl{HCh>DJ@x< zgw#9l8ib_YY;k6+EfHf9lKq3^HY6Pn8VFrPOqhg>{IUE2BqL|nhWVCX6{5Z*q~S^j z(u}v$$lYu>lEigMNd2p)+mO_UKC~f83Bft7>wjf9B zJS0f3zLJrpyWSF{`#X3>nlZh;NK5Blj&EmQ;~$JkG?I+G*z36<_sM58?eCRJ2LW4vr>Y*)a$t*y*fui8e_VFz2&tv1}wUQ zB=I*g^6Ns?1v&DeSZfhsBO!J7T}VI89tukYOF7=Rl9y=6{i&~em`9L56%=b1qGV(- zr#m1CH)D^S=+Uw#1`INZabs#gMcuc{vJ6;yYwy^Y$49S@*jcND{#z zBm3SwEy%7}_}&S$lNb#NX)hNDBAoZFy=WV*aDXHVLqgh)Wvz&$ZEqeOYfGGkgw)Dk z+KHrAC|6-5iKLK_&Z{-xpfInk^Z1H=ND?a{A+Z1NJ!i1=}9rBZQpxA60;y7jY@w*Qp#&< z6y4kiYfBP$37K!_?VPNlY(>t#)?j0^O-MemCM#9hM|DR8dg!=oc3U>8L zPWxFjJ~Gn5$Z(Fj0QvbO{^y4MGx4AJ`NoL&l-LV;u2t#Gz)b*pCVf1@8j$WF3z=bx z7zn_|cHDL=B<@vT=X)KELvE;G_t?!;MARsY&M6l}rR{k=QlIoKsMo>tv zFIe@HaWZ{>Sib#N^~p&mnEBWfG$5AEL!;R5G3-C{S30(@9T4y?{(rTA-}?vH;NS5W zto7{LzHfBL4qf}RZ&lH{cj+75E4rW7v2zctV&xhYy7uecqwSE-FEnkj&jw*o?32T+ z_B>M1)xNMO;{%1XJAR#0XcZ11QVO*k1jEz;hDiQ6Y zdupAdqdWKLsNtm2tzTcaCyHEizwafd-9W1CS)05vyJ*`Wo@aT6aq3t5N);yq z_i^z2wv*7_PoH0H-#Px$i5ZOfgEJRv4X_BticB9!uFc;zww?`SJ9uoA+`R}}?&;Z< zh{_yab`qQ20z)`irZH^ka#C__{&S9BQ)UWl!gk(-RW)IN@S+sv_=Dk5Y-sUmHE7@U zwn!=rt+1v`SoKr#>gWFXOC%-LCqwK1{Tv_vy;`4NXgaoh=lJ{4Olk!3Nj~UK41d7F zKq2k+PDkl|wpxSAZ6C&P_F!dKy%Y!nbDWXJ6Fh!{)$eU?$_4XbaX9gCb}ioWLU-1j zi-r2HQyTu@AU91={?JCOPHfI%b;_~&1mgbdl+MJ>I>G4ue>%s0sj0=lOgv_}=xqFT*D1F3#+V%4`t~ zip=kg7<8!!TeK#Iy~Kc^3#WgCAG0w;htFrjkC2`zY<3Dv%Sm?u@EM#WSLrj-XV7?y z@@%!wXHEE>H(^t~zF3sPU4J^NDXTtv3z1d-L{C0x{YUlbAalT`L||%8Muy$Tn3C!z zxa*5DELL$1VZE|rPnAwxJAZziKkqyCGkTys=<-)(S+hU#%Ac>mXIvO3{%#QTYFE!3UhCNgscb!h6Zf`t0uR?hE_I zJX0PyCk+(G8%1_^eP*hWTWXJD%vVs&k;_)L;$uf;>07W?T*#G;eSg@wTX%Lj5pZ{?l+Yqmw)*^9rV%W>;{bxq$h6G<&{Wef(k{)Zg2RJ|7p zGUU;mykko(w@;Q>+)3)9He= z-d7*=mAF6kKJES#r1ie~$h&OG9)DGae8V3+FcK8@)vMZ~k<`jRWOJE063Ck#lB?p} z7d973=kHtK!Nx~|!oK>P{znD*&318BtiR+!OLSnpAm2Sdg)tTO)$dk$Cdk<0gOF6% zSKrv6n;?H{!XG}+x7PdWTB@%^JGG#;8pc%ES1(a29Aj!lB7%`r*jHb8ITw=7xv6&v z(sEzjX&d&lAj9^8tKipDVPCzrgDt?#(PvamG66}2ef8__zd=&Jd_EPD3j6Bc)b`#h z6VKO0(t2Or$WbN?V;Y$^Toa_3`X+SQWY#o(ufwve_;zm2xEx7^ef9nI2MBW4uaMsJ zzE#*)kFMVvNxk#B+Jf}H`5?JJ^~ZBrW)VLR-S5aISu>`>zWVV}odkI>2k3HMTZMh~ zD=}=L79aC`Hdw-PQej{H%C6CZJU4xaAg%Y+H9pQ753Hd|8^Kj*WKS| zB5A#^9+4&dI3vrjMOr{a=vz1i&0~@m5+ql}cHte{`Y?OQb{1YMi6?Wi3-q5mo3<|( z9uwr)s*jLV*pXksfhXb3STJ0tf{ag zKjoYiqqDuchyoQ;@0Bav19@;!!jMpEzelAAObLkc_c`=Y$F=I{(8{shkd*Dn^ErmgU1$GF8w43$av74c-E}iD1~Ci&F}u$l4SO`PNeh4Z-HFL- zEzVf?lKlCziPQ8mq}qe${>ZA$<%6?h7XBcG{F|h(@%cA2sChzME0q5b;#%(RN8vAV z+30C&cxiKHflFpSGQg5$Ji6?-IOcLfq+E z$#%Nq+n)WwK#We3UV=v_#3L`quw6A1k35oWC*tHpIl=oR#EqV(Mb8_J)|Ww?q`w63 zmk`$v?uPX)zh(5_Cgw(*fqRdi6MSq!Tub@~ z6V_(sosYM0BL!_IxiZ1WC&Zoq{IWyf=Ninx=pAJBT}{j!r6YZxT)L zuYGXmOD6K;dp_%tt%#FMn&8tD;zpx;MG!Yi%zBJCNv8=uGa;_usaXc~HnNbtEn_}(ll1-^1PU%~@U zQfz|H^TCf!gpt9g3u9x581p30CisGcxZbZ7EXmE;rfJp&*mdL(JHZ$E;4gFT5%`}| z*C0+ZZh|lI!OwgR`y*!bZ8gFWCuujqfAGPtM^zR0q1v4gC%HGlm-*tehI?`Cp1{2c zIKh8Th`YCsuY6OBWlPsLz%M;?R2M2yY+;zPhPfXytlT@7GD-+@o*{Z?Ps5GoZ zBT_$smn8Yph~(o0U!4%QT@Ids(QU`}P87H|DJS?EAN;FY@LmbOaJHeFA0kdNbAqq+ z!IvCLCh%#$xDY4lIlWWjYZtv@)ew=<83E7I>9$4#BDF0uww)9mH&Gl-+q9e zCy6@2Hz&lkVV`y)u61cFDo?U?f^YS~Ll;7F$h*$@sYOn#JW1IJzTF3}7IFn~&9xlf zbm46$c{{;>_rcrF93}9o*F`!&l6QjdN{EN=tDBtR>^a9W_;nweV04nf6MRoXJTmz^ zv97bd{#XuilExE!UqalNa8=AUM)dfqh?88N;QJHe`R;zxiq)GXo-CoiQuzYnB%vqx z!Gw6^^1a!y>mujW1kd-Q32|G6m#o_H zgSOBNH{v9}C((~5#M$P`KZxrsQp3wieAtjApWr8b@I!^fx{kfQ6ooj+^a+022j94` zjEFwJTQuS%-6yzto|jl?=f-Ohh&z`Y>y0?c`3Y{G=cV}I8z39Zp6_Ufmuz_3N#alN zi)Q7$*+1J!56Z{-K9-G|!R+^u>_79D-|Ro1b@uNv*svix*d%(>_~`H#ND~Tonb?{& zfuC9^bYf9M)&zcPfk*^WNd1KU?;Krp72?kNIY8NQ+`mJJKYZ*}5L(HjurtV`Yw1&E z61ZQ7V15A=sl1kL*(JoC|1?M^aK8@0{MspkJ6rT%-5vjKgY)2Bf%|m`<~c)(M`Sk; zcf7H|MxohuzYf9tiYbaunX?6PXUh>i1n$=%m|rYK@dgjrn2E1^#F@?l_v;Y;PI%!o zN9j}of42x87QFKQ9fJ8KQZ)LA+${xOb8;Jj`*jHBS4RDV7jL^?hY+0Dr}96f>L>92 z9#~_TxIc#wY9#@Vp>_C%e!JalZ~B*!&hJf*Y;w!>XQN zI3wbcm@fP}gkbY1BEj{zI!O`NcRVeE(fvAvVDp?I#TTYZB=8Z?M{l(fvAv;Oq%+8RNotDFpt*1o4#d z>kxv?Z(<_R^*NjWn?IyzBfrgy3R6c=lg%BJO;g_6g#C9YSykAG}`7am2M;uf9jz zuR{nf<%4%U6)W(l-7J|gEAQ7K1eZyOhab9mis9qAt5HxSBewiG zULx+-Aq3Y-i0i{X?8E4KwNbFK#iRRm2*GuH@UyMiHIJVvmwdkjalZ~BxSkLG`=KlX zpX_LjxL=15+#n(D{JqXb#GTX5u0-6gLkMnU;_#Oacuhbsdn1!2MB*I4NEikDmtPZ* z=Re=oh<{7NuY?G0BH{-(VU(3O*e$${qo0L|)RU{0)~w^rxSTBy0z_ zNAPp zA4yE-+7WQ9(yZ;uqk)3-N*@^+(-f|`Ne?S5~Cv_?IrKHF{VALZaopx`c;U_gJ8M9+i9G-bO=e}aU?Mf zEjy#)$p{;yHN2ff;mF9gsox5+dDgFxB=$x|y4J-AGBRg-L3+iFgw+4~xEo3R;;~wS z^g0^}>AZCs_A$+o@MoM2Nup~cq_!&d5R%%@;joV6Jw#4>$jE%X!Lsm}TF!>gkR*~u zLOS0qgN(_n?aM7E1?lxO5>o5*JGd1yW}91Zz=GG7s2LeqGaR0oCRw?;m=lPVk&#&* z6cJ=deldd)AtNLEUdk@Wp1H*RsqiYq((Ukilv&&PH-5)<5)C7ZnIye;9{Sklpdh^l zMnXEj4rL32_^UFhVK*d+e36jGmJ8>RG}d_*AW6K7jI8Pg#md`hl-n^DNupdNB>Q%J zSc!5{e_p3IlEk)1NMmBjfk?714V)!N%U2;>;YZIP>B=*97m~!WNMgEN!@E}1cSq7)?6(0( z5_cjYBW)AGvhwR0ng7{0ND}WMA#HamLGsB-TkNilND}2CBcDzL+hLM%&$c2-Y=?xj zAAfZWN&Aszb&({ZLqbMY&<7wHS!VEKB#GmYklLS5`y;7cSjw^tbHo$9AtU=1Un$5Q z(QJR+B#GIOkt=6;*P6@RtB@p8Lq_hdbyCFK)};fI#AiszhypWRjO6)vL|A&zIQ-5g zDnmj>_Na3oV@7sa{SZlFF(jn%aIAN2a`(p!ND_e|A@fHSDaNvpY>O3)bZqEiA(>#+V$tV$7uM)}}ZT^tCh->|Z zo)Ead0|~)CyQ|ue9W?}Adoo{mKpvmeo0gL3KD(>VP1WIUFf0G{QT}Y@xHmT?xbN=j z*y61JVM^|18eBWS~XuCH{_2Lh`a-dYYm-}~5xBnt2^oBLS2Y_;b>l0qC0;AKj^w%|y3g*a7BH_O;?67W zvSW1e?mxkOc2~9T%f3cjt1t{sukk@kvR;Dw?5=9{jGqJ^{)Q*8aNSAjOK_jvRV~Na zZHPNxPe_T;N&ZW4pWRh$aPQ8DYqe_pAaH*N5;FMgu4=zLhSeY+HrnWM6A&kvFp2K7 zyQ-x~y$EsVO=E+=z3DK)eRfx!vvNRI!lSb<8<~$d$%zT>v%6~S-ZcYpV>bV%e)xqW zi7~-_c2|vB?Wzboe_D9=jpHOcCb-Y;s{Uzra>VuXWpg1;Qe=Yr?5-M9ZyrG0Xn#!1 zw0;jHWboNtbvavpkGLzz`o0*QB+Dea&+e+L@PS?ePyG+~j4)_P#!PUZ-BtZo*mcD9 zttC%H4heRfxk;$L(Tcu2N!h?4}G;6A&nM%6FR z2|V}Ve29}Qn&3XWt48Hr`2?P`Q~`l|Q)z6nZ-Nzn=Jvo9N2{fESeM~3%ZgE-043GTBmtKBM-5^-(Y8lH+mr;}uz;6D4Z+Mvka z1YUcccs`Mgo!~zEvf6J)dkTDFXc??LN!tk?zc1^(?%MuV?F7EaEtaz+cPDuKwyGD8 zu=Qxc@QHlD1)di>dL)4-c(a6gNMv+fakE8MYTXhmPqKJ|w@8Q^PhS?o${UBTaA5{L zPf~e;w@QfTFTSxft2o^_ZuI=;*<1}(|#3Em+gZd;Rf0OGcBzkPwxNqSH4P6=`SS|(;)%;@@tgI^*}a(se! zNr)Ssrrt?5#eSB$nokIl=o7q~4<4CBJfHMWjh`bW7Zxv4iDxrO z`3c@DA?~~$HbmfCx`+iO$@>Z3+r&Rl{=Z{GCYB}tquB2j$$x}e@-KgMH zcZpq+46j*8vNw+sooCZQ7RlS`Jd|{{AieTIMlOCVYU`Zw6{uCSwqEZbA+=O@{uD7kh0YVC zS2;*X=Y{Vw3-U;B7^-GWuWgW!+OnkZP~+{?zE77FNg^5~r1Ry7cK z0ws_%oL{~{lIR6l%$=_}FNi2eltiK9Y#U@#4F)ZzP zJBdJ$k;z{?LQ;Qw8WzMR>2(JZQcE(o8w%rwY}r>3({*0WMrj> zV)SWI9g`zTWPyzQ;)ly3X8OhOJm&2ro3H`9Ng@Vhb{x2iDyJris zz9!$(-sxvqHADkcubP;OGsDMmFtmol^A~tNs{Z! z$odg!1z9Ca5RxR#mykx{DJ7BAUp*f#NXzdCG)66DnPU7^8PKshk|ep8#cWm^wqVWc zS!<5CS4dtjBfIwLD9GkdAWh(XOHz6n*?y3BrfxJ+7o<0vmyn*yyLMtsPl@IsNRmWe zLb@AiVkEe0>=(5qIlP37m|ZL>i&-AlV-Zu9h$pW?`d+MLEY>#Cy-$oGlD)+T;lDSLB$i%x@`ea^D+q=@MkR(aFgtXs&yA?_MpY1$Il6+l4Mz-kK8p+58 z-$WuwQgsQbeT)|C1nqe+Bs_c!kt|(C&T#C;nA(>=PehU==rZ!e@y&wV(`g%$BsZ6l zvD?M0sh!^M@jy`1J zoFxqtln%}H`POuSP4l?{Y}^etgZggUIa-ZBqXF!>tC@3Gs-m+ zSqE_uGP3H4{ut9J^=%7`Ni>9n)Cxw64buni#-yu}rXUgyN(inPtO ziSD*UM z)KRNjCa}eh!GfhFeAgygfrW4nZ)RI4hwL0%11=|oC zRa=l}Y;ZooB&}^jv;MOLStC2_aC1_@HaK^&b$a}qkZW`=L0TWf|2{i7J$_ZRua?0J zm^`L}Z5Z=gpdkBK&w-?ZZKyUWr65aW24l`+D%ge<#o_p?S=;YR>=dNsT0pzB5b|1+ zJp4ryBo%B!;l`^38ByR*L0a2}eX)=!@|ezz^TkL|uno_b!g`XE#+~%Al4*u*+}8%v}@KA3UalZP>kx<r5b^x zf^F#XMm)=0jfb8^Qo%N4KGYjy8p-y?3ews(%-X$FkmJsa5wBnyqI1AH%k0}$hrh&_ z3btXysZxUMwKoHj3btX;Ja7hP%+8y32-4a%wCJ%BNl(qbAxJ9Nh7Kvkh<7)s2ALus zL)Nw-vU;)e7&Ed&fe0k6ok3)ZH(8Lhy??$BNd;$+zQIW(Ba>{Lf~0~oc>Nqq4)0t0 z->1duO~D!Th#7=rWUB_?40sP&I|DuVqk*KJc!HRR6r91bCE$Q~ZM8X(w=kxHGl)Ip zeIlJXBjyAJXYlfART1;fB?DtBIDf)*>ID_dg>SN5vFX7~$*|*lt zAToIm7A;W`h-rI&pg58W&Y;ozqYPqqH**HnOMs`~*Hgh6S;agF(3tA*tXDYR9lK8$WJKycK<`;0%g%`ozM$fS3;Zo+yl|;0!LMfrAkIUa=j1 zH4I5>XJDjBqa&$*7!ErGyoVH=LA#XCku>Tbn2)4_Gia6icR|(~a1}`fXHdC;csgiN zCBakh+A27MoGsd7OfBuhX-KL$gN5vh#Imyr6WQ-<3XT8e_eBM};#mb(#lij6v_a2P zO<2v@IZmbx+P4qk2H=0w2BDcaln#n0GI}QaG>a?Je`px%h|tVx+93bya3rY|*5Fx! zwAKbjhuTPLdHy&pNNa8IWnlX(AY0Ds~pbc&s2at50x5IH2KKc~2L7!bukhFI$ofk>#Lkg}umj)o| z3c0!+Nd;{%@RGRoj4r9FAgQ1YR#v%by`wKx@YXf`8Y9zI62Sy^Ppbeh9gEZ5;KW}G(jdb2lg}3*+m;YCgt@3?~q=Ggm z^Od-snro8iA%#Nzjy4XX5jrL$Sv;!7?H(pnpwdvX&==b@~i zM|ezYZQx3t_Arvhn}X|*RL}-9Pr{K3bHtDRO~h2t2IWFLf-F=#8e=MGgDby-v@&BJ zsL)D~*4iL?GYCOWy4vj@ill-z7~Y_}AbZvqqfbE_IF`Oc(#ReSTVMRDkk=3-!roZ! z7%9lP9xL}JCI~@JDrkeS zjGzrTsb|~(!k&`~+F;WsP%@mQ%pbZwK_agsP&<0Iju&ZLm)N0t^5D|~5pbhkhq$qzQJz8BDH#f*+h|EQ$UIw1VyfdB0oZrUqg{TFE8tJ zpTV00yq22LxVR|Ns}M+$L!d~|3?TvV!EXuQ7n)B`xrjwNqm8wqNUvKUMGk`^*Fb6T zeU~9K*+;1FOU@fdz86K7bk!F{dZhy?l5IJ~#6j4QB=9jCiu8H$SxnW8(HfX_?>y=A=;Hm$fGs5`)Od=6;1m65T?IWH)t8+SR^qwq)2vC$HX0l(sIHF z+!&!gFMsQYo`HbkwbZ(ozbA_Ho&+I9vYR?4?l_c|8$Mu83iWv*Tra;V7Z&Nf6;TL_ zB(8@P$!_YHxRX#CNWKu5lR|x764x^wfF(DtrE}|-Ff4dq5(z|#WH)t8+-WF{AIRDW zMf$uru8()a7J=FDyc3~|c#*^oks{em9TRsJiYx#hFeiojyiBh5O%17&S!D9$6|qR7 zjYyH~rjCg_52Z!G2h2&KKCg-E75d)ABAw?)!3gHHBtD50$!_YHxQkF4$gU6=a-lx2 zj_b>diyKmNtiC3S^qx;4MY5YZChjtn=70~FlR|x7C)bZmfsItN;cau4!y<`+B1N*R z7ZZ0CO4Hy2=A=-cSIqUii=JbV&fP7qh$6jeiWJFi>XyDb zw1V&fb5f|!>*=mOtJnh4tfi4SE*6UX^9uP+AH2fH^7D=XG~?v+4~+kq_3x49IIq zOd2VY-PAF051_PC@BwpDsLw0#uH;*CW0CsoN2NuP-jg|`NOn`l#Kl2rU?xJKn?ikF zi+4?I*At60zF0LGizM!i6v=Mtn7GGK8r)_fFeiojyejW%y|NS*sXs{^hD8!7M~Y-O zbxhn-D6Il~z?>B7^ZLB2_x-w}$WPb<97t<9pyfSy^gNFx47k?f|9iF*U3)qoEe#i2g0<)~1ln6>|03R?Xh4xKYq%-9|;_k7Jd72)JByy1y z$?m|IM}bgUBlv(hDYSpWBJGXu!*MR&mys#fj>IB~btFZyJ22)^QYftne88L(Ixu08 zMxrHGut;rQ$Pg@&=txo|y8~k$C4A60=E)WOrc9qcl)j8~A`ZDKsWwk+#yC;T>a^RWL<%y#r`DUQ41pNs;UhjCqs} zN^1unFeinMN?4?Q%nq?Mh|FJ(4Lq|*;zCK0><)~16bz+xfDf3HLdPU5(w(*OdTh9{ zY(55+6y5WOrc9qs&lR zFZh7FJ#NxbN)`{oXThHoPACjp#F24+8qsV<=Ps z=7!MkeCp9)0&J-9>!RN~+7|0UWGku118+TyQW>ML9!8O$*f=!D2LXNRF&wG@6H4g! zKJ}=zy`HGY^`V`x9z@-edYCT}^6O$m)rZ@V_lKdyl*f7y(5D_TPz9KULgy!}hi=@4 zLqX;^JyTsw6hs7*dOY^_hnDZtuUHQ)SBBkK4+8qsV-!>YrmoP1WqUxMs(xvC(&YFa|-3ttXJQvd!5TOOG0OzJhzGIGqQ zeu9iy4pRc}p`>2XEF*9K#oB1LQ;&@sBuKAMmXY(PeC*9=t#Pccbtu+qzQ1 zChf(TL~Ke(qh9?^NE)?j?Lm_GOBq?d?*&1Y?!N&^qA6u$==rjOOn+(~lEg;J$bpT@ z2(oYF6hWH32pbDBa%D6uuFSsud2mG}iCdJA`qLoxkd41TA7&P#Px2K!Y`iS?FkgnIqN&+&&jc zqW2`Edsf?gqPE`@;tzOu@)CEr@c@0*ieDt{^_Q2i@zbZte$;dKUR|&HC z3s|;ulK3(iS-3?JLAs(u%xPXNCLs&uNDJ#dUfV)ho`5IgF^T<>kOhrLqHhaoM~@;& zB$tGA1mzQRf+LV`74VqEWl2c;U)e#k@Y>q1E^CZ2iL#QAj?|e!yK~Z!VsSMjiJ6j+ z&Z}9(tm!;E2;?NMEfG)>(h+gxt%zA*C(9X4l6WQwXk&uqMC0S||e?6;B6}2TsM?%`ymFmIBVi42*>)}KgQ*yeE%<hS?ZY6v*(G zcg5;Wa=ML>?zcxKV{P59%KwHji7b-T*7@lHDLLInVuq(&!&Wr` zxq%E%K5_(-#3o5%I^K2Kg|&6O4u{l@Ulob_Au(-v&$5vaz}}8wFC6AxFat@+={7!I^Q#0o=lx{Z+bW0%C8Z9h`~FN`U1I)rrH z7|d#F*4A~c>1`w>7KV`S0)r|d>CW>i4oQhOp=8d{(Spo27WNAGRgstuLhA3+hasuI z{^tpj5;sA~^YdYYjb9c0^cL7K{msF2=b8kMB%gw*$5Jcy*eWto@^B`G^0jsCZ?A!&5`O-#Vn-50sn41RyX?H3`d8shb()DM>YBfNxgsCc1TK6c0xL{Mze{@>>+2G++wLLN!bbMK3HTL zlI|Uwc8i$aGgXpyy0aa*BFOaF#S&7IveTIL-@{o=epTF6(uveZlCo1W$5>`3?EdsHQORVp1Su;ke1(LV^j&SBWaXe1yYqyz><`m#5AIE z%@d@y@+^{)l%0|(+k)sc@9a-!e?n4{vQx7Ap(tGMh5>xLP*IAJ5XRbg}lCqPS?w|LjN7B6@w`iv%Wv67h z>EVJbvcxK7C!{Mb<+n(>V)w$iQ9cqRDLWzEUxmX_eDls8xp?Ecq_r~u9nJKh1l9H62kgk*60+Dp>OBO9i|0z2m-8DLz7xqp z$qS0Li6mtwWWmTsg^((6B6Jr|Nj=7PPr0kTeH?*}NtAyuAQj)S$a*DQ0kYkd+M^ciqQ*zM}md2W+&zL=8 z6q1sZoshNg-csxi-Qg%W*-|S<_Xd(?_Iv+n2 zGngc0CuDe%?avsL3&;ZRCO9#sBxNV0<7u{JSX;;48C#H)r0j&WWshZBZvn8s9AFFC ze+o%S%1%iAouf3y)Sn!MgCG1Zlcel~be`S;cl9fX={$7kZzLrtJ0b0VJQi2QzV&Vx zl9H62kgkgr?_q6SM{_(xQj)S0(w*&-SZlh|$B69&Ny<*i(BTa*raQ%MIKstyNRqM> zQhz$8Hj?_CW(|>)r0hJUFX%lv5X3t60Q)bNogC=GerKB+@xT0jB~5|0y*l)b?%F}? z+_!D-E?wLA)5>-2-?MG+N^RTskM27pU+v!g+52SunC6!x{yhG!J^>@AC5FEhkPf2h zA8&4CZJ5LV{Ho46{u8C${j%S|f`u)2*zSJGq0r%(YN_q+H~(P`l2MHlA4XE53W(`2 z0?ILKWyaLs?ahLuL={kSqvt7-#+s8m1ZlmyzhLneLCzhMT#(kg`)A*+M^Zm|@`E6) zclS3WDIv%;ccuu^zbc^Z%=~yHl14~$xFG$j0z&F%maauoKk>x{LHbt(gftc{pMaz> z@5}%sC8~gs`oq4fk<|ZA3Qn4jA&Dv=q`UOWoJhKhcWi~EL=_NH-`S@blKQrOMUj-K z0zx_)O-X{Jv+ksUNJ>-zAw9`gw?xttSR0ZU-cE(x{T3mak#sj|21|5KN>l-f>7F(1 zxFElFK?==Di7KFE+qJQRY>{=gAm{PPAr0K|{H#w(<{x4LD4Bjb>>lzt!JT?FBu-{b z|EhqHM)H*4-Z^Omj?j>lr~*nJxl>h;2hJ`Oq<>XF$x0PrcfyQW_6&GaUR#MOpk%ha zZb4@HVYDFqs{%@nJrW_vk=LgpDNzNK>=*q(kkQ>?SB=+Jq6#Qk^~(!_tT@1qq(l`^ za>a|9g8b=z0YRF7=RZb*aXm7VAg}y$8A*vMpfU4(=_PZg1_jOAsj$2M(*s!Q@aw5B zO(E_Ti7Fs5-FNG*L((1l7WPtjOo=L>VOzT5GgcLocu+!slSDxfis z-S^(v2j3nNq<>XFNKeC_kd*Qs^3-h+f}}(hP_kXWl!9#j0ghbr9+Id6Lb}tn7SB(2 zii%>sm3(&%C1>2oh%wz?B@^?lL={l7!*@9Z*>XMXdh^;!Q~@OiE{4R3_mI0!vQ0=z zQ~@P>US?@QJlW;cO+i}k?zcSm5y?VLyTF+!UR#MOATbLzOf?Y6g7vO`gQP?i5Ymxv z+GZpjdAmcx&tpnd0VRXBih0P9q<0!5C8~guo+{$W>o9(U-C!P5q6!G9C23L}YpVsc zS&5`X6%f)K~R5Hd2);M0tp0Z;YFT+yH>I4MyD zgmg^&c`L?rj2*WKNr@^Tr2TYerX~`VgqZddFMdT*q6!EZk#)lZ2C+>__65C}$0tQn zq6!G*q$4E+40U^U9dPBdmeO)Ft3N+h{ zq(l`E(&>2#GKF7Hr?ZF1S0t){khb#uFR^g_A*QWtsooep*r~*nh z-vT0;_pQ6}qPs{+Q~@O$RC^`JTCs4pgx@O?RX|9?NFuJMVej@Ok`h%w$>jG=VN6!Y zY9u8|{(tW77flDZ-5j_~V~o+SuqcJy{koG=BNN!ZH*<*rwP)3%1+6dx7Y*`Pfm`E5TyTjsP z3UW~~Z*%-bnBkWa}W zmu3sH&-vp>N>X-8c0IcE?U6B`G^4OV{-FP~l&N)R3g?lw7yFdRj+ea~D>a%K!C8Q)}Co$bu z$LvSaeKw`IDw33)k^>K>5M<9qRk5~`l%0}!)`SZ(YbzlbBq=*3_qH1$$gNB7VNA(^ zd_sDvkNFizPx*Xs%7~9!Ny<*iMjc_n%de-WRx+V|Bq=)~-GMV;mz0yPccJ25k)-UD z9G7hplI~$^=3s3lDLW;bB>Pv8wSSn1q$FjhWcLAV@oCo9-98H(73Mu8N!cmc_IZdP zn{He$NdGB2Aq&;5dmYI_WzQ!=Qj)S0vS95Em5?l0b#WCWB`G^09l5Hr9UHTqj;!nc zKvI&jQ!-KLY9#G%7m3YFB}v&SxhwxTL2f!X zA7e^Vc1oUXT~Lq*#?L}hlCl#rGJ6ZQ%btk!FH6}oZMu)7BxNV0V|ewI7}L>jw~!i= zl%0_Fqc2!WnTTymv6THll_eNclCl#rBGkstKLiv5G9t}8F@_{5J0U%Knt@nbPyUrT zF{UJCC#06WGtAU3h^b|&@iUT=l%0^_VKrG=8ITvq@Ej+_+C-AF6Ve&>q$$?c`Nd>$ zRU|1pA#Ei;WMkpjikzkFg>SFJ+DcM(LK=F|dyHum*zqlrl9Zj0&L^`sv2br7rt_Z< z-I0`}?1Z#Gt~?53+V6I5g`^~9C!{+~@&`z|lZ=f+Qj)S$vhG+E614-kHE8$2=Qg+x~&s5X9yU(@?1K8*dh-JI`ZP@QI>_79D z-`)MpKD+zn+xG0(x9xv#=V!XqPweCy1&go^nMB_~5W`v8&41!&CqK~KyYqr?QypWE zhs5lG#uQGn*4J1=GIwUhCeOnE4l7i$-h;C`(1*(R3(cbt*u7IS{acvO0|czve`~+tMTEF7D(!^-i8R$+G-q0)CNgo zUl?qM@R-(C!^m8zs36l11I25S{=a5`%o6V2KRJF%y7>wu^(VbAAgN$A zCLWuMq;vGP4MSY z7~Z!ER%1@0y3D_TbFZ4Dp-w*6SoMm)aic(>Hi=Cjk)$2*f_JcD`MeD z3a_n#)%Y=ntL=d7%7MqUwi=$yd!8fdNjEtY zk_uL1U87z|x>x)HR)fb>uo^8>igD|15cdO;)>gw4a0xb2_!x5k`)dh7`ag(3u8L=3 zhlNObMm0Evq=MC$es8ECCzTa5wSv_s#s4`av$loe#8XhgYV7}}F~)T7I08pfc;6~m zjaj)f335u9Xs3eJ_-WD-K`!iZ0%Iyzjrj{<-^6U^?27O{C9kc*I}6k2dyp(NDaRHh z6|BZ!_L@X|%!2)He}|-k)u^(cp=NCz6`DZi&1B!JL7l~l(fGJtkP23#$~7D>vsxsB@&OrMWfL5|;q6qg8l7wP!P+`o z9-WM&g4O7>nvM7X_H1ERqg~cJNGe#3PAz}Im`3X%4Ux3A8rm1X-(un3K};=k_K!$f zTMbA49va4UoNd>D>H8c=OciEI;)>N<>(?+)wgr4 zG+WyNNu&PRSxEke)yUlGbE`3mb#AQMI}6!;twwZ@=)RS@_UPY{ZFEcDRNxYT*=}Ys zY6Z+^^=0`E`*WGz2N{^C?ZrRW z3)0$ZH2HQ6gVsV!cm4iMqL?wQtwtrEFHfA5xFEKB%&<0#u_y(rvAE0;B%@~ZS&F2B z)u_1iDw0OgDtyHYU8Z0)-u2la$hgDcczI_lSdCi^;kjsD-wS7W*2H64TaC<9*~N_~ zQ|(D1Vp>~`*SBGpipSLdSqMkt&DvU9jg~s>(3`cblkS5cEv<%;rSWb-rYJE@kk(e? zW~Sc-d2aSbBo(ZNt}zQ4U)wx$*{x%?Q{k+}q_9m$x`$VPj-<8KFw*CSY~SpmM2DUr zsbDo0Fa8rr=gek3kW{c5jbYgAM{|0+7Jf`(GF}RzwSS`qEt@-mG?iKPc&(Ie$NWNuM4;LfeD0v0; z33yCvtKmxh8gd`rL#{-wq=K|Qt1(G~jMN+n!}a+{Dp-xyyCK^*$$Fi{U8ZnW> zbAo%vKJh44uo?r?Z^oGJ&Re)$g_sIfBWsJCNP1F_5MxN;tj3b*ae|z6d>!_Xg4I~@ zcBdfcUwDC}g4JmBXAF|=D#uC)()ybi{z?O982Gq#pGhrZDp-wGcZv&gQMXMPQ^9KN zI>pxJ@iEulJA|Zy)!3X9ER|W?pPTW_8?L8<)mU+B8j^(;E}4We6|BY-EftalM=y>- z(%Nc7ZW{-gcLi7oMy_689?2P&SH;n8*es0cXb>YtpMnpm*p20QW)C@{e!GS-6?{m) zj$*_+I`ylAq=FBrIvvib@vEYhY8#BCf)5${kZl{r*LKJdaXl4$Nd0f%1Pzbrs$8oK z##Hbj*EZcn(m18JK+@WWu%}>0L4NAm1W5%SlC!pW^16a;KOw2$Lz=BE$6~V4z{XJR z^Rmj%!f2c!!0t@ zR>6nFy!!!b>+JK3hA|a<$lzQMb0EaD_5AL8Bo%zfh<|EgOr!VaPDm>F5NBeD_a0(u zd1s5OqToZKK7D~P9eQ>#ZWVk;ySA}Nx*Hr9vx$Na`K6?Ie!Ayib!uZY?(H#d?|D~7;ol9LLqp;@DbNE)@z!+B3mTDt~Uy5+->bR}H?XD>|B`n`~s zTfp|3Jr-BFu^_EogX0>r=<#G&&0hs+=^BhQ;cPaICzDJpB1mi3&}Sa3@y*(Ho&)P` zvz^wi!FdyARFlki@2()NUBm0vF9rFKf8!93so)waR-P`%VzDPMrh;o&WZQwH``fIK zkW_FD`RaMwnXS?wBo$o4t`kc!rgPnsmPjhNhHiNvm*IWuX;&izNd?!i>mN1`o1}a5 zIe04bzEyAy&!4vvB>?Z&SUW&QaC{|e|~!;jhPK#-<*>QuAzU_B|&xzST4w2R&$?m zKY5rSV{gM72t1~OYdC$)Cdh+%;3PLE6;oEGP5n@pHnbWZ>{zr>i5uW}&I6(eb1_B1tXtG{j68%YJ%P=5Ct zBt6B~+L2Un4c8CBPBg!>-4~O;LQ=ssOo~}0$WhBuBdOpT93RDq_vBA|Uy#-(C^mf$ zxv4o1{W^9#k_xV2&r>j$Cb{vjn1>WxL-$FLgPT3n_IV17sc?eg#n<4DO!DCr@pMpd z4ZGj76>L1Yc{Qv<`M6bZ4d-@=5$`@Sw-b^IuHjgjg(Bu3k+lSA{a(nPQiYK$w6*LL zBo$o4+>LXPEI4cYKqM7h!=YC_8Cj97>;fY9zWf(S1=ld>$5I&6(Q9~&Aah#HeUAD) zI}5Vr`5Z_pxQ1~~SgG@o;25#?B9aQOp+)VpNNNpR4MS4FHB4V}2T8}2B2FX~Ttk;I zmR*{)b+!5l-mB!JPr)_3n7I#0B@TFgQS9MD7d+ZAZX>=+KyE2?qFb#P&!#6YVcDu55xFJYO)8GpF^9+*4rv=RfX>A(Hl$s#O zqP43C(%LlSIWBt0$g&Dn5N12AO~d$ZkOP_5cNqWXdy}*_4dt?46=bm{@MJYfOVi*= z)&3VGU4g&A+Jln{rlF}T3Q42x12}(flGg8PtPg65quLN9UYy5N zFb!vlIxwd5Xwq#+Dwu{5z1AV=8Q`jmq=IQUyCE}@?qmHIA!%(IJV7kgiXRE?k9%t% zsbCr|7d`hO68Yji)~14#wb;F>SStt)cnSV3B! zYFP6M&bOHN$}f3DZ52$zgjtmYIdUZ!Pdr)NYe@!mP3a5%9sbCuBRfQ+3c~xe0 zj}xTjsRkok=?{X;(Cr|S3Z|iH;A$j2b^j`jq=IR9HRvLe?nkrdBdK5-7L;Xqp4m?K zoaC@4$VY;LX{fNJHIkl^t^O3GwP`r=6}3UC&j z$J9D!5i1M@(=h+xcqAR)bzF%t6->jB`(hq)^>c`Ig0*RICA(qAn67}E;MRCM6-+~s z1!7Kc8JVggsbCta@A0nQ%9go;q=ISaH|GVbEpuIL3`G}-L{h;tymaf>PDk8YF>5NA zhCCA!F_L}H6*CRl9*9+qf@$bHstSYHyueID`yen4yl)ju!vJgoH(-1v; z4XZ8lh%Arpo(bLx;4u|U!{B=?cL)dvGQ9sU@RkQB6->j=t7>B3Iv01UhopjOnE9y@ z3&(6dGYwy-7pqhS)9}k5aMpz1Wya!{aC*b6?R=hJrhyX4*Nl_h0j=^Wwn`272!BH> zJ1rJT1=G-?fw(G;Mp5GaR4@&bXYIk-y2mv?iZK;T!-@UuTAJ;29~`_DNd?nzG^6*q zvhO5Il+7MeFb(tJ8%*N+cIFx}Q~!r)$Qt&!X_&$~Hi zhMH~r_w72^@?DQU0i&{h$3C)^;@6!yduB&gwb{?=zmWfV>DRkt#vvUaAn65|D6nd8 z_6A1M$_z{tSm8b&RLrx)1TFA8sJ!2^nKCB()K&ojsfIB!WlWa&WuUWx49I9f1|A-e zluc<#ptA7ir${EZdS4__#!DmSvUgP8LTxji8~+B$6a_6}20W{ik4@cyJs27Ator7! zkxc173HG)#;NsqSEF}nh3MBh8pY)-fnO0lHe4F_M+ip)%8_2gIH9^zy9?HDOf=qqw zLyo%v0m-0m;m`152`9hEYe5F|*`I|Cz{DRRCi`VmZPdZjzEL2S0uRj3~rc{8T9*BeskPb7`#xM_m4 z_IfS0!E=)Ltx<3L9zj}rz5Rc(l}kLib=v_!T6?{iob0xXC;L0D3DVl@RjySKNmt1q z`Pvyqf`ZqZbC^BV<6}v^(A z)D&d!q0~rPdp(b>0b2yd_fW2`KO$-E^*p)TiV^S0v><~ZExlghkO;PHHDeY|)>b4F z3SRHf`SwT_+*|ZljA`xl?7v@wHCPK+z1cUXzKP`YDt;G&BontM{TAL)0Y?%L`Eiw4 zo+}u^WAi3sZ5_Llh?GF#J*P2K!AJ8E?-+JC8f&Xy1b5}hFUXD0L^~CX;NnbTouGaD z?L3UBUjR4{_OR;9(-y4L=35=jLkST-nwAdCFKT_ViX3Py0?XgC+m z`_|QcaCVHTU<4-)Oe)BjWdTSk7{Tw3!agTUgxMIH9?N$optjaV&{;UuPK@cafBOn! zDj2~^V+t^m-D%7SmfqPGNd+S~Ip8dV*r;bla9o|)NGce?r>&V&iJwjGo)&8`1tU0n z4XpcEYRP=pwA14;rh*Zi9}>-=NFc*!kKpzk`c}aR-U)kywRK(&ON%iTjNq2+d003| z_5*BdTm6Nkf)TvaSKQgg)$JnjRycdqV+_|>3o-P2V zvv_U)%Ls1x+z2wU77(lUy)QX@j9}GX>@}y}(LLI-f2)=aK*_&eLmn;0k!SFt#Ui+* z#^&si{899OI&?HPX)87$&637EK6`>SJzFPM2l9GTB2zT;7+gS(O_by^V-`d7F|YTf z{a>R)3{%DN;)>;-)eMU(_WzM~7GPE!+u9y1!Gi{O9cH$4_uhj$1oz~+&X%LrVT;JhIY36)q_gFiT}=g z)36-DTj32WuhX4*6TD&N2x(Z3i-#b&Nzyv;?;s>KEQc`>vXD&%PT7Z~hUI7#ZwHZ$ z9#lk9!*UeddzQ$M`S4bk*QxP6snF^-kTfq1m_VfS>7|n)v61v1PL>Wy4a+gy3w}h7 zkkNl*Eg~IHFB#t#7)NA4+xHISyRJuyp7iuN$=kiiV^8-IeIRl&(qs!?rJ18EXTV0_pzq+Tc?;vYFLg+ z8N_a{eVtZmFBl|woz9lSir(N0lIFkjTOp}oIp*IRgQPX{*;*nUPcQkhq&R`3FZHaS zk<_ppR`h<=EXP*Ea@?q%3Q6Ck ze2~N?sbM)T%mjl}FF^bibo!slNNQM)q$eK;va}=a`@t&KZd>a#rV=6Ne#=fJdL=+qU42|?)jhVBdK9IR;Gh&8VqE% zWl3l~l_$|d2pRphS778)NmD9)`YFbQ*RoN zq=u__HG2rw^gfMy7D<(>2#f9B14DZfx%1>HBvrcMTfxy!Tw|!7;7Aoga8z#CSs0F% zz2xuOGPUr{s<;Pe2bSsbWGPZy^jAubJc+-PZ%|MZ%nN)~6L2N%!{gp#GvGlcaqpJS zaNtjx4JHQ|-Z4CG^mqwRP>CB&JIVwC)!DDMGQ4vHynaTQR5o7vNLH#IrU@9{H9YQ} zJ`%jI-T5KSIuah{3K-r!0^V!&9KxFqk~g62e3&p`c+Uv<-OLFHKUG4+;jcp%W(^qL zI|4rY+6cl&4ws@sRu5AL4DTBrH=0~2kGN6!M>riSKRD(O7~VfT?%h}b9wGM7Ey$aJ z@GyzM@PXlRD{+g9h?}2Nq(PjS1cna|k9(&_d5^evP^RdJGo8Tjq2Y12F;zU{?asT? z;;EHM0+2zW@%FNCK(AfGLOGrPd>Q4#QtQFxp!4i-1;eLAz~kI~hq(8jKCo9P=R9){44)Pr z_dZAf3k$pR=W5F39#m(?EEql`JZ@CZ1pY$eM*dCGF9Oai1jA=Vz>D6fO}M8SY(LA+ zGZn$`IT7%9#|t3t{pWFV#F>v^_}mD1#~SpoGU`|RgYYmZ!SMMJ@WqEZVs&F&R_Sx$ z+L@VP_`>kG_uor@A@05Z(+#Z7e#V92izDFu+CT=fKe*P-U^h|@9di^6Um6~_wsxO} zxV2z8{9uH{nW$j+@(6hKk;w@!nlJ=$W-A!JA_5-E4;xFe^XA{jWjukQW6FZzzem8A z90G44acjbs$5@@6&S3cJ@VGB1rC5U7xG!nf`-n4n!SFQ^@Z6PPhe}rWW%d)!3>R_d{=nf zck72Oi2F{?nS?l#91PzR9uK;lrHH`m!kRtk*qVZfGtot! z(;W=oA07{WHt;ESKKSwq+HPacgW(4w;B$QG2_IW!1XgF_gW-oG;Fm)nb;vm%d}z}| z#F_nI_|fpVdwbMjh`U#o`4MrZKp6g4cs%&b8+uR&A5J$9appl7ej+?>gzim+)s4SK zH{Z8Z3#HjA`Cwl0bg+yQkxuk zW723^+b}o6@C)Jb94mt%%ZMHbK{DT)5wD#I5{6$2kGrbhrKgRn*snPeXO@KFSHk1L zH7!_>i!dfULitv=5ofA|;n%|B+2;&tAxQDa5WZyM)lrBuU&8Pk;c;K0+Mx06*Tm;D z;}B=kgyA>CWOW^X8>(MG9vJHDS?evX1VXlUie-~E%9rHccPQl!p4<)_lFJ+hizkEnChod09p+!7MdM`d$i6qlE3ep&v zCNq-8;9TIjWN(?dQIVZ8{7Gc%)bOF(WSF#3klyumlOgF{R`oX`!+ed395ehJk;9Hm zA~H@wB{EFVC`hBncwu(!nnuT1uyT|& znVV6N-oup^BI(`Rs~VAET1G)y*$%Eo(n^20GLp>5C`j+}ffg3xL`81nX<_+0iqy7 zN)>#JWJuxEQ;=ltLqYnU$s}Qao{tJ8Mv`d{1sQa26|98o!#XhNRuVXED0|C{hl`-D=g#AG27lQ2gh=P#v{~ID1(D0P)I^dg4n@u2`_pm}dFuq^ z4SAi+ZYW6ik>{C^bng#^bS_CIHWXy=^{_Q|@Z|~nkz`IoK^iaHUBsHk!}MwtzB zD975jkC0^QLP5IPc-vx4SCeaPkYv_EK?XMo6mvF;*i90`qCxZ&NHSreAhZAWS-d|3 ziUXN_$*7q~GFPD>ecAHCmaBb#rZ4s*MkvVOO$n|-A`^}Iv-`^UBBy$i7(kdOYA4#idW?E}9 z{h%U?6)i$!9s^{Ze3~%xpdgL7BS3B2_hc-y2*c{BN&Q@|A~yjf#qQFDO(zxVWLZ1SZZIjBfoxeOXsB0G@ zd%qOF>F~9tvtT%M4kEif)_Z>{L!`4{n3siWdS{H-MWmx(Fyf6#i#3h!qdh0mSumXF zzZXgGp~+8)bQTPg>l{GR_$5(hBsB!Xl`*rB^qx!GlSpU5kT=RWBrRXZ8%SyhhOMc^ z1NiHwvTihut%hKzC4Y8JexB~iLvvHjk@7Bz2lrIuUm5Uy*Ze5fw7%?{grtUGXuTAc zbF!vYFYX>BH3Y+~34@88{ETLwhG1yh{ud&fU4pN}%e%~3Fjxul(2Tdf&r_C2XTk8H zS8c56eVywlk{W_xL$0Do8oxJ=Po%S82uYBiNO$`*NIDA!Bf-|UM8-_@j7aA%k91zv zn#i`vwd~0(?sJZ zGLGIKOXR*@gR!QDU`Y2oDUr#2kBM{^46Am+c^)}J-i3QWBFpR45DbrBLm;*9vfB&a zBB>!5`X{AN#p=-swr6Ec4Z+~8BAyptYX)wF$Sz3@!EmxMz00iqhv*5WAs8w=1xY2Z z(^snQZ&*`9Ff=?XmN;L@+6KKpodtuHF#2vJt(a|KJ3(HjhF}=e+$3`7Q&^NqQbRB_ z{rw@4^`m=`)DR3^_J)mZI}?tW$eJ30q5XmBRI_EsLn568L%o#UkPP|x2Cbwt1jEO7 zJCXFgZ+snVY6ylGE1C+jftZ2;K~Lx9M^ZyDxcY%=Dl5srJ&BOi5DZB^f?Soe&lTSQ zT`9+w9i&jaKZAEyiH>CO)+;|DsUa9XC4ut~vS#qRyl~1+*3=LT7oO2G-hFxzy^%Bo z!^0(=spj2*g|McxU@)VNru)Yus(+~^;QqtSO)#LRttf?Uw+D)AxYKm(W zf}z!}en@Hvh7GSD2}ry{gLMhK{tpL!ALtO_pwk{3zunQ6C)bXEmxHwv-y^;23gM?Mf? zgkm_Wg7kBRH~o5@DF#NRn$D`=*66UBSISN&(peR(oV$T)E{>5LNexx-Y-@KUz4sT$ zmzUYs7o_JLlqodHV;YfzCM3oZ#7gwhqnfj?iT&>AnAM-!I!f1 z-$?orC;WhwQFl1CUBKx*!jiiPu=rbGk8uL&jW39# zcl(|(NII(mU%)Jp+wGdxyR!IjwUE?M1%r2p-O8_@N}rKuh;&v3 z9pi36GNk2}El4`60)NbxS&{TdPZNZsvnmLVb{RH$8j6o5An4Oj8E4_y=d21`*`s{G zny&P{=$W7q`2Wgr0LkD(88%{Xoddrsc2}B1t{6rQBsBv6vwxakP4|P}WcY^b)Cm0l z&ZK92@aq?ev8G1gPcr*F)->at9*3kx;GgoT9+Jj5>qjIt0{_viafsaa@eq<4f&XUy z+eBW@LhDPe1wsA_b127=B)71pM&O@xVky>ijXVUWD=cy6+_m=JLSL6y*j$&A@xFD`8EIz@PtA*g7F(ZZ{+~0{{7$ z^yUpdJ`&E_%CXf5{MnMd!t1os)uDN-5%@c9drM^VKj@jD5%^oryg_86%2Myc*lGlR z>(V(Sjo_L^@jCx2@Gt!~@Q)N9OQ_zTSd$?_;4j{`QTxuFwIYAVfc{HYi5L9WBLYUH z&Z26R#iDwEQS?S7`A;G_A`tOJz%R4Q2yh92gNH_WATBwLADWH)56!R_h9XD?1mxLy zco~v;wjLddq$1`s(r8dSGm=J~#zT-)#C%4Y(VoR3@{0^TvbTzu&q(9m?c_w>Y7Ym< zY%=ng&&lAO<&}*Qtp4jPxbAG6qRstao{lRK$EnT33%PMbf&E9%8<%sfhWU?Dfb? zWVefSXDj~D3`QD_hKQH&*Lhp7(_dIq5%U>ork*$*Ni+Fy2(hxaikQzxV|lDINE(Y1 zSx72kJ|}y&gYygaUDh=fEE!}?Ma<{q`F5d1o(@chq$1{X@_qyPFdDe#C%T9 zX$8CUc5i2N`Ws0_%x9z-b=Ei{KMw{uDr+iE1aQ*$SPx0l^=>ngikQzxV^mexxv_gY zY`8dNX4hoD*TA(6Cx09RFJYTZ)IJN6ikQzxU!9S?ko46kkPAsg%x9$aaQs6gtvhk4 zrXuEZ^4F+sh@7!85Nj%8J|lgF$392Wm%k2;t>Q!gCl4LCOys`#^hQ#|d`=#{2@+V2 zt?xk9qu5(T%x9$4uktV?t)4|*5gGZ~f66-S|sfhWEbPYcgf;C-3J|;v`5%W2jHr9P2 zQ_ThOEJsKY^Ep}Z)lDMHFKmaTBIYyFldoD*Bt3budXQAad`7wo4U37St3Y3RJ1Am4 zBh6N$h9hY<`~4->RK$En8V?s_K+?E7r#F&{n9oQv%@;V`CTD_~()~MB8`;uMmKn9oRKLj3+% z(->VY9+HZf&q(*JBTobw18TZMbJs^w@dsEi(v>3_Y@*sTA?w&LNGb#YBdvk+>Hf6( z)-H*pLJ)BBh{uC9tpl+>A*m1qoZR~`6Or3*(K}lq2pDPn@;7A%W9V%9R1|`MleKOO zO=ORdQSCR-erVvE^^k29;)zcpVq_nXwUuZ}X8pmPM$x2FM0Wm5kL#XpKr+wb zaTE>}k)4r7wfJq3G)lP6VfPi0os;ig%_H(r8*rZT!WEI7lb8QCi9GfNzC~q|kw$ZaBXBt1Z60ij9Ov|cCt6G=s6XQXw?f~A#B?mYpgJLHU4M0QSgxCje-n{3#% zFpfLNM;tvMur zK_nHCos;jg9U$`2Xj)n+B0D3^>_Ihcy1q~p%K5jP&Z z#O2tEC+Hv~6_K6Q^i}Rr3rSz08x*`1k)4s&^@976w2mJpVWf!coSYo(ERjPy*1_H? zB0D2}IR}H5mDlOZGLS;BBC>OG=Qdc_+vMt;x3Q)ovU76x)DA?hdEOC8MPz5B)w#|H zB(26nMiLo$Was3wD<}l^e$6Gc24fE0t+OY+;E$oeTvA=$+M3@-q_@UGaInC zipb8%3(J=hx%UvoXGLUZWXRsJvylv0yO7ommQ$%)7mOciG zR9>em|JgWLQxVx2>G7|Ri>uM1WzhqB`q$092(sifpO04NRANVtpipb8$;7yg`R8kqJ8N57IEF=|? zosoe7#l$l{KhfAx$;ND6;f7BD)+R-`EOpEM9(|ipb7L&yPKl2(l3L))Tw& z0wfiYossS#si$B~ch@iFkW@r=M&`&qar)JD%`kFcg9 zvNO_s>2oE~+vrf!{nuVvgDE0ABVFnD&c*9=C2o`%Ybqi;BdzWunj&d6A9Nl`MP%pX z?wl!!{G)yvBo&dJlbhsM_T)^kme#9ykzb*J#&m)=V&Bb*{D%1cs8?)YxL(-V;i;kp1 z4KUIy9F!VKGk>iyL`MGoeokhV-_4fSX{LMnmdMD}03(f7F~r!|BV;ry4BT4Au@6`z{w5&&LMKmf~rJDt_C>S=RAlEd7Va2>mZSls{uxuMe~RyhE19U zZl*?3p#~Uf^k01uNuzi6&qPM91{i7Gd)XIB>sF;{NGj9-BaOOyKOkw;td;{wg&JU_ zC&qI>lAb7eX@nGNfRVoS*Ff0FvGx6t>Lk^?E^jwbZ{HZXu-ns@sz?}_^nEfU6>5Oj ztXvGjnO(Eog%L<9)Bq<_y&q0wvLA;NIm@ZH*0yZmgJn%?`}O=G@q5t7E7 z>GY{6)Bq#Rs@<9)X;!Mf5o>Df=HDp*FK&Crhc@Vsq(Tj_n#RU8uZUb*W-*bGf4`rR zW|9n9ku(zo4nuK3s(3W zNi%POVno{i&VS5Xv&~1ELuQLVk0Gg01FWWTpyWoZY3%*sUm_z{1Dve#0$#uN=UK62 z43#u=B3aXy?M54{sZaxqv~C^}OE{afu6Cr^r%(fo z^bKE`9ZBEdHjlBULJcs|AM+&5cz^UcSCLex0Zzu++5~I*V{}=Bq(Tia(%Ktb0ZD7e zF?yFN4(&72mnTYdBz@+5kVJCEE7Sldle~h%vi7HvVC#D%6>5N!S+ZUrGX3j$NGj9- zC$nArL}bQ7Yl(E+&CeNUWkMu#eqR$bn!HYh8eld3ofD-+(%&&wDI^tYfRVwSYeW;I z7+(>wI_8CdFKa5)03%&Tx(&mct^<{-AgNFToUC(SEUN8K#Z{|ACL|SVfRiKUx``Zm zY#5RXHNZ$u>y7lOcv|*Kgrq_ZFw)g>I_L;Fhg{8j)7nI#1{i5B&+r?P=Av8lOi-u+ zPG-4D_llXJ$_wnRLJe@Tz6G*c_SUR9c0Q5{HNeRMHx3fndr%T26>5NyLAkfg5u|u; zi{1R3zZFMPp#~V~_Pm*mHQhnmZy~8r1B?uQn5>{6#VCn+d+$DkGdXV+YJib}p1|<} zDhFhsD=|nvNh;I;BYjWW(X-F@ApT4w6>5Nyo>I%lh~5^1nw}EFen(QF1{mo+k*_9= z(2=WSkyNMwM&@X@t)nO>?opuzT3+gaq(Tia(l}Y}9@aFDUWN@xIYJ6Gz(`NrG2aVP zhu~HK<7IAy>Vu`;b(q0Y+K}YIw1?)}FB0r%(fo^u;+AA4%VL7S&X! z0Zzua@dJ?o+g@XD6>5Ny#^DMeapnDK?0Z`jNrf8VknQZAC5N34_IS2|9M>4jgVxXhnw;tsfg^{iA-FO4@qO>2QcQcrXsR4(#+X* z9+IXvLq;MakL;XGu?6=0WN*#HrQx85T{H5?&Pb!dr{hQ(HF{7`Q$%)7=84jWNUI(_ z3}Zwd**UqQP);Hjy;wlKjXbh*vh(~eM7AEan#jl_J0s0pOJE|~BjkP23`s>~XQa_J zskq5)(rDYOF_Do+c1BuPb0k92IujFi2IQxri0q6ss$>9vD0^#^-8B$NMPz5B`@^Lb zNV;Ep{zg&}*%|3uo}ev~z6C#JLDG3Q->g*Bn#T+@2$jBo*Bds;1zz55*wU+<=lE}y-J0p#0PpTtnjO#@&aYbZjq*?mS z3?$8B{a;~CMPz5BaXIKUlE#@wO^{SXc22IG_!p6j4^i-T-pw~--G76m87(tCH5HMa z)ik3Hg#A=|-hPa81beH9?2I%{yxdLXp)@py6p@{grtc%1e6jCrcdwXOQ)4&3acmk} zvv%XkNGc*bt7&YH3I{^%>s)_(Dv^;#c21Vg^O?xP3!EZ5BYl%Ho=9;~T| z?3~OnP3#eUC6gc7jie&7GtxR+I5U#gUvt8Ocil+E7$beX&NfBT*RfMvtf`3Xocy#q z9+7YEz%H76YAPZ-C%;VIPUO3&Tai>mc1Bw3H!E=c;aCd`X9 z6_K5jvDedk#TW1?29k=%&dF36!mcw($UP(#k)4yN2ZAEC=TOo+3yF+8vNJMglp3&w zA<2+`>WoKH5!o5(Z@Wh<&u!A*vOMhO%g<90*%=w!_KY|d9Hp5UrhwprIBFIlT=@4Mk+k98Oapplpc5fznmnkAUBi&i1 z)Ww?av=wOGr-7-utQz!ts=5B(!H-Or4ILwM|77dB0D24>(C$1@7bFEGN zyvbU@n_rT76St{^q{0wz!Lj)Y=ru_i>z~7UC|Ofs2pDO$Yb2gzHfgr#3QEr=BR2$` zEbto6Cdry+o>}lTv&qN}0V9nem--@U42;@}$jHz8bF%(^8X=>0Q;=kK&BzS_Cr>5Y zOf`?~gN$aAksAU|&RYF|$Z1ExXV_%qhJcY~-6b24G;5Y?i=@I3Fw&SA2x89uJf~cJ zN@V1QfRVoMZcjqe7bS=An09X!hJcYquNrHRG`hv5d8;r4jPzu7!JA+9)|2)stg7S) zDGUK4eP<7zMbdY?%t|B`hJcfK)}$xWUxj+BFa(_JunPQ??5(d&g=kn)VF);x_k2`eF;Nn>mJOGqjV0VB;$lg}V&wrdHi zWLZ;T2pDO6z5|KUo_!y@6OdFG0#2T3x0T3a;~x>}ys2-V$%UlpK9m4Sg&|-y&EQv+ ziOhZ$+@HKog&|<1@xD<-B#qboav`ZO1dKH6^lpfxS)FO z5%8+Aw+chRY8v-)A4bx+S)HEo8eh@x6hG`b+r@&luB@rCslR=~Us%((>F`A)6^4NI z)>pnWJ#T%b*8YT~!VqvWpb9;QtbgSn0U~>=v8lf_epKr1g7uKrZ8Gv-;$t=a*#{&* z(x2(#G9(p-;2To@XurHy{FxfJKvH1{7-`)q)){MBS6>|NKgMZ^hWaZjhYZig&|<1 ztLM%hRI~f)^hhcU0VB)c41d)w1YP#6ME7JD{=$U=p{XUI9EFa(?&aaDYh_KY`& z4BCvO!VqwBj@XPsa>nMaNGc2gBZEq9hQkX>U=9V9SWRzxg&|<1yX<1{s`6>#E;(-l z)>Ie*Mh5@W>Tf|-f||ka8l^;1VF(x*SR`Kq0aXApu#hzpNrfR`q(9E5)7V@8cYm!# zQeg-f>8be^)(PTH6Un*y{YFSC3;`qEe|L?KHQkRJH%3xn2pE}T;J;!$6d>l2Fa-Ti zcSKTQ2pDNRc|IR&8V`O8MN(l180ksfDV88(LrqW0Zn=?E7y?GRx)$4pHC>%97eG>B z2pDPIAGjY$EA;V1Bo&5$k-p&0?UD3lja~*xg(2W%)*vt;a^CvV{~ilTg&|<1ac3pC zB1sydUBFq(J6mB0IJqgYxIw>?YnM=VP~`jn+|<9479LD8>kmHj{SEAd^QL~@xWi$o zEXlkv^1`;N?7kwhb2YMR3e_~0)}g7Pi0q6s>&AwMp{!|EEO-=aI)6pq^rwNvr%k%E z(Bd;jn3K1E3Was3B zk%fpHSud=&kw`47LrEu&a^;MM0Q4ck_Wqx^dt<(kG)kyc1HRRcBzk~Z+GD*NGc*bCp|N# z5}CbrIwTd5os-S7^&_%g8`!{;cbOuxbJG1wMk2GdqKK!6?2NRI&w7WXb+B<1su_7? zXQZ)ib8aM!m9Iey%iby?J0s2J_aGA3v#&t`Qca4;&Pe0+u{uZ^Pq%i*nu^HI$%9r- zB6s^pFlcP*XS)WAY`eGV*3qk25!qQyGh?OqM5eq$dP@=68EHH&@*GLy&ct6>thX1w#JzCTqhdV={A$0~*+q=@XSraw)ePgv8RbUu-a$j(UXY;D*+ zmLp^xYuX=cYHaG4ojwFfU-3y4pB0gv)%0Z_v6;wp4c=i*MP%n>-WbP-v{sfzQW4p| zArEIG(zkF6khpk+Bovx-^|HPV#$j-^>Pv}YQniypm zl8VUANKd!3v9YG7Q#sgpmQOH6WM`zSOWUJJx;n%UKvEIe8EI}mLT?9i-FL9{Cu=Gq zJ128zpw*jcOr}7pi0qu~`(zmQ*6g_O3)WObc1}+EGKa`f>3Sili0q6ED%M+U9ot`B z4=R+A)OSut<_9(@OUtBCB349vH0fq=>b z8JP0~jjbZGGt&2^Ru=57?_FpTtf`3XjP(3G8s00#p{A!|FwF!-WM`!NPPBSh(|svh zORTAg?2OFOr^vse+;FIwqkHf@Bo&dJk;d%?8?mNw>Etma6_K5ho@6EAP@IVE;yM%E zqE)IQvNO`vZdMem>1y_bRv3!N&PeO>=fy}`XD-nyRT0@4=}Y^v8Irza$Ns_VR77@8 zrdS2rxAF<*OE3nGJ;*y-5!o4OT%Mc;N#jflHZ+iquj#(0X|qW{-Cnr5`LF|A7eyX`A;I*+{bSe%YPnE{M!+J-ET;qc;m38 zA)cOj#Koo`px*6g!lFsVDOwejClIHjEA%e-88tPzwg#tuwYXTpg zO-8=k&w6W49XX1~F;j06>8uW}m4yY29BbpuY>4r8O=oqm?(Rb(e_I4Qm^SIC4$SPy zt{`cqOBO_=vpRU4AC{GNZy%klLZq`g*y!qkq`9)>VYq_5f{u!NG-PzPtr#zfLMS_95YNm4@{^qEBWj;G@<2a$AE2Y%zqYpm(dp0+!Z z8tPzr+^b0X#>{}%mh7#DIykly78COG^zErq14#{aFm+NPB1ezSO5`kh8sOsr?ss;t z_W{P?>kS(T2RO0;b}Qs{8oNU2Q*l-Y{^T(r-b&IRFDgAvG}OWJ9s`l|{aP4y!R2*2s{>!H zpT!&5uIa1P3zi|0bXEucD0yEJ`Mzp7A|v1JXS2^gG&$%*`#O6Cf|ijrHPpe-E3hkL zlYI^jLeg0s`0~6IyIo(e)5uVm$jEp5S#N#om&1}>*7Pl}LA}*b2V)mOV6@3Wvu9&X z4Rx?I2|Z1GGdjITQbQdq=nNX%t~qUgbt0YB!LYXzkj&XTmJ3M@b#SF(B_#c4g8xNQ zLmiyy2~XcC3-lvZz6k}3(2)KCX=X2UMH zoI~d1Wvh|YPzN`%Tp;q?5xQ42)WIA1YsYrY$A>3jO$~K0^X>yta~aH`ph?f-A*rDb zmQQSjy>-tm>qpXA9k>d`28mP!YPxa{UyG!MIvCzUoJkE3_lr;m1LJ`@kn`4A9r&B4 zUV^>#*LmIxNey){f96C%mV}y~nI}O+%9_sV!1L3BKe47K|4&bm)KCY9`==A-MncUT zf2M)$8(Gs?9hk*`g)_$XOvtwgM5H7&)IsBBDFhi8YI^EMqo;|6Iyl(=4%T$-uHFZ0 zI;#U;;ni@)SoYSJ^ZFl1YN&%D_ds0PWbdLONNT8qK>=|7%qDyIL0riZa#jaszQ(~w znr5ZANdAX9NZt7ppyvtt)`R>k$-G_1!wCsVYIuT7 zi-acp+WXWwU|U9#8lK>ycrYM&Y6z?ZZPM8j{5Go?kqb}4Jz$g0p5SE*(1h|jjmH^b zJJBYcJ;A{ZknwDC_v5hMI(vdVlb<1JS_`LAO-D~)exLm*kpZ1xwPN?y*%KV;RD#Gq z2mFnsvnMcP3>0sfuh;o`Uo#>j|5gBBLw32p2uWY-SD*=HZ#6u@y@z2nZ#*u8q=qLL zKe#*A^o*!E7fB6IQ2bsXlKukE$|I@a30B^RCzG5BzJ&(@k<{=6x0{zI^2*#aNNRY3 z6>&2XxhNZKVal;}K4Rc2*|`Ccg_nZ?v`NP!24=1V?T|FRclsi!;R&u*fg?b2gv@ik z+(bHif);th$cBy2BdOsD@{fhBAiHMB)C)v9dxANxLqtyX!~0*3kcKCinRp11ll*X! zQj!{;pkeBqMAph&2T2W2u+Mvm$Q>rU#br$mPw+NmCy{?AJA%?omcA2`8lGTRk7!8xHcksgQo|E;yzC{i)q{&j zYIuUAGmjwYk3Zrrk=<>Uxyc!FP(XCrdzmt9C|c!G-A-XQ5KxfLw3 ztf_It;7}P4k$cLXLQ=yMENDhE!8dDA1tc{*!M2&*sOH-Hut6t#tKkW@es`V7Rq0@p z*Cw4k!R+L4c3957oD-kZyG+9qJnq&GN&lVHG`1R^;Nehs+qZ#rVDK%Io(uZB%X1VGq{v*t6D*nv_C}H#o?z#LrC8Iwv2HdbH9SGtNnZr{ zGt_jIEU_I)4Nowso7j>Ls0?J_xax0^)bIqo6ALf#_3h9ldp{&KJi#g>k047yP0#Wj z_mR}_1U0+B-kY35p2~F+AgSRA&OH!2XaQnxQ+R??vtA&n;R&k0rkZA@99|?fJVE=1 za6mL3)bzAo{t-zHPjIOyt)yIMhJam_b4bGzRNYO_K41A&Baqba1T*Tx&aWI>-}p|H z%QQT})O9zB9Cw)R6%9{N*`EqYvrNcN?CpPef(-G$^#meq2ZZW*f>e=ug5u4ZHEsM~ z2Md@cFkfvE-CYeIs2McC4$1$UCTNiR4{T{j&91PupW#3IBSBkEnwTn9-(6Y{y{aJH9_(Xa8|}96AoHIq_ZZtoFeK6stF)9G{HY{rXXp&m>v^*tDy;& zB!Ms?N60g~!zCm&G(oKzBarl0-q#LE4Nb87`j1HZwzQHDL%2>2P4K>I10tUvmpTMU z4Nb6jIs`R&oxZJ)7GiHTG(p|;)rqV+qX?1CnxJ&?+en&4)*M1oLlZpz0Yb1nZy$_Z zOr*0W=oJ%QG&b2u{w#=mCTM7a3VnpG|4Nqpp+DBt_$I>Y3LA-BmY@KV8k*qua*c^x zys{{g8k(Tfq1QyV&UO|_4NY*qAZ*6jBXoR4W+Lq`x5;He_vqqP61#_(S^Qv$6*Dv4 zWmdrW-biX_g2uyUQq4MvWekCNtMN^QH|`in8c+Mn$PT22CMZ%g0h0bahXb&;8k*ot ziFru+j>M3v32JI+g5gCWhS+ymztc2_G&Dhu#A1nKlm3it;$UwzzKO7MAIKY7)4w=B zoB)pTm+ptHU^%uLn&97` zpCRdgvw&)9Xo61*e-mU|aqk8MzpWmOH8nIrr$!*DRf}7pw?cllEAOn&bn&4H5Jy_HA*yw+?8??)^yecRmjM33DTz*PjLJ5w33f{grtThSbq|pw_+X% zO|bektxYsE!Rfo8pY1txwAf~>si6sKH=iI#ad!(%P%TY!BsDa_uMdEd2N42i#+6zY zo(US7V0@{l*jxXIJ(P4bG{M#^VrxH2Y3QwILkJvUkaxC*CTKksj{C?F@-%)!PcRKl zaI=BfSPB>oHFI2@Kr3SnP0(`BKCEdrDj$Nq)zAd}62rD;e5mQ^u|aMMz}RYNf_r@_ zUAb;1mm&p74NcG{I|Oh0z0#z!h`;vOYG{HLtK$&4D4vw7P*Xz_tY{90S?rn%x6lY_ zXo9BcuOMmGt?$C#{+A}0^Q|U;Pc&3$f)3(;K^fS8Mf!&YM*MlfqV3yuXy3VM#fDv4 z{9kNA(RMvWuSL!mwjjUNMtX$*%@%Yl3W-*>G^EueNI)6IAoSDt-GaH5(<7O8MuAL7 zYS@CGx;8=5EHnkS9%W4pTkxSgteEZVe%%5xzfC$HDmYQ=6p@GH<|ESC7NmGOhRDRD z;C*A)bhZV5r-V&t*<0iO!9XINZ9$zbCy+F&HGqv6yQZ@(2&~(I$V}a15b10So{bn! zxb3Mn7J|5)UXA!e}{FF93kK2BA_wlbvoMuGggonNi*uhc}Qy5f=x~D zBI)@fYg;5WY(d+4;8SF8{molaYpAUfLk~N)effar1EFwS00f}yt z&bDA=%Zx-0DVZKg4O`G4^ED!CeyTyF^Pz%WFW|i@XM(vkPAVidY{AYM*!1=cjatb#R*oCzAXplYLgNczj)+li!xEx4EH43fSZcc`}-wqRz(B1BHQzW{4$ z*n)y{U}MdGn&dhF2XN(eYS@B3Ubn!HYDTM+VH^%qEnMD2VDNoQN&N;C?#0Y$&zi&Y1mo+tPLH`zgk@WRUPwQI^Td*s%5|LXb zY{QxwwqWOQgUC%&=y|JQ3%b>#8E<<#sG2jraS~5$S9S+8%p^q}hB_Eh3#wL7o)w+_$gOm*onP&Zgi?n%YFZzam%5 zFcUOPL7ukfi1Zbd>oQ3?fBj%}Cvf+&x4z}Yrebe3OhJlz;%)KuIurjOQvuY}Fa<|9 zZ9&qrzt2jlIa1z5|FO&JA9b}XlKuf5<*Gy0yzWH$9wrvg->=tsvW zf3g7Z%kuuzFa-~;zd_P>v)^+fXF2wEaM@l&_G!47NM}>f`p9e~&8EM^LsG*OB+Ufx z8aWfJ_;UAAUZ?Xf9Gbtjffc$v-@O62nnABc1|1wp^gMbgTW zZxE6ireH{)6iAx=$|oYy*%Tzt-GIo1cS<6uVG5eZN{6Js{e-cO*4TLFK&k?DLnp;33la>j!5Z6vvwWqnjQhsbLB(CI*)xuhV~` z%XK6*Ou>lS|03xd_|G*W9Zi8hYJ>Mgeuy;&NexqQZRTwv&s=MYq=qT@Bu_5dpXb|K z1(DP+1uw5Hp_)%N!Vb2)vlV|R0sAUl&hw3CAer-IKp!MEOhJMP8ITN#dw)KX8m1si zDcEyq59>fz+SXH$)G!6pq8!1R?(xNjBk61k+|eGw&WRjbcR(R}#%q{@;CZx?a%Wv~ zA8Trug17r$U`@}8Axn^(gWBstaxNq77;AF-x}DQH$2479vXt3hMfHJ39%!xY@l z7Y#}C=J!32)G!6v%Fv9rG8l5t1+G)W6cp~T9BW#6W5&Xo8m8cI_F95m33DiD|J)Wx zI-3Gdl)EXhru)OL-;vZX1s&S27Nj`6DCTXOGd?6WOu^bO;{^m~3jzXHPs@R%hAG(4 zcPIAN|NDsZyKiH%`31W!p;g) z@Uqldtf^rNMkj#%ELqbWdVDXE8m3^9f0ZB;KuyoMp(~JdHU;kJ6TxuFnyydV=n1A_ z3MOu+b)Rokl6_cH!xWsp0Vlv@P2bU*d6CpG1t+`4B=XRi2S{p|f?)^fnP3iR5(CNq zG6mbdH3h@O;D+j*D@Yf?6clUNxyAog6*S3sLtLy7=Ry_Ky?pHdLlsOYe+*k1GOFPX zaq*eNN=fHX!S0kIR@r^XyX6!tKqaZ63cBWri=^4?V=g2$R6*J_uymEzZ6%MjfJo;< z1uxniMACem7!K>n-a7wb2xh*0u;FBnb;#hNL^`ShGr^6|M8-Nhn@DF>&@W{&BD)oFopCR_s4vkt9hCRZ#Yiib$G2)uzu=<50oA7^9H% zZF>WOU)I!61v$Q3ilmuo|Bpy&sDc|a>E7{NTu5W9aj0P44$#taCirLmyoG8ytAc;F zH9*q$YS?)sHB^DoARm(cpg5V3)KCQ<;F)jt*7xdn*uIuyt8u7c@}kK^j_I+8NM}{h z_n&b{n%z4zLQ+E&WE=egNh?FBI%p7WEPRmsvy-i2#9vgBqhrusi6w~ZulFL zLblQ~-dPp+6TAwW2{F@CO=nf$|9*c6*7Qg5569kWsDcMY+aQ_q<}e5`a%?qJLCQzh zkqk*z;wF+Bsvy_rw}R{-9`pe&GbKH#HB`a!9yPG0dqG-yBWb9Dc+Y4KxntM(1AD8X z3i2+4-wl;B!R?y^TPJdaoK=B0%0Lk-ZPN4U2pqDMq=qWU+Qx^ZJ6*48eLlykW1XK;k zz%2_7A*rDX4*vKWd+Xnwg;wJls^DsaEP^ZtH9Z%PxUi;%DwsEjJ{8aOo+XfURs}%; zxqlJm#A-^Yf{(w@b4WuK%sG+-uhX118&saWS2R??oEETIm=J1uW}I$}q=qU;_|Frp z>5kWPGLjmqVBv>uNc!d+YlozUD!9|B43XE$g7%izsi6v<%>IGMn_Ffgsi6v{xnP9k zU1pBow++evPz9Mvf2#^W{)7ru&_n!hKk*;?uSmawkST&H08Q|}=z{K1W{PgFgIZ?0 z_S3X=!B6s=sWs%kFNQ22V93H&IkBZ7v(Bf60l2KE3(gd3jAY)U6AK`zp$kT4hci8P z?+3p76G;tS;Cb{2Nh|xk*hD(&0xMc62;g?je;d>y()naTrPd{hEHzs$v0#K^IO~Fp z_d|(HdGrUW>8uOJy$0WA_jdSu8Qo<~XI)TdFDMF|tU66TEF|fy3$l2+B59==TNQh& zp$i%$EQF+4qi7--!uuE=H#Fp5PxPQHFUx2jf0W&Jk1XK za&}GUlLZ@+!U95$t$#%taMO}>{tkja!TwW3#wxHKNex}_Q{qiT=HFfpNoQT)k2e8M zciFv-arGRL&L<0&oq)xeBz^Ns79rAE7mUvr3rTato)1WB=z=`EDwYI_rYq zn&(psQal&LZyi+LWFR@w@$+==_>S%s_lAFa5}8)6D#aF3fZ`9lD=Bx9CiE`T z5DjI_`Zz-FqCddCxts|aq9N{Sx>vk04H;x$CTNI;Tn)xjO>dJ@SW`nZj9ew6p8ZC$ z1`nEvq_b$SVwa%nw4y$haszs+AsWi~W>C$dO9QZ`hG=Nk>Nt`0Zp%#&sHq_uZl=j0 z$W`!(2VGg*7HevVhHM*?V@*$*_cTHpqG9NS3xcc(HC+SVb-|h%qTx`5(gG4I8zCD0 zTo3!nat>*ThO6sOU~m2BvgJflLp0p)1}jE+mw9fTJA$N!Xjpr60@n1b=oBAG4bc#% zuh>Wn5ZXz6D&L)_ceaLTSks1{VCM42qp_xjXjsi>p?YT$GDHv!Mca33*R<3B^;E)$nXw@3rH8BsDa{topwpX-bI4gUcw=>siljHnWC*m9)Hs!JI4j5>ITQT5+P6Vc zLo;OVA|4Q5$<#~SNNQ+?T1~~{O z`t6&Ebk+>>KZ;kXUDKSoyaJLMnxSkQIEriE+2SXuh;-Hr=i0%Zo_&8Fn*zF1UZ;j; zSP?rmkqdXgYt<$lHG>r+!FeJ-|1=g!XU$;6sL>^i90*EI*3{4pM`BwkI6SNK!*HY<@BcNpsCQ*k7|r=Tiw)Zk;5u%yjWG zvPliiuwd6@B>gk5)k0E3GvvGqQbdlB-#h3ek{X)f?kSKWlJs3)ya!1Q%`kc>z03SV zmhUIhQ8R=j>PYuWNX&!nkaX4zA&JW`!`_C(sc{cU4bAZ9_k)r2ZCSCBNXJ;}FZ6sm zlK$MA79gpi8B#_`Ph_Hmp-5_IhCGGBK2P&QO(ZomgXe>XYG!R!jL7>=Av)I&=|qIF zXF{&;Z`?pqLo?*|9Yiw3>x0u5@?O!<42^Qt5M-wS@t3P+=u;#$G(+O~4u($3b!|xL5tQj)<4-uK}>Hs7)G(*k4xrwZ@sSc7Fnjw9yUPyYAPd|pF zhGr;}b}N$ZqHF#@QbRM$c8TY~*XQk&zTJ`3&Ygx4CBYbT~-Tf zx<=;(2`%px4b5;qZD#?A`$cGmQ{Cersi7I3Zyt!f^*`)S>jVwW@N(W>LCU+#^Q_Q2 ztf`?H4*WD4YkGE7^&zRD8GfuOvSEOb6yj4!l#=ch4b8Ck^C_%pZhJ-V6%Ea>t`MlI z#8A_-ItqO%8k)g3I3d<_yW3L&(9jIWj;=(~x9{Tz93f}T;E#KdRv7*mwdl?3tQq`? z-u#I*{c*M*$C?_NVTaicNpqb%Cnx9ae`toxt-jR^W5wWx{;%g5inZ+AxKq~HYO z>&sWB)Ho#bl{lCVNrlc}r1`OWD3a#;j{}iZ=nO_$%Zm7sv=+?;e<^#b_&o+r4s+)u za?p^CL`JSN7-{ZVSqw>YXW$tkBi9+6oPPEXBB#{YOJw9agOOJBfeVqe0y118GIE{4 zNb}U)Pe_`_`%WV=a-G3QYg&I;RLPlOP0rjLNrlc}qiI>>_$?dGdQ{Lehwn{6mub|&>5T@+Y1(t@;dz^yV2Mx zbOt9gFBn5)`Z@QhX5>19k=A$l>LO`H4gHLyLT7MtZ7p~q+Ou!fc!-7aQ&IdL11Ce0 zza`RK2n#t$Ds%=XEn*~A4eL|Idz zGdStWb(+Y)5hsvT=nPJduLa*pw#RmK`&&fX|4#UQPEPL68imL`J7y!P&>5UeIbSTQ zzSc|@>?SgDoxwEAu-ooLNX+}Meh}b&S0c}-Uaau->>(| z>|NQhrb1_Mvhw(XM3(P28A*lCU}Q+NeDvn^fAWLalGmyDCp&TLqlo~Wbic=Ge%+>2s4{z?U#7ox5RcSqjSQ&XWc7#Y0vU)V4avtHB(t6#@>4TO@1dba-G3Qck|>BoaNZMo7RQx9r>v!bOtAvU4^e2+T_v4*MwyXIBNpG956{A9DFw(tp3rGpO=CZf+j92IkM*5=N4o1=!5WEz7tI!#Yw8o96 zIb@A|n-ocf&fw&MSnzqu-dcN3(K5*IkA+6*_~F!JZ+o!q_0^kn7L! zNGfy&BR$Jsyu_NG#h3OWsn8jWbe-;WR*(&#rt9PydLt=x1|xH%+?zl^^?=Ng`~#e+ zlXFO+GZ-0CXDdD9L#ls)O&UombOs~6A;V#8Y?WJLO)H~^u2Z2i80mSF>x>{%Kuyo9QJJu& zLT512J>mkb6WqgNfqao8q|h0R^yf-26MO5o8m&fBp))wyt$rdRJN*PQP1aQC3{LjG zMl-?R{pBJg6*_~FR-i8sYg(B{)00}EGZ<+;dLlHDeP^5Z`vzgn_l;!8kFa{P9SHot zzlMDP0>V^5z9NIWi}tp_XO%Da#;e$#BDb?&95UbJf|a%;&BvcsA*smijI`!Hg5)Gg zYwE0jh;%-N(D&0-BDbiLsB6G!GPl z6HD?wP~>(-`m3IT6{!3?{bdVZLQ;|28EO7@=pK^h{EuajROEI>dRxZIiln#RGEn`p zw~E}($dK$Sh9Mb}?qW+M6}g>}A~$D2(m(Kzct|R8J12L<=|tq((?yU}m0PL>`Jc7GOL0zU#FKNUr8=j8kOkZ0|he_tW9p~&rw4C#EgB9bAkGSK=;k=r@h zb3$Aq+c&w1y;bCPM*6dcWJJ=R%1Te9^D%^FrJoWxw=Qh@$PrTHc3!hj=95Hr`jh}k zMQ-Qh?0)pl_D`($5J^RD=j4Q1lc?s1&QFPSK8Da~0jwkC=b5YJ*hWYyayzRTGVIB( zNQMl!OAcC*+ZpLPaA1TW#X3x+m>oqIVogPEXJqiE*hd8^-uNQ7|1pcwnj*I|(qlEM zjlJ~*S9^~&HGWp1@z3C4%W8Yka|)irmgf>qAZWeviCP>)F;pNGftWCx@FOiR}B1-u8;z&dD7^ zz^2$W*W6u>H5Iv?lc%?ay&aBJfJ2A!{#4|4Mg|A{E;74)m>@XIUw38o5Tcu`Pasf$2Zs%m%m4mRRzwvwr$_^%k@ z+pwbM*o$qL_Y#2UkZmwYz}lDyZNM+qe$x+Y)pd9%Zib7t#-`~{ZG`Cp)`r}3i4~!Z zQ3+tf-)^I0TzKHv{Rk5Wtc|JAk2vAmFb~c!unluXjkMH8m_lG}Oouk&MQG#K0WfK0 zKg_|q|pe8dw|ippB&A+c2*-TZwH5(cz;u!oK^! z+E@T>Bn#h$zxkHb*oOZnAH+C$ElfYKHl(FX5xxy`b9Z=^*`LeoqMfk~CL&lHa&4C? zd>h{G?O<6h+wj($dmh_hN`kc^*J^3Pw-J&v|7UC?BxM7Lhw@sOoM3IhSAVjk3*Ux+ z+QvlKhQDXB5!eRP6s!%IKr=*W<49{*?#pZOuUrE!OW6-5ELa=T{bh>K#-uOsBC^}) z{sc6F-Nr02y!`?ou(CG(fNRMTp^Y2?g{Y0V1rtykVG@J2u@>6M7QPKDuID(mVLsnK z3EN;ggSD|9+6au$#->uBwB@x}vyvX5Hp0XPYeVi621RHiU%F@1M!LH+PnqIiZES{q zxFWQXcq2Uv&3D(MVL#X}L9#ZsLK~h4ZM5tBh5At?O*w3XX%E)Mc4)(h&_zW+K{JY{1MuidL9;a_UF=bLUw8+Op35J z_Ch~$Mrh;6m*&*Qsx=VA<+U(9!rG9#Q@JCwkv`oeY9o3gI;F=%32OtUPnNvl+c0;1 zPtQ|xUJH0Y$bK+o!rC|lZR8K%Mo5BdYq1~x=l7Ch8%&!GsEH<2bZYG<+K&vFc`^Htu^eP#a<2 z@L+A6gf@ytXk*|!&~5TsLYhpCjcqW=!rGADr$mG{h6ksmHd^MdgKaR~!rC|s{U{Z_ z4S((=*Rc(M(l;NdjWF@T+JIL_mNF6A*l-$_koM;?BPl%Wev{5cX8^6qj z?E$-umYpGB$~KscVQpN7HY!ADjn9q5HkhhmZG=J_Rl~OtGWJ#jY$K#^HL*sv$Ad{5 z*2XPpqk8x@TxUXHp28YEz_n@GDQtu38`j1hXrpHMHaxlCkHLO;vLBCuZ7?0f+IRqM zz=?@(*2(Uce}b@(TmG@v9Owq75o z@Fgm?;cYY~8MeV>4Qt~Ww9z$sZ8Jd-}^k@^L_Uj-gBzEtE=n0Ro%Pk zpB2TZqxYKSp?D zhF?VtabATi%(jEZLMD1x3>czvcJhzm*svOwZe<^HOg4VRb};3`V*CR!y7gBU&hV|bcgEr!S9 zDS3v*btZ&Zj4vQYFaH?M{FxVv7}cR2&U}5KK#}7qQ$s999Ei~;AclJdyk9EMsWat2 zWibYmL@dUa5Tl=e3|k``Xt8O~4qN4MBQXZkMJ&eG5MzLU40l8|y7%2lnrFZmOdPQo z(0y_a@{i$oa|Y&g-#|MY530Vv7)&9t7zrW95dRqV?;3T-^I`ATYzD?)GKs}V3^9iJ z$IuI1?2R$>3?)EK%Im_k5{m(4Ma~fcG5X!QKrtHLq~{A0Oe{unh%qW4#*q4hC`R+U z^sHp6iN#0>F~<1EaN9jwF@`&F9N6wAkA+Dm79%yp80Q}&@@X?zgpqwL^88)$A51^7 z7-=BJcV>)$4J5L7lka>Ce_bs?1Qi35cs1qb*D!L)hK2t4ML~Ox`A8N_S7{)UOf4zC zwG?@y_5&m%Pdx33Boj&s(mkph>{5`eb$9DIl}MjPQju+2Um~*7P=Ajx!&id_EjA(4|7!wwL6ZkfbUkzLAw?l8}7LmN%uEbKb@a*D9VCaFDt z=BAuJVWY?ydH*!LK51T+i!Dnb$uy0EbWfc%4@vjnC|H}8$EkQ*gjsoay3B)#{Awl4 zBPGd{j3Q^`^PDy$Bd<*^NMz_;ClzaVM$(cil#M8t0>6Gf6g_< zoRJS_w8flErl`o-n(xjYHI$x6Ora=9{ZUj&%&A|z-yL%@aiSuJe1v5I^Iqw&7iu$k zhL|o)wR)x|P~}RJNfH(L+o?Y&=b^vBt(&AzjVMS@gZSf+^pxJ@L6Qj(71^xU zKq4zot&1enAPQ1XS}qTg+CSZ4bx^ie@wN!NKlRBu>LIE3JEI}Vl!q#3v(1%>tlViR zl1y}{$Wcp%6WQf?b|jhJP?3Fydx&h={ymXCsi7dfjgqWK(p&ZzxC(iOn95L)o<7D9 zBt0<==!wJxhJuXv{tAoWFVC_Olc@cXQOK=k#trnQx0=7 zk)a^%lNt<0(mt?PaU_|(P>}9Fj?72WeQM5cNHS@mBD)S^BlQrvDojw5u-9aG}t7k@t@J;!u|g7if1>4mNJCAN|n;_*~=1g4x_BY6L%hZC3Ok5W}3Sr)5f49DiBohh>(pLULEOCfa;W%vt zDi%PJX#@r7j#qF7=8Sy(C(Rg{JW!C1JL_KyGBxCMTv*i-b24S1Anm;dL2)gQ)871k zQzV%vP>_1+-gS}GzxbK%Y^DcPWS#V|U@dd%B?`yGoJ}A} z^Qdx-{Obd(Qpldb1i-&Y`2GF=dIQNfiVY;fHZxn`pD@=Fku{eo4t$2doiG(tlsnY_JcC8H++sSQ`Z5KZLlkV6CO}XDwBQt&yhGqh{iS{|M`X3q7G zen--RYk0Lt^h1-3{L2m1fjqYs-f$Um?F^E7uVy2WwBQ=fb`~xDoby<|{YYAH4dd5N zLee=(Zqbpgwcr|RWId0hr`+EDl=Hg0|6t?AziwaO{i<)ALRUp!T_hip7F@%fEpsua zeq9H{EL&^AHLQOx#(wh*=_}UHBGR`_MAh0-iNH0;o}d>j=p{0wYjEe<3e~&WhccJV zf}{o4a5_HBnoaWPujz^OZ3I!Y)?GX6Cn76v21h2(P-xfScG&5vxN~2ntHL&YsB(_H z_K|W9{4O=-wBQ;>oJ&Py|KTN(wBQ=b=blDnvAL;`wBQ;xb%!UUd2Uz#2{TxEhAez& z^Y;3`h`d$_YH&%0b`9?Q`4$86zsVY`D+*~4a(L=o>|u($B-iB#&`>^VgK5)Nb1{5|B5*+xQ6cVnM1R+dizl@SCYpW+BJBxA9#wSCtVTP#$}SB zUBlcc-#9dN-ytL|xQ2x*=q~fjN=qZP1=mnB>lJLRUZE4r>||>#xQ1U=l_c_b;+05R za1Bee(?rg>S^-H5uHjI-Hbm~aT^&gau3>x8wnT2+cZtZ*u3>IDnv;2_Gz2pu&yWSz zuyo;1nA0;qdJU2mT*Kpcc0u-mCr`xPl+@!xy9P&{<4(-!sM4em=Coi8297<7q`hZ; z8ci%1gZ=-EB68>bv6$0>F&LKOA(GAkKkr4-f-yL8{U(z3LqAPIGPE(!vYh`4NiFTp z1xQ*j2J4qbBI#aH4%R_rPq1JNZq0~I8e;T2E~4Xp0E}A zPZ3vxP3#;icnf-$IIgZHrIv&>mCAze=k#-LMfu}&E_ z6LQ+xR_KR0Ef|B6MZ+_W4K;~Dx7 zW02eZZ(|_dkq^6J?XPlVRv3e_-CJ~x>E5a9f0~0qKZJ=-Wv&!cnZb>UiT}0AoV+K2 zi|g*xyMZ`$`{e&_HFTCrAH?$i0A_<)5#mYph1}}YpmeEqaQp{FGh%P23g|NTHg&x_rN}M4596V z=J-w&x@Jx-PYO9|!O<(ei^=A++SePwZpqeavAVjkwV~~UyIilIk#rXuJ%-4T_Q9R) zaSIK((XuxwhvnB!k3WLlH~40WXPQkT8V`J5Lxg&tbNEnWWhen znbZupPmk(zpr5=C|(UoBlgeKheF#2BiS-Bhc=JX zh&LB@smgO}!9E}ye}nyq!@mwzEq_IL~SVbqOi zB(=efr4xeIhPDq{s-YK%Ox%mcq0sh0D|>=ks}!xN z)Evls9bYHHoEGfEUn}BZYd!aJiQ3H^`z+Xp+10uVvOeT=PTNRV#e#j<)UOiebgqdd z>s;tV7VN|3gd0UVVLgO>*wB^kYzy{bbJ-P`)4e878$3=6_MuWb(FmF*b6T(uD8|3xT67dMK;^y#G3E>mGfl&= zrqJ#8!)bE&|71SKtZY;W{1Y0hFJ!_iG9;f%WU3|5J7F(K9;))HSWpEO z6Rky3E43*(k)c(=@wmR;cQ_Y_4Vlw|Dp)>ay za_XT-T2KXRPxnI7y?iH)x1nE(a98M%fyk0kt1zbpRj}&9RU|!&FAYS}f+{Gr1BAJ} zo}MC&ok&_x1ux;_ZYHTeTsj6x3#wpY%fU!`W<^aTGUP@DBa=f+m(85UHMK50T^rcg5}`=8#7 zNZRlH`5Z|Lk|9UGMo2ocI5HqNC3Vz0?aT96FYE*(J9QK2b4c`ZnW+1a)u zsZH5IGYkuoA@?t!^5k8nWi6WrTWdiwG>8Ry!X#^!pyRY483vpe)Mv8SNmz7|z0ZPV zn7_G-AjP;Kwm8f_1AOYPN^`bv&30z2S++K`WH4eG^Rcy_cZX<(VL>u1y$pS*0pxTpO0pSqT96C}x6^aQxqA&L zXxUl|l3~xt_adEWv5*WqcKwB<1<7#aWkozr_uhZHB56S~)ZI5kkXb~^FlUV=G*X9_ z435~}(s9~9C4^U1@DZ+e@xN(!J>xEXhmqKO{q*>i?Du!^O$HA+|WQ7XLj^{Kx#ipkLL@6tKmi zdao8OI{(ic!_+!3gA@H1zGGQ+kR09rcaCA_VPP%INF%n~$qmPT$C_jKduux+3%+ax z@=B5x9K)tn!d-lB{pwkA)&V&!IEI=pp|X_6tyLZ&M>R=?b`0U?LD!mOu0isim1Jng z(0LmufAd_oxw{&VGj3?dPnK+*;U<(6ej}B0C*f zNn~ip5Pi#cZoLm$A!)%e^uKeDa&})S=Vfr5p|>M=lE-U|q$k0Y?U>VoW2hhFJGV7E zoIuioW60BS9OiUo%lsNi3y$ILo){!OH*^h23yz^weCmCk!qbGrGq0xw$Iy40cru#3 z&(rnKmq=Q048>oiC$iADu$@l!AqyW~xc>15lKRELEr<;57}i$5i==ybPC0jgo?yW- zG(KDhNv&?1-I&wDhZn9+EsCW3!j7v*T5t>pGS?+?Xa8(OhI9;C!U(!5THI}NwhYG^ z+A(N};`GFv+Lv=^)U@Cj&esRWV2(p4f6s!gwcr?{=IumM)9kZ|4DA?NJIfInbAAJo z797Lw-(Mo>-gdYzK zHaB^k797K)hfp8N-lyNG*MZ2;j-ln<{z!V7ls$^11;-F|12*8uoF1*qPe@vD3=OK~ zA+qL$Pe@vD4CTi_m1pKGnL9s`p&di?xJ*dq_onKDWN61=#M5DsOXf79K*75!!V}>$I!$B8*t34Qn!3DBrQ0G;*;_U66&lld*L0hkwNxb3yxt- z&3XcoTOjg{SaStQ3yvX0%L&+8BjK5bNLp|V-{-q6NKr+L+IvkWn!QV_l^V4~1 zT4l^>!7=>w_d$_v0pzqDcGA6K!7*G~1?ySzs<_YmN;4@7j-h!E@Q&iSEsnFv{HoYm z3y$HNB{Y+AB=vlUqy@+DBuz4Gt$u&Y3nVQ#hMbT4A?e91Kcy%8kOjwJ`~6oUv+o*; zIW0JbW7$$5={|VkJ(Bt%I&|*Ttwr_LG0j^Dd8FLOAYNjaZ!SWbn;8x? z0gZSFF06aU3D5tBXt-DD7DgIz;};m9^7a%B3B8%2P@b_aBnxHD2m`SsEr^C&&kG^x zzE%bXC`non4TFCEfTY$Z;SM50i-wvns}Wf_V_YIbi-rZeJxID|jfVYiW@|%>hOV>V z_A{?iy923-3@sYYXW2;P@$O5B4856QLCSbU&PoRZvDw&vT7NU7DPkujMQ&ET`s`Vk<4j9G_00?<5Qkn&(ab$BrS-B zZpYo&T2F^gGl>kjnZc7}(orJ6dIN$?wl?(N6?I=qBp&3Sd%~IGnUJ&~8pa*FfuuJ4 zPgpRJIYWyEE$)x8k#v7d4U349v>+OumxD!Nv)?|N1-ofYGPG#WBX1+A*_)F4 z6oSPVnNxGjhB8{_v>+NjX7r6FZ>pz9(t>Dc^`rvjYV588DK}zH3!526w!Vfr-GgiVj-&iv}o|8OZWwno)njQ5gA%EOfFcE$Z>xzN7905Xgj?Jkc_mE7DU6i-hGH1 z;eo|9*%K^?hJH7f64_%N-Pz+qi-xZ2K&Z&8lD~bO=9trhXvo=SG?GTv$*{~STWdiy zj4b(9kV9b}Xdm2%#&`>&q0yW_1t~+QqVI*yNZ5*czcgCkp` zKZwkj2jqs#X+bo^)Pka4o?A!#8C{SJEgD?kT)u*&D_Ip-ev~;ah=wU+izDe6R|+<5 zNYa96xEik_lG^z`^N_S48d}|lvP&MP*5t!}BrS-BIUf@eIkhbHJ`18@d-L2xZtT|< zb6OA$M}C7dB<6lXG#q#ai(2vwSr84Ax6us4`E4GW_gN4PO`=+foNXbey+JcjYci(= z(XeccAj71h$hT-yO(ZRdhQdE=!82s!PyGo=3!>pv!o`AY46St@i`5s&(4xT=_M6yt zVfF;)yZ$jqS`ZBnYQz!g7C}ziod(nsLW>41cKB<|>Heqbddz7-Gz@+Si+9-}r?dYj zcppGs6$_%F#5y3&J3D$I&HF-&22bVzO_B7ZZjcjmS`ZC2-LSwUb9yQr@*rtJG}J5G zkjSb%qmi^A8eU|%j->l>t?5YqhiJ&#=$up+K*kB};t+nuNh3{kEK+?VH!et^uJBDFB zjuYAcE>s0(&d`qGPCFQb&FgzT=W!xKJBAITOA)zhPF*5HJBEH`;rV8sp>C%~A!)%e z{CEqN>dn?}>Q|4*(2k)-p6*C`D!#anqy@(?!L+Dasi?3tkAGIL&+_g^Bo8_jQ_^oBc#ec8h^_Q?-OdWNshj-&<0uxN5>%PzTM<1k`^4p zyi~BXD|2eot2u}a`ND+u%?Oy$nPigPu(4IPHnd~V;@pJ#P?GMCljjf_+A);QT^LEN z$kM4uT5t>%F3%>i*iHDBscda%$Dk#x1|r=&&Ujm?4_R;wy|Z;BvdcbLYLGcYf7wx6 z_T6J5=Rbp|u_P@xhQFuMUFLpS*h^&S%?vZ**f6JiQVCellQ}~>1|zIUF(f_jZo`~c zk`^4poX6lg<+=4t8=eG73yz^e2dMW=vQ)BuNLp|VZwF2%@_C`SM26nX&|^RiB#n;w zV4f|H(}H8@@1~L3=vJf(k`^38M4Tg-)069p~Livf~*H*M9aO!k+k3#F0bf~t#w>@14cyl zzR;T)9Fa%T5gE|~HpEEMf@A2Elb#Na)?>g9K*UtcZgi}WC4;E9K-QG zu$@`nE84*_TadKi7|y&G6??3G(1*fLHiE7Bvb7c*!?NqJ@ki!#E*Lr-NehmlZL%kV zYzH~*Ek}bTl{qaqh7Hr=3aAZ``PMudfuse;P&M)fw$>h#}L^w50W0+nj1)3a15;LGe`|(-&q$7}wKkSu zL?Ij&HZoJ{8voPmkYk>Nq%$dWzqz<>X1GF|>dE=@e9;8vD*~EO=+YMGoj*Yn3LV&Q z-LnLqfD&h+rjn6H+Kb7NT@+Tzy&TZ^CBDXMC8nK4Tyxdz1V00AL77}ny@1H0nPq2} zWN2lwwO0co7kw{Pf+Rz4%Xn8nXjSuI-FK4CrPhX4CZ}@UB654(hD3%`CYpVE5hS$? znKu#{TA6&R32Ied8uz2+_lOLwOpY|DgQT``{5d2;D-*E;{sofmCy$2{8Csbv`DZzj zp7Ae7BWXdI++NueN%xugMUb?hOtuU?~^F;o0Tlh_rw4h8b4gHqLeHnaYXl2s#`FtW9FPum@L%#o^ z>8)UKNS+}ryK4rL7L>`$wmXSD_w*5wp_NIKbYBx$aVspE$a8B!nN%q=jmQEAV9CxT zLo1UhNiPvOFazvgm81n_vS`%>BEQQnrSa0o0y4BR(TX3gK&1WQer&CUZ5e+!-yrEelOZvZ7L-XPG4$d6 z8KnACUMY$Pox zlN;&3A@bPq21r^^CVw6EJy)(2rIFf#GPyi%2<1HdTNlh}L780W_6o`T`vx^e(t62Ha*l*4o&C^n8ITOEOq>~})7-?Fuu6U;Er^f7RcJosXkXoq zqy_P@`TYbuLyjd&x+7^pe6&vlx>)u;SKT|Uk+dK_u9s7oT7R3oSnMA{#(7 z%ba@dY0EID1@ZCoS8!D%sclXR@21Kz!GidB`)nbRw_E5)h87=s+Sst|*lca=oB5Co zEj}U=R~s$JgV2YUU(}Kk zAU+LAEwkkj>LL}nx{h>s>) zb7M|dh17ICLyM1ado`#PmqE_(OsCspP7C6reNWIAX78($?`I?}h>xRVK&Xor3-PgS zqtsDwJuQfjWq-m_nat^!ct;9YAT5ZGVJX9r^mJ^p30rGHd~6wgipT|X&m(C;eC(_= zo5-bmuOVqcd{it-&upzg6RH2FYRjeqi2a$LeC4+vb2v4tpu&W zDs%c{7en%`3c#OhP-L61vWEwlS-bcU}Bz!TPh*J5RM z_l29cDZ8&wXZQwx+CRRxeCQW#c^qzLdHGa8|}Me5XI|ev_FR@7`bOJ)U`1%QJkpKkhnmwiRY~O-@)I zaaPbXe6K%ljGmYeaieO7X^69`p5gobanJL-{SfzT+w?W!th8si`S)SiW(p(X?^J|8 ztS7}UoH|zDGyHHs_6GyR*zozxf1i~4Jp0H4!;c2wV+zb6ywWAQaBOn~!+-Y2wK5gT zA+9AakOPmMmHP}o?vLwV73@s-q3$UO_tpFiKk1KaUGGE@Ubti`#986b@Y4Z!lUsif zo^R43!hO|0!_Nlb%QK1X9|Gf=K}Ce@_TFMa53Pj4RPiH7=9rD?{*sY zH<@^W@VkgJ8Nl#M0r)wsAmQ^1$O;mA9Ww$9zwD3ev4%mxVrD;9Zy;u8T7cnK{c)|v zs8xh#Ui6W0-*yUyU-QS^uTBg^+`XrNEyS51VEFI;xDj)78{$TuH?qQmV`r9t;Wzzp z&%2a05%(O-F4xZhXR3hVw*v6BzfC2)`{G2{c;*Wje#aj->cr2FxRJG>T*rm%Od2r! zUI2b6*>S?>U8aW=GY1TR5P<*Mr3m3m&&qNWvNL_a@JIf*XHKnmh_(+s zuMlU3f#L7`ar@mS7X>~7riJ!xKTA~w$IdhZ!{7VkPP=C=W_NsOlL@mk*TC=({t4yHq1#dJdr;hk+JU{fggZg7yj%` zJ3MwKCK#T?A9uwqt7CTOsTdF9%uX;onLlpd@(OMlQTU5KKeqM?#F?UCcnW_!-@AkN z1lbPoe5c$r+AvSS@KpY|@x$|9u<=IU_X9CIlNAjA#vga(iZ3iltfr9N`K}Dj=b5o! zc-jEG%Ml?SKKJ>8-`2tGOj|HKy+0masCyrgSoAz`;gao6hB$K<4A1C~YXe43$Lv~} zb0!((TTgW(Y-{%_F%M(~CZ9io&DB|1_B zh>pk-qOI(E624^lR(wtd|A19r(MfiRd&JzyQK(c>>B?q`f5UtU3$iHSfQNOPgt!*# zeL^^3z=P@%Tckg(XDzab@Hubf>bJy$=@Ogfk84j>l_k7esf(07m@ct-0&v%a=ZL#^ zB#}dm%pOda*t`Mwm(!r9iW!;MPV-&zos>P8F0n-g;H__DCHzU*UkDGTOKb%L@aQ+7 z49x61sz_}p8y`%U*rNS$Jy9yyfg*8jL{Yi&3wTgnVk_d0Yn5i7LEL@tNGEJO`{1Ro z+t`ZvI;Jr_e?7&UtNOiL3N3(LI7T8`9#7` zW^0AV9#oguDh1%_Yn~%~(l?QW`}Rbz3s=P-_iWVP6YjcvmT=$32!>bl$F=s)P9pAp zRl5@6L3N3(hCi-HJQUA`&z*Mp-M#Of*9*XpFCR{L)j3~b_Mp1N)*t}CRJS_ejUTr`Jg6?QH44Dz-Gv&! zyx-H0ky8q2d{A9tYZ8FJ|42inHso$c%pO#i*qZv|daifkx%N5xhDMYy|zH3Gtx1#Ma&)_guRTQwkHWwXX`|L3N3(qd#s8u3#W;d~ux~kwJBdt#bhW zp+qObhlt$(pP%nRb&0KO0RCx6QNl-0m!;!O(d&Zh5?gnF+;i-$Z?q{q{&&nCRF~L# z`s0S9LuSnG*_cZ1M}X`>b&0Ka0G@V>gYa>+W$^}hP+el{8-V9N3~R&Yg(F2a3Z$6$Sapg$g!toA>M=bw_|AmTxFiEXeyZY+H#mNL!88~U3w zhzHdrwxRyGBXNqE0vF?*C>i|48%=oha`Ce{DGjPiY@-A4e^PHCy!YsehzHjtWBqa0f`xAocR6b}MLf7J`PLtI zrVRtjCcBMeMU!TT2iGOz{c*i_mK=y{uM@}}w=>2039d^f2H;_TA0vEB%Tt&=xGtF- zfV-E_)JWUWKR)8Yb;;BKylTdZl>I`lm52w|CDZ-!h(fLc0^bk4F8os2kBA4?B{ThT zS40Nk_slcz+;sX8;=y&vY=7K-!Bb7(a$knM^C&4OXNof)T$jxC$88zvB^T`$Ygs~< zY)uw{*@Nqn`Tn?ZWiS{<*=>wQ-~Nhta9y&{A9s~_Q(NFMkllInC%Kk0Q#3xfE?FFa zPj3ObL}qto$>G85!F9<}e>}WFs}&;g63A|Qcj^%0!F37T(EqyMwI!Enu+k!ipGG{m zE?Mc1J72XuBpRO+vO6a=q7pc`E?Mo5JFZ=Z9TDaY+jMAg%pP2qto6q|yI%c)xTjd9 zoQMb4CF=w5XZObt-t``#bm$x_oeA6%Dg zHgU)?6nX zT(;qN!5o*&{8&4zCtLgKiU3bYaMeQC9uZ#d-^uvK7V~>^N#I{cm-uZtlF>!o(8DCj z6pw<`cK!qp6PZ){F%E28l_aw}3R184R}m!j+U4PP)b2SPwGRG|_8s)i-%+h8Sl1$SmNaIeiMMxSqjXp>+L!%luS2^D-*3-pa#7)*1_|y7COM9V`mc^Q=NaBt4HO zRUp!5V-%#e>~$_AwZ)~fBgsUJg4A1FvLmU-WZOri&%r22?M#Z6NNUFyrbLqI7Ztht z?H5GuXi9yEnHL4A$C?4o#=Jj292ti>nRHQ+37%d@QvbRLRKD`6FyEpewQ~=y)~}q3q_%n(^;_mv zRAi-=P%D_{w%n4!n3HK01!){}gAy_CvO`VgBFT)3imcTv5s}pzf&G-n$z+O(OlLGE zGIeGUpOR!AMMZ8;(woR1-ZdjK_?JD{lh>;yZ-%7T`4xC8nUmQQMNV)2L-UE$8-ewa zBoikJ(uh50J(8YJ6Gsvm{L3D!wMLsqsgN{c{-P%@( zUNP!*KY*=el0-#T>f4-hme#XbgUPE&W|C7!aX0+yD^-ki z+;@v=(!9$Ycm8;bB-0>@);jYHr&*0N*H)S_G6SL@U1$1N&b>(oL6b29m%Ae}|i z)BM(1IEHdE@1Y>|_2+3!(AU(-j5(R|P?7l$eTS{p^&@SOWVS;^wrL5D$Q-F#$d~)% zRbiq-MUJTrJBdtkL}73ol4OoUK}Iy%1>=xd0TJJLY4Dz&D@<=FNLQ;0bup)_>4{jF zlbH<#X@BF{E6A>p)BdW*C?uKGP>{ChTZVu-18FN%4AieYPUbTdq&Ior_}E%+q7!sI znaWU*u2x_{?gp&(t~jDUHc4RX3t9iywljD>=9CTX4mb2<}sJc2oytWc1i zmwhuM>3Q0tACk;dC`d#919otkPkYz(LP#=2p(4ZA$0IV&=u1d4JE0)8J!u9bsqGjF z8w+IbV`4%@e*1?Ih-PcGQBHX6NRmt|{EIY21`NZW{Qv-EeFcAXp_DyDJX!EZdpyf9 zo}&6@TQjsDod`GmVoqJpNKZIL_034Ff7%yFYTduBhdJ4v3Es09X(X5rFDb|~ zWW=eK5lKb$%}A|$oIjA%ig!MWq@wy}WMujau*X8?j7)KtYG_6E%}C=~<_bs}7v}Gv zoY#ZSSU6eo`~e~h&JxPb>_dv`o0B77!$@JCp#e8(?y9K1IazJyTO!M)8-O_#)i)zO z_sf5aq~}_JVMGS6z8R^_+f*D$ZCVWV1V#1DNWEb-Cz5)Nd(oKF!r$&V`ZO7m+MXt` zo+$56MfJ^cYFo?xM&yPTV~O;=CZg!K+S}dzhUU1-;C7r{zzkjo^^CpBF#Cq|4f^cHD|!=LFUvem57U^qWWf} zw*2m0B(()o?h@&H5kz%vOTLGBqUElp# zstX;bqWb1!at++9Y^@P*D~(`^>YJ16ADkg_MH`wuuni1~Gvp0VLZhZPN7~DHoQmq3 z<@CB*!rHrRtv8=WcbTI4W~AqRJJ@C;NzaQ!er+nt~|&ZxrwfG3r$ zjq)yrWm0*6Dynau^Vl))q~>uR-bn^WQGGMgo*+q5K{kT_07p4J*da)y-U}@oQmq3krDNi!#v>#^r47av$7+psJr z97#p>%}7_XX)xCmj$c%zjgx$Zq@w!f71cKXr4U&?a+RHj}N<( zuM-p$GKRKdx-6j~1}pek3^|`MH)yjMdXw@{WXc$NiL0_al`(v!KZ|h{8e{I#<}t#5 zxj-?JrI6xS#_&l17DJBP=2mSML+fORDU^9E)iRdG^AXpl16YjT;pbYS-WwRkV-#Kp zi_T_@T(62#44)WaF>b=o=B8~PWAUl06k~MJzbS@K5wIAtLNRx4^BDcI!IFyEj>etk z_5gW4e6oPWxC1H7?b|GdUVhDMjG;U0AI5etZNOs4k>1?H&0=U{&p|n5wxd&J>SIhG zuow>@g}ITN#W2#wory6#A5Y3#6OM(c1QrAKz=fN;xmgUYPMz8qLyIo50*{4B1s3B^ z_}Sdj&0<96y9mpx@>n7hOq+}`m|kEpp1{v7{riXUa9ur&VVwT4GR9!b{4B;Z_}Sdt z&Dvqq?~{pQ7~e~M3+IC=2NvT6#4vYw^BB|Ipq=Hh7=6-S!FDkDz+$|DpUrLFJVp~O z0mUdbr6t9fL(+uBcmqG1d%al<&+BJ2et0e{l*J?*3;UJ@i}4O(m>a%X3~kK=SmHAK z*n|&K6F>~6CRmL35X0Q{&0^^73c%8wjG}m{bn(=^Y0&E4DH8i zt1$-C6)eUl__?Ql|IiK`foX+#EUWEwKG?PaUyKO3Dq?N|XYJ6x>^h5LJkCY;K2sPh zMr>$@xf7hnNV>Nc#dw=rE^@*-Wio@shzl{y?cgkib~$S*im}%zrz;SHX$=-b&b`b% z;Vg#kc}w@co}qj=o>R8HfW?RhKbsrFd5mU#wqiT;wRCH6p!VN`Z5 z!FDj6!eYoZ#_9gYV$>}L6MggA7MMfNC?-}|jI5Bt+*Hon(ZUHEbIcfJn~QF4&I_4h zVKK79&*si@9;5d7c@#s7C2t70U)WX$79%IbFt?Yp7*Un;oyHhZ?sm_y9Zb8h7`fqR zbB{TTVVwQo#TdqcDfcl36EG}>9QMtP<}8Li+3#0G3^A`0C2g#ebUv7hVKHow!rX1n zVmP~&=#TAiHoqtf6F47C%CHy_5X0PZ&SE$oC8Xz^<4Rt-Uzna@F&q$Mxqts~+6sxI zFt4pMLnm1nKs%VIVKGEWF(lmFe9qe8I(P9h#&8{MBRe9*V9JKYa6=4p2Re)4EWYn4 z#&GHy&2gE$VKL;i(cFg4V(43vq{kTgtcJxP5wwG892P^C73N-a9;5Jc*h(h*x}NQP z9*n_+4vQg&m+$@0sorrLJsb4uiwVGV*_SduG`EXSnBe!S5Ic4I9#V86f ze)NxFe|Mpph|w9^VSillD7J$sAQq!I{Jg_IhOOx6iUJoRQ^+7K5yfCKh{X^s91_0E zKZZ9=6HspEIQG7ce1O2QFfGJll!h34{A0MV5*44kUr>ue~j>9KMD;K2Ctlih4+k4b6h5kSd5C0;*fs~?f3Lz zLC8EG+M(*xu^mhwu^6&6IpQC~l`bD#+q}>YSHig^Fa{GzEJjuM`6vGv&g8{GDaq^N z_|#|^#$ZZ`#i$NHAM=mldG`z!gk%iQ?<2m&7)&m)7&YPN6aF!bg5Q8BH~UAHqw=PL z>%ue>i%}b5oC=7c6@!fcW{lMTtiX0K;lyIpg`dy($IuR(6ZeW4LtFK-2*zOQiN&Z7 zKmQUCW76>w6r;!6-!TT0P%K76`1!mUBVaQ~H*pHgw@gM(K9pGm{TVLy$dNI0lG)25 zij{=ue2G^h8J+(7GT0oZmK3D6u;C*lwF!OYS}0r;CX^JU9=&`ml42*aoR>(_r;$`- zf*LUR%Hz~NoSTNN4gHr{weqJn5m{*BH6ne=NRd;^a=s{$$%oz|(kF^kjU&>h zZWN^FR6;S>eZDGte-eX*`7mR`MnP(0_r*d|8*pE)P(x2(nnpqDWp{@osTX)3A9FG} zqad}7591@LE#55m*g#IEWK`smKS3CpeQ4^^DVURq7!`T9$r~as?eBvm(=RIW*6x3|(+9QvVWU56$>ZvEg>c1rQuM5Vt&1(HmNC~|r;)q^)bWKM6QvZNlF22qfnyLsj#>A6(qE6mB{hk`W9mV@%# zJkA2ANzF0kp(6Dm$%)K8-~#4kqC-U%&p>yXq4kVJlIaZ| zVmwY~?E(*wWU@j*I?m3wA?Y}hyfczaQ7A}fnl2}ibjF*p4M`>@6r^j{GI&!!UKQ8c zc3Y5SIzmA@T^_nWo!Od|LXt@c1*uO-ybg2f!{6LPlBow3nPDHDAwBV`7DzJTpdu?S zs!TZx|CkX;rWsUZ`|TE>cToeYi+sekRW5yKtUQWCyD;^ z`Odyq;u4-ArV13KtIoN<1t}JfL_u7s?gk{8AW)It{|ZZ^X1`tBAqA353n<9&u0z}+ z-Ezno-Z~47@k|CNNNrEf@t9NlK3f&c$rONsbj2%jTaZEwi!V-m`f4+htngQmj`vNP zU{1%M&6Xp{%6$dtxuh*d(sOL-03=zFuON-IrB)$n#O_W#o|X10GHC+3%Z%7@-(gNx z&?`u7$q{;%Y13AcT4iPYzetE&;(xsvguW>ebTf#!MOo$VpEd$Cctk^J!1-?CpML(P z#F1i9`-o9kd{biaqP+4KOW%}uGwUw_ilS6#f+wrji@5e)5Z3oi3El!`ETg~k{Dfrm z$c598RA>T5>S6nYlQVN_?~;SelsOfefRoD%7=UGK_4x@35E)z(aI({ooJ6)7*OW-# z9uviJY8wx{LQ-3O7ACxAYlCY7mQx#e7$(`WwOX%e@WLh;ToZ8ejw2C~zoml-l1T>F z1f1Me+jnlaOj$r=a81BS{k#4kZ_IN$^2Kf>6`FvN+VS2{G?~YFs3JTrWNQ_gfRRR% z31a)6Ng8#BL*Xq+g(hI6Hn;H>B*hK;3Q2_~U}R*^ZyO;Q*&$;rBo&%~kzRMoAxL_| zGps<8?f+2pA!9*dn4ZfsWX!0w3`vD1U^$H|bvF}vu15@#3QfSt6$O?Mxu7wWmGayw zUNqrk)FCLh%+|WcLAhm;!Cy3Cr1mrpJQmHKaDN^=+$5>c1dP--w)fqit6PbA%4ag< zXCCwve>yRzp77>LBo&%~=Zy0hHkF&LeP0Zw=d!g5O~A>rl|bG|QZG8C29gR*z{x6^ zD-u~|8Hh2NQ=thsnf}6kB2%`$hNMChaI)8)g+z8i_m_SlGPow- z4A1U%=$47-S&mE#X26`FvP>r$m7a(O%`NM-L+XaY{oF8h+mDdl0E%_M_s0!Btn zemDWisBufDBB{^>jP%C4m6HQh(Co6Osx|z{w$(K>Ntn>V4;DL{gy% zIQc`&03z4wuqYr~tI!0TJnImJ{^y*>GX9RFLK84DVsZoMLtAq^(_B>U|1Lz({Yy z7CW)E-l~6&#?~q{0V7?rAH#9Bg`BSGU1>B?XaYt?rtX~{b4DiVM)it96EHIThiUai zI>d{~#i1n~p-w2;5U#L)MV3CEYdaM9iO9>j3b9S@%o zN8=Eej=z0^k-#OeB@XS;8W0t-A=>Rh)sa-x{*2Ve=ZBpqlGI0smnJfJ?a#?NOG^=1 z^;~}ke`A{P$qM`ZBYpOJbm{Wy|(mpribN48c``!iD8`ff6k+J@zmi46XUM@AZD zl3hd6DEa}OSTd)g_GhFv^3)9^wf;}fBdMtU85voBY!xIUt0%aKq@wm`q&MAJI!x%thsKTG%4+q4rZG zwKpE9_#~;Q{aH@!aS?D<=3RDo18lf8$&eqJ(A{4(L{g7vJrPMo?ay-RQFHnesmF#5 zx-zGt_UB}r24a5pxwRjUe}SZ;_UB}?_ToWdl6r$%3yCzJO)$hOMr!@r677f_aiI*7 zirSy$)ULgP8p=Gkmj+iNGI;IJ$-ym)6WMoNJ0umgKO?V%}C_GhHwNqrSb!?FJ$k-=+!PA+H<8>`H#GX3TtBo(zkCr7`fo?r|v z>_k#g`*U*YuVU8xIp=pJ=!vAL{W&?T4AWsr*PP zYJZ;d@0)LtG+up8tyR?ijI`$;1T|C)+`)GDpA|8uqV{K`bMmL=nA17I_q12k{+vu% z0X&(!p3bC+3Smw~?a#@|n`xwWmfv~`Nk#3?NY_7e5@Jr*t2gwtSJeKDbhfZ9MA8{k z1FC6xJr%V-BlR2m#91|uQ@@hoCnOcMKPTHt8!gX}-u(A1NGfW7PR`vV7KT6PoSru> zl8V}&lRF0YA#!thdI~CPe?~?O9hgaw!UT!hf8dTOm{U>vGtxDy53JnC<8)2QNKbo3 z?axR@#^)IYDef0h`={M|2XiWFe@5Dxc0MYgu0YxvO@X>iUQb2s&q#0a4V$pF-a_5M z?@Cfp`!mw@o%69E+dxj&m?q#jB&n$VIr*txcFgH|yY(TGirSx%;Y)XldL?WP?ayR| zFsF8J)?m!3sQo#)dv{49x54*S%+@Muf4`4Rh(}V`4e_@sdW-)aDE?#qUy|?Pzu$lU z|HS^Zu(0l7xdJ{i(XC7SHr-p;t5>Zc{;PQVPTgXfwil*EwY>jSR44x`*P{oQA0V18 zrjX(@6ZLk&#g(drE%N*RDwHF>Kd!xK{19>NOv2}gvudB=3H@<>##Xq6WOltrX?P&Z z?CiUe3{M<@Hw}Y|#Ka2?fh|QQ?yLJ5p41=LmQJ6DxHdQ^+)O6!EB+atJOJ-}dMM$Q zlfn$f#C-;U;VA>~ixYg=f7p10aGwTXcyf83~ES@d=jH^SHFM4YJshG+7} zwF&vpA+EIz&w)7e0}RjNk4LtAMSVW9z)6rHvhhq3Fg%+-?#)&9FlIMC_J4~wGX)IK z;g1^=k{=+veFN(AOcyXbR{(xu4^$Si&l@XN!z^Dmo;d@C=Lx`PzlczCAsgvZ;kop7H$V0gGcuH8H*9(td<&7Sq85N8U3;dXyqUwp%XxISp%9>RTl z2pH}Rz`siT2yyN9WGLt4sbeyM;gSBh_HwWIaMtI>|1!Ki;Xb3laLpgr3w$etzlrPL z^q+<}(+Ujt1mMMf{f+P}dtgJqY&>%d4EF}$iFZ zrY#vvIxxJLKkiMiwK`@u?(8Xv*_nA@cnN>pn3l_Tzjw;xMx5yfhL;M!Yk#m)_Q+BN z5N8g8;bj8w*U4TIer9WK!hIrw;pO~sZ?DSql=0TMR||1wBN$#G0PkCix{bHmvnPl% zCBg7Y{InK8^1T}(*-|GfbxI|*U#_&4+c+`lq zP!LHxs!4$gh%;fq@Ou8ZH`c)Qh#NP(vFyJ26I#GO@~w2IA~2E$wX*i zuRCLQCN>z}HURH-15BXIu2(BF194_I7~VbrUv>koyNM5LUK4SqI2hhB06(~X7vYOq zZbY1U4u*I3$0Noj*dp+spw~roOhD5ECOa73)gN~)S_SKm=7k#+mKd`$?FIe6T;Rr+kzKk6n9OHv{5KiZFbrKkh300}PenklmH@)&j(t8DaQv zf81H*uZEc2nY~6d;!KY)e55~aM6REKxREFh9XoR*3?ChU_iS~V@XCANV|FG=7(O-t z@7NBkknHnDsrjoAXSRgl-}>X)tAi&H*Um>KLYyfRhL1OK_(whe{c6SkodPNG`RkkF z8OiJmYs5rqghQ_E#gdPdByjPy#}_Avqd6o0_nomRN&DBMN-dPrvsAAyr{^-!(eql zwpQQw8us$YoJ_i?$cb;kKAPmXl`uw`q|dh~NbU5G1(4K^cZDr2Ch1cxDsuiCFibM1 zHv8}S&-E3CjX7d;QK6CPcVjsCr8p4u%Zf*Os1%E?%bIeNp0JPyGSyR zq97yZ)On6%_BktcJ&v|F}TvCo3_A>F+j_LG?X*3rBRl1z=La^`%MmdLCt!34^j7T&RFSEenI zEj|`Tk_i!2&Mw885ZV68Y$TZrQIUlb4kgm-ii0H6AS!bD8X6PyNvB~wOdcmQAS!a- zlm3)**R@}eWb#8rrdbbfp_o@C<<{Sc^mz{jsck=e5J_$GEm+Z)t!2tXL3*Q#(9^-I zjT(m}vmFZ3I8=QK<}~*9PK_iJ9V&8^ldg&}EY3+Jnd4B9-dvrJU`}t=U3H1{=?xXR z{848j7r!`zBr_W-a#bgK3VN4~JAfpU8Vb_rn!YRMG};Z^O=R$W7VQ2seqBT3t#R%e zJwKVsP~|*a4)#IGK4k1mNB1YQ7%K9YO|gkQ+5H-}mI(|Mx$DF5^ClYfq385mNznV!o|2hMUV)Cjm|DYfvmcLFUNKp(4^|18sLP#?8 zpdel6`oWTjJh!gXj@C#r>!2VVMY3cRq^RG7aEQ)$3`r&&6r^p~6fuH@2~{KZSqzyp z3Q6V~6r^|P!gttO?*PYMB$;MVkgg3Q{t;w*$mv?wIV+OPFeu1K|rvU>err0-3Mz`{FWchDDS;4+PhJ7zJ4VsA?DP;ARa z^pe9Pkc^&tZwr!&!kdwLI=jec=G2qEpqocgcyn@RIi1MOEpA~>Md8iKkqh8fm&d6O zx_O1j;Dt9MwIdB$AgS%GP2G|G*$l-Q(x$ng@Rm8X@vCXFV&Mgcf2J-W^3?>Ie8vr4 zc=Oht%UzJjpP%=l;|yMSGg4o+=^~Q)yfd(mMRsIG;mt_xM!h&lYL|=7B{F#7%}Aqn zs?kUqUE0yKRZ(~|Qrqa>gQT`PE0wZ}!kdwi;}`8lGIG?C#@Jd#;mt^IxxurM^cKHJ z#e|~pW~8zCXZS?F>H`qVVSA^Hr;ee02OWl8VBcllu;V(=~H$Z=Qlk-#!IJ zzcs2QZ9-)Ex(kU6UU;*ddc10Nkkr5EmjFpc;mye-9rh8qw*Z|XMd8iKyj8@C!RI?W zdn}q{D++H;rhh${$W(Pn9V!ZMPBs|{g25b3>RhLupeVdK*{X_A#h=M0BWW~I6yBV4 zhutAEyf}^2io%YSdo}n-M#K)W# zzJa(tDjt&BiZPT^QFybQUi*`xNP6=Wj*U4Lg*PLO?RR0F+q_qP$Tk*9Md8iK0gVR` z*>jqXq@wUA;lk@TibP#sA{ z;mt^Uqw_FQ3r#8t@4EVABo&1>Bb^&|<;9%NHJxZ;uPD4Z=}k}P*6FUW4s$9BZ%%ed z^qO+EUX%+-Md8iJ$eb?fLy?)D!uq7Vo{GYok0-i*{|)VqzOJ}I0QA{2!;Cyx)KJ6k`T9#%r-aViRLPTpU6lXBi%Jq$@j;myd1 zMR)rN@;LONhBOL`|j}T-}$m#Gb*@2{@@MffK z;G~KI>JFr>Z?z;yDhh8#db@vWfvxp+)H5NeD7+czTHQvdtyt|Kr)zn}P=z-mBO_MP zj4?7-FIvJ-6yA)~JxzV{1V@H**jh#5%}7_hR*OYz9kR8x64yggQFt@b*=TNDJVVaf zcS<6uD7+bI)J{wDA)`vCBSl zO(YW>3!c-bEJ_9J708=$3m*5VOqXDdPBy}Vve+{S9zgPpMQ@9NNsJ^dC<|i_Oq|Sf z?Wo-sNejy2;?Xxmo{oUqQRcLuES5FWh@AVPD3QTWHtXQpt%^mE)UK}0LS*p00-W5m z5N;}YoZ9Nn8Ho(OSAdavx&p9{WS*g9XW$(~^Eg8*i)U4)BdOink(bEO%3|LNc<7lq zw=ao>qy=U1ab6oFwO6~#5E)uoOy8ddNn^sC)ks=U7AGUUo}RuN{`|Ue; z5ky`U3(BIz$eBbIYPB9o3(CTKr52ISuV9T%=Cq(J`k$hHtM^FQ4oM5jVpP#vlyl&% zS4dh=7FFs#AhK+3kdd;r7L>)>86}BaGG+pi<|D=b5yg6fe$M3^Z%?>qBWXcdG3b35o$+Xn_w1b^sDk6{5g0iR-PrR^b_91VnM07nZD2t0jVXecwKTnTc zi#aVQi@8Uy5IJr99V9I%3vV=yLta;ADB$FAvcG7lD2}~5T8ioO=i}UTnC?#t%3}9y zD30ZEdbjp~$(qb*L0OFG0o#eqGc>SDS0Y0zi$A-*Ao6aFct~1M78egLAoBElSUHug zwV*6+Prg9pwNYYLWRez?#hGic;%^@3&xfFtmpK)C1z5k0I$m-ql2M0Jz^a!dEhvk~ zG~XcUwbeU^WN2mKnEuWtNTK~j={M*3XMYH?1(5c3g?b=qL3Zq&y$W0F z+?l%;k-oPf6#dp&HNmb+UANei-LK$dYt_MY`Uk``n~fgE{}jMN4{L(+omm^>p2 zN$2>CEs(SzJMun#i=-#p0D3xDkR4k*S&-D%ZTSv!T96(06N)m*?6>-jfglED?+YzE zJYQx55#ULKj#b#psa9TsFqg-*Ez z*&F(;qx6m)*jfv+W4wKnfO-OH8}k!gPYbeR-rNz`TJQAYp#0?-vLHKlRB9#24v^Ee zkki%TZfztjXp(NLmt#(6`x}jrw4h0PerZS2=y=kLqy=rc1f4C885t6{g z)LngH_&g{7cjmu8$zOtKkwC9dWg5&E&I35AT)ki5c#nf^3H^5-?w6U0Wb_}E79pwd z3QUXWO%oMEQg2Y?4{fs>yy!pu>&R)4pk5Rt*Z^~lMS(PM}_I$|S{!My?}<1dAp z(99XfnKQUo;N*jS+laiiPns9VsqhM%v?WMSWX^BaU{3Z`2R@Q9(l{{rTO^HL z&W=bbyaFS&S7ovwsXh7m29gS|z{tqoFAPO8@=~_vNGiMnBfZn#bwtuTu~`8m6<&dn z#>d3@ku?4vXLkW6#ntQ$d~vs6fedbEU^y~r)1b1893GN!)EkJNW@Zjzc+=IJo z&=3N_0>SM&b$Y9)H<`-xck?{C@ZQaD>U2+A{m+@%=i4iz6mkV7ts=oN1*wldE3ytO z8`AHmkSlPRV&4LiiBjs02i{L1S76dJdp&e^x~6Ap?a!#D?_7aNqv{v=P#WdV=({1* z6mkV7%{1{(pfr;u{S|8pxdM|$+er|^+vjKVMH5j9xdN9>2UH?i|JWOnpT3zvIBtyv zN8zd5t~tB@E|fy9z-z9W0#6#YT=L6MltQk+WsgkixhPh44%&xO$Q8Ie-w+Z*yXMKa zx@(4aMOX^K<;VS7NWR`*9BT@>0+-bu|3b2Ydmu^QxdM|B&&TdS8Syx8Hk3lHz@*iq z#U+$h=Ye$X6LJME<8GLX()0E&I{JiMfl1H7;>$?xZl|A%VBZS40+Uv=lbcam4PREr z?G$naE`MJ)j^vHM4U|Hzz~!ISYm&UPn2tUnS76e!zFSt5o|Vb_VNLd(3c|T!WyzHu zrIo%U9YaE{z-n6Y)(uDLd0*%z))aCDE>lhGiqcB*b`eS;S76ffZsksto)=eO8e3m) zgJ8k^usfHlk@TG_aM}G7q&@mN6xR6-Eb!F(R>&2& zoK^y+>uveN^tUL5T!Be<-3J*^x@(1|L@DG7Oopw=w+m(1iU|i%3b_K4W|b5lP?}{c zZ$l~M3QQW;F3{D)xKzFcN+DNZ(o8caBh^g$1eQ$deJkV&T!ytPNitvko+yP}fyvCTv!?w{_|l_#MTas?(sTOEWBwinb4ZSJOPpO7ms8MtB! zv`RXW2wa*-XXJ3D7IFn9t$lYA;vTYg{`>()E944Hy3YRw^DG@;w5~IC^{f!o6mkV7 z-CagQs-=&3ciU-n?GthZCWD@QZK`sspk~m66@_uMLaxB1(Q}JhR2BQ2&@~?{hStZB zkSj3h8lL5;lHpL(HF)AjltQk+WZ0~@pU&)Q8EHF(T!Bf?oR~H^TFG4Xf6Bo2MB26ZQbM!OVy?nhyTJ;3Eejv&(;cPI>@#UppRf(3 zQGCT_ltQ!5<+DwyUTmguGek#-aPl}eB%+$Wn|)R@;^X25C?g*K+Ki~`i(LzguFpL;NpUx5W0`dx{5d*Kd^)_1ed zYyNr^4rDEjBOC9b6q~#9D>VB|x=(%a2Bmx34{1;e%|4UXh}>6DT0N>aMkzG=OnM%#I*-zG?GmhD z(w9-8*=N!UZvu_C-a}Tla-C2L%|4d_so_!C-nS3h_a-@ACxI#8!fdaI>Y?5%{)<;U z6SKxAIk5gtlD?aLR?{e17n%wCNC^LK4oacfXVQ$nco)eht-F%^^o5MVXpKf^*O07~ zh|W);*=IG4T7yrJEPb>g)^xClVCpP2{T92O!@JQ1SZMZn&H3%Blblq_gEfU_pUbxI zAiS~nZT&RaPzudHmxoS#y54RsO8Zu5_PKmk8K!aVn%B2Z#hOC1&t<9aA#}8*QTAt& zzMFj}Bkn!vgEHd6^Pf-(%|4S>+pXhKT6J5!MkzG=OnRQr*oV?{`yQ+s*5{|t>~py_ zcR7+v^TnVPntdj%IvLxdv`RJHL(>1}9xgwF=1}ij>tIS6tck4O%wO-~p?v(Kcvdd+tz-CvKOE11yiGa0sI z>jsoz)9Y8oJtQ>yOq#{VH%4hjwD}sP(Cjm5oLW{2rLns~W|Ts+&!idud~K4?<6lE5 zH2YlU+>{@s`Pu#)D1~O9$>0My;OILJ$58O5m+epr%|4Uvq*;<;P1nmeU!oM6eI`Sj zjDUBgC)5nB{$&M}LbK0g;KDHVJQVOP$iN>n(e+kn_L;OcA5M*~pGnt= zWqFls4>eu8C(#q5(CjnmZhim)BYjP9*C@FaYYNRilR4uuFPNV7l6qj z?CTEU@c%9%n4os<4QHRV$o=1o2r75((4uo=b-w=BM=abm^&Kx2yr)KuYP;3w&*{Hc zh;Ki`Ia*85<@>b?s^&+nCFt<$Dz(|}KcL<4yOtn2*|tn5qZ1v5d{;{$Uf}7-;L4CB z>Y7IX5)cw-DZ~p*nmIp0E1{+N@%_<%a$Vr%|c2QI&MP2ceXt7!!FD@Zc$ zAvj%a={sIvGU7uVXtwldBVO;xMAG+X6qqzxn9%sxd#K6F@g)7PC5XJbj-+{N6iMIl z0;_2zyAq7jOmrSr?&$3l;sqv+3gzdaG)ixR7{!*pKcm2;=l8}YO3%&I-=P%Z1tyJ* z_0pp>(tgtor4TPL86H2p6-xKV<=>+e;sqwH?Z?$SV!tca=9suBg?NF>99Qp<{4yV` zFV}lWh!?nQ*;0KJDYjPIXpJ#qtCOWJhX;-v`u}- z3#_Km^=Su`M#rhJ?pjMBUSQG;-vD{Nu4#tGM3M9zFEDA0>DmOP@m&vSLUc_bUf^=* zdI;2XO=G~N>LmTIB{(<}T76soQWHWvT~mk`c+Has`jb3TiOv-vUf^P!M)L0uZAseyO$xa7v!IDdGsoFa*Mu)y)JG}A3rre4HmG@!*ge!`^C6PH z;{`51pEQMJx*R1?3h@Gy*37+&P+C9cx`a}Q7r4y53m)e5`)TFq3bTKD-wN>plb(n1 zEtH-=j`Tw*#0yMXV~f+3+8WUX+B99$|5^fX^4B}CrZ;gecu>|-h!mwjD1~@|Nzdg3aZ!5C?SokqT~mk`n6#qHsAeE`-$qrTcSVR7xXj(KD#;uPlVVLF zUf|L=mYHN&xBDoCc!A4o#s4Ik`OkSIea8z-Mr9qb9c9$#b0I3%dq{{En6z4UyoAzf zUW)DxLcG9a=+SIXlvL~SRI_#H1>MVpc!9}~xyLstsqTa-UifL&X&kK(FEHs!dFe|W ztt)9&XrA?U3h@GyVLv9OyF=K7`H?7vc!A5+TSBmA*vi2WZt0pryuhTprDg-Tsc!5c?OO9tK%?=q<|6xlZUf?pIdqc2M_wI_ zqjj4<&|Of77nls~{}zH^6+o*azVCHdZK1bQh!>a)+&eCnLcKr+?ry#Ur4TPLY29m^ z4o7SK_6r?DLcGAF>v7SHN_K*pu7^pfyAt9BCfz@b9EUaC3z=4y$si zPg3tn;>(9o3h@Gy#*Fccv8M53n#w4Jc!5dRtiupi8c@?UV|`haLcG9a*tV=Ev1Zt& z_Qy~P@dA^cy+8bo(zCNHtPa;lf)Fn-X(cOl6s48$(GZkEyuf9mrgKQf%h&*=5HB!k z3~iJRrO|H*y`Mt7z-6OmH%ZoOUkq#hU)B<|x(&A|oe~UhQ1%_Zl+f(6bR;^?JeAAY zvhb^-Sy2kjK9fd|F_7ih$wd2W15paiK9gp~t2t1bDUY`y>ATry()c}B6iVajJD6G3 zheiV5%|4eoC#q~NcC?u`e`=q7H~UOR{5`5W%7{PfQ={f!EkXSQ>H-m4v-;@#G+N)y zKC5Yj9iB)sZ}!D`DY|IR4#~8X!d!{{XuX;wQFv>5A$jIEEAf2 zF2|;xMsnztb0~#opUX!lVL_l>^Y&(#3(+@#T%95f!K)$N43;M+BYW}iuK+*@(>(c76y-&)%67j0w#?la|rxFO*jP-z^-i(Cl;hMUfzqX~wQcDKz_B z=3fgBpZ5EiecWA?LbK0h`tmCBiIqtc)0JBI-~f|RY4!KQ>6%eV)^EU?LbK1L)ie*p zc=l-Ptx1AXX!e;5-9H`fyrbYDJ9H=HX!bEAH2X}3%=|_f`&Yh&{BV{Y?1g5ZNmqiV zg>bZCZ@;4FA)(o4GHh%*Xw>v}h7IqP7e^~J`&=%IdPH*mj}$)(%|4Uv&UsuY-L1cB zg*Am{pUJR;ndle_+d8N(N}<_j(rndl0M;}cEo+KWX!e;jUYv%|QSTw+QS#qW3e7%~ zX1)h=QJUG)QnW8L`&^bXXOJvhhMxO`W}nI6Yjf% zp7~pGJB4PS$s2SR|7zJZOv(IGUjuLkiQo*BY_BZ}YA+pfyGihCm`40Dx zb>=LMR%rH_bluwqD+fD5P1mhgV{to$W}iv-sM^#cxd&CHyMxf|GZ`G;tL~oxtD$Dl zoA0Pc5}JJ`jq&%6;C33rj_$zG3e7%~uBi>%DH#DZT@&UOKq)l)OsZd;@&apyEt#|# zrO@m%>Dk<`3QEt)Lmf~G%|4S>z1766AdkH#RM!zuE{7Dq0HR0?$T% z%DWb&G5vUJltQ?`q**K&0u5c$EHoNg5M5LFpaPevmcimqTP95ihoUWghYL&^6}~@+ z(kN3AZl<>M9WHR0Z6ai}x~7q-!6)f|CBd*WMM(~7`;2P(4i|XMy6IbztdR-k{_N5E z4i}g-^Iac@(#+K#(t0h0aDhqHQW_|YX7}NN%$B~x1tzT|uGc87xC3DZPfHp^s`ScO-FqZGmgF2B2+5l3qc`7j-&5H4_8bGEvf+DD&NWfU|_dbAE!65Kri4`lkd z_1sPXbJn)>zmi~b#;GWcaRsxW6v72ITC=KmC`z-U{w-*_rh{)KSTO=-w(PTPk#{)O z6v72o(^$B%2FW?M>XP)olHfrah$ZZrcgxWGDTE8W=3m`l-GeP3#)Ys*Z>JD0aJk*x zpXATmE~6B}1t!h(4_l!$(` z$LJUm!UZn9MmLh-^I*nD?;#;vVA9$h@6)-mrFK1(Lb$+XiH>wNv5H!SQ3~M#m#Ke* z1&De(t)!>hqZGmgF4q-#LUOtO^*wq!g>ZpMZ&(l=ecqtV{jjDGE^rxL=NGK$^=^HM zQV18A^nB>v38m*%3~i?nE-+~|Yz*yyy@%>1u8B2;aDmH`BYr1YEOZu1Aza|H_T=Iu zt0hm5QV18gEEc+%WWkMZN%~(&P_#K+!J-O|N{mtn7kJHHqd$$dM+b;P^pPNh3rvPy zi)p4t3y+-vp;ya~Ln(v{OopsKG+D_uAVb!!fXGMJ6v722U11pt;~sJa?S|;tmj1t$ zVC`b{fNCEJVXMxEq7=dfRx@mGl9eQPJv)O^2p5=iPYTY7(mnnV1R8p@Lb$+W*xxFN=N2I};Lb$+X)px&=toVxFPa$03 zvip1$PTB8@*?H&{tSN*GOa{L^2TwI>FR5_h`GV3Yg>ZpMcfC?>tm&?0j6f-b3rvQN z-}Aka{h(&(*yZ%xCxi=32A&(Q*0BWWH3)%cdQZlhLb$-BH_49EI9hK44_!5daDhp8 zoTku>c7f5lK9*dBHHC12%Z>5tV@>zkzJpN;;R2JvSv#vEK42Zx49-#sW}fvCFN6zB z8k_Srz?#PTn=?@g;R2Jc)vw{s>w%iCl~-YHxUMOL3rvQc>ZYDQVy_7&YOO{ogbPf1 z?zB3N(sQ$1R+K`xz@!xz4bhf;N6Pbh9!eox;4**uha_{|h5%V_rw}eMY0S?}_Z8!( zL=YfrDTE7L_B%w^A)|NlBPjnbD+xwaga>!QmjqcdEBITSs7 zq1orD$`4cEVyJ5xV^gm~DKz^`nx2R7u%e|ImW@U$H2Yk}KLJZc?3(ZEMN>`R%|4UH z*OMWduw`VU2PAzr`&_22l7?jRWEn{MZuYtCb36~pZbinD^xf=pS*ZzxH}+^tb)g5| z1iqVnCe3UGv!XOJ_Uec=g=U{gqtS{9D2-ZoAUW4Zf`e}*c=s5V{^-$qo_A=BQfT&h z%>wtQpftW}t@0_mrqJv&8UDqtlqkc~ZZC<_!AgQN!?vNcjx=q7QfT&BP0KUA0?Cj+ zwxbl9eJ=ZK*+{Zma5j`ev(IIj(g{cwUH2zR|0@ZuMm$I9IlG?TPX{XrM!tfF75nHL zTodLS^^qVn`)ssksZn&qo6%j*lk~rmV9p|lVCT(10kDal3EMxqp&eJ0K1{gRIlX%7tffbd2ieJUnsf>LPqne_bCdJ0O0R!k)b zsdP=NLT-BC6`Fl6qxv@{>3((-M=Lb@T$bGmYY^<3Uq@s_DKz_B8V}WDa;yv)u$ZLp zW}nHZ@M|#lr)x$9mA#HqX!e=3x|ODTw$-s0tew$U6QS8>GW3#lOx64zp58*w7Tk+c zX!e;5Sv3_Rwbmd*mOf2^QfT&>bmeKb54Y2mb?H=+zMFj}!1XU~8#?8YxeaXW=(pGk8>Cx|BWkzfu? zL&uQN>~opfO~;U#DoY2fDKz_BmR>TCY8Ex=SyO2Cxoq18Vp)5%O&Zd(iO}pb8T_<0 z97C!RR&C|Ot`BjvLbK1LyJ`*y7<5f{nW8OG3e7%~p`(|7tE9R^s3U&(Z-Y<@%|4TX zCtJWs^%{i0BkN!mSf6D=v(KdUv6lM4fjwI5^jw);4yET*L%I$L%|4S>juux? zTA5OJ!kR*}&tQu z5KJ`G5f$f>{`=^Mv-D4VtR}#DQvLH3>c9T?_aH9J(gI&;_^hjs)Rr1K<>duzA4V5y z)B$C*C;nNK4ibl-PxeA-tj+{sl&Ovqi9`l_?1Xx4Nc-#Gzb%c-FGd zfa1*)qjZosM9(dTGTag82AM({j>3KN{dIY_l4iblDZ(gG`=KZw_rGvzw zW$pne&Bhh!EEAR&uw%&hr44kb_K~ptUe{U#1(oUU!C=9?VQ ziR(S&KXEV5$u`{5{GX0)JW~oS{)M5 z_0~b+Q1{~+lGWQlnxnVVLE_LU(RGq7Hm5@AAaSU*@fpb~50{bjpE%T>`~YQCmAeN} zI!GKwsGBYBp&>cfpmdNpJje=J;#fF?L+?I~LFpiI*!Sa0CEJ1w*%1icqTaU-5{Hss zSH;n~qC3<3>EN>qzx)85xIS*fwhuXkH60`lCqKeM6I&iVwi2a-#9?vjQYhVXZ{$Vk zKXGs+{i!)hSG-k_$>=@gAaPjSsw7Ht&H}pLI!GM6nP4%5-cHk<0v2WInhp|&mbW0k zv}KbnZj=rZhcWSHksP)f7V+qs{u76g1RaYgc~&1oacZSS=^$|!Sn3+qba(IZ7^Q>6 zVfK(!N~#P~9r4qvev8sU;&3}bXN7cD5qRzQJt+Mr4&Gel*5YWrUw*a?rT@gioiPBm zQ{8<70^F&?(xG&aI2`XwJ(7EWp42EEBo0BrdsMmgP%}7R;;|?lBn~I4t36~NL&m{h zAivZ{f`i0i$DB|lEvV_*Qk||Q4ibkuxxU1jVb@mnz?u#chmXlCp!B?o_=wU$;!v#b zU6fYTt_3I^Bo0L?z>+|HmRa8U21*Bs!}mav&%_}WCJr6Cgp}yfOwAdJ$wHS;p~AA%-PI5;!^;}8CSKA%@ewNgJ44t%7S4|= z0Eh3n6b#$8PRl~0MaPGb^qnCvX$-poJ*Pd|L30w2^qnDa*|dB$lJy_W zCh0pv;PSvOxFgs#cRy6`X6$zQ&Jeg9I|0rQTaFr2jHK@jfl0G*-3XLsy|=AU3K;^E z#+-H;Q5rL5(RK=}7MQe(U7w25DpaZx))X=XCXLoRAx*Nkvw7_fD1{7x$?$LTdQgTp z91S_CK8A!0fk|(+`D&KOuIbHOArhsKAuwt6Edyz%9E41vpEHq-fO?P{*C z&Ty^>83LE%x4Eh2=+SAgrvHy9SlLE@M>6vfm;upyNXQUaP2+gq=_rlExvHTQG6W{g z;q5A+GzUk)Jfp5DWC%3h`zmz`36y7sjl@Cv1nAuwsZZ8QLD zTF(zgpcFC$F8jwHL$YU8FG?Xp;IcybB_vC?UV>7{5V(9csszbL!4pXO&JdXNwwW^o zrME@5<0yp;fy?gKVeUj93Es{PXtY9xz@%k$4nt{$_gRcJg$#kqAIm)^IpOjKltPBU zWuLd|NjUbZ*(1|>ltPBU<*corlbo7Z_X}{A2^j*Hy-Q6e*>y?-tSNl|0h3XEH+xY= z^<1g5FQ_SG2uxbjOTiio{jOM33!K23LWaO(=*KXn;*5uYFzITUBrlHE^^IHiMOyk^wZLT9)z*KZ47(hX5Vupv5V(90=Q+uH zE5wCDM}$jVA54!)&P{Q+ynnWDP#ytn&(d+MroedbsMFSA#hng zv=zzPZLXsfG6XKa>jS;DK8DPpL+N@eWC&cY%?^3EEmy|biZz7{fyt21Tfw@>^ZFRd zP#A2kDP#yt20s6wp8EoH`Vjc+ zc@vaEhQOq^ct^-j^&avT3Cx00$Pk!x8(+dRwQ9{&h7fk4D@q|l;POf3>R8kLz{-bG z$Pkzej($={mHQcL1{c~zHH8d;N#jujT{VsSiD?fB83L28Qw{5@(MCc|*NK9CakN5) zz-7Q<__%=Hw_zVrS3@ae2uxaE75oXM^~EGuyQiPQgbabpZyv@c*)VfD_^Z)V@h3(bh5%My;O~co9 z_!VEu!ABIT6iSUUx^$~&D1~O9PYIpK-Vvp-_p<>gg=U{gv-K|-P@0Xde@D{)f`O<% zAz;wkX}VYI$p^SaIry@}UPE9aT}z{rL8m|h-_1T7txjZuYs{`1Tgb zr7Qm;>ATtIa_E2qBzx8Oko4W`GilZ=lNO~}VW*xdfjuNN`%D^BMnFqo@1Zdz>A^v0 z_L)>m_hGVEODm*2-7bV?pGl+9fyF3|nmsP!b_&ftli{_8!lhf+46mTS)KQ;2LbK1L zH(i2!D7}e)>PI!Nby52%;6El_t&Vr$!QS4^7PF{<5t@Bg)7rcQ9?ERFykilpDKz_B z4%-YNt}T0Kr#M7t_PI=-dq2sfO|MZ+-`_{Tq?)|%gVNaYE-Ol**=N%1Gye`sv-2B@ z@q}idN#oMFq9~1%Q}x0KIBtbzpUcy8&yqaUJ1vgZ|Cb$_ne!w;X{K292&K^MvzlhM zPzcENyJDu_Uks(t>@#WnHTiFp#+~rSD1~O9NwZu4+!pPcMdKzRY2Q-*KUkwa+qxxD+u3X;DLr8C>XM-&>jzkt$P)#+;)uZ(`?!5!IQ)u>?v;uP%LTTk#44+!oS52YW=kohFYKkLv4-M|u z8l}+ebJ@8_C6cXjPeLg)`&^Dmu#@D#CKQYb%|4gy{~SfK+4j;{Q)u>?jOrW-5scoq zQO!=#^;T&1nY1RqhX}?#hQ`imfi;C@pUKeIzpqwu96Y^+K5IP!rO@m%8FIciJYlp0 z8FHeYUaAMjkkITi>1t2{nteT5SG9RZv8ICs1Lrr*KpA%Y-aV8;v(IXV-D$9$yXgwGilr&9f>uK%SmFerqJv&={lMojy@H3s%C%Ry7VZ8 zW}nHh*L}KR&9Entv~PuGpGhnIi!hW{^4)sTCLFgyv(IJi#-&JB`lS|*R%rIQtQl_y z$#ONjqZFEbCXLf+N24?j)PfK6>-(qB?Ca;>wLLlo^mond8jy$0|CemlwppbnU7B_7 z-mG&j{7dzgotrgQ0fM+JK$SD2yQu#l_5%k;(x+FWQP&!^HsF`k5&9=S)&>~*i`gOx zCdgi-c>REYc#;K?ZG2e3N8uf3m>1dux?ck9Gk81v;;*iZX6f zf3oP#RO*e6t7iEF0*cOFA3^fHKUrXLy^K`zyUg>@mxb+J0q~ys$dAwjQnf=OZLH z`;&#!U3jA8YmkLrCV`|^*NmUdpR87Y62u~JK~{@?HlE~Yf3m=5Wm77t=Na<9+6r^Y zx@N+eeqX)=G8eafq;?MoafbdbfiYc@VMjPIy8r)cQ&BP1*N%w{! zkVftS>7I1rJ<25ZN%J2^eAU1UYKA{vQjk?sd=ICzu9?*L=P1~@l0QxM-&D=JAoD#v z{|;rcbpA#gxF?HJams-VoO^sC$;19+o`f@VkyC}Zq&Wx6T;YKAqgn@vgeP#6#pR(#DZlo?j|ldj2KcPpv0 zaM!oZI-$(C+n)^jCVxF8>q5<-5?SDr#QOdGBBwuD;>0@@sKo6Jvc$U2=}5>@-JdKl zHfn{c*$8BTF6m%aMAyuo#GefOE*ctey>A1XPo`rikKgSq<|(Y2#JG8&X0gvxpTU}e zerNN7QtoYrqYZp^ldiWx{?6=xuv_hND5++;)cd)wbQsojmGHBjalCQrt5z=|T*2a4 zH@6%>>Avnq2K3&#NnJG)s8B_HaCPQnXe#u+_5AKnhAl`0LBjx$VZ*M)M_H%0KNNj?o-tBfm#{XuCIRzsACK2LFV?Mn!Is6mx$D^a$Z>rd9qT3g*$Y^nYpin7fkf3imY24zv! zNc=;6lUbVn6lAw;0S**Z>jnog>;jcH(&aeDCe*DCj(0j zQg?@dGf*=yu>EqBgFE_@1+1vaYCF4vERbn%0Lo#R{mJ0172%$(W$=t&%b}ce+Mf&= zx6nix(jmn&lxySqm3bzrE2dpDB=N|RDA)Uak_wD7>Yb9E^>*I;d=1L|Q~lMpwq8N`kz6(GkpR|yw`{`f? z@wb?JD2-p+q{W&JK5{%XK|GRu3!X;le+JQ;rWZsL_W7B#=;tUM%pgvg0S%0OmW{bL z0i}Z(#3ps=I%L)T;uK2%GlU8gBirp z8`T3@tQ=bZFO&{u5G(z57^PJ*;VzQCgE2N*YxR4&msyJ^OhxHn264jWB~)|NbQeko zGl=W<8YGtw-j3424C1&}^sZRn6{4fh!3^T0x^#_?`aXYhtm$9|aq-IhG}?LB*P!%2 zgBX?~vwEtFqprECl}+^G8A=B;i1#zLR#IJa)ePcqe^)~3U&)Ut~bUK(p z{A&ftus<`>9m)R;qATDwT@%7y{SGtV`a0xb2J!5(0ytXt@s4!WbTES$-FXB`msOIU z6CBJSKK%L9-Qo7q?{TyaW)Qn{ABi>1)-&#-bTETBYbS&^_LX`{!-gmw%pmS}eMNG| z%)}@i%pe9egr~O)`WX6ZG)0FFW)OE)JcKpf8^%*}=wJqM?+G~KRp+5*5O-{XnQwh0 z_@6-xiszZD&;XEuADX~im6i@>5Noef3-V*HnpH~_io z_MF(9WM?mY5I`S84rUOaR8~_avHSLq-d>ddF@tCx|MZdLL~6&X`)|Mv_3P4VsXx`7 zCib6HyWlVHV*gh?__J$3x_?YL#&m7f7M?1ECC2P-ZT!9vj)7m{b&LzY$LMDfA9IWN z9X0f<^6zBfS?3?{m4@FPwLxvM=P*n*9wUP<0{>q&hUo8G!gWQDA-d0-Hz@rl3ua1p zDU`G@DPNEVjvDudFTnj$Gl|H(qHLo-RXx&h(0-cAR}!WK6?JKFntSuHn7|H;C{ zr!Wm-%RwtcNcv9}-u$A@(pY(~7CepFqxGLG?0z$flZD#x;K|57SIS(OgwjE>&>(FCk`+I!M(H3~ z2pMvZWEP_}N(afp@O!Yr*dA^7nJ`VM&oT$e!rJ$XNzSPcld4+!PZrELTc4pc{wf+y z(*N4zIny?g9M?1urGsQ4Y*IOt-fU$|ln#=GP4&M=X)P)VlW=-F9V82b_q`(7=^{+8 zYv~|a$d_I{E7a;mY{?s87rGsSQ^rvgQwfinii0RQfNEX(V z@O-Kn0&5>_>Ho{jHtbxEGHQM)n6TE;L9(##8`TTMUT-%>W<%*9S;#dS&d-VP92l0q z^>dUCl7)|5q2uldGURFdvnU-T3qNjCOBd|Xx<;OX^jL4F|75|H83DC4Rt~4w8jO6_cZMUw2s_z?$aUHlKiy(_wi!)P&!B!F6Az(3*iyQBB5gJhw}fVirh zx`(P{A*O2qln#=G>|N;!roOy?0!jzT!i!sxYP1ERrt99Sswf>K3qfg?;dZ*dJaZ1E zgJhv*Ewx``ubL%0Btz*SS(urZdL(PKXF5s;$->OiiK*s@M&F|JpDdUus?#&I@peyE zl>d<|cn*C^7UHWN+g<&8LnRB1)SoO_SgrnNz+3n~>YvzTAtOr`s`c!mzAOFf4(*$_ zQrBuH;li6f{nbWZgV!_u`njcU7kq>Z@$BCyt$&;f{^NK*7doQ;P^$*i-&gI1X9TM* zqy~N$F2|Wx&s0b+eTg%+?N*fj7h}eGbj>39M_ov9bxmoB&wnhk7?CvUK5qAjxXmF7 zv4`(J3Yk0qF3RZXwcycQO9xR%_QmH>nwd_0htfe5vb`pRT>4!yf3BT`r2i=7`$=%w zw&k!T5Zvg|I*39}41$2)J~9sc-G-$9C}d&O4wADwbtmaJ3Ncdz??Y)O>^PXD|0v{a zzicRtV-q31wzt!N6tbidL|gVA`l%i5TL)3d-8BtR8aI~1#IdgF;A7h3s~19P4as`} zrGqGBb^8)1jU}z%K}FYe5QVH>ryd>c?F?UZ^dU+IQAo=lM(H35IkAqeL*~KrnMnHmO>$;fG=xR=ahvCUHIxpbklZSA=AdvyJC$kz7nN_D5PKuI{LifDwU)gvLDD-NQN#|@{Dyn6?xDD`L^ zL?H)ys0VucT(Nd!p*`dv3b`|I63J_&XJbtVQON#0B}r~84e^T}t%F4thX(|rjN0wF zhSEV4a_KxBx7L|bSx`ENLJ9`Kla$(46@^5!$&b>16cYMbn!`$V0vVco;z*PZqL5Xi z)mmixU2!ceyO3m7e^(P%mQ0CAX7EDfqxY?YC?x!wbtHoe1*7yIg@nf)dKRVoT^qV* zJBUKMjDhJ!eT{du%?#7rdbAFrkS{0D)0-!Q7otin9Yi6EueHXS=A8N$Q96i1P6u`; zdAMl_ln$bh=g(;0nh%aZyRJv;APT8=;kv4+Tc41M$06F%(m@pR_iu%9wC)F6nxk|O zh1~t~f|4p+Rmbh^By^2;5QXF&F-Rf!Hy|iy=XO}rK@>8+mTEEWBf&eoJS_3i+vy+* zX_sV%l0BiOyTwC@N40big%tf(wU>6yaH|zvsU1Wiof=J3sD^3gRNL?P}| zZmekrK5K%~e-z?Q@T8fN>RDcGXTaSUln$bh=mT^lxU4a-)KHJsK@`&J9fb4x{Ir^E zr+c=8C}j02h(c_+*fSApI*3Ak-u9B@irY0&I*3BD-T8E8fBtt`l>ZThSatq43Tdf! z?hO@%R91iXQ~%ok`21e?)GP|A+~M11Dlv4Bftaa(NT#+7^|YWfZl zxZLv{T<~nUW9=^_eTN84n!)iQ^3c-Em%l1W-ys5%#^2kkqcol@TSC%zh`^+|{|3wv z+co#b3r8u02wcVwA5Ajgiv}cpucu(rTE8d)rL}qq%(dwwK?o6;G>(+czBv8M1z4KBy*fsg0ea%82iN%{^Em^8hIR7)Cr3>i!5 zNDx8nXUb)ckjnWgpTpB!mcD7TdOiWZ`{ZVol+@-nbmw z7g}U{w4*W{Ln(v^T#gI+jpXPM_^g@UP9a3#vT^VdlJ(Nib_yW^mz#I@CHZrjURYCD zPr>EwMDPf1Z|Ajl@DWcvS|LQ>GW_^+lA(3ylJp%SFln5uS_h?Zv~eMnLWsbm_nW+M zqt>JK)?Y@)tq>wGX+0Q5(z<(u_K*-FaJjwwaI9(lJXSxv!+k{v5t#JW)AP0VXlvHf z&6t+HLj*3*J%;r$wmkVP0q!9oMBwsHu27OUO4Bt#2oadH=3mW-(wbeUEY=i41SY+y z%sD8%$&x-mDTD}2T7M)=iPE|?=?qFCL}1dJpkWS@ACJ{SDTD}2T7P7MIYqs1ty^9l zVZpm1ga}MV-M`cpWz=sE`eRKYL}1c-xT`Bl>(6mxQ3@dflVNqoKm+(gfcht_)>R!R z!DxjLfyvNZBj7CS0x~pbVLb%|QV0>4bRFKHJ{e-~A=klXIttLzcZk5H>%#z&!C%G2 z?G!=;F3Z%1?Yse_brs)R8Kn>+Fd3e{(}r|wD!5tww<%BAMRW6$iE%Q{4WtBDXIFlmimSP7*ytT;VW3n2oR zXUl#?^0@l#s@#Ub z+=Yvwu4x8+M{T9h>~neIEi`JjJlLWG))an=8<#%~7)NqyW}TzK&K8<|CXL%k)nX*O zrg0@vB-QlY>~py}?F*7?eriS1ceBr=nLRsX>-KhjzMLLD6ZmfSnKbU-f!PNwjoVe$ zP)*;>K9lD5uT}ONTXWr(PAG+DpGo7*;It@>XBm=^^xf<;X)X0WMrqCcicSHc*=N$& z+lYN)6(1RGCep5%|4UX)ntoM zT4zJ)ToIamCcU|@!)?*7`Gp6*^+mT^LbK1L^{67uylQFPIYI4~(Cl+L=nr_zvE{ev zn^H~R%|4T6@IknYYH8-a-VCMC>~nc*^9GVvg7mBzoS#Co&t-|pH%S&;MYkxS+2_() zI+LU;H7v2#`&MZ7xg7GY0?9sc;e&lz3e7&3!ywC#-9!C)&PORU`&?EVosMMrWOUIN zntd);A3IHQ(ZkhPQ)u?Nyi~J3$y2N7h!>iDF7xlLNit`grC8I!*D~y146_gV7&3OI zqX$8u*=IGqwUT#7>8)IVjs&6EXVSWvV<$@Mk~a>HR%rIQTsd_x$%Ut?p%j{ZCcRY- zt2qmMJH2JD(6!IO7rP%ENcS@D&S`&QO`+N6H81spP($xq?}>@EQ3}mIlh%*lLyV`T zHD>Vul77FIK{ei)NxqMw$XjUkdCjW_yO2Cv<`vcyntd+cM8OBC?a@9hUj?Pm>~ncJ zNgI-<(=I0I|HBj42CI5@&8YL!bD$KOeO~jAO7sk7-TImC4nnifWLVW(3sg-N&8lX< z%=*SyQ)u>?49ynrM? z3~5y4ZzV6oF%(kgeR-5Zv(IFB(r}n!wBMCD_Ubpd+Y8M;lc9e{-coWX)C_%`bPv`P zntdjNJkie-QdeuWV!+iX8A_qqXVSaq%aS-+@2myzkx+fN7n*%0-91;p^iVIT>F(Mz z8%m+sXEMCT{zF(Zykb-tltQ!5WN^P}u+)AF)C}$!O7Du$>@#VWSOU$yepk%G#cpCv zq1k8B{n>z#N*0Ei?i6MtltQ!5q^oM!L9FR2+k~FRg=U{gYru~UP+C3aPRE);v(M#$ zD)c;L?WmFyrO@nid3+zN57c|e`lWzg0}jWn(Cjm5x@UfRdJ8O+8fyy8{uB85U;n#e zK;5|mZa7;pkcO=osMfV{*OFb-Acb@QN_qRie_(&zYjv8$)_gsewo`}_xU5)GT`*&1nI3&; zw7#PRCaeGbL^X4^tp0d`I_B(so4|LJz-8V^RY~Uju@p()Q38`Ob>;=3jH$M)GD+W2 z0+Th;?&^lJM#^j5Pzq53lQCt-sS8Q$9xAaR1xepg0+Y2LY#olW_T7i-z_a&|5G61f z6S-*s${4fUYLr5hz-0B+@XMcL-<72|VLm_~Lqe3mWSt6Uzd%{1bUw&9wG^TRCTs7i zvk+zNtvz6lP)i|7;PR~s4P!@J`$dBrD1|72%M;c;5m6ruz!zfY>d(AcZV zh@9{crKJ!hFj=R;#-u3g)V?wrr4S`BS^MW7)}pMvV#z3!LX^Pe{+1a@?jDu_r4S`B zS;w1j63RO6?$FHX?G&N}E|;#L^Rv$UjQvmwQ398z0#tis@7p>@K7^wbq68*uuP9m> zW$neeV9k^st^aicb#k|%BcV>#i6>DCQ39`dvB?vvd1e4z!GtJ*%SWy9ki0iM57rc- z1TK4aSw^z!EV{4wUpG+i@78qZt@pSwtU}UzNQe?x&6qE5e>$@>#i4705G62K@vn1g zF?HOz>J|}D@zLX|SW}1+n5@wFM-|1}M?!`Ai`t+RzDm^Dd5MZ+AXJ692tY-4d zDNzc60Fz~Yxq4RBd{ z=8rLHPzr$nlO+QVsi)L9s z2}Zcu_Q01CnthgpM4#<`5@qz!TXg9bntdkCYUR{LA~u;Q-wqaY>VryX_PKm;uce_L($p8bwhWmsSR%6q@(>tdGav(IJ9^-W18 z+MA5zbe}gGCand>5~8$bJh)BL|GI%n-WZf-sVsw03e7&N>4|$$JzB*cL+?^j(1F;xDKz_BcD-GYWcwm?t_aOOmnZt)A-TWDTC6EF`&_q(%Z$Dj5UR3pUZ$^15jG83;l#rX!e=3 zPCil(f%f}p9V$r;snF~*>Fs!J3QBLQ{b5*BX!g0hmmZcX>idfK=DnUMg=U}2w?Ez{ z`Sj~?D1~O9No!k&Xq48vJQS%3%|4Uf+_Ng7^kyA;7i$X5K9kmm#p*F9cHh1nL~)4F z>@(@jJp3?9Z`uw`u%^)LGikm52=lLc-&!wHQB9%QXEN$z;R7h6UfhLwW__g=ntdj% z_gQwLv|a_n>KrYFW}nHhu3h0?rj8@EZlGP}TPTHQpUKd$570Dq1sNLDn$8sm>jr-9 zLZfwEs7*1R5EHPPt`hw};&!^Clh(n}3NZnfb+V@>S-s>kltN6vWO&ZRbkz+1a(Y{o zLQKG<`WA&nRCCr#3h0HHfJsl)cywR!l>N{EYYH&|ljg7A(Y4P!7yUU(Atqqblj!Y0 z9IYo{IGvwDOu%K{EHz1HZ#D&M3NZnbA)Wq?Q1U7qLm};g=tvM^0w%))UsLZ8{?)b) zSW}1zm<&tsD5t799BPKe8A$P#5EC#NR3=zOO#ynvK~VAI)NTne0h8VXrBxFgd%fNM z2G*YF^HYckm~?-C5uU00z-Zkg9*;yR!~{%+cPm#KYlgR7UIeAk>@yiW4!$8HU>np7 z9`&X_N}<_j(rnrq))MJ!pII;0ER;gC&!qdS>-m%{0yW*)hSEJ-X!e zYGO^H*=N$4b1xo_)|$5W2b4my&*eSWI+C}%7f}k$K9^6+*CYAI)sHBJW}iv3a;Kvx z%`(Y~qZFEb{Tz|CHtXEARWo?_7jgnV z+#(0csNvpHr2Mc{)&Q9-bH!0#6?Cj9+7 zm50PB0Wx7w0thv<^#8?+i88j%N^)6USPiM=|K*DpD^FAlZtU$IQ6k^>_)-qykb5<+ zp^Uzn_AN>WaY*w*DkY2E*9|7GL+L*b@dPxwO7hh=a0=)R7uG)T_xE%cIC<>%_i%b> zw`}SAmw0oT(XB2Ju`*?O_{u3;`j12I{ZtF3adTv1lD^kI@S4^2?}oESTfX*ulD^kI zaGCAYE39dzKME9$b%tpINCLTyA7?6mJZ?&S0Qz(#>(6UCzA9Zhg{v06Qy0X*~HF9&@zxABRN5nHr8V{Kb7b?Ht4*n^M4ogWf~l)fp#I&1?E< z@y{fiy(`}Iao>?lIwKOLgE*w_$@CTr;x|2SlGhcsBzTGO*4 zN&j(3Q~f(f?PI9U^~@+8#37#>a7okBlk)dUB>jK!V)q(#P?~Kww?XM34r#s<9zN~S zHnZ$#>q)uRLg`7^;tWa$aY+45*-@G?dti=A?^|K*1KYR8tH<=N7*CGo zL+Kz68Jkbd=f<9&!*lOO=^zeCUkDxq?K3<1C93Hl4!JjaAxi6JD~Q?kb~=bdhTlt! z(%W|%%;(zjgWs#kht$ye*rR=sVlztraY*E65j5J!q)CsVbP$J}o_i5%T8H~X(5Xl3 zAP$M#Pj@7*dnv3#(9(Y#;!W4C5Z3f2i{BKbgE%B~$y1Vf7ePd-Yx<8vyy-p*C7C?& zZzTPGjG|z=Oc37accoym=kHMZk3+mk6RR~lvF~U64m(jgh(o@61@|&_?5gH)K>MR8 z9mFAp@^n;EMItH=@!X=jgM&Eaadij)^>(`c7+Dr;I*3DR97#vAa_QD69mF9mayKK{ z_@{X&9mFA_gZ7{d&-Y*~N(XVsmL>gBy4Fq%Md=_8X>nyON>77~Yfw6fL;h+z7o~Zx z4BdGh#35OdTPQv0!UkYX2XTn^E#2)s?rQB(I*3F1Zc(v>{aXM+ddz%`(m@e#a(Ohae&0idniNzr?CAv3j-?dVcF3mc3clr&CH9F^4gT1W^1(@ak*sUK( ze1su!|M^=e0+PN{=XJsg00RiQF|SQApyyXXA203uS*6byr8dqAf+(G-Zk*( z`tPrSY<63v{PyTa)Z5^uLHPbS2Yd7^l3M?gBt3}e7qcp%bP#FunerZMnw_iY+bIm+ zL8Ots4?N82nx5o?s$oqBk;dIIY5`g7yL4^kFp~ZwjiAF`l3$%4L(*@gVaDnGB}(J@ zACPmMq~U3non*+@Iwa8h)^DWYiMysO$yY3L7U#`j0eTWEh0fdSE}Qz-awP8fF%w9ZEAr#(LtOS9vS)F>T98et9Mqx9q&xtyf`NMkHKn8(%} zGF-PW@UA$BG+E;2_cnsyLElj->6drvFI88z*^5l-A3` zuy|JQAqSDh@{*5HdVhSTA9rE2{#STJW_S#-m_GUhJkL9Yg&Ecn%+IVc@O8lOMTh0^<3($gp%L>luS7E*Gmda?@$ zo0gIGt%FFT@+1fex`PZYHEcE3^dD)s69gx~(YoHA3MJ|Pn<3f^h2~iwx2`6y$D?!* zY4ko_pJbOzWl=haG@>KjD8sFMj8YM^uwX^c+xo04i`Q?2kA zI#vh!aArG*H0rFOt|PokfR6t_I*2r~KY{mCMc3+x&m2ToY6p=I*2sp{MZ3&hW}WDuJH~cjkS#< zRkvp++tJV|ApfUnMbH|B8n@`tSV@q*B{iu$C&xmPq_72pKVPV?kBy zcWs7buj#zlG_|5PAkJM4r&I`sVrue?7vsMq&3@d~!z?m7T~d@qM#OD|QV1`YG}kAF zyjs^ZSKW_?QV1`Y^pvYT7Nw_D+7l#we>{cDY}MnC%)ERmN#EfGljb+ysqKv&ZNuZx z)ayNzz;}4TrRVPsBwZ7#lJvbEgUi`Xz9KpOYnVZ`Yx)i^xa^z}@@jkEwr>HgoGpEa z7fgCQaUjvx(&K&sji;7Ec)_IE_x(eZX3rxK2iVegc)_GM?C~s=-k=WyPzvD%lV;^N zF!yS2XL?lwvxyx_9a30SOe%eG-FN%{^ixJ>m;ags?cekAET zykOE?bwXW&V&9czYhcbpZ>JDmFzIQ&_ZUh~lLhceQCs>BFPJnB6jK>+Y|XtH4x<#p z3oh5?f{4&QhE^SFNz(VnQ<(ImuH6)+CwT<4a(c8vc)?}7^Xe9F*Ho*^E}#^`3ntC8 zzokTJo;-3Br4U{)=?S`(8>J`Twr3>m|0V@o`|V_1P5bl<;IeMgJ|t_5%!N`2FPJpf zFDru5T>S{5Grfm|@Pf+{Bd(DwI&v#YA-rJHdn4T{l-?^{j-V963ocvCt3|TutaT`b z@PbS43y50mv&{Gak5GC$h46yQyA@`Vyj3_UN#E-+n2fAa0p^o*&BzL+>Fywe7hJYz z4&j9@o0x5}rVw5*>CM;i9ZK(4X`y}8+bM(>Tz;PoqELGejc8C5r4U|l+4Sq-Bpc*; zj8X_Mxa{+KI?0|nze6d67hE=9OLqrvi5$%xi`I^LIlC(l0vUYEj5Dtff;c*}o7 zDMS!VdNx#r8B{Gjt6%3vDMS!l7P<%lm@Tbpt56CN1ef2mrE8z3QK_XUg$RPn(Q}|V zvTKg`>pn^$f?zUaRpH7?s^=3GL97_}6G|b1U^0AKIp}b7&G1PR;rB`Cqfdw+m<;x~5`V}F9U@|i3U_u;iWWFU3(&(B(1i_^H zXptF84uYEQ!<`$V6e0*F!_VqfZ1x^HdFLcbA%b8s_?)GlY6A8^&EPZj3!xMu2qw+F z`zPRbn!7U4xgtamOu8Gshvy*`#;fgYP-ZgL6e0*FUHkw15o@~k{;3*Bd*2EX1e4w* zYZIaLCOANMBq4&}vO?L_B+Ix5V@)A~;IeiBI&Qtymo7pnL=a4xoARo?V;}M6y0;L& z>SIWVAh;aW=_bix*8)%qIRg7eiP(GqK)o*Te5Sh5fPf-H;zMk$p0?HByKg^^uP1ch zY|(+ayi@{|=B)AXaZ$YuLif$2r|8LiC_ND!sH5<|bik7lzVXr?ttUyhWK`34_swdW z^(?AsR``bcJfZvMGWc-})-AU-8(i1v7KT1!|>U38Xx^E`Uu20~(LmvrdvvY~DWB^ z(kz`8qH?=tRC?M&Lif#NM1>E1QAQNru!U-l)W`Nedl4ohno}OZ#|yO-x^E^u4YLHI^ip4zUxyGb#2+SYuHC zBXr-arn&6tr}J~heY%?XUpnAPlnXj1`{;XBh_3uX_swg*n^}S6!%WX`4+-5jm&ZD) z`+scBU14+`61s0DJ-H*)HQJV*jLYd5^8e)!o+>8{lEpKBj-wU2Z&uS>`sM&ib5>$H z`h@PA%R+azlMH#29cv2RH3~yxC72Mk#dPT>knO?IG{+_VfhmVCg`aLgle$WK{e)mQYc2;DcAL!!r%?3S@E))cyLF6(^pX%CeznFXcLeRJ9M5cFL3 zyVC677bu19o6Gw3!%0>e{;6;G-F-7zut6ev!YEj|I9-Q??wd)kC-)Gl8F-)`j#lWt znGEgv%SI)8!ZTQCtLXkHh3=b4cgQrl3%YYe!on4O3_18r!^B#RakQ=>`>4+ox^Gs~ zHUEckB!Ae_1ZxW2H-flxFbl*&RmXD@0+cUE@ zOy24}By`_gMyy_gH9fhDTt_K%-(1%F;yKAmWjCM{x^FIr)ErK-`*eDy7P@aHLzeY| z1V{A-s{5YRvK7`8x^E`K$BvtZHN*R#UWiiYzL^Y*&I29dXs8($ey#&bq5EbsXzBTkQ0^^s-%Lj4O0O2m*w=)}^eySmD|FvXx(}9ybZ`6h1ddkdzL^X^ zS_PJZ=<87U&gKhH3f(u8!KZ@NXITSwL(SlQ2UnmJx^E`UtuwY@O>B^(i>+R%=G9zWc`)5CrY9F=CVZgizvNj ziz+CE?wiX>wW+)E7R#I*rO)j%!vXFv6?{ZA^DJ_H23js0Ks;LolB8SsM;uxg-q%cdR6v~S)amrI^d ze*!~k*yA7bE=9&KhiBtE@S;UJ$AwST>m>lJyN_K006)<;fyV!Q4RiC>#P}NKv}7sp zHCUg|UgH7$xamJ%!&CXUbNCvbki!k=H9pO^v)6b8KW_G~*T~gzD!oR$3Pb5NKK1_W zHT3>y@z2*VTb=RZYnY|?uA%}-aGcSk?b{Iz-zSo*K2gY_!GTG)vNj_*01p?BVe!b3SOhb zKVQRBa2H&`^|pAvJk}hyg{1}THT0u+r+>bNIXJJnj>qng#tFyKYkbNL*lWClA9wlZ zYj{0()zgpt8s5)_=Ev7y2?BeK5Afq||9lOzX3Ams8m5^|Kl9a6`;=t~pI)Po4$i*) z=W9eXI8Yy7Bf`9_SCqhOusMD98v1do=RaQ~^0Qaz@HM=DuIP)~!tw?78u8)Bz5n?d z-Y$b-u1mi!-m*If;A^m?fxSjT_;KHVy~euuRp>RwXKanH!7>N-8anRj|F75Rx#nkj zjhN}WyQ!u22m3t~>@|`?iGlxmjf~!2_!`!O=YceiPpbgfYv{}P;D5e`xuF|$u=Y7O zv6Nm90OMeZ1bdB?P-5smU&GV32|VZ6$9jeT$JtqcN3nYizqq@*dv&+nnVl`g-QA@? zf#MYB0vC7J;>F$F?c(n4t`~Rtaxy)q`L~-p`Cgufm;3&=znmnK$>jW!*%mm5^$^^I zP)17lctrFv9H;Wa83D5%t5$BnG6YK@l#v=f9u=dE9Yyw288gnLr!t~W3kYSTg^$NX zFGEW=eI%9fp)HMd!CVMs@DSr-l#%EcQGkiQLdKsFn^)oC(OJkc)Wti4G8Jj4DGP1(QQ(~0S+&>eQ5!9&+mLV7p zp^WVC@wDh=IChojhGjUy-#?}@qP_@ID1)cYGh&ocB{thtitN+E%XpStpN&(&dI)9Y zh7dEOm*ITceG8W1JlK%tAi;kKW$>dEvtyLeG3^v8qoU&!wnZ=@LK*qty$qvK&{{0Ru;1X5Onug; zf+rEm@PslJ#VDiG4Qh)~zH(J;i(pKIGQ8pACDF@p`p%*?j5FbyzEnokFXR-;@P&_; z#VBJ+PO$U*o^y8k_X?IFSQMcQ8+^PXMj4^6OHdhQEAvjP&-z2~DMA_kP{yhlWen~` z_pP(}g(+AM!K?^n@ac9nJH3d5Wdv4?L+cO0 zwg_byP{xMnWjKo-G_VY3A^yrEU*ihiMJOW>%GeaW44=Q+{L9Md&E^^ppVqBuE))!m zP(~1xu_byLHf^~L>tV~DiC4BhyDox@5y~hIWo(OHhF?T_n#cSGUDymi1Z4x5#vAQ(PAAS>`a+?HY2!2K=qcnur6}=35+ai!5@o{RewwW)4p$x&)2xXLoGWJ9- z!-5a3iS|tk5EQ! zDC1=GGJMOtsK?6Srzd>(R@wwK&H_MJ(oXSbtR2Jg^>uKN8Al1s~sxUWVVP zZ>g~!ek&Kp#xewxB$UCY{oB#YaHjY$9m~*P>D{pm!6^x4w1toF#wera<41kIQCQw#xfjpRt&{@2*yb$ zqZ54mI7S&0M^IZFo%eHl4)qY+lTbz%DC4PFhH0T-AszEOC;D8R&nor^F80VS<~9Hn zD!d~i9_bZSSn+n94k1}QTSi(!2x>_}I;Q4bgrs9+`c2pwf>4r>TA?JcT;R3Ua;)R) zG^nlh!4b#zTPcxryz8@_Vn)d$NlZt{6+T2dp7VQ`$Ba@&GBWK0*fQg_btIXxpJGOd zA{jX_%>^QRT%xH_&_gn^($e=`64KxILpYND`5InB zQcye+()lEz7n07KyZ8n?)K(BXGO|pXHAFh|SHPHp&XJL$i)SNpKoXw)LQFy8$jGX9 z;IN9>x1~PuT!NF92S@bBozfwx-&`M#wN*GcGOl|qBppLuyhKvaG?LnCWebHNsX0&c zCll0GkTVj}v2+mVHghD*+IbLT3Q9&sP8v?LiDP)9w?syX7#aEM4{Vf}F>llr_Op{75|{s1^ySCDUp2X|Z$X#+V8RNA%e(F{b7<^cs?a zR*}SXOxdyzNyn(pqlt`?DKawe&W=Q8oKMSjL7_-U=kB$>NIEyZ-H0&-aUvs2AEuew zsTZU)RL~_dGF_rx6f=q56=MpLL`EK5JD14q@%Itw{iZXx&Zb+r7lAulP#&_F#b;h3(&3zj zwG~8%jBNPLo5&i~oJb0KLq?XE1k&7`HMQ@Lh>VgN5;CxKQI^V>WT4S(0Fr{rkdV%N zA3>0tF>~ahBv%j^64LijY0ybbYqJgbO;7J)Ooi{9Xz|xhMzXQXgh%}Z?~xRQha{#g zQ&(D>*iyu$8BEX|64I~#v&`5|zp%ZufEDD1j2!zMwqUM16+lu@3lh@4B~5#bXbE}AND%aZgmf0!*a=BzuI!mGrXU4mq$6oo zA`9E-$t$P;3F(;rf>z^>G1<6PgL_2~0RKZmo$CFcPmiQ^cY1_H6I4O;Xhq?27d5Rx zH}<3E+aZqC_DZb5Y=4e@_r&6QQ}`zeU#J6q79OcQy*bc!JAgQ(Rc|l~<85yz5gax4%m<`M_udNo~ z38u`9X)QN~xN;)t=vTcGk=AmfZnl#|R_(WnNNc&Vw-GGs%rUj4Ej-N4+FHLAGjYpy zB1iUS_fI5gEjQ{sZHA;)?FhVA#$zhTjoGEzA?cXfAsdlVr&}af#aT1;dL*5d62PVa zkEtLxIv-hvq@!(Iu(+I5kQ;r@!af%7TmNqPVNx_>TE7+Jm8c|=M!rTM8qAn?+}?J= z=yOhfKN(5qsIMVND#(qqd9M(8Z2Tf5739X$`VmBqEeYPA*H$=}BD*SntE&@PSU*H$ z)M*q6={TLRDUyyOz1JeCAUB4!sE4H1KVl`3?!S{l=v&A0E(4KtJP4uDryw^jTslbP zsY=r@rovk>URhTnspZ${F0+;!TAnv;iOd!Ri%@=56y(N-9&ld4oD*I?g=Y~b734;x zj*tRzQY$s%1CdduMwAABkzFp+e5)WgE*Ak^VAl4`@+TNm;jNg~S+^3|wD@l% zt>uOhJIj0|o!_d(LsCI*3|};c$bnu|TLrn%xF#%GcsreSJa=PEYq?=038XvQ@aX%R zNNc&#vvwJbX>_zFLQ+9)j9f&srZF&|Cz1+sqhhIR7}Htu*KH!BPIgGfkaO)~kX2?6 zEz?>esUSCotgk|3|8g{&D9DYu2S7BKF=v!%jxiPF#>kEDi5wL76p_|)WAxc~NCpnR z;fLCTWaky|>BKJ+EIbK0-3^X8N)l zYb`fy`64PKY0HsqA(9Gm@{dy!O-8x1qTHW9C_R;wUA9Teoo&|z_j?3ZRd z##E3StJi?sFk>$6w*g57x$)14k&Ju@W5|1d51JDcD#(rdS3k1avTMqc z{@XP&BdH)aJ~q2SJ@mTDMlkP|s-x>zF5+@bB!t?6!kaXPH;)SGwR~R_uHj-M;;&9LK znAV3Tv^p86$Fz!rVMEO%t-ZpmX6(5g+1KMY)gsc`D|EOwm&g|5U`1udwDt;@lfZdH z^ZK4x+=xhPudw_i+~FoU_vUOOt-V6WpL>whf-fCJQo$>1cno)&8FOhZHrUK|Djb>! zz5WJCXR}KekyP*s!v}vs($TL}X(ScA!jzD9Ncs;Skq=4hLlZ{XJc*GsT)$c%sc>jw z<=8+Zoe|@fAgSOLo?J*s)?PtNay=!Ijz1^aByIMPf>#JWdI3qT-ob4| zT6={_)xc8nJ6ju3BPWsyUg6&vuw7)%2@fX2I+tHh1+UO=!)GGH+V4kF!7F5(3o8vC z(@5S6HlKM+1+TEGBzOf*I_K1WgQS92=&^J(k?p&|+M35y@Cv!l{z1~na0)UWleG2< z6EcMoIrPH;Bo(|u#C2FvnLRYE$~7bvyh4j-U6FLwJ@S=EYp-zRbZsJcpV@_^f>)SZ z^E8oD@`F?5J*40jHgAY}uB^-e8>F06@Cp$&$kfe|Fs<%44mF*HIfQm zAvpOuB%KZTcS-QtT6+b*)Q`$Cat^Em{SxJeGr^ox@CtK2crmgckUrD?rgkcLh4!6k z^w}Ceq^G@tS2)$b0=Cod(D^{Dt%6s$9G;uV)8lE}DtLvdZ@>=l>uDdm2#g``AqB4x zn4I;FN!t9z(QKmN6<*!;K~j4V0J$%Zso)jD0$LH-=5ih+6}-Y+M+A|RzQspU!7ChY zx`N1Ui@;Ly+A4U3iwoiDz>hw7p9)xmq=HwtW}|z>esZ0Gq=Hvy@0pp!oB-q2x8;&} zNGf=RRW}?A8V983;(?oxRPYKRiRj5|G`Q9mNd>R)E*PG?Lm{T^`NyM3T6+cmZoZftX$&v%_{Zzn%(S;Y&U?lb9pk@v1U=>)G(C8T5L zus&r&JFpC0MJ?QHo{d%X1(fbMzk4N{-v@ZOQ46u6|K8Ct&-bTb=N#By_Eog^Cv1Th zvNT&}5`=H_j436al!io$*J0%C6lE-m5;hr&U#$WRa%eE4!Jk=9b;^xmyR?n%!EVq_0lONn78;3hYFsLz#fBo(B@v0LFt zI`(zrsVEFb1t~FP6o@Sz)7j@jAB?FWB_gtaK+-YwC{LUrrh=4MSK}s<{tFM#&7&YC znyva9NuzG8(O6prDRIyVj~KI^+pF@F8)|DUC5%|Zz7qLq-x7?eASDi5Wx^X{7N|s| z<(nMNkbgBI8!TN*q_vdzS!XYjj&}`$kW`QoTgvo6Qd=>M+G+hJhn9cmOd_-P<;za! zTWcwy#mZ|S>G-^;Bi2^outTGzJCW3?ujGp=h^ZhYYIcQ`+q}yv#D;AiK7%PpiF}P> z6PfYqLnIZXM4vQGi0oAKHIdd*V)^H`M9zy(q_vdL;@ypdq~k|8fAB*ODM*Q_A*+cT zHPMB&Rge*?IF3^u~}RZ)-<6I!On+B%0#re~RglnCq- z3rWMa_HT?Se8~mwDX=zp2v1&PMd9g0&M(W;2xzB*l-N-(Gm&dv()Co368+!N=yP_h z#nVEFsqiMpz4P>3abC$f3)`t6CALq9dOECG+7C$uDRFv61h&(85Kcmx*Hb}C?5uu} z$aOFHCJnT6ytS0r)#4hGf$K*8!k7wDqHD6Ru03P&^e zxK)r6tG6v=B)c+9N-Vj40Z9cZF=QVcXyY@Ot!IX^L}usf*JMzla7I@cw|);=P~ZAp zUvEQFK}tOSCyKl?zYdZLQew%X#aLVWyjF0$hxd?zl&IzGgQTteE3W=vBv?xcJ#MuV zNNV2}(8^drN{mjljK~2)J7H}Vq{Q}&d5By!EjE%0QsPdgJc)&v3R0rqsxpk62r+%T+pAzq1u3!X@Gb_82hwx% znp#LINQnX0b7O6duo?7Rv6d3{*hk(oau~$4eGiR`F%_glfx7fW^3QycW=(4;;hp4L zM;7id#Pp8)CNajemJ(XB`>(K_THKjjRKitJkP@>$!FB*sj;x(ix7@{;)>6Wj?isD) zZAo=5d?2QRlxR2Cz}h;SA7+qwXDdjFdEqRnk6al~i%rjL1u3yUZWf4liDYwNP@r!CZTCg;D&Ew=a^#zaE~5q{Ji$ zq*h=_awN4}fiPe4m=cp9l6%&-B64f>=0v)GZ9*ic#n*|PkONk>W=!`cK_DIXS{y^t zadnZ6NcSc|Bv*|1NaVtm`G|CH5(H99TW>6qTCyoeh;(lf1k&;T1FXLI^>n=UfVseIz@|2jDKQBG>3=m}5hVT3r}9QpViE+>7+D840(eYg;APk}Gh^Oy zyM_`-=gTS0k#s%|DvzYZBnYJ8nVqfKB4g$~+!jfRNf1cqvz>H*Iv?DqK%{$i*0U3TBA+ki;a2D0W;3-@ zViH6$?@(BWn_3^k`j|3l09BVkzJ_LtsjySlOT{rgMw`R6nU@Iyy1(a#3Tr$^Hp^pB%P1nq()L=5=3%m zo=ik;x<3j@iAfMhqwSIzNE*RA4-x79c!Nk@J+q0(GdB|=DKQBmd3PdPk3{y+^+mOj zl$Zp8bS{q-h@>;(({&=gRFNr_1iNS{+93p0|Lab^;ZJ@!IUViE+>HuqgdtgUU< z1lU&ObAse}gGk03w1~)9qiMdCm;{0J`<1c^l78Qg(N&R{1c9{g$$9`u`;McJu(lGD zAdt4+%g-Wd3)^)cNr_1iNWHKJJy-NREr%j0F$n^xt$X8zF|`#-Gb1T62_ku`z%wGR z%vpq_#3Tr$9&2<}B7f|8jikgR2&DJ-9gxdCg)!v)rDzo-B_=^2{d3qmV@&^y-V>0N zm;{0Jof-khcbSJ^CSj5WhfetDlb8g7^t@7r`Bx9_AUrR;pm8fP2?A*>x_%04Ys|e1 z7L~`8m;`~eXYQVtkt3kC_6#}7At^Bl0_k5lJse!(PkaBelV}V{OoBjq=Slg1g*yr{ zy>lEKfiWc}K_E51&Tyc|Tw!=70Y}K&DKQBGY1>kF4)d))6t@H;KMeVbMM;u< zK>`M-tAxZW{a{bAYXbCSg#+Z_1Ux=xlnR$iCLycjxnD?zD*%!%T zn=TO*e(UL=w?2BZNf@_Fuv&#!(N|Jq%Y+o1_D`pQhYf=J9 zNwP1JL08~3xk=jjTP?hul4M^bCl_B$WCgK+-wB2D}f$N1wv6fuDC^32FB2yCU!oHYX*?z8Leu!1P2OeF<;1a8i=& zi{#Tz{zTsBM~YOE?2F{3L*Yc8s9O_bDjXZQ8d?j_NlCIVkoK(|hGI3O!z5e7{F((`EPu1HFfeStK>(?qSo#;!e$ zq$JrFNPC*AAT@?VOncI-rIC~*`vU1-+=o_g{sGNt+eDJ=3#50}@$As22ej40JMC){ zoswi0Z$?Z-OH>e7=<=`vPfOJO3AJC)1=X*RIO>MN-c=C?k>XC4)d}A9le>P~J}M-x6>G@pi^@FBwF#Z0@f_ zmRJW1Gn2GDQJ^I#(}2i0UQsdKO9nA!ms+qyH*4FW1@*1uw@ip+^`0e(tegTK$7XHa zO9p||Gf!vn%$R!m^zfMCq(m|Zq*mj>P9(J|FJXY1r28*o6i6d&tK&!-DU%FBQX&}y zQp=kVmab+G<;>6wNr_|-$bgc`KOq?q*fKYg63HNt#_OY7ku;vyh6M|6r$jP{WX<{0 ziL7#U0g@8QAd-_t!wC`IPGjusPDn~5gGg2$Glj@4kiDVGTI-9ByS#94PBqfqTB%6PUx}J^e z&O%Zm8AP(onyVDEL@@P`L^23u(FRZG$y>B`r(qaVA{hkId8J4JjOo018g@x}-%2Ed zK>DWb3n$Wt!5!?I(x7=rq6!4kc6~F=x3;U{u)oSdP6JtQTnK#Zwh zJVvBrTRS8rsz4z9<5$^@r2Wt1tVl{!fk4`>H5!bh?cy^ZBqgdqAoUS#e;}z3N#uv5 zL=}i+vU%f(Othv8k`h%QlI4=n(?Ku3a1xRdRUncr7Nwz>O%9|%Qlbh3(nq@tclK)- zLp}jV=&DFmfk66?9`FET`VY@Y_liUn2&C`1cBvT|&d2Q;10+2keG*k5kY1^?&SVr@ zO|h>7Nbzk4k`h%Qkgj<4HCS7h$H&e{N>qVB+8d?=Wy!87Qw8;2LMp~AyY} zt)%={4Wd=5L=_06cZ)7;9`ZO1F}<7D?u#)csz4yMiSxf>JGHU-^CBrx1p;Y%f1f=W zV%30{wzo}aBuG?&NJhMPh%s$*RxQPt5>+6O&abV`BI*3_n=$~2DiBD+)AkpVMu7|K zF{VTnh-6@5P(S=BXlN(t&X%YGfz(Fyru$PHlB7Atl&AucY*D>A#?+c7o{yv?=NHZe z#7x;6eTE0kJGe}vY7MA}MOmKl#E$D@n>O zkb3H3BaqY+CtQUw6~0d3Nfns7&6u};(nDO5vI{Y_z#v#4nWTMk6N>3RWfw@tuXxLl zbbP#dmPq$0yFh9o11ce@HJ-7ANXv5pTG_)Vh%CB2Es^e1b|I#ovK7c1-cCKiw^~R_ zQg(sV%3aNhq*nCWFe2Tj>;h>d2zr8~^Y`hlNJ>(6fz&dme~zS<>cbQyB`Lc=1~`To zNCtR*sD`8@Wfw@};UF4A#&!P_NJ>(6kt}ZBbl&+~hDi4>0SKhl>ryQwwa$yaAt_1O1yZ+V z%Z#L6aQJE>-KXpVsV&$FODkSmZD!&(NJ>(6k?gZ>E|H!4fg0tHVuf=7R}2;}GUn;G zW091k>|)H5M+*^o@M97rB`Lc|MqCH&W41FqDeTen+DcM(k$g9A7m?4Zy&}?lq$Gp6 zUr5;nQqO(k3X*!}ZG(}Nr0fEz4H!yK2d!t7$waz;2|y&Xyj+DbwbXSeeU_x`0%>eI z`3y;8g+_CNBxM)LGQ(kM#rxK9&4wLI-nWvJT_n@)+d^dGad04?laiEOBoFRq{T>-} z#~6c1_bIzTx_rLFxjJ53SN`j?JeQ>GBB^DfncC$&a0bSdr0fFe{Qa>W#&mwJdWuN* zF98Uo(W+Z0l1Af%J&}~8>>^pN96cS3po7nll%(t;S^FUy)scN$G4nzsB`Lc|x)##Y z!SL&uf=Kr-0SIK#Dxpg-X3^s5eUX%;>;maLS9l|m&SQ(_ASp@N1=2U^lZ1?9yLl{S zk6*Vwl9H5NAZ?fG-ou!-Goc@dwA|gdRq04GwXM_~T46|1b}^=XNEGQ+CpE^Dr0fD| z|IxcL*4F;M9$ghl$}W($Gg%-d;P;B{aF*;CQ;h^0V0(5rC%jK{4M|DLE|B)x>*3pI$3jed)s+d5l%(te>A!ee28`)Hdj;DI zHJ=WWlwBabo1|e^#p4vj^sbkbq=qDA7f5Z`yIB}h>o;;g#+0P&0%?0$4z3D&wy>1_ zaq|~QN>X-_oZ;0PW7@_a?1rQyWfw^2ix(A;bl%%WbDtz-7f2(wS92td3^i!OMUt|M zq~FB6MCOlJj;kFv@53~cd6#M3f4~<@@Ta{bW#=o(;Q!s-XBmXYJ+`~wmi=q7 zyPr+6yI(q_XK2fi|K8&-@rqr9$lva$^+-N})%pXA=%IDYQI&tr8pE^Xk zmjfa>w&PwRhfi%lq-2Lw`U-`*EV ztxd7MM7oy)0%`cRg7^3MRWS;0Y>%Ww4hWr)axFchooM!B)po# z+bMZzKp?ea`{~Zs4&8yBMovoPfJn~EJQ8DSGcO$@(t1DtSK$yMzh&Hsq(lygG2a%0 z1u`EA+RIn9k(9^*kv#kzw4X^H$WaAJi5w6}J$*_L5}edit++{~`7_bwfJm16nUu)V zslt$y$N_=W7IlROl3CmNarY7FUJi(4sR~i;EEcvMNr@Z~NaMyaIDp7w8dpZq3?`8S zBH8}QzeKi~wFYBKOu)?6ycsIBEVxx&*?E|}EoRr7`A*S=y(#A+SU(|Vyq(lw~q~F3bp#2uZ>dkLH|Bg%^Q}WV)K>8L; zQIL@%fb`9`cPqw}Xa#|^y~*?%YioPy1yYO0R5%IH_BYL%w$>5!P=(Qh?i&uk?cQ|rP`5Xp96_8rbH_Uq))|~ zml?@sPNo&g2YyFVq7?+vfAz5Q7}I}Qau7_sha_4-AbsyPwK0;VziiyzZgdw(iB=Fu zuUvUcFo-30Oe^F_-Wo}XRuD*6u3x>ewytcssGSn6AdvRZQZR(y zNdFT#*a36%s`wu++!9HNRuD+H#*}CUk*q%!#EVJRu0=5=T0tPS1&i7usm(1l7h_7af=CW{HJix4 za*spO`XoTiWWRSSuR->g4{A7g&yMZ+$Z}YIj9xv#hNku9`K-;?vs6yY*92ZkqsZx%@fakvM-RjH~*@B9#hYM z?JLHVB>MuX1+Rgf470Wke|0C)eX=i*M&5P}kTkOGpNFI**%wI7-s&iln&&atRp6sf zlI#m)KwVF&Z9wIBQG#JKH)PRMAAxkmsR<8p-cIA^>`y#nJ51b}3@3Jk~>47Rq_61T;+KpxtJ>Gay zFxKA?pa(UBonv!Oa6E={3w#Vol6@hjHY)`@{>|D>$62ZmWNc6 zB-t0pqV1N$Mg)&pwB-p}LQ0Z-fpk7O(j7_Xy`hh=wvuFDApK@OOUKAXu*mkC`koeo zl4M^XeRKO1XXJ1oeY36{fH5V>zChZZ=1z^ZwcQ=jlSu0`1TA{doM3B|TSHQk?29o= zzG_D?gVxZvl_dKD>7RXcAte1Xt}KBuCCR=(+Fn#>h@|b|QmbTNAoUqNk|U{4TzME{ zN|Jq%%ywrpkr{eY5-dsfMY8@KT8-;9W5F2$K2uAQeUa?;!;4~em`Wl=lI#nlPnmS< z82JXqkWcaMCorZY*%wIv`QzYBCBIkvr-zYdmn8cF>3gF^0Y=W`wvH_rQN({X)EPOw$(ndkd!3*0%;_P-5G0Z#5zqrRegDsA2#WmY8G^i} zg1dC@5f)NCI4rm$q%IO~0F@|}faf+T;L2(<*Gyt<_{9HvLaht@6E`Oc;+n@wqrke4 zmZW6A2$7{g9v*e?E`)?1zLREv$65X}(NiwLbad}@#NWdsjtj`{p#{LuaWc*hD{^s> zsSZZ6PWSLwoPR(rBoj=xB1`7&FpkxBGLR*6yoV(KkD26zd(ym0(1@6JCH$Hn_SmS2 z@nAkT8-ChtQNnmBG42Ud_-0?17;+Sz&zw}SD?5h5oMT?4^&8e9sbE*CzJ|>*PU>ZY z?-S|%s}Y3S>iOrvv(hB96@(2}URwpb((6YnB(=`o$BDGIE3R9Qh_rnUBGTHfEXe_z zD`pSPX?BE2Yr8W1!B`^ut$@tfY^Swdss5Y|WbE5=kZW>M!LAHTwgE}4Ut7qGP14$~ zR9M2ElV(h#*vubDD%h2J4Tm79RqYGwXC70*uKYcVJ!Q?90o^AqMN)E5$*@t77!4O?R1sU8y^|Fp-s0+{2jG zcEuIbf$;6t{Z0t?h~ttJ?!4o!@K2VNFgd*p=-&w=$BML1tGr7lnKQito(%P>4-8waqz5aoN0=%6HcBM%eI81(j+G>tE zhopjCF&>vg(%-k#OC+uBiaptc%1GMdRDg|TUR%jg3Sq?S`)zxX)VE%NT{TWB*p*^4 zh7##0NGmA?yVAc9tr+$0p+_;Mf?b*ZE$Znowthh*73@mGh}f*QY*&QYmD&UTAgN$i zj)g&f%de;Zp21XG1-tV80~os5eB8e30zQ%Vt%6Vc;!LIb32G?^U#I$$sNIj%rS01ILb-e%0VX&{k+o@nz2EE$D!kvSd-hVv?x5r5Z zyK*=r1GZD!y^q>yZCC86m-Jv{ZHQ@4+T{htRIn>oTY*I~@9fj3skRDs#V-r&0dmqP zuxbs)RIn>8tFrVtl5FtJKvKc3bPcOQWb3c7kyNlNyQU^YQrmdrGm`&dS4z$JU%S$m zb?!a2?_bP>cBNxTtI%NY5nnWB7S96|JjJcFuqxyg(Jt3x^)^WbPtkwIFC_J_THq;oOodY*6&_LJ z_0k#M5b6Gv58RpSq@J+vxlrbMbD)xkkmV!hqD}}h-q=KhdGG+^s0rTQ6KvKa|)R|EfNmn%&WT(8gl2<;2F=VWt#5AaR zRg4w;%Oa`ZDL(gw)e^r~jJK&)BdOpiwhay@a;*UdlGj$@6iCgn*@&#PwhEEfp5ji$ zlSpcp-h4t*!Bb3Md=yE2!s)(5T6zjS{!Un-nX}2C9FUXnb}D#^>sJR6dEwP6A}vpW z=#I3Tk<@)0uy4y_DtHRdCOe7D_cyGTIBD%E^f-P^kko#>Y=NYLr>HgJGLm|geA|e$ z_7uZfZz6KQv}Z^vc#6A^&LgQ^Z$a~rq=KjDTpku2<~-E8D%~pzr$8<^;1s1vp1f2NV=8!xt&X}xuGBjwr-G-jC19J6 z=Jm7}8IT-F1yAwtbS)(H+bL5aso*JE7MV_Dqmz@6RPYq@6VVvb!z19mdfrY2PqC{| z)YD<}0e>VFJVkfcA6DD8+HymE&hQdxI?;!VrKnG6Mm!d< zAiE;>nB3^X{vE*nnt$B>atUvg8{I>?b@#3w64ttNSjXT_EkkOv|G!jlw~)LQI&}{T zhc+amzZDa5Hucag`f%|Z3TQ{M8~xUkKt@N z$F<`vDCYdExg@ z3V7w{xY4~5oAAxH8x7Oc!RUfq5b&zeacy7(ymV(?xYp;cAubpO0k0k%4_K24mY^ID zm>g#-;(}%n@S4$aSK~}i5qA}PPs2uV4FX;}I&N$$0239DZp=-T3Zo0cLBQ+A!2c{v zO8EWL)OCV&5b*jj@ck`7&zsT1OK|l77fw(Q0^TqN-sH+2!i!a+J5Kl&5(3^hI<7rF ze;;w}cwGm!U62q0-ZVO{&)HWFaeZK(l!Ql_2mx;%15Y*-7P;oI`Ovy6;)0G4@D|Z= z?Ou+lgdZ&qCq4LNC7hiQ@K(`rJ+Lus=<(=!o^~k^7sP~sw~m4P=Y!R`7RwE|oa7y{li20lfPOL*rKu%E`ePOumP-a9((a(L6I zb7ek1neg9y4FEeB0^TGc1+yXG17qOVzSG*q*xR=vMi=ykfDev=@BRRptr>m6*QAIG zjzhqQ#=!rXU6b$?f74tihzj4s#?0UsG1FSqj4pT&0UsM3_q+SGBEy%$s?zW12-xiAgI16q0zN)E z?%TXj9)^zs+_%#0i--#bM8GFT$L$3o`eEhmsqg+GJnFcHfKQH&+ZN5C=euoOL7sI( z*9k5}z^BH*2d&SE(QWO2Q_l-RM8Ky<$NgItD2=#(l{&Ss@`4o+@bKuk-B^7DaeMZs ztq~X0h=9+Ej_WU0LC^DHqo2E(3UR@Y2>6^Bc)LV!Ov}Wpf6j%tAV~y#UJQKcdH9k6 z6CYRpGvb0N5%7o@_<>Ea2wzchAmV~95%7i4ai898zqvQTx z#*D-0{x@oI5eCCX5GMk@G&=5=Y6;vjb0E6!pFN*2x?oQPe0g--tJ;VXjGP6ySJ9cF zhzkluz*k1cU2RHT$I81ZB`S}&;86s8b#&Z5GtD4|gT(Q$kH}E~aY3dC_}b`rK&s3v z0XDC@|EIwl5EqP!fUl2^dq-4cX`sh>i0(c9WNgF*ts>wXqvP6#Zapx%cID6(#09q^ z;G3i4cHc8_c(V>fx92E1A8|pj2>8|*c-*sq^D%FGk+3e}f@Kl#?a^_gS=XrLL8&nr z5f@a8fbWcfhnL%j(TyIHxNm_$EBF=x-yH*ws5g-CVf_YUbV0fZ_}=Ka_I&v>#I;i= zX;mqh7XjaI;t<0(%A}-X?~~kOUH{0#BcCt(_iy&s{NvW7(68y_CI$3K%^saPg|JuF z#20Ras0X8>9*oi^+KZ*TSk1peB<*5b_HZBId(v$g0`ugr_>B3+nR^-8{^9^%cC1f~ z>qgbE=9Z}~6!LQfdvPt+cV5V+t%vw0ZqBL1j()_%BXi=F9v%tX0O*nK8oZ-dhCS8? z#LCBufQ6tK-CWo6qcI*C3qJPnNE87-;gRMSobu#kGWX{*{_|Iyd=6&U$E^LRSB*ok zDC;jaDcLlTMK{Tk^>)-jQt(t_^@XhsJwredB=wZxJ&+U>m5kh-jOk%BroLtLGa{{D zy&2Pd0g*$uJ|@zAmkG7iZq0>tn|XaN51`JD7v-cRwbkY&n@8jfpVJgGN=HdZJ>fYU zl6q_>q!|1HOMWYH}m?fw0wh>Vg@vY4AjGTk59w`)>=LQ?Qg5>k8YlM+eo zPSY|(S|4fI(1|@>&6viDyc&{%b&|#0_AV;shAP*Q6oiw640urxj$QEU8F0TOJQ;c4 z3a&{)x@KqJj-+eKH^^Q%DQG4MX?)+&2}$GaO%N5F6bzGubUC{?k#yNM!UBwwf?Sf2 z#-HZw`5W1{pPi|Rw0`wwcJNywr{0AFIA%=CBQ1KNbZ?N4W!&|eg@Q$Kh$mbX(dM>4Yg zRT@Kjt5Y;<3ereMmdVXo! z_oLZFutYL4M>bfx^SeyXnDH{kR5;SIzuy!jwH>eExDc(j&5mRy=KhF$M7>Azf+ejYZOx zbaQPa1?M9njn5e&3E@3t{QK8&Bn90gBY(H}P2`tTY#nG`Pr>xa$QMETiF{Bu4v|mY zF3N-_Z_(d-|3R|o*W6%}`4|%Xjx1(XkD^E#72bdmB&6@C@-PpLgLRRN8A6US^nD#yu+94^}7YXUibDLHe&TMUn6vT^!)E5klT5HbMVIPrS zPr!M%{wGbh-Aq@YLshlJ1TMwt=jh4}B&y~oa&3}pY!o^FwU+?tUB?Sgv- zdv^%#)W*9`r*1vEbm<({J)~8&E+JvT-9tNfD$~1VNEi5z|1cK(p~anno?=#0R`nkc zP)|^yC;vo6Q>5}=kdGOi+5o2Vt2WSt2`qM0h!VRG~J*wKziqP z`z-x0O))yra?sek_M<%>z$trPl!B({QVJedoGjU9drKr0G=*n4ByDDo<*B;}Nd--D z#sRxzCV6;6JR+?%#oXJQh@4i_PNcP_csCCg+&rfCG$I?3)|z6=no~rsNypPYxJ>b^ zHAS|G8Zz|pmfHOeNo!5vO4qkJk%_nWB+^<_ zY?wo1$XJnb43XBFBCz0IjH%n-@q`#gyn?29UXx9Rk)!Y4M=q>5X{{;hjfF>tIc}@A z+J?1N&=fu?V5x4B`R8>f()!Jt(R=O@Iq2MWBo#Ep-^=O}+4Cv9U(ZLMf~Khd@*9!W z;lz(gDrkyj&uNa==g*Htq_w8FRz5GqJhKY+hk0!kG=<;PGDH@fm66D(b1afMLAzMM ziKKR7{AMH-G{t~&H;{C7Pv?oGwWe^zzET`X<9j`>3}EyrXo?4;>4{`quL`Hccn>LP ziqUoGUU3aN5k#c5rucKC2iDg0sc!(13Yy~Q(gZ|)s7H61f~Gh!aR!pco>8qZrh=v@ zxQs1U%)88$<0IXl)|$eV_z9$5{Qh*su1(|CT2r{vgs&wsNoIQ5D`<*8S27}Ld|t-& z8jJ+tEQ(~@2Bpt-70IAPo{6!C6f{M{f*O)W?ef)-RL~SNGAv@`c(xAo@SX6U?ai5^ zPeD^O+}in?gb^7(rjiiF6*wW=BlKSfNhmcgz6mPdv-|El0 z^Yk4?pS7lNrb*inV>%O7dV?_)G{wp-)fmZl<$abU>W`#?rl>rsImQeqq0_2HK~t1A zAgyIGhiQr+gVve~nqpSXmJFH?q}N2}0j#Zprr6r)AFQowb+rg26*R@o2hABd9b($g zH%f`5f~IKdNQW^4>dc*hq=KfnobEIWcLid4pW)v)%*U;QrZC=u^fXsBwx$NgRL~SH zhOc2H8%M02ji=D{RL~T4c74Q{_DbHlFs6d0Sa-A?lE%_(v`SUb6wmG!C-Po#C&pCJ z6z_jC6=U|0@jU5KBo#D;w(Aj+x=(Lcedg6TPrdrVW*Xa8DgigfrYOy@2k zo!WHpt`gimER?PLq{k?t(m*{|(xI%PKUokDJ@cPL{1X)^k#$Ms6CNJy@CN&nb>UiA zA(UlPf`XJtwLTxqu;b`JrdrixFOvTkDUtaVEOmM9N2iMqo|jibK}rmKza7bveS1zs zQb9@tU4lij*<;#sA{C^>{ps(Cyb%rwC9kdUW{+gaps!sznaJgZ+YxCgCD=KJ03@~F z+olj{EhUcDh9w|xr?!93B_ge*gkQdGNa_X7g%D{eCG;e>hY%UB%^f1GrNot=xrjX1 ztUZ#}QbJFeJ`a(JYBnL#`s~DwZqJc4E}nxUdi;7SNQqlL*_{*Fw^xjBNLot?N9t9N zk#r>P5g$nfDRH>`FC<-icYwg-wN;Q3dA2)<%(}EXk_u9yWvU}YHn5DSkW`QoC9=bE%p{E~@DS#Gt8jKA;src}O)~r_>@sjtK}t+52Pv9K zj!#Wfw}O;t_Zl9hCfVv#U5u$9C3duBXJ{kIO;uA7X)PsQRHqqCf0P`S47{BRQlexp zUyA9v(U(YTDe>?u?6vcDYPXw*BB>xHCc;5ylXQ)mOfeOtMEc2WZy=IPnF!AO@OCOl ziO&PqA!+<;fRN>+f|Qv1t}K$S8H3@g98A(uN(82j2ik`BP+*d0t&y~r5`k%|o+UEr zcKFf&9#cU|+-UBPq;WAB=qZ!5{Mu4i;Eb+Fx&m(aAgLfFa%_U#G2TvB#-DI@g2z;l z68Ubj9h*ophXyK_lh#tgm1Z?tRz;FY`+%M@Nz1bnL4`KnMlvW@ZAc3_sURgnI@CeZ z2oCl_Qb9^ATm&0p6JR0eJ8vGyQ65u4N`(9iGL84Gy+zzMM7rM*6V8a(6X$CE2rJCX`gV#`T*etv;5 zZi+sq=J;FHY_)bxe#LdRT{{$9y6wblvvhk4}&6r^jegp z2a*a>;?fdYo48JgtVU8nN<4oL>Td?bv_Gz297zQ!(KVn6UX_4$;meU!kP`Ps^k?C& zLQL;lJ!mDRASEh|8G|wPGKD%}Oa&>?@t<;xYy>gwp*v_Lr648Rl&1{9-uyZw>wF9; zNQr~l*clP?&Ng-p1ZB-h1u5~fVIYy8yelDTEhSv>M$!|>_>&1FFpsGqB`Rz^fHCz_ z(`fbfA5x-hzyFmIeOc$;`~Up%(MTy#H?&)5i_i|C-TSDCiGbe0tg^r0a_XM-^2o#l zuI2gX$=DCa_}wO>eL`+wNu%>OUBNo6TuN341xYY1{Z}MQjw$m2Nd-wzcU@s5St@ZK zNd-yp>C8?dUtU>Er1i;#L!YYSlZT{sLkfJs_Qg7Utw$T6>P(b@q-T1$f5ORp1|aXgqOGp4m9cv-s_k@xFBYRE|i zNs#wkP9n1`Z%(AOBzV`0O@n4Tji+OeAgLe;-Z@4fsXaYf2uTG=;I)j|Lo=o$`_jrt zDoBD`880L0I)8Twk_wW*$lsbs@8)TcRFDL{-|i-|bCn86DoBFTsk#$s)cQiCwIsOt z0sJf4F{V|()#4WmKm>zTR$(6iEe1Ffhd+B71IH zg`|QcIOE7by`8I~5BWMGb1aLkj(RFDLPkG>`{SDaT!DoBF&$!H`PkE^XC(pnPK+Vv7+ zx+=zngq_z`K@vFn-67Jm3AIx}5)`d+h)BP)$uXvaBq);VG?Cc{EhExe5|nbmSvr0_ zg946%2U5 zeOG*LiZK=RLbq$6i+DTj9ShKN#rn*HJ@?)|M5c#>!Dc%Z^umJ?r;xN=FAGTs?;!=f zu;&ZglQ(PYzb*beBo*|+u10J@AKA_gJzpcKpcg`HHIQ`He@iP21-)>yGfUCTnEHhR zG;S62LZ%_K!f>Y82ir=#hZOXJb2sQ*em$MOeTh`i3x_H{U?j@|m|obumF5Hmz0hmJ zIE)$4@%1>Yt%6=?(j8WeY}7NoPpck?%U{oZT+A}+n3VNZLe+ne^Ixi0(`5$_rT#6{Y z5TA7{T+w@KdLc8Od1%q0M@aY1ox8X7E*;!GxCQ&-Pc^?#zvos~+utmrhhFOVUhWUv z9DKls3;#SB`{9^=p?V`WD$J5b2W~tI?Ovef7q(mrMzZ9>+(at)g<%6B2R3Wp@%vVc zY3&!B>E@S2(iyw(aU!k#!h`0p;xJ>LjSpLRyqyYuq4>HPM0)z#iL~|$KX*MtQhU0e zdPw2Th|qy&kko636r`Beexdj|c>0^|^qRxxLb#ssEd7Er@t5{QepxgSV=DNCGNsxP z>D%ZAk(PeJmDU?p%DlG5pH3-|wDt>ns&nvcp`UJU@}lN1uXUn6nSo^}L;~5j}k{rh;E+-JIRfIzU+{Z!7fEN!zraDyI<`EK@t?lLmBo+KZ)vDi#)L(8x(%LV$ z(o`IVr19%xc_OX-LeFNf#y0yl_|+~X75qZOzvmEHwm>-~75qZe+?$E4u)YqG3VxyT zS3e>he|(9w_6x03)BPD#qevno75u`)%hXO|z@%jH%!kCZ3&wJ!JpuH1`WI;uZWt#qdf*`i`LIr?p?O$C?%wN!#m_ z>}3ISrdIF^H+v^R(*H;TcuRrL@d|$7R-QIU+K+ANill;H7`~F_1LlZ#hONGeq=H}g zxf%=%zgP696E7mE;1`Ur7Dzht-sc%RTonbs&~Pv163#LuXf{#s3y%`OQ}7#%A)k}| zi(+jR{KD*UL0H>>;qB8Qso)oSE@#-#nrlGc8~KXnN(6Eh*EzsK?}NGkY+r6*_&7BHnt3nZ=mf=`0cy;wMw zVKKk(xx*(U75u{BV%@NvdZ!lWkW}ys)29t&WD|&KAF_h`1sHt_eqr&&x){?wZr6Q` zY3&zWu@b^w7Qa`F7xkYaso)m^o>oQDm9s9}(l69}?WETS)hk%8H@uoq4Rne^@XNy-n;@ z-Pq;yaHAOFME_pOUghtzd^yfs0DIXQG-fR=Zv*%&F9Ixtn0E+Y_|V|p%fA@e34Wr% zqf>CGiIYiASdoq2tY72d5!(f1<9iYCiUBA8HqA(km}bYq{~S|@guZ1W$87iLX32xG zD1`$T7c#-^!+Wgc;qrDQ6@-&ClcOuKV?QHSDMU!VKiL7<7Es>T&M9(lWgvg}JIudDp;9}^a4n+1@3Q2+4PHQ33 z=p-ZsW;?4DOhcr#5Gk1OB9hKb0dV$=$5ap^&C>KoQm>r|mPjUPEku02!{G;BTUWkj zkZ^HQL5O%>?~bIN>(?M86@*B~-zSlD1RIl(v=$;gx{EG^!v(W=wDpIXWN+V=4%dk8^et z`TQtssqvAZAVeN!gLJ~YKd%*-j--MR+4*k{BG=-4kl^& zR)*84ahgb9X*N_gvh5El4T|k#-l`6WKHcT@{6|iWt0>X0V{1KNDa~1tGHH4E3!se;qv?6og3o zMj-cLgVn>sUSpdd)H^=WFUPn*Ni|?L5Qr>*s|5UD)za};7t&IRTP9syL0T` zj3gW1IEti#5J~^;A0m_2+>NAy5P9$42uc6v$06P4wN(%zpT7M>(*9yRY-e#&L5Qpx zLieXLBKt=qt%Zm)y{ikxbSA0v8A$~pQnv=k2|o8ZE1sH$q=FFXKY=CCk!1UhAZB?x z6@__A@Zak zTWfkO0@CaDqlri=2ocXwd9k*EInMu!q=FDBSRgwinJ8sKB**x0Bo&0n!O)x-GhoX+ z5F)&X6og2&ELB*z8xYecZI6RUDhQFeUtk;7d}dGnQ3Xi_A+j3P}Ya(%=@&39f41vyoH~ zB8$$$5&Fo!eYyw9{}3YO{i1|OLdN>D&b`Nk$Uye*0QT4X0=h!@)K45Sqo-n&nBd9qjp^hmVMs8)dpjp!BUWH3SCmaV? za+(+{1pZec2`~9!o;Q*u?`|HBq=IZXP=h@HB5S`cT}vbtWJC4It&wyF4UI*l<>?D& zwh_OHOj0>Mk=C-I-|*Q;>h0o0k=C-onPmZy`M+(ZnAWmk;r9kaPOixpE^t+>e|?7j z*9&InBKtOUYHNyVEgQ-uijSnzk$MV}3bLVpZZ=6p#_VvJFI=Fu*56C%s&S(xlCI*( zsGSP3p;9lpp1N^xDb`j&HcZ}j8DlyI9DtK8e8elr23LO?eSrnmuqK+Mf^3*mF%!mg zjoMG+RzWsgo6fY8*|)AEyR%|U1=+Bq9+N7OzZ+Gl_ zw*yIi&A}r`D#(V=*R_#!*3X%cNNd?}<>q`O^~2}kC0|}!1=+Cm%QPaFhaU%bmu7NSFWrH);TRV|&!!seNARBJ1&Pn94#jw}K+o>QMij>-dq%-4@g+yA* zhWeTQCbHahu7IG26lBAuG&PXa7wqC`EhjDC?$GOv?M7tT3H`CQ*0LcmLG6A>x<20K ziWXuj$cBkM_Y>Jq?};%LWJCMTQ;BR4pDR6xX)PN9)A`OrGB8f)6^yAM8%Fh{`!ld- zh2BUi$cE7wzfjEHV`;=I$cAduw;|~&>g9|1-^_)a7hWJ5r|BShwz&C_@2A#2$XkRsJuB>n$n%7ZbjWrKg3aWjdG z-FO0$3bNto%B4s;x85v;q=IZH6)}RyLW64~sURDA7Nk{;v*m@0NGiyN1;czP=EU9A zk+hZ#zIkS|nCAEU`KC-pwN;P}S0`P>m;r~&U&fdUvSE3WM=U1mUnU!7e5;0}f^7J; zmObq~__+niL@gQS9N2zyTXiYs_uStJ!?!(YL)l5({zaSura z*>HX|6LaPm(zk!$8+b5={!2C-`(N4M$vXF*+UbidF=a!o($!0K2o34fodx~c!YaAf zS7yr3sv8R~s6Mwq1OD^>H^C6GcpsKDdfHjIVJkFbb+8r;rIPl%g=DE%-L504AQ*0Z zX9s~IYk%f&6C@P`L+B3XbWGCObTFh_ytdY-8Jv2HKSUNOG?hqe!4O`F8LY_Kj!6oy z^qDcO1w*Z=--s-qry`Nof?-bsctn}kcYVW4L|UI_m|iGqWQ<9gnMiBF5bU)JV>;`` zS%IX2V3=MgIgLt%`mAQ(RS?%-ySoOL z;QUq9duk5dRd?q9@;upa@AA&6uCA`G^VaE}5u99?{sAYw3x>L{A9J$Ga%y{75BVS% zt`v*`(s7~@nap(32f;98vI|J1$F#wm^ez})toDqAJ2_~I$6D)yU^w}z2*h;!eK(Yo zUSA)fu>Fmsc_{y^VLAXN-fmJ% z=RY3OyI|=0wIe56q&NgIeGm*s{|E!pv3sb-N$-N8>wTJr=yPB5Q@4TiK`<0c%kO36 zJ&b`s`XCto=r$K(s=t4tb!Ti0`5+jEiI4}u}6(%^9iqovR`?{4J_v>l_QsrCvVn>*7Sjj8uvp#2$(c@?`sk#0!La+M-axw6 z`=G`?$9#QyI=^;a_S*T35XmciCU^N z@j&_@7|stG39Su1TB!~vy$gm_v1AuoKcAuVme753)>npX z+U})|1kwk=uxL3DA9i_Y9?0otl7}~0BptV}V zWmK**(g(p%XBxTN(>EUz!4TJm=PN!4hR-S$x_S>iUojD4`XCr8{6c%@3XK`)8u}SX z9|Xhch(Zw4aUhUB0K<;c2f=XmSW9x8jcLr#!`+qw>0K~b{e~Wcn4zztsM=>SeGm-w z0)Gcmt=6+WkUj{82@_s%a?q+6Abk)FQ|QYU^|PXmD9G0dJ_v??8#Mvaac#jai1|MR zL!~+%!H|M<>=5$r4c`Pq0kdF8XxS{WLx<{#&Dyo_%`qs2!)Py&^#XAWTT`r*IR@kN z9saI##V%SbDQJz>Vvekk|n1fHR|ZN@8P46F*2TB%c#ez zKNE(IV#}xt7xuH}{(tx?5~H#ogIM23*KR}ptAAW{*|)3dual8}K4RQLbiCU~Ncx*t{oK55jg06I-pCc0Xx%;@h^d2prR=2Ux*sqZD7KI z{_W|?OON@r7v2@+fNFVIiALHougMOS#uF(93kv`b3Fa5~GtdsWtA_f8JLwU`L z9Jzti=8kL(q<8zJrK~g@NcBrr>djbdz1uIX?4LJ))SOR4fb?#^wDi$kIqClgU174A zKD^vyNhDGEdJn0;7hlOqug~%*MJ{XyQps1JRur?CKG?5g=jhfBJD)gVe^lrbpZCJ-+wm(e^99T>r>{pA)WJQ~FoQ+%$ zf%I;_6jup85){XGEr9gFevMs9R!&JVhd-q5m9^G~mz!+OS&WnG{-Dl-k>2f>k~8Wh zCo>P4#!2t?Yuk`}Kswenq3eDY(+B(2u^09CYz%3w`ZNU62mAG5Q#l~j*Q=?aVKIHM zUngsw=H%gpeS!4Be)axm5s+HA?6zLq4D_**Y4$7xQcXGh6p%jHuX6(` zkgRjHh5Qq8y4ZaneXw8kuahfVf30J1t%@&!^lrbb864DpvC(Hun|2!~z1lCU-;HZP zhJM^ay%`%rKG?6}yXih6iy1nk&LkjxuwU(~HwDtxdhfqL`e46$)W{5^HL*k?Aidi! zXNm4^Ae}{;@Y%!%`?a*@At06cgZTOM!G2u|sLIJRDGxwvz1uHmiuR$L{IaedkUrS2 z_Tf_qNe7=LsP(4^Aidi!yL$n#Li+i%m#aZ{RoF=I!G1jtenG}9$-jvG`u9;DAbqf3 zF&oL6+Omw20Z}YPW-)!RUmHg3f!1n&_O1XieXw8S^He6SokwF@M<3#|rg!^gFaO6; zh-r^p%vUu&*slRau99#!Xw1MqZ!$w`z1uG(U#%<mcOZSRU)Q!j zxY1yP1S!QCXfK||Qvh4llfg7b*vGb&*DQFZW^Y|0A zrBq6wygo@v(BEV*;p;cI=lHx1R2A#E=h+#AXENdA>o4GV_em_h+D^a<2|`P!gCmLCC%Y?9Dh@sC8aF7C*enU zE+g)^)tKH{_2|c5KH$+kSwF(_7;$C!j99>xspmEUj#7Vwe`mxUH*NHOr$;~1k?yIo z6NmDDgy%Qn>R;BofU8T=I{`-$0O19VxMN*<>Miu>bDXq3ghfXt0O5s=cv$krbZNnG z`=cpzV~ycR2Ozwt5!cql(P|@xYh!Oy7pO1 z0|@`YgjZZfvkyIbkP-(tvI7YJ(S&EsSrc&eqe6bIM@NbP;iZhYy6O)*$EW^H_a9i} zQI!nB%NTLxhg?*|u*NHyuigM0$pVB2n())LzH)p=&6XVZ7z2a{oA7Y=M2`Qso!uts z6^FC|!b44X!C30{^v0*!SOTJ>M{^KvGvU4J5q+G5H$8I`a3l~A9%jPZCek~Y9=%3I zvbUi3JhBJ~rziH?iMnj-{2VXyj3qhr*pW&=xN5>D)~C6>9=%Ve{~$W@2?!52;X5{^ z<@j(7>;ZM z!s&xI-<)@CV8Ua-wRUwLar}#DvT~d7ckL>0{6^U(fFtjKqE|KHUsXPAw1+SGi9_-M z;ju5wk{^V7Dz>$zZcx@xDz78nE@oRV9aNJXqgYY^=JR;ljwSc=mN2dTB zsR@MFGvaFcl)UlIuU{4dj{F3|8yNAB3n#XcyWpR6Sr~HoB`t|$gBD2&gf}wc!HumX z#nivwGT80lgBF z!dn>e&{665pbhQYWDDR(Tp+xa5w~?5Nqqnt^R`BRt_K|13xu~Z;?~}ysHSGPwfRgY zBIqT96b8cE8F6Rn2fqRC%zctCPLRhycn2e{tm^AoRZerTw3$XnG6Ug>Cj5q9AVgOV z{*exj9T^RTcQ)eAG*&9|^qbVHL4N~|vv)xS2taP=tyuN{AVK`{Id5=5`8(nWPq9fIT@ZLsT+uC3|G+tZqY&77=cObm45x4%@DS|Yf+@y&N7~1_j;7EEPyuT5* zR~fqzqTB7yE(4Ct2f_y$@xVci4v@gtY4pGz@fQF``UByEjkr>1!)1uBWccAHz>xz% z_)sHm%`jFa$KH%axB5*y4LA}Z2p?|38+`U$u;q^g1CDG6!bci$b;X!5(0FxH-!*_E zC4%tLCj8c{@f<(2ZXe*tiy(Zg3BOa8ZppGSuO9pQ7H}j-5I)|BD`EYA09+}uq9EYN zkRbe5Bkp(=L^o$ybjS6FA%G)Ig78T?{;ew^eaBo$C-Pq}uB3>$yr>d?TS`oe9&MO7 zF&Bi;R;5ddO|EDBx{~OQ>1vPzU{xj24z)7*tE_~_T+%^5#NT-QiuSxe;EMmvM8L)J zWx5GJ)G40hQ@(r8aiM&fX~LJhrbQC0@k;a6bWP71kG?ww_5N%l?s!+e3gC|26Y1Wj zjtk|>Zzg=>i&7l#mq_pNIxdti^NhGsP>baFqv#AA7s{9UM%?i}&0>!4iyzBzp?q0r z#FgEHLjYGs@Bb5Uv3yx<#2xDjqpAb0KFvT^7_9MP z`LfZ7tNRO{;`qq>{E8FHm(508aZQ^AxZ;253Pcynm#rrJaSG3%UFV`VY1Vl3T{NiY z|1#k?hBt`*g|1aZlj}ioVN)Pl)WzqyLnr58z_?vd4rE zEI=3K`dnA3{X4+L@@1b1uOIve$BUM!4!Bsp>^I@dk9OyHXZ^ve=j2u*mM;fP_?hi= zS5t5N+(Ek`x>&v(GU1^!{{!6dv25bRo3vU8kEMHET@Z8B`09UWxV3pRi>%{Wqlo3~-J4KGe%sSzK|+@ z*7I6}g|t3^jd@h>fx7OT5f9H?nxw%=_?Z)H0T;`c3no10@w^e!CJ>?&$@mGwvrltf~pL#To<3jmz$B0J+_LvN~>v?Cos%Gb1EMM*!aka=clFR7F z?)-0w6L7J7d0@mtUT!6Oa(=7Gjm{FXXH#jw#q#Bm5fAQKl`KmArcylERd*5KV)^o~ z5w{i|RSy~;`k`?=$33+oXxKb8;ibzFbEF@8=$(SA02j*_(|%;=@6l9uvMVmMTV!v* z#q#B)F}iI?>z#nxs^7W}xLCftHsaQaz4HKWt?T~|aIt)OYs8)9B60!l%vdxz;9~jm z&WJ1j_|*km8Pk*|;cV22<;w>X{x&I~zcM2mOP$vhiELcMEfRI~_0T;>_cS<9!ojg$+x=x#ZkLNN%`QlD(#H|YllSQfD zZ#25K?||$OT_|7NX^ptO=|3kSy1it%6@Uxni#xp$51d?g5ea;aMi1=RgVs#3Q74oy z?u0}Sk-f( z(0HMIac4K;>b|4R0ar)#;(44E^q&x2$u)U0;6nN0&S%2Y{W2PG$C+1Fz=iU~T|meG&+_F5@A9Qs^={pp zQo-VR;tH3p==XTfvrNfqJew0uo+}zlMozLC*AE}02S9dJ`=O_xJU6OJ`dp9j*tth0 z03JL1qy{*8ED7QIY7}=$^E6mPT0$0lt_-5y12SycOg` z0T-$yx2dK<>ouE7JUx1fNM_;apcSelx2dKB1YFT( z(V7Ox6YYZc|Nz zyg6&oY%nyH2Q*+@_iaEnp{2>h()zd*k8|U8s`W zrkVyV`CV!xbbLxFmX*`!LY3q;)ih|U=1`Tya4oV?EJPQoB)6%iA-rU!SsdRmh-D}= zx=t_1uwe5@xP}r6Gd^MN^+ZO8no{-P$!@_ zexvg^G#))&geGcJO+!Sv7t}m6+;#E>tzBc6j8G-HO*IXwy}={Eo!5&70xncZZc|M| zsQ=ACawGYJE=ofdr)medP$jv|H4UTEkn7!#7A9DN3#C;77pf$;siwhdwfRBgLvL=Q zl{D^h`Q%!@lf^#3ocOIanFbo%}B)6%iA@r|^o*b_|%>}qnCAm#C4YrwOmIH3H zzZ(X)P$judH4WC~i4Op`YQ>lXq@zx#lH8`6250>o{DM_pq+rP%#f2)#J=A!~DA%8i zhv-V;u6)pVp-OU_Y8ssBPA%a0-1Dsg7pf$;siwi{ct}+e8}rKH^vrwH#tT)Fd$h6f zL6f(ZB%| d$vGzwiaQSS6Wi8tnZu@f)-~O&m*XX>_qlGSxJMmDk*Q}qkxN5Qc_I=Tk;VHWU*)u+Vj~)>(x3n;9`|D#n^S$ z&0}LojD?EP}tE44HTxs_2CBPk@W~72+7ptUYI!^!6BaaYDP5M58bo~wT8y;b8B z2O-q8MVB5ex&#<1ajKL5S1-sB`=}MX4ek}BA#OTUD^K!VM@sy@TI7gQl7?6m=M3q) zhRyE*+8Rw{LJI1!{as5&KOmo5C7PTFnU&%plhwTHnofigDUPrtt9fYBDTK9t%~Dy;CC>LCPO;;`2f`q?7)$Bl90-) z+3PuZr5&B*b<*?Xn2ao2tpF!W*_U(DBby|oju zbJC-jWMtH<hIMSn$8A{6#WXKtJ%l8ZgbdG> zIUZtaU#Iagg#3|&)Dnx*e2BGH`zaf}OS70r9m&YmyWVkf+8gR=8HucsjQqJ9oul=b zjdT3NNslm+ky%$#)x=2k!yLM!tH<>IZkQ3H?*geLcA<|zFcN7ZNld4$FfH1mYBq$&MCM0E7CP6Qlc^u%hL}kDNJ#B+#6Li4d*0G5 zW!75cdt_vDYcEc^&-VussU8{WEEdVhqIvk}LzYKI-t0zwFzX@hz=ov|6A2y(8QyRb z+56SW@bX2;eyV<)$nD6;=EtZ7W--I7T8;pTw2p+-3Mc;xq?UT?7*2YOj*J{LcpN9Y zUg!oSk~uQ6RcosM^d5?9_Y;uFuR0! z6aq=eh(1U502$G=3SS5!aU&tsR_zA?sm8vdTjDGxayAk&H0Tz&m-&&^6iH$7m52or z=^6=XZJCmKBG$Lo*r0JhBGn=zM}{2bWcwa;?ax|^EQ^E;eL9JlAw6d3`D(O?nvqDb zNJ!h!M*Mu*HrC^JUgTCJr1k2jVGz^0Zz+|yEGE(_64E)gSXv;R-P@c35*Za4nPu}^ zAe9dxoJ2B3Mrudb0qHE>oo2MGwaBB$$WEbkIa%v{av+gHk&r>VYf}9|#2c|EE8k8B z64?_8XktttG@nrbI$o@1<`^TKhYVX+3$Fw-!kf329$>oUd=~6Hk7In8=Sv z$iS0rOOS9kY0SXw<@juZ)QE&shCeI}BSC4Ola{QrF@&s$gtRvLl@CdIHTd~N-s2mR9!*(~@}S%~^6w3zJjgZYO?ecSDUWhJ z$X6&;NlffSJOk1l--Pz0_)3dg*-4{GHxsqd;Oj;98^LR7&2FH@XF6XKQDd=;Zpv!t zt6ZRJL;SVOo?018^!fSIfQ&vp=Oyh2N=n=SB9#SM$r#jQDsyXA0aD@y5a|pJr)yQ# zT4!LDd7Sh--Gn;`lUWN}IhnCG-C|{}Mb#)0QfZv}Fpx_9Tz_y<>;_OwrNFSfoXmSJ zCnv>j0FxssAK>JW;o+PVy8%o#dO)|;SPv=no-gC1*bN}k8FYiztmu7P`c^3*C2jzb zO5+^6fmG_d*K<ZmVaBD_dOv^}#8$hHs_OE0>Y9kNb1ybS$FnKbn0w<5W zNdct94PbIcp+%gWRCNz0#clwTA)CmGGwG}ZOw7Ycu^T|7vV0451NvE6xP{DJdJjq5 z03w|=I*|Kd(&&p@O(v2gQtSp0sqFN(1F39l>Ht#W1~55)UjQfP?53rf?0lk{5!syZ zZaOup`fu@(3sQysZGF#0?S7ZUB=F@@3{^t^9oMlehsy zhNoD}$B_1AKNI}4ha_$QlYI`7tq8rf;XO|^gw{&j049fL&cVrnY4QUpaRZ3d%8plo z)WWw$a#HLDFu7s=Lr$(LaS=#~8^GkyS9GsmKPv+t%mGs31~55wb_gdYcIpeH#0_Aw z??#%Z>oI%&;~~Xv0Fe>DEiMRT#Pr%DA*RF)AW|K;qAZYVzY;8$q$5G%1`ruqu3jKn z&69kRxPjPnS;sy|D?bV;pCf1&{+Cpn3ZUB?3EAe%Lbw&BzKuX*ICex(n_fKoe z5zT>=xB*1kZuYqbJ!HGycmR+RH-Jd%r(2}ZML(a`|F&cSQsM>>>0D9p1dz@pg;xP7 zaRZnPJa&+irL*uJlDGj();&%Q92>X}|h{S|Zk3`-N4-fRwlaM26JKdY_D2(qiHUYCUIuiH=)|8$e{h z>ayDiw33nmtFoShm=ZUD$ndCaZJ@Q`>e4kpO56Yeks=QRYA9t5k^_ zK%}*62YQ^XXiRHoH$P5^8^Gl4f;=y?UhU8dS}Sn_h}3M;azbmhz>&1Fh8?HG4PdfW zMPh99^+Q^BV6sPQn)RZPa0;z>$UkRinWk;k^D%p4-m7-Pe11U+_5g9hT z`4}L>`d{q^AP0JVd=z$Me%ng6u0#aEyzYH9wBxOf2mFdaKb8^CQR)#`bD@oZg z`K;LsPTqS-?65wANm6!9Uf=H-x95Kt0i+~l$K>{%3wg}-({2MPN!bzU%-V;~L(Y`* zCv#H2r4WT+k@T%IwDKW{=`6WoFOZUy9mP~8`ppAU8M%osIV34NCT-habFxhCHV{*i zvLjM^`7bR<(#P%NF8=~4N!c;k>wB8)>tvU?w}6zS?3j$}cb}6LzpxSlI))@EJ0{=f z<+G;td^{gRl9U~h;awiTf|%j$da~_b8dH+8W3qRx1Dx!7Fc6MYlCmRGvu`8I$D|$# z`0*wu#VI=`=Z~Ds$yqs50x3z^G1(^{m8<$$>9%w=kdl-glVg_i(WedS$LDxS%8toS zYs&DLZNlo$8lCnFuoPn5WTi}7Af_Z`$K;T;J2=^=bsZojDLW#Aj=z3F z$YgX31s%Fu7f4CUj!65-K~{)qKj6<*lO$zFWJvW5giLyBsM_dh5L1$}BQjw5U79eh zpsfv9^o+|JNy?7MaNF;EB^6%g2|p{6lpT@QH`{BF*3PFftZvSYITFTZfI#sxm&B`G^5 zoBX$wlXcr>f|!z&9g)h4zC2%17WO*=q$Fi$dE0rw~M9yqIP*Nj=mmfs@`{#fZg4fz$?tS%CDxRkXBI`LD-p^v8T4eQ*^=UQ$=V z$gn-9=}Mm+rw^{8TmGj&hIbgK0O^CP*jMo~klOZ!{y=(n72#~MHebjS!;c8 z6(=9H22wlRF_M$sT}7Mt(wuDiDH|ung}(F14Tn>#={OSG;6q<2^0ELbBK zC-an_4WtjQ;@#XRAeEQ>B7pS4Rm6u<3(1bt=}tF;lipoLd-he;I@xmLB_Mrp6{m9? zgqX^alCL@Gd4DO~oY)Nx-P^h@Kh4PwO=(8M&Zl=*5pKU<9mw#Y>HJ#p!BuQuI}b>0 z{i}2k(+5{Ewc{vGj{n*kNbjy9+;wmSkl~KT)V8wY^ubkZTtv2>^z#|MI&c(_KDdg# z%c*T;=QDg;0^L|)F@10qztma@q}F)@zki}Hg^`?3?b)l!oP0QH1;q5hRqSlZ?FY+X8rXDVp^x2q7N;w*S7EcKn#{?7Ivs)Z!ByPYwjW66 zr78=6^ubj$>&Vv$&IXb9fb_vtjB8ei#~jwUHjqBJieqli9qI4=d^YjHRlGh%_fb;P zF% zEeC6@cUKXVrqfIk?jDU94U3SlPNPN zmoH8P(g#=Zv>d%w^uE1Us~nL3!&Ov${jIC$MmqO~Z{HJ}6COQC>>5zEN!J#3Yt3$L z+S8Si%uk?I)HS6sX=!>A&7%BKtQ`A|zz~>TrO?su?i`CH~HU#p!BJ9)I!RsNJane%*qTID{XB8CVENWlJNv^RAQLt=hnr^fa-)ReFqC%1Q55?eRb4QcWUncBAVRJ*Ic7w%b;W zlbhaO;iPw~HgVi3Ae|%6?gG*Wt9JMyt%uN$b9>t_ob+zh{u)3lMi{BB{p&iAK3KJh zFUgKfQp{0#k^$-6syR}AtOjJ*=a}k1`e4;oG@*B6*4prSuMPw0gH?OIo~$5~j`Q&^ zH1}rb(+8^-dA%=?;nn~i)4Np*_rFVahLd7`YA#S- z)_Vnzv*~8CuGf3WS^Iem#Pq?c#U+v(aS~a+2=y9lBzU)K&eFvjaI#>Yp+Ndz)%suk zi<3Pn&&t(r5%Bz~fxErkxWus4-_5Li7 zK3KK3<#`WlJ0N|qYDb%m4lcAT~bm#E=lt@Uoz)NDhu0jZ{*LiZvV>4R09H0cK*og)wM<+%@5ZO4JG zoLrxB6vXtws(t+&$;r1$B#_>%T5ztS^s)UkbPNS&DazN>K3KI18R|jIFm=y1i0Ok> zTfN~R8Mox#LLS;#n&vMceXwfJXOcZ`3#)kxcyz`Aqz_hY+3Uv8+VI~JO91JERST~` z?nwH#|JZE%d5Y(QRSP>z5>tKjg_T~<@7X?BwUP-F$#Jr@GN@PrpKrZeHD~G^o|WqYKH_c`&k;RudK6xW`H$e7&*j zl>PU6aeP$|KA8MHY69UKjkt6AiKc)%2R>mLKka$sClGG_cH1-7nt&@CHr9m33%|*x z+E!z9ZBO~_fNRUrvssl!N2UTrH-EeBj2}t^t_<4G8;^7a!gm;>JJRnavRXfJVQ&_& z?3hLOyl4dByNr1FnhLz1id2gi=Y1;Y0jaqZ*80T5lgJ(%ukvdb9R3xw}8;^E~l zb^<)S^ln;&&2XeJ5N`T*+whEWLHU^zF9JQi-%4MxQRS zo~N}8tntWgAl&rrw$2F19$}$Z{b3jH&Bt zo~Egk-uMXjpMWFPf$(!CJS1x+j^`T6WIi49$af&z^zF9Jp(ptj=j^zSC2|bc?@zQ< z2)|^CKEFdX9)0x5vCw#AJ`isDc3WqfbDIHIUMB0tagY8$_%&m6WyQ(U9G@J#2yo;; z5Prjmhj&`)x!!9PVT(t4>_~(lT)*q1Tcq}W>N1F~U2oSJq9YrE@H@un+L`THIKE|l zU%-(PLAdGLZNqyi(Zio!r}C1Gy704YnJ}d|k|PLzWWqmx zILz_e^ZlUl$dDl1^zF9Vn$2Ya*QW1G#c_`&LAdGLZNp10ssVU-=HW#FN3I0nrf;{^ z{yRohC_8rTdVB-GkuX8H>Dz6?(@*v1_^X;_07upY;rcfo;$iconq&?2Ye!DB5( z+}g}i4sh~z)}_#RBvuff%!u2I+rI!@+cnTwK>uAdjxUJ^P5`ZJcf^gHf z+p4)gQ7fdMIKR{uz>#M`cxq#G=bX3&fIA27WHOX?9g-~wPiw;Wm0rs6l@mWfbYxr* zZu)jxHRWYK*E#>)+Zb@9T@Y^icH7{*qd$=7B*i1{CG7)d$!X(}dqKGA+ikBGC?0V4j=epNZe3dacfgUTL3j}(ZmY5XARN2R`B?=V*&2iwGveCfP#fUd*gs1G zj+70;zc=9*KQ!X_uF8BpkGu`SOPKKc^V@R##C!TU1v_y_-XOfB5qB1^Fb;5My7#LA zM+OJsrH#09F5eiymF>+t0FE>c!UJ^N<8soGvqtM$ZV;D4Za1V>3I55nn*Qly(*Go9 z*J9~r;a_4SbvczfbZSoqJ*w95gs-+ZDLnlP=vEiwE_RO`LwXt`ChuCdw54@ZLV*(N zFm{16d(L@)D|f0g8%lAZK#6sl@Fj^fBVy5=J$hH9J;-oR35VwpVl@*!a60LnBs}(X zFOG`@O03I>E5{4aq=H3P=GJ4%nnf20l-NiUK6c;)jyG8NnnxE2l-RN+{9Vvoj{nn! zE$dlykwA%!G2zET|Ks@VLrxxDBv4|@8*%5{-CF^7CYFc?TqsatD;ja-TDP=-E5AoG zaYh?26ezKkjktEO#S*}^DQ(%>l;T2x5?jTHEA!Ux16=9S@DMa!C{SXn8F5FpMRbA1 z&U@JHJl_G1iayY&i!A` zJ%1GN@Vq_u0WK6Mv9(Ni&c@vU*KST`x|=p06@s8+|H+7J%ZJ|L_|M~6M#ONDK#8qu z#GQGc@UBxHx3~?B7YdZv`X>CuGP< zoACTyIsvZydxU8_hKmGBY*Q27@x}_ko!X3vaO^^X65HH_H>f~v5=qBi`coj_LV*(7 z(u6DdS909H%~!yM0wuP!2_O3tO=b0-umANG$3+4qwyg!~168^L%*pZzCbPP@u$i zG2xcK$R?%Ucg7X^SMqaP-1%+@$eBP$bOL?J-k}WClFmI zP-1(U@Hby*LdDK|_})a03k6DSFC*?s=_Uz95`OX~+uEf)FBB-TeT=xa`Ft6`wP7cN zpz-MGEi_s6GveXF+i9s2YrOW=k8LN?=t6-KJHUinB7fre;ks;fNO7S+i5+CZvu*3b z@tbw|9abn%Vuu)U?R87OveI_lAc6Iz5qhEv9s4jN9+`7KpDH8n)L{7-ZM;yR#EvlH z>Xjd=L*v!WX-7bGp+JcpWyC{g|3FJoHj%5=6563KUziC6O6(XTZrxXX6hyZ!Si2IU z3k6E-I3sQgy=Le5d;h$Eiv`LABW`VVu3Qv6GEWp z#R6rX5f7`ep({iWD_U$Z;9`L?--w57{+Fz2^%pRO4ES|2;9`NY(1-{8_knmf%WB&A zfb+jFRZWjwEKriNInPFT`1Ti`o79ktt01~qpe!{;x0Q=)Pa01SfIKT!Bv(Jc#R6ry z5f6(#OgDqsOdFP^b6vp20%fHU4+^o8HLc}7jUJRGoda;OKv`wP$v1maQO=?(cRw-* zLAy>YP*xjp>-G%4kz;R1qg!XZaY1ykKv`?VZS~JhgXp#&o2LX^EKt@PacxzlA%JUr z*0QZB+IX=**=WLVj_bwoRj2rv7YmflCj8lTYJc=wqco$@%VNA<`1X-u zTML7y4kjd7Iuo+w=)zveTkLEm{Y3F=^_W9GB^UdYO84kr@+0d3U(QO?XnHru&B%IL z$WFxnB=K2k|AnsD^DwgYX|iwE@9l7TOicF8(t(h98QJ**Nss&am6MZr42`+coRIVm zVsQ>!RK*L4W6lj}MMyFN2{~mPu~_~5I{FrKyGoZ?WVJ%b1)0ch$^RsA%rhTf60!gz zkLKA#$vN_vn7osVy7GdIyt1hPC6CET+(XYFG$UjoMn34&)(e?5lE}mmSB?INqdyYp zj~es`eN;H^C;Efl>*DIu9}Vdby6F?wl>TT=f3&1OTGJmS;J`SdX9vc0^bAimZIR8S zQKX>MVp07v4j_$6cFU*3QM0WihmwqR1|c)Ns^o=4U8olOOk);hjflNmhn}Fz;`zkQ(e}V9H-tt z>Y}0JfJ8e45>m5W8v~>keD7aQdNv1SWWEbj?6Y&C;XtfEu_yXAhm$~KLUyLzl2n~t{VxYnpl-wk@|5W^DiM?gND}u($y~&b;oSnBIz$7 zRci-wph?FWw5bS?$oES~WuHn5eA!u1cIBhmQ;+GXm6VVXy*AQZl#vlVYK;aGS$+xW z+WS4t;2G)KUb+;JNbpO@h|Dj>0~wKiI$160twnBMLb~qep<5by%o`>7^@+5;jBLG{ zY(gfH&6_vlF+E0KLaLj(RtHjDv-lN|NajmOtxfagKx!>YJ>#VK`A$5W9HATidTZ4K z`yK;{6uu;;x+Qx`POg7?hLaw9FCjI{U{cnQ6!X)QEkGi1FC&u;OU}tJRq6I78-2*x zOGx!nnnX^X?LHnzr0XT5W*tN8ci2eKg6fbpq#jf9d?)H#ExOboPDVuD2NFqoNlf+6 zg?#j>D~f&3NsphGkw4jvKuooI>A!$PYF8a#q)RoSeG39gxVyOUQ`IYw2dMKAV(}AnSAetRM|9BX`_6%E`?e`MnGocqwT) z!^w@u*rJr)?U8(!kgh>zqkwev>;5ye7I}9W`QgqdPQE$Y21umbW#r*nZ8^FBAz82K zJ%nt#jJ#U;7AG%U%L*hC?J{!1keQtP^XmmpdWsY!WYmR>HGzyeb?6TukzSXOxewkW z*`dA$%l*%ZFF^k6^==<-Illp7YM%%3)*>e_iD|1ELXOk#0$mx}qHFvLF_Dg!k-O83 zgP69R8K@{>GZ-@Q64L(km%%{VAN1!l7?SW3(l-3gRv>Ld&+>7L{JVq0tmv%`va z=H60TX<~}lO;$YS(@em63KN5spKuV1X`

    Xd=LE7|r_wm2HmoMHUfVlvoRsLCKyI#3-X1o$61lm|PP)j=A|%l{ zoisF3ub@C@cfcDOesC$mNr}!0r2nFp7)s+mFlq2lPBEHE>t)m}x8@kiA3>@MZtU*K zNr}$sHkH88Iw*$NV>U`)h{DbyDH9|*Cy=#fG8z3fyORy4^BJ??B)X|l=e&OJZrc6^d zSO1YaA(0nBre_ZPa2mnF(yJ&l+d1tsla}R0AV;_H#3gp^@sZIr{)M({!IsF2K$d$| zjLN9GWV75|_GA(pCW*WVWWAQ@vyfCc{Dr*Ky=I>35_u8G&BdPdhs`ZSZdQ&$xU-cP zoisFjJ9!<*k^l`2?+4W2q(oi>(tpmVqaa@r=|8cCIUQ{%qpqaY!%!ahf3$rESX9UN z_T63BT?_Vty`iyU!-~DPC=nZ05D-uV1Z*+NvauIb?7bs)0ZU9`VvW5-V~H9=?9mt# z{lya7_nuj1@38E!8=mjK&*S0Z^3FMP+MFr(ULdtgelW5v0G1>iJ}x~XVyPE+J_J&U z==&_3ODjn)ssJu6XsZHrI*!GP zB)zbL6DH#Dhf@Q@XzwGyK7g`ZW)!SfRZOD;=QW^B5RUDI~Lmc)%GBt zx|-N^+1|I2X47Uf7uHWQEyrk+cO z4<`|_!LUNKf6RDFvYCL~+3Vj?;F(6qolV*Ls|D$B&8cZ~e>WhZC2Z%Gm^_&Clw>oN zrzZSd9jr94$LVUq)5OG{mZ@3|fZPwkTTE9frk0rwkEV}jF)P%A&LrSuliqy`!-}x{25R-P+>CrS&Fr*}#sYqo}daeFI z79(jF9UYX1BPH2PKsI{Nx)7v2N61EpD*VHdl58d*UA`Z99%_Z}f^*XI^BgJ3W+F0W z9TqaQzcS>~VK+EZlFbC<$q!vH3hPm>Bb)tp{ys-avYCJ^n&@^H$kl`_I=ahBj+A6G z6{(%yx)#m6;sMmouko11HD;BZ6iex8eg9ML;(2_s6iT z*+j?&y?^%QNJ)ATkUJYZ*ax1egxu-5V80bkKuuG(`=vNil3oO4 z_|8-e=Mrl7=gGZ8H1fz|k&^TxAd8MF`vAyQge*F|HBAqg zh9v2Q6)auVVu@yd|6$FkrQKr5;hIzH*x2Z>p`&B5Q6!t{F~R7}#uIaSE^(VkPvz1oj_hZs>@r<4w$$>A#*e9z7m=aHJ$_sYoT_SzaITd(=vpPe(~YMQZ1ix%vv8fW9J06zw{e^OPhB z6{#%#P~`)V?j-Hvmu2>Fq$EiQ$i{)^SB8|N|JrRMn<4^1RHYlbvG%roZI*>npPQpLS$L>0i@T!&$VZq@+K9MnDv0;%B za9T-jVGIuo)k;E#d6Y`PM4LEeXC7I#!k_iZzIVf48(I01+uD-rl)7gS0|w+6G*_kG zG1A#%2;wj^X}m{QL*%d{*c$J!=i4~aVZ>^eMgD{dkSnZ=xEoZA73sv&VccmqzNrT< zc11#0v>PAm0ys~{F|efAck|(iC4p3yDLpo*u{}_V4UeTJFog(^{RTnQt6Wpuj+@N7yvUqcD<^Ydf#N*(8#dBV9O>f zB$YXp)eE$Vd&28LuT#;!HgQoI%bk>V78CO^_bFfnx=z_Vzb)K{1{v2WA%(6}7e9if z;652|LlZC)Ufc(Us#n)3!@upvzL7ISle=|Rw36VNiUkhKo>@ZK6D8D8=^ zm8TOmbL3hKFfJEJ+BqTlXgFljN>YI!?UG(m*MKY!q_U)26Rh=Gkdjm&ARC`Lh2d9o zosf+WSEv12##1sJ3dqwl=vfl_0)#w0X}y^vB}qg;7O&K!36RNzEM6+c#F3IDq9V14 z-&I0fy3PVnn|Q#>>b#P4Ae_O^8s_~+??fC_M^mm-y40qv{OsaD7+DkY_<2Ctg-HAa zZFLqQEP~W<6(dMMj(TZA;8>1>je0u5Y9>kW2uSb#FAKsSmh`H5_;cP*uPQzJa-<}9RG!*7J~yy*~t*9xtu5A=L9aJy(-psA-)8730uQ0>9=w= z;8-$1kaY@U$%G6i1epLYWeab7zAX;SXfVhj(hi>dg>x5%DFI%_7JfRRLl}Z4KfzCb zK9CAtCcF@C0=%3pym-~RjRD_G@Z!bS(_uUY7h+C;SFnL=6Az8VVG!4uKx-5C-*o42 zA@BrvB@5hAG*g1eI&=*li5kpM4d1y=Y1e5fZ!c?wO5apr?WuV{NytA7i(QtZsB_*G zyJv-~#Ra^L|x84=uhMwTAjC#1NIEUL0!Roef?;#uDN0u86z4Ncw&EfV#u%-=M z<9)&n>5rYo)_70p6UgEAL(tO(u3ffvI-=M01Z3APi!XPY!|jJ)9UHh3nL7*<3ii|v zCF1?+lUBIh5Ughl_p0skkoVoI!baLwVSZ#k1iftF+Bv8V_SIR-4U4MXt2VH5S-xc&f)e$u&FKl^vI`hSbbiC zpZ2TC#%D?Z_Cv6lExdT1Z&7gRHxj(qUyaUl?)F2lg$-Prm^u(8uIn_QwTVf8)6AY} z-hK$SvcT1Os|#?U_?M0W&<8&q41mJC)iPuCV2dI&mZ>LFgc!?sKRV;8R=Y|<|9n_i zwj6d!DA9w?HCkq(b^}#!3y<#b7peryy-m@s<#utn{XlJR3-?Y<91VL@`KNeCxwC~b zng`nt)Q&cAO|yKfu&u^U`)Rx{9z4pq+Yi*vHgN5-KN3HM!Dyt`F55PCJ%`&5)UGyg zC9+Kq40gJ|N%+Woi@dFHyMg+tE!-=549X-+-@Td?n9Sk!1GR?@Tsvp2KRCObBjM)^ zHoxR>`+@qI4P03g-`^YXvLyVHcDdGYxcxx&wS_l+eHFuo<|@G(f8C8Ow2|TL2WoFy z_~`?q-4SW|2!48OCm=0eXFpK;+QN%}cKmz5lL%hC@O2tpnA6%1R6iTIHu3hsDX{wt zptXtnLKP0TAE*N?@a)FQq3LTeR#ruOu2Y(gzt7vVABclld*WDGw0SB_!6vzLUOb>` zJDU*nw}p@Tcn71t<;e`Aex1>U!|jLQP+Pe7h}u|HwA?l8Z8-a$!|jJ)kPTepeP$01 ze6bf%XuK!Bqk@qMZ$AWw*}%2SlD5=<)_x#UEc?9EL=Lwff}u8WB{J`_5#atO;7Y_l zrxsY@c0+KuE!?Yt?-#u9Ud6hd;BfmP7;Xc{do6vwgW*`MJ*Un~8ZTJi?T2854P05$ zsvs?|p=?74mK#N5C4<`!!6;jJ3ol-v)Gfd_5WLvK5e+!peh7}S!0C@Zs3V>$#3!#$&seE-FydKWKV^Aj zOF(SKI<0lovmd?cRsnCmep#+Uyr#O8ePvVA?QDU(YqpGuwF^ql6Bt#bEaN`bxy? zo6O9tgS=_8rJNI%q^#eWcYm!aekD$#G(&^wXwx4*&gR-917brxKOG$& z8x|EF7Kode*v^a4X>n4`mMIQ0y+JRXL3~vnKM(Xsu29pI0zuuN&F1EA}aH}Q1$#O^=9Qj)sV zDVL_%WDS)}HG$MLn;68leF!NDOckkJKIGqdV8=FZmirB735bxA@Dh-l>TSbN?MgFa z?WUUf{^Zh1TwO&fOYVdtb-7dmQdx5I)&-7~xVnHmQ)U_#LiI=pigKoCejF~bXh`Bb z0}(9IBDKqV?TZ1s^CbTA?j;U#o)QBK z$W5P=7zSh>LT)Nw3VTHsWlIdKB9$fA3|C-athd3y7wb&pNQr?3)*Gl78( zv266Feo721Ad9c6vJS|tge<=3Tv^UjVqjKHJW;bldGr+9W7hh`glo&kZgwc6?iG9* z91{}|l1=THDNT@A@6=qesB?KtcwG^Kc%@w1ePw02LT6L`xlU_e1dB=rlpR8BKgq9m>)`14B7*_hn9vLR|^_4q)JlsJTdT=Z$4C?MxEVY_x|%#n^GA*=Y!pEZE^ zb(#2$dYX7s67f|#Ygbm;>H{Gzk`OD)m!wq&)^UmWWapFus-3Zxt~CLho>8Ydm>^UR zhzN>~3=6Wna;^QC;E336ks-YTLSj7H1;+$NhebI)E|h|`=J;PR7mNQ@iwVOdUm~6$ zamYfZNf>oaahNBX;zom*iqO?Fx|&C%1(9Efd<9ah8xgc;DuyA~6knZ)E6A4^^-W*; z5TT}unL&~fJ*H%Ml$ou1HoZev6j9!hMA)yip4lvn2(ad6XvN%Y3X#i1z6NP-q$>zy zZr-1W2Xj%VQPK6?=?72JKVjEN)oQbE>6^+$bW#HN&@H^kne>LI0~GtR5? z_3_ybzo|?teH$M$aHPcgs`Kjlo_YES*!{tTO+9;yBmcYe>J3pn{2)G-n;?GZH!XQn z4xLx$>out(#HU1~^R0g9G)GFrXU0@>iU?HRD@rvK;*QQCS)Df~IC@NQv}a&w zaNvlr2+y9ufsy!qyzls!*kC*iL|W63cvV$<_iJqY6J35v()X*if?R8oV#nTkn`EUo zmfVg~!AQ#zdc#|`Ae2(y8G9=}OTWRGr)>wM;xqo{RFa60lK0FD_6}We5EzzOb)jP} zk)vC9+Mmq{NZ;GfiorOx1|g@IX(qzerVY0Z(sQ84>Fb-oAU4nx^hsN=r7-reL#iLwQr zH8wxRB*L{bA#2Q7xyg#OuWS}e_0(80ppps)Hr=^_pb{SlqM{?mgasj*+FGK?gAEEX z9vBlGL{dv3k|K`wg?XTDn0wft6=jj+nkABIFW(R2mH|+2tj?b6nu5&j#IWDK(bd_g z$*|g>XxrCWLdPg9NXPN;Pg`%8s2U0D`{%=T94Rr8>ebqsK7)#YXKvzIv&%p>R+F@n z8Munn^&8)J2fFwd@$46qe>vyrI3BX9tjZ&Jm$5XO(i_W_d&!$}n60(#Yb0Zwb7@H8 zw=Y$No=%XR$^_r^eNqNfK(>6Z^SwKi23Uras7ys_Yj)Va5M0cE*p(HZI|+|q z5{#tCQwPQr=13t=WvrIs>5x4pfOJ1*SvOS04&8sb6S7Ali5aCaCEy$Y-y z1>4e8OxMd$fDK6`x5T!BQ`h)?9!r*_pf6`wsdNbT)`RD9O8s>+dq+O2EDaXzh?##Oj3bX&FJ z=>2@^L+JXAr8wO27|~0+`x|JyIw5`EZD6BIHX0Xr*7$kmUGVHm$QqY!Z00;A8fRlf zXpW<)oGh9$#s~*Nh4SCrXcUnas-F&yzksQ`o)$56gU2Pf$igd2jqO%-_yX9u5`cO) zkGI>X>+n^_;idBnUXHZKRw;CTL+ftgNXHI7cvc?TgMG<_o%V^sk&fLotN7)UA3%Is zLeRUp|9glxVXD1(YP0ixu;l`lOpP>~(YuWqt|xV1G9=~!+wDlb z+dA#Pz*J?JWk=02X1u0n-@B1$mU@+VY*%IX`^|I-7V)A#@VmCJJAJ(aB1jxcu;q}# z-(rN;za`|5ykF9KFGETkN;vxq*$qDdmX7j%9DZWKIpdT65M8{>_-!Elj8!^G%-B0B zNHCX2yU4K-;gJDBZ6ilUg$Kt52epaDZ-D_Zv4TZqDay74@q7F`YFtBo2%z&jQ2Z#j zjGz|lcxq1BZ3`b#u1I6(28KdrcyxzWZJ1#N-3ahh3*6%8f~l-l(z}i7kLtuoGcmne z=sJJio~%1oq|R^e1k_S&EmG&V?cf=X6gt8^g&dDX+-5c6{-dd6s~VY2CC@sHy=7Ad z!yNpo=B-=kGC729h)0?$>zAEXjjTh|_vL(`Fe*#*Zr`l@mAZW_b7YC#7V>0&O|EaD zFq&BC{N4@tks~Dv6Ocn1x~u}b_e|KjZQ10WcnU_(#4|g4@1MUP;?uNF@3yN18)35% zUx-S-*To7!d@SHX{AVfa9f;2qel*AS{=~V^tSi?76TmWmvRJ&^)L!WH2d2cPKQDFO z;y>>C9V)BIRCey;1M2t{=PX`i+exSl0jucx7cA||kxp2=m)GYI_9GM4rzl%8B%V33 z_~|b(ei&)yqIWym&dh~y9O3=*u0RepG-BfGTd~|gLP*4C3jgW<+T!)(T3`a)R5R3& zA>)=neu$44?{{U0^A^9i9_lhuF{yX^tyO1I8O$z@o|)oJW!e9eQW$>>O_|CnU4GAz z5|xQD9uffeG-#Nxfm<(dWKJyp%k5zhzZMh!>WlfjDJLvmzWPK6(S(Wb{yH~DO2lUh zzyE)2@%j!d{)ejmA<-`|(==$A62psH?$~xJtN+{NOQ;Of09gE=?@_0iQ(ie|aqnlh z!Lk`sS)&gup%PM}GST9nC)5T~$Alg0+KlteiN*ikiDryw4&pybVna(d;tN^5fBmOL zAq1BCkfLgO+~-0_#Ag| zuIcmj{2y)7WhcI9@lDgpK#1l{{ME0p6J$Y3#3zfV3UA888YR1}A{`~R32jWmKg-AN zOu4FL9B(&zWYm9{6s6`9O#ZH9D|A2)uDT)ri`(G5$;TGN%+lxupgv#B)t=Nd+`sNj zTK|Do;tXI5lOOeL!;uo52`2Y6@JGdLb%`w4MwgvQZ25}_hJrBUsAC==8WAxqX&>0+7ZhE z-7eBj7(+@FC)#~Nk)uH7VZx40^ySE$*!|f-%)X3Ni|g|}^1(=zt@xtdJN+>eLbPS# zxBjUjM@qzJc5j+vyVw3tc6aoquhiCpZn4~=kN3{ z8|iVPMzp-TWMV#JyW%q7T;fge?ZouA)gP<4=2U_U`V-(6Y~lXDbj2*rz^0)7hk7yZ zA-LcJ0{n`@1)Kcs^G`!>s6^N2_gLAKizAEzLVMR)d!jdN8gw7xv}e7UxVkKd+waXY z3!MI_tLhSnp*(bE;kBYvPsUGSm2EeERcPUkJ_CuwDwXWGMBjk$@Th>OVEYL`=)ga! z1U&^``13lI&IQrF&i~HeJ)HN2xc0w7do&X2^M6sfIQ48$W?zuZ>;~L-9SfFSiRFOb z+^%w@pg0NA|M?<>EqhS8&i}6)Gy!Kk1rNxCv?$u{YF++u`!FdrQt7GBAGQ4+Z%Qz} z*pz7ZTj7602o$am|EJ0IIZ`4%%K`&clcQwSR0K91**_FN9c2G9Jo87!;M~#3$k^bv zF!<1bz!BZTVleWE-k(We5-U)!^S?_dcnXu${xAC-ao*00hKz)wXt2}gPprF^+Kq6| z&TnQ70ZY^fP}D!eYH_4QQDU}#|K<*mMVPSfVpx$#Jab~_1hxRtiitnv^Wj_wC+z%p zD8@zu+if23`2G-%l!(vlJW{pue+=!)PK36@98dnR)^ZmL%aWn@yKF@lXcI^mnts%> zHE(B1m&^8;OtHulh#F&0(ps_bx~$BKbH?aOuX%HCV3V7Mc%|3uOP5G%gmie4UKiNy zvIfEqCSe0RSNy<{5`C-gqKwJ^5fQ1wn5HOWa!>H&$f~uOms9+Up&=koO}cap``b_G zFHTL&lZzuIH*g3@ZR&s@z>`#~Xm{VFOagj94R@Xts-@yzZ+7a+sXjyLLd51=19i@mDM#uIxT=}e1@j<#R3K- z@unOGl+tT@zxPlUl}}2qp56O!q{KCZlpEOY7bI%KAQC^Y#gXqgQsNpaQW>LP1x4%D z63@{e_T1!1iE9YRQ{x{a=ea&6B79OS&jkP$zoY%c*V}veF#^@ zVlZ6w#KxJV6q~JE`*}eZm^>{JEd7aP;KtWwI8x$pLZpRtSTY63PnfXn{_4w-jw3Cr z_(#WGf%v{m{IAzEhWY`h zcVE+vRqzKg4^tThu$7tKJvn#`Fn$cP{_-yNjoh0^bqB3zUGPLbX*QTd4IX{qEq#r2 zBu-%@E;al`+tNVN-j{CppY>TjA!H65!+l<}`RGC))`c&Y)6O*$LU4?%-Jbd5&%hu_ zKvk0uTK0DAbel`hx=bTyhFcPk6M`NF-Tw-`38X&=?)&36^z})(9@I>w8-AxyK_IIW za`^2~+EQUii5`R_2~;_I0G94tw|g;A~3RzielE!9f=j zAo5VwS)b27;rbTBNu6h2O2jf}G6R14epw!t4!;cXTUBH1<8jG$1&`PpSmMZtMt6 zvIf1VMZFmQF369m$4)F~8ByGS9D5qt8vvl*{cv1M>X~!9vB60%D}!YSu?$|?c|Au8 zip%6iR*UIIO_CttJCjQY;bS{8(Tp~Vm0%3!e@-USs>2QK5{B%$imACH%y#iuJ z*bDkBrWST)M=UK`7J@e>!AB&1%;mhP4=rm7U6I@COMEvEdB&V(q%?2;Rwlt)WAI!wxlj_Htl87(F z`>>8pPeBL_yAZ!k?kyZC5uZ$*mU(AZn+$AvMx_ylYs<%Oyw~8BMqp$_ET%V}Z7o0f z;pHAfF$Kb@Wm>t*KETuR;g-{~X+##|wu{eagN(;{z&KMEkhn!4@q3AALChmSzQBVn z;wGS`h@0FN*#U8kL@Vy%S- zU=<{FMPISXYw$Oxm2k?bB3Az08Z0*fsf$>W`zl9DtRgs7Y}MmfHn6M>#g{Jm8mtBPr8=3gC;!1I(M11B{!rm{mu3ZmodPd#gAb)sp zr?U8tXH0NFbYQ5bFZ&TNG(5O-#4y}^A{Gv|IV4Tk z*WmF^7{3lPF^lzyr^Bc#tn8h5q)<1fjb9_7{Tyg-6=|==%%i1A2i{H@f9$LHGGMud zv^Vy}>lz#>(Vk%ZiRWW~1(MCSCZ65l!I3#IevPSBDOIgx;(zh|ZQhjQSRebW?Li1Z zgMe=Az4$8}DG{F;U)bt30*0tzu|6F?ogF|zq64Br!vbSGgQ5e*QjmLg3my|3PFp?g zGXBRw$P3%N6R%csK_A#0ed3S3W;<{7jSDchFs@;0TYHO*p0v>_QJY}9ac(zJCmXhr z+Q#K>f1cDvNQv46&8bA zAA2US`uhuM94Qf>SzXx8{f}0+p6+qN>K;}q*!2=#S*W>s;0)Bg&wFlkZ5|G<)vx=FL+&vK-oB?)r!(p^9q zP~t<_X=SQ%q|m`k$ZVEfntaj&Q!wMtO#JedM)Rf|N71Ai)3JwdAf#@R=^OOf(s7CS zEQ-ddMuy*MgMdwkkxlqX2Dg0d8o7p@8Fvis791VpNue@2rcFS!Pb40cIo<=soM>uM z6HJJ>ED&p?Pq)bD+hdM)Efi4ej%Jc-612eeTccNXs?p&yh0U=kx0Pl z#!rgD(WcP#w0Fstb1zP;h$?w!2ET)TGyp1jr+>!^7If9Ik(BD;m#cy$w2QM_!(Y*H z|1?5M^dkiIbhn?wft(7UZhD?;B{=fGho+KuY66*;WKi+F&C$8W^NW^DRu~ZFBx;Tj%v-2>+v`QwcxdSD{# zR&Bm`colD`F$HXOi~FCl^v#)+(4h4n+o81cByWQjwKr1NvA^j!CFo8~3BsbOu|2Uo z6(4huBPB``Y`!?EDOPt4X-wE~qr#Drz6u#Xi_11>7W)k1pJn3LiDfmfjrbXbl~q?t zgQi0;PUk+yFb%I(ki`d&MfN>ag&EvQ+#jsX=}t|Yy9s(|M}KhYbA1|pjV%|M?+b3X zIONJn=pmJmivv%yg&#sn^dJm6pCAn;19lf4_bq&cMX~F}*|6>QN=Rz}g zz$Z8&2nTI4t4!d1R^@FuX2Ir%%N}&ZWZ&==$-nG&i{7m7PQ;47XTW>}SuO*B`kq7L zS*3DKt~kNtw{@v~0V?w%mfJc_SVbx$q@XhHZPcECT=pagMTr3mI}rBw0Yf=b;v?C_ zioWNdAv%b!XX5uMfvpjX5RR*(Z5_f9=Ijn4-L_WCtU^e{XUXZRnjin;@LA8v;j=?n zI1b)0C(i5vqAHmzzo^l=q0^04&}X^=eQs#`#T=)N-)3LuI?%yi0P5T9Sz#jWJ#xzU zGmmtIzZnY<%bACkgma`sdxG&dbeoAG)$kh=w#$V%9GL^-w@IB{6+$3cLi`;wmh+|@ z8-M0^D^>!@LTBcIG6OkMB0f|2L)G}M*huUEuIWfs^YGKbw8q|jATc)6n(mRYVZ+on z07$gK1hL%T#bi&af2kpqc?UA+lB(`Za@z9kw{C#Y#^(U)+i!NG14wCaoU(jEp;j?K z79y4j1>&%lY(Yv?Cs;no`|xN8i~J5@8<#~MvmhmX%`WWQudhMr`fn!w@_ebhDaV#i z$k+QikOi6ehFSACQX)Q6_-objm<#G?DwYn*oAA@Y%&5Mdu(!25-(&0+FggOqF{2&C z{YN$KlgmG=4Tau=9J=HJO|Cm@edB7MzXEaJ3Nj}aS-ZS@4khf#?UePG9)5#a4}0Q= zZt20dK^!SjpJ4suYE|+=*!xV_%3jYn^1oZ(xVocjPl&H&;I=3-1Yb!y2CPeWguOTr`LSJ zk($bkITexO;3Sy5PTjn(0IH5Z(ABBgbuvdvo_8l8m)?wj3qflVa_RN@R7EmrC3aGg zO4))nPN5*6NrO_>t+gjdx^;9Qt#s3*0~xWQGhGB zPWZr)l4tA*$mBNu2t>m}LMFG^N7WbWr{kc=YGD79{xGl$nli5LUvM37%3(@$J^ssu z2{5n+kgmtClzzgI5(5k2RL8?J6`*P)ejWF@Q5-2Tuz*~8`Dr=?twG48ryJr3Teb#P zkxE%ZD-@2ob_1!DRX$eZNQr?}q;_+<9|G2uQonZdwL|}Mq{P4~l8g#>bj7IyX5iNx zDKRih8znQRji$h+XABw+(nhsx&*rxYiwMAjtJxs}2YI6gb9q)Mq+E-|l$b3R=~6BP z-Dcm|nI9Bq>vAQmK&9rp8<>pc#<-^_HQ$!kQ`cKLlQ)#~cY!5PUEC&Q`s+iqbit6q z!!qsX4W-ndx#1Yb9|>9NajcgW=_unU<;%|b0P7wmWciZa4|AmCWkPBsDhcmbU|@5> z5QSGCy-oj-BlW8s3)Vcfm`Z@>`d@Q#q~vxQ z6{%@>DgQ+HA}#G|8lG>@0*|bc%gd3p&+|Ro3gigl`8-dz?VM+B%VTS^$>!^ukLV4n zcmk+f-*|C?I zb)rQC=JAqSl~klMH1*sucn|Zwp}T*?il_xCxm8I(w(dK%CJb^BJeAhIi}G=#XYIuGqtoiN75h z#gYDwJV9AlWF%%kWr9c{8luFCJEbJs{R7GkU zo=SmJ=`e*x8a=W-g(D?tR7EP!4Q>%Y4kw<^m7)tcQj$hhq;9=eP(@g!7J$0-H3qVI z5P5@tT#VB#jEl);;EhLeLA~skH9&z&b2S(x{5m)Ze}3E_mK2 zY3pyM(Ng5T9iNCIz&yk5gR|w-sNg5T93*92I zVC&M7crJ7;XpL-18WoYP-^6mB3!5&BRgJwT`D{v zBE&N~c$lYem^=7;h*0M~_XvQs3;x(k-Kx4=Ts^vFoaqfB_{koBk zxNf8&Vq+B|wTLt#(t=1QB0aD*xdBTirVR(^S3e@d(7^lei1fu5MdFDR!msOp0(l2m z+`CFR$8!{UBL3*-L@;Q^AKgU+6V3Re_dt%-AyORe)oo6sCJ`#_>Y`C|UF@2g>&^t( zIEDz-LW{hJl&4>(5lJAjln6P~#vMeyA+nyxaUy4l(7El6zkt*aAkvV2eMp39<0D;> zHa1a3y6F=lWr>hzn`i*qG>-^rV^eD)gNXDYg4HYYrV&I)piL$sGze_kK!gO^^pwa2 zBBzNQB?8r%H{B-kj0j^+6YwN=A|yeQCy~ZPIuhwjWB?H#B5(?GQaBMPC;rA>BGl<5 zs44!&EV?3rl1M`Zl8DSDa+An0kR;Mt5~(<83z6MKz9vGtN+NNSNMT9rk00V{GbtzO zJzW(b0v|Fby`-y>L?}CNu0f2Iane35F_DF_3%*n8VIhhQQOa@4Xvg5x;Kg`Lb@nmS+)OQYDk=m0fJO=p+oiPiF6?XBby3C+_(>o>1rhX zUl4x%XEMm!S|I;KSZD_(-&V8fu&7fyd{FZ znYZeRxDlan-by{%T9ZgqB2a{RYdesFaYV+^uU+YC1YPweGLQ%oo_Xt72w5V6u4WNg zO$07#-g=n`iLtFTkq$(Xh`df|5L`u-F=MO2M{4I*^I8@RjNdu5P1iZQh*4Q$lh#cnz)^=wD{vmzC?0?Ohogh ziSQTG#2ETNNNSo0yO}0Jpp2K_!M#nBw$ZO1boGXaiGDpnWG#`=AhvJC3#0#QK?I6$ z>eYDT@prQK4oUrD<|!B2|bi0QvG2$P^v@nod_fL~4N~cc-iMbk&5e;Mt}r z&xo7_nF=$SrXnerriK%N%}rBp6M<<>%eE4k0kZTDBIs&-9GZ`h>kBeTeNeShuEtgD zX}exU#h{e?q>n$;X!nI{w#Vj_#~sG4$1>qY0zPhc4ZSe$Stl>Eh1qSn+TBnnyIx}~ zYi%Q!U`WTazN|vDd57t4t_@6x=9l3s*$VL&eZMwy&EyGeI%=kI_~~HX(E5nMfT$?X z&YdG-VxvdX?gBe@(>EZNHka7V;~qZIk>lVF(nA>}$0nv~T0B(BHUAFtYgg=>;o9r( zXy=X4t0b1FawQS)anCsv%X@Y@XM}e8@?go9#>%yfZpD#;5!5pg`A@+}bmu!0jFtkj zTEgej5J<9#Nz$#~Ox~Vs)#z8Yk`5o8?&^fF{S)3Tc&%M*xD zK3hJL$R|Xu5TW$3q9k3trK=%CU^LT;jYOsp`JKpVkd>Z9U@OzgUPST}`HILgBJYV% zs#t|V(6oxu@2Y7;XjEQB$z|0Jkku=Q3?T9akzydLC|Rw>KxSG^$!ayF-!+wq=!py` zf>FS<7Nd`8?G_@_iF5*4bC<{w`jxu1HjD_R^EInL*5#pJ|D-F@?m7%Irgd|PU_ddg zyGSGrWPN8MbwFlNR-EBVq&&#<$8<%1Jj0I&W&9b5ATyiM6)9&Xb#j6{!3TX%G}S0 zP*Zao68VM5F(TCHJnF|>VmXhjFpr#JUL+Ax-9}=xu@DjJ+s3X$t`ea!XX8O4xTl zM4~}9dl1P3l1LGiSP5i489vcSggh~kY&oB7IiCbdJWGV!B5@(e0#~~FgRaIBX$!KM z47zzYktOthbhUt8Q7a3m`OS2-nXVR6oG+|OBo|0>MIv;y@N*&oM2OqMHiDShOExF*UmAFS=?&q#6-&v&BP+Q1gqQ6Zx6Q z*C0!35Gh1t6_GF^lZjBcEX_|>FNxeFa)kb`6A|*_rR3vF$(Bn)k=HD*>ivi-+xPXt zLCoIXMD7rQ-OS#}AePtnHliySFXKhN8oF9dWD1eXL?CIFxA{V+c%?5$N(CZNm^q~$ zk(NYy5a~~ZL`xYBlJSBv`juKvnN4Id5%k=gvY80t&76`-;Hlz7@)1Eanp4XWf!fWfb%-=2LXxI-1u_3avR5}F|;!>v$#X-=3Rr~&(8KpsDHmm`INKhv(EI_76NN2|>}Vd=#-|h0|B+8 zPLY%CIh)z~85N4^YTDSjV}a?&Ffp|sI$%akUKG#+zo`RJeHnTHTcX(WBRERbE_jW$ z{*k9ZmSo6!4Jh6iGACZs{{?Kvj({uLMszI7(v-yM1+USzdI!-BpD`gye56p%PJ9tr z(o9b8PDssb-0qjX_`;!SOpeM@uhTOM(`nQM`xGFGy%@`9ApM9{)b}%Hb+tADF~OP5 zn>oH(*X;z(Fjyhu~;nhEGEDm zJ_=gVM&8T~v$eBrPcWO%p6#Qc6>Z-?ph|-egS&aI$i6o>SZ`R^pHU|X2VjenXdpdf zx;C8}V;{S=sA3cL-68`=_yok__%A&kz?uP|H~Tudr3!&c(Y%MH$}2)NwR(i@3_~fB zK-;Y2V+XM)0B5kr3w35dbK+iV{7*8U!?dp*b@wJ%_GZWty-*Wakb+NS@+pC5=j31@ zOEYAf(~CG#=z1n(c4^=ABlho&omf*}46e?bl87&cVOaDq2+@lngRbj1QX)RH|I-}X z-}=m%jI=MYzsIMMK@^t~O)w$;Cn&Pdj<3;&GOQ0>e>~y5)f1PthuXR_;QYqS>L|jT zvHIt?jbPcAA;(XGTblO}Qld67hxD&h8A#d}QndZ1Qz68VlD-NP{H&wZ+*G7cBeopT z)U34UyeTKFKK35M-q433W0l4nDG{G3{6mhdZhZ%g1FP4~-sF2-Rg>#|?o*(bqYmi3 zhFf;`?Tqj)HqVI0AD6}eVf>T#4@_?ojn{WQMlkQhBDidAnX7_ z8VWc1l_Mnz7m<2DG8I;V(ajI3G?Qe~=ET$P^hrm@*-S!zvpTbCHXRrICAxReE_9ro zWr*&+JcJ7&>9~M2QVS#w7VDcaVG}GLJQkf1IrPFER<;e znd`%oU@52mInwSRt)H|2O>EHuxw8bS;w zWTBaUB{)(dKJ%j{svrHwa@g5{5!3kWYN5TY)O1yNXjFZ40RN!H-e;#cZ}Lzxs!`)m z0#*wC#FcuEH4JA=zUBNEV2QI~&{=XvD$E&DqBGItVR|Y)8xXSau&XAH%!$bZm)(K* z{?t?@zlA4xQ-aB}%-kylGR|oxDt;(s_LUgeK7&q3+08P zM2(y^n7-}{4LZ(Vg*GEHvT*+kg*i`&28CJl ze;iz!|Cf~4BO+r`M~?stj$rq935MYMB=54lD_JR&v>ExzfOC=1#mWgZ$F}t*byB-` zpmjpHw@Z%0u$gnSQjgwv3%GT@Ds)XywjkPIRW#-bpQ)Zw_+A&p8haD8Quvm+0sF>I zO_4RR-8%dwJT{1wQ|bCjmLsw3>_m_jE~DKEmQjQ(T>L>XQY#@PE+z))AF<7W#JU)e z55K?2kwULUgJw5jsdRPrYlt66O;x)1whnJf<{N^>3Y@3`AtIR&c`DH0m!0@5FNfyX zA)L+24WK}Y8khu;5HpQdxwC&l>LhH*SRRu)3Cjm@6X7^`tT{5n7Z_ zBWtCh2r#G7qI??026M(E+vsW_5z7;7Sm~iO8-EN23nhaowW3Qq?cz$qw^-0KCNp4z z3B%Fu-p`$KaiwM~MiK)O8$Q*~89CCiiz_WpVkXHR5v?dKTE}su#J1VFxKe+7afrW} z2~qX*e%_R07gwqt+zlbp7_zL7wc`@;nS+g2U0jcq&$Ga$JGWhLeUtmE z5ah&RiM=K@I+aehuo7aanv`~}ElV@b?z9B9cb0R;Zn6h+6~jJ; zY+TFCkrHhQ`Aq40VK$JgLRGp%!u>5gb7JgPZLdK5ElddSl8ty%P8hpk`=$_LFGJQz zi{?m)_{`WdRbyi={$C#L-a;I_GoH+w&7<9;qS^%q#D?O5-(gW<4sX@ntG@I`(QJQ% z3A<(R)+GH}&-tjo9$f{R+|KlI_23KA$4aLhLG#C+OJMmuAvI4*ZskacCIv^(q}-u= z!KyCJuF{DdnG;9&Y2iGGzm181-UazQTk(YgPV;-^K@j3QCjQOZv?VViY zb)bdgRw=mZmOvyw{kj}iU1!tP9U^ByzWhjpdhz9NM1E3}h|5kttVbFqlJqX?zO~%Q z=}Z!-eBxF-lz*Opm5=NCpk3NqaiS=ybiWmur~D zb>AF;qZkhpQ1^8aS`pd%ol`asKbM9D3hi`4hM##IYeiZ%ZfSa#shm|EbgQ+J&rKPc!r#)V`XKb^rIk%2-glz&PX4SgPE^y=R{0o-(}p z&Y_&KpnCzH@wyx}FsYQoVg?IL@>2(aS&L6!Szre6NAG&JLt+o7C(z-c`&bOe=1Txx z-UIbXk`(2KH0aQrMg?#hW(elAr9{@KJu@aBHzVatBgGh3KH1E^u@kUa4x_Gb^vz5_ z9uaVTy|&mjH}Cx=bFRuziOOt!L$Alc{LV1-_uX^AjGFvSMH_c4M~X0jE85uhb9?$4 z076_(OMkM+LzrtgmyCbi($XT8eR35zK51Ge`#G*6>}_ z6|$hv6{}O5_ugZ{n5|MhZ-$^Hq*O&&x27!B2@;Q>Zys8Ln=WtVSV{KkV2P6Wf7>X_ zerJDIh5MZ(WO>fwu52=#x0%a*sBRW@HE)BtmgQPIQIlo8M+wOb_c3DS2A|+)H){M9 zbS}xf!oZRH{F;_vd5eI#&l+lTq|DlC+~jRFxE7F@BSF{}720y7(Dh6Mq&je96@Tcz z6!bf&DP>@nZoDap_(B5Ced^)~2!WFo5dX-V@f;};pOrQ?Z#|;4pYB{)Y<-d^D~mJY z1h2!12*%5=A|sqHa^9oj{Q|?g>5CR1^5?yNif`>c^i@$>)*FhBFQtwvO@_qDa$Z(l zw;S*Qr~TQuuC!U$4jS8sB@icEMQQq=JgkKID6woD#gP(S3r?oA`R5M^yNn@QcmJLv zbK)wk+WrXf^RlKI&!rWo?8FybMQPM*EyQoakaa7T=SYe8?YmOv0>q!KG9*3cxUMN&qfE24#xc@mft#KsC7Kf?#rhJobl<_#?az& z;%U6G>WR$c9yZU9R`UG*3?p3bBm(C7)vE~g3_Dh$$+HY)dG1wP1I*?OjOBQfom7;S z*~78_0+`Hz_g^9NoA;H?%q&w{Q2VF*vM{Yzyd@sO3DM>&oZ+cY*PquxlyxRVn zBZY~F#GV?%cC2OS4lo>EdtL^ z7|+5t%p57q&m_`nhkrK}Jh5+#-i9@Lz>)5j7lvkI6(wpBa*!^7khrGv5lq?=?;J(8 zq3yNTxW5ir47O=A%F0vnTo0k2A(M9vhMYhvN=SSFt#vV;rF%KzsVsSM4AK@Qq_TKU zDo2)?=?FRfZkGT0&I{NRuR(pZ{hA7>A14XC>#h-hH+stAYI(`hS1nQ z)Shm_h+(`vNev*DcO$;82qZ>Ud;-?d(gf>+qy`X>y2bT2fLjj&>gG@WiX$a8fPmCq zT1O{2z9*#i+-jQ6F`kkdKt#5sM}KO|F=UHby{$<5HGqJ`xR24sg=q`dv=zp9N@@TV zsfn2I9eh$pJT(z9@78dnqy|utir>}0=Rn%IB(2}2=B#w4nod#!2uO_kWR;DC#B~ME zQ&Iy6NbUIzqakfw0%}j^x5m4q1`v>%x*bs=>6#HzQ}gmc&QnqYh{!H?jo`*=9ZmZw zv_rsjo6CL;AR@hgy9?w!# z)j?!_*Ea+-Gz%KRk&+rfK!!~8JOepj5i%sUq%}SzHGqIr7N%<4*ARXHJqDKtN*LFAZcWA#q)b_ft{>2uO_km`ZEj6B5^rIZ{#s z2uQ#34Kbo>uMp6$l=(}Jl+*wM(r3qjOVAKTbJPIIJ05YQqy|utnmq5kkilG{0o3Gq zQN9;PN@@TVsWkJ-^#eeE5zl5d=UOWkNev(%wOwmtB-b7wq_zWl>rwGTlXtn5|>MRw$E2<3**2Fo8F zwr%KEjOhvqx-&UueSFE=5DE{Wjgj+89M&SGR2grN}b4Pd;h`*9&l;n>G}`UtF=2tW6*>{LY;^$J-D}6`_r>^mQHE zHc+V0xa))#(6fHs<FcIh+9;WV#AJBF+Q^%no3|m9IYJw3OlW4?hVph> zNyx!ULgmq$=e!M};1SxGLSMJAZ9|jmStNA&4auRrKK78eA(TEs8`J3PR<>;@=fAKkSY_7TwvFlMwo_iePfbk!=02MwksLxPCA7g-V0~=c(7caIK^yo7 z+rADc$>k7=Dxr;K^mR|$Hc(Pw0;73HZQ!~QZ$l`rgf>>t*S&1p@T<}sOX6BA4{H+KDKT6r2elAbgH8^d^Q$lK}GryN-m)drmlWAZD{i5s(BNBItoo_ z^8B%}CYM7fzJxZ`(bxTL+EALc9)vuoc}8+HtK!89Rgyy}!-O_AP#cyr|H8Ph^@-aB zeXwN?ZJWq&E{9N%32m_1g5_|&*hb5e^U)XhDq56>sO&FgYD$MmE6mCKrJLv0SmNwMA+^qXQzj`46b8n(XvDs9RH!7>pPzq!`i$xdn z>SrkA1tE2TPk!J?p)3rM2yVS5z-P*O~hyCt!Ygtt?VNezcbND?pn;AkVFo(X~X*|6jTxCyxze+54f~HEHDL^(Qq^9IYwuwu+6-p)vPwd9)EJdk%7&&uvrX@&Ag#xwUO%(o1W38{R{`-<}viXsV8d9ZIXc(U?R zxj8$UBZX2(hJ5)s)+TgcGoFuo(y?}ye1rl>hWz&FpYT35w^Vk_D#wvR*&{(}^d=PL zIuFM4b)eOUgknd6)DGA^06d{z^tOMl8l0z4;z*DvW>CQE1~Z;fi`b|_o*)!95~QIa zy%)e0T7qq=1X;@}p`4K*L&DOqK4DqC4(a=EJ}#|L#7L0JOnOv}4tW8exKhPAQYc*{ z$ms_XP{3JM9;feI!*&{|pF+VRL83G%0pxCCiEArQp-hn=QIIqQ<}D#{?Zu@PiW3Ra zugLSu;E8|8COVh594V9}5~R=C`9+~2tdOA)Srnq>NTCq1kJRLO)E5!v5(S_p&%Jlk zIZ`M;>?4(C6{4YA4ZI#jN5PhCHbA-+iVg`<+o~Xz7qo0OMO#0jBj+iU8Zu;!DYGCg z`U-sUfUX=V6c{q(gKZ~JR#aoi2iuNwq)=8!kjmR06xn+TsXW{7$&o@akqJrPyQ`<` z4A2qflXT~naf;eq#(`Rex+4oawm4!bL2xE&;B6w9B$x(bh16ucKx8rz6v`&UA8Jui zIX`>s4l7408}CnK-`F|F;$nMpJgUr-R>5 zSv&4Fk%ksFn~TyftH+y?bX*vGhrRhK4juo%I{r63=`-7o3&;xHy|7Vlz>0~YROskK ziIb^J(s3Hr_qS0UaL<2x07xD246LKaGPDg2$3!7J-`tNFHTffznfxz7u>2p0SWai< zrw*0+s$&OqZX3H!nKxDDf?3Yf*AK%;spP&!!1^J+G@01n53)FRB+rn>={O}9PDsz8 zXA5woX?QcyM0z=2iHON%zc%bsz2yjJKmH; z*@E+W4o*YumumzeJwNjeMHNhVG5s zIZ~o*0ckweupN|LpOD4_dFyhdMAbMKM&ai_7DRszap7Q}V zTH6{n|CxaGV@6X&yC2KS&IH(`&ZzWqMG(?+JbNMqLrQEexUBoH&8tH5q(jC1m)*33 z%8(M93rIuIxqj#-0Tn}Fhp#wNVsim$yxM3ZY~GNN#-Fy*3ay2wx(F-|xB{}&N&ms% zwv&*hemHC8nUeq;mG%(I#$*!89+@|e3*kh7jR}Cda*ZUU=g4PkIZ~o*!P(t!KI)1t zvtr8q>izFHQle}DX$TniIRcCg;)a3OXt9u~OrmT7X}oj?iNvJ=Nozb?kS18!DVqgY zY>or0SBo9DB1;GWrU{XNwz3f!{}Rq(ppXiTSF3ApSK+(1CO$V1N9a zgnyQg-2_~d7u$5pf=_TnP*_9=-R6aT(+*(~VKJe>LG<7$%Nr0Jq}-)y%2hsVicuuv zw)(E0KX%^i9iCz-DHn=WeA;(ldc$h16De2uOkWpztH+Q%;%M<}KOrT06V2{7d<}$U zlQG4&HoVM&%!%3Cj;jdq;YIkg_=4ulOb92;{^^p=5FcH@r{j|`94Qf>nSH%#_8WLQ z2ATan>U$JR%9qp(`{X}FKP(#sxO;|viB%eiC2q!@{H?PgtM*x* zK4xbkmL<}(gAc}I+_=qvgPI4S-Tix<@)&KmyqJhto~)bOLFW}-CJ zV-RAR^5B||L;*E8N)(^)M8V(7(b;!=L}2TnfGFIk;`E(O`@a?}KI$*@+HefK74695 zRoORASvrDqsL=PIC^9R>!tnYXJ>ip zoA$@k*upjTWP%^xb%1MKFui(n@&5bc$e&o4T*+~ml*zUWU?3<>;H}<>y#FCdd5d+E zEeN@k@xjWB;S_bkC0C4P66Q=|bO|hkVd?*Ib{=q19ZwuTn!OPd6>PDKAP6W3RxDrz z1uIrm1QZ2(=MKbPVvia%YV0kx#9m^Iy+mV)EuzubYwVi%|II%3-Een{{Nv}7$%Es& zWoCAEcK5w^xt&U~1up~L2B=#AK2cWj*fzAVpnZx(5`WVrLhis(&i zYL3I}vh5^pyEpX0f^=7SW_E?LIOm~^DJ^}DG~rtNXES2zZ%~kPBn8a$jH+x9o&g>l zO~1ht!2_d*4pg~D+iiMV+HOOu+peLezoDync=^dXY{?|A!?t$vy4(N#YY5j+4`JGdtDi(vQ&6F#=NyyZ(;4wmXnQPKzSQJn1L>=E_pbm7NRb zxL}G`YnS!PDjP5XI|x5Xt+;qBRhA=TWir6gZ<&MUyfyY5OnQr|%=xEl9i24$w}Olx zRoVl6z%~%x)-s~&3rQ-@@mZaI!B4UOW+!$y{OXU}Aj#}Sbk!*8j5*~Lf_|={I%AF& z`&p8ToitXb^ROAw=qHjKgTZ;|XLLFwG{jt2QKwgI=q%Y@JH@oo*}JduNPv9_)`CJck33&iw-4>E!1&ZN*5hF4s!P)_S$x zNO_>pkiyEG%+q*K=<^fNogAFSM=!Xim3tjtn^oG^(!s5Au8 zuK52ab|i|)`855F>*3LT5(Y-o%hm^Iw{n|f5_c<_#kc1Yk&}(2oPT|X)m09WQRTc; zZ4>>G2yA9wGT*|qy*PcG$Fhug<6@Ly{{c-m#K)J|D$8JA#mXp2ALp|y!!M%YV(5Jx zmEq_0QA81H2lFphMky+zfMppmzkQt#o<gkX3%b7Mb$;xo2GF-JXtRj#(_@sU| zWdxKga<9}J*#spVM&Wg4GUvsv&!Ae7@aH_!{;lj1OII@ZtC@_Cn~CsYFK(BJ?_5eJ znS&`vKli3VP~%!sfnUy{-DRE3trTR;#?GbC&y_^REFUB^O#Nieq#&K+z3-!+c0@Y& zjL$3UR7_4Rgm^V67bsinRi{mJNixS#)am)^Dosuks7}uZ#b`xm=`I;a`rKZ#GEJiY zX9RLpM<8g3xtCR)wW(sw)6C{|>VGN}etLl#?-cvAf%qg#Sy}sk>cU2+2~2JNqy-g@ zEeoENSuG(`ThDm`=2yYAtg_-0l~IxH%}veu_D`e_+S|2qz8OUu{M#d`Msv92eP)3+ zettH1gm(K){M_ial2rIGBmIW`^&Ga{OfB{s_$zH4iaHfO%*dE`=a!((4MfJg3KZ!e zwN~N7jC7tq?l$_FgGlFjMTKSsX%2&metONVjeTORwO%v-pf$BgAM!m>B$&`BF!YcSF;CN2#s+emf# zbuBK!8<|Pr8jOs&HyVT9LCm)?X;lMcoeI}rr1Q-0W}u(hs7~i`*Xrt|ZP#F=*Vui? zp0(C`8Jm8Tq{1~g={+3oZ#R|d^m6MLBT0p8Fw!Y;dJnjUxCO*1erHQbDqQ2gXJw_- zF;T2+6Z&QhOc`9+a^}wYzWXNV_zv|q=j*}=)M^pf%)Vsar`T?FpMLzJ8^|HGFGz@= zvu&lsnL{z$>K1*!Q4hX`w$TE3RX_23si>WK6~nFW&X4)`L=b8hONE%{UShdJjc2aK zaH|{hofi~E){`SU)$aWD54B|D+4RY9t9$aj7F9>Cpf%oWTJ}p4XHLfO^xN^x0p2TQ zLu24yQSDxVOGOZ(#xqZ2c&w%2oQ9qchP(YvxYNMc!LoMdZVd1B>1?a+|;qfW+?n&IX zAN8}u{rYSl1YLelxL+=z|`Ki#3llQ6VKN&ghex%E1TGAa$Y2!7OB7W@>X*Uq0h$kuxOFmb!AlliNP>^dK_ zg&ih!xN3)AQYFbko`Q5rjliN`dwHZ&%H$wPGPlY=X11)1xzq66S>^dc0=C}3CvZod131NuN16o`xRTrI3MhR z0h}WbkC@Fg z<|ESiR1LawN|0G_g-f?-;c}hGY`=G=+g=2z=xe5~;M33pjd(;w<*NM0by<|clesIL z7#;~SFOklN-`Pu2(R`usG_xxp_p+-AG!3p`!v8VNr2n&dI#|huD-6KR6oUqMa6QT`w(9kVHJf^ERBxt$0H7AJzBwR_*PSn;qBq+OVN4H_Miy%P>MmroKrnGY= zK|2cVf=SdcyHoRk?NPAMbLvv_YT;TKwy|wxH8eYpTGkHF_98{V?Pep()ZX*Bbu}js06Rw#H9>lKcBQDyGaWNG!XMzh{mr8X3_xn! zB5GJX?&bT0XTg2%jP^wt< zw)(J?7J55qyIC#K1i$$hQ?c-ej&+E`-Inl2X)cdw?umV)ONlk|ASAo zdS}E$nOkfMwfg(?23eG%`OGI8Z?1^EHD_yTMC0|rbWeroxT5*w6Fb<>HH8=iHxXhI z@&8YR82ttW@dENz{iFI0pf6tH;U&wr>g~{8^QqbWf+O6Qwuk`#a+Fv z5^zUvR?>?dG>xRveMG5PS(<9#*(FmTwi-+Uh=`^Df2?DY3@3#*h)I;c3L77p5J^%} z^5ZH6_pl_TlIoUY0hToGSBO=Zl#0hd~!j3Jn5dGOM= zT9S-TLMhA@T&lKugkr@WtxKiEt~zesb7y#VOT0*68Ok>WUZmph7zpXLn_tb%@SK)- z;ak5_VkhvzzmM-JarV{>hUd1#i&R)aKCIPVya*Xj^xe+#pAmbl9g1(xafl7D{FaqY%@i`t7@;cL%#)$y;x=ws1$ z2ko%Y0xxNa7il352Q;s%UGGaB*H*q3cqvQVwO8ZIvUb;YH3mtXy?ceZO&LqP@RP$- zgQ&gmjUSKcxcPl|3@>Mi7io9iDDfhpKSoNNy@iG06)bVrl=lN9?mF1Ny2RP$3&Y(k z@#1mLNZYl>7jJV4s{~E+?0qZ@celh{AC|?Ih=#jfDtkoY?4>LWuWX4IjXc;z;zjFE zM!KWb&R%QBa4$>T^;U(`5_diG;G)FY>sc7?ZH0fd->2gbnpf6w^SxLM_qD`b{xu{> z+~saq9*MITwJ^MzCGOBN4>oY^#FXLCz*8UZY|3Z2Hg~dVqOi}X8?yGo6^9;{wX>}= zh6h;IUfAEKla5#R{YB#J9V!g3VTl(qzB(%LLW6VTC`B_|K4)9uqLw9IcyYlni5H$- z3u|x2MaGU;C-EX98~rQseD`eC9%PBTe(X0z;;y$!;rSx1_WXx!;q@)? z!pHum8^pBnzTYuM;sw^)!W&xQ^_x?Aui<{;EsY}9IcsUMMX(C7#9f9S!_rm5U3x!U zCu?V~>S3yDY>5}nfB6@Q7dF`I1D5T6GQ6oJUhK^ReU>S9yT(*m`{!TV>U(ob+%43DtF_odMCLKx0<-RIpT&R!nG@Ya@i(RKs$z84LyJxt>44MGfWYl*w||Dfk} zu2G|EOPsw%h~e$6@M*3m^~R65s;39+T|x}+V2KwkwNAHt(OgH1%i7rsg&5w+5_dT< zVY{r|WyixJ5@&A}Vt5xT{M#+R>-glCv^WrUXRj7wc$6jX+N2%!iP8<{fA>d;v-b-z zyt@@XyU+_AH%|Ue;_M|u43DY3e++9D2_pfRAz5TSD6mG-bn#5|iI&pXT z`RDbrc9%^t6(r7Hoy71#mW?l7zwSJV7q2{s)|jGpFPp20A(nX21$h=oyy%2ur6lg% z&{p5APTXDIXFDTtmpd)%NSwXBi8X$NW$mtCN2E#IHT9{USyk1(e%-=t(vQeR!$dyg zx@Vqw$gC{!ldRp(%U0u!mbJUQ8F5b5?sBKlR*AD0NU_EzTjH((v42V2wOsMp5)W8v ztM<{Bc!}W`ib%XfV(eLo*U;V(V$t_8mUz)T_4Z2K_3vsQBwkBmB^x7*`(t}k!^H9xPfM%z=O_GYDRHU4W$+~xIc+Je*? zfBQR=#6yeO!sl7xH&RdN`00wl5^rG>|HcYG{Wa}ZX|?ZMN}Fk-@!=J0)xOXYcg=Hh zvW~y)sXJ{eUt9RMR(OeW-%8vy*BO1hw`pt(Ut)>7JZU~!;x5-5$H>OF)1Dr-u={tG zc+t9ro=Uu^d*X13M~<*n`*JHhy0%_>(Xj9d67Lja3twr4xB68NRz-t8R*`sDn;S2y zt?=X$#r4Mbx}YzGqHRu*Ypw7C@KZU%{_`s~U^TnPbhOp@^;US(sOb_f>UT;{jpA%Z z+V8FK_65r8c!PYCWbM5l+p2w&6<)_ej)5gQ;6d@)=WC(4snLIy3bKj zSO0;ySP|l~C&YD{*l+HExJ|aZyBOj@W7_Y=uDQ_@DUY!N3N==_XFhAd%^dc{(DAhN z=d)<@O8aN?7`wDQcce2W@lY$iyR=no|LCY5Wkb3*rXxpGI;fp3o$t_mN8_qu5JVX?KBYnde@CR`oqgsY#CeI)NI39*;z-4lo39YT+jcf+2^yVgSNJcZvK z#okx)j@u-%L2R#p-<=4>)iyLO=`?JdyqOB!v>!j7hl!HTqP(Qv!|=O}^miMmyzi;_ zE0MTbQ3O|Mf8c6q6I}g?Lz(0y)V{@bBo5(sf9=E7w+J}Ni;k1%iQnCWPLo$=$JMom zP^Y+wZE}75ZsE`P-9!A&)bl4egj;=KFOlqdd@~nut&IlYfJyVHxOK z4NDt4cLF_JM^8hAJJ4dA&S3ONf5*S(h#6vf%8qMr6r=aT^cU5{BqYSdM|(=gi;o)A zw|i`2bpM{7^`rXWYjT^3U$nq468iUv>MQR3wB>-N==AjvdL7-HT9<}uJfKfgYh;B+ zuWaVN7)njwkG^-#ie0g&?XSPcju73{jLmEsj2!ioJoTQ5_<16hr`=&JwW7{? z{Ohz&d}71o=?~PILASO0k!RQi5$Lu&tvD(5F4UxWEjBx*_59}@j^^#e!M^94u=0{* zhRdK}v!7TuVoA?ND5{QVMD-rek)!#vE!M!A@14w;<(z5Hg65?_RC;j z4QKm*8E`XMZ&R=D5W6c8S#OOI^PNVr)wF`Fb29M)NHN0e94hduB-u*XHfa|d6oQ@F z>~zFn7h7{4LWfo-Tgllb4W5?<<1S@8aVLc5*}1-wRM?w6szMINCn#DEY5#0aP-SGC z7>v6qJtGG7?-|uSx=}(r-e6OF6jfSX( z`N~-J6+~cbh=4f|H7=0AC^yzdATZW;gP`|b8S4^JhrME{N`Ye&puFCstt#2aXMI># z+PDr$tX*3IE3H5DBig=`CXr7M>nep>p9UE(s{Gsu6RJis{cs0iH}+W#>q=`{HbYS& zLR4Dx5EFE!jessvc4m_{EBz^(iHFG*trA7$HjlI_)fZkuOZtdTRh+IJD`X`+R=V>v zCqUd~2tB6l`I?$oFryxIZ!rdGdj~8=RtY|}3V4F3w{Gn>5@*e3IQc8ymyt=JtaR;S z49cS&KtrVi9(41cx;gc_>dw299wZm@@u$^_fo*dz80+nq<>8WQCJzp}!?Zjxj}KZ$ z>lZ_nuGi0tPqLzAcbAfscXTGuz0l42R5&uUta$5JYr)vjfvcg)lt6s32ChcQ$c zbqr^&TEz+tQg{`PR9QVfBcka=z|lR#BRwI}1Mz}6wK2`{dS?k)b{TcqTEbY?yE;l_ zP1HwG%FZg%OL0k^L9{l;&4q~l4WjuPh-Qx|Sj<`Vi@H>N{>ddhd(5a4?Sa{F4)o}xivF1XEiEl{wLwtJ+V(uQg zssQmdC9a{1NFWzAP96m@X(vQDJj&Rz6U3A{5L2f@%%A~0?Q4kXZ6Lm)X=%n)h?#IA zR5&LQqV+`*pFy;WfS6wcVjgA9Eh0%!GTRcGGPOVfrk1Nnw1o)A z-?08f(TYB36#~&3sxY;#4iSb4)D%Wn?GRZ^k(4I4hc!&? z*V6Cqq4JGClkmik9k!5w51S%a(-oR)io8#vCq&1~B!-c21wnUP8@CL^kDb=zY8BSx z#Fh+hZMn^fG_9imTPh=eutBVqk2LnOvS46Fq)U^qno zZ4mulK`d+qv7kJ}H{`Sn$OYy@yT)No5JUYT2IU~}C&Z905QE983m-#7%!CMsHjM4^ zL9~S#O}W^#Rd>!V1akY_5 zht*q1YMd*L>|guhu^OjRMaZBgE0S>5)Y-ZVet^qrBnyQZ)MU;jtZmiL4KtDURZ6qk3@R>* zQrL>kIDsQ8(5&}{8WGr|Tr){3Y{ke*A6&6+Nl&LXyxA*Bo3@I!dL>+q>b1#9aF>q3 zP~*#muO+Uq6{|R)!|Upj3~10cmn0RoGLv>O4faJt)9~7)it$a zxn%ee?^QpB|EHyI&ZXj7`-ep%icJ4OzSp;it+fw5RR)h#*jUsUVjd4c<>`yk>|tAj zAt+aG-1wN)!TTU+8XTf7fwOLH7d?&4+Th()5+132nPK3rlDSC-L@FGD`E!*cyB>m^ zNOe~E<@|0*GKa|E&*pB{bV*19`JBj_1^*}_Nrf-4Is@xp-!93(+6xLuQsE0`(k|xE zx>xXp2vlhov%l7FlKk|z4f38{4n`3HE68mJg1V+5g-zKSzRvO zMX_;fm8Z_S^aP{TL2R(hI{UeH{AMGdOI-^!lLw{OPIdG#>mD|yRgt(uAJ>>>Qg&kQ zQrX))nhaI;_r|EuUIbKS*L}=?8mX{1BWvagtqc-LGVEk*Nh<7ZCJjL){>=`1=cCpJebyC8l~$+1-v52G zM1R+j^=65B=%(k~84Q{WeH71!z@TD6vKYYn9GbGz>b{ODKffCed_48G$`4;5HPpPD zS(V{d_jS}P&|xL;r-avd6VOoN%(M)*y00TJ;9OCO2bQjk9Y%-%Hg1_^9OnT8djtML#+mO%{e3Nh#(5_3q3NBr(-oZB2*c`#|3l^oQQs zef+xl%u50%%iZ;wB`f|7P~>bib0!s}YQN1`t(t>a|8E6}@L<`>>VuK-Q$zwr`RMWoO!ZHs4{I6zhRBB*?L# zVe<5UHV+5%CnWWk+Bc8x5f>GK*NsP)6&p?i%C?Ff)TdkDsJM7?U*_K2=3-cBH?A-v zHVhtwIHNghgXyI%Q8#FeFx9a!vKb!-O{2frKtj6_g_RcCe@1#2ZluCp7(Us7pI zovgI2RN4$GNO+xgUkWR&eNV4ZD6J}$)^2oaS^7&VjX4-AZ9A2QIG?hUTDeoZO@%pK z`k$Hyc#ZCLhM?{A{M68vW1C5y})wGDKiswk|zz4xT5DjNSGB7ie=PbQT4+vMh}>T3iO{SbS~Hm$!)KW=TC_nIK6UJ5YUkmM{>A&t zd@1tJm)Ajti7IbQza>fLOBqP>HiFg67(Sun6BHFlMTPg+cwZL9Y?z+Km^~&uc~uCQ z8iE;7(qf5f?y+oxAZa<0UOUzCtGT$y%k8KMp;TPt`RzzaQg)un#O~6A+|(XaUz`r& zxG{0yp#E9hzCI+&&17ply4j%(D9iZHp*-#EaVPoQPWGi7k^hz|j2_blk|FZd zxp`T4nSIU20<2A7__lXrsoX1Ba+wZ}&yYIUQ<`k(U{^u3h{*rqGF$2(6Vay1@YM@M zB+H}`B2-__x^mm#yG{~pDp&fGuGi~kC+bj)9`?4UwVt6v;V;i+U8R5e!IACjf-{8w zG4(f6DaJXE^1NO)3OkgF#A4W41$QHeF)0!Ni4rb~)aHk{{W@2R6rG?*s6l=Ax z-#mv&Qeh@DX_uIM9?4(!WK?OFIINS1_~aT2Gl?MbuX)D`6OVxgL0bB`#3z+xb6cy!=q#368e@6OGKRt15=&5=*aX1hMDp2cVdu=;Tx6rI@U4bVK7724?VT# z^7WM0yqjR<7YlnV!AXOI7=#PEKBH7`7xtmDFnrsWuHlO+N21S$_9f^gAR4Lg3pRW^ zt_ckQiT!)LP-^-52uUjZf{_uuiZlfIh{%YZ9coKb;TMbyAJz>Svi3Um@WHMLl2rJG znY8Qo{f%w#i&Ru;*Kh4p#8$1J3coOuhNwb0pF#C$1kG! zVh}D2e}~yBQ!|;}+R)y0fIS*9f*R32|K~^xGc^+^OfR<}8g=n2C`Q z-AW_c+2bGzW@47S9w(}OB@{T3N+ zOHyGbF_cQ0hwqR7-?5_p_HTYlAU2$v4{ICOw?_iPWTvCola1Xev6xltaa0I58B;{N z%g)BwwOT2*pWWdqKoM!$PoIlyBV`xn|12cRQFG~Qs_dtWDrc@4Ey+)NrgbAG|MM6{ zVJ8Ltl^Pu@i&BIEq4&CGz5kzKQ~!Fr*r@(JhD7y`PQTx@Y{S8LtylUB-aesv?eS7A zY#tkf_+>vs=;5cgAB0h|r20c|Hv%+?UjO_sk$N4PHPxRwUK8X@QRRuN{U!NdRR7b@ zSi{>JMI&~+yC#duO!dwGv+DK7Tr5@JBC0d^7P{#^N5JP6G2e`IiA4~{m05p8O>te&aiUEfvrZ~0r)k61H+3vB#m^)l3Ajk zotpv@xdW;ZxA!>u_8w!LfnLfGiiiSO=Q+rIee?*Q%lEP+KUEG z3I)Pf^qcpg6LH`D9CS3vv=<@?(^FE)Vu)1w-E!=)5aM_hh*RYt&Xj~WN9A3`8Z7Bz zX^6`eA+FOF)6H!Vw--X(#Y~&@fL2BB2r5R;QV$M3i@Qn!a7t4kS0Ge`0$T#Y1Mj_!`Digh5$EP|*Ij8nkJ zTk*lNZ*cVxYrdq_;~`dH`ILN@DqV-_lW${{nDo65u5KZvOa3zu;%0CBZqsdC-53jT z`Z`1!)w`_)uC8MwCT)ezlTW2VoP-IIPqf4DcA^Ez$8czwv}ZJ~j$)ykw0}LWj) z&ognguQfgzV<5i$ z2(kDee)kvDnf$FM#G<1l$QSQHr^zdwaCPlI)H%5p31~NY;XeHCA#`Bs3C!qL$86n7 z-MaLEo4Jv7E7iH6eWFhi=4fPfQs-W`@qU2r1iHIVfL&5{^+7eZo*gxM)YaUA)w?4X zrgsgmw7lvriQ9U1)aX&q3jaRhsgBQEI#uGfo*gxMG_b_oD?j{I;_ijtMM&J%v!h0j zU`xDG(hA%lliv84uTmw>hL}Dij2?|NTpQOEr>u2ZK71j{6Gm`%O06u*v!zQ@wABkz zDlK+IXiv9cQrS#(X^OUbK}w}r{rl*6|92QPnk8-N(i9yndSlK_4ep;^+oj`ACjKOG zTe>tw$7neHQ9Lfi*^Ix99mNb!{l!Q3?Ge@A)^mThG;WGce~k+KJvxqRLezm7@MG&= zapk4$|A-vPP&yX#Y5H@2t|bstwCDaXVYL6k(>lUJ3%RVhb^(r@U4g%B08 zLzK@3Q7$+A3ASlXWj})`^$eoIV;Z62@5bTB>KNxH|H2UNcOcyEK~$n)T9Jg0Jw#=~ zyfGu0JiwZ~u$yM`#B64&isDVan9WRnpF>o`El#Eyeh`5pAOa9+Ow}n`&}&zcS7M${ zUWrkXyz&x>10)_ntkPD`LKhyUhfAP~NE*=|!B*_Mff~;I@aA!$YcJ+BGNj63lq{rAtg(T^b z8Y==F=~m^S<|t!rrWap6KvC66Wo{4WU674Xn28PX3M;y92I)s+g+-gENK#=YMpk~_ z;s!|JQOsW1~GD;I8mNRpL5 z>xF4oBNb*6W*jS{n4gU();&rKU0BFz7eR@M@#)_MP&T4_|LEwxYFmopXPXC$$A(I) z(YlUg1&<}?EuLXDPu1BhZ>n*x++r)h1_ZiSTzZVUwK7ZN)6;WwE|8sw^mJcvS&|C# zvF#y`bJN>O(&KDklq9n-%8o`H)ycySZ6&ENAFH!+kBmWi^N_jy(*Lm9uYuV;~bddC&YW~9f-ojE1x z@l(HK*?fhvIeFl_$vXLC2h3%fYbcb>$jbHZV{M|fwzA*Ue3DcsTR8IyIab7%BUn9R zn?6>wd0xJ2;uGUz3+A~xr66iPgs6=S*i;MZHr4dPOke#JgnuKt$_wEK#Tct?gQ$wN zi7_w&B48FojdLV0gBoi;CQ$*RRyT;cMAX@i^6DbVGu3s*kM(y#)WiI0tlt~c`UOTHGTOT>M6B-JmI$Qtzai1jF zD`OR;=e4LDs8gJScwX4^t0dXmBNe2_*h;xU!lsyWk|&gxBzt+Hf(%#{hAnctt3(DY zm@rS0ikyMzw#R^vIN@?|BeF+a+DS>W7dk2GjLNxil_a}|IU@vQzQc0g~)g zuyJ!qve!5%$j*fyWAUZ6wsZc9*hSF1kG;W3MS28m)5)^mA`ECGdwG+BtkSJI=~kR) zSLrkgYXXf_%oI$wo)^a+mZay|WrroHm?;?PWf((iR8gnr`#-8lQZZ9-GQOE!r&o{V zn$!PJQ&z zejbsXE;t3tIu*f?k)AC^ZbCl?6Y1G->{dxCf*~WTEFPB)Bus^1I3o^Iqo!L$Fl3~6 zK(w#kv+ou`pP;L z!H|(%-zMdeWY@>#drDFf3>n!ecS(4GR%gc#CG^BW5eymGIY(NeBs;yO*LP{URRlv$ z7C(1ZlAZIt)2*TihK#HdSmf3H}Iu*f?k)Ef+?n~11P{m4;R0Km#zFCl_ zlTSu0m82pVGSaJy%XLY5MSM6bNkuSxN}nGv9|<7!vR?*QK<#B|I#0rX+CQ83zw0N8 ziT$H{M)!}#%d$LM=$Gbuo)rOA)cyqdXlHCT89OzA=z_i)J0q_%#azZ!B>uz{vm7FJ z9f>9+Xag#i_M_rl=;{_-jU|D!*wm{lUA>|!ce?rsqIVJc@j8hG^y3i{GfBXMjOFNq zcoT^b5?G{|`eJot>RW<-L>^@7dx*qW5DESy3?x>N=m(KVZAtipt|*I7#O!YBHHsihV8Vo*7^TVw)QZX?xGOS1YhiK?KBEzDVgi2B| zF)^}!Jr8UW+V>{1eqDbLNh+onGig`Vv70Bp9udig!LF+PVhj#0~b zIi*pZgTwkzCMi5YaeIilPJ?gf?{c9!tSbx#-;Sp+d^J)LJQ?Y|uM=(h3etPegsPHM z1W!)BtT0X||L&rDydroq(x+bnZYI&{^yxbRi&?F;ir~pe@5N>OBv=LXNeMQ`%!IWM*)xjRx zKUbn@Ad182N6h$Q?rQoNi}WN#%wW?`P(Y=s@J_LY4DvByV?rYpF@uq3_T9aOI$?9f zjNL_ANm3Cr7#W^wq~zx{k>RGPG|h_EDq@D2wC{E|A5yjKcL3UVOAD?iNkz;slLqg5 zt-7GjrBtW)&1tmy6m=?M1|xlfvmyN3?IqGD=q2rI2~rU=7#Y^AfDv2 zB4#kMzJLCBkiCek@AJC0Bo#5kOxpSWL$CJBhBU@t=liyLQAsLdhM6=BuDJmb&I!o~ zVusHgY-MTvRKyHM`nH)_3)Sr)(zkgbqyZYKh#8FZ-rfw;tVViob)lUap<6}F;N;`_ z@Y{6qe)T+(RKyHM`b7UqQ@UuaPv^6(C8>xRjP#!8-cgd?GcRwDq#|aprxa-$w-U6I zhAa*F@Tao0it;rc`geQcE~Mxl=0t5k*@ivh@XVq*p|E;J|6JKzvoKs|qjtl&y!Vm! zXrYpY2>pmUWp`5q0{)o0A*jyemheciyb5y9gN;cIXK{kz%`NdW2kwQg!x3?*MnrKqcY(ipqQk<`z4y;i-Y;NvL>3s<4!Mms#RmFr z!6GbWH~iej05h-50vp^v0%jjo9O!>Wduq%^29?Y5@Y8Mdet5K9T>{+(d3sZ2vr(C? zNM>r2S9r8JakTGp_jYx}l9QnAyIip!CvjV`#MCCghSMKuZ=n~8a*vqy0ZqW9i6g<_ zDk-uITVvAHhHfp%@MZ(IC09;K+->Hv5fW$HPP*w#Z7NveRVUZQ;?nMCs=ex%H)ABu zrfY_KTjD--iXN7@Pe67ts7Qad29>FeuN6N2RY4semD*j_Zfj7P+ElZ|ee>AYm$sKXqb4YWwo*G4gVnX3op z&gl%*>?9WmIC$n1{SlSHT%DECkv`sRS;p`0|6EGjA?EcZR47Zpxnk_{cZWaC%izey@8w0G2fmFtJ%QC7a z)U1Xw_EI;hI+kcH+rdTyE5k$|@3bt#r?hv1EW`W3b`d$K9c)~%GQ_aiZB<5x+Y4nG zKE=a^%XY94!pabfmc3SG+|4sVFJoyB+@YbFm5miv2KJp(cJH?=!~0`QO<9Kbkw*_@ z8En+BGRD)#2edNG8)s4dO-(O2n&RHRbOuzDdWyT7%>eL`+v13<%l{4U;>II}6ktzLlRGh^Nu z9UoEmrNo&z8LoYElR39C_!fLa(Oop&*HGh`#F-@-ZuP<(pE8SRd<)#?b5F5rLTMy3 zBEwgvD^TbT1Il2XmR9b8BTQ|lAYi9G9VA(%rMgq3>^^EXLSWIx0RTlJ9Qb*y3*wWk zOzt_YlGQ3XI-w-^CX&^P$vEyv*$wC9$!dnMNuRS9D7bqJ9|61u;qK)&`bwOIn+&+Q z3vR>O{UAxV0mWBJk_8zBS#?-!7mz@eLRvXNYba`4a{0vXPNV< z$Ue2U>tytva*||zry^fm4A#k~lW>%z)yZ5=MdrNXsFT^eMQoyeGH=U3nghlExf@hd z1`73V5T9%7$42#yiDpwQiys*qgvRnru&QYaRyCT}`hM8dgj7MphZ&B!yU4s>iZR5d zSRdaxU&%7O|D+dBYh^GKvNC?7k6&ArF=Qh4$kO*qzUU(khNvCPn5>NRRK{DYGCuq^ zSubPGFM23oW@TlFDfGQo1{FtNWGEg)$kHvm<}`-|ZRQ26A{>*Z?Ec4G5q>tc(Pk6z z2??=7gYkyt2U_v$9f=^iJ^uuWE#@KWvv%l@=p&^>2A`#ym9Ip!jB5^FYw2v#krD_8 zuN7B2uTtdxsk7b72Ew3a!6g7n!`TkogOhLf`-$*h`zG_Me? zmA&{q!l5J90Z{h54L4;`3T3mgRL$kZQZ!%Kw_5(;Z6&EtHY0t09yeB!K09Y#k)%S| zjP(7|Wr!qw3lC3_q(a%8oO`yfPEM=aTapT8Kc&y}$Z_VGrCa5@4~!d(FPjsOfhsH^ zieY!5$$FM zWVp6OVzv98&h?#+AEjWU;mnE**H%Xi_qn;`w8VX`jq#T_vlhd()e$>dwH`c2=Ff!{ zkW9e}`_IP8^0F{^T0F((gl70^)!WUKq)jUvrW>*|%!NLW14m2T=UM}2iQBZo;l`G@ zZ}SryB<>rqff8A@6%Jb+w)h@8Nt;~4Ykhwhzfs~gt#CN~u!a7pA{rtluK#a9Ve5vc zEoKuPPCto3sfXz{i#^qFb!aQZal}O9vCa@jv8ivQ?@KfuEsGiIDu!V4)#doH-C2l^ zBOyBc01;Un1$;*{p3_{q+DliM+>PDo({9fp;;>s`j74T)?2UzsQQR4n?H>Nl;RQrC zRB3X&N@6rVU4ajhueK*agCunViFov6)B*hNq5DkNK`4#uL3@+bzhRUyfOKryKpBq zto-(-+?BZB4#!mzx8;q=7b{!h{&{<1t68hvKl@92iQ9?^$rrt>@Ort<>Uhnudbe$P zWAa6-{bIj}oDU`L*R;ZBS-Y*6kbE(Hzc`Z#waSM1h%t_|rg5mUBFAxA-ltkV< z(Gp?!>VGG}JvIB;w!##l2R6g`{n!j!Wa)mhX!>sww`~Q=Av1&&f2X1sb^LLOJ`%TW zh3Qs!Km%-CX|?;i9@-;u+g6yV;q*uJth0y-4gRl5Rz9E>5NcWeWfvL`BQ zgRtW{?2&6R4m{PN3uG_oA^+k0G>ZB(uDN^siO3wIuxm*Bq84 zGrEc#xw@534tu&ylFZ%;(r?~sY)_`QcFu)Ol4N$vK&r=@q50OHhoI~@q3pFk(ZO71 z%4UNlpmpDVXoRqDK;66JB&kp~BmExrT`Wnz8wc7+QlV@{`umR_B}speE+X?H*H9>% zlY?is)ybG4wyZ5s4+Mmg#JYR7?p8w=r4IT4X%i(bkHwmHxF(2rU&Q& zM280b<_$30KoYvMrUY(nG78F?juO-t>8R(^r}E=TsVY^v~0J3;wzJEx4$F3@qJ6d~K~-_eV#CEBebt=fHHIYl+0 zZ~xG8$bGbSGpA?m#=(eb&}-K2Aun#~?H)9$i)=TeRqg)q;aa`jo7ZEsYwcE%mhG-y zWEL&!wRX=QPupk0RoReZ?Z!IBG)TMqIzL(1|6Kdpdb`i;TqoPjXhplL=bPgq+g&|Z zO(dIIyH%uRyZuWon<(4uw=Ups*={zpS-X)Sn+Cl%>)Y?oYFJ-ue&Uz5@ri6VqZRG; zFZ|mW*>3-WcacJB?N*UmyEBXJw|_>o)b2}eek?a~cdJ;zo5G@HK>UlDP=N?f0nuHD zNm4P?80l~KV!R~%-WS>~Nrkg>vT0A+3=wtuH#jO{JB<~EyK!>b`|>(Dc1fJ9Q(Os@W;mSSZNu@HKHHwAbJcmyJLV$_HFQi0@R@ZXVVh2Nqm8%qG8y) zGS)=Hj1ymxpvB;~^t-vc=nA{;#;@O?b)gGLU~|woc?85HnAsTa3emCy#FSbPQ!%d? zXM6!M4cVe`dMk*p&e88KL(E(RF&l&0I17e0eq9-&4Xq95Kx@X<=SdWRXodXJI6nYl z9^Bp3q8*9c5G~PBQwtPeYPo_$Ylv|CovGz>x;jPzYe-YX9un0dTG8)XVKrxJja
    -uh_*z)OxM3p1`Uep4Yan`)I{Ugo^ofT^SVceH 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 z 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

    n;x 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

    0GuzYc1( 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

    WSci@RF%N*~Pk8NOC9=>o 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 `$? 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 literal 0 HcmV?d00001 diff --git a/tools/preload/20090811.compiled b/tools/preload/20090811.compiled new file mode 100644 index 0000000000000000000000000000000000000000..6dbeca094df5c380c6d962c76c4266b9a27ab0d8 GIT binary patch literal 15943336 zcmb@Pb(|E()5b@3?+)F)!!?IH1b2d4Ah-oR;BYwPaMwTr1P}hh-Gc@T1PMWc1W9lY z5HwhTkhh*{cD9e*+1@|i`+T;!W9Hk{(^6ga%=P9mU7Om}tD5G*f7R;{)ib&+|4(%-akr@0j(wu5 zMn`oQRD}4CxLmmSPl>Fig~!Bpi0&EpJU9QJbXvdebP)!Y%N)qy(88T!Y*pOUvaWokxcEj~K7a#Wkxn4Z)Vu^oCw z_v#SSrES0NpOr;LpK5)>G!4I|uM?|fXcN;lZ&bIoJ!3ky&D$%wXP@Yvd8>7cjqVm( zH@a6$7y1*OUc)<7r~*HR7FJC&yLP1BHoJC-{Su=UEr#?u}UOQ`4(yj$Sk`xa0M{4!V-~ z1jVb>J-R2ijxUa{FSNRrFuGgY`W?GQe-YI!hNg$JW4E@^{b*A3ijC?SYaO8WiVNrK z#Y~s_i!Lqn!#s}FLTc2eDNX+s(yMptnC_m-b;S1XPS@tHVYMQ2efl51GHOcn$p6tS zD9A0Vm18P8Bq6ogfx4vTR@01*ZL4XCV?39_bDq{#MNIXr;xl7X$^w4z=sa*i6=Rup&NO-v$ zdpxu@eZZ$UoR$wKrT-qQX`w5v8obR8m)Ah|4l&(?!@;!~;@VJ8s#q<&6wUEG)@+V$ zTgJMS(3Lnd>?O`j?`@EFa^69zM(0ND{UFCz_V>L&$FRIm->|O{@PiF|bXDeN{ z?0({77l)*=)6JGsEb_mlx0z%Joj;L!XNpf1v05^Z^ZBqy@Mb{K2=PfX{Ts)p`FQdI)xt{aZHM%2mYgpL(m&b2s^ysxe_(kJq(2AE9v$BcC2`obSAq$Ubc=5d=r1=^;7KqT^^lcBViI3s;cN@SI08HoyIGWV%MFjNJF_X0gVjQ^DbUQ^p5eMj|Un{_gcvB*Ld$1}+ngGs!K#%MbKg}Lc5PLo*nAgz11 z?-|`are~~mqU=Rbp?4DN(=j3S1K#d3y5GNoy7_0?H~VltPvY8Eb-t7M^wZ;XzL>;& z9vlb5li166+KNLZywF$z*1oX|Q zPq43%AJTWmw|{<^7%}7B*Oq|cDeJZ7J7x1_DMO5yvZ+5k1BNG_mx%8rbS{yT`o2f?ZBeLa|M)8DEOKPG zOctr0{f7osu*j{;vsk2h_OB>PQ~X0~=MDeeBK>!nJRKI69A%L+-rZx8y9w)N3w6~X z{wwafamnkZYu8@ZDfTPI7=#sLEay{&+mEh1pKOSq@eA3(@QR7Cs`FhjM?*g&K&+T; z{W!Ma72{>%%nh$K?OY-FYq4TZjpqm?04aBoo&c^zteA_x{ERN*6{EDN4@}sUNU>s^ z-_Q3$`mUH3OTHtDN&|*hjF++L6}?KcNFqH>zJP-K zu)utl*|*~+Q7vMb4K2-`!;8hnKCE=}4voGi^$^12(@WDg*Gt7mXyuudMH#~auF_xD z<{&5mle^{`3>x%|gI7O7sPZ>M}>k$DksVEOOs(IW5wE2g{T9exueFdGRg>cVBS_V}0)VG!*|P?r^}NuhS*Cp#`qfd`ro=)&8d??%FIO*P zGo`hAKf%3-g?@XAccJ?y<-Us8J%C8D&>uJ9@!`4bpOm&^ed-Urh!hJw#ihe&?MI~V zLhn~DH8EnLr|VS>3@>!AHQ$9^dfE@fh=rcDMg=gu(7lXJujs8_FD6nf^h!h7S^&~+ zp|46hjA{`JeOB#Pu+Ix!ZGUGiZ0ce^-7t%D+5n_HD(AOhEQNPC{&*g2@*20XiQ`kf zlTZKe^Am(8q?e|@NK}xIP&1sfX^!}bxh3+&+y4>7D?`6Nq$4WcfI{tDF4z3ZA`ecu zXpu_iV&t5S5P)qO$?`6;NTqWz;y*#>iq=xgEmG-R4Aa@yA|Ga4Xpu_iVx+G5#6ud6 z8yv245BVP&X;6()H4wjw>&)7*Iosr}hg&*M!{bdQJu^C1OD=~UQC*^Xc5Or2VQ1!0 zm3{Q#jD}Nk{^K28W6_?ngovN-P83HA*eUI`s`GV9=V#p_KscqJrrrX>PRYx78jC}c zgP=%zGm*k6T}gjhK}tQPC#a6?MmVLrcZz~!*P^tkZ(W{=Na2){6k6+t^mR&e(-tO1 zIHlApLcp+7@>=tCO0_DlAx1c*94SVCVb|hiY@$xQ_!YMUvonArOIi+Lc{-Iig zQ`%K}8ERqIqPBmz=5Qi~Q#$?KMg=L4%0F8WO$w*HA`uf64=V}upd|~^+lfbYq^jh=vg%jswCPw(eST|4GDgeEVU9apa zy@E*L3ulb}9#8<%#uplCa~`2u*cTchd$Xe!_JvCOMxiJyRrZBO7V{?sDUFKJ^d;g4 z_Ju~Riw=-qp-|iG8-v)4eWB4RTN4E-+njoSDv`n$j+px!NcM$lo4dX|NF?U8X3QMQ zo;v`U8#Oiq|s`3SsdYnqp-0(#M$vnvw`=dT$Viw&oWbvJ5PdQl_A zh)oumxBxa-L8`rI`%L{UvU#(l7OD246^k6Q$P#yESftvEmM#HVM_gyY`!N=&_M-Ks zt+UALJ2zXTjTeosaEkb=RbDX zDD+HLbv|BOyE-bC0O7TdEaWT!URz>p{FC+|`vxLK1bZi5Yl7I{+mKR6=_%{IBa*$g z_OwU`knp`Wq`XtiY(0)h;kDDg!}R@_^!3_YXBX2^@p4*=5HY zi&XCvGlwpY3* z4GUwECldA;nr8Y8{wwYt6Dg^;p1brAZ}ax<&d<99lO*Ufu-(MD!PzxG9IN=5@GWm0 zyxp|0n&7+L{4xn{LToo%BlspcZ#Q1X#<6M_!V&6=?dDX{f9T4^cH^Iv`b^hHz*UIt z=JN6dAbGp-Ps-cP(9&gz6x)sSd%nVtNZ;+I?WVfKi0vjp^-QqF+l|+n?{*ejn%h>daUSnVnBE@!-cU?kQ3qaa!H#6SBu?fLsWVei{g*OegeY#UZBzZ9! z)OqojDM)!#4*fldAhF%-&W&{^wi~t0KmHj=q}XnbW@hz)H!A<6Z1Yh#;yT`L^qZ%9 z!zOPU{z+*jAax>=mzDms9?S(IC7VXZ^;?M)+fAyLV?gqDf^5-2KC^(J0!Z=!l{- z3fvFVIq2_!-{2c`^t|2|MSm1Dhll8cQ4B@Fnb1i5HX229b|<16wjO}Skc3{E(W}gT zK0=dEKSHbYrnH6f^Jsb=iCnefG(pLjT+j)5xIUH&DcSN_%Et0`xLeCHwXr1AEsr(r zInAL_(xWmTtf9{FlF12mms$8Xy?@2w2{5VNd++@4t3}=z_s}BMd++|M-&^F~tf3aE z-g|df%W082zU9&2)~fg3ldTR|oeDEOWDtArJ_DMbXzlJF+gYUlwIQ#ng9U%I$o(C7l271?f?b=o zHGMMw6?fPE#Luox4{*kIqepq8V|#bE5c?capX{?~cki`|nj(JYKIA39oAx5BI^RwE zYNE0Ph)w%&O$?LRdcBOz_C&W{;Y!4&eLJ;x)AmnFT}EnR6(Yr^{pdzZ*yOF(KPfps z{hP*{h!mT4^1eCzkUlG2@78}iF=EqBGlOsb^QP^!=DTSZbzzZ;O*?Z8vH`L6dKsHu z(HpIRJ|;HpQp@ToNV`q@e`oJfEn?IDb{vliZ`x}6>sO;+#iqTq3tY9>?){VUs2qO` zDMxJD2mZ%5ZF%eUPs*cmE#=QdicR~}%Fkgl04dx2`_tw`icR~^0pmgPrmeJTBwo3d zNU>?Ziuz1JN;Zugg%%SjHtoo!D?whRLicY|CQF{hY!|y#z8#YRagOMplzPah+8!%Y zY}%it;Egc=Dcfv1^fMyGrd_A(6419KEvDKFr1Y% z0zRwQ*wSJNG2~Op

    R!HwB4_vm!Ze;Vk`E$?(q)yAm$~g}qrh!}4z!ty$=eeHKb} zoNsoY>PW#2Ig#)OK7!?TmKxSNV3@LZUKu(sC6l{OL3q-Cqe2Q(+4S)zQYqgL&*auEQXOsl`5mGv(L=Wz zAbE#^vkh zJ)|LS0rE_+iNxiZaHR=cp6H>A$yupKYi*W+Ox`Vk?L?3_`!(a%^5jLFl9jgOT>Mwu zI3=f_IEB@Pu2Cd0RPNc4?nBn2HzakWw}4TN?2qk37Bd$@7V|BiDqO*!6t}5W;%8y{ zj;Mo&K-`5vV|+uF>lcR8|BI02SeI*HSZDAu@;Z`SqV`vcG(?J!<*qYEg+ms#{T=uI zN2CZ@)~|LbNO@Gw)oDYd2w9Gedk^v}Ds;8Yd)M+1DMFS%61WtkZ1df#eME|o zAUR}F+N3*s>xtwAW@sgfDM-ntk^hr|M2e6l`)&@+IArl}Qzk1^MSvyNTG1sL&^a7< z_$Q^cV$`k+y;g)QRg8EFQnuM{O+_L_$kOZ<)~5(r)HZwkUY$r0vUG|@-v%P3kmWf} zeTm{V3f72ugT)o3nFCkGI3U<6|xwqCBwhon?jX{kmX=Oj>_G?C2y+=um$39#;EWW(NWG}23kuN8)87IDtG+Z^@rPUF844z>RB;%2HriwMX4 zGR-t+9p@uh;?K#iy$Bd4z3y_D&Pxr_c#*R2`}O|EQcrD#Ij4uFp4nNJq9Qyn1+4)L~NPD^D-m*9kOhuD^klM{ZIQiq&~?a)9y{hBu{(t0D5V9)#bn9 z23RTN=eqjDP#i^12y`J8h;T(TrPuWlfW#v<)C&5U+ou8QKs05Pv8wZprml|aM`w#@ z>S$;MFo>okMs^m`4x!!OIG9KgP2G8QN!<|mr^6Ox9Art(zfxD+vw#MtzT9u@ODks_L^ z(hNH;M^iSWT{N{~-8HI3L{l?={|U7qnzE@y8Wnx}+rmVOXlh+0K!HekRL-{khe#1k z9i1}`B%-MxY~D@!kVp|t{hoHIf|PB(S-g!%5luab#$@GaN^R3fTDAm{yqfg)&G|YJ zhuM&lO(WlqX+(->DqAC-4~V9MAj{pr1|y=WB4tJp#L<)uDUFKp#a}at6wy@WB=Z%d z+}hTTJVc6Us?otIAgkH8R<_wSKcYqvO-1kiLqSSmKqb`A)156r&@+%y8|)72;J11x z;9!hKD4L*XilRA+mMEf7v_Zl9X?ylTqVInEW)-zeL{ozYkD+ronv(j_XB8Vi41P)s z`BHK@<7U1BgP=xY;;cw-G$r0LAPk=viAqE?b)ZtipbQ@^H-H!sO&$K~gu<}YjbbAg zhA#~&N|o@gWSm)yO^`EwyVgs6b@MT{6_K}JD||~qN;4-;2xb(@MI;9`b~bUmwAZjX zpm9zzjD%S;V{&EYBOf9-SRAv-BGnPx<_Wbtq`BeDA`clv1UD@DhD8p}gpHnO zg07C>2JSv$k^LO$EK(i8jm)3LB8T?H#1l5v5!{F!k1TS?IL-?h_l8fhi;9*{ z<90#>Gn6*<(fjieDFVLmM%>zuNT01j?~-K=F(Tkg{s=pg2>86#d;`7$SNuxOGfKoD z3=*NDe^R#Du;nv?M8H=g1Hvm2@cAcYn{6AHBvJ%?&AP5ukW!>FmrgYhlo|_Au!moQ z-ajND|4BkPni6$&7Yy#C7IA?N|~eIwWISRnHjO;F?TwePu)hJ z62s50v4in`aG7!5J2GbTC+#h~$==bpmJ2Ycj!uuBJ#3LbPpxf{>gaS)+Z-18zYM(M z*rqx%(v9TD@sW0DsH z;##WI@560L5ZAWu*uH)5y!4@#-Frp#>C>Mf?A`X^t)BS!-iZZio;voQS(0qDRq-xWG2!%4sZ2D^N~Ud zJyUIS+jQLC5#epgvK#%7K3+_pvlQox@V0DAZYS%RUTePLZS$?z2Ss>WZ9`tzVS&fX z*!9YYp-|{Vc-t<;GX-fE-ky#eMzx6WcGqS^Un0C!+rQD}43Q$dJ-^LVkn*Vf_Y-D; z2yb8ZJPneARHaQL+0yewa%yFme?xN#L`pV|?7QKNIJ`B|4`EH5LnXD%ZZqJnIlMJ; z_e}+x0Z7^A__jzu64OgFMt)NgBs$peZ&N1!_v}A{M2I%^Jcng&dr}TH*NjGxBEs9n zh2gG6c&oO#|LS@oMR>b?VKR`cGWsWFnEx?dH%sfyIJ~uKy+l?WWj&E*Ry>MyIS?t$R&(&|*<_Q$ zTeHpk6hw;fR&8_C4A>Om?eO}Q6{KwQYTJoKitzT#k99#}By84}G+WKPhw2e2q|93h zmnlferXyj>6-0`d_}L&1OU}f#=`))gp?41vlb&9h`R<3kI32;BT|2$Asfc%I9I0mQ zAf7{NhpXu);QbrMk>^}TZvIuOqi_-|?F?v$Bjde4`3O00XC(c-OnP6%dA@m>$4i?3 z=*W2xS83+*k*M8dUzUu|kzxml`Edm<8<8VNQyy#aYLLZ&0j)jSKbWA*Ode?66V}R7 zA*B!U@{@+gJoqyftsoa a(%5au#u&uQKD7g}6>-7T_qpGq;Cyq^PvsB9&Qyvn)B04>p~t zKEt9BHkDa`quKH+9@0^?J?1Wx>MX#KV%I$nX+E8>&mxss0QK!Pi@cw@jYTT607udR z-7WIb=Ws}(waP5Ok#7(JMjjQ1>vTg8sm=l%?rM`fq~ev6!LtuLDy?-=kGvEH26YsHbf1l+YC!&+b;Hp{X(T0(j=dfoFe{?TXM(A!~R=>z10`7lELo{v7> z|0e`;;%E9(+=t`@!t{O!gKq-yd!M}ohy-HaHUt5jKuC<-Pm;^mZsq=#NTH8keY;jc zO8ulK9*?b!69{@=4cjb@&hoa?#wI;;f>r9Em!>CKeHS)AB7HUsz2~Z#bh=0&QtkL3 z7$gvqHQxlH*k1_vL;{g%II>SpASA}FgAXXc=Hxr1IN99c72Skbl;z*S-Adx@>am{zfM-s^ignnUZHw7u% ze485Hh!Y6?$)#E#kp`%3(kBQmCXy2f`W(b#3R1F34@68RQX~*rJ7P!U1j5FqOqOr* zgh-J<6e%;5NKON6NNKIm0}(Tbbkj>SD$VVnAZ44a2eu+eBoK{D9Ri62A_$u?qe~Gf z5{UMh5Mcx&rN|e}GdrQ^f&$}dc1OW+Lo9wn3S@H7G625~LNNrzFciFFkHT-5Mdnx( zU$g5IeRtSBjanuWh#@z#&|yv>q-*k7#l}7Z0w`h;&6rSk5f~&85))@dplu?7m?#-O z{~KaPP9Th5ekm7};ol}NBSz@sCq`NcgpFaT8>dKy@BDC*D&YjexZG(03?qTCsYISR z4?o*Yq|nFj$D*SHkS5Db+2+{8 zONbN+#Go|=LGmn7dUkVijt)eM1Y$zWE(Iyu++O)Dks^VZbG0bQGgL^e^_flP=H%!X zkwC1tmjuj(xQxwg62T5nWAo6~zEp|OK~ams{ktv2QI>oicUG{Xhl?;eRdiLgG3WsZN=uYxym5^6noz zq>XctR$0igJn#fOhe8hQIL;(5ZzNmoC+}=tE)dE2m%jYR z{;L?t6zZR{7Y@~Wy(E7a{gu9Es#J#N;b^|qY&wF{zY$|J^+&Q zFQrX0bAdiY^6H}Z_OQ(Wq-?WHKS_n2VdDZjQtiPZ*kz%b?+JVjy`Iox2 zQL7NZbN*#EZgNLK%B_vvx0*=Kzsyc=u(66PN^Nsk^c^BO|1$dxY^)%qQ11$zYF*W|N`%@YgJdz^on|C@<0LF8XvCXS!t01!8D91h9wt%RGX63)NO^H0kLW%yb> zxDL+0%!>uLDGYnN(GeyYe&%>Xm2m!L-pj3_lHaJXnRAlIGv6M=s^t93e6a_fAP_0d z97pGg^NHmA%TcTWVr`K{+4PvVwT}K{ZV}1(m!rqrh6+-$>C`6AAd>Sh$CF*~>>~eC z+H@w4KZNY1~U85ZI)ME>Qq=`)+0RjZsLCOy40XW`|{Tp-YH zJiN0hrMH`$UB`Y)Jm+7|#%U3+s0~MBOho?WY&oeam;i>Q*(AQRk$sPI@p$Z?oPRlo zEy#?9b0q4$;y7!;+vJcekGm7e`ImEb-}Zh;pS{p|xjIrt&cB>nwwhqDa_ss_vX->; zAR;r~i|o}ulSQg?zKPGUc?+BUGT>oT(OPxRxA7_{K~C@6&LY)0-&Qxa{14ZeX0b)8 zbG}1Qc6dnV#?dJ)Ql0bN8T^}vbo{zziiZp$=bIPxk428oW!VfO=bK!4v_%d&Qp>Wb z&iSUS$!U>;%Z{^1bYVT2LlrIZ)`C|S zsm}Sn--UEXw03@N2=LrmyPOZlrKRSq(GNQn&`dLYw~Uc0V2(-u&581 zthg{QBYPGp0MXlrAfFd$Uh5VJ)&h}IN9hYoenq56^I|$gf<&69wrLbg(~wBIZff$1 zb=UonK3lqxJ``K4Nb@$#>JFxSTx&jCn|>$jFk(cSw`()osS=m5=@lci2zn)yUYdTt zQ5#qbKz`WTIE;{b$f#a%7*!zBypqk2qn5V8*%zNK8jom=zHtUhXCP9xDL(Z>qD;ra5jfkJxu0An%8S9k7ocb41&|VAZEhm?nQ~@wPZ|wvr|FJ zHm~kkMw)xxOWm)4U*T z9xvI6NKW(2Bg1zqNXe!nZ*r*pBF)P%ss>1mgxaQ~NWbkwrlptWD6lu7f|PAGpHY(_ zPV*e)@*+CnY)i7~Gn*U@XJeaA&(=P_g}Khzmc-c1rpex+adb}6f-2xN&k#^-_~BByL1xMmGO-b!;gg zlRkT)W7SRUCYhM|_SzjVNY;X|cB1lAqOjyN$J(NJ#yAiuT`U%eW1iIRTMMA$bDHP4 zSo;KOS|3y!T(_PbAd=HO$DJ4P{E$9ro-@;nUc_Xhm*#X9Ujk-xP}ZEet|5|Q?cbSw z-Zu&oyR)N~_cAH*FGV=E3eDLh!54f4olnk#K7TvVO~H`|kvQc7=@>SGg|!t_dk_g? zk1SZ|g6#6VD4N8iIzc?$_oPLh;4EH{>I89Vjj1d3(|kkDKGXF6OsOi)-J6v z!XniP;;~L}qJlhLDHf zEzam6gGdm!epSgLzpsd;!hIV=g1G)0_%hK$YpP-r2vVIOuFEpYB3E@jXOZdz@#4<} zez1AALWGA5B0=2n1PfcVc3qZ{7O6}Sohj>B7Zrv*mVRh zOxh)g-jyAi=J+EI8JaR_Ig9kK%t z6s6M+;;hJj#mz_gU1Oe4L&)1Rx@$~qFrO*vtoU&@YIN_loEk2ECjW>564~glmQ|l@ z^urg%b2h5&9+M9YXQN&w&c5vJVERx5glGnvyR@T_f|R;Rk9TVrQJjrxcj6(u71^lL zrata(WDyQ}(HFy*SZW`WK9PqW(*gUo$VQX*%?_qK6%Ma8pB-2)*bt1!Mx_r$kQkd@ z(d#|J`U<6&rWgAQJDJEvz1C#%!w&p$Hmc9R+n*{3<60(W!i^n~Q~Iw(%6s&6yP!y5 z3)A!^A%_*DJSxW`4iUuJsJ?&ycOW^ZRNK7rJ>rA}Z1ZFV-pc}zvdw4Zo)9G-`ux*u z0Gk`AQ1>%^$rk#UR}$SKMq(6*lx!MVJGLTHWTWX)eF~DZQUBK|lf_>nP~eEr$a85s zks_z`PfDX=ROyc}Lu8|67GU}XB4wLjPQsSY*(lw9#wIGVQMJwJ-RFtqY}9B`eXxR* zVnN8{10urqekarCZ{a!EiR}W#n~Lf>#u0qwgfc$J5uK zN;n%ee*9)>P=*hGb%YqsMvb3Nq*WO9cB50e&1zg4gbk3hQR7T*2P)xg)TZ@PlW+EG zOeD4y&A3(=BM^v`W)6J{*8d0+*{HF)1(6~fRobMFg8Yd{k&UJ+!Z~Fo!fjTiY;(vs zcmd8v&0fuLogy1m+mt^TYGi(dUx7&3=9*mN$tGu`=A=#7heS5&wdpgP=xtW9#Berh z&TSY2h9|t2@jsiKZtu{TKV&*Xm2fs{uD@M8D8pN?Hzy{NUYhy+{JRRn(rij989tY^ zHSyS?H1nqiFf4LPo7Q_tN9IHO2;ywi{G(DuKcvrIX#RcuFfp8snpfLS22+*_o7o_F zJx6M{m5rLO=EN#U>0(pUsZQxOE8R5zhT4E#MswtB&h6%GRC&d&?qfR>B(l*`E+ktb zkM)v1*{GvW#VBI3v9)HOt^~80iXg6dNL~b;*_rJBK9PcyX0c;l6s4RW?u2~xvL4Lk zv9~Fc8=mYXl2cg6%E7D?VhgrwEe@Sv_lRWJiIwKei~?bw6XB8Lgm=ccMx`i1wdcka zxq2_(!AB^%`1=mcy_13NpeA2f{TM-cm`uLXjoNcjAtlHS_?}E-$y)ZNi0$$+lcB{m zk2QQwN#Jzcm9G)TD<6}&lWv4H-rAFK9dg8tHc0*FsetGx5%a0pbd%ZRHozM ztM3%|km1X>G_pu#Iv%m}!VnJ`vF+1#7O70fU60B`OBdsLe_SmOsZPgTtJffg737MJ zQ!P^Yw#LLS-@~CZnfS%5f)=Sv$6cG><@b=T4M)ALRi@*vYBvzmh}Krl-oay2osPQ_ zSE*@{2^?oFQkjmsw%ng%ksEhxx5yXDIn<-i9~RlQ(rXW?PRElT?Y`7QCOy2>ODfZG zcdE&qJfu6>`8^(+>U5k|7BVQ&xAPaVe}hl3@r;sB2!GN43lACobnhaz$(=)krBC;p z$fM#@RtJ9AM(IDbR46j_^BnTc+s*IReM#2%NAFSb4bDfL>1^U*{5&lD$B4=V=z!?K zUF$Bg#KehUxF#2$eRn+ee}jL&(FOB{GkzOV>J=kxPUNb|C`59;cb&qsBOImzX#!l2;V+cIRmCvZ7BXK$mddZr(W$jX`brVYAD` zaNcg-PmRt9WLWCPabCj?qfS+-g!6Xu^*BUZoPFE1ULxbw>_Q~x?T(Q6kU#>F(#&zx zP6n-r^LEPD4id?Edk{7o&dx<7=k1PqjlNfqvdt|SutLOL5 zo{gE+(^zjn-mbP5a%@R0qOvo2BnnfCGkzOVn#CaxT166-gUPec;W9aI4}$!!9mt$a zzIt{DBnHWbly;@ikk%E5!b;FW%}^{37Lc)Nt`9laE~;HpCgfQujkYVAT#ko~T6h3WVp6RY zya;HRZ`JY@LZ-lj#WwSwQ5-t>?WzqvS=;npg(0=KKK)mnG_Rr@?PgU|~0KOf<- z>Ds#~zC|jv0$0eHrxxjWmBu2~TEVfM-cdPXSfgV1C1u{_>1x~6uxv)<{KjK52(2J% z$ZLztSo3p>RBHvleua%v%%P*lds?JgEBHFIw}(bQcYDYnw1T@Auye7^q&LbzB!_XyA#+P@Upg3u7WjNDt&-lg3*^q45jV@MKD0|4LVxV7HeK1OI{6j&?Hk;kLPGmT}G^5r<2S`>Q)HXYW zWB(RU4YbPESV2m$B|E++biNap=zNX>X|MA&iZ>|Up?FV42sD@w0|nX^5`rQO1-9Uj zgeVfDkZ!jcJ8w>*ma+O^(D(h(VIcx|ugPZ>8(R-lB!<-oV^sfDU?xyuH&b{;L4633 zZnql8mLsKR^}(R8G7rkI_`-GZ)WCsV*s22=_I6`PO7DJeTueTb42!1*P95riN`9ll zuJsamBVs3!De0vdS58(^kkZUClm7M%L99L)@6GB&3iZL;%QkDvOmlKQk*q$LDJK?F zkh0C*8!$p?=%tyRMq=QF`k=Ns>@r%KmdU}Hpl$^sWt&U$bs>t?2XlPqB1gh>gFgvq|aVxJ{X35FcUN9jgw%? zQX%!P%{+?p5uuNZZ&Hxb#TKAbLkdal&gX1S_E~*!WUhsUFVqL+6}t*#>_B8zw4UA@ z0jKma>7zb4Vyc#*(^-9>cMM|_6dHoknxpseTtu?^fX@k1kkXhs=o6EOWc9%@blPMh zh5F#%rcAEtjC-9q>7_XqEWyeV>Vtn$ir^fZ8b%R>7Hf`mS%xY|X?)nRmZI}R;6p<& z9YV@`hl^72j#OuERO~9c{VzH!)CXmgk{`@+pCDErT-BR!dXo#dm-JB|T+RMjMGOK% z&DG#vj#)m9%h*g%SDP0n3ChQ0tM3~F3P4Jo?uspsMZ}VYtMj!MAd%uq?Tlj+hwexn z^mXQ!gco4LBeS33BZ%3~QXI58pyJV@<>z!>K_IsYOK)ipRh$gDkS|TdZS2 zsuhpQyEb}AcLmdFk!r=`!uk3h(sef7a*I?d9`1zhh91%#+5tI&XsufDI5)C_hjg7O z3r$UsYQ^LCvDj<5Z^O^+9$=Ab#pA^%B|T)sgFMXP&|JB zVuFWsot<{wBGrmV(qqLeGD*9c7O7S|Ze$y1kymb8Ga(4YV_+G?Z(`o|Nsn-nMR9;e#8@{q3Ms}Si4QmuGoe!ap&Mr0`S)ge!|J((9;Y2PnBt_v{q#drZ1#{I-)xc7PN*>YHgR8pD6Z)k@MqEAhO?zhk%V zy<@vZ$99Nmo3~38eYUm*e28AC&W|6~aE$r*O%`Uu=MZhg&x+ItDp)QF8Dv%GE0;XF zfj~rO==VOXYT{`WiIFc`+HAEqW4C%8?f9P$e zjZJ-JR_fCaa!HPf+}e*wpU_wzH}H32gj|w$T|8KWTq0eePl%}3ypD8Q$R)*k!-=t6 zA~AL?jJeu?NFkThkA9~hKZGD0j>|oCEaD*55=JjgUstIWYJpr5g#CvZ7Z4=mlC!N} zC`idBJ^X^yIzGKL!!=unE|8E*)TEhy&NCueE-@3lokkGLB{rnA zR?IvjmJrEu34P)*g7!e9)LOIb?BYbSTw)eE4JnG{k|1n;e)uyYF{YYXvECg8DFwqL z>C}+XD0uvNn}JLa0*?}cyF4KX=R>BVn2zE*6thswK`{>nbf^%#&n$#}sdVerT<{e_ zp(Nb0W=T*D%O%n^`K)4dc7IZxKRm3_=?%*U+#H+P$y14=`jzbb#Gr{UdSki7T(Z4b zP=?p!noNe1b7NQZxD6(NVW}I}N{08;M<6C1*4W};%>{Cabj3FQ#60jjHZ+z?%>9Ym z!+Zczo;l*XTUahJZ{#~qB+Dggn-1;4ahXzESK1| z(>t4Xdk57q=Uo%3gyj;)#AkzoGCXs~4Pqkcr8%ao$)PYT&8B^l;q7g4wHdgQWhI_d zB`lZNwcblQ6J;(;6w4)!UFnYcA$|5j$L|l26=q^<2VNco!}+nz%9E@ax91R*naL|@ zBNU``v4`o@kRwt}pVVwgwXj^`jHoaIHLb@v$~L%5%5P2W8FK;aX23SuSx#XXU;MKuWXN`BfI|pDdR+d+g{;=2$MVxk8zoU1|Z5 zESET^9H{~lcgk!?X;*SCEQTn9U>AB$8=G_T{sEsNGZuf4`1)e=p<2UxwrX6_Z7Jo0s_ zC7Ksot9nS+)6wlLn`(*XO$JO}wn>lnbE?ZWl@d*oPr?utGMOY*4~|KgR7*5pe2TqY zTxYfatnmy&qIn&^nTK>eKa9!CGeK8NG=?~}m z-@r1vM|F$*E-$+(^iU8IP4n*8EV9XG?>#nczA0Q@q+!P|dq}rqt~H0$pC{qkKe&>I zbnQNy$73@HiKfz@n>}Q*a@*K1<2r+QD5d?eX&%zuW)9*Y?%NqkY;StpL%O%5YUm+t+_g-W zE$Ssp4T)ruU1w5C&3BXQ^t;5(HhfMZGHS2jnA4!(#ChOlZ7gScglXEs^oRmj!3j-a zRp+bV+=;3@tV>^g)&*I@_GgNAu8ewLGGb#)4!z}go3l|bO>sJf)j-OBUMHdiJh4y*y5@R zQnq=&Q4~R};OJKuP6CNRRogTiH@+Z}6&(H1e|#|kNXe#={w4ZYC^+ta5i7F}6NJqY zccv4GC88Oblhs#{vdt!oFyj+5Sz{*j3081yY|3Q!`+pF{L8{SeJ}!}U7#mWGm5mW| zeUe^YFEi}k#R0Lsj(VntIvVvpGZZ=RsdgJp@hAgqop)# zhSuv%=L-eLSlvuvSn9?qlHt^yv95%I6Fvp00_!k#t(V9Q?eh^S6rA*#w<}0#=9rB- zqv1lqDVq^d2rD>2*lf{$7Lh{1X__UYf|P9@+B$$pR&dN8=EMVukqE-(uiwTJ$qJ5n zw8az!DcgL05=jj-4UOKEg+XNnN3!WNo6INKadqN>m)kwDpjg3?7@OJD$U8I+=hPpl z5>{}`*AXj&G3?M{yAl&gFU@>&`M$!iG@F`AhO;ily%S7jjlMCq0ad~Zj$P{|a(Itu zf`o!Y-{k6t^w|p?)nD8rMkqLi=3D`TEI9~keG42VGBdq2`tbOp3R1e*DAX^4AoduJ zDTN+WC0V$pF_XSWP1su1ZE)@RX)aM&nVfMs)DP*S;5g2-D@EtCfNMqWd+B^rbIej{qT5BPLR&f3FsEbilACc zpI%ptpj=EQjYM1260B z3^Xe^uD3OiG_ek&w&_kV3)5IAIH6bjD@fU9>aayb3I!)g!XZSmf)j+z$O)5)6!)0Z z?XRUEWt+uIt|YP$y)<`@%Rhp|aN60#q2%6);I4CTKaqIsKyz1Fot2Noqd(44bQ)}ix?f^ zvB>xZF$D#wR*fn(LL9``=`Npiu0<+UBYGsLu0@75TxOAeQ%d=9`iO|e6+L7`!s_EK zQmq=5uCdlbCMmWA3r1Y0S~Y5S1=CMlXPeBUJ)~MSqQ3ptBIE6a%=dHdCLN#i7bexAw){5@ z#%htOFO0Mpdo{{2>Eq{#jG8x%4nH}Q6&K-U zJk3URQsAIneY=V%p+;S-hx|dPQT|D(&-Ab%*N7Bq)a}%)^>D`OpOkFs6V~h?Qm9dh z=I4gZk4T@)L+>*8GBHkiX?jHE3Sd}`@>=tW!1aR18_?-OjY{(gOo#>NWo&vyuOI!E zNTEg*Z*yKjeu(fmcb0o-*_WrN7NJH>sgGbss8MSB+tOnWV8^Eid7su(kh0D5pZ!7* zvSv*`-Y*&?1Q+#8(C=MC{GEWwKmNhJpFpH+^S}LAJ*-CQe}CEtB%UWy+cZ+O96=;6 zD}z2)P(eyIje_@Mh!kp6uCc2@UbVL=lT{4NA{V_hqr{!51PL`tIVwi|H#G?oYSiZi z5YGi7Wt$xzZ6`9EZMMpW@f2#5+Gg)Gdx#QhRM-6Z6r_}E?4eUb5qO5~M{xkfArwEO z_yxr=6u3_uipRJ^d87Xgznw#I0mUCEE}^)BLVN(9=(|I+T2RXng=xm<4iR)%h(g|L z@>#{kz5(b1p+-%9vmFepQC=p_isTi=YSb-ue!}pD&#`SMW5dVO*9^+=Z>f9G`K(46 zC(r+*Ff4WBpOWFb1u%0`u;D9B5~33BE}Pa%CnV~(BrBtwK z#!tV4NTEh4ZJOEJ)F%jfjYi+d+CxFgHtFk82oh@4fL~jJ#7L;uvnjr0MW|6FK4JOP4JI!;{v_*vzKa-k~w~eTNSI zge%!zMGwmGp8D9pBAMA4fz2q8VQDtKlMG+V2&1eJD&q?uZW0$JW}fhtml}N}W!hw@{fVtbfhb^U?^A zyMnVhqC_Wx@-sPP*lqnm!b1isT93-NbAo_OaYi#m`ncQAxqk@!e{?Z=Hk0mVEPo1~H9MU*Dn>e&pntZpf zqq)#oH5a`_iH}e`oUjV{`i6l%W|-c@bd8|mOfDObp$UU?4MG8X@*VOZK^~s_okgk@ zuziJgdPw)Qc*wtmO|=46zw{A{%u;xnMXD9BugfED=GMBKC*Nz4Y6YxT`aTw!;qM$4 zsaC)m=U?d|BXZ<`8YQk%t$@wgeAPoHY1FEnMXD9BtwW$=iR&D3VxNZ$LIJCD4{DSk zGo6fQk!l5OYH#c{VkWfuzJW!m6|lAu)^)l+ZN1nc)e6|lCA%z}KY!!!kU=P5yYBpK zkrS>gu}HN7*6s@ScF{w{Y8J9c_N2lyU(#l^6U#j0js(Ff<=DvzfUYut$-~!2ep`OM)WF(Jc(_p z6)<;#42ZaxbX{$RAW@KaRo59FxoVwN$|7Sv``bgR6)^fxbUFoDV|6UdyQY2Bv6J(DB0#8PJ6ARalNHVMGV+X*0vYXMy{SZESJ1Tc8L|BZ zBBfr@9S5<0nM~3bBY`X(luiBXPL+rf>R8xIf22<)q_=+#4}k1c(-V)M1#9KwTJy;W z^qkL|)9E41q==phrb=AKrdRYD4$Nwyj^#I?@&_V6M4X(<%RRKgGcRgO^5MZ-nGB5GmVipJ^aL@a>w>^kr|5)$Cg<+w8R!`Lj^R zI@fQmAf?==E$Zheqyv8IgrW-yj@`QBx1K0sQ9ug~!~6}yQ!-(LPz*sa3e!th00knYnL{5Ko|ec|^wLb{!#{{*bxduO6fq=ILLH0j2Te2(Dcc+}4s%?n zV?A%7wXAUkVe_lj@H}X-W{%kLOhL*vS8r}cP&y{3hExK1h6>51&upTvG#WtX3w3N> z#cNw&+3?T#c^8iZL%ZV6zohw9s8pa9LdL|&t7OgZ-PA@v9Ly8X@ty=)v+L~ zrHuxenaS4?kh21j(#1mE30oz#yXciKsTQG*<=$8yHK96n8(h=cOeYcab27c>f z(pMcDbfi9=F4VDB7Y>2h9F#T3s8VZ*%+A(^y(yv~rCID)T4NkhIhdU2h#->HF`Fxt z$=z@MM^sKGx6HfivK7B=_YRk9)2FCd zsAF?lZl}YnaoJpqv}vU{@&FDi4=%>F_4jZ;q^~;mOM8l>KRl}?)D+gZ)Yj{#p$8&moA1A^L8MT}UM_)n z!|IsYraR;*0*HcWt=lY${XGyV*>q=We3l^WfSNlZJyHr*$AYk#v;IE>6=pJ91OkCT zq-?W9PHdE{j=A&yT#rar$AYj~Ze9$LMcHQQn?ET?*=GIHCx|M>WR=y~h~yN{&L)mG z_fB~Ccb`8cv;^bdUYN;85Q9_aDV|BY^Xq&%uOvv<%?a62@mVU=iX07OltunGm=_|G zYDMl?)IJaC{$-;a&F>bB9Lxo=~Qmx3%uZoCUkh3SYwn()i7gYuRO^_}4 zJJ&=HsTH}-)yjCti1y!3v23apxwT`kyRywBE04umq*{?XdVijWbRXWa(?bTK$hH02 zvgvMh(y|%EI~i9tdgHO_S~~v=%cfe9>zlK;hjjPqj!2LDR{dd9?y!a%EYkT6Ck2>& zK`3&kF2bE~-@1+$OzW{3#5)=Lzu4{}-F-?Wut>Ec_gOW>-(n7x{Fb*bv^EGut`&bS z1Cz;{owsZT@l4u<=RGW&XE*-iX>AaST&t5^EVB88mlmm3je8GYh23By6yoKSZ; zK|;$L-617x1|YqeT0A%EM>ZKRDT?GMfXAa}zJ|oZ<{K|Pibxdj81XWrV7CE>94{w| z+$f-0#rqUR0ro+n@9rhOPAwB!-n{v5=rC(}(lz<4V&i5%cpLa(%~-YK92jVM5);Qy z@rr_$7q5t9_|=PP#3$oQ{;GpVSk#99KCp?-7h2xqshHe>3`^Z8jlUUksR~ts6h$-s zO^UlgtjO85-rHm|(S=R~r37ilpZ>RklxB`uExNg6k6W4#xp^liEGnm zHkrpub|oe~w^Mu`8EbiV?exy3>eA3$Z99W15L({Zd03ii!Zo4$|?zmLT3lz}UG@TwH?tjO85-b*^_47fxTYk3a+53KQzNuRyYk@gZ2@=UPi z2<<)%Oj-LTOS9fl`5^X$%uGh6U#lRci>;6P8%phtI-Hkk$-*@?oSg$TLCaHLF}?3{ z7EwaWi;lO{59zDrEop%noQ`<#?j8hq ztjMXYxn2*SKu|s=pVwZkAf--shaJC06l-~Itqb-BK5(0d< z4!q?Ou|gnHw)y4$tppWevR*CRgk&u*2%D{oAjB%lWQ##<6r^l3_FOljgqGL-7|TAn z2oJ*MiZLsREY3FjhhpPm70`y1ZEl%_jY|lCYnNI{unoziTgy~U=f4x-=!eA8`j7MY4?T}mRcMDwo~m5`=2(RbA5DdgpeVTzcb@OMdPsMg z+x;!lzo00S_safYk(cKVwMhShqD+2!0qb2{_^<&;aYSqV3yLzi_gC!Jg52~)VvF=I zD9YrBMuRP~cg+PB>0eNk$cXVLYkA0sp|wg|q<=wCB9mOqzSu)1`FSi>t+-DAf}%va zpDscGC$94*fATn!HiDu|j*b4zA_v^clMHrwDKZ3IP$bp8GNKo9AnM`JD0|08}9>7MiVe;(2; zwbtfMt}@wrt+mSB^*6uw*t8K8B{KP#s;fOVllT3dlPauF8$nSb-EXfW*b{yGum{p) z9u*rwQ6@*6*ldxp=ek&=e?d_qlO$hO!9zy;vX_%VwAMyYlt_2Etk^F^YYS}M?y+g} zCRd3JZ}8(-4;fyiPC^f9BPdFw`_%BX9@72O*xx*)ji4x#wMQW+7OgG+%_WOeK6&om zSLl#MZaTQ};z@!_Q8*Wc3X|MdyMn9(K4n)sQP6iK&G z6?a-2im$48t`MfW&d|Qk{s6=BfS2*?N;o8Ss&=jCRicEdc&XgK3R2omb$aJ3kqA08 z?e-M7E};!7ZR(?|za)k>MQU5ZB7uX~=<5r|fn-(D+fR1ae7WXGf`qDgqTNXaDcgKj?h%pLj_B(P zvknHydxO%Zk>CpMzi`x~zj!-aK}t61>kFq7nHV;W^h3C{ctTK`5At=&WbxPNTcM2Q zxdf*tR7G`bs~AwIg{oM3BWq&r;B0=GY7UV?RjgeXX_n9i)i$GdpCdAYUYgOO`Va*v z<&68#vY${KM1kBm-Vqc>Q6LYB_bZB1D9)fbivo9*;{A>SPpQPajDkBBB3itgUav@B zUpSE(B~-=UQ~svILfrFSlg}!quP-c147p9Zno<3+JqmHp%gCcvf>#u~V{wa14BC;4 zXNgb7mF%5|!)n8aX5r>ya%T2l#q11ZSn9?H(iLC$ybe{6f-5=kHX|zG{mZ8H5_xqG zk``7KjY|%A*+8T;Tj}cyM-$1aB7J>fB_f43sI+OOX#$TaRK=9Z-ziAhX1{?5q0`Vy zGrOEm0um!(v$mwor)1wq*0HFMA!mgoYIvdtyik=zSa@tZVjVe?E}n?AFNz7gUJ zVuY$V{S?-Q5ch2Q#ygwddWXi`oE)8tJVi5Co`>^N8{Tkc5uF~%%-U4QBm)_iX48L? z;a^iClo6`puE*$Qp$*!!-b*?%yd6p;0!__4Q|%K!q|aVRpL~bQ#NMEp=bsh@!>Xd% zT8c{R31U@|KH}hzg7jW&d?%e6KU8XW{w5u$rYvZKgFed+HLU3A#3KxiCRnb-LMpBTws8BmP*Oz%Ql_3b>%NCJL1R`ad9kOCMv8w2b zTDYG`p(?7cQ+!ZVLAKegPzMDm+nhYJHc^F`9D1i2$UmtF;yP!IxIz@NM9nq54mOcM zq-=Bfv!(>Gsz~qIg~Ji5qWU`J4{}?*CQL!fHupatMmAYhbZxo6gh-(cs%<{6y^hG@ z^wM01vqULK+2()G?-9hRBI(FWDFD>8N(z!(pP>=_c?ZG2+f*1b=Xp>IDRoIY~)AjV%=2=KC#I1-(0Xr z|MH_u{#$vcMZWEL%Od^Dk21OPubLLQtN@m`Xsv(wQ6_)yywD=gZhUT${^duRoISCn zMb2nG$RhpAj}jTNc;RFZ8S%fnw=L4Y{3wx0{<#(FA(Ol)g+(f^)4%*Ek>T+VW0CTB zhKJ0+B4yG>ew0Y}g1Lx4#7v;~URtF8=h7w8btBtw59zwn6*FGg^e;b3qFeD)W(O(sa?JB-7VNcy zA`25UzT0hU_Swjf66wBI_OOR^-~KAK$EJ<^D3js~gG3LtnX}a*{mYLsd9f;PW(e~9 zL?qmNoi_5LOulPe-y&bnU+y7oZdu7>g{K28lD>_?BK>cLGI_lrwj|No%UK#T$(swM z?FI>j|G#QyuQK<^n)sP<^#oaCwKIMXHVI|OkJ`C<0R6wt(7tVmU|H>ym^dnechA&r zE#5~IT?GAH{uCipAX4fTQacgOnoQm=Q3+&eD%3XhZyK*9%A(G04H&4MLA0_sw&DV$EnuXeVIudDr zAX2vZA`!xVp?2PHga`s#C^1MQvgrzt5an!a z%4Es2SSKzf^OgUSAXYnVNGXXksx?IV=VtP=iBMz$k+RL^%`khznXH!%6NS~zAZ&K* z3$;tAol(j5DM%@o?MtV|$L;X=15sc+;}1nK9K}c!qfzkefGQpz3ncyo6yKu28jC;m z|5!TZMvtH z-kIw2pD*WZeaW}|)LUIuU3KfeJv%6HT#bR`M2zXamBYUC=law#+?QhSU48-mnv;&g zJ(-?j`{s*R=yF;%i5Yeawi72E1t!8e#ZOc|2+tOT4}Zg=qh&kytT}H<_+WM{b6U1@ z->b3`VWAu63&NMn)uKxDY-bu&f^4V1)(hmVJ?n`4p6v{BNJwGkI6MOf5s6HdV*i{c z29ccYlxsTT{esv~%XWtC|0p3v&2IZv5Saj)jy97Qfy78y&>WzYBuLA4_ANPGLW-IT znqxQ7vYn&0gn`7!3Yw0c>+cTk`QZt#i*f+G{2hyDF?E11HU5}npoOP~q|8BCR=IrxyFhOaV?3oR& z7UxO*^p!A+owKhXy_1f~VGF7e$=OZ|?tq_8W|_i|t+XxYw9 zD|$#sVSN6iOJf{FaTo=xuo%aE)68|EIF6-SwsTMU4)klzcFLO+r|;T#MB;%~TxXsl z)c%n)XFKoLZcmqIX6D+0*INRw~?$(izf~Gt45stE)?Q{n}%Sj|>JLUIDZ@2wIBxgI_aTi9B zkfLUegh<}xpdZDZD(5PY52>)AnSb0if^ssM`>&W1Qq(N-4HRcP-NhW3(46hGpjr7d zdMGz*R@in&LW-KrN8?e*!(`0~uxmNnX+d*pgAqh=w$t5ur&B_Tn)AI_9y#0To*6V3 zyNErke8F z6rHq?VcqSxuaoYr?VA~-Jj43!?E{^3eT-4tAmtg>^9}Clr2AxL7zaEm7CtfFFbK8;E3K@HGLPCPFl#YZoM~NCn@i3JfHIKzV((piO?jR zeiUzs+;Ek-hb&}RyLLLOlkWD-;u_=wUdw_}qwizT;wNI&NqGi)MZkwVM)x?|Es`zDb{s9WuA?l-(Hm@5d%;vw|>ENzqIHRkS;p z717@Fe`~p;e*F+KX#Y%YJrmdCBp6fsSOaE~IZu0~$6osXZ44cVnHWs!h>SSav?ix^HT-dK!E7kEH2LZtGke zD-ce$iY;z6oYXi^EA)!#Y--Dy4GaQm#g=RlPMDl+6&OFgVyjv7B0*7^%vZIfg#3Q? z;m#9#Xu*6u+0nR`iPe$P;XJJc{q^547bpUvmM{IIn}ifK&n_=Z5KT}b4~|9JfwQd^ zH1E&eN|2VP{p-l@5>nLslyNYTu~_rPvj-rNG?8oC<32<@#H*w2%Y7c90HmO4&vE$< zky@TM!^ri}yyah0BulqiNu>6yS23V*lK59vFF$IOBHbD_wC0@==(1yB@1fgDXt7#%T-qreQ0 zSsDdWm@&(vsEDF6imE88qYys1YCkl+Ikig5(+>F+6>^?dXqo9Lw(qlJ)MyE%9vnXf z%Nplt1t!81$xjrwysof7UK|)kJbo1Wv1)Eh!e6=X*d_#jTRG~_epeDy3KaIB}d^poax;!Z} ze|C#15f)}s7eV;mXN+nxuH<}~R8$G)X@xtE@GSU9XWpGS3npjsQHK8_Ax(QBeUQH4LXEJ2NlOi4eAGx`DeF@Z?oW_ix^5!ziQ9>!S9(-vxm<%YAZ z@;i1lI`Evx)ZB*h=MF_en)9?H?;WD+5$7t-pWk974%{jhyQi8B|E6%ZD@Bjmm z!Yp>K>pg*>bWF}1h7gSNw0<;2^1%DUL}_{2-Ldk3gs>k{h~S(j?$jg_lUQ*cO|x7= z3gd%qDCS@kLs1MzG150&t}ZQb6wio?UCrA^phRoLN zN2f$MnVFd(X)l4n6D?PxFS4yhR2C-3-drjng-)lpC6Oh=!=%u6roh?cJgo)IrLP+i z^b?bd@@$llqUQEYSROe~>sovL8Ihc)wV?S&x^N;nPwU#%agu}-H7_^DgO7xR;yT*9 z6Uc{DSkSyxza&99nY@;vg@hC}pH=^jD9+Qm?w_7ZBAo6X!xB8ykfV;>BC-(uDDL4S zTNA{uR{0^t*3N1Ny~0dRN)Q4P$9F#@hkGJ^Hu`-+v7jjKZRhR0K+(yF{*tKT$Q>{@ zyd>LVf{HOY^DR8?n0Qi!+^{L8a4&d?g`_w$b8`*S)%acCre-zNsU=M~M0BrjwA{c~ zR(XkEZ-b;fsho3eh)$|G^0qffX;N9W-#~MK(kW_vhZ=X)OUsN1mkkX{GJ9{RqC|VC?>Bg}ZT5FRgmDT81n&>3GWc=9Be8!WJ z56h9K65ZpP7^Hj5)TBCTA*tN(&1_xMU2lCFgOnzf)u5ls>!fPyInN;9Nn3k1`W>C5 zuWxRvlNOT7&!>&i$=FX$lru@nZ~9np9RZZ5pMMllQrc@Wm=tk8?DVc;Dk<*Z$o5E);yPVpoA1P-wka|R4gVRpF#|zrJy74E#de~uL^G=N=rfiyBT{) zAX3n@|C9u0F+^>OJ=JSin_3Dwa!rve1qbPS3OaA}{X}Xh=*UU2wbh5<^r)qv%kJDF zAw|vBD#B=$eiVCy^T_aODQLN7gs)CIK1o6f35I{^(wLu7d_nPzidc9TAeI9~5Q?ZM zqN9Kz7%Lcs3k5cTSY8xiDB_?%J~37TUV}K=wjb$%6PuUsX;^DqsHLEN_hfpC?fYBf zDb`ZZ6F%(%GnNW}PXs?vIFrQELU>L1O5Q)Ik}wuNzHOZ);fvAk(Dhmh`t&32#sI>; zZj6;exZ?-eFmtpN^vybM2*X$M*Ls0`w&eqnNWdxd#o|130+7PYaU>btfS`CF9nrH^ zAvrCP?CWJeYnUVT7d%^93OYq`409k-)Eqh$=`bw?-K#I+7cG%2*BmpbCXskb6vxQJ z%O#|!xxOq;xQUpYmK$4;mV)+anr4$@b-XWhy_SNW-+dpL%T)Lq58rIc?i(6PJ5Qua zlCbdRzFf)qh?SUycfCNjCS_)O&JGe`VK(I!gl|4;LKP(AN={U;Qzcpo+IPo(M%G!l z$|j<;6!g6z_aY%pd!aMRzfeOaN}<<=%Yfk!NUoNBbuWTaf^^1AUra&@H;ZT>R$<>A zJ1dXrLX~JK=;9A^p(YNOC6c9T z&fkl!Br+|lO&*DrGY~1vV&~SU4~R;~=`%EJ9QUCQq-LEFp#QLD(G&VNEPdhgjHsV^#1Cmup{~rBrD~RP0)J92TUONR~D! z&Y<112+~r}hjP7*gfyq1FE_@+kAO{~FGIrarKO;yYOXu$$`h1@$s6zINl2m7U9UoN z5T&J{AFk>I5_^)r1w`nZPZy^XsimMlBzPtv1x zh(y?z^kdUHg#^r!;uZlZSxws%X1ufUiF=;$OoPu^|y>eGVikc;N?I1E2YZflk zm`E)JE!V721oMtl(C)H5T1rS!v$+S4Jg1=DH76j|q@|$cn$zcgA`$_O;%=LCfrJz_ zmn^?TP(CK-=IRF$rxW=ca<55*nWv?oS2PjLP$f45uGO zbr$8;1|UVv+VvzDw`+~&xbW)wAX4FY} zs$EU9<*D|zN$2ULyXDQa1}RUq7nq4%P#cvzcQAc;JT1Jx{YS~VI_ci+ zz^=rkg;e|0215;U;zH~Y8Yxe;7nq5?OmFQdgOsM)X%(AmkWrHC)=7D)Jx-^=FLW|a z$3&G3Ql4s`^=*t!s?$r{(n)!$oxat6nL#FMjj)+}$in;En;%@!N$-Zt#_Y3@YQI*x zzfQWfzZ}7u7XCuUf8BAU&_?Cs&O>@@Eu`AJy_sl`o%8;qlNM6#PlsR^WKH+OqZ15L zo@(#VVZKhPtsZUANeij=@ju@($T1tU>!gKL`;lchC~B=e*kXl2O8-KJ+P2_6om5*6 zE7|!>} zyILsipJ{1Vi_|N!r84%&?`LKLe|%5eb{dwSeJNk6<)D7vj(tJ6SB3!>=0smZ}}A|p*fh3)55tLX9|WRJH|pGkc^ z>8Dq0RZ@&3GAgU(T!ED;5c&P!`(xN;o3RBaxoBL==sUll77UHhW`FuCU)3gxLNw~3 zc?YUWNO4q-oPhzNCF%D@!|9Qe^cFO)4n}~eCFxIijz~yR^SO$|bu9W(YZb&0N&5H|5V~`c-jAk8<~&@ENbOlmp8_igC+Yo= z!n0y8dX^sc?@9W+A2UlxQM2YHkXn+y{O?G?aFX7FX4AfSRy_2h*z1nR@h=c5q+l?B zv5uiQf#MX3GbqlXK#DjP$JUqeZ&y)VM{yIyZ4@}!#6kuz)_oKYQ9KsbsZ9?$QKPgZ zeV59E>DQd37w*aQ6x-Ka*-8v8n{+n=>NWy{T)DtRcp|iO5H8RHRBh1q-`Yle7+10_ z-2+R)dsAa#$7W{d-6;}bp&PXi2Wi6R3eKYnu<9vfQRGJ@+>g@r#C|330fOQ(d2t|2 zk3gg_a~!VC;Y7t_@?CnYdz@nLcQ#%tuT9Ur~LF{*& zq_?0sxF~k#gsjzBno*t#WA*{kt-K8O|!|dWD1^tElEFZO?{~GZ1yuA z#%v0<3*EG>6t+zqixkJ20kcubc`5=5Z+4ER%aby*zU&Q&ux~a6M-hZC&PI+V8CRmc zY|cq~K{&#*;3J)BqvOnpXhv~dsfow-N7A$xI^MLMN|&c#=H@fx%s5GJK`l|Wc0{FQ z^8M;q5>mKXTpAoAv^)3BI#f$4)a1;#9$8;b(#zZ6D*X%65L%MH!0^tIkme+PkK$N4 z)393orC7~4)h<_a_6r|H6jp4-+54+1A%$7&oYnO=g3>WLA}V%YPSX3)6v?%}Vr;Y| z{jxY%w>e4ghZJ@t`s>9=&tzcDjm1w(NMU?J>C)iXDB_}sk0POOxLoyP;xLjC6}u|T z#3RW`dU=!L#F_AhAS@z^t8sy(k&xyjz4o_xGc(ifHXde9(#zFcy)Q2yDhrc662F&_ zLZ`b%<@%KEoi}I|IkfP?EKW7n?gUPkm;c;=2-h$@Ay?cp5@=c83&73h16d-}ExU&^T4+SDc%~}JC5QI%YahDnK ziAYY;ThMHEViG}GlD=UOj$WKimeJOg5qxXrMrX_TRWr#LiNH-_8OlMB;s`o znq!BKAS#^65zieGQq<+QmbQJgV#t8EKXyP~fxSNEbQA-`cR44;n z%{A6|6W`f}cH0p)8w=q?X!@($M53e0GMTaB6RJMA78SyK|E9P{&E5AEU0;rwtOHJR z?a}GK-qMNlq1lY^-KJWo7tSf=nasDR71XdR32I_|Cf;F{aZ3%dLc;?Fsl92$r`^b3 z^j3EkPhybUTa__Lxr4DHdP{>`Qfa$E${mbDoe{5S_ql)TF9s=hFea_7Wsu|gcQZ)2 zgYkQOY!0mHo!l53uhzFx2O})+Ni5P#hW*qI%aBG&9Sl$Cs>V9$QQKf!VbX$wF*)^g zom9up$AhhratGt$`VTtkKKrqpK`t<6xxYEIEF(e_ZB!P1UT%=jq-5GDSl%@<<+brT zDR(ebn_`TL`%6hwrj1m-F~U5lNKC|(;u<%G8yMo zLd77Z4u&U6fy+ASu@A|hlNKC|G5Npgq&o87kp>xQ0$6-uH*}^Q3q7|sbjsam~t!9~SVmJ%_c1H9f7yP1Q*Y4#w@F*dnx1xqciOJ)ZG$2Scsna2jOw zbIA-+?qEF0x6L3Q4C2Eh)?2xQ;Zd^0GsyqCx7Ri04hDS?;;TXCoQu$e@6*DE1+J*$ z4f4Wm1mjFva4`D5*ldu!az)ok3l7Gusl5&IdUd-&`rZQYx0*C*zTY4lWWTMGLYUx( z^rYQTQztzsKf*N$uFp#lZH{(2QT%T|pfLI17gE#ynUTCSsj>GFto=D(%x1Iq@lX7J z>HoJebaehaFsac@A0ytIaB@~&mcrAF=)Lk@+# z54om2eF|iiIU2NwhUbxxqGn0&93n$lv%sGnK;ELlkETf0Se z4PK05DGH9BR^s1Qqgab#J&KJeHlx^zf}>`ydSyqiA+!tg%)wcgicM^KM>M8yT^ zu;)l8A%&Ua$p0En0`_*rk*rl_BH8<}pjqttN`f@+BYZ|q2`OqWNpyio&HI?~@)Ssn zgaysj6EYKt7AuYw6)~X#k)r0=y8{VI#N@V;UqPOasA-x_j+6P@(DjL#**|PLn9C6v zKeOqEFf_NTBK*OTQ*m6Joyn5$4fhDTJSj6*YQi`SBrMD(?URf=n;ie`Ks=I+D|sBh z8CAj#hP;=Z74tM9Dmh4}ttsSxBu#svGr_aNbUAw;^kD@AmF#_3P%9R*9+4?oElJiw z5>mKX1QWrJd|mBq)D_*FifgJ~G9GH;bx67j(w~d2OjK$nn`Jy632F8|=5E2|X_y%v z5AQRw_hI3Vmu$e@YTn1fj#w`Pk-{u?9xi)~NaPX}=en1Bh-B}>kETdoZQ6(+&HFg_ zA_~Z5RQMr!jD$3KAMQ-kuq|WxP~53!mH?9#&5}=!oH6zhl!eKks=(0+ zL<*hmE`IAKQCXQR&>w*ddmk1w%U8=o6nh`;(#dN`NKvz1-ls%nW6kOX4-?7WhXu_h zd#)0doymr8ewUDLQXI3=5jS=R-;@H{$=-)tQ%ySs zy@TYKq9#6x=!Lxx3uKlF4G1d4WX6jBNJz1@#fKdssxXuJ_A~_v@56#-g^M4E3TKj1 z<`PoW?3K$-R1qedG)Dl--iM%R3MbSqX^~bh%1o=As5y}+jEv%mt>U=%BWVhjJjpX*FM^`tiN6Cq#EC6`YWV#uKC1{*(9^UNL@RJ5 z;3t>qazsgrI$(KIUCrP3 zxS~$2NgRx-)7s$puHlo`HpH*-xLNqX$?G-I4D#jKpA1rN*SxHY)@qv1;vkW%X-e%H zPmK24bE=X|xyze{QX(-jkL(X~C|!`W!R(`+ervWsp+4MonnP^P-XQa#uD;xn1+@H$)j4 z`M7*>gOuAf9sc>tAlof$q>~oxnlhRGHc0w_m_f?znpdUU8RYYzHwG!UYxWGEV~{&e zAb{pMB)4ngM(I{fC*wM&^)pDhT~lsu6rJ>xK7UXrE!Z{Z`0vPQqjI`z3WJo}HLqj8 z&^1G!-4E7D3wF)uzgp;|Ix=QTgOuAfo30x@Q z=2pWVto6_=HMK!X?Hbx!jMc=Gb(XQ3Sg>o#&9&*8p3?P4>6#Yont{_!>ZJP1O{Cp; z_Q~xUPcja{v>r+{th!EGuxtLzY^=BH-tNXsklQt$R1bVBSc(K^bxrvPPSnLssv7sX zAn`Swv|!hCx^-A5J?&>3E0~|%TiCMI+rc|@QoT{MH*4}vN*PN#1!@0Vqo>Emsida; zGjjwYYBqX82C`%@{laYY+)R9){(sCJMLC)tXL7b{1SUf4#x?N{uRJPug&0J|it=H3pAr)Kd^0=Js8iDcCE4I2_Hxd+;$-5riveLSTi)qpri zv5oKf8MVOZv7o;$InKEh781Gm?kou@j><_JvJWws{4+07Vr&t~Hu z#u3sFDQdo*@-I<{6e)~#RD&ijw7wbZr=RU1*?u7ib6T-|JcOq?5GiQd)0RZ`K{I-i zw9gOnmZjF(^WC3JB+q_(=HuA;*y!{33-^yYC^Hd^gl$TpJ;4EroqetjR(^G8UlY0hTPs=9V z&G3|^o*RM0Ff@ECDfu^0Q61HoEJNC0`(igsVAqxGaIIfl`6$xqD3mx?F6uLYG zGqRT5611+_%gaKcT=VOyw#k1xg<0&JmkI4m$KIOz zwrk{St_A0@u4iGjSqB?PNTJhR8c8bgvC-pt zUi6EE6g0`3txsew*8I1VgGjb(t5O#Kj{G)>`z`(f24ba_!` zZh8-a*+zxHMA(qEaKg7=n>j%x=%IPbVNHPnMv?#D=@>T5SW1Xsb)Km@hruB+9|~>X=aI! z6|Xci87}RVXqxYH&~VIIJTHpcu|X*DY}fc}v(Q5erXmC`%jB@FNg^Rl!IC=R+yuIw zjUIJ$BdjBA^jJ`vUg9y46~;d$>&jgpo&M`B zo$*oyG_+Qi!_rxm$>kGsQT47=R0xKaI1vR+^^ayf406wKoK!VZ`Y|H%`f#3RO^>(a z8iSPjQl2DD5d&*v{GwP=G)=iLl{?vKgUt5wnL$c@DRQx57^MAELxYt1QlU|=uhPj- zM~=w`Dfgw;&PL$I_ZhY(Hv%#3KIOjDm@^G^(laXd2A!1qQl97oY8j+0(L{rk`%=aK z`=XO-_=yAtDfOj1u}7uRN%E0P7^K{nn%ZZMPSRHyr_o6ZzEtPDcMP)qhqeYO^`$(C zhG9|AW?#JOc;kjgMgB$B>VrXe8ktn@9!7Y~qy=9pONYHW88<`08wM%&rMi!}p_87@ zr+(5&3%=B6*BPBuKh#WNkWybNEY)G0gS2^@EQv=aE%;I!>&((gbzPj41}XQYZdRaG z?)#`*om^TcE%;K^JUDu2<5}tSE1k69OC6~gRVUShF%dTMct(}`QVk2Y(MeC;VY_tF zf-lvh2f`w)wOw{0WyqQqe5n;5;4f&iZ|UZy1}XhRXr8ip+v=pJ>ZAo-T8hGvDn*9}tsF`|?AhU=tyY=K)RE%;J1j?C6c&$JL@Cdhp$df(x& zK}OjWU)S`r@r(QCn^^;NQhixB8k4+nhtj4^aZe22XN~nOxSQhTulnxLyi3P6%`-Rc z(y?dP7TTA422)+%gD9%$$G_tigCmw;;d?;sgVwYoMEhq>wG4oeByhFmHlRAQ#dRwf zk+qGXV{x(lvQZ^4dQ0&uAseAQ`V&cN1Sw>3O~hgph!ncX7N(9S#=+!^I+*rsamh7p zQ<5T0>;!2`Fcp^JkEAJ%v-L@Y#YD5XQbb4W#}=2MW{Om8g&&?EMzgpw*0q5_K2Tu% z^op%XM=a4;N)%g(_d_M*_ek}};Lo<=*X>jRPKJtYdgV{3rMWfz9hYMfgsn-jtxH}& zLW-kut#J-Qb`ZXizF&4!*6cbQP;x$O?yCW2<>lW9DT?h== zX%gu`Lkk3!Xl^kA#gD+cL{#x%No!Rzc-Am5o zz0U{^ek4tMq2pV~dAc4Cj^cO{?E)AKj|H`qm5}d2(5N`=Rgi@XL<%>%8TD&{H?J7Z zV*j3`N>Xu6d1_!mVT()N23Oxg$c||iSLyWd#eO8s7T4fLmx;kKR&lnv@EFV{w8$4n zMVK8z|Bf!(ilDSi4j;cmLJG6kxjYK8oavaHl%ffdY;pO~6v;i0&__6=Db6ilu`;v8 z<%bk@CFj9^vJ;en$^8qEJq$z&z{6ABsOw2p?8;{Z<1(P)1bj8rT2<9$Q@U zCdG-m>l{Iun4I_pY5yNdv&FSI4IX4X5{he1dTfzwamm$OD|1{TC<~Lz+DwsvF&l^qXL8H?ED}=G z{O4;mqKYtiCIO;dwwnY^Q#j$i^>PMXUzC}@=HU+6ZW5RX8-^B~`nC=CoA=<0G5E5BgB_t&G@rETGCAJu0q#i6Iawkw>n5P&G*?g_D({}FyG|b7vkCC z67Dm?*a$r|vCKZA$}-ubPWDJhQ?R5C`qG}RFUL%u(V<}KQ(-}ERHws4m1lC;R%D$5 zk>>l{+Z|y5o)<-3J~0pRY&QwY=JDK719w=FnRUORp=@ypOoYBMjpvy>(}=Ca{K3J8 zEoq*3pNy`r%*@e^%O#rT`+S-X!5rph<7~ss!q$Vu407v9K zWsrk1h8d*X0<4o1xdg4X)jahKQf>j(TLX&8(3)}nGDx`v_^sf3oecXt6lomoKIInR z{X7UywAS9*I9n$zSb+7OG&RVY)sg68O`F^ToZ1J04Qs07?_u6)q}&2*neLTNdKync zNTiW+3-Eq|);g)){x5+}TCe~Q{{@3fYwiB<3I-{+0DEuStCOBCC0ZDy^rLB>!k%bvbx<KCoBlZe~6w2(lm*7BsIn!syd|6Pc~m_DD!m@MPQj0WnMvGr31Z1yeMlnknSB z)u{e6T_1&+@JqSD@ZkA+(qFIijn$Z_s7%(cj3ad*@_Q)ELAcmM&qv~L6pd@SHGc|f zK|zQpL~#IX&v_WJK_F7pY?S92k=QpCd+h?pKynBb`PhnN zw@irowP&rh`hZCG3N5sDP;R8#G_SDd16TxsNKtdjrZz-kuU71%M_>}LS72m?-l!=HHZM%vJ;pHPo#FN zh446^u)~pjCh?kA_@O`E5tIvmbzq%CD4^Ism6<0I7P?VzM;)H%s3Z<5aYWmW6Bv7i z{#q|IIbKj_g5ok6wjZ%XAX1n)jtUuZ(A2!bT=md!_6jX%*7_Uc6Q4D!<(nZPMa_ei zp_zcm?W-1p#7J1sJW&CwdO{|T4#Igc5GiWDt%IFJ^9rw)z&vNmPS7;XCdbRP$%w&T zqBu0qjJ-mE@iUti`i6$=FXV)ha3vo-ShwWDU#HEb>yt9`xkg$rm#Oe0EX<~*f^gEr z>!Qk=U# z!KMF^G-Y^#)DuXJ%$nA!33b2CDd;;k;(kf2OV{&5x0)Q_aeD^#zwm`&GXdr;K# zj;mn!Tp;ZL^?m|`d0Cje{a;cEDRjEWmS{XtS($uUH!8?oRLJkp6RYeLqJ9GDiJGCb zgcLQCR-Q~yHYVe?j6x(keik&-k3;WdXEIgCI}%dVtXv8YK7tp;lRMc3kcjjxXx0rG zMNm#AtG~!EAw|s&p`(e)#bk>O2Z?0I&w^&JV+i$gGud?|j(CAcQFBZkEG~JN98d|P z!d{^T&4X#z62)GjXS@fmA_gKw%`+#S5SfoPkDfUU5^;?M%}Yl^h|1681y>UZDQbRR zgvXt|LeI06_lRV#P_F5X;ax^#L1=ny>p`+tXn_nqS%aWLOvZePFfkA*wAPy_1M~_r z8G01)CVPbzG?VZ9gQ##OlSK1MNKvy?C<4SWakEdxF@?4pf$_6q&A+1Ep%`NQ@SRF=s!UvZTFku(KMp;;TfpzF&qlm6(> zU|_*nP|FbyXOr?wW-EYIFA!J6&IynYL5nN;J*)IegesVyiGeU=)s;>=g?4 z8DS0z<2iZ@b|i#$O6bTd8zrQ$CWP*}@rj^nOin9<11sBvf~L7|cc#QxVD2fQ^W9Ux z#6#hWO3cibU$9?dwNyfvPQkr#ic(-A+?zHYrcrr1@E59}CfD-Ejx&+8))exF9!-eY z0_hDUl)j0;e{1oZrYtFT(3x@1iNs`3LQgb`$(&|;x^W_;A-CKiiJdL?ai#$4N~rEPQ2-x zL*r&nGf26sS@*wJx~8Yrjy^hR!PQ)N1>q34HtxJ6tqfA`YTg;&Rwq3-{@SgR7F^BN z{XQFH^8=L(QtoPQXpQ3|w>E6en)Nzq!PQI@f@~0zo_N)}7~})ly!Do?IanvXr9xxs zqy<-V|Aj?5>DfEcSQ9L`nz^#KGsvv7a3bT`XTjAxNv5KHpGVL9sgo95&F3=^plUtz za12$WY06zqPiRgYt~Ap98p$1Qt%X0hxov6`gWOyV0Vk6dT+IeYvKwSw{tItRT5vW0 z7&z7-cNYrNHRXSB)01ljl6%^HX1~=yC*`iDH^%6TI_V8+H&Q1pxSE|$;TWiCb_gA( zlNMaf2370^S!Ws!5Zpr+T+Q?6TIgixxt|Z{q@OTF*m>#CJ|pg#_3b z+Iuw*nAB*dj}iATA$6tPX@a8y`czSFWNj@Wgh%6(b#|34;AjvbgZ$JP1A_3$Fr!|@^r`Hf?Z94@zX1| zR#6ZY;@GIzD%`>97>N8H?*ABH+SY%IMHOg%=$uZNH|&R6&_5Ie60st3) zsQi=1O;8Lbum0NuB#S*J@0yoL zesJuG;$bfdM2ec#5_KUG2_?l|()&BeTmCggvegWvgbnLstq5kJ%H+`A^FiVzEeo16>h~nd!{o%y*fRr>-)ADK=AZ|rsEUcNwnxzs z1&&E7))KWlik>Ktq*7suvYV|Az`qSbF$4v&B`VLNQM?9eefO#pqHV-kc!vW?1GXiF zdon%6_9sp6(&d;fihV~Eq>R`P6_^N5BtKF4pgz_o>~MZ-MSK`n@}YlqE5Z)t)G)d} zHZz~s;zgrC!a_Gr5QM$=<5LBi9~xuIV^o6NvcJ{~Wcz>)df7*$=g#S$$qsqR?W+QThH*2`OrBb`BvZ0h3FnVD({F(}Lz7%XSl$kjb5+ zI!Q=T^T~iOL?vSKc*C(E&r>02nr4&ZpDxAedPKmAV6RL#$P~navv|b=*U%|;S zIg`nPkwf^AH0_1XLRWjx^(mN1Gl4xm_@NfmMhr+wR7xg`PEHQB0HkoUD^dSyq21f7 z;vr1MH7&{a5;d*0)CT&nP6MJ+Gx^8C8 zsI(x1;uW4FA%$5SRPn@0g3>XWtvOa}_Cx(>ie$4gw~0#6WW7dsE0O(BKco=B1+^`S z7z{H)32N16zl0RVXCqyzBED2%imEV0Rqd5cUf|v99%7x%h>G0{Y`BnJO?i{zo?2Iw zpiE3|iHctTku>?C?ju=m(Dj*_*_Q)J4faFjYVOmEklxC|V6X~DUs}l$~9G6&pAZmfT+-) zB1C*2h!ix{BqcCKa)4B0R7SAGey9b_v{OLkWHQCGgc4HJ%>4%20Qy%^vkt(Kon1`} znuS|psbW7=Esz3BRUlH-Y+4PE9#VOVTDmZz9d

    Xif?JNDzWiMQs`DqJ$JR=WWM` zQK3zL|xD z5xbgl(i3!WCQ*ezdhA0|N=Tu#^i5hp1mSR@c-+pMAYW5qK{HKxET`d2CVu=tLW-Kz zMqzU;!eqfL2xZxu6f{lYgr`DZq%*K`DW2jP7K7Oqpq;(wccQQ4X)@>np~aZ5wF9$H zuGz3KHa3JYil^>>_a&O&7jNH|N`Hk9YeEU;yN^IL%6@3T`y5vP6-qmY9Ucbawwi>Ic7&fnt~kD*MTmt$V~cGg}@Z1LSO=pC#8b1CRAd+a5}6B za?MhqNH$ewrr6nEC7R~@Y&{bPM+9h!x6yuBjO>T{YqKz(orcXPi2YD+`(o)Oq_8G< z*IvcZtr~0gf0vj@_Cp0tbKfqnfgPnfGozDZ)nh+2AhWPkC%V1{GZTj(2xLE0U?Lfh zAD=Ss$Ec&JhMHW<#z_YvX{{;b^&ZNBFufKtTPqlTsGw}V!~K1F()G2O*>(4=q_yUe zJXdKlv2~a~eryTxoRAeXBit>1-&h#V2Rjj5)MNbiUJw5!I{gN)@L*%B*z7ejG$&3p8Y%Z+yJkObkezFyvouof!7i^M(@4N~gC zdPA#X>*UsY-M>%ONt@h*9UYWNCp{zbA~(#VV&RjeM=IKNlK#}@XoHk{uoGS&9MbxB zT*^8I`HW|9F#S%P_QEpciK8?#NN-6Ty|}d&JlKCZ_GeA?-Af#FG*a%tu1Jk-MQiQi zsCf)h?!k6yJ;5M7sMJFwIu-WXRbkdW#G;$N%LqT#6w(&XysoIQh&;fxIlNLPK z%i#zaweh^b2LL85c(4`TU=!5Hvg_vQnif3Rzx!V|$eRbV>ZII*^*Y}oxX|v?mT!Sh zTJT`gr5mS{w8qCZNcksAPuZ3lNrn5?f(Lu)sKX#HxM~@s z{F9~S$96Nw(&rEBqy-N)$$K1@wZ2WbNzq9Q9_+9S1$5Fgcme_pzE2AtY?l&k4YH%% z*aaXAiO(#R|O?jqkTJT_BWFD`R-X~9uncyeP5Y}7u_R!lpsa`*xgEe`P4kZ(! zA0^F-N48{J`!s8D)2CS*txHO3+CO9Cwk0)oZ#^vx5wm-H{M`xy5Kt@1))yGCqSF?VD?Bz zQ;=zExM(_E9>h%a_Q=Judn??b=@3R==!hdKd^5%7&9M$lDQhh(*?ucQQJKu}H};P} z7bK*pxwBF@K{1$I z|IG~&zMBQjlfCdv#$ZN@_Scc=AkofFO=_Z2zn+FChg@ zdz_fR5E%kZd&qLcKx@kw|uL<(g!2w;@V%Z*98}g#;o6O-F;5IA0`yrlVTENgy#27BpKl+eHvocg4{( zSqTX#YL421XBnq3#nEv=O_1j!YMN$~V_5Kex;!y6y>BB{XZO}$JAJcBFi{=Tawnw< zH1~GQM@)LT@T9lPi2*`<8zIqM5Sc%@~wpuQn=Z*sDHiC?l>jZ zQZ1=alQYJ~XsC&=@$>Zi$dD^PwI)b&ZxdB(6$xodWjX6ypG8a>Rtpc02WAsmBvo@Z zsq~I0c5j^xgZoQJVHP_F4*pDJI@W9#r!JA~-ulrL$w?{d5|y6GF==vvTxPAcGm=mU z`u#88PHk~kLJH%9P1Ca-#ZDBvQE2HIUhYDkr#eR!vwItIv+`#8HG8mrZbsNBWA~kS zipWg3nUFUnl14(B+*_CP1Ga_C%zXLu5=>UKNIG1um~ZkBl?9|L+PZxbQs{J7;)G2J z%F3j-+~77~?>$;_>{5Xl~_1^{VzO-?JbCQFTF~tI z8TXl+$!}uT>TPwiDdWIg67Ua*a7k~`CE;15>nJWoT?sC?B2Tm zNS7NV+*=Epr+(i=WPa8>b}Ooc6g6Kg!%?;XlYghd0>$pFT+^-mj8LK=lkXQ{RM@?> zKt^p1=a$`Dw=>lt2`RMJ9d7~_Z+36pu44|6oD-2g+3pmzPZAkUKZ-k1xljoyYE~$M zr>qE*IseT-Bs;0XeVW1vcZph9fr>IyAPN$d?A{7YB*Cd~lcKNod`xUH=Bso;Bq7(V z^`RSGU!0lhn-EC^()_-73z`GQU_?qV-=PX-0z0Wfo6Yyxw;pC}NoKkqxD1A4eLv%& zg-wFy*x*XUmSTQLiN}^SM;*IN*Oz8y_{b&_P4j);m^FmhGR&W7f|#G(Tj4$fO~I1;=@6`V?B2Tn8KHuyPlW}wH}8KVlHFVP%L0E(NYj0)=|25M zJPuY0{e@yA(vU9kiwdv&fAVr z#cWX2_8(dh$?mP7Y3|#Z$)Q%AncgXpjAQpUATxP3k{UIb85Hs_n8Z{FOeEuB8kI*4 zu2Ky(xt2v;?nKgBQ^>1sUX8?aEoPQ(u4AdS>wZID)@EkKhtrbQnn!YfI98uJ%AtCA{358tD(-+f@H4jZ4CUU(1iGP8c50w=h44lN7IBy#h!1F za>Mz;@UaGYws>rVlpD^sHcm9iYybXZkaEL$Qwt;ywAQXIampa&hV%Lh7)~Zb*TipX zkaENMr;&)Jn2eoev@~BuaoHvZb+R2)pwI!|?r2Ip_?|NgU zXHtE=CfFe5hVzatr*+b^HEV5yd}d5_aa|G~6;F{%iwv^RluSA)H=I2wV;~0O)_Rg$ z!8*@9WS1Mx7ryu&n6o?a$1*iiZaB|QxZKd3Q3c5YCM_7w{|uU@lX34HMr5OrQp4Gs zEeTd$zE5w~?O%1$g5kWZ%rc$yERLGZAmxVh%Tuj%GVIx}I5Bf;Ef~&qrePQ4)_Q7I zziyCn!+G@draI{zQS*sT$_;0)eV%W|e`|16CoLGx-M_`xH9cLkUpC0CvU%%Ohkw&a zZ^+I)I%&ah&K?rgATzfx`qqNsT)kH`o%B@RQ%~2l@S)%LL$4d;>*Gj%@OWA-}lEriBmv_UKW@AiHMAiJ4n#!Ei49@{Ue=OXSX>lNJo;HK!Kq zq-W(AV;!&S$hY9B#-sH8Fht;w zU(y=ABLblaU((v^VmngP{+Zf(Iv@^BeBb$MwyG~p|Azn@L;EwA00XPq>tn=SNXRNG ze;>m6+Ro(7#OEcX&?~m!IY_KJm=r!}EZ4M+UA2uUx^HT-r({uR7L3?hQ>bU_baF3U z9>h$X7URJH6x2*7PFwB~=#ePQBrP-=OsR;BpI))m8HQ6eRx8C;aPoEu`8|IBF&MTj zjEfThRxZUh;l>Qq(%hQ<#%q5Q6rIWCsc}{gM2e$wemLx&7)%~+y9(q8Ynu0GZzL)v zlb5#QlpKf@H9uwSPn2d=zvzKylC5fCZ2a`I-E(yckvI@2wlDY7OGrV}o~gwUfO_2=m7ndN!wTeAQlchwm;p~SLo)vqA;qM4?Gg)je&h&vuQL|Z_<3wpz zbV-8d?51sOhna~jov;eenEjOmUkeE!6=5J7>;5j3OpNL zy#DX~4Fw)A??e=nQA|bgJBk^+q-lM3`0H0{m6u!Apa0$$JI2C2nVw?%{?>izdRjKA z??-=~LRGR=Eie&g3O`Z#AUsD9zM3{2@nKxa@gi{E<-+GSAxw|W%&8&IB*H>BY9|2g zj-On`v!z+pw{s$Uz*e=t)(cI3-3U)4=AB}Hk#LfP6lRVi<#L=7kY83D!Izs6$%eCB z(~)ssR^*}FnOo~J^%Pt$C2Y@BnCE>FzN(of65T#m^2nN1sfL*qDbWg%6Nge%$U z!9FAx-XGG0u20I$p6W>W2ND)$(-uMacGb^RK{Br7)O@d|}-#}QiZBb_;BBBo8w zO zcqiO(Dy}JSv3ICxEv}KyD_6GUjfhIkWa;!+vwtK_c{}H@3|O1eFw?qxJTMq3xtf!# zVxrPAIr83K2`S8C=gPYIiNf-vIH&YPHk7SuKbj)Br!y8PL{tiWNox;~u&Vu#!mi{z zybtRz#z=AQ+f-6Q3gd%>zxNOdJgDAdC{Fl>%T+okC)LSTwJUcKgc593%bOG@=ChSV zW!>cRoyi1bGke;GqtW(1;eK``Q&Ib2DVEUCR?0Cm=%Z=I^EU#@(iM~ zGTFHY97Z;r<#*^BRPHrVnpNFzB04<~DQb?-hNDk5)*Q8Z3z2M9ThN@g_zO{3)D_pH zr&T1RsJX5>w%i;{&g=gH|1?6MK%}5ab}BZm zd?4NN2b=(jiDW@DL$MkJVZl(`X*_uF0+FI-<)K*G3NTqT6pJ}q)fO}xpFw)7Ad|HQ z<{^@;Y71nm6QhYL#ANf)UI{6-wqG7BP6!MXcc;aOJlU$YpgH{8c!I*29QX=*dmvKO zT=%dgQAL=X5hpc~Y#R%jrf|Z&;_4c@z9=*Ey`{lyqe5UJY?0Ur#Sa?0_uK|wjQLFq z&_i;~opUhHi!-zJ9$p6xr1^dE_N~!mq=pb%g8B0ovB|MjEwtHupLb3+q3f|`D(-80 z5jL?^Eii%a^G!5FOQo29cyyR0%@-BB()Bo0EAFQ;|C4B%?o%y3><>cAfLF7Zvk}i$ zwZAs|dPr?KGzvjwnJiuS=SWCXu%uS|85Tr2X3G7GUS+G=f?9*@mxyAkTCJITql7fy z=cGIco-43&{~ZsAXRBIJHjSq`E-F@^ip&h#8UsvWDg-9rc&bY`W4*1!{Pf+-^O?)H z^O`jmeqKb^S7v5jk&hBh^L-wSIfz*3D(dc}NFB0O?XS(kc%E#JnOBv`qZ_f?2O@hfsI_aHJ2M4IomONj==;zyxBEWsOna;ij7HqW6Bp})}O=q1I|az0<4CL$Bb zd=UC+&_c|39Do#0&*m$EMy`q9bmoa9cGfh`2x7@sJio2hKDLX@;zi0u1h(Y6?3z#4 zHD$76pY&9HC|<=AEP1ivqGqMqTMV*7-`fT$ch(p8Z()!N=OY`XY091TcS#T$Yps2C z9WUN$q|{mW+S9oV^6UNI4KnhyzIdM(zU(*1vpdTgq}*9Q_p{MMp{F(?RMlE5ch<}1 zTBd8pE?wuWLCT%=w#q@B^fr4Ftdka;_4B{u7^wB_nHrl7QtGVJ$Eq>&G}2oV2XMYm z3x7`gTFmYSd8rBx5E?0W)|K^6Cq{7Ztp6-PAFN%}h@gLKk@vwm!E zDxLHk4(e@?QfEE3dJ~~B_fYJRnK&qMYb`kIeU{>Iuk~%u=GzQX?yRp$+D#|D%WlB) zV@(Urddf7=V@+?;d+_9$wBW4&{^W#CdZsL|VUTiXJ@=M0I_b^v_`XhBaMo)dH0F@E z`V>Sc+*%9HdXHzrbj|PY0cfQ3quky&leg)l*Ly9du4%zp7iav=CdG8pg0r4t9gZH_ zs3duhJ(62%!C9YCrL|6arcOg@l1U5BdfOMiQE8R4uTENU)=%FYXlR~Dd0r$%S(S;KuBnj_w5owVSrr<=D!C+W`t82gF^ zXMKK!!3H_A@KIe;2&eo-7$;I9?ZU0~9BHS`c+3ZwOZEk1Cq_DfomKgoU_$+S^0uA) za^eBL6p?{q?{%>~{+IumR?7*UglOz=qq@jE`TKOejhR0at^BO^_Lt*ui{q=bT)2~&ro zokb(6nU2=?@}IM8#tAX$}tCF$LwCc30BJMBx!pY@Ze)Vq-Vo4=HHc)2&1dgoKo0 zPkQbK$Xot3MY2G7tUcPZmNhF5yX>s{(G;E)d--HIXuDanNV}mDQq*je2luHmS^ZNb zkY)V0R@D5tDApbilg-*7k_kk9pNXh?3<^HejK{wr%^W%z1?EI3A3TuI2%Uuj&wc1T z6bn!+La_wJG88LNtU|FySf>u`8bz%_a#*qVzl-IDt#P3rO;53XZ)!Y^v}_XdYj?hz zv8dO#wu$pPA3ssZ4~1?JgwJg{Lwp!la->I2OTwqS;Orlpnd94VFZ?oqA7P;z1sB!+ zw`V(55Qi(dT&@}_xq!y`X}!?oCruv_g_MwDf3O_OWFS(QIgUiDhY%DGq$5g;SVXe3 zF4uIV9^Rjz_)I3d34bsUDQXTbiu=UrL~(Rq=K+b4u%J0QQ)z+{GC92KObID!t{E_k zs6)#jaLsu>!EO?&oHNO)E~e$p|AdG1=#ENF=1$lONj(VQ*$; zhPOj{i=B13nrrgagGAxjuDB*7LwFvD6gu6tI1QHMtW3_Tm>A?PDlBNOngQ45CnlHI z`XnJm%^ef5Xk}w^(=fP8?8#fu+}{t&4ib-wYtNt9yaSP<=Jg3U8suQ|O)}fV@bB1={UKRJ3-5-c&PhM!V=|1Vt|IeYzOM+3II}(6_u`VzH?^8{D@;sp&0;%es)-)4@ zV)I6DNFR$HhdB^P(|n&DI?N`t4D@s&iB%~==Qv2_C zMc1Qe6}88ireNw*VL@#~!p#JgXL3lhXcE$VpL?I;39G>Tih;9L}{MhcC3!0|B^%PvPhc2(q zOq}OP8nP!Jkjb44=hGU@q)31$m|bpxiDWzwUWsq`ct(xAMm5yrT1s`mF8E_>O(8FR zLuwDYz7{iO*C9fXx3-$6AzfdanF@WcNm^?fNl)_w7>hd0H#m}+c=qJ|-K}pVJwNBh zc;H;Fcv`>9AtA+)?6VXhc0DG$CC^VJJL?uS2Q9?2iRVS}^m~M3P$1HLxAPh$B(wqZ zzpchD$o{yXY@S22G9x-bFDstO#n@AaCoeFO%m<;L*3@cBC=OwYXHncEmNZw)-a?l* zW@gE~=wJe9n(y<#dPL(*nBUo?5Soj;p1(HZSHpZw_6FBPUZ@%4cgDBk-$bX}$8|dE zo>2mQG=KMIJZvqQTyqMcO&HQ;!g~Pb4&HnW2Y^=0te<{YSHqWhJ4cw+P-it?V?9GY zU_3Q^aD1ee!>U74{sO`6`G_|)^5#K2qZ%oFfxuhjE!Iya>4WDkgOtBOQ0bZ7Aj@a3 zX^_$v2)wDryf?^X^}`HO`T{{%+}&8|xwT=TV-QVg_bGpYU|8J(IvIONKO~_vQvL$L zw*1d^(z|JJ5uKF3K;TWj4{@Bg^~^`2nM=hn(!An>MNh4@y} zO#OP2LCRksSaL5|Cp`=2BRR{O7G5CuZ8Z-4tmzs329b?MN?#!G7QLHMC%uI>Ag3zPn znNC`Gf#B!rIGbrb)OscsdhS~bFA)6Q|E5lQZXSfuq>=I$2!@9C)k*JwpAjQ7Y2gKe zr7tEJm&Y=#l^{ZRfRj;ZqGi5c>gn^)Q&LkQc+-z|l zjWl5(82AbS2Dj7QFMA7(G+`js{HBp|1A!|vVK0p& z`-(n?d_+^?nlLY9rcTbP_kuNfA#qbQwSwN7-to4q*#3{-J3eB2GE!52%_}^W)Yy6u zyhs-@S`Th_xlI6OoubgE*n`2lK!Fk0JK>gCc{cAMF^Faq<%fa54=MDDC3xfxVr)#l z-jx-axDt?ST4tp`MU)++C44L5|DQ=icxf59@D62<#!Td)T3~PyDySK55G(~gBi@hB zOxk`pC$ND)V0`q7rRDo0M8#mTI7cu3$RCkApB}{?TI*O$CE$g=Vwqn)0rX)YFrmMv z9-d~zL5gKlMqJeSBSp;45bnCrYBTjTzXJ8^%csF{B)9basjU@+rQu4iqF@i>mOA zJ6DMh=0eU#;QCxHd^L4?${)harFxj${)B~YJSVjH<&tJpKqwb-&w}-Y4FtYwFOVO? zuvUgK`L>}$LJBj-mZtJPqQXJioH5H0$p!+srY%caXhtxZp))l7k)r0CiQlLXOr#7pxsnJBp0&d2Cg#Y!Uqmx3MXb}PvjSgurQm{^M@*Y|38c>VlTyZ z_RMQ4gbf7pUbg2hiW`rlOg@ch>4h}xg?9TA+__@4Rcx*M7luCoUnG9}(P{1E4YG#NxpQtQMrsA)R zVFQ5)&72KR6P1<8ECsQ7`XfcnDwi>tvoTrdFN8d7ATXg>KV&~q*_o{Qv4?~dHQRNg zlaXpYa5V2Vl1R25n9%I zM-)+%`RcoenbNFRybI+o#!T%#xcc*_`D5`GG=~+uNo;ZEyM}Bao~;K$osI1r6z@OE zUxJxFqvL@=Wd+86JEyF!OKeHzM-HxLN^?U0-jpBfv=TIC|1pWCv7PTn-yyU#^S6iI zC7!JZzUu7hA!qPRgu$xy;M3nY)ci~uf+c6P3T=rg%W7YnUI)YPA*6c|z0yYLTn?l& zVB#GKX=taj=!R~DmS;YFoz}#&^+0H+VLY7$=Bo6@W@3p)yeeZ^Vf4lWJ-X&T$vHS0-2D>L8bY)s7($;`fe7BJG<9#4LN z^4DVKP&8D-Uu}&ed9(a0Vrw&hsWP5ywjTIutuT@g%D9NC!{pr9A(3n#FroS1;=}}D1}V;uPf;0vq@lI0@Wnu6V@;f=NY*z<8Mto_=zre+f;*;)*M283g!p&9p1ACp2OvRqK-yO=CMt%sx+S zW9IWU$W1(34}8^GsBM)0X?$XngcL^AHTBXr(!-9gxaj|263MOuLDSf`6Sl0O?6{Uu zT-_J*VFnwLUuKMB24!!~%;22r2TjJr-{`Vc{1O3eRJd_*>8Hl;Fj$!P3;jD6<(zpK z6EUO4oZ6hdx9ru)Zb=L3q<6oANM3A;si10}K90>v)%5On5J=ZAGuLXQ zE6F*Wh*i?N-$5jEPsUA)+GSa$oz+S2eg~0^HTs-R+QzTZN$-9Kfef}6iqJ^+*P<9& zwYJ{<4gwj{Cw&f$4C%z*<))I}{SE@@TF_>dM!IGU#H!7tC7C`4e2gcVZIbAu{e69% z^zL^MG@WJE%+^TS{(I}B_pc%lNLSD|+-|6&5{o~tRjsXezk@(JryTF2knuB{KhgFre@zIN-iJ&+pS1C{jdcMwQdhvio^($#V$UScrm!|x!HljCgF z$&tmeM=>={(s>?_1}=@$e%t>BH|JkgjmU9_Bk8L`&S<0$zk^6#S%P<~>XUu?xc+4O@H+^kOWD^> zC;zSF)HHqg9rEDkorO4#mS_!kCCG=kK1BU|IC^%i>*%$5d9QooYyDq;9IFZZ`8yDz zm&fNV1n|ds{CE-j>wIjy>aVH%-=^905Tbr21A;H3>EU`|++$#|Rg{Al>p}?D1%dIg zS(DKLl$FW52cJktAx5Go|N zWsk;8f-gZ}ibPd2++A4mZoWhLqcf8#&q^>QqcT2v#ZvDOZc1V>S-1l3>HLvD&J28R z6?&oOvc?T-{SFEqhItC}8;u1X3L*LNl~ zAHPAHV{>h<#*Qr^Ma?e*M-qkEpjh4<#jA9-F32^l!5QWgggH%9Fi&;~DQH?VEkobp zMX6#Lw&)pD7H6g8Wdm`_v? zlXU~4fhs448_`7sURVL%tRD@6v=TUIP!*^M#2%;dHm@jlFLZ0BH^Rc zP5kLLlDkOmBYBAAF_Nc9o_khB>w!PtQ>CyCDAqwaGt!UQdmyyQ@Dy8j&B;sI5%MV3 z@mugZk-Y~36Xl6iZ-OAKuBGarT?jyzsHTU*FYq!>E_}Mtequsc`1rCgiLlU(?}ZjW zEINYgA6VW{xdM%k%_=gS5q5h8qvI zF8Jy(kESin;Wq@~;HcPA{2nMFMa^NuutmpbvUlshL1H9KXpZZ+ji>}nj@lGgLW-K} zQ>`W{A(Jy)A3&aqs%e-_w!c1{p!|uLSyW{b7@pET#zUV?p?0C0_C3o@1>iiU*f!Ui zY)W`{<}s8#F*ARU>LwBP%%;!)LHO3SLsUQ#F66|zxl{<79^}1j&wLttVNxdV{}=3q zH0*`+9SGQOlQHvj((hpK_?b{k6@mNdtC(AapCHPqp0vAxJtgt#fVq#UoF zqa>IflF5?!a7FYpX}AHl56$-{<%gnTZ&@FED4QPSYV;ilm=d_vSL`F( zkCl+ZEVi#W(~Y1sO#b!~W6GunADSY$`@l`2(lWWV%5ad&De*xHyORBIZoD7H6RX(w z4;UjMh4BfYtf65@B9J6NlE^b$fwL>1)6=2gz;P`*(2v>lAg@wr^_UX~!osBl&i{Zb z)1OJB>0y0j6Uv@}nH4MX8icJ2a<#y%i}CU$Ba<7SE|QQ!rw1PY`vFmznA{WkC&=xT zn9w|*F+Wk6nLOPcOOHQN)Vvq`lBg_9(&r!$$<_rEnopew1F|yt@YE~`DQG$@XLb>l zjmfuNFM;Ge-N!=dnFEfP#j*9MriW-_u-Ez{Ma{5979w%`s5pW$VlK1kLEcVBMq1ih|6`~LjDUR;@ah~-@ikfq3FCi!&lM@;@Ad*cFCNx(q`9u`vuHsm9a|)4c zdN4t5Nc)hW0!*%X+)+Y`wLLOz1W^T<+;s{^61Faw&^&hmn_M9#PgKe(Aw|uvCH50l zn8`;?VZUS3gP>^$CmbKwK&c2bFCJq&*nl7~QNlYlobWs=L9q^9B(^B{AdAx3jAoE( zB`L;?y$Bvkf0{oQZ$UFtz*J(3GoR?h1>)KCAk^8=&Y*M^9#Q@h%%nK-FBq5}1jc_m z3%mkblKHHA3!Bo+v$HwnFU3rbaYH1U#&%BL{g&9$%=h2+mUy-<_^PweL+jdNA1cG- zv_9C9eEFq2Ue2@+oIpvu@{vkf` zY6AZsZ^Rc=c=B@e(1{IlqF@Cox&3}5Mj@WmVpf|e~N;D1a zbcXiCysZr085oSiDVrXIc1D?lp7C@hO^=y`m6JZ_KQm^ZKT=o|oJ||7A*d>oS*)0Y zY$Fgf4SnmZcLh62HD>Z>90?|z62DCK8wk%;(?juyP%w$2GEv&5j>pfV;{0PZdbkEF zw^)Ezz(3d45c1L|kYOgAd>xzEhRh#Gji^Sh zd2AJ)uSU!qZVN-DKTTshAMC;GYs~!h&X~Szdhk_eVN_p@Tu&5YdBypp&wmn97*$s$ z+#UQdJw$6eibys+2%3hzb*0&XyC6hhiYqY7D=^h4F*5kaecm56SJ66+h;PA#Wb3-h zlyKgTXDEM5W^xvI=|xx^R6_^5YBs`vwqm~g@BeWJ#-zW|D-P>C#os4VT;AN1^0fx( zJpc75DThv{#D~#B=wRpE*tj%P$=MmON2sKCqlHL*-ndRDKV3#>q>|o^76R#NxHqvz z(tmWuR;rTTjTR!=wbC=4>^QxEPI@<5h-4{iSDh@j>x)i$H(Cf}aNa*{8X27Pb#-J zkzC(ngHHZ+a*j^QKUkt|i>4asYL)DnPI@<52%4@8H`3_jFEiI`qz|KoK!*38mP{kV zdsM}0!sBV;gC%yBo}-bj?f3L~>%(XvXu5JO*87&eJ>jON>BDFtkRkmW#LzTD`Yf)i zkv@zT0_l8ECZR?;?@YvThuay=yU{`*-NE(uYNXp4znn(;Fj@$tYr>Wt8tEF_ql8BK zFj|OYw7Um&(wYV_9M?96ccX;Gtc)blCQ|5|B`Y>7uq4dN0eT|t4k5#?vahtWbL3(o&bC-XkCYNQXNg-GtNi6e-r zxyOA+BL(-WuQ}A9-cX&avk)&fxwb+G=!;BRrms#W3P&&>I-Mt{n}V=C^fLSZ^}{UM z6*)|5>aPj+R+1X~Izpf8Pl?gjaVl4G0&tP4D1T>31|}t{>0!jS32z0ID=*#?V`cI} z@#_*&7zvB@F(MhnL5gx~Xit#&O=(*CU0Og4R!hYaBOJ%FpGiXiZ)v*k31yGQOq|sR zz!Zt9X1JcQq)wBF@<(STc;qfHC8IJvdc{)Co}VZ@QHmwA6}x~x@<-Iprv|ZyrVZOd z1q5&@!^(U{De!g3N5!)AERJ$9nVg*fuDi)J}SLD7OVNUZh8Ba7{$B~ja zRJsQ%_H~%3ZILs0@8)1K_os{!Qq-)`5KmbUljV}s1_@t> z3C$+<3`9AZtP_sD^+*1gi75IllJ`jPl05Vi5=_BRju&wV2vd+?@eQ*hiH-!jRah(} zaggBMY?uRy6N%fiCtEj_M^Cu8W}UC#LWu1ZLYoXvv2{&BTsqORNuxF>XEre7C=r+_ zPo#Pdhj5r6yzgXE;&DV(tlRpbopRwl*4va_^>ysn-C82->Bg`Gg7BGxZK#k?`mI_I1cLZSMN$>j;oG z$D%(aq^Q~X1NQa!Otz?!9wbJ>gl4a|V~I+@WRFy3B&4W0r`Ro`a8gigLn9}FJQr2d zFq>?@&ql0{HD0ledx&Yyz7AjY^votvm_7xAc!bf4ZT`2hri7Ob=}p-aGqdQ(afz@n zn=*OkgzaF#QdB?^E@VSUBo)HG4qvtRkal+;tkif26x-294ZV)F#kdQ)Sb5Pc>TtdB*AKXucpt}`&_zdjF?9PzaA+YFq zT>qwIGR;FQML&~`decIggiZ{zzdm*~i0_#qV;e|B%Iy#N)LfNs| zDS@qn5puDwL#`IsbLcdJGBVk%2p%MVq|oVs!|(PdDif3a2W|t&rm zua1WzGn1o}|05wq&DjU45tW6>X@y!4$-WK~?ObNVcw}XA{s0`G{gI;PzPpc!%EsjS z$VMPBt4(Mgt5Jlg>`We-{hNdoHLo1lMN|$Z&mNgYB>Or{Xg*$vhg{QSWM78~a&XN71QlR%KyXY6 zDc1J)wFn9dGC5`$P6q7jFrm4)`eC99F*)b-RS79-o_)B9sKQKczCVRX_H_uFhH%1h z{4zo<%y-4Hv-LnQTPP72FTts2y>#5Z3BD-vmqLFxrFmmEuKtQKbM*|CV1JrF7H^Lx zc}dO@Tb%iS&b1_-eH}ub4ebnyKJ5+VFTu>0Q)9ru*C8-|+ZhykW-YNL!PED6Ajp$z z(syT2_EO9^E+ESCr)g|wt40rq#jc_R)l8X+cy?#_s>tO!n#+U`FT~R5zoF3LD@K-YsRC6 z6_{CC5xW@sIt0f5cpg3g&5F$L48$CgYaST9oAOs;W^WMV@si}Bc3sxbNFf=faQYl1UVij_oFW%7HW^+d8$LeMnytuxJhsA0!eoUz(( z1%uGUFGJs*LD?}Tiql!EB$z}|8873Z9!@;%bar>(BButIlC8#gl;VzBiXr567UNHR zt;tL-2f|NzZ3{g?Tu_Udyhk2^@l#vFNIEO+M32^HzD#c1Z?QW==%FaB6D4?i zSTucT8r%8T$r;2pW`0S3+?TMg!v`-!#?FmZM-bJ7$#o-(OGt54-))^lR8uC8&-zLv z`#JP`8ZF>|qL6EM{%@yk4Un~w4~XXfq)L^Axpb_K@Ec>Fvnu4s3+QVA`% zln-BGn5yl!j*TdPOJ+V77~rM0qOxIB=%ZA&5Zem8EAUT#Os7X}t;pxWkDhrRI9I9O zi;2V?mg36$Q2pG(m~_KUw~MwK{=6jg$vV#oY73J7vwmzUIBXv!CcGrOCa2QL9UCj@ zq|{5|iu{0Jo;6(w7h+*iHRWEC35EOUj-_{Z%GZc+(TSZ$}=OS1ROb&U+!{SRN?@~B9?B<@(tK5L{q`pXKMrU@@e z*GeBW($#S~Hh!+HMeZe8v!bg;I#>3=4WCNNy(GOaoY6>E_w)#GR8sCGQ9lMlowsj~ zrPW9iUXpwFdup2WRR%ctvZjv@?GTnR*R=e2%G7x~InExPlzU0){DONYm8|}GmqwcK zlKi#eyGDlpF?Ov^djHT4v9`B&g=?hi=G~$iX~Ij=tW9p6R2^H~Lngc=%XhjoGGy^M zym4ky?j>pCg-k`#TpMkCz?cbw2j6JC;S6L73kH8(zbsF5bTB$>A1 zn68rPf?n&S+)Hw)!&{v^(>S+An(&f*S^bAjeu|+#WpXcx%h??@Rcjl!1~wNSm6&ob z$=Xf&>~pP5+*cz_cuDFkysT^1Y}8mIO?XMRg>BZ!jh*J}q})rAd3gt&Os~|`NV%89 z9WAJxM!J>Oh%>l{On6CJl#I|wSL1m$jWppUX|!g7PLdZ?BTaZoR;T!=k-@7>BmAB&|jWppUX`>(zQ|E1q zl5sWCgqP&?)Lc6GtlKkUL@>n_DOTdRv zqHIjwU$h@2Tqtr)%a9I9h@y5=mE+FE+x(wN!*RpX>K+cu(U@^%TL%X3P6Rc>Ws)V6 zYX#+x&P;-#cfgd4%J}FNOQn^#=7_;$_CGU7$REcAKB$O2G@}w?TI@uMW#qVyCE^$^~UT90SEM|?0BvST+6d~)H#Js=#y%$`1OiLlU(WrP-Ao!5v8z^bQM&s0Rm zv6sYG?FI6#6FX%XlQ(O}k&wd7v4xG#K~y-C-`=bzl3gfrOveFbOGY z_M17MAk~G^abazc7zq=a!-i!bG6DToY=e#smXM<6AD0Fbl#t1ZdA@->7gf_Rn`}## z&ZGQ^n3>so2AIoH86UH$j%R3WTUXAf0wTGPzdoEYCA_Ik8p@xTnRROrcKZ_+W|MkW z=e5Un{;&O10Cqyfws+V}Dui7q@?N$lKe&&eq)c9J)yWHK*b8m%+DxVV$(XtE?L8QN zqJ2Dho({4{j7&{bawb0}FDxO2#`0d*LMSP_3lD7ylw?oy(1DUxQzCD1V6wbev+;sQ zvFAFDll{-6;Y!}#)$)|G;|@%**KXbl%m!0x_CDQ<5`xJkixEH-WQK9KjaA4}X7Wy%}P~=q#Emi`XWO^p^{MX0}X>_4faK5Mf zSU!}%lKf#<>?M(_1=gxOk)VuBRzAKEYFL|nkV2;iwwi;TBomVj_dfx--8U(8dSIuZ z{6uADvR%!I5>nLc|M3-3S(xnA6}`${5+Ah{HHW>&6v@iu;I*?Qq^LPR#&M#uF*)&% z`yk;$F`>E4_L`{dOfD*eODcb)sJZd!LZYyFDS>~z96%(yP)um3)ZPVoai7d#Pwd><0F1t`nXtwLNil{12qzqq(_tYk!p!iIIC!%oL}0vx6Q1?bvE=Wz#A54E9JAhI4#_na_QI-H zjG4K+Fp~Z>e=OdD=7~eN7%R^Fj$aYvu_HvNv$35=8MP*Ax}SQE-H znclr0z#X~gIA1SN}L0`J}AgC&n zdya$<$-WLj)7ZEFydFvUt1)wW^TF6pyHEsW!yIxpToRM=W4V@NlKT;gki&tk6)s)FU=lo41yHEs8W8a=Wj(DaSGn<#ewZ|?Lzs#{!(Ls9f$=gPhUb$$IfY7S!KGYH=rUE?JK;Gfe@kX=G#urnwxY6OR9u!k%ZP2o{6CSn zs^kAi>#OFTQK7H@fpTk*F7=aJ{E@<_xU$B>^=um^6W_l_n*8d`mnQu@JX{d2x^z9E z2vQVRnHod+CwLq#&>dO|zs{G)00-r3&t&`xc+|oX0h(~WoF6_}Bb{ge;1eB_a_39t z%vicr&5XzRYLZF0^JT%ED>^y9Z!W#Ia_7tD{aBJz%?+{bIw^O)jB#KhtK^6pPjyo6 zd>Ir62T&%1`&AjHlXBU<%m1U5r;RN}N;sgZK$3w;R! zf@CJ0Ut{jqN%^O!tU0XDc-N|U4|P)ReCf7nf~M)}+>K)!%y<*dmm@iF@a5WuALv(D z(=_oZD(@Qh)=1Zz!ML#DQ8D3s>EG{-PX3y=k4~QAbtNwSEXo4vS%*UQm9}YQ$nNN4 zG}46gC2e-xTB_rjs`YuDlsjJ<^u{L4q`PiT-05*UO*mgJL?FmjHP2k`rjaI`FJ+7U zqm!kqxOQPp6Q82;uHitPe6>Vxr`-AC4x5k58nvD7j@30y6V8|PJw3B8ZT2volsjLJ z9mN4e?V-aX`6?Up)`at=+onl6+35=|!?=e`IA6{$TB4JupZu$na_39g?J0G#lvSU% zCY&!xdS}*1ccL8IG))uEmjUh>2Pw=xtFtK%*KwKrGLSX>kbPtvbv*DT~1YsvqtkoZ5 zrDV^H3C;G)anN-#*|hZu3Hf6tQm%+%3Ny!+Xx2-j!a>?%99=~uduHUCwv>UT z2*L%HVoO>bujKrZqUO+P2MCJKWUsfl+F{R(3C*#w5)qYv$&rW9PJg7Rx%vTKJ0@gu zTB)rd&ru?18fKGiXTV42^B~^8Lg|av|&IJ~Ab|{S_ub zVrI5x$0OrUSeQ+d1>qZxkyHTI1;uvc(>p4JJu^a!qtxC*+B4V26;@Iv?=Hg&i=Rou zUTFI^eJ15k#>~?Qybxs1j0v@ri)Ij&9HiY^xrBri8jHs}Vx~~THIt+2;%wxP z6lSq~O>gWFX_)+dE9%Lf86TP=xo;B2GcA+br@}MF&KDn~u!q`D)WST%i9@j;DsxIg z3ga`MvPR&>B4RO;rAU^0hAXh#DqQ}gL&1T0pCG_v&y2iEAs-*DAt*hQm5*Z?_?a|% zW}5zUn(`xHQv&M^##?T7zR1-A+ZV^Q%E)Bvu~j9c(CLBw;$x}G#ALT3NkL+7HlaBz z+Df8uoK*q`oQ}WTq^Mc-;4FgjF@rX#)e*knM>m_S=loqF#g;5W+B3^ zlFUD9`ref0%SMQp5RfX4r%Mqr`O`GCGpN|tXoQvqAC&1ME=AZgw~Ia>pz zI75Q|^HN(w$m>ke@jhj*$xPS{xB=v~O|mH`<*&s|f@x1BwKa^SGmCW$v4|8E=P%J) z63@;TU#<0wq%(JS)V2-Di!7XU~kFY@9=_`Ug;c#59VtaV(s8*uNq$Ugm?)Pko2RB(x#(omx#Z zrP=e^Ys%k|LFeDn@xX&ZXTA1P{0z+uj=K4i9awlTx3KJ7+yC zDO_83mi4c7QtH!j2c^SAQpwoUaA;9`Nb1uGu@1y?!esE*%cXQu>eC5rYC(|9WN4#R zxZzMW*gOvuDfj7&?STWRsyVWFEsZqc(;0AYl1{2F6z(DUC)BvpPyJIP-Kn2X(lzBi zoiD5Z(n!~*7{6(x+@}*!GyfiqjHuRSpiX*!0V^yi?jE^uVBsEecbGPK~Fdm3rNr?c$U?;7b^oc*~@%6&RF9eA^@w)4tuw?@i+ zI_^594(Vj|`G0Ao37^jKt+<(0XW!xPeRNX#2{rB>Ylds2yGww+f|>B?EEus{CuhAu zsLSJN!l$$PYHE#it@xvaPD*_`?uwJ&YNWetlR%9$;nVq=@_|OWKJ`DYk#e7oyVgCt z=u*eCTAr^uDfj7Ih`6hfuG3wPYNQFD&eDt*HPXFc#7>Qr`*hsa5(vlCnecTk!Z98d z6F!}f6A>V*i3@DRl-{15C<&I>GHi_iJQu%Z{rwQts1n)vBPA zuF6Mn70a3?d^*=sPu4VD7YFv%NV!kPZCi0fC%^Z>RS#>L@aaq}Z`Vlon8i4dGAZ}z zxKn*Y@TbncWG9MfqzRwS{a(8@(siqL7mYOG)46Z?O(6SeqzRwS*@Jp);yU>oF7UXW zKEg(Ecc^s_*BL*avUP=+l916Gugb5hNGNi^6?myJsLCF{@x3Q zC!D8+hKo8&)t-o6qBB#lGhz^S_?W0+?~KEUf}&!n({+P{{BacHL!j702m2PK0s^>{ zbuX~?c8bTEbpz}m;qdX%PLb^S z@H zw_;tC9aGF7`C}$huK44TOhke^jQCTL;C3iJpCM=BPqUHWb~gTeBny!&MzR#iawLBu zS&4*0zBRlCao^bj3S*sean1JhaZ(;O+6ZkjJjFKa3S3knVpgmtej5U2918b5#ZlHN zexmXq!v;Y(QF7d^An;Lafd#Oo%Z0=H&Zq1l%(x!n!quO!(2ZLJ;S8Pebl_EmVoULR z5DGbu%K50hK<3JY-6M?2Z2k91NMYvKIuA%sR5+8hYTqW3eL5yI`<$vrR0NaV*B~DC zM~a$vGhQGnK9d*bU^ii(jtR|Y0Vj#VzM$A1RZJ=&1x`2&=+8hND8PvGmw<3!;c zsn}1JclAO(F&JcL=a9K zO0?7|YZA#0A0L_`S-mpIv`kj0J^&;yz|y{n)~Npp%N+d^ASbC_{fM*Nq@7T=YpHDbV#llLm*6!!=|B zWzWD&+!vX_WI~Ok9pDJf--xJ;Oa?a^Eg^+YcO<!a!`>htwG}n9rhi3H7A7;q!=B3yA0MR9tBxFxP+MF$6Idgn-g0Ms?j&{#*8Rw4_HCI%ANf0hr700|)>p{Xa zVM23bcvXV(GP(M5bO|YHUJ9K_R6Zt;OoIiN9X=*BA2mg7^D}v4Hb{2(m>^#^LJ(Sj z$)`)3Nl2l#K^CPGQ3aX&m>Y&v_UXtq>6?cTh!g@DWZ#C3&L1giW}k;x4~HlvDA5T- zY3%S3G!5ZIP^N$>l)VTuDGR3uvxO3Y@e)pW*2|z0P393>l=3;=d(2P8&~0c!af~ebryQ)amOA+m0|MeLImwU zlZId^=<>|kl)o%9C(phIQ;!l8YPY8KC8`{g*RG$IkcM_TgOiOXwmkFS3vDKz9X^7x zVLY7`S^n4CL{(w3r*nd!0}M{9QY2#lBUP>;GoJ8!2wLnYMUQl?Gc>7}-Y zkk`3<_an+*lbM-^Svj0QLD|^C#S`%~*J5Vw;Bu1M8b@;Lf6Iu)^P)KaItfj7_z0R& zS}U}0PlxXW)nRhS#;Ouh9Ldww*AZ2h$s@IKgTM|S6PlNf#38C4ljj2)NJwLAKg30A zRfo@mGKq+1hmW9a?BTan|0AXWYd&q=4ooUa1SU!k{X7#~(QAJtwjuNX9zygc)pRN4 zun#q2=4;Gj5=}!p>C14s65ANO%XJNx2kh|iRcFtrx>5w=sMdtZB=r(YNMTf6&1t63;TUfWLb`cd|l%(ScKt+t}Faa6|kz^Jxje(+y6NRu5tzG^Ov%9Jjs zX=^4YW_%?f#ZlStZ!eDrnW3wCGvt++Nmx=jTqXiJF+S5Z^?6i$t7 zJok%E%3VdfR^yPQYVJ7OL?`90qD+^8#iuN2TpxvS`xLQ{1z z)$m6;DR&hmNN`^xLqeZhbW-jr>UsbR5%*ANmxlXvQtm1`)(OV|Cf$cNz0*ibGJOt2 zdB{C8!L5F7kV>Y=f)hH=1QV{JCgbqHsN>nN3?6Tll)H-3EzPQt?lf25=%n0Lv~<)P zjdU$MU0fqgxQeEy!;_)bcFGgHp5WS=a21t`oUW1XBBO$JQtB#lyB|)}NoV{D8fn5+ z)XIXx1J^d9#Vp)Rb8Y3H{^OpsZlOlH#|_%0k#bj&J1mVwC*2QmrNx@^@4X7Ge-{^1 zT-(q(sjsJ0%u+byRlL&8d@eSJ8)ESlO6#zl+vbBTcx9x_r2)lN~p-)JPMq zq6aPWX{77Us);%&cNI-&FjphV@1W0k6Rx6dt32)8+y+-#+_xrNMb}d6YXWUc2&Yt1 z?kZ|kIJREfX5Xf0q})~H4nF@yC!LdrX`~5PQI`QTbh3RT90|C#vE{C!H*~wB&7l{S z@otq#6Rx72H*hVg&Y{1P7tu%)uA+$dIQpt&XdVO$tSNUDk&CmtPR9A~n?{;&6?N>X z?+zhtOAOXX6Rx7+3vqPe+6E74lvg87xQaRr!_k9DSNozFHPVEu=Zm+CeqAF?xQe=bxT=xvj`=faq>q482vx)XdHP)= z!{27E!X$?gZVEO(l4azMw@|~@RR32$exy6_BUzVm)<9CB57FQ+p}`*&<#0Y5sj(j^ zf%*~^E26=VWQkoS75zK*Fh%)LeLI+xsHTSzV<6!rhb4IAUSg~OEkUQS!}}wJUa=Iq zl$#(Mlkp>qfy{4C^Zc^|L{Ym*v-pSMUP!~i)3WU{T8^s|#Zor-92j1-JS{X_D_UCD z!SNzGGu2vfPnI-S!_jRJgWx!&SUSAMp2bckAN~2`;K)Z-v4>vFzy+A5?9ICNt7Q>;n$l$VgA zW~rOE3BpB>V$Gjt3CK0(G@G63NDxL=v6laqUP6kRgK}meC?1pa8C@W6`PLN4DVHV@ zr9NvTwkIZt{YWNyXnvcVMB*}Eu}+_a$?lI7HP;WqB~1{Me-zCOvb68o3NyjFDLnM42dWt_i zNAeQMYtK4m3og5xYUSdZovFxe8i_ofC(`f~+X6Qtilk+edho^_)P!w80uyDO;wK6( zX%f5_gp(CRmjt5_TX;0w@39|AD8winIU4t#ct@puWtBf+p&LI5!dVs|W(ws((j5K= z!rZN%7DuVQK;~;*ov1J-bJU$JA%&S^>-bA@qHqVG*lN|jMP?2)P@K@m)L zxsRFPj}$e}*4a!{d?pX2Ukef=VM6oDNjz5xn7lYV-7yh4wNr22%cH%w!*3 z7EB>ZOsI99jlB@FP_dWalTJbkjdfDigl?hUV^iT4ECrV|s54HV>_?KGizS&0keS;xtjgVsFp;rABo&g*!}&H!YsDGI*CXs4QpP# zGMz~FBl*x2$Y{3nAk#AWrO|SbNPLjO4iPPONxYc(1!S}s${UnKB(cvLcIhcG97YjPOicDyJD0z!0gj$OGO=?_M`XdF+;CTJ_ z5rjoXaew<`F_G*ll4}On$cD=sY(Yw}Yc4K~{E?z&v-DVI@-SKV*Z`0hC^4bgZUT-5 zd6{ha5X+1|Qq+81vjkBHrIg^20ZoWxKayNCBzhifvH6+&ZzzI%_9K}f-C3Fug^LX( zBu+^*(H|+)HYC^3jRX~BGTB6IJ?ttnp;;{T8=?v^nLphL2`OrJKGv0}!c5i~{DnyN zBMF*@a3ZAbj%}2`2s4cbU^!%OkibLVFQu5-a0Tu3r)g+sX!eVEolu(j|I*^H!LA~qol(Zd(?g-P z_CXozpAwoUMi(!nAy^76IdUjvFUw59lz5TAek2oW6}#d$oBojXG%q_8H0Mf-}i zuPT%0@?z~{Ka!wn?A!0kXUboVnVYSuf`P-wFY_^^E#Xhsm@Dac$&}6h|`u%{)ZaWirRz5F*)+WJ0sl z)L2B-W3tHbDiYGz+ScjT5L=)5ns43`&)y(G*)WH~n*Dcz@;6|n{>W}%Qc)r>Ugm?) zPd!%cA+{m&?K%RLYj$~$OO{5=bV_|rqG@dB`1^~9ZOr_zsi-sik$lxzsO_{xKuIWf$FgQvQD-;Zq-S-2kP*5Ok7p- z(2PSmDfd9-UW1^DNq4R?Xr@|Qxd*E8b}WM`*}#e$CzX_YpbBOCu9JC#*Xg9(1C?P1 zjvcHS@{8>^os@f^`UOwX$k1PN?a)cN2kPc`EGlX{uND7WBTaaq^8Jd9MJ03RdaRSu zZ$NW(J&cExNmr*~t8`NCfhuqc8>p(8H+Zd1$~{oq!nSFoYtzM|8fn49fy-2P*B6Mw+HO)$k{prU?&J$EjF@xNk$-RmP!(pE463sIvzzX{75^++TE3 z>VXQ5F?gCr2HOioYNQDd)Ud=jVyUxlP>b3cX~F~bVF50Q)H(F_aRr@}d!QD4(`Vn0 zOF!-*6CS7&<*^N_wLLNgM^PqCc%Z%oW6M`-`(eR9Iw|)+^?pa-56vFAt7@bP4-|d! zm`hql_Bq`fl5zktRG)XJUkDr2E8v1Vvn1 z6CSAaQ&;L_nrn(in(#m+v3O=e!d?10WWobABBw*s3>gwVy{2ix12w$`j(FU+!Bc1c ztC1!=Py^54u&vIaeiH_3q}&7Lw$H>dKpjuzHeRc7-tDTsF5Z-P(zpFD601DpcXYWQtp9@h}rw7Mn>4$1!<&@P*n(W-FbsIYot5p zxk5~Gs7j%kl^%xZgZXc9DU){k>83cFc5I)aaffDII<{_>p=smx&AT+#bNO~tMIQ_| zRg~{<>wgbXiu!B%N%;TRO_eB~UYx;ArCbg||5_N@H{}tSl#~dJR#E&&ctxY!t+vGn@UhKT#8zJj& zJ7qVOk9LY=(OnY=3S=^8I-DQa6Xk;xo)v4AjA$eFG{st~hC zMA)hmWkiDa0g19A$&Mr^uR&_x9nW}&YUSdZ4eianF%o$^>y+UswjP|(fb!#nt5_$+ zDNoti)Fd!bo(S~{3x(ztgm1K&M|?0Ba^@i3@UojqD8wjydGAQdAHvLqfU6Q=p&JVd z!p{$npaMdYf^d}D3*ABafL|s zM9DR6nGT@25lp6!4NZTfs5$;ZJ)+_>Iq(K161%BPXinSplql>)ifu~t0uoZx{CgDk z_=HR@c>WsXIZ6ag!=TzW-Kk6Y6EU-517ZVqQwdCz@$k&1ik_jNuTFbS1w?WoyS5=5 zk_#W))SL1rW@hgf+@$&w7G_gbLHNSEaG`2R%uPfBMeCZEVQVP_; zUL*m=nB7$JIt2FWiU=hola=4b^FkV4E!oH0v9F|Jri%-g=In`*tJ$aBz|NnV$;sJX zNl0N9+c$mdMN}Fl7x2gBv75?=rbr&MgG|fhzVIic$!;niq_8X5&+-fPUzj|(Gr5Em z#s|05iJBrofRU&rlGdK#qHh;NK$#8&2lktc%L8^($*UBaYrzqM(la^nkNaLogPSUF zQJJEYKLazfD`1miH?QS(i_oJ3_~ z@@^^|7THZ@Lh}>9|H;ne`%1Vn^+yVtj_AD+@*s>=0>8h9w}d@Wa!p6v7Z?%LSaHP4 zirV@kMNRe7x^gk;`izH&Jy9k!t8K(w&&_1YS*0YTsM+u?4j6fuq))U0d4UoWnk{bP zanH+S(^=~!q^LQn>QbT*t}BjT&;CXvyQxfQ&Pa{08HXFiF`;ooBH0sVf}~HbBB%h9 zv)kfW>W>s_yI~===z>fx|9TfB&Tl3(cf2i6R3Roe-$y(Bk)r0)j93o}GkIoE7?JF3 z5;P6rgyT*P%yS$~702c1(ZOu-Q%^OV@T`}PPpNtkid9T;yljLE2f60^_D3muF=pN@ zMEvYe^T*=t(F{uP`a7}3!3V|ORG4^nHu-C3P*|zQl)VHq&UIM(+1Vs8Ucx3pGhGE7 z#Y-}uBnie-u9^Bb%vKy_l%V9za1{2ZX>8}v!>b4_&3vb_=z4Zj`Kq%}+r>{2RF+|K zXzH9}lpi6x5;QJtXE5+YnNXV@gb=G7lfT!*6`4QM*v<>55VT{~D?z)S zBSK?0m7r{xw?Su8exvLam^svNCYXYLYWwrN4SG0vKCu;yH%H1ZR2sp9EE9 zGQqS5M6#Po&@}X|v&4tDlple*;!IU;6Bs^D`#Iz~3q8SZP@S2KfBgz35ha37l(wnk z@$;xSrzIXiCDhO=ha~vYD!F{Yqace=TNe7A+>Jt#Kqf z-NJa(X1;YhT;{PS%2#WJk?d6!ho3r3cAL>nLW(0feD6G>aQIW40}l2flHF7$G{fD(5gQ3C1vztn2XOub%wY}K1 zHBn8NJo^VM0scr~R9(*JbBJonW50j!KK2*mc`5S!dy8BH2x4LbK!a zqC~Z2vdt@8Eczow%^@k{64j2$KIL6RvYX0;=I9w1k@iduzqM6D3YzX{BbO0{nW2bZ zDkax+$L*SfppGEj0mrb^vzy8XDQYHK^`4+kOoo)hDUv?|!3QZE`rRp$AV%oSWYU%k zB&4XBEqp3bU6@RJq#2R?%F&l5{X9`z&qQ*UiUi(`@j@%rD#fI~U7$A=kNrBhZkK#X z`MQI2T_2B7HPL5EOgOmu?8g*T$zE)*n43I(dD37F|>B;3{`$xkkFnJUy$E zatBw>xzBX6Yli@xlsmX;zW+-ntL3H9{n0~m2UpRxD>O2sP{(XKDR*#hj2iL&W*zQ>~qW{@3I(bPt6Lwg_G}67bWLu3i;ovH` zhs?wgjoWF$!S(o$)f(x#|JtgPatBvLQY_c385~-3 zy+)dFaLwS)L{P``w{~?jQtse#$I5g_({x9FSy3nD4z8Uo_UPo+oquSg2?y8xM4ol% zc5{nH${k$pkbMYl)ONZCzR^j!gKONNBRV;{U=@ut;ovHiJ%&!^`?an{ns9K<95Y=f zr=5AGlX3@F$UcM_YCD~ihiIe;2iJq46?F1$;Y%86!ogLv=U|;IP)lFqO*pu+$G|0# zTHDMODr=f199#?6wARRwIg=7-qzMPt>J*PPGI+(kP8w;#!S&lg909ntuE|55YorMW zS9mBwW3`>Z_5apL6ArGTJrU8UWT9+dHPVEG>s;N`I(cdV4*R?gnQ(A5fBr=$n#Anj-o# zdcDrIj!yq>VQ5>?EnreoA~0gaCL9`+n~5$Fg~&otuJqU`A%$MC#JrFGv@!W0g2Q%r zz2usfsml?M*g;z21>?BEUN3<(9O^B<#=)gfG-lk%U|M0Xm%tdVY%MthPf&jJjABU^ z^CXy(=4#la0gkEILljGa*x0lDkv|UQd?_II(5jP&X#=>F->>XKDQK)vXCI?t*)=dB zQ8Ag^a1@>xf262+{bG5dVljCx-eZs>%xS*envAH}Oy22_R{;J(5 zz2u`}ZDLPF5Iyij)~tZ*SAV3a*=_M~f`XWAb0Y~z+zy%099U`}QBEd%U1%*Kf6PP_ z-55zzBpAxbmPmj{A{LKqj|5j^kqDFd&>Yzvf9i>(Hxleyk^PY1YAA9Lk|DfqseN}Y z9iB!P*KE=d{Fp6QLYoXvF@1aAAj(h6CiUPv`&2OFP_Acfi}FP96O{)UMhL=pW}%Q^ zF682awWfq`+&NGAv5YI$tMlqhgoSP#BM85ma+vr~F67}htS9XC@>P3*{Mf$+Q8*DP z)_406cl#rSnPW?r01-hrNSpioFe2HpCD*iNi!q9z2qrULTrMF+%_-6G0y;jEBbwmO zfxTWPG-ut)P84nr6x;NiSf%}uqUN4Ryi~!er`VSM77gS%N(4>AY_e_dd6lx`%%|Aa zoSO&ca#Y60Y?|d68r$jU%ZQKULiS(bLZrgS%YCN&iJ3W^AXFkO%%*vQ@T)cVsDLC~ z$kpwb>g@FrS{$YJ9@1X)-~B`-W%Avf171kOUTBYZ?=j`a3a{AywYb3G4VwwIT*r43 zlpLhpH5RkMA1O3;3Cdq4)Vt<)tYx@4QRtJru(Yt(OJ0Y-ja}Oil#S3EhtFnM8HaS17m&nn6qxf%)9(8%>jHhQ`t z@bKubRH*9p+BO*n1NM5!s}%Y%q%o1{QKi6>Nw78iOd7pjcXDGzNB1d#S1RCQj2&BY zwZO;Oa}ku0$@_2jNJyd613yklOjIT&UoD>mayum^G`~mhLzL?E`mfvx2`Okg;$6c9 zLl$T{0&4t8Bs;d`nvUQ`!wAaCq%%=G2`Or37>0L5*_ceUW+O;Mh9)$#5Bfk97Inpu z`7mM@f262c?AA?!axj^{9mbO#TP8HiUdM4HCzGX;;wbBn6g3;RIZhO2gW{<4UnL^h z>t#Z7V#Nal;hn1DXqp_0u|HDOoP8JXr1CKN+rv^Iakey}x%fDC5p1=JV}YxJgcLOo zRzsMckI5}{_Y=upFB6&<=QkiKKa(daWh9avTPDaGvvJ%jz~q&?Xrez-tnKR!2$>2p z`QRH)VC>j3q51jOzC;yb^8NjPC8VGkl%mQGq6&iyiZ=+MEc>nmO+z>l6uBLvScIA2 z=!liscO@`UHe@w8^{kgcIqhqREy{eFA&4a8npx^$*~cMB2}*Y`Sfcr3@fI|jW&B2H zaptT1Q;>M}T?utIwzJWT5tP3KGj&?c05gmdf$`tYZtuXCWWMDStYC7@_8*&4{!+}e z*?%h*1tg@QozD1~@r2Fcy2wj%RMHo<`)*G#>x66MEl#hKy}_9B0p#&(wf^)jKAnJ*rJdC!h5 zUv>73r?Ylq93QJNS-l00wf;z9O>oX=g1xLNldYnoZ`nO1Xd3%=N_C7!HDVm;rEP?Sd9zU-p&IfxiXK`#)oO7mJMk(&7r5Hk9=b9BAD0@w2 z=3lG`Mq1lH=WL|>wU}8P#=YXFw#Jd%u@UvG&HSdVsYsK(UcOo@jO6~c?TMriM$5tV3W3QJ9&1-{K6IGANOO+9~`6G?3{SqJJTA%r+x2F@&UN1q} zIEOwy?MnF@F!SpBeK6=If$=gQJpJSfSoMWi)$8@`p(#yQw6;TuX#`D|b$(HarlFm# zWVz78h~gDj*k?pi?AY>EXQ8%fS7JA7!eq*~sI5Oz7*$u>78p_N6N;-)=mR3zJtb%w z`qtH=WIW2=jG5B6%7CdxiC?Di+>eyMIWsjnzoG2x^%58_FVF_6_wC}OX;xu zoT=LONPyE+OJ+JhLp1$!ZAE3{s7(GZ1+iGI71zk^qljm(m#>-&qcW@BV}e>UIek$+ z2`P@s&eF4pYQyB(g1d-h$Ce4rLrH%lsx6ay-@p&-j}$eprJhC<;%dcp=5h-n+3RIO z^X{zI1YuoKT(@dt(EO2trn~-_Oax*5RNR#YVG^-pORni|wFRe~j!ZWF9S19aq^Q~F z4xZ{xOm?1xXq>%XCNu}#!1LXi$^NtANJvq0>=f*PU6>pm4}HsCFB6(m``sl9YnkGn zxIc%46g3x&*hx?~CTF^v6Ui?peQDCqBkOo3ulwZsScLXq{9xr0{F9jUw+r;X!LPr} z9Vad(Z%-xzs=lCt6Jw1q;V+xt7l$M!U32HP)Jdto%pJ1`!c-chvMuxP@c1tJa{<8Ix z92yzA?w5`_DfO2HC%=4DBZHGf;(nQHYmxiQeyz1YBi+41((0uA6T;SIz-5g(6aIRJ zck-&H++Wr|*?En0_ql@;gi6Z&W&gIvVx($*NULj_@RvR7hK*Y#AN`$Q(=_odi3`3V z%uwg;+~U~sxwclhzpQ(idpg-Apq)mV@Ru!0ep4eO7L*FmNx8r5S;T3LbU(?Dx6fQ# z6aKO`2`}noi)Q*vFySv-_Y0P5?xE1X9%G?rO}W2}oD$nK(j9oHh)&A=WyL#V17*$N zB1`q!n(&wH?>0aq-Fvdc&@@f>%d!XHu&vI7%m)x&b30?m{blOM<*VeA0(Om*`^)~v z*ja!{acohzXJ&VC)@F7VcXwah7I$}dcMt9soZwDy3GVK$frN*<1PE?{ch4QVr=WMb zD&LoSo457XDeJ0R)n{j1uD;iGO;_;#Y&xmnFNv>sq=LWfXyLU6d8m5_gOvNrJT6X8-xfM+><)5& z8GRLizpm*DyjMrpRPdK|xH3T}oo%Ou>!gCetYM$|23appTAftzm)$#;TqnbBhZ*Ck z;4k|tE-w8%&&uT*!Mdh`zie-WLnlLbwZ~DE=a7QGEV9K-out{275ruO*5VlH zA#3#?ppy#zvSPuv46;z|96G7sFFW*fjX~~Tkw+&L{AFcx7<*a#5@S#5q=LWfmr{O) zW*@)tI;r3<`!h8Tqn;kR(0-dv`UsE3!1~5094I~HwGx||7RiA>!(G~ z@4WH<`gW%ICxA1}|08D&Bo)m*{`g<`U;bx$>p7&x&a|X!jN;7Bw7+`pqx?2z4o-Ot zCN-+*WyIB4c(18Fh=Iekoypr*he=4GS8Tzxu$SP8*0g8tBp^8ul4{x}wQNfa#!;j1 zl*D28XVP>9Ve8T38fC`{tJ&f&j{}A`c(0o2g4q_)14p+2W>R*-8G-#}@?NpkKYEZT zoD<+odo3ZqUm@`2h1f&O$`qjju*++<>2U|6l;)Hu=x-bPl^~qHG~1e*A0(ux`Dc~p z1jS_X)ab7uN2+N)Epe8pSWN!?5ifJBNI}!?cL!I@v6*}uCkIG4)8y^6C+Sd_D1LCr z-|lyzf7UFjpvOa5~nIS z({SZ%MT(leI-Mpcn926rzktNOl!E4vITwivVY2UrND29UCZgz#NO-NKfO!@^o(}Xse zo?`ojf^#W9Et}MX3u`Y1!%KM7qxSvlM9CMx$xOLkXYLkG`Fu_OjJT9H@}jR zqUPPi#feJ9>o3)**t3P{F<{I?<-6~fLmU$ysE*{@US zqC_En*Zkro9~%W}+6(=1_r}>c1v5#O^#N0a5(Ty9bY#<=Y57(l96pB}K}8D@l@(-A zwAR>M*_kHS3<}S1ilA&vhJJb~Aw|u!y^|7!%T6sQ$$UiV>`YV8%=*_of^smKafMw% zikf9c;?glElljtPabzf3{X^XXi9 zm~57EfP@q^`?h~WR0NalpWY#o{bdT8YnFZ_Dle1$*R_?9qUQFp=+}HqZm1Xp@-ig~ zn)^!DA}T+VyT+}OkfP@OuVslUz~tq82Z&^6nu6xLvIxKmGWqNiLKya!DUkn_+)osq z7cJ_|aFJ68d5STU#}5lBJJSS4JW`mx8!x!}1@H)CwBWJ{%PDDA3GYPN zBblji8LOU^=J&Cgm^9%;2~<09k38+j*_UbYk(!PYXWU=r`iondYm`LJxf& zi3qbAooNbcuX6uM6x|7t+VlQ+kzhrd+8L7R z`~pHNfDdua+Cx0M!~|v2c+#h1ZJ_KGnMoAa4W=+90%JLzA%&);C$i+bLYD8l zO;j}|yU*-QBzwICO>^Ha+L)H|S7&C>CLF)m>t)Hz$&B3qCj>2I)cj6h5>p~DQH+P@ za3Zwx)k!GhNz+1B_ni<$ZA~F>$i5hLC_8o)Eo6Pp0!p>r9tXR-$C&pze0pr zpUDRiLnNfBwd4}R5vBq2@1OJ}o}FoevS|*5`n|zyZOF`jF>v3)&NP9EVm^5LDKsn# zE)N=k4~_LwO*5oNbIRVBnZWG-NHopu%=COWu}zpynFdES_LuppvryZdPi_&_l*w$% z5lLB*!l;J!$aIJ(9A>o8vZuEa$<8!E)7-b6bAF}T4s4HEfXfvvwBH8I+n;MIDw{`TfxjQ2 zt(l*8qz&=xO!HN9VN`w(*+oW|xiQDNuvV4g_%H43qr_RwySCOizbkZhw!_8QGUMHPX-=;7~xf||G;=MWlx1sTQ3@<+zr>X zGJ+!}U5(;A*GUC8+}*4=5_&Xm_FSx!3U0W{AAU2)3Wc5;q|^=PiW3jlOP<=sXw+RN z72I$+*BJBGmGw<-om6ncHLlrL*K{^;^7T2^cm+4ycx;TqZzzIn)cd2pS$nC< zo;saWaKqh?lh`0{pD^}M1vgxq8%cFCe#?}`3Z~$On~`UVPEv${BNopg1vlK=IylmK z=FqFK*E*@-hWl@44ukagB3aW%U@e5??p?PF>!f>Y*7U0TBC%W}i4MD$;ae;wYSR z0%iASW@^R#P{W6;Q~-{1nxpO-oT%7GC)C-Oe*YARWN>cN99{1rGPNQ_%~^e>5fqcji5s$l z97&0S=Gy3uh>FGJ{A6n+q^P<7H=G=?T59wSdv!prSJS+fV+}zZX*&*Az9Jz-%}>`K z6NxoXbNm}N6y#0cngZz;=Pk~hI3;U-_A12*VmF+;hx`(6$BYPKGI(7E2`OskScBL- zn8|b<(N6Z!DQFfxc8@5WJ2k(E8e=8o_nAn!lE*?42T33j?3u|!k>Ghtj$7;G@sK1y zf(yvxNsuH%k^%`%jLFj=Nrwc@O`eI@AWz>-Z-G-{DA%mgJUjiG?QBAuOi!`jgj;th zKP{Wong-L$fEkZ+y=&VKPlV_45*a)f0v_R|2e%XN;zDM}!DA&CUKA6PER30Xl^aQf zg>K9xw0P4>Tcz>WE%6|353@4v6h+0^?&gmGBOY|08W8@kzLlyS33y zx$uKoFDQRfX7265V`L>P%%(De@V9-q!NM6(^MC$jBNf6vI$yQ-k^zycaubAWd@aE4 zEFA@D+6x21J65Oci21bu|C;DucEc&C<*$bwG$oVq%i%0#MGB2Y;G4XPQ12=Q|3{^y z;*v`JgB^x_bn-d`kK34+D8w6DK(+YXSL;x^cik|(R1ElEpH7rL4KoK%)`HrmADJI! zhfvR3IWU9MGI^tB2?;68;($+ku=A#4@?n<3M6!=gsHdnYkkMj4M0ARMREy>}yc0-V zhx#Ce2rgRCf?EV-U^4C@*dnY*VSLaf$+24}uZN@ol1AQc2wv3*jme0DgD00k*vmdT zd6nYV9h8NjOiZqKCy#|Dc1~1m+n`hvVjaqeR+t46g6|!oJvr3CbQ(hduR61DQM=IiQo*= zL<`BC18*p;NKvzVSP_D9GFd3mN08Vy6*McC!ZMSK$qKI#HCU0NX5BBZiNZpqh19sd zlt}i`DQGq<+?Jp`OxFJkqhdvhnjPj=B?_CD7SiNn7?JFwQ_!3j3$qW4j26b>u(ZL(ER=#R@gqYkVAj;B$9n}a!q`P z6hU}hqv6}Lh-4p~0+~48VuA`WnQ#-rJu6bIZQjZM5rreP7MjX+6yz&P6f_Gj*g{Yd zCh423B&4X>%x^AHMVYLg=qZuxqZ2eu;Y4WTy!9!6F=px%i~zIEqMis9G+`kQZ4*+H z*y7ALzm4k3W~ znHjvVBbeco2#mN%nf!vGzTe zoEyh~_R;yOv$uzw<6}-Bs4SD63L<>@nKT7U^l=O=DStU;x^=`MirsJuYD0@-3op;) zfZ3rE(%jA+YjD)7!2FUE1&C)KouF)*x6UnopDBMuW>y!R1_qIbz*vr_^K^x7#8zT{ z|BBp7nkR-}2Sc#0IgeC9q-UjRZs)W2>j49%;Av*kKfp6tgPC}% zj)1{?1VJZ?@%VW)ajmZV2bF*oMRVoP{#O*WHHEyc@*SpA_FBvo>VXR{d2LG<*hKkj zGgEXcR%ff)nnu!9=lL>X>o8xf%?{$(4d<)1-jQ@Q?uOddWwJpwbdeP)j^v!-Q;Dj_ z|Kr~r#Iui1P&UtpJwvZi{)WtK znOP1DU#ocMP!#h)=%=%LW)O?ZIn8zWy_)8!Ul6x7X6D!d>_t|Z=5{`e7Dz0f7tM9O z@Jiy@4JWkohdK+jebE{#eN!f%?As|Jg;5R5Ix8tr%|M0)^zCcuEnGYhk^bydaW&bPAf|YT^lP$K-B3j633G)wnCRjBX{E}(ux!{t0zcJR97a;FFQ>n`{)!j>%U1#6!t^SUHf1m z2`Or}eTF%Us8Mq_vtch|ADx0`*GBsZ>cM2k-w_{Mk)q~r3kDI@lgWvhu;8+fPC;{C zD$Ji=OwPLVUP6kRo1!C<$CIYH*L)gFB)?+xrAfa}?&p0-$tUxQNH{b!_rdGU_%|`= zKi<%*J?l@hE4=$EJb?!c=rxC5I8a!x-T^z(&S9ay?g18W9#;4rhSHK z?;+*hy{T`*4RXo^ucq9)_gCxd26<^8LMxA^+`D%+Jr0AO+8&>>#~|h2y~Xp6>SWmb z`~13udr0oxyF3A*7;CyOZWwH6%DsDao-fx)SIwMoY;ijkynE~3)oAw)|+`E_V@3#h-IvI`u+)f4WUeYlK4Km?*TugaL zxp(iX14n#MZ7-FXZjf^C-r7lv4RYm`cRH!y-8)zk$1B#1zrPK_6t1m9>fLk2PQO|w zT`?>Csgnxcy#+IINb&bNT`=_n3roY^~ z*Yosjopf~@n^MZF2qujhIkD?RP(I&g_W%0J2ONk;GU`QY&fomBAdEpCp`#-llZ zCEOuAo(kT*k7K;+(A#syIuuLp-RpM0xS`p3(MerX!Mj)D(E^=x70diuCl$PV^LCBa zN$2doAv&qx-J7&wi9wG4VDznmcQ5??WSw-o3c^RneJl6wg~i_UQ76M<_?Op71@GR= zso8Zh^x5Bh>xaEe!MoRUJ>rt@v+vy*T~ookx9A@neZSA49DnGff_E?Ln+TnBW%|R| zR}{Q^hnwEfNvG#Zi~Cl=yVrm99E0rh3dbEL6})?s)8S&u)6VgOagoBLf_KmJ38@~k z%cR^oso>rF+$w{i`F_m+omBAd4J?Denl7?Ad=L(6y zp_?^baVA#KNx65AKBF?aK?dHduagSiy$gq2I_W+;c%DxB2+4(D-r2WpMxAu_N`tHQ zcar6Z&Zf~`@PEajOya3Mhw=Yfxc*-J?E15Jii=3!^Utquu`jUeFNNn601=bx zPrJ|;yO52c9mThTNll5sh!qoFRcP0<;wr$-rbv} z8(0vpfc!w(VqSO}1!=n8u{Ga-D`J0U0$=3?Q;ZTp&2)Kh%XmHqY{O8vXdIrZAP3)nm*;Y^qn6H{`=>3}bb#pcS#S?HH!1KU1vohil zD^k=vaNsv0W3uM9&)Gp@P=$W-)#l4h5rM~I@`yjKq^w9$^U=S1iHgnSjr_PUVb`Br zlRkG3XHI@_Y|mD;mym*{J!!q=M8<`t-92P2$eWb-&=koW-3k$eOHIw5rq(Hf*!Aaw z6rL4(u{tja3Su(PlB5z+)U0(FJA5#c6-MA9fn9$JnoVELAS#5(deLJ_$nP_ea;3m@ zPtguZ2PE*3q`>_+|It^99{8yj5*$HN^h44g$v`B7kqkwGz#s)rpwakA{Fc-06A*=l za?N_i%t*gx^PSKp(^G8U)EWCYEt}N$!(QG1Galu7*R~&KCqGg7kYNI^rJg}MI`Sm( zSj;v1?lPF-a^Zt#l2Z0CX7-I;E)f>Gaf%@PXUG0jfSU_Bowy4XJ{O3P$>|HBeen8oC3#%UuRlf9GWA(CBxJ~Tyg(TCnd zrDt;X7reP*@174**p>WN^lwEJqJPbA=|Q}9wIYS_K_Hs~v0{qtNOmIG?H#Vb+Q*Jj znHf=VVA*pBg4p#ZuaZ0FC`|24Og3y(E(+4*`U~vx91Ck^X4>|}!_2NfxmsZFZU_sr zFxh>3Z3!uKdf=$icp$PeIq*S4kh>^R(3~^_3tcuQ$KUu}LW-J;>itbrb|z;%!cNQH zJq69>w~iBqkX8%)-GxoriWD^u-g!n)PA31@egGu)0|m`fJMR;fi^*eS9THO1ytW8O zlH5#Q`n@}m?A=q)yfbeXQF)lWS-*sY6gA&Z!Q+k)LkoN|8uO05dveX7w7szq=VkJ9 zdF<*|q@Wp;V<|NAfegy@TSt(WDN)eOA3lU2Z0}l7o`$SxL5iC7(_(AKBBcdYN<4(* z*!8EN*`XP>*n&(po4t)l_Uh$MrQuVHH|$;_Qd1ZnL06Bz4uejJZEREqf*hp~akHQ$w8O8HAO^J?NpiKeNY!BxWX zwz&-W;6lBf#ItwLSDn2*6x{j18iL9)S^WYIZ9kKyU@5q9&$^Vq95Z$LVjE}IpMqMe zt^zC| zfBb@QzY_CHx-!paE^nY@)?D2H^R_ZGD-viDO>;ZXmc<;zm5vsCrm3AFp}VnjR%hnly?E8aJ~~S# zPQ+KrUxS&?BV&L`Oo_lmF&@1shv*>=Y1$d{uO>`te3(?SXlogpE`k*u=%073PbEStAAk?i_Y(5#ab$J+W#)@X^{+KM!{w%@dA#5Q2Q z&E3Vsv+GY#HurF^=9?&gLuNYl#l0*$@C4?E9x}~@G5)w@!H%zm46Ia4Npr-3Ih4II zGee`}O3q5t+|EV$-xAw|`QJvQBA#7;zUnND>hgVeh-%8@(gC=DvLeM%ywA^2}~5@VH%Zp!!A<^ zExD9O<4}scw$Eo_*KEbi(^}`FsI91M8kNvk_L#)B1|O;&>`Xj+_k7jdJ1U{UUvV14 zAzBNK8;Mhg6)B8LXwE0M32Mt^+S=F{*t@5oS>Q5auy#yFWU4J8Ma@b*&Jop~$x_bP zM6!2JL9^y#>?<9Ztd`{$2`Orxd;A|!9hp2-s}_;$-BZx~>%a%1Ix%@U{w)b9YCe6I zoGA2?7J4@{Es^ZqQ_y_%2y15-CSNQ)BOyi2uP*E>U73785qDSY`jcxq{bu2mgE&lc z+G-t;kb(YmP~aQ7mF%HeeM(^6(uXNue>=N@vl*n^Y4~n0mTM2``Ggverrc?GpzaKv4BNBdsi7%%8a``mknSf#@sN5n$ zjnNG9WM^Y0D11s_>FM5i8`^7xX-RC*S8TWsq{G z;hBvH{ydr|KDN?H1*hTPzaG)a_*efx2*{(N;51DB`MFNgwLh)NXBwSUa2mFEBS>aVSE~mPbyC4; zIPLCeopjRYRT`w!Y3PdH1-pnx(?9cMom6ld9{6psPCEBof3K5rr=csnq_GaUoa5jo z;PF&&8cqo>V`xrjI7cTHoQAC)JkUv3vqA{OSX04ixZ8$zYMz;}eGguiF{$7*T=yQA zsUC9G5rl9|DmV=b&;3^?-39k2&`AZSVdmY2W>^Nt6rGei4V}SD5W;zC8@CBUIIgXN z({SqBFoT?wzl}~RI1LZ}hfvj{x%U)~9;~V0G_2aMtWLTr?w_ZV3Qog&i8tt^^HvLg zom6ldE*!btAm^390iSED;57W>5<*o^JJ-hVppyzt!|8SR8KmbMepyrQG;}5Sc3vl4 z?lUiRO$Ddnf^)_S7JuGrTu-s4g46JH1stzD?L0okh-ws^hS|>>F_FjOW3Sahs;enHt*W0P4mpnnsjKT|0Fy)1gVL7EB}T z^X*=AG=zK6@tL#YDc9`lx8NY-`R7D9qDXcxraWpCXL2vvVn>W8z{b$~$mC#fOC~U4 z%wVEBIEu0ZC>D{@M-Jh8Xx8s80$K2a1rk4=5w)?Py1~5}=d3P|SC{d{4uPI&Wyq-4_$h?j|zy+r5u`%wS_&13i|gWXwrRmFaABGxP%lm?RIxuBJsp(whxt- zgXBln+fP1bg56mp4?(d&+WqT{kdUHg+L9n+Gnr^&E0FxK%QYi&<0Qc+BYVbPxM{Z{ zMa`zK5I>@=n!Rp3#2f5h^wGB>*)wJaf;`V!o98=-WcQ*EQg~MEL&p{*GKe+%=8q#G zMa>!SZV(mBGEC5q88HhBp=nhBQa? zqW2}jLN|U8gcHw3?C0h}oR`L-5bjp#Ja?oHL`;O(T5}|?F;_wgGsjWu&U%94FU(c#+BOMPKzaW>c!@LN|TvU6~3NxUF<$JBQN?J#WybeK4_S_>VHIoB=Pag$odX?+9qsSY|j|f!rTd)MC8Fnwq)%^As z#FL8osQK;wv`|6{v)J!mx)TJYWAdb5e~obd;V&D#el>`H!L z3l1g~FUr+|rp6dRR2C*DRyr>sg-#DzavH%|Rwifv zauwt*N)$9#7eNcNF}ZxiCJ8BO?shyT3db8QXwxD*PV7Nc&^*+uI6*m>+_!tWgcLRJ zB|{J8Wb#6%F(7$&mu_4^&xRHwDi@QFsy3F8qUNVpdx^@;lKMY zNT~&VOM%DFiWD@1T>)6+B0vU5`!a_}_8=-~mM)AJIC+_jm#40T6g8_~z@m!F5-qqw z!xJF+=3m;k!Szc(Ge48H$0Ag-B1O#sJ3bIqfXOa-9}>y#MTK@w7%+q=gt1!ih|E=q zWcQ*1Ilb>vf(kJ?B_gwg6l=R;GI|G>Us~||6X+cFAS!5XtTUgWB22C+hp5zw6g96G z>rPZrCXaNMV@sr_Be6s>nhOQ)%-HU>zsc%CgmSEmiXU3ffmm=&3v}CgGh(Y;lFq7onATS891SX2{ z@ElIO?F=1NqA`_FlS?UfH+vMdHHEzN?WYKlYcW$|Eeey@w(>O`_G&Xzrgbt&ZA~K? z+B6J1bsgsG#di|V?nPg%6dt zKdt_46S0k$UsNYtNpty)0LtH(nWeMgt+UcJxARaf#JBiY3*9jRFIm}x=&Q~`ZBL%q zK~PgBj|JnPX+;X7>I^)JJ*63wxAr13WmZDY0byzulqy zEtvT)HD(XH7X>DY@%Z`qbf%0%Ox+TtkUQ(GQf=eE!77azs5!$9;`Qp!wH1|3qv9;^ zY8s)fna}bF{!aEF`l`8iRGcNM<2l2ct2v9#S|cIFQEC4eYf4)t8#tpA$?io3%^qc+ z5QXPOb9R|jP(q5DBfC2ZYR}}rkV-_ddr?7iLc_&GbzpMrl6MkP&~(LUgtJ3OCco5} zO(eS)<(jVG{fNXnfut`YOerBn&E&%l5!9K<__J~m$?io3&2)nv5!Hps)P=f8NKrHA zn&(7yWirzrIIpmKQ9-jnGQ@A)n2czJ9a-S2`Os!tceln$z-Rx<%whuqJrk&*hPry#bn>01QJrzoc@ZV_WcQ+i z=Den;Z679QEk7tBMa{K&#uJ4-Tyy)#u!gbQw=w@ju zIMq=~6daQecNWvh(Equk8Km4XS$S|popeTC4>d@+V{+$gOd@WlbKUy_1}Sw+x?(T9 zXOQ1!cxx+lOu9l-pVdj1?OC9qDR)d>?urXLu5H+{n%gs5CVGo_R>CFp72btnP1Y=uf(^q&LpYQ8e~u*99=x5+%b9c zpTh=uIS;mc5BU$z;5hWVAGUArjCa;si(u7L+losD=%j*Uveuhb23g|dV1tx8Ch1e5 zaMWQov1a@mdvSrynhK7|!_klEq$|x5 zf1OltOkQ>5*GcE$zl}L0|7^zaM7uWYWO&?$r*%yQ$7HWGyLHmp=J!`L^%6*}pPJK%s$DmW(poQtrLYwJ9o zaFR|cI3_dwu}vpkiL0GANcm?oE+2{z&Z9YF?Ma(Zd9ot>fNd?E`+4SXg z(s^)%@vJB~CJ#5gWsqC^KIobXj>$?-O6a7!_!*0L-81`^$2L}K1;^x(W5W${+c~%cxNj94lj4k@bJN(76daS; z+TplbS|mp(8(0uKVJVK zs=@DtVBXzppiRf!ZF}I>CY9&a7aidplgY%^E6P1lSOUWNeFQq%6oXS-o)0tH5Fpzvzl*5qMaV(b8I4VU}|H49QW zA=!?X8buHm1kKiB0qz;u;waa&FKdYjOYJ7|OiL`6Ka-|gF#GtbSnm9pxw^Cym|~O& zYNmG__G*dxQGVPKYWBiz1nq2&6c``9V(%Ff2Zd-%*53G^g#3Ps#rJ1I583xQaUT$! zOIba91xmq_BG-2mN&b~6IxterkIZZ;Aq7oGy;R8viV4zD^#IOiy6wvBa(pjb>c z=#xo8ikbuY%_o9B&Cw+q&pwzV6*OmtejtdC6^pF-1u6g9Wp#tk**uI5-f5StjA zBYkL!jeUQSl;`r+fs30a!ZElB!6s8Ktg?q_(h5Rc(XohEUXuz9f4f{hG~@LYquav0wQM`zSjto5aK)g@uOA zkplC>6Y05;hH!mBxJjiq#JjkV8mqP`2{%ZBF2vQ9=2xdh3yHAMjg1B2ZZC1%baNps zAE0t|?1`DV?biy-)gKujv#GOpX#Bs{#S4cdT*#XQpOl0@Ex@@ZDKqaI zc994Rv#GmRI3WD~Fe(76wH6R9#{?>b&5`n64(NIax0=bBOwzV%6r^b{49M4hD&c?=j{k+dEDba34r3u>bEI4?;NpT#M5Sf&%;4k_Qkca7 zZ_^ARDjkzIBk|<0InsxwKt_wxusKobK}HK`ilJe1qz_Wqm7=-!p^X`s3|eqaLJH$E zgtDf_B}?iNNJb$U;~lQxTVJr%;oPPLUvM>~U$Z$rgWTy~)=QF)o{o8`HL6g4+|>qS&PCRg_z1M)H@3Yy!8wIm8RyIRPW zqPQouB1O&Xjc`9vfXTBr@W`?`QbF^doH#}mWb$4;1fpz?R3Kk(pG;ICCSN{BaA-ve zwGB-iZw^s7yKAA&;~hZ0qC~D4nleodf{HMiv;%H%tVmI_WGZN4?rNdAk8UE8jf#S% zDVzu`b{AU{W{?(|{~_K9usKp-e%K-r5{Vzi7Fs?>bwZ0XUurDO0CLT;r#DglNM=gE zye`rFzIc1r=+L&>c4A8~->B?k;@PMu)Y;t5)+rE-BCOOxo8N8^W;i7RW8Kcq!j2 z3gX!uDJYx9(^-83)@OvznzQ`T-@#x*5*W+zbT-+AgJ~t^>#eP$q}iB`gZdXbH+*?c zqG@jDpch! zG|hc``0o&6@LX%o#m%RKiARYgv)hK_8dfgNNuMYLCh?C<6yx#pYT|PBy-o$xg*j=SB>4fh-%7Y)qaR? ztw?cHPo#}YR5K>qEtpIsnlnhT@yxE?O*+A#T$?GaX_Fe+iu()K2*Et6j!-ylskN6IzBV%5R3-40|}j9-RH zNKrH1u`2|%XEL-nq8c_wDrhDeGK{DWOeR>0KccWAMa_B95uJ2oa^gr_(XlyFLG$;v zSaoq_poJ~m56_GhDQa$Aa*`l6M~1B{9zZ0UBNa6Fq(j_?Jy;9d@esGUR-~wT?B-~K zx-xm-Ja%rjI4Wpf`28QEx-ofbW-bXSYTioom8kAaUfr~mNdACE1n7~$NW}^sGcC*etjzw$>vD8raPqTZv^#XGVZn~5>nJmTLUu>&x__xz6T_mBNa5W zRGCOnA0{&fV$-%FMa@DHII;9)GWQ`oD{OI8&@7P?YasSB&0VxFq6I5b)NDFtIzhiM zS!2)+BH0|NpxH9AI8ptXY~BiIK`SyN{XTUT?=t2dSv?7%0~sIisviF)2EE5QNAJnz zTiPmj4>6y zr1sms=1{|mBB=ea(0g0xOgaWjf`{}Uwag&pCeHCOvGjS!t^*OOdNidbPL~##-yp9i zA8nA8xn6PTcRp(Cs@4VvCDwH14#g7h(UhAwJMX0V0$#B zCeH98*&}r_JjIDYhNj%adF}7$I_cV-IIm9Hq$W;R`c61JczP(-Mx%!mOq{KYI&{)m zYB|DVZl_IZ;&i1tijdx;8ND-(NFGvd;#}MuOCOWY5ySD<#Y`%gI2X*UY>>mUjWbBO ziL(y9QqXIge`Rcgl$tnQIoIG?)6-5@-`hGVH*qG&I23^tlL_K(LD&*!HxVGWt{_Loe3MS5d#b@dy9be}gq};^$ z_MbgENgo@wMkf_aoZaos4YJ1W6FRA2;=G#`mk``e=aDKk3{r05TzdJaPP#_Md#{rU zCeAapUmN85v3Lu|GeN<``5`3^zMk4%b>LX%A>|)?+493kophCrH(n>@CQcU_!wgaj zMA*lg3MS5;r>7cZo#(R+Qf}gW(=I?KotMf?(@6yr=jpZxHMxgeEBpVclX4TME8eQ( zI_dl`(oZMlCQet}Xd?{r-?T>GDwsIOBth`cwRLw&R94qiFmaA;bzdjLItFjnNd*&U zw~lt5bk=lV)JX*s=i53sSb1jON<*g&8FNU%#JP2(cekHe96>72 zKDmjLzFz&Kp_%gPah+5!aekX&(@E!zZ}oIiZsK$~T?jQjJ@o3=>^iAn;(UGyl!rY3 z7Vky5oeCz-em!t3^Ym@Q>3elj!NmFGT6~?1f37kDU)GeHI9=&tEZ0d_tc|#*U{b-v zId#@IgY31-c*+z^oC~(#Fz0FKfFd7sO$8HYO;Pg-tm)%#xx|Cc`onv5(mm~<5fAw|=m=!^?B_#uGJHTX z-2bM@%~f*Jab+bLA8$t$Tsypt`F%cFaSxNw&E=}9p45QD^Pk|Ame!+2|-5iEvwVlap)uu>Dp;v4%>un(l zaV>nRm^bYFlxy0??LmA=?WQURI?hBvnl1-zU3O)n?EcJzJ!dZ@FL&NvF`fBr5j}8` zgB?$^rF?*^3igaD)UeK%K?Fr(vd|}1D@C{u^84i;9#`>Cw`_~j{Yxd_w4vE1wQP-F zH}_qNFeU+t*z}ilcJr>3)J@GI?T6Dv%@9G@sOJN>nT+|4O)6LW-JS z8#E&d7iXI7P2yu9*DGn-!@DFTh)<<<`>!P=q@Zcf@dT?DE}1oZhTwi6Z~E30$x?j^ z6BNi~{sx$R>>2ejw!)~`s}DtOgP1Ir{h5RmHCqScbQ8>EgNx-smhoL%QL|g2r$mJ? z*{(Wfq80glCZgySNZ?vZ!vR0cS^S;DX*S{~4s5pKr|n2~BH4|E_qqM}=^&EBNRA@m zjsB#tP95u+hiVndH5+~tF&2A9g?=jaFKPdl&Q13p06fAxJK+X34r%@6wOVZ~jc;Y?i zr{+5Ra=c~~r0E5^-EXVeEN>=5)Jn#GCAz~uXFxGT0Ih4FbyS<~?S z%18Y48Hwlnpm>4?FaC@JP(~CSJZ&7N8GAOV`e1?(uxY_75=4uFGG>fk?a{&(0tpc9#J`%{I_%;2`OlX#95E`XE~YtTD1nqN0i7l zLtH7Q6O{{ONN}4c5>nJmId~vJxtUB97l9~yMin$O^j}02f(tDq%|XmkD^k=fJQQRE zli9}Nf`L7w3Ys0q9wsU;lf{n2laQij|HoKZ^D)^yd1;WBDN)cIJ^l$%cwM7~44HI9 zLW-K}O57j_5senIpb-`*_KYfMp1m=Qpn^>9s)VqQou3Nit@KzFF^{y6D^;#bNTIf& zj$aQFgrHjsdA)rpNbK)&P5R=>sRR`P85(^p{{GvF6gBh31XYyDR4xn%`!@wmQ#e6i ze2MGhV$5Vnfw+`CqXP58hU^I^yxUu7sj*dv#bT_57A%k8TCQ3AJPz)W%oLfBS)%!U z@fI|@9m7*yg8BOI(5>v>6zXhlXS$QNK>%n zjM%@MvX^5f^Ctw|>={*1E3&#gQTSJ*k3X9)A>2e{XJI_g4`@VCRVGh03Xzb)nn0hov4N;+Oy2)Il}L7B3Yw4cKW@PzXmg(Z{Tkp*o7%DQH;mWtBI?_8`QQYN^vER6IE?ZA+IZs z9ocax(p;%3$5N_o_BszKdu?XYCcxE%Rc%cp>5BY>m81^y1;3^so}Hh*TI(H2SGjj> zh^otE>5W*stVnSr8!T@?6rv%`RWlc^JK6cEpxGk9HiGIi*`#Sq32AQau*0v2g*y2^ z#^xfPJ)?rMc@7Oq^fzU1$V~4X=wbGZ3QQF9LFlI`xjGSxS+BW94VIpNg@%HEin zae2#0G|lZ?*&nNB6Xq9Y+Cn@#KYi6%sO=yBV%KfT^J=TVgZiZ_doc-c`U_) z=S>TX_>7p^iWEjAY-s-u1hr+deNLPd*)yu3Ir$pa&2~(V=`%?}ike#rBereNck)xiEOv56mIZr;kO!8@0Q=;Hj&31S+K^`*8qm2eBcdOD@m>T4q z*6j^a?pBSLbCgcH+_g3sq};9A={z1YuC1#>K!icc-Kx`j{b`Vs_oO#Sxm&eRM5Io- z^9}gTAmwh=D)%CEGQ6@t%H68(t2Ne1*PEcnx~44!&xttnJ8?P*bI27r6uYe z#&{+uxK&3CpRbe7AtzrOq};7qJP{589?gOy{xnFrTXpvfP)s^^tcjzO3U1YXJN6so z_B{xyxSe*nTebVklRD|@vKDcphm^ZjtBkv4kQFZG)JX-mYN;>pbTUEYj)4YwMK+#c zSyrvn$*>HsaOmOMD!5e(^(di}u6#RZ7^LT=s>K`%AGY+PPKFO|HdrSW+^W|~?AA%= zRYwVf^t=JH&W{@EfZ4FZHRvr9ll|c^J zX3Sd!w`##aFPXQ-H(gV~tvY4(uZHHtw&4aTb*s99>P&!{|% z7F*X;aI5BA^VA@-wd<~v3U1YOgKimQs-s5VD!5f=*UhMt?wN1K>Y55})!*Aj*U7NO zX>i2iIi%oLoxIQ>oxeWB`$i_^ZdLmJfXuokIdq5Uq=H*DUnDLuJfo7QPhy=^aI0Pz z?cKA_oHO=p1-EMb?FcwMnsqdUTii~$Th*1Yr?K|A;^iEwlL~It9D5O_dNi~8U(iXp zTh$fg&)*F)U@Be*aBUUbs&l*B402}iBs!_!R{i4oODE%hT5m*B3U1ZNSSNMTRpfXL zT~ooWy77#kL9UydTqhOWsymC~g2>aiTfhFJlL~ItE^Y+#Oon%8Fi|JvZdDrnF*=Dq z<=4p+&7^yFwLoJ$!z$JIq>~D6)svN1>zeMPztKtGGZPfts#{xK)5-8nshaDgj{}Gh zF}ka6HrnZ~`1uBt+(ajta_AgxuNGB<{i+)O@AuOXfj|3P?bS>^*STqMZQ}W7W{zus z5>k>bfl-|4vr)A#&2U+QnXYN4>y-zS`bS2LhJ~Y?&9A~&V)%aCW*f3wLJGZN%TyZI zW)4W&qDNZ=vY?vgoP>D^!c5m}S;yRpf;3%d+6GT5N7?dEk$tWLiT3VTNFzt6b9_Eq8sQVlnx2w_QRCn)XETau5|8 zq&=irGmz^kQP7N-Jf0wqdhJOs@Jz5EMa`PA<2RS7dPp0AjyR!50bn{@KP@wKhcHp6Am2d zit`%e>AQQ^v2uiR%@*hSg?`OGSD{U&r`Ueu97c_nO=`{h!nMKRQ5KjVo=AS85Syec zB?!N2gbKL0kVn6*R1$uXa304CSJs0;GX>^{@$k;3dcx4$`;0D1!i8L6O}X%`6L~0qQfB@)69Jx;urQk%d4>J7 zrz@#|WL(ILyql>I_PP41y+BrNgS{|0NI(B62cjTNd!b*FWw;7Y!Az|5xOZTmtAbjI zMtJ#?lF1ZJ5LQ@`LStJ{)^x3edN(c9no3EA`)JKMgaZI^Yb*ZdJLO-ui57+uTs1+Y3mV`iOHKUXGKApe6B&SCVrs&I6`YdPp4i6lNB|R zF0MhJ{HhR?g~@kimr6*X(}QDHUP@F}kioWI2w~ahD%T7S$)A&;Y)r9KaT3T?*=GcC$NKv!JG#s~3V=Xw>`~)E3b5+o6a|ACx zaxvMeYkvtTYIcA9D^aLbYQa6vVHL3=Ma}uuu*>6>f)+e5 zJE9%-xhiO0y0wZR980v|h08F9tVmJwf7Nl2$;af?6v;ti@+xTFii4SupUE3p|CW$~ zCb@sH9OBrn1^>Hu36bn`m1~AX1QjKyAjpu+rT<4H`&<>s!u)X(g_z8L9Pd-DNU^rn zLRt`2n8`BbY#?zKQqZj5bShCrn5=m!L_&(1!|op^3T@RwI`vIUBzsN;O;b1#GVn-0 z%3h3_o;`7hW}mCTL=jGS*UOM8r+y)}IP;^!u$ss+=~mS}!oyamne zpYdduVE*@e!NjxYRH(DLotsY_qWmS9S#v8lnBkNNjCDJY-KkA%Ddu-?#@Z*>Je(HS zHl>-_-x1g3R+^@Eh7MW#KVr*(5AE`_I`Qmt^;KtY4}~tOgMhs(lOtM>j)F7=OQDlv zqlXY=X`y3gwgZFZRzYoM^hX4hXL4Gl0us{P&a=bttW;or`@&y|XV0miY#Ptd6D`of zip=bry8#TJ*nI4qo-kPGq1$UF5L=1)%aao+Y2IiDO@v8W=->HrNi@yv{N~t0DE4hF z^xeWw#Iw&;Xy*@e&|6z)v=)d;s)BSnR$-~NB84@~j?~O?~Su z{(KANug*;JR#<7-=W5C1ANPv#BbvObf;vdxf?=GOkc z%t>qm=BK_*N<8~q1!eObTKM%p%HNQgSx!XV>~j^EDCUFEPaD_cXpC1xnsa62{Yska zJNBjQjhR`K(IL?^xASD@xx_YMe*X#_D%h>+tIk4gFSOrBR8uC;rY|EQg;8|{UBLB9 zGbSHiZA>IPM+Hq&-_nPH45a+cnRyk4b%cGcmP|mx&y*kQtmgc>Vj(f?a}}5<#^dMb z)0J+}9V(zDN^v>I;n(uoCa!jkvbSO;ykyEKYAY(6M#WWhEA}NEqBU2pIn{_~x2mt2 zdq>4pW)arCHcXay^t*%P+yG{>jGVYma6W9s8svmyn}uo$lo6V;K)FI_hh$!=A-CK)qOTdZYT zSe!LDOIwkmX4;6x1a)RI$)B@{WS^^oX0}n-v%4^v;T2xwTalt>fkKUm>dIuU?Olmv zx2l3>@q9yx>c(W@4{;=jPbN>DGMD<~E&LYe{ zD^k?lFdQdztoB;i%2`+e+2^XDxw9e0vmcXNGhrRHB1O$VuUsbzryVWq=)YJK*sZFd zdHoWg{!IQo3DLL}DQf=P^dwOOn7mi}1(ED?^`R+{^Z}ZUiNZdig?-w99%7%X4^p^V za~CZ0grGqn-O+Ykje<0t9o%7y$5M90sG2)YH5?n*=c=HV`_O*`4Pi2Vg9r&}+8x~G zis3#AW2(7}wE@p2317Dj`jMqL`jDHh@{_8TmGHI$=eG=^L6Duj- z2$0Sjqu}sKj}y0ox3*L^OnVPmqIxxhlzVH}EcTMCj^IG((Uf~@(+#?&YkvQVat|r@ z){a=T-5`fH#$x0l<=)y&CGr`h$JgN@<=)!b<-X{oyZYoxhNj$G+hjWq58SumjjL@o zNU66rEXal>jLERrdu=*tlY49H7xVT|?a|mGxSa~#+PP<3x~6m1SiF_>kaBNr-4ZEJ&hu1nO_tuhIHL*d4L?94j&1iCO?ae7$4f5~qxSnEC?yU`rbq;}; z=gE#9_E;wsytSF~jnhdw`rIo`~EX+7*uxzIoQ$-L1z z&U+u|q=L6LM`>@Ikk$X7PAYh7%ilwI?CGJ>1vcrVg10t#oKXgu_+*eyDtK$Rj`Z&K zn@SYbNx8Q+L98e5bj<`Y<0jQf1#fMGZ1Hu{Rp6>r;H|xM z{eeNApN%)>Oe%P5M>X1@li|Y?<=06CZ*5k8?|5b`pF}59$i1~~&*G|wXF^yj7p{7^ zwhG?bJ2O-2r2A&gH9D!_tvxqBolb_Iy7-GuDtK$#jKHNI*Vf%K(um`I99o29UHpZm zaTUvC{CWO!S(7&-`oA4?m*XE0)z;*9-uQpNpWO)j*_G=b09UU6N6s2ZDw=)TCcbvV z&)U^*qW~p@SDlPlMjFwQEsgUP zuh^>fno5*|$t-hN6COUHp1w5CuP8?pwVP^Nd-`o?{zRItUu~OC;1v$`TFurl6XGUz zNz6j@9Fy?Y%KO<~wB1OeI9|4ADb@g*7Nn?It0H#3xU5;ZD%Mzb<@(SR z$+j(C5#@Q->b*m($F5u-r0}fRdk$_!BxZ(YZ(r<~gcLQ0-^7d$W>RqFDrke_Dro+a3s6EP`<`tqAw|uZp`VCK#N_ZexH@HXte|O{O^)e% zpHqIEZ8gXE2XDY!r9@zU7!U7k`pY{sj`_(p5}$+%nbikxM&!bCcj19d%FOJW1th}4 zY`QK8@6uLN0m-Y z+PhqT5`}n8bNuOSAt8mv-bMNMz4i8s^A=amn9rJ@{TO05cIC?J;EZhXfuPh(29?1n z`)AT*QSd7>u{`C+*;Dh&c5VTfO{kIdY4xj6<|9FAnJjm&wuBUBv0tl84~asAs`*tf ziLi}bxjr;SvR8K8UEro!^XoDPmN53#`XGf}$**sZk_2U7vQHq^c`H&FAFQ0||3UHs z$-hWE*A~1vIvdx-=8Scdz6rT9q6l{7%Bz&HcMzsFt{OCF>uu$tAWg1Z=dk7fqwJZP z>7Q#Tn5?Lgbhw=32V;U}VRCe3ECW`g(CNVMTm{W_gRo*`V{#R{ zudGN>^FUI(AIi?;4*q%o_SPzBo@#_`AP1Aj6XHN>MT(jaoa3WgcLMg_GV3q%*~pgY;%ZYZ>?O@6=z~AqVj-rMSp}K!HN_$GnUUw zPz00iTDZJnZ>@r6mpm8|(3&e-J6z~mk)q~+ZN&+~Ws2tNSrdKBu3QDp5sS_fl%L5V zk5frVQFHl1gc1dqoSifpk?hJ<(A-fiHc<%FJwvf#Sdn6F zuhOl{cUP|K^zADkaV}BNyz^&KB8#x*wZHLvT9JY#y-Y$6f!18_TEMly4p~9d6i$Q% z{LzTA7h~qXtJvt+l`Ak&gcIKFEiBK~uxV&v`Hv#JW{0f6Shut0aU8u$F<&+}&I)qP zDl2hpD$PuVmpBDmX`0))y4Ou&%P>Eq%Pr#BmFug{LJyt2c9f{HOm2wVEDF*TEYauI zU84LrvT0#kw&2Q|UAYQshv#CyEYIZryMra9shw`eI6JYp4%Wh+o~lVayK)6(^LT!3 zzlpL}Wadrg_+ScCA~2TY>2}9IMQkPT?wF%+ZzR=phdh2l*();>m=#y^R+{E^=4yn4 zU=`*w21XFi-dbOE_KqhxCEgKLmC1b3u-;mc!kXY7yn6>xxU$sT6_SJ!$*x>M)6}=_ zei7)K>de&1hocbtTrHVyhr3b!8q74AQw9u{E`f<+JUoXJp`9oGnocFuM%d2^m5|aTkET}LJL=A zsY?|8)!e_2EG{9%k=zl6E2DZ$ZjAScNOt8aXzrW!iKzNa?mmkv4lB~!+S@r65sURt zbDw)yk$86H3d-g=bltv>vNvSr@&t?|yK)64iuoY)(~As`h{fKdx$pH1SJHg)8P}eT znR!^WjzrVc&hUWlsBaVIzpVa9JiBsz)!AFy@Hm}^5Y-f9c#JJL)>@ImsD@XXn2(@l zOr|V)kVy8q3YwQ!ETM{RtvA`!Yjg`Ybz?7N2QPL8lhM@weU{)aOKXfTwgU8 zMrGiCUkPf%|XK+A=x&Id0C_TdSbCVee_8+A+EI*Jlz^)I3u0H=^1z zxx2?aBH3H3pm}CJp6w1yo_L45WGhn8j8`@cdwxfd@d`}C>|<}OTr*ykF*vn$VzNRV zoOZ29QL|}uYFQO1vYw=o4%qSs6&0fWD<%C#Xi`RK~b|Tr8 ztDrfc5aLwqZCbp(!)8cGQFF|>rv!Cpa_FU_M6xSaL32`#zlrL>IXr`E`cp&gjS) zI})1SNKtcZ%riuFWpeF|&P1{+S3z^nSIqC-nB18cBikD(YF_Lzk*MxWp1x}(lD)MG zn%BQ$*2GGzgt{FSPin{FsGIsQ;s9SHOsF~#cY=ZhS>6nbi4eZMGped3$>s}xVr!HFT z^zpM1$*x=vq;RwryHi@k82y>d8{9Vn(zJJoU3%CLN5;t#DR%-dDg9k19SbHJb*tb6?myXLkiBnK(=`>Gz+Ih~ zj5xQU9qafSq}&PIWbG%Nbk-k_X^?A3!3o^v<2;>ov?x8?AmvWrjcY=6GI(99g*qvB z0z0CWxucVg$kB}+?=N=(7h1ngC!P7*<cj4pQq7sx-sAoC1;q-!cTfrA_6 z)=8%$K8~EZoC;3h1`QFyxpP}*nK7~zoWNCf8#A?|;(KE)Q*Z)b9*2OFHC^W~W4Y$s zDmZ~J#Tc!V&T}V%bW*_yy!TWUoebJF;*L%#IDzvY$04J;hVt-pRnDz~6S(OBJa}-E zjq;w*H5Ht|zw^8{$R9tt>7;@acw}vC(cPLu7r?Q@xm9oi7tb9wRtgU^`mKT!xJl?L zL$kqkM7gY~-~^`cuQtfcs~_v6f)n^m^{}<~59YTdwP*f)n`pzTF1-q;FB3RB!^%K3Pd8gJ%rCrIQLy z;36H22*Xh@?I)d7Z~_l>ozOL%ee1^6Nd+hHxBD}6()DSb5#K5}fgcT+q?5r9@)?>6 zPT;=1vg)L(=l+p;ZWWxsTQ+Xe$=DmdN6|?S+Z|z}o?^kD%w>v>(tGP-x z&lCJNoNEhbfIdl#fBm!5B=Bz!vCj$9H~aS7P!u=f|EBF)0w@k$QpYuJXYvqhcjD2m z>(4j)9&Wz}40eJ7BV#%? z*+VQa9%_YL%8iMN%w&PGh71 zt@*57=`SHg&8zv&5`-92^Eus}b3RN>^I7w+1fgX#pBn=)Yq9&-LvBUQ|Gpd~CRxj2<5gn!YJk;^>S$#2z$7vPhE51O+ge zqyJYT*+cAs6mwfK9Vo<@ns14!P6;V$Ha^>qpg<;TMTrWs1YHy~+jm+?l#R*eBSIzQ zpPq42;1#l^ZOA(%f z+;w+26I$KQIqP2>I~n#63uQ8mV&A>95na)=Ni{frGUk1@@(N725y>M8CWq7|1mVkH z$`J41n;h$kyvl{oA8AGDv6<0)Pc4-R3)NUg5Pn=}9`P=|$*tbGA$$p$3!9n46^ur!v52UC$ z^f|^BcGa3+uc9+Sq9r_#!U*vjdl@HQ7}J{HsL-tvQqB-P1r;1DfeNdCF>jPG!ioTsAKsENYh$qv7|*26EXAR zOI|Sf>7t;P>cCT?5`(lvesWSm3WddiO6nFuzDs_3LpMpncgoucCm8Gmmgga$)Sl-= zC1tYgTJ*@jNt2<%GIBqn(`3xFUyV}__7Ka}EE5yeBPuzQW8Y&{@mQmFKRiCxec(=$2B-T)*9vx4S~4kd`nz~t1l z7bK*pxxCtUqB1hMpw?9)*$J$mxvny%x=c*24qPfBMa`qLCKH9QM+?}t`60-sbWzYe z8-O93g~^ju3ra{)^G=&9L}9b01zhd0kw|s|D`-9`dXAuMOg?nHmXM<6uV92&*_nJ* zc{q{m1eR-BGo^V&6eeWN>RbGSgcLNb1(KqSIho8>7muXaL#&`#!g`n}1O}S5NVQ-I zDQdR4QI;SaA8OWm4WpdDNM3>%3F}E}Q z5s2ht@_%`8)Wl9;1)FIv7l)RC#=V(45Q=- zw>0a%qSe7{ql>_V3-8?FMA&?3y<^`)Xd&h=UdDD$u6g5pQA%H!nX9fD63su8cbI0N ze+C>F6=D9v=Sjq~pI6AUshoj66h;2=5L<+fg2=<0rn#K$OLZj{bFLOxdl&o;>>>7)XQ75BX2(KalF3eE;AHxnGzCk6 z17BeMD#c9Ck%$S|L#&`S;t4jun$lNcCNu*Ad-f0uOa$%m_iSPtb^it3p(@`cUyOzkqTAS*+cB9v|%l2YqhTz zQ8k%tHV$*2H&SfL-Z9P)Rg1|k))hpu6IelWP?YyXp-naVCik8a(p=j4We^kBVSfBb zKjPU#EGV1%(Cj$NDScgLCNIZ!jXlHy6G49v>S@gxte@DDXtu?XaY`fCT;+#)tjYYd#u8PiE6~;zZZ~a zcI671rnr?Lu^wr**E6uCWLK_N#&7IKO5TK-|3YgL!yaORiJ(3H9-sDPEih{~ z#a-;SF4*hJa~o$9X1!+2IMW41kXupN)GGG;F3btdna}voLgLv&>?!AAtzs`WsxVP4 zm@IUDs)Q6sTw4jU|KT1eZv%n1Gwj-0d9NURx53zz~@hK;W>cph` zYdF1;qGnasO`(qt#Ff@U52Z=$*|S>rrr6K|xbIpm*TL?LR_g8HmlOe8yj z6*Nar#0uJt$>GN1{$CDE$CtLRKCGgDtOuTH)x}VGm?7Y2H>6(zH4_+`p`O5c8Eh)g7X{yPKU*=K4C=iH$1ZMC?puEJ1A~P%gZ_<&Lq9hu_bu01R$3<=wN7?5 zNV#wM^nDy;xXXDWd7wc`earOq_!uxuIxUxQ!0gVg+_yZlW_+D=O`V74a+7l3@|=PQ z$yqaaR+G&JDfcbcjJ{VVomDH^bkaxu4aN&5VoT_*p}FO68Dw4VXEEusaDiM{?+bdc z9iK88bmw<{gOvN0=WRjw=GL6`A2w=SLq1a9vLkpmHluFR;b-(Axo_DK%D+IsO}frJ z)HQwOzU6CECmWglM24&WerN|Way%$vkg-2Tb`8)0TGwe zIWR%IMbxykB*R}FHjY^*qw?Z@Kc&TZnp zIIv+&1>bVbf$t5n@=IeLQt&NzSc5|;cW&E6f*XQ0qso2D_XZldb==Npf?x z_js7()*PLqkWMQ2mIpqw8f3pEI4a^+k^7c|V+@RX zlM24&H>K9qCDx7@B~*xc7@o-y|+_?BnIs-$Z=rWZ2SGP!TrndZzbouqFy zZ=&Z`!MD6C9ggAL?YXUM0-aRwE%*F|EuG%`;2q-jRPZg&Shmj~r)bM`Qo*;}ylz5+ zY`mz8PAd48e{VK=yyM3YqsJ@wmdn@Op=*YgUK~@`RPZe?{Q68M9rN<#)=9Zx8Ejh(*fq;p+{fjTMoEeEHK8bc?8lTO~ClXBm3NNB7@IvL`;jm;hBR>8NtYSL?+ zbS(V1xAd(g-yNoZuNX(e3|^?TlPW!!EIUEp|DsG&k9*+8W{E96O%n<@C+A zC_X{FL-b8h(jg&5O}G0v7HgI`jbki!JbTa-$);HXh{7Mux5k3zM6%=A11XFZ-;PJ| z$P}@c=G)>m_MF~GQFC}EJh}{IviCSVHekoIg66c(cZsqwN#CF>A^-G5N|gprsnV>) zg#+P@_=&eTTk#VwEgb*t#$Wg1vL6?o#W8`TIf@GhBPa3GX9hjAJW#^o& z$S{XKX5+C?CetYPefF~irKf3=YH-{9*kH!szF~7)xDm-CDklgUz9ij-{ikSXjyhV z3ndOW76h_hCrBfH*DSWAm~a0kO>3bgt@9lv$9kw)T)R-e?08mCtGv5BL5Z2na1P_# z8z~eP%T^lUYj`ak?S1JkN%&5UC$zzxc!KiKUSTB;m_87X%#t$Mb?4*=NR$1;vbD=< zN}r6GY1?mu*@PTP)hv7K=OzjxRU6ywF#5GH&SRH^z}49aN%vyZ~7^%`@o;4yMPtDG4-Uz zjRWSS{6HVGZ`ng(goV;IA?kC2(lEJt_{|7Nv*USJyD^j=)u#n)xsE4y?0A-|1sv#8 zl%RA>?wf}&%Nr?Fdcc`!TZu}~l0<{sj zz-;r9Pj_${wnzoWz1xb=Ld*vRqi*Gzp+Q(I3Nz!Xi9-o*ntvv5L9^g8jItukXK0IZ zvg6rnIrDbMMg()F7MT71STIBAA~4|s4^ufSwZ;Jj9^q<%MP9U2(k!16b60U@N_|Tx z(KMHH`2@_E*gR-~Q~VH;vTxZ_o`o7Zu>jl4l1#3;v^)aR6f6bqsIrsNBRtarH`bU6 zrZ!y^)b>}nLr`fZ_XISPkmhoJpEi@&GR!|(l%9BYJPXR^e*3xEc1mBCnOClnVDfp% z?ceQbi+-^tvE{(qeBv_Cd#JdS1O(Cysq`#HY zS7WAUI>g`d+zz>vhSFoU)NFm8&6ecW+>%pcVYRNo{P+>Sh-crjr_u^7Ik){fqR{s= z+su535WJCMORlNbkf2&jF8LR+B0HWHG&kKspR3K}hQI&`X)f)>_%DdXj#0B6sMCme zb{`AM=00@hEmrHg%pC2F0G-{(0uw=h5bEjP{GY_uWBy7bHO<@ghEn?a%v@i5U7~3& z=jZ>T5Zi$HS1ZA@{Vx@cGP)8=Kj*Chp`<4|no4kBWR3|1Iut~xj zDQb2(5R<6ROtz_Cf;8E;te`pIc0Z!JFxh)g1_>!@E}e{=c4czzibq7UZ&^We&Httl z)s4xON2*9jQS(^ZP@=jsc`z1cF!n7gXr7&q+UddM$tO5^_eP4E_bXvOK}4Bs-oxXo_U6<-dtSKf-TB!V@_5Eqfq^b1X-nikMCMGnuc^st8Ea-oa6} zBvyKGnxpXdv|zH*MM16W>4^jlWU`_qx`Z^X4vx_|G7&q7`GFm69TgFA4r6k??=B+Q z@vNY^{|I)E1efVk>oeVzsy`MqKUDl(Tq4RPLIft#uuaiDsy5%H;l)9`P zu4)?%(w_9ZLCRg$XR1Fp$P;t(8l>E1UF7LJgDjZ#qfRQgtV^V_8Dx>CvkX$|vUWxp zn@A_gZ{N)zn$Gw5^byC4)eXZI}oeaG+2h%LS%pAI=g3G$uV+4P0&Blwc8)8j`Z--u`jn_%% zVv8}d*{G=>ZG%B7o4MUITc*i;>aGJ zq>D}}xUA=vzo2V6W(~nZ7S@!ztepXNmrgpP*FaFjq=L)(bW60QyFHH`=&X}+m$ftQ z!2UYvjGZ4F2-Z|^S+DqnV8N}qG#3uWm{f3CclocBPC7dl#L*p-3NGvYM~s=;v1ib2 zom6mHubrJ-*L19^iO_~M6JXQKsOs&iUz-PP(#ftg36uUDl2`uQTeT zBP26i^PF1+m-U>6IIwZI%8X^3byC4)eWvYaSe+zK`hA^La9Iz%kzFT42Tk3tlL{{D3nQ-Rq~mO{`Z}rLvMyLUrcOHZEc~RC z3NGt1J>nT;@$->%Qo&{Y6!gCqx^7n^N)4{L+sLhg%eunI__}6DsopJgO$C?r^?f;Y(skwIH=UHbtV4sT zA^wyzG^q3;om6mHe@KW8sC%ru_RFG^a+kI9pDSZ@(it~89G%>r9=2G*=FF93q_Nt& z5}X^!ByX{T$V^5Pjc+yn8@i})zG|sx{Og}xJb{0IBeicelRtaJv~Rc(|2MT7dMx|1 z(`7SmXZB}bO}K&5`!I7LZ80!O=^`*f#=?Cg^}h=b5#`I|y^fd%ypck!_{5x(mMA|a zpXV$JGLMobd9AUQSU~#NigIrMB25SJK3%%ppyd9{xNaSXTEXyYrlS&{>|NSZ`bf+q zZr2_R#N@T&QzI7Qp2$q*9h5>s{y8c^&>HR=sh8BeNO!=44$Wsutp4~Ir$Y+*Tb3px z2s?PqXXQJr)80t2RqkvAi6eE*=i*N$hpB14tAw=#dqB`k z3HhfdQmS-3qOiY6hwvv|AzX^!!b6}0e!?7>t_&{aa6y66Rl=nTE--+ltAR@`Tjlg{7@3-1#`*6g zq^LRRAt)S3YJS5SMgfVIP|%#4U=u-cn4CT;gM<_{4>jyaR9q%kl-&XHVt7qcZ}Qt) zC^4l+e5d(s8dDj}weXCG-qbCuY5Xp&IZXUNe3N4n`6g1~^R3HL`uNP8D&r#&7J5@J zLHOf2L=_46CU?4~qMNYGT3*YR(zV7Bm5|AAZw5s`n$|*#vsy7qkMk?d@AuE#VDi&N zK`rkMJWfGPYnIr*>q$tVuo#)?28ET_(%Szx-6RR$sY>SIxYJstJXj;W!wi^|$@Z)7 zM?jj)DwcIU5bt3%)GU*R!#KkJY=shUyIGMS?9MgIrWNfZq|l2kH;*Ag!KspFIj~?W zk?ha*ped4X&VWqG4mXEJ0N=Tu7Mo`jpqj13!@O0yF z`CnLbS(Cr1LHA6J8(U*FZbcunKUv_AtQAWi;kYvH?C8qzY8yKf>e z>5-$bus7Ub7V=r@7J`;^OctL$NkR&hZf!aB7E$S$tloA#$X#lhU2|hH&%k7dI432f zs5xrscA_#eIj9J>vh1=}DCfjb41!Edj=Kg=n>SL_+)x$^NML&=w#blObPb8$M z+4M&lqH;4?r37L$_Gc?-_HO!`s60%zeRPXRc3CTs!zO+tDld}*es++MVs7VFnom?d zCMT3Y(8vC41+Q5%=i9LfOz(2d&;v=Lz|i)Y$(a(gr-BEohqR*52go zJxX7hnF5h8zS!~Xm8n&i(J) znnGUtprkmQsKyL^AFNVt`?YRF>8mr-{Ye)|Zp|$@KHUpq(VCilM5bfJv&-63X@!=Y zvgtZOHJO~)v7v+%TXLxnV#``g&R&OdvOilvb6tfxMAc?;Rs3EO(p=iJgPRbGduaCE z7qB&8f3~1(?n5VTVLaDm=D@o>V3N^AU?S)bLOs1%e3{sK%wOq`s9mo4xXKbrU!R%V zy%EoN(=?ScC^!XT>IUG0qNP7bJiDwtb`~50liTR z$`StQ|aIpN{@Ebf=XS-aTxov1tx;__(TTi7vOilvb4QlD1hryvi{(EFDQccB)0wE&Odjft z6^&ii3YwSKB8G3nA~dH3^*0=Mv9ux zYQ-h0CzB8Aej}1y)(V<$&!BdCG5IR!xP%lm{}|zVGxJ zAb*ply@Rvl>Kl}P05b*ZtOS#lE(&UG1NRd(kjb*mhDu1&>fjvoaVoLs^_sIM+lSeo zt)M*e?GAzlGdV0GHigi14Q(>ZpF!{ficZg({wSwj%XJn#=GC8j{W-xE0sJZb) z5~7ANxqKB4Fxh3Tpt-B`bE1Ybxh+m)2`Os6o{HKT!Q{QUxryWoR?z&?9({HslOOWU zl#qg^E1vTXQKLY*oT`Dd-`L9_<(}~VlfD{c-)#vEQtk==wiIEFTl33_ zi3Tb4gge_eIj)n=R=YPCq}&t!I(`X*e5N6^ao3R46CRxV%|4wB&XLt_kWx>0NP$hi zbuuL1H7sauO{pi`WqF5Qz%}IZ$%e3zNgt^v+*v3mh8dI2d{Gx0q}&reItKzVcdNLa z`fg3BC)`=!5<(ldX5P>whNj#TzV+8ropfv}l1nEQJmGuz+i~2v-EqR`ee!SKb`EqM z)HR)b+QEmw<@A+$!kxA2oi@noOXBOK+!G$B%(`hh8K=bO7Y2Ei$9PQoEZjDN{}r1R z%~iEsa{3>a(^YY^F+SyvL}

    e7@T{Fm{y+7-uf+u|9@#O|NKERl7<(_b7;=Y>=GXCKxx~76B{AD3* zSll)AWM*xhlzYO-p=!+3&K#ZM>ZIHg?o2oz!J}I<-qSQXso)9UnE;^_lfhfwF4Rc{ zPxy{8iFMMo9b?B7)=9Z1+-a+VpvYa$Sczxpq}&tkEN#bj*-aK} zg#%gc@d}>sn^86y6q|0P6LbkZ5zD34Ail6t~j4QA!jNmrc*6LeC+6Mn6m(JH~0b{nmt;0eFq z=8Ucxa(k1}hvc5{;EJ_y5XOBdxNOR?dTtdw;bY4fD^lplINNkm?g^(ic8pcf*=EKV zomB9IPfk}#&n>O?&2>`26FzIN(T7~qTt*-AusIX9b~Q!%ZHuBPZpE&$q|HtEA@sZ>DuUpg52`ZQRc6Cck;& z7y&*E9l25mOw#a-7+(qpCfeivh)gm6Xxf7#FD0Z z^pwMz&tDLQ;||Ry&!k-v^3TBzKX4FhXi+4zN)*1!gi~0**b}axzqtTngQ!fd^yOA* z>^bM6=B3V~iHgSLv2*32Im|OD^aP)$J#lamoyqGHuSrNz^S`K7h>F4FyGlbq!Z0l_ zr*F{KHbn9M$LIG!9|6^4g1CTtqN8I~FvcLlzow>(a*1Y|QWH-4& zZp*%$OeA`}=38V|Qwb?*Hhd2>f%M)Cl;ldl#SNQ1-E_nEq{sS)VJ+iy*4m8K{E)L!` z-+t$@Zm^qND3fUv`|djbjgr%}NzCY*Ey3{QA91VYJ&aG}H=<`duNFV+$j%;b~h*(IdV zbNu3F#ko}oNI(Bq7l>pxxm?pP$ux|P*i0t4gAwA56g7toNkvpBlU)SLXyw=PV{<1w@Qc26*vwge_zdl?AJ~MY-Rh0;b^`;DgVZs)zb91^u0=~)XQg}?u zZgNk#7sv{Jvx!Ow(&8Vde*~myEwucTK075(#7wk}eqi|6!o$cD)QTQPbdZ?IL=9p~ zNTIOs(`5(|?o_`4Ry8~d&@5F}ZpNL~(nVh4fRg9%;43MUO`^_;fHYZaEc4Q2ru4~} z8IsBhW|NYdW!YE?>i)RN7hNtTA%$LSIa=}vkttYn{au7$>?Ze6LXo^PF%MBGnY>ha z0mx-)xqTFj(TYEs<^E+9(HkkW&p(uuA7N)mgr9J3n;}_Pa|JXlahC3x8aEE8P^Afd z%x-cIg%Lst*NF6=3Bru41+;vJb>(l;XiiLXL82ax)M^y;Fkz6&vbs=;9;&5L!OQhG!nn)O_02Z`pN$y?C;l?97U5$0bG%0fIlyM?+n zm-D-&D5b|A&HAy;AuvPeA~0Ud85m>HVnXrgL<{tJjm|FB42;t05G60pjAaK#i8oDC zIRh7UyiIHg<|pjKCWSrWp7I=4LxG2*4<@Q4lgm<%h=4Q&OM#n;{h;)vm|1mcJ{Uy% z3TiudRw1f1liPfjN=S1#-)Fr*Y#HWnoy)1scvmeat)&Nm6<6Tr4N`8 zx_D*kZoy_B{Xnyo`G7~6>?RkOaAkA1hpAPz6hIAE<-4@=#d7_3ZcQPtZ9r;l$Ez{Z zu}D3o-1h0%jM5_}(QI9Q%W`XO$?+q;6Iz4$p$E`=*iG)Kv_eZx{fT--YihPhg_cQ3 zu_c$Z#we-9q8nc4DzMX}0r)?Mj+gE1aU_^_jUebfiSnT+Xl8FyA&{ z{#9mdN7zm7DbHcKwfm-sNmN57e@5LaA%#}87dk(Vs74^|p=E0l$!>B%(^R+iyt$y( zn3*J_KZC&p=#|Ma;S;5A!c2x`IL2c)xxhrw9)FKdd$s!Lf9MUGz1S$6e9LoN_7`S7 zj5p0*^7N(%aw{sET7|x|dpw~yHqh)1=Ag9fCij$cp;bCI>_<=wCfmhFzx76ntuj3d zdO}MkM|aIeB)iEKH0Sk34Bv{$SqIPuy^*5krszIIwPtd~4jg*1n_NM2XJ52R8z#3N z!pz`}6f}b}rAk6nTaZCX6BH+sJ>hcApj?hk1hr!_YnxdTQq(M6z9UiCNoqlbUSmaK zPq>0+#mg9*9hfX14Lf;nq^Mc%ZXTkbs|8hygd;k3lPhR8JARU&PE0nMh8WBnDQb2( zfOV-elWndJCXzkj3YvYgpciyuvPUn>Cf-O?T*xTpADihHgwQ zY&=;)ikdrTLa#fMTPz=lWKXz)=7FixiR!`R-YN+tq^Nm5vV*9eOdg-On@Dz(D`;MO zw}_}-OkUb|KthU|UlXq&3djFi(DT#{iDWmqg68jOI85xr9#-{WG zn8`Yl)v^+(pw=W5?JmwrBO|GE1 zX&2`A;Y_ag-7g_U&07_4sx*ShvwJ2G$!>B5&Bx;|5;c;^`%iXCNI}yXYbK)HQ6Qa> z)?=n-H@RHX=?q9k&}b&fxFsP)%^~NT5H*I$Zr9@x$>ttUn)v)wSeW6QQFbPw2;(&8 z|GLcQPomOaF4J@Lm74okNg`mo3fF^AnlRFFb$M#~cZ4^Z<5E)$n+&h%qTpbU^E!t? zh6Xk=NV$W3#G~W}IlSL6gOobhoqmrg|L)v6efx)L${p+j$G$hnzL$#{no z|Dux$4)*%T(&(CT>ckpgka7omv*k~9($% zF1qXZWt3C!Lq?FSax{$oc!>fpL@W-(T%zPH<*j zddDC$HEE`k3J&&Pt>+r#kCe%DQo+Gq=4~Z|ER`fsClws*nVR6p#a*}Q6T)l8l=U1J25>n9g&D1Fuk+GoZo22JQkay|gK~p4a zq{6`vdcEeGzmJn3_P%={g|Xt>DKB<6RwnDuK@8-L6g8)$nnY9}lY@Oxx9nh7&|Enc zyK)}4~eKpEkJ$v6xb z*hDgp!etCD<8TqaXxA_0)+&@MJLl}E6$#npIGEaWoXnq9(vAp8^Q}auIIHr?cvs)%+%($L!~g6g7V?Peu^tPR;MVKQX2LJF)vUXpsB%H4T zCieKu2@DP-71TDZz;H{<6V8Tn>gcmo;;oa&%8TlF+P4vf!CMJJ{t}3ZA-q96@QA%r$O#1flviYo{mw5ryrKW^J*&0Z5!YDrokq zg~cxelih>wNJvq0)Y4@{VNuttgNpo1BzxZ#G$%hUNKhsw|F^lmgcLQ`OsYXtW+vxm zMNq&Fb_LBXpE12=VRFOa+!9jMJaQ5NT2?0av_Ry+-ggDfbD^z>%EsiW274r=sQGAE zG@`OId3Ed|BH6(%*9;8ahp-M0(KPF`t=K+$BL&UC6oarp;|N*{jK2a~1$MA2XlA^4 zj3CsK7MM2GIteLi*6@8#P;Mqm4Y)@nd*2l_TW)$pR30Yl{dN$^-ggDE)0n$N$7Jt2u|U43i-P8)**l5K&*a$gz7kT@Jdht{EWqTlg*%93@4KLB z3MT@$-|0^2F~+pOwaIZf%HDT@i6EQ^n=b>e6h-Y6V*bd}DoUCcMq{&In3+?b5zBhh z{4;qAn*VjdA#xGspO?-x|q6=%lxdu55HshqY31Mt|S1oP#pFD0J6??O4lwM|$J*@opfOcd4@ z&DL~&ya-5Buw?5zy$K~R#Z1eZC&ARFi-KC8XOoG-0jXx|QJ}AcG?#NrfoFu4VSetD zTg0>XT~Ic)r)~Xo)J<7tmR@KLCZCtwn%eW^>QTgEt=DY3Hy2XUJnG+xl9y*@|KlVQ zO>;S)^?XZg1?KOEV9jRlyHHL~?fIb~R^EzCzMhd+LJD(&J@;jdl}aG(zVk3v*i9~I zn(Ee``S~?UUYVJ|UnnPg-@P(vo1hJmOU)j;-ZL=hb^;TwZ0`2>yH)I?te6=P!fN&c zk#Jo3cWzA~uf5U|#1`0AX!gQ;KPlz5To*)7)tM>YV}T^Mrk1of>IEM0g=Vka4?KI{ zJ(V_WWZGLbMZMN!vRRgn5>jl*o@F8vRg1|^MY@vgIp#b!pc?_HaNc=o<~%CnH$^Vb>@gg=`7^ipiqypcky201Rh zBd8IRFK=K;VmG;*ht2zA-bO=i^Zed*8h>F=ArA!wjzlS!QG)hQ03s6G40Y zJwAg{FF_2C8AS_<-6yJ2ZWEo(PRW}w^G}il5#&}>HnmDn!N7~eHfKItZ9n4K!R{&N zVXYEWChv8kS}<86=4S~hwn~rpZ-{EiWb0>kBH6*NpgCv<=0L>qT2SAaktL+4Ikg1N zV-PWDL1Wt|CXyZO3Yzn#V;yY6A-H7VIWX_$4;k=QeX36mziNY+VISNf0 zOC&qk6*MbXcM;Ty$#QFdOGr_(!SxhGb!M{0>ls9{gIz(h#ldYvbz!n;v=|an)EwUu zx$Vm2@O~qRWbeCz=CqTyh(i5pj>$H(r#Dj6To;76q&t%<`kW<_z3&Q|TZgSAst1!B zPydpTqUPa#?}_TkBz++)k?eg}&^+}4acVCnj~!?!Aw|un4^cztyPD(5jtxYz_gz8r z-L5MH^jgXXwtX02NTto$?x%I63O0o51Jww_uE#Y`hldcaO_Pad*3~f!qJ+u z&S9)${h3T0xqSqrY4707QV{1}1DHuUx(=AEbWu>NmLDTzAd}gDT$hlh)xp_z_)B63 zG2eLqP~zG9uAtmAO>&~JtJ9pF|7j;7#kw840&&d{CI`$LNF;mT6*Q;DNJP|7CMQ9HH^tw3ziVc-ggDf)wdBT3}volsSY&9GCAgYfP@q^7gQ}m)Ho(*) z`20y!`rBoCc7EKe-~QPJ1Sk_gIv$U^LpRQZ^-#fYpKK8n++>oYnG90yx1W^gpg~S3 z`qCifetTOLOe(DDjF~mFLCXF1leWb%$p5{(VUTjaed3u%bFPYmjokeX6Oibkdc)3Z@j+^pX4RTikoBlg=jVECwm} z+izZRQzsqkd*CUaTT|}0Z#t*8PC6UadSsAtzy0kkH+0f*qjMvjRPftBJcOa`?zi`% z-8V@0nTj-RfR3V!<*Ef(pdv+10M26>k2!b=T>Y&@A&Cqvc+;#FTRr`&Jv z^qJtRla8O)aB%D<<$n8O!x3z9tGEiC!O;Sf3V!>8`%3AgbI&{koJ=bC?Nj+JHppZp zj2^G>jq#rcIt}u}mdm=Pg5N%49HYm((l$z~lL~(OyrJn0&72Je8>HNCziwGrk6+z1 zzfLOn?b|mwX=t{YfvpGEt%BcvNBbxSxn&E^oZY0{Z(lO&GJ`Do5r-N~%Ki4Ppd%}F z(iIrP=m`pb`-W{0O1bBRdZ_|+O$EPw(cWJTvQW+eI;r5df4FG3P6prYWUOThe*1^R zaG>fQD|b&n)HN0S_S+jHOl8usB_To^u3H7aea>rJbkdn^3QpyjRPfuk>sH+$TW7`* zCzA?(`(F<)803$XII?C^!EZmR84lpw?KwP2Pn}fo+ZS<_Fv$Fmo9d*3-@el_JeqN9 zwtGECCl&nm8Gi3G$h1Z6I;r5dKVJ2?K^_UJsFMnQ`(y*!=wzHkNB8Tbg5SQyJtIz_ zb)~URD){Z6y}_o%T|-+p+(IXdYYJp7$bD){aHtGHJugTGEUdV<_r^GdSpMu~1;J)kzxp!Pu zT~onte|SeWopkM8)lVlC{Pr7P7%`Z0U4{-iso=NYeKxEo>~I)8!NZ17*h)I0JT-Fb zh#b8EYjWTgL?$qLX5=3?qA<>K-uTx)=Q#xa?bP>=3#Y!n_$AEEM+8&dxc~cKi86rV z&?R$p<924J{`sJ91o$wtYw95|Ny9T@1TGv#X*W+`)Nhi3dRN35YKvHH^u5PNApLk^_D zT`)xpdG=I8OKRegOjIUkF1AQWQS(r8jLB$B?x=qe|M#q`JWir$AjuKMTEO!%Q6Kj~}TXf`kkR?3lRv4eYb@$`JijB!i zlU7T}KRpq*4#dTdivt%IE+M$!;4X7qT>il&0WOJfK~R@D87?VsNrekKZRT{iWWdG! z@{zmlHebe}yPb2^b_$niIMRg8Q>IbuyZS|ON>9@!)kCj&T$(ZAnQ$Y*{dg1!vhn2S z7CyY<6Y&nd$&N@^>i87_ufqF#BBR(SYQDSoA(Z4-1O!GD7OF9qAbgp>u*=0aIavUi zW52zJn~1G=t9MqScwYCtb^v=fZ=}$3`~vb~77Ag_FQ3K}$$opere8?!1w_RL>E|f5 zS3-)KUFYB-Oem8rzZU?B!YXL?)AAFAb3x6oSJ6olQq){n5ofJf+cm!tTd*5qr@o+R z>P>!gR^ZWAJZ2_-Tn^@%mwblxrcz;z>bI^of^R$-*8G-Cj-n*II^+u_kI&5Vs|a7b z2@AccoFIJSNiDiT0=~)iEY0X9?9>-ZEOtquH(5fvV$Ye7$+P2d%fCs}TIly|VME!1#gCSTP?1$!ff!eVO8TrI4`mXw#e(_NC_PL}xbV1;DAy*v-G z{+nE$prlNu^RE#BX|gR@nwQ2%MFgN(%4V+zW)pH0Ha~f)-*z-u^lzze?T={68!7Z+ z%h+B8iA=$oJp$$v$xeL_nj*O%8rDy=k!G1OWg|#bkOxxi4a*~?Cnyz@iw|y-kV5<5 zDPm^SOJ;<$nH%BKB&@jttcfuNq{fW{eDXA>kJ+g&&yr)>$p-|bVKV4c#t2B0Q$HZZ zzS)#MEi(z~UI&vNIg&P4K$cqw1JW^>?hLje-bkU+1B&-B`61zpYq|MfHzXmw5A<$k*J&?t;scn&Fs`y(99BT zA3?d8%$N_Wh&NKytQHkPL2f2X{7y|IJM|Sbn-@AlR30Yl_O4GP`|TCTcKMzWm6yp@ zKN0+TBgNbfXo1)(ACujKAA)>O7X{5x>9JtsXL3kFnw7nhqUPq1vP2bNa?aj@M6y#~ z&@_b;)-{vrQ+iC`nsqTBPqAxWV8SgJ?rI-=`m-G6AYm~ewGgsze?q{dIz<4j`qk!AQ z7GwT)l5$F#4|ZOl^a%bn>z$ErB$}pj2Bux`hR_n=1LK{>W`mvjp7I=4LxF{+)+DGT zlj%SIh=4Q&OM%(%kD&CWn8{QsG8jBHQBcc06Ej|ECUfq=`0_@Y%h|j>R?afaR}UIT zJUjITWm9_wHjQzW(xbm?fprrW2b0fBZvXDLft{Qi2`$Hbn<(FvG&`)vmJ~sm7TE4m zZi%M3oRel_6JCM&QHM?t&rW@zoZ%P>JBV&j zmG5%q!s`ffYYKS-uV&sr>8mkwE<1XUJhzvtp+2iKbAC=bNp8(8d1n~{*BZ><=!TO6 zcIta7tk?glu(0udY1VOc#eBB4R z^+uXXYx8>wz7F%>GGeT-YhF+`^&y+jq&<|rE;Iji=>UdLSv*9xfA<7i)XxKntp}cd zqeLqu%_!qBkJM)-(k2)yylI-tnIP{sVjD0YQW-8z_S*~P4A+OlTGf`M-A$qzGMQ*1 z9M9fJp;c|wc624G5tG@iIf-PazMyHY+sbbc)i!1(-}mESD$~U)Q!&v8O5cQ;lIx~Z za(3zqOt`W|JU(p=+hYZ7%6F*|ABWiT+}3V5hSE1m{V9Su7|zK^>Va zR1-aco%#xzC97f{>cnL6x9ADpNKvy=y52-}X0ogmMjLkOD`-~jfU(+z$;y-CNJvq$ zN8QClVMfvHosK0WlKu7yntg&1mvm#Y*9O$BH&WCb(-@lFnH-rAfT&(f&g-2+LW-K3+b<#tZK~OqpK3uQ zJM|Sbx2Hti_F-~s8JI!5k)r1DS2u|2%jE7_nTTYkz6VW_ynf&dQT>=a-vA^#^*xZn z(OOWX*Vvi$XY!WIF9OoEcd$RMGKbO+VCK#Pv?M$A71VrpW7WhM)9g=|qb0qOrqzMo zT3b#iqDCz!>h__;vr}I|+5R;?L4%pJP3SKng}M!jxB4AXLzr~soJu4+^%XP|RgFs2 zP$m<+Z7v~2%?xGHhj11~zfWWua?5^u1UYKsU~knJx-%2V_YSYLJtsm7GD{3n{&qmY7U^`-l{Y(FFs$h#e>uy8Y}@OHq+^?tf$oFV_) zVvzE;113a8sLHu@jV)hPCl%ff=vNxyo8A*n8>Ia0fRpysIvH}bChZ5@K&gVsbWK;$8O98z@OD6@fEhaJELY{Vt{GMScEC~JLk4+p zpD~*#yd5yK_&kFg6e)$Ssql8d*_+D@@>Bvmw&1#rE`K|q!RN{bS$E@Yom6-`AjM9n zPP&qIpQn=wZwGWQkApOKPv{c!iB2lK9Z>6OSgTZDl2|7d-VXTo%a}ETKNrC!lxs-g z?SOABaX`emb$w3uMkf{C4mf>(mrgoPI6&>S2N_Jt-wp_I-d?MdA+{{o_%f;R zc0k;IXLK@l$PpY&F{$u&z}PlzbTWA4Mq|xZcst-sh_QZ#o~SoN*Hm~rVExn(UDLVx zb{m~kcst%0jEP_8r@iWpgLq#ipOv~PA%$A;37vxDUPR%V_F-ffkX$uVO`k~_u(!4V z^ohUuKm?@e0g_M8xH#DHXC}$z05ApVB9zc{#OFib-B0NwF_U&pR4~QDGahQir(xZ~ zL`7z@SnUK7^3M?;KY$WzXkEhWbcZN>m+9p{<1UTW^!Gj5PgGPUx1__tkT+7)yps#{ zgf&d_xzu?y$YE-lZ<}Bqz(WVk=l-YJ5>n8lw*xT8;_zIM70D8(F%JYVnP>eqg801x52SF+>|6C} zQlhL(mKlon^hS!BEt|X{Dv-(g$*O`Z;W@XWX4hz`h_W%+_Mcf2@=s61t+(T{6PMk% z?8Rk2E(dWrj0?wq$MMriTzEr!7C)WG(sJ+}9I%4b+_`XE%(!OmDz z{^6T!&jQzmTzKz}8k9ahGrP1^5@De?eG!Cj|N2NbNWeEaoeRSJc7Uhchmn?a{`HAU z$mD}`S0W%yYoXtdDv2mP{%C%Wui~tO-wsevOI!{I_lcSOHFc(h6bk#3l4kiWTbBxTBPwX`oqY8pekr2%)XkXV4P18kS3FrrB8nJD4Y#xmPU&rf!U;_ zW*Kz28$rpL>>vGvgcN$QWx;^rM5SPIjAJR0{9b{F5{l%un-z&l$>h2o<3MtVDyDm{~h>LdrbOHH$^?JH3km@J(Yn?rA;s9C+jM4~b>St(;tBKf@ng>u%8 zo}Z{pOx8@>LPCm~?Gj!hDl?M}gTI1&N*4vqj<*I7m4(UnzgJ2~QM1p43PfdPvU?}= z0e-JQL32Q9TMOvd4z1#i6g9^cE}sc&|V~Gx45| zMCE5P-ntzUQq(Mc0%QRuvt7X?$L|#gnx=5VT5Khjrh?4my?`K%J^lhCZYgrQ!-=p( z%38D35MohQ&00RjGbPQc|GP@bvDwtDmCDtZX#SbJ1yw-DBOpz|lJ#Soqm&#+j+*u5_qJdt)bvdo`sm&rI&bJ`zoHIqP?=L@ZVaEwFmfSmOD; z0#A7ktKq;FM-W?7WU|R*1pVGfVNM8KUFsH5(A5Ha+7LGLdj*1~xo(&6!CGZzhHSNg z!65U>%;PBp{Xh#GJ3a;&e(K>NlylD`f6pd?Urtw}8&u`HtoI)tL2gYUZ{YspHcAgp z3*1y(Q_Ah0fF_i@Ix|~GA}IHkTXRdE{&yg;HJCs0v@Y@dc7RYr;d-CYl9#L9B&sHp z?l&5|kzz|eJc|6*V)E9>%%sV02PkO1Oo7d5Z6=?5%^@L8rM1Oehj_RS^FJHiAfDeV z5R^@Qh~5k6PwDG|vH1={Ji{J;feBYbfA<7iXa>xE^_aK5$7(OvbiKw5R-c)mETIxj zb2&4N!i?E~`Q*7`6VGo4c*=8FtJ<;;YfDr^CNrPLiIX={XjR*Q)Ht7M#AKDG&52~E zzMyHY+ukvbQToQr)Q^MqWT(DYrt7Polpeiav$bA>Q$v2QKwu(h4^yj5Jk^D6(3I~o z_z|Kvd2UD7K<{hD%<$w99iX83 zX$th(F!{dH2MH-?((fa|2u0u3>~(7oAd=rJkZamImB-Gt9h2?iN0X4E=Fq!aiE7Ve z-#*AKzgM83Ikpn^=pC3GIlYmD6g6j+!kU8UShG(qmyt+*J3v8mVX+dxe+jR>mwy#l#rkZ(~O;Gljr`>)acB&47j6u8L#f5y%N zJc?wC!aYfFNixYuLeSvu7LwqyxVt+nZVz{Nw*`Xx!s6~Oi#sgt?kuvrd+yMkf=N%+ zejj&tN&kJSyQ-^h-JX*n2s0W!O%6@=6)0#XxwD3#-b_0FIw2uN&0Lw%5!HvuG%IXG zvO7RQv*6tRM4^nX1?FvsmrR~WQL|!_4FvULvTz=ZKK2!uXo_Uh8Bd6Ut`=D9F48yl z6_}7h9V>AD@I3?#pg&q*%PRQrz^|m+-XXAi0j!*;nrMN)KgP<-?f?a~*{`uLM>eGe z_Uw(7(-Y~oIs~qXdxlVC$6DZ$YhA_FlzwFUP-*4NcI&dXg>OVIZ>0CycdQ_geOwe{CEs{ zlbL)TxQ9so0E(F=e!i{?Mc2D(yYng%qN%{`-VZGNlX&#T{V2WBso}}XU=IxnBxpL5 zj;@#KlzDIAyf!{ZBKmu`#M++hQ4ae18O$WfIz(54bHcLHT@B~F7u{G}nFW<~+*ayf zFZ}pEB$FGGKV`ZCxpBpLgLHitj*FC=Ao3?dp5SV7-t2P?O}Po;rnnC?G;yr*%Q*MH2QM`gq zI+|LrLNIBOn;;g>#a`WYZ|B{|GwLGcCWsf_S#{F(_-r|Yl$#*t_D5FZ(wrTR{ew$W zYJ#vko8~u2TMDeCOv+6V_T(2a-?}tILjEyG`Bx;|JB@vki@Y_jutCaA5c|$tGRWP| zOggDxf>`5SQzt`K?!iu$uhUy@g4pl@s}i@?@mHbGI;miSSp4RyPTJ@1{b-PK6U56F z1iCbXo`sIoNd*%`p$M#Ju6vt5k@1wplA9m~hZfUGNB>*Marq9(O%M)k&qkfJe;t2L zClyQ(&3;2|!PVNvah@CGX4#YN$UpyYopj`Wlu{=ZOb}fQVMTKFXU9R9YWX@9Oc1>m zp?czKZP(<;GF+tG1o0vTs(vo=$&EWYsbGRw#UJ2wk;_Wr%`$5$m>}MVv@|qdH`#8G zu1|DeDKlAD?8A27G|0hyQC(t91rtQM>{zp1_qOzlq&lf!f>=2BoKD)K>fsdvYbux^ z208W_WZwr^t(laYAc9g(Hbz2F(kl;iQf`89CTX=w*K|75=Fv$76U5t8*bDL|}7`DBo5wi)ZEf(hdHRY?u9)tipGrrZSKh_l1U z!5lul>g%L}38Kkjl5|~XNQ0+UbyC3uu{;mnCb{m=;@*pNQf`89q(1>sCLO6~AJ9n! z6GWD07K6-~vzksSm>^ECKs}W;gHF5}uagQUi2mh_XNByf#_b$#hpI?dQK}x~AL&;jrYpY>?mj89A7O3F5zzdvwzA`E;PJsbGS5 z-DHU zvU?Twy}=clZPm%(-*UNj9h?dU(kIsP(C&49Oo>r4KjUwI6xpb;zuG6f=fghX{e=(p zB^Ax5Q<}v1H~z6y+<6;N2!(vjjMKTdW1s7Z6z+;w(8cvcc{BO4 z6|D-U=+A0yl}xWcn_xd3o0%E?=Yc8pGh=dByiO)7K~x+j*G;Y|A%9dd`3;+JhrC;5 z{g=*win`{V>claerJ0hxcaJf*38LZ%k?julk&vS1B*!U&;xjpNQv#5~)ik62!%Ufg z$ti8|G%l zeD;j(6AGHmo~Dxy%C)?!`l-%Uaa znz4W1oP{9d`&#U3@oXT^Q4p@vZ8XJh(-co~GG-cEVKQU;gus}LrbW?Bj@@NF3cbns zB<-hoD+zbHh;%dsGade2BoP)y(=tJLbmwn$0$hO>yLVdTKy05dYrR08U58Z{cUp@* z_AuT?|4O>8g|QdS_>B$^WoF`lO<)RBP*6MC7&U;@OfKn$nvN$@xY$2&{-zwd9^sPx|{>EK}ju6hC@(F z&t#gZ#U-RLisO`9he{|a>RO!KZ;^$weZu4lMY8eIq6B4RvUZ8SAeX7Nw(b2JMB)9X z7N>cm7ZOtF9}I$gTM)J(>_FHR-CfoZ>9f%}u?fx{0L=-31ySF%4dN0#Uh`yd9K5LJFDz zS~=X;+)Tb4fdq~16LQUfL^Y5Q(jJFa`dD}HBGwZrY9{XwDle0cq)0#51figrq2w&0 z@-Z2@)*&H9%_6Z&5tX0G>|5Uv$tDN|&Av{M1(+=HCq4w~i4-+Q58qEzK_&;!LD7*- z5DJ>p!lw|0(Vzv4FM>Pdi4--zdoL%b5Rc&+Y=TfA zeJf(QLi(l!ChCISr6*EoE&b}o`vgTYX)l)ob;n~q-Hb6=w{w9LJvRCj_7h}Fuj$kFt zGGFV`@o1|SSbExaiRO>VJ9>@|Y`tVUq1dcyfem_2B%bXP92=3w1qw?M{F7Jwt%$ziD&zS zS(~Fx3`{)=3TioPA0-NH)oj`OV3>O% z-LJFZQ0!64GhZ=3u9K|{g0kDVwbjpoO>_ljs+}qUCelM|e;v2BHtTS;6`60AC99HV zs|y%&m`gNU%MMskJZZXL=io+I$B=nzwm#R;W;Q_x*ZI>J6#8@cMC|;kFgYv}wiupB zVNS4p`O=oCs!UD^#X`^a2|?5S-hMnbf{w4o%))`l^w~b)k$F3F2_0XZnLl~E&4vVl z`RUqR{qbwB*wfbSPG_jWXZdy+dBU%)bxV2evH!wqQj?kQ;dr4bZLQs>J~F3TVC>pL z?EF2o)~zS)iBn@0tId48x9f;!6NK5-M)#!M{~yfHb(r+Cw3U!TPufGKpp=4{Q?om| zBKulhF9na_}R3-N4a5R~1j zn6+7GZKdslh-$)Qg?~`o^+bxjdSxMcwJDQL&mr$)LxP~`es3>cIz`7fV`k4g+*`I! zcx28e97o4DXXfPaC}P+?AuuuYhuib{VAXRvLkm93wYbQP<*mJ0U@{%wl9}uGQC9o4 zwW6|nuY787o7h&&zhpx@n;^_uF7(P*w!*h&@^jc`Quag&z2XQd@E=iaKsx+~V0B;< zgj~~+qRlOWFz0HHWcCXZQq;`T5G&~KOlI~CA(HJA3Yvw^E+(oSlLaQAwVp^(b6qBk z+4f8>T2YxuwofQ%ZX279s18hSyzeU^Ma>hDSa~}#x&KB@BH2Enpn2&oX6#N(p6>9U zgcLRJ`eF9!%;fda9f)N6go5Uigae7{!sLTv@g=0F`Ee}Ph^|b&3NA<_+b0w>ziTgu z>c-@kQbi@Cpy^E2>>^Q^IW=eS>pn!X2|}*v%y1bMfgVhzO@g!-Po$_h z=x7F_u&QbF`>!!mvk5{$b9kpB1odTd$YQKZo=8!1<}A!X{g@mZ2WvjtCrmU&a>WI- zwm*~ezh)znO%NueP{(p!Y2hGh0F$f!LTi5|-S!U7%{ODw@pw`+`q)5sFnK8`s9ngD zn;@*7nse)RynypWx~&e*yIIg9gPFgcqZaXOpHNVK@Gw15LzuiDzlwwu@9mqwtV9iE z@=1nyM6wA&LGxoSw00Pi?`vQO;fWM9gW~kZnm?S$&)wb<$tDQ7W{_Vk?9PzEX+a6+ zC6$n(W}&I82pY*`*0dNyY@bljEOGxjQKOhF5{_}}i4-;4^};@4G?OjjlqZty6AGGL zF=@K&6G5GFSCx>W=DoGpL5yY1%SopY$tDN|&F5A?vP0Z*t%| z**+oH4AwGWU75h-*N5m&Po$t3oG2GGCxQ%)wFfg8n;;Z41G7PM5|e(QY*8$=8j{HF46WoLGxZZjlU|KAsf+w&9+r+@LO?CJA2CcXSKDR}gaiExHUH$Z{gAihP>_en+~_vgs=OJXpU+llZdd#m)1--!L|A=nyE_*!$eqcu7-Y;w z5`nZAslP}k?UC_j7-Y;w5|O+;cA-IDzmHekuGYqEBoRo*fKz#N($PCV>Hsb>W+RC} zI#)+wyzm`&F8fr$AY(R?2xQRs|Gm-4pfRi08f45y5`lE|Uh`5X9o;7^&`C?oMiPOv zZ#;ta-8DY`O8(p+V>XhAq_z8}$P%-WL?qWGE}@h5RWCjoWXwhqk<8TV zq(P>+_nS_d7)eAj=ZoY9nYCnGgN)foB9fmPJU7TUM_LV4nixq$a>Ujn z203_EZ=EzTk_e=I?Dl_k(mvu3qqQdArXi5@;oImD|J8|#61UdGNFtE-o$HXtx@MED z1Ca$YX<{T1NJqSxb9K_;9k|9IV>Xfqqw~0# zTWew@5lH*i_+53<{@3&*I%#4g5y>fqjVIeae#QlzG%=D0WKf<|sC2lVvh3czI%#4g z5lCm&c=2`8nf~!Eois6$2&6q$S>)`l{?rzZ(@7H}iAat)i9Ldg9FYbI1m9Z|BZ)}v zD0j~wH$`UFNfRT9Ksw4NGe*3lbobjjX<{T1Nc)X*Uk%O68;sFsVk8mCX;U5>NCPosG?02E0L6TieCrykb0_jMy4|Q)58l67K|e;i1kMUJ3t?`{6SM0Ak8FQ#L>qaURog-ZI%Uo9w>+t@dIEsa+5x^zA* zPQ?FA37h~34_SefhKQR5MZ4^ujE=W3v-@f|7<@=bV1$N=pPSL{WkwwaGnb~_9K!Vg z52R2ku=w_lOAJPUradW$PqMHDMXqUCS_V5Rx^8N6;4D0ozmjfs5liP>sKQ|Pr&)rE zwgZC~5`vmrHQ18R_Z%G_o0-sfXTc!d7Z{VfVyXRg7*TPU44<-BLjI@*|5{A397tc7 z&Vai_zxCpEeVhf$pMw6qJr4-t%7^8o1@CM;kwUL{B|LGTNMul&mzN_D;z9~`g3?`lX$QS*NdP+h{@u6eav z#^d3pxu!_|QJ@|{T%+%`!TMEhs|E+@50Z6c$uAY1*Xw@Z{+> zFk^A@=(+8uCz78ijQ#@U1>rpHkS^J967P(gTPg|X%(#aRM-riVXYGW?!jrIY8!HRK z#gC^T9&e>I?=Wv}J&GM>try608~-H8$zBwJ7v zG$({%<_l(W)S@90Qq+7`8}n=uCLe7$1`<7?p!s#%QKCYa{P%x&m*t5RG<{Na-bqwa zkUnu9o&tI9XHB=!pqzlg^Tc&$RsABAf}E zS9u$()>Hk6O3UQ7!XIKF-9C@!^Y7I5bUZ#CqWN5pi~zGiNiCKo?h%60Gx_aMB?&2v z;#euxBOl5DGFJT4m~+{JVseEdnQusOf-*9hHMb2Urc@JB$ZKOoK0uz5iOI0=R}xa_ zAM{LtZU{XPdLs0W?k;QE2BqnwnQ>yP^9I%lwxGzH6twRz6!^0+nIXfd7)W;uN}(cn z2D37gt5q5>+0i1Cr9o(C;m$~W@kDCYh^ZMRq;S)%<$K>C2pbB`S~4!CNVcFTXjaZM zil7`!R;;yNLW-JopVlENCzCZ!BqWk8C<>Yl7h^)t#bo^>xH+CkQL{^~GeqTPviZ8* zAhEYp(CpD{JyF<{YUBf3Dj`M9LBWFw%FAS*FL{Y%3yOl~(DUe#d`u4hSVuyNnp29c zCJNbsW*uoqYuQMmpt)zjc!CNrIW5It2`OqGX^RD@Ad~y|#|C+Uf`aDp)l-SWD}T*; ztkgRRDQdoYQI()VOy2o`F~k-Wxn_V@R4Jm6I&0QXjZtQ2BZ&eTKOl;r2#^7>YrmC{ zLTdv;*8fLPB$L)>vp~L~prDzycQc|2Gnt~@N(m`yR$YSSt_YKbE_5I=0UlC8(=D9{ zsNjd$rzkVUOCJHV5{2AsxHj}rLcy#J*?QOJh0z}v^>NJz0K-`8$QP+caUx5sS2MiK?hZ^b?kg#wTk`0pr` ztUZx#S8EID{*BQ3;B5&Cp;*Fp5JB1P4%?h1gX!=F%=pzE4JI80fr()}MBgX+O-qT1 zZOD9z?8}uj({99k*@&6YE-59N?$=qQ@K9nKGoP<#3gX#FV%BD%wWSL!C#ngP#Xski zkV3E8M#RN4)0D{u(>4;xrVc^V{oW3G9EXlamY~^MmqP~6rVfux-=lc4nlsbAMk8X_ zf+8?6^oQH?IeR+xD=qjeqxYetBX8~GJQ%YWyP9ph4^H`OYei-EUir&w523A?UveNd z@oXe9Yq`)XoBz8Z^vn8aUY44IF7E$d%+MBO=OC(!Rxg}s9(QqARnxZcOeBD<>gE z%||0ac4zX|yxc^xkwiiBCdocN|81@dHNI}yPtJN-|{>S8Z{^nA)pvW~HiK-&! z>j{!RTogr`o=8zMq#&SPOa>lWLL?hW6f{Fu0-oY_w71RbY)1!YZFerW~s4d+7fT%%C4!izbLb|OEj_tiC z5j&Xqb(xTNvIRv!dEbktL=9nbcb-TIDc;+&<<1d>TtRaj`MQWmHj*f4UfF}n;xHyJ z#_lg6Ma{>_0*D&UCS zouT|)qNA8h;df9%ikf8`qQWzp$)ew|ezFBcL9_^hQ6G@)2E#6RgFW%@!0v(=DeC3Z9P9gBp((6llfAUD$#mFk+VK zWXsucafkSeNLn_)d>%gWsWzbD3;E;tSLo{;Vc;jW7^w zGq<5w!=!C!coKt@ex-^%uKlJ#zVo|jkTE-91Wo&xlbA?ct?in;t3k%>gb_&kDuaVM z=}5H;-RZi{n4K^p`D$VpgFF=<1vnQOvlB)jgM2n%s^!)?pWiKGkTE-9MDj{PZ=DP} zFz#=IjM)hzkd6z^WIE~CRr0z{T4Hv>h-5%xhfdo6EssIK*J+8_2_um9nuU?Lxq7AW z13ca?GG-@?KspjUUv7}^Lr^$&kuf`A1kygFtXNd9P(>+@XrT%#7BXIg=DJnfuDCmk1KqhQ1L*2D=TlI^o1J$ChH z&H6|+nKW_22&DbgH7wb#)^3fD&pxi4#U3?F|ae(@A@&J5zMh#0evk&vRTi$cvYZIl;sUBak!?oi@m?O%=@@souijb{CyYquD}=<@H4>7)U9XcSP8fl-zfAn6PTDVTSg4aGP8fl7 zqzS+V-=&$j$Wfg%al#0s{mMeSPTKeH!A6Js)5HlQkdChF|JF%I{kC`+#H5K6Mj%7J zT)w80ArI>=)=3j5j6gbq&o|RahmUtEoiuU6h~$l){}|-ar-3?Y;)D^&*=L#?fG9pVvkWkZFMi zMj(S0*EMG9pwYVv>7=mDHhESY5o=J2=ho6!F3n?-6PiHUW|twCL_W9lrmGgxv_reB zEjx5*`Fr!MjoUZt+@W=|tc^Q%?2@%z6E{^YvSfZ78>^hAL>i`n%9J> zLHIZSGb>d|Kp|+%J>zul?wT7*v6@<#IhwHz7phQesuVQZTM2eclcB34dn8|_Aw%zZ18 zwHLG?%Jr<3ANHO!*&`$G6|a_|c>U$an)T}iNJvq$*ScavVO`X`I(9+vkUcUAn!{@J zBM9SI^XhjujfDI$66vUdPZ98nrXUxm@O&10i-0RG_z~e>1TN8i!+(9J5Qbe&7&e1p zu@K@Q#6w7ckVu%PuD?YQ6=O#8nwDuc{g~Y~!Zo=)#a`!W$)eA-FtaH14w$hN1m>qF zlAox85cU^@pI%K$C$RBJZsp;VjQIH^?!ph3htcs!ZZ)sF|Enz#j=qgyHbMBy8k_`G zEzRrIzj(ITBV*S3Xwus&H&$P~pwYbkdyVqACsG(W-g(+(BZyZ7?_{&lpX{zt(2UsG zfJo$jns@#+OC+SIIj8s)f|4*fF+*#R=m`bQr3u4{3Sn}7x9t*A)I9dE9#QC6&3j#e z;vmoctm)RN-iJ1!ewK`x9olj*mw#qVMic-31lJVceYq7j+{yVQe`kQET=+to4|IGA zX3pI0FA)|-QwCv7ysPzvPLPsMa%U+XG@3K#chM2)pG5KlajTlI`wa_OZ@HibG z%FMUrnBCc3qo5X+0%U5CKK8#c5Im8>#b%>J!(26Zo^5?<^6$<{!)N-f-+G*B4F!1{ ze49955S5n6x?4NNK)QX@&}T+bWZCJM>9-^l%myVjpLr2Si9!ad`ON-WMM4Ur*k@O# zQv~5z*L;?Z`$QzWYfP?CB+v4zp^Qu(8;hMcyK78HA%pX|{1vssOiW(bhJ4WzDfCZ1 zIy9^R0ya!xNZ!ICqX($(xaugEWX6eoTjs|x?5>eFiGKMDl8`J+PWtvJ2GY%4Ia~EJ^&F&hxn(u0VyjjCEsrfEHl}SPhH{Ew<{r3cAXL7^W>>zhgP|!S32a|aY zCign#OGr`kY?VetF2-X0zvthOnhy!gcLPX?`lmH z%DtMOV*@nVU8A5`XWtrv3NV@ee>MpzYBqnlk*I=9HoT2QirqB|n(dlmT0}~r`L$l& zL_&(16AoehDa7R968DK@ca4JP{D9I#VUgDSrtc3TlHD~5KT*)*j*!Br&~JV z_cZBvI=(0~xBkHuveQLiVn`>V=S#ouq2Q6|Yku$UF~6QpBJl2-Uv6U_DbCENxtK>h zY5thJqc#0AcEvgIg;w92Qoa%|H8xcM?ta>m27iLueW1dt1<-?2$2Rvv7yj%)3q0Z%j@++cyT% zEm`uPd%YGNUzV9^-VMRjqoAO+_;Mej$}zbh*(nL>ex0|wpkGin(EN|CpG7>oYXoJt zG30;k`hGgR0yAfA4ZuWtXe}~0(Z}KcsrYbWD>DD61JZrD=DSf>>G(>_yu7ntqUm;> zR{Kb#ua&`D6Rk~8JbPq>>-=d9M)#*R=~pEERhUeY1L=z=QkWC0O&hEvsw$J&(<~yA z{VIZ{+r72cuk?nFuf|N+(OY0JX?kR8RQsEbug*;I1y{kqT_Z3*U7M>ve(e?OpEa?4 ztHEb!IUZ}-udQ`Ud96LSY^LLDGSlX)4;X1{yA8)`i}9{m+s#4x=&7~tJvm|?GKAX9 z_dnE;cy`yAU9HfQ6Ra4wb(kDe+b$u+o}8N?0a10CoSygrk?fIC&|KWF8By43YS#G& zPy6p*ih21p*6T^5A?$fy$NeOMp z{L$KKny0H{^V5i#6SJ`q@ucZ~olkB}A+|B|wh+S4Vy}!IeuyAE<61z!*c*vtkBoxmr6t7xY95nt|zt-6g6$$iU#fD95n7 zMy?r{b#NSlIxv~>XdMYDY8K9o5>Q7b^PR(foINrMnx&JEB&rjW#hc%dkfLU_g3#>D zWVuSe6UiPK1*_FvgCz0i{yGB8?!v?Iq-I#3qd6|S1 zHK)X0LR5Dq$HpH_Bzt5OG-o5haJg#&XXL}4*AppfuDy>e_kXOpvLY6J_Q)t`ZoYkx zsGdx2m{(CkikgRxK#!XoxVw6CBH3M|pn3AZY$AKJ=CMI(B&4W$e+V*pWV%}5r7;#F z*b^`qI<#9t3Ys?UTNF|Kn0)*80FmsjG0_xBn>Tu;KS*-KqT<5t8WU33 zf7&Xp`A*OPCY?L+%S(SH-S!T)^ph~-4P++ib!71Du2E1clgXc`K}=>Y=a7(YtAnjU za`ebx=Bw2L&+Zxp<>r%+0}f%b@fBp_o=EZDc73&jsG&@@%}|p_cGoCq_PJJ;s9{X@ zoN-=4ikf2z5=W4dKqlXj8 z?ivNngK>8fG>XZ+6@4Y7sQIE-eWFG)`7jRhMt0XIXukW7dpm~7H@V|UNI}!yB3)Xd zaF;ZDodj6z*HJJB7)`y)mbFB1O%8XO0mymB}^5C}HTw?ixYUEvL5c3@b&)Ph)0tmT_S2QxF(2 zOLcSC*iTovM(lLv4+R!c(mXLU8y!D`nIks`Ni^N&KKrAQyNR92{N)W%#Iw6bXtVou z-a8#Y$IoKs=34Y5|0-jF@pzq%_#=?_VGY&nudg6WWn+yQADxXmiq*t(@&`yq;v(x~ zAl=p#N9x(T=p*{i>!x|%C+Z5Iup(O&UMqzCc+97m6z-ziNTyM_7rl z8et8>UkJGQVVLLmTQ9@5;=i^d>_pg&uoq!J!a;VMp9Kr>JO9)pG zt|8n&xQTEZ;V!~`gog-^5uPGEM|g?w8sRO%dxVb&{~~-r_=fPELLm!+H$p6gI0*3& z5+Ec(@I~-P2tcqQI1qvmk{~2SNRE&aA(TSFyIm-{-jh4p6~-=m9*@7~Cll~b;?e(6 z=3qIhc`~4FxPrML3M6^!St2dY>-uO#BK&>KRt(#bvJv#dC>&us)V>wk#bk0;_dwcn zeBY>(_Ux%}+g+sG61JfU>Ss~(N3*XRI?y2Hmaw*0kL#qPweLuSlv=`^>4v1!NoVRJ zs3o{sE4PH@zxGupgYwKAYLL5ScPQ9Cc#%#92QI-Vc4^)HAI%x}2==>7 zTI80n;yX*|q@#%U41<(g!p7yo`Vd8bH2bKYSRY)Pa!XkFUW^ka9R=ewHb}W8Y|G^Q zI%(f@!pdAn<{w3WG)IZt9Sl-#3EMRnZw{CY z-d-0|I%_Ie!mb9Rn$D#CVx#2-`A~Lmogsf$*GXqk;4+<5u!Jq1aY82@3u?d!#I2QE z!W`bCKk20XTfZU(DYt~(Jo!o|9oI)A2VhOPCCr(8CNi)n`lHeB6G)|#a!Z&aV@~Wi zm~^E5AF_YeH2HEQAwzXc$db_@$2?iDlM0rwicg9fWV!59byC3+HswMtgPar(>nyic zZV7W__Dye)>8tnFNd-&T^Fuie^2y-sI;mg@D^}B(Zyk|ykQ#7n<(4oq&7Cncodb-S zTEP;wcRzL;QS?U(+BJ}K1I#80maw~7dg!F{=2PrAxU~wFu<{d*GMXs*qdAJUPOp;+mar?Ojpx&GVLWX_U78A(u(nsDd!<#% z)H*4*gwb`bH(Hx)94C6{6$MLJt^LIevibmHwU=AM$Wpz|AmgqqsJB+Z61IAAtUO2*GUCS*!YdlbkZ?u+B}_9u!Jprw$C6J7GI&03YM@%l_GW088vOP zPAXW!qP&bO)$zyfJvymi3Hx)LF%LOcTrlP#1xwiC2B?Ha(I3sW@Y5q*Q^69pa~XMPEcuYyB&l%%ye-wZS{M9lRt2lPcvHs;leMv?0 z>e1me{>}f)+j1082qae zgcR-yeU(yGqP&@WS$hh|a3xL41nnqMblueCpsn*`Al>SFmTu4e=BO!kj8usk+#DLay@H#Dxq-3mNEIL@T%|(HEE1P&8tM3+!9jMY~quZAb%!n9-Iua3sD&2djml2^*KUNp2>THZA{<7*d{gK+0_T+& z28GTboI|(}J-WU21Y&Q1s=MaZXFPTlY#9@-$?Ylj+Sd0S9Zu6GF(XqR0E59TFh7kH zexf)_y&?#o>fDfc8=qwV->7ZMg^zDRvTbMPu-|Nnuy7k)znsf8T5jCFPA72iNiM{_ zgOlJ@r&;TTCg1x9kdw*VvqwlsVdQu_=A9x6@6u}W2n(a> zwIF`jT>MJ zQ&3O~xt^D()J%R@ok&6o7mIfsg@nw;CoBarn>09+Pqw$1WY{t$Z-ejTZqUcuY|SUK z^7)8Gp-2DXgJ)qI97C`S-z&1X;XNI!YKAx_~0QySeZ1R zalK0t$(At_O_AK(?Jt5*J=1*F_Qa&f#xE06$l!c-J;utLiOKERuuJwt3jOn)4h^>; zcq7C@h!Z``e3#uiNGHvV6Z_6cT8MtkmN9vg9QT_wCMXM&e`*0SknWbTJyD(Mcr25e z@764MmBp4Zxtj0cKc*3sjmZObl1oV8ru$yLgi>&JCQl7d0}`{Hg67?^7>qfXyjic9 zgcLR3bh%7aP9~rBzyi&dF$K-f4O$SDi^&g*wn<1q)6Y5;4}WfuWZ#+wlJ|Mhlj~2* zZuA)N3ywRVAfzCgpS{9+2`Or3tcIl?Q-|i4@@;k^*)k@-PQM&SP+-W%WY)yk9(W=} z%@Q@SIAaT~`Q^J9n@F~dDQNaSJB1)DL7HEg??@*-k)r0vV@L`LGC8od6XXR73YwD^ zUL-1v$#G9INJvq0TmE@O6=HIkFSdJZ8B@?aJ!vITD2{1<`$r(VW8;?sdATpH5wCDH zzw`SsL3tv@);>)-lOSw`G{4&?v6*7an1bfJd*2Bv%;bwpm`**Bf~J2eKTP38K>Ek| zI+e%->nRADZs~-7l0Zz{MVaw^h`f^RTLSabQ{qY|qMsH2Y!mAfTa5WMRgkL5H8Wkp zv|pT=^iz@QdeZzcc?+7gU$-Q-1oNdT$0MFCV?vwVud_zJ?R0!eW-5lw0E65~U_4)E z%g#t#N-{O}Ct&<1q_q{*Ag=mM_GFfvQNH$>! zn(p^@aNK8fd^Kj8Hb7N_O;{e8K7;?G+Bb{|6z)@-7~8!&UT5GE3~ZwX8c<3YGj|5maS+mQJe zp=z4%lOs=T#LVmF7(Jde-L5mh+N~L}$l|qtxU2soo-Jc$ZH{hjK+vNd1T|sOp3P4} z3cVUoFD_>4rc7o#K8Z*+VF{XU_cnmO_>hiATeX0QbtS-5qu`OLvIXO=IWxbVL|K+C zV*(RHfBgD<26P;XObQvf7SK4|KBd;S3VlF_W5w12nzg}d|7&YSW%phg>UE3IR?PPf z>qR_U#>`qS^vdYr7`LsN98sdCgcN&a-D31*8zz^G#K$Yx_@$t^ZTu^u+A_JRA;zsI zQq(*(1kd*GOdj}qG?8rlQqa6OpdV4~m^>GOm+GEKK{K#Y{A5J62N_t5-z~6ZOs*MN zv+w^1!n&;mR^5-Xh9^?gY@H3)*pbObHDJPG%b0>@$4nE5>cr&lkFi_!M2ecdPaP); zdu=VS>$zn_vhhnnbI|dZ1a)Du|42L#o=8!1()>h3b!BqYrhY`SWlTYHw%2K*FfV9< z)6SrX8P+k?sdiBbG!%a{o%YF;a`jwp-?-PZyiZ_Gj@TgDVLKjw`fs5g`E z+I*9cf~L*y>^`FUfV6pC#XQ88F}bGA@%Md#`Z5`4DpKop*C&6a#CvNyJj znP`gSm;(6;>d)lB&vS`nGU~>GM`!SGidk5RxD>LZ$fy_)D*$PZv z3JPkwJEK1aF}WZF^Q9-!ZFR7nZ?TNn!OS1G_avT;Ukb|Cu3Cs1!sO-Yqa>twZ=aMw zj|^q<*1r{rWXqU>=9}D@6NWMQ;x%ego=8E{u4P6(KAg!9*HN`&@o}$@^8pULe5rZY9s9CQevfR;3R(poJ30uY# zG@I5%o`Jkvvo~CTJi`+yYF;{or)(^f$5&tn!Im)v&D&$=5jBp9N(Jl&T_wu}jy zZaK9hZ~66f{4{2=9YGz7En@;BW~pwLF~@IJ!B1yCGVN+5&62ZX)A5)&>7$#sYD+ZT z=05r@^(6_N$$W(`$B1Xkn9yeT>#SX{867{1nQD{pp-;Aq35@6K?AJRbv9pz{K4d)+<(VFx~(gYY3sb{_&Lms9)i`HEn^C58$Qe>3V$@mtUC`R zU2qJnZ*$8tG<{`{SSctF~VJX6Lgp~-Z5!N95g|HrB zBf@5ctq9u@b|UOX*o&|q;UL0cgrf+@5l$kULO6qP4&egAC4?&o*AQ+X+(fvIa2Me| z!b60|2u~4&m+Ou9LPMxXIq#tZI^PqrXMnCyHGueLCS4v zg*)WbNqfX3)OlQ*a+})T-*Xw{p4g~-xJbE8ZNRC#I_cJ-860Z=%^>AAwY15QL2<7*Q#IqEh}K%~Ryow8_}(gfbJ^lI*L2bzRj;-|%57>@B8usxqr#UH2I+b_fm3bk17T^DEC#JRIsVFc#9ne zYbI^F))==6Hnq-uF6*ST{r*h4rh-ka;qLl6>8KZLtwG9dYUkr26X(_jpFWICfya=7 zP3=XB>N;tET0OuZURyz#(!XA&m%#>rnaK+IfGpCpRqb9*wl))&TWv9X?N+Ga+{jdJ4dwU z_m_2bQo*KHYk!2HS$%-9Iw;uGa%AmfkXgE7_rP~Z!KQY33Tj|HZiCKWGiERao7(4Y zFLcuRVMkG2Q^BUTXl#C+v`3vAt&<8iwfq^e*L6K*xgXheQo*Lyp!Q~itP>SqClzdJ zuY!%%I-Y#yYzxn)f=z9}sX~TkKkqNPrh-i^?}5h#nQIWI#L!f*sdXG=WKxdbj~3T8 z6>MrLYgaWili9E9q=HRte~U~8xqB67=V+~hO)bZbR63b7dk;?OK`PkPn!bwENk^mA zNA=b!*wp+p2I-{J_drjbRIsT%`HYHyYxF(b!g~+2R>7t=XbkF6Oa}KmJ4n}5u&L!O zADv0%oZ_#Op>mtr(4@t6P3OR?Mm{9BsRbuaiTb~*weee}(lr%qY9IR7Hpn*zSLvjJ zO|5gP13DSho$tTc^Ap%~O$D3U;u(8&(lP(0K`PkPc9s0wAh(S* z?vR2_ZF|ZAI_ccp^1R+!1)JK&c1D)!SeL1ZPAb^c_J8hdXztl;%tHz`wJqI~>7;Gb z%u>3hf=%t*R3pEo?`B=8lX9C{lK4Z7ahoJgQQj!yDO0eiJs+7}Z*9<%l3R661)JLZ zmeFhWoIlg*q}-tk(*L2#>hU%orW?R_vIttar+Y#4nl7Id=COP>Jq)#KaAPZGU zOj`kq>zh}wo%vC&BJfv(TkH_G??me}K9~^KKNI(0?qY*mL~ldH-Qafq?NkiuQD#Je|`C~qczSmVN#G|Aw0j3^(F7GLkv z(ENpTt43P7b-PZ7$704=^*flNKdZUb1TA?}HmBoJIn^vFGk*qy2Sa{WEVaK5A_zIV zW(nK;NJ9Qp6XagnLs8m|^X37LFdbp%LkALW`}_9>`K^N!z3D~LBS zo=8E{D+hmqCowd=((gn)k_~Pqnj%>;00lShA+P*NY7)r?Hxp8LR=lbuctE5dYyMVz zfP@q^TZZ-`%Ad*l^{{@iO-(_wbEN@9S($8eBb|i&F%s#h2&8Bcm^~tfBJdzUAt3@; zd;~VH5vaOGOhmvqiI|Eo9bqQIY=k)o^AP4EEQ}uAUI$mar&a}U%Le^%j(*HOGvS)t zo?@@vb5QW4X_IAW{EvhbMvix;#m9+4 z9;|u$W$sKQ8{FiY-Z|&LAc)rz?`#cwNJvq0YMly1CSlD{SxSRMPbg^4U4fM{gvpts zb4W;0bN^F}jHFDisIUzrhLoV`Hk!P5Z>vkkBk$3?H;hFUn+j=xXGhcfdqHFle9a8pprJsY!LYLGsDWhP5V;bQSNCE~Eq z?uv7sHz~qAXnCIExW}+#QC)$9_$mD?!he0l*U_uJ3lF!+f z7*Cm)Je8-ZgcSM*346pTgfj@ZLlGCEyUVwtr4^ktGfwPVcp}OvY;cn|$>BdFlAtV1 zR$Y#T@>kN`;MOvK89F{IGY!jc2ZKCTuIAg(zZg;3m~7K)kAxI%y6=Gc(}}`XMDy)2 z4cqnLygHK%Q!PY_;(X};sP_al-GZVJ~K)gK9IE+%Jwc1lQ5 zb88mNZ@HOVehOt-Hn=Hh?#WP;s60&W=zt8t6Dex`J!3afc>SjN9tl8_&o(s$&5H@K zQ08OuY?ZbWQq+9PAMZjDQ1iX#yMEJ(Jg zDUj_e4<`s^Z_Tf*ub+ezTRX5dmUYYsnqQBMgFvE8prAQAJGNnknH-u5r9)4osJSr+ zTaqG7&fQ&}NH&`Znr`WY-=9<3(D4}Wn%|<6vA}Hc&`wu!8a-c)&nwo|E60tn5Um{YtteOaAqCtfS-0GE=<_UTw3%O+l?$c5H*oG1>4tUeb6X z-LLZxf21AdnIF128S!jz6O`S?kpJ}7*jOTE*Zjw3M550IH-YikpZ=@MJ|MIr^9!cg zl{8ljSVYHHVrEIjeG*Og>pUKWdsLbE{aLZ-vcb))%|d^k9kZCIDomdGEsKN{<^=j4 zHmqZKb)xy-eu5n^8{7mz49bGrhY&heKVnCLM}#D{pQ3FpN0NmYOwXBxVCo zt##{3YyRPw4Qex=V>C3`;AVEU(LHI69K3+2I!qQSl2Jm6Jz3%QD59|W)2yZ1BTZz3 zn}TNb8-Eg1kI5>tkqLPs-LJN5D$INJnQwaG9r0{%6O`S@P>0ve=yhMLZka%vv7ZD*^t#rwD4zWTKO`B&5(Q0bviZy0l?3YjYId*`}tT zS?tVQqL80x0g+KVC8VfX{qtdherK|L%D;(Zo0@`V{ri|P+c8;(-3y*bQS70EpSW-<}o(7DQGTihIIuQgBCb1*M12pYHrJeEVUn#D=X$Ek_~Pqnj(4f zz+Xi5XLA2A2a#-WGa-f2nk`NOJk zMARTA?EYS&L7PMx|{||~SJkcv?mb-VJpb<=#$%G`# z6DewT?KzLAkxaH~fL#Y0+!Qo>cf)Klipl@wDk~vH&4uyD5;dC1+0%0o$u>0w%@wgR z$B$uh$$NHM=ExLDWb zIv!W4*<0Uw4CX!sff2J*H-npfSZQRb)0zKYrRGYSgSh)=Fw?IAb`731-R3^~%tom7 z&18ObOMKLW4Q@i4-LG@%65N+r%uE=L*PLu{6By6expN(QWH$2)3WO2Q1~)T4IvcmY zTU?x|KbYKmw|fkv+qz=E&>2@ahnZtLI)Z6PK|$^1w=6^<7uW1pGCh}&KkhB>ckmQP zTtm2la1#M5TEtxh9uyDpUl=11ctI3_vqxYv6!9A2Ey8<*j|l%FAX$w-CKrLtM5G15 z8zB}#9E5lX*eFLPLhwcKM+iVbMiz->JTeF&2|`kYN&j<6D8HNqN%zYx|VY(&_MuoXdg zxlUhDl7vPbmQHf!#=~%8gPVNN(iiKjBq)l>RJ-t^!V@V>d5+wV(h)VE$;{u7%<$(^ z%{1xf5xsDqe|+~_(^shbV!qWJrM|l^CLX=|PDCFvnC!_^N8eKc64|(BfB7vFoig$O z&THed6R&x@zWXg&&HnM>R{DG7#G3tWr0e4~q-M!M2iI^{!#R&cN(^2J8>gvE~v#98AjHc)hEi z(@AHy(!qwN+>JNz<7J%;>RS;hf~&Q1H(u$#BXlyjq}Mltl)Lfj&5EUy&YG`Z=%hvN z#v6ASsTbc{$Ef7|;NuP{xbZHBW0UOamGcQF8=7)A-VlG35?q@7Zyhp7xf}1lyGF0r zKd*bGlX5qnBfj4$Lo-$@o;z@zUQ>-nMO=Etr~5=?27^43xTK-^UP^AWy*J2>?f%h8 z1vlQTg<(3Gbn4*e26;)Q>0FWpDIeck=ln#*y;X4IO=;k*lk~M=DRfOAsT(hek5*YH zgTL1*pp$Yp9)0D~0iARtowv#$8Z?Qd047H3Vl8_$_(V?v#Drc3xUun#RB+?1TVRX?$Df^yHCw@r*Y;}k4AwHI zF@q_%@#eRDthd(jM`_N9G5QqTc-1D=GRTTgis;v=;Kuuq?u$Xbj%)O%f*Y@XCTw+i z^d+q|n706Et%4hG%7ubDN$W}~y|oH%ypoY0bkbQQ#d4iYURO3JIMZZLZICHOB+^L* zH{Q7;@iujTTmI_YRKYOYR(%H4R|R#ekT=O(Xkom6n+{g%tfYJ!WF zDXf!nH(rv=3ESwJNm9@B*GUC8-jcm-buwuF0u)Yo?o)8%{gYsTPKI1*+Da!C+<3Qh zp`7WOHLvDtp_2-3yqB4d8swAD4|P((jrXjtF>5*>Ucj!7uT#N|_uyDuL-Ss@uR5vV z#(UQaX`NneX=+#v-wUU(^+PA18p z?uf1_cjE=8z`pgzQZIfJL+tOlR}|cMRnCslNoV=>kvgg1#_KR; zxK29SbStQnCi{DF@33WU^h~{eVge?4@}eZ&hw8yzRb!gUe5x3K`=csH;IBSDud3ME zdx>)kC^35?#a=nzbtF;onLM^SHOS#=*Zgoy za-tG2d3o{g5>nLs5{w)Odn3*As(BE|wMv>^js!gkLWxVW{C9qugcLNra(=~qO$^d2 z!^+DbZ<=e0Wa*a63F02|D)0$&5BvD!z2a3T2xW9X)~xUhRWnbdsM&tn8KV4|Y})z+ z$TH@w6`oJ8K90LYS()sz32TWb^2bQTscRwBLBJ<23O7J#gn(SUFs7BlSb+;;0WaJJ z0bO1gd+@?|OHjBoLRSR5Xej(Y1fk&Rb#5V^{{U{;m}@u#`}l+3CvGVBs4Y5)P?&+KUQA1XJbo@MN9L#RPVl$@ISRNTPEZoLH zg7B+BIq3xW2!rPJFsBzzavqI~o|%7Yy+D3^KbjyXlkdX*k&wd3@y?WW0#QLAy#pSg zg2_HUxu$o{jOz&sW-@E1I1*CS95b*yQK;5x-UF*);$t75g65RF7^xvlPRxMu<%twE zx30o#t)xsw`8h$JqabLyjVAAnK11mEWX!CnupZ3ipP8TfBYHGVitZZkqo44m6H}k& zy|V?TTDkCnD|k(if|)(bc1whX(KJmEeiV*uI3=ItTp2vs?Bf%z_@~xKlRn{H&l8o3 z$!G2H*#1hot%W{u9v-0MLz#Kw^8ySu8VYJTcVnea4bmsU{7w>5xY$2%{<%WC%kNE3 zCrQI+Dmo<<&V*M&@;3PPS$Kn}v`kj+g@^7}((OadKI2<2qvO*t)3xO=FdLNAe5Tz% zCWW?YK9fVMOGsf9`|L=%hoB5h&fEBfNcQoWT%kywT7}V&k;x+kQ0HSGp9v|f5Iz@| zttKiHljmCCGee$8p??<9p@o+qEJIjX6Z;M<`;LChZajID=obRU zBPa`#Q?BlcfpqurEqzm!jz==8`9}5o3?@5TB%NG+*EGis$j0Q#RhonpZo2QD4A`h; zXL55TBxvm8Q_wsTaEPcJOzyvPS3-)K7ZW0B!9t?>o*JHlNcQn5Xx`}GlAv5nUOBi; zLW-L2H~mIbZYCepLIS{UJO#~fQCEn{!{ommK1xVI(=XwF`212{kbbd7BgRL#Po$`s{(o3{@-rFyF+P#(<5SSA`xho+Bs7{|=4Ia`q^Q}ldOd`ZAo!*?mqE z$v!>>a#i8lMB&w@=C|zIZ3!v1cK0bPJCRIooG=0;cBl%P#}e%(sxXuLM{sLBkfP?> z4^xOL!sLxVpvgWyLDMar@O%E~8XaGhnR_Xb^s=W;V18PVUFk&heChAi0ttRG=0Bxl ze*Mqa>8|-bbQT?7oS84T@jAeh=8wr+(9AG+5wRt}``h~BlNapc6WZ*i>7VMq&2)H4 zWAFkzI$zK z+SrX})@I=jt?YmT0OmiJfPs9 z`QNRSMoII@{{D1$C1xJRJ1fz2yH0Duy@!dd4BqO~2wN%k@tL(bx<9S9&@lvIh0v`2 zt#3(4VNS5tIDwTHS%zj!{R!y~JL3dRw|i@?R4N4>UX7XTe>?z#`i4iQ%s#Bq)tM>K z4J~A6oWR7;AHU8f)|e3CgcN&nQj5z()n#(j z+x|qd8&5%V))AC&uwrZ0Y15HIc_Q7fcH0vaj_NbNJU_PM?5Pu!-N(?TA|L2@6lgW; zpEX;8Nk>6oVi*s?eL7YOd_(4UE!?4`d1xGFyhhCItB>rX0| z;@OR7)@Gr#kKZ7-ZNlV({8(5#kwUKqq`Mu5sHRMQzYv#5_VEdtZud4IH2+IFz8RQ+ zcz?75Q;mX0CRxw|I=neE_G|%kIQ#enCWij__4y1a_~{QiLkm7jrdilo%3GT&F=ilS z@mfIE8~CK(udNl8-FhXUQZwXVt(Y(IC$5%#d}b|=?v;R=jnJ2^nXI}5t@T8Tz0xoC z9-`VX*{LfgKlbq{Xbx*Nl&H2$4$8McLW-I*@2{eNY*agGYKy7ktAd$1b25yAOwQDySpv!?(XioI4tgNi#uH0-5r+u zoo~{eg2_zveV#r4{!71os=KR8=QP3RLWpV)(m(mt%S3V-PwwfTI>&v2IxuM;by7l# zo_QWzA*v&jSqA$O$!RERt~= zPlxA}j~GvNXL4e}&Jt4eTy>-&Q9YPkx@|d;oa58sxhelPqIxp9Za`8ADSGZ-iFti5 zCU@liACa8n)8Tn+DSGYROdf80PeO{Gcm7w9s6I@dzyEf za~n1d-I1c_)AN{Ljb`#rV)TNXF9&vP7;&DO!w9VvQtv7rqb&t$tMbF`D zOAv+rOfe1E7)m7P_;h%V`x~RENlcD&;5o_oh*JUx}k)yfPaImah>I*qAKJ06#%ABU z2r>jR3^D>T3Ni*V4l)5EY_6MItb9wgZa!DN`e(6y#A!Som9|5QXrdM{*`~={2`Myr zX8LD2s~ zmv=>TwS<|OeXD>uP9iXIG(U7egs`Papp=w6Lhv?e1euU zxVvU2{*y%XE3D)6GYG45fKVU<>!GP$$)ry*Pn2jei4a$GzE*SKE;{~iX8f*3scy;# zavbCAhI0x(i8Lk4lTXD>NzP&n6@jOtBd*wWC{|q9*wn>_6%z+3k1PHymcdIxs1ZE4C@FJ(|E) z&C$_2?vOmLIG}4P)zi`^GD0N{^0?xriT)}{fzFm1S)VILGWs*I>I*NL$q^lNJkPI( zxFN!I8su@sr89PFo(pe#X`a%!BK5o&!8a!}TBd)loUk#N^v9sV^jg-d~kCY#xl9q!>lc}VRxZ;kn znN`xfzb;K1T-VqpcZykT}8`t=Fk7c#bGUzyV%J`{R z`g`?PuTvgZv?TpnTq6^0`Bx=%#1%V!(>%@X!nr%fb?S&KR+ylXmNJ($Qb$~IMy``u zX{Wr?S`!^{#l?}BVLR&WoKjeS<$J3muK4XNW(^MV^VkI{sUxnqx!rw@-0%+%vT%oV z#1((_uxsRx+<>^WI{xy&8RK4RsFFJ3ilrw1P(3XrD)IOjH9<#Q z@nZT-DoG(2o(+K15my|)`Hn`8nl@Q2t&X_jfmh!&a_{QFDybu`*cFXQOzrFRWTZ;U z{4IVQ%79!_}UPav>yJz z^HzAu%HxXGfF9at-0D*jKRxCeuOqJbE|-t$8Sth? zL6y`IS4>w8dlin-ruO}!k~-pwjb=7i$)I|-@oOh8t&X^2`2A%n8CW>|H8SN!6+ zUnR}&FKB(Xj<{l%T3C1E>$G%Cw@dZZ5m%fTgw;^T9UAj&i%RN%vlT}3&Nr39EXzcWI?6k#tF!DWal_yAp_Z?m(Dg1kBot8=r9a`Gx z@OaDw{CW$wV!ty^Yr}>dEw<3{SkO@nAy=_e#6d?LC9KjN{YL^O^L53dpgZ!nwPAir zUQ8}1XQBU#c2+Tro1GeGY5IGaUEQG#-dJwKxK=SNtBqdB9VtGQQ$5fQBxdqZy1XEV z>+`%b9t(s?m^_!mPeO{GA3_cjm6XY+cQS%puglYzEYg=KesK(6D&Us^?nuGYnCTT( zldy`V7{lg;fW)?(i)Sm6MaQinh@X%#=d(@(aa_>_DZDGja{px@5~Fa%SbQ&*Gu@G* zXJbzc6VWRu#u|qwfQ)usTG6w^&>{rkE-A(qVLc^eOije8^Fz@06ytZRDE=)1QXGON zqF6}?m!k~+tsJBRq!OeG1Sy|lH6XPhj*n9~?%lsxF~9WVk`29$({RvHxQ|Y6vGGVs z+z0fligD6Yyb&C96qw)M2rRmD(6Ly9*w@PVsQ4V>1NbBtGR4oMG~$jc{?+m+odEN3#rSF|wwXBS=&JOwMfOONEQ}zu28xI02+YOZkwVS!==|Uu zK~^TCmcJsBgN`~pd(}j34P>(0ynYf=^t?QJHc>%Lp6HkXB%Xv0&zt{!AS#&2>$}*~ z4Jmkf8Y@K;m4eA9|6q>Fc|*a|sWy51T$zoI#|T*Qc=sO9gM*F&7km( zM5Sc1K#mr1kWPJ}XZ4gAwWAg)o)K9_g9#_m;nsKSUV>6FS*sZ~j@*&L#rDPd`wQis zUbPsVB{iRE%sjNb99NW=!RyxtjBnB~IeTcTI7p{oeS2PS+>DM-%gmlmSHS#(62*?A zeybfqIqx09o0E>oTa!ykNTC+T^DI+{sPs&}@UKlI2OV8_ilpf|8a4PT@w{H6N^xA# z1u66p@j~k3$?`HpyuhU>tvgb9K11oyVmvq)iGM?#C^k0sHh2eI*+VDJgd%yz^UqCx z%t1$aku1qNb|xq@lY#v)sQi<33Oagcp5B^{&%#Wa+31=$=qPvd&Yk!WQCXSHUdbdO zg`4hOGUrR8(1Aw|!ozE6nC!DQWZHHqY)qYlqD zKe3RKlgXCFF@bSMik^dawm#9Ij}%4Eb2G&me|)Ztn6JcbhC zOqSDjNlY@?er_*r4r~96>bUeB!#ixDy`Czt@2+VIC2HI$G zD(y2qK@_3InID+^moCrIhtAOPk<1LKguCj_Gp6y5ZKHiQ=V?c53Fa3M=}kO`4uvv1 zU+0E+n7E^?iqGGlFM#2$z(vRCbe#vYY$miM^V@nn)aAM7=LI^x6f-+_)|GfVU8k?f z=M%9QBC5eS4mt|g`P;LJy+gi*wpAmjG?UhoSZ4o|bQ&!AW{lsEjxWPZ%FGyGaa>V{ zTh5jk-jroBYhFyX+>y@L+41%fV#_gKqd0gDIttEC&(pVU-nDdmd1e|0W46aZM}hh6 z-u(GIeFqOfnK2kue7oOxuFJFkk)CvTMP~X8F-kn0uXAyRM#NTPerDqz#B_xU49-DVt1s_CiuSg=}k}-CU+gVPb3E&1yARD`((^mI=(71N8djMV@#j+~f3{40a61>P@-F){HRbaZvKu}{)3=wvuDRBs4kP4U+s~Q&R1LM_zhy~F&{oY1@Rno z6r7#vkYBkOU+DPy%tWQeQ{m8|z{F7>g!|Os07h>On6H+!vM$fM{a4fR4VkHV1et|F47 zgMz2?z121ChSE-6pMNo6Da{b{ze1mjubtogkh%Chsj|Xv3kToM;)HCr(^}ST%D;I`s~wWNXkK3H zKgI0Xs}7MISCo62g9{`iXdIK4MCg&+k)mhX7RiXhC_^#ZTVsyJaYY@TS*~OJHG#>D z_8k&Z^eoVCAyE^V%sB`fRUB8;;aU9jIie;pStMV12`PG3E`mAwWF|}gLeI-_MID~C z)7>Nrt(ao2_W8Sn6g@j%#<~f52*uoBZ$lzE=qPwPjj7G;m-*4*)0k-)iYLiIM}ZMX zsZK#h^PpTP?R4h5@!y3d_w48KgN~oUOwS8}5>KbL&pd4-$~=?#5yhqx&p}6_%+A+2 zX<&9beik!hufdapjsoNUI=AJ=O2lmD=Z{WCJO>?J@v)qUJEU>n>Jo{v@6H z6^hKPpyTH z4_OFV3|R_U4p|9V1)*-KU$J!%tiu-D1lbJP3fT_X3E2(V3)v4r*IDc^-e$7$h|$EhIf8 zBP2598v;O5)ut511Sfo0I3A20;vY60jUM41E~jT z0BHni0%-4 z_Wxh~KNmhwrOem@n5vD06YXlYju zz1K2kT5j$oF%~a#@K&@x%bDynt_zWzaTJQ|e3|{dFvdgMrC56Q#7o0JyA+r>F7q!s z%<&T~%j5uzE>|)?yc24%3s3r!VmTbmmezO`A58zX_)y4j$Vfg&IQx>Lm~&yxK(WmE z-!uLb8ao*W&_Ai26PU52Ilt9N5LVd~bLQu08;Xx15%QkmbqROTls5W}N}BBD@XQ>f zjn9s;kSlUjPn4EDO@sSZ*GOq>(;QeYi%OckvT*~$rIp7vKh004kuS@C(LCj`%?mZL zmdB;F94&+uY{zxVW1FX|XHZG&{<0WjImo@TI}|w5CsZW^2dv{3jIUE3+gyANGjK;~ zXN|yW6?+=OWS(aFTjW&Ie6r$xjg-bV&7rj_YNUDMbB&b8Hjhq^t$llQ|LCfAPd`9=NnR zVw?B(np85ywE?{~QXboUK0ZPvEw`V?S4kbQ&08(YsHFK~daNOGX?4UlOAbW~$F(o0 z@E-2EQEzp`Hd}^j?~1v8Ep(LZsUxtc3GOzb4sUx;|wf1O@Jhfz}O6rJhw(WocJ9}ChFW;n+I%1pO&ibgN`OQSEmGV>3 z5!>7};XjT1o4<&|q>k9;qZ6?`(*H*HRXugYHfM}`qIr%xigio&)Dhc^u;cDH?oi%Z zrBqT!Y;(c-cPg1;+S9QrsUx;|rEOZ3G@lOA#$Y;Po8um6Z<%FCmVZ@G9kI=J7f-65 zmL}7(s-%wC=EI!_RWk6_-uWu2BeuC}nKr&PFRIQnR=j0lu}LZyBV%j)iLvd_j}u8% zPaUz%DMhq#Lg0v*H&jwbY_s#l{OWZEwVbM5r;ga>i&(t5wNM(T)drY?=y5ZAsG zK}nverPUGJ%#z4gB`vA8Jy1yEqv5NqKD3;$2W1 z4_Oi(tDurPVw-tiPE<>4&5|aQO3GuKri7-)Drr&{k5fqbGB&|x zmDCa2+)}riN}5+sd8?B0*rp{>QLVJ*AFCg#q>k9;rnMPWPs@sd+I6~Ec@Spk=HE;E zhCO)@McYT7w3r?*n*YB)rs|&OwEr5jd`sY;fzNo+2zaw0M$^|E-vK z7*H@tWRP|`=fLONJZ%UtFm(0TC@^V$XT+9L*wa+Lca29BW{-;Uc_&u;+>ydvF=Y7A zkQfhu2E!oyc8UX^LOES{8dkT&?haiyky+<-kArktH!@6Y-j)tWSrtR>9N)kcBN5!3 z*2oQ&eLm3P@tG+yI6at>zca2%*yTU0Y9(N@){h|)^0zhe*e7Y&Ul+60gnX6_-pg^8 zruzJ^6g^86MyHD5SS_>z?nv>ee0r9Ypu|kROv#?Zb$J>S_qak-5+=U~zJjM4Qt&j| z9`qmzzKYSW5*A81wkbRt7x&p%phI(l_{A}%3aBk1MbB!TMiQBvJtAqUZ2ksffaeSTXkfuoonTGdesc zJ;i(;eYIj7_1|m>8B-H+YHT7zhC$HOMW%(I$dQ;^MP`Oz6c?Etk`sbWgh*^6L}Ee{ zSrAefQWSzsgvjEtwcGgcU%ZiiT(U(a{pgQ5@F`rA(_3u3v&KfpQ?p4|v-a9{Fc|m> z%x^V?7j6sSfRcjo#|)Uj2k=RrCdbf4Zv19YAvzvIJH_~-5-OTIW8pTIi8ZFECVr8D zIfi2Vw(l}df~7WBr5DH~-=`3Sxs>9OaC-^~DbyT~!l%CxWMwjK7rd1m_|)MUc@ps}hxh$$!S;0dek9 z@N}w89w+N#w>5;BJtsecxk@51E^3pITlTn91xW_@pu;4mQKQfPgkXnB|R(O8B9=0CV%}zH~1&%)E9aNdVi}JkI#ERPr$8KVc6v>;J*Aa!bUh%w~eKg1wBsxm_U?D~r7~3kI zcOKV~kizq6hx2!U;Gst1K}B|reOzAMlXakTX2OZRnw?)qf6TE>d6CTiN45}@naMtx zcEv$D1wOsTReMOsV_Qn`8eZ!Fm~1Ff+_z5Xmc6E2zerG4CMSks-0O}MZo1d9F-M8Y z#^jvxm>hE8Q-|kTesQxi`F9kyKHZU`=dKP|g2}<;=4ZI89NX04dEmonqH;31FFnQ& z?nu$|Mn-hixtKh8YADDjBsx6r2Vhqk%ifCDt%rdUQuKVAyf{I5n0z)8``H}$)ZzIh zF$RTsnf!3{wS*Kry%Xm|$CZ!Cp9`K6$+1njr+1utyhNhIv)s04L=|MRbT_f??58b?Pl){t*wO;W) zJ86e5&#Qe)(czKITs$~O;u+I;$F|YlzrxTtmtg+Ym8!&Z;8Q5G^L2i2g&G^h%*P8D zV{_nBVBB7(Px3E^h%E`8{x(kxW~H7!iI3i+!*Q*OPyFeWRB-F*be%r+R$-tN&3xI8 zO^D~%rmHf?-XWj9|4t&RG?R^*o{EEX8Z7y=8-RL_`mXpiPx=r{T@oE`UHUX4s4SBm z4{Vl@&eyrRUVmcCF+X)o5#l-UDL6YlPoEW;(4&-RW?r*=V0gynqUXc||1GGzdj_ty z0`nX1VN@XZ+))iZXGLbV`c;&8I$!7Y?r3W(F@HV){U^sZh3ovS4hqlnUZZ0~Rc7+G zt&)Tk+63RQpj$*??x^^@-MgMhj!+7oPWRR~MRE*RF*Q+qe!Rf*oe2!7kV)cUkXed^+C8#V@u8;wgK})+RxMFIVv97%ZAJh&woea>3p4w7oz7yTc-HV zs)YBGW1FtZER=SYKSqp=nOt56ErUB!e5#Mu9VV&?llv02Ad&;0f~WJny*r@?9p99h zz`QMXrE_F>vhjZXlVB&ZlPVeWpA{c98q^kHnYlRV`ytHq+V}ghG zP4Ru1>z_DED>^$p6~E*=j}Y1tyr1WXM#OV$(^bi1pNe0=)~5uuV$!!OO6!gko{C?g zOL$9LGnuUz-Zc(<>hLV-k7cViOoorgvZFgv^sK$;0a2Kf8O&y+%<|iPi z9h3FzPLPnI=e^m#h-%N|rAaA?S6HO>;$k;%^! z+7QXHO}VFkqGD(dI)U_$H)5lN6g~aEWFe?Clga)HCz4~EIy?hEpzr*PN%ID5jk_a7 z&vY+l5!HpsP-7AzIq<2&GwYMxM0I5{bBaC^QuM645hL7gOqSb%=gEOj9iH_@hZEJE z$=aokNl4MNbAQZq&>|`RZJ(wik^`SQJbU&&O;ArJyXCJTAw|#OT}(vvVsb!tOsqJz zsl#)^p^`-PW^!!enG#a;T#sv)7RC%>6q5r7_mq&L=c@a7 zBBPmH(h>b9$2N6%ZoIvMs4+~go10BS3ZAA^2~dB=f;5?5_!7ynO}VEjW3T@aG>*x% z`?E?&(KAoBHAJBgRZLk|VRMuNpE^7XZJtdK#$k#n|6kY^a7T)s*HJ=>o`cNC ziJHn}hwiP36w`>*10|kLZJ%kWCwilq%um^do|glkLYbYfb7AQ-bUa2TifPWGtzfXM zDKPG@^T=q_cGN({wB}}aLOHhSijN(Qn|@g45j2O%6D117K|1v-rkfW%>3FoZis?c~ zE-($;lvZ&2+!1Xh92L`DQ*Q|wb8mURgB_7b0Fn4HZDfB4o=xOn$WX{|$Vdp9)5x)q z@sNp-$q>9 zosiv-y^#HogOJ0Jqmbi}laN!8GmvwT3y@2YE0AlD8<3lj+mO4E`w)H!9^>DhLY_lj zLS94OLf%6@LOw(A?nHiv{Dk}>DPe$kK;l6XKoUWcK$1bcAU+U3NC3nPu|k3%DIhjT zC?pJ$8j=>09+DA~8Il!}9g-808eQ2 zgVcc3f(V=I=Fqcf?&hQF(J$XS&>wSbQ~rvWGukoSTfk)6TV*Ar(Bzp5^jk&LLMF2> z-9RJE{MbG9t(Pb`XvTU~bL~`I$@N{Z^%#G%R)A37~sX7Ti z4CBD3z{Jt~&`~9XEp_vpy%*>NOZg-IlhGfZ!%ssEnPbT$XME|& z8F+?}WX}Wa`}GoX@(S4qwO2$((c5 zavIvx&!375VOXbf8cLPM>u>?2q1Zo(;ntr-M;P`>h2#XS2Wh&Pbh<{ymea)*nj=em zQ%Q4#$6$?=hhZQ%TF}0>?E{8iuw0YfP__*2D4RYos&` z8#rY%_CC0@fny`k!#M8kURfOos<{u~K}9)`8Fo>WF7 zn|{}NBzYJ%C~NtfDjAf1TOGBu@-S>*%hwo7@*N6n)TgXU>IlPLtvy~P&F9NrQAv3i z*3xl-K_xA165;0Xy_JVyDcT;}4o$1^MkVE8SbBz8R8MQpUD{hF55rpaZNuE%QHOT? zt=%Dc7}hc|A7=axa`d7gwY2gutYu{ft);dszUHlx@-VEW#@pwbXXW$QZ{~X|55roG zS9WUT&j_Af;?c;%upupmS5V22MsH53p7JoPW%_QcG&%0jqLYn3>(zsWqXwjs@GEMKjmTA;GA=?M$bj`NrB9ETmM`>MAJ@!&;MjYW3D?=xkO=c^KBJe7mMzr{&8`ttRLQ!+uX(QYEb) z|2m|4>IlQ0d#Cj)mVfJN{fdq-?6=8DHO~(}Myj4V!mvl*rc_DOzP?(&A`in_k`DZ( zlJv0`?Avi`A`im`H`+2#C4=i^pRAJdFl3b|ICtbUFK4C3S>h&%N8Dk^k1!u2UX{wGJ&%T_vsk z7hh04F2W0ZnP?=*DmqL`a> zXqTl?`=*^cv}&5AX|rz4+IHyJu37so+MzM)7Id~hv$Y=Sv4G<7oe%XQYsJ_taYp=K z{@?if=)yT$8|AH?&N*9qsRXJ7h8v2qw+R+)IUy@B;*x~0eXQJhhOJ;DlmCnOPeKZ} z%8+axh8iABKKhKQ0B39Eo`#XVF}1^RLoxV9VS@H2>9j;=X#eIV9UhMv)2sSmijfFz zPK!f^oTqBi@$s3l7a0o%OT_}?;;tB~ygE)4rs#?x-;1RZ^0&pg*e7Y2_ZS;K3HdDJ zW@E#L6S6w|*Y2806fL-s|C0D<%G{CSQ#m;s+kT0e+>1wIDj`MBhH0x3<-=sPPD4PV$T~dR zoSZ%Cwd{V_*eg==zpi;Y`1uBGE~7Zu}(oYlbKwG^1& z-bh~l#fCvtVZr!hL=WNv_$2%MJL@t&k}?AwkETvB9=N?pVl3Ro2*LRJ{D#D1K&}|i zUiprbTtwkwTjt+NFOYXrl_v;8T*Y{+R#FKm)Ep1r0euOwGWjD7miakbEBExU_E|tw zAV?2WfeaE-^z4=v!@eLUTMteG5>G;hXaDZqhze%1chqDFDS9qGjutlslcSbk2xh$S zyQfoa@|Zv4F&!Vm%#`~kFjs$PetRCVwW(6SJ)HnkEyZJ7Nrg_r30e7F_6+KVHXegr#p7&zj1c}Lo%%wLry0M} z;n)hG2yyCfV8TgsxOwk8Ku{_sUpz!#=#CUFwhqo;FZPN(vzXq}Sug}uJnd8O;7n*X zXW{2Mc&>_Pudb0qa<pj?cnO-yn2coRF2fd5!kNObROxl*&E(L_!KT-D_5-QUqmVa?-HvAa{}I z@LaqfeNc8L=TDd_Aw|y(+xHTcgUMB^v6sRLSsk9+imWCILoLN?^IvTwr098OI9}ge zOzvBNPK2|yIy^5Y^&u)Zljo1ml8~b3)39YkUcys4ma*k2cfsk<6S~Qbghz z(|8M>U&mqqUV{0j;rof_oU2e~=j;4cu#mt*R55Np15g51E=@Z|!gV>VH|EP&U zywuajcoX*pt*zqyYu3LKPp9kjslN6#q0!)dN<42)JZEcNl{xkf`E+@Yr-}|;@u~F| zJ>8$A(_qP`+0?~!co}Bur^I?aXKQu1wGG4ope&OuuLep;=j&Xs9W7=#=EoE=63;nT z!P)6~`pg-D$t5NjiqGVHnACB$R$$ye&kcRhBUNC2d687QJlAgMOUGAaW>tp-5>Myr zJY8oyv6YxV(g~9j&epmrv+z7G)woGiWhT#$nJpoOHo@1-`NS$rKG=MSNKUH?o=*4H z*ZUoMG2CCp=k>kgV0ca)JLPj`5)Qw&9)D=%%@vYY7en#|ZMjtAqWv`$abH*e?} zVrwyU5VQhbtS(w-)&4wEGUvC_fWS{EljAKFBt*R0P>({e#z(vk>F9Q8rCPrXCn z*MRv>r!(pD>`?{N_lC@L^)>X-4pNgMx0mc}unEX}ml!O$XieH-Ec$Td}`dK?+puh=P9iEwA?IfrT zlNnY=N=VT&-28y3woK;TVkeTbwK_aY`eQWSj>+QZu&3*e6g~Hk@h7T1lm86LM6K`+YLS{ z;OU=fS$=}LF_}6C_69gxtHU#A#&kq=XEN&(%vaozqG#!67m32kfZ`w7>@ks?t<~XK z>CqR0dNNsl$sh?SdNw?@il|;p);c$wNY2*k@N7|e22s74Y&yJ#gcLmoC>x0C!(`|F zXmvSTtHX2Hk4r>h?5Ow;E{-iRcckb!_q2(ieoT)2@|8%=*1GT%$xZpU5!Ii`8#J6rTQT%2oRHPwnbq8gs1ZzNy!cE)ik{V1XC!JQ zlcgu@Ad<7SIy~#Gz|3qEleL>&k&vS2kn(GZ8qH*%8yMDbwpNGd=mQCe!Z=I`7?H5H zgcLo$E^kB7SSDYN{zfEcYvrEw`T6lgjbrl1(|Zz9@H8cE{edXZipjHHAtE^;tHaa# z^*w^HL8{PSC5#nOcckbUv~(jun5!%FR|(@fIa{m4Gi8Pa1YsPfm_nXleOKoymOD z{j`BO$4 zM9pDx+LRA*kWT%IY2|9PcypPV-|i)t25w3#xE&dd-U#h9Wq_OKl8`a?mghT|Yer$a zAPT38>I&%&=?TH?ISSMEsQ!?FkiigMO~gnfY9s_B;;69@tS&@hP|jP!QB(16(;+h< zvmtXK{1_JE-xfobLY6~TLRLZ6K-NJvKsG@(L$*S;Lv})TL-s*e1?35 ze24sm{30o7fOtUSK@va`L6Sg{LA)S75I;x�@Qf*>g%Hb^KW43Zj>7Lp#45t12_ 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%0A#=9|96 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