diff --git a/README.md b/README.md
index 586e0577ea..0418e8fe06 100644
--- a/README.md
+++ b/README.md
@@ -11,13 +11,13 @@
## Intro
-This repository contains around 80 plugins developed for [Trados Studio](http://www.sdl.com/solution/language/translation-productivity/trados-studio/). Most of the plugins were developed by SDL, but you might also find a few of them which were initially developed by someone else. For all these plugins we now have full source code ownership according to our [License agreement](https://github.com/sdl/Sdl-Community/blob/master/License.md). You can find the complete list of plugins [here](#list-of-plugins).
+This repository contains around 70 plugins developed for [Trados Studio](https://www.trados.com/product/studio/). A lot of the plugins were developed by Trados Appstore team, but you might also find a few of them which were initially developed by someone else. For all these plugins we now have full source code ownership according to our [License agreement](https://github.com/RWS/Sdl-Community/blob/master/LICENSE). You can find the complete list of plugins [here](#list-of-plugins).
We encourage everyone who is interested to contribute, either by fixing some issues, implementing new features or improving the documentation. To contribute, clone this repository, make the changes and send us a [pull request](http://www.codenewbie.org/blogs/how-to-make-a-pull-request) with your changes.
You can also use this repository for learning by reading and tinkering with real Trados Studio plugins. Please find the documentation [here](http://appstore.sdl.com/developers/sdk.html).
-If you have any questions, don't hesitate to ask on the [Sdl Language Developer Community](https://community.sdl.com/developers/language-developers/).
+If you have any questions, don't hesitate to ask on the [Language Developer Community](https://community.rws.com/archive/language-developers).
## Getting started
@@ -27,7 +27,7 @@ To get started with this repository, install the following tools:
1. **SDL Trados Studio 2021**. These libraries are built on top of SDL Trados Studio APIs and thus using them also requires having it installed.
2. **Developer licence**. If you don't have a licence please send an email to app-signing@sdl.com.
3. **.NET 4.8**
-4. **Microsoft Visual Studio 2013/2015/2017 or higher**. If you don't have Microsoft Visual Studio you can install the community edition for free [here](https://www.visualstudio.com/).
+4. **Microsoft Visual Studio 2022 or higher**. If you don't have Microsoft Visual Studio you can install the community edition for free [here](https://www.visualstudio.com/).
5. **Git**. Find more details on installing git [here](https://www.atlassian.com/git/tutorials/install-git#windows). If you prefer a more visual approach you can either use the [github extension for Microsoft Visual Studio](https://visualstudio.github.com/), [Github Desktop](https://desktop.github.com/) or [SourceTree](https://www.sourcetreeapp.com/).
Once you have installed the tools, follow the steps below:
@@ -56,142 +56,120 @@ The following table shows all the plugins available in the repository.
By clicking on each plugin name in the table, you'll be redirected to the plugin's download page in SDL App Store. Documentation column will redirect to the source code for the selected plugin.
-## Batch Task Api
+
+## Translation Memory Api
| Plugin Name | Description |
| --- | --- |
-| [Export to Excel](http://appstore.sdl.com/app/export-to-excel/532/) | [Documentation](https://github.com/sdl/Sdl-Community/blob/master/Export%20to%20Excel/)|
-| Project Anonymizer | [Documentation](https://github.com/sdl/Sdl-Community/tree/master/Anonymizer)|
-| [CleanUp Tasks](https://appstore.sdl.com/language/app/cleanup-tasks/963/) | [Documentation](https://github.com/sdl/Sdl-Community/tree/master/CleanUpTasks)|
-| [Fail Safe Task](https://appstore.sdl.com/language/app/fail-safe-task/964/) | [Documentation](https://github.com/sdl/Sdl-Community/tree/master/FailSafeTask)|
-| [Target Word Count](https://appstore.sdl.com/language/app/target-word-count/965/) | [Documentation](https://github.com/sdl/Sdl-Community/tree/master/TargetWordCount)|
-| [SDL Batch Anonymizer](https://appstore.sdl.com/language/app/sdl-batch-anonymizer/1072/) | [Documentation](https://github.com/sdl/Sdl-Community/tree/master/SDLBatchAnonymize)|
+| [Amazon Translate MT provider](https://appstore.rws.com/Plugin/18) | [Documentation](https://github.com/RWS/Sdl-Community/tree/master/AmazonTranslateTradosPlugin)|
+| [ApplyTM Template](https://appstore.rws.com/Plugin/21) | [Documentation](https://github.com/RWS/Sdl-Community/tree/master/ApplyTMTemplate)|
+| [DeepL Translation Provider](https://appstore.rws.com/Plugin/24) | [Documentation](https://github.com/RWS/Sdl-Community/tree/master/DeepLMTProvider)|
+| [Google Cloud Translation Provider](https://appstore.rws.com/Plugin/174) | [Documentation](https://github.com/RWS/Sdl-Community/tree/master/GoogleApiValidator)|
+| [Language Weaver Provider](https://appstore.rws.com/Plugin/240) | [Documentation](https://github.com/RWS/Sdl-Community/tree/master/LanguageWeaverProvider)|
+| [Microsoft Translator Provider](https://appstore.rws.com/Plugin/179) | [Documentation](https://github.com/RWS/Sdl-Community/tree/master/MicrosoftTranslatorProvider)|
+| [SDLTM Import Plus](https://appstore.rws.com/Plugin/89) | [Documentation](https://github.com/RWS/Sdl-Community/tree/master/SDLTM.Import)|
+| [SDLTM Repair](https://appstore.rws.com/Plugin/41) | [Documentation](https://github.com/RWS/Sdl-Community/tree/master/SDLTMRepair)|
+| [TM Lifting](https://appstore.rws.com/Plugin/72) | [Documentation](https://github.com/RWS/Sdl-Community/tree/master/TMLifting)|
+| TMX Translation Provider | [Documentation](https://github.com/RWS/Sdl-Community/tree/master/TMX_TranslationProvider)|
+| [TermInjector](http://appstore.sdl.com/app/terminjector/97/) | [Documentation](https://github.com/sdl/Sdl-Community/tree/master/TermInjector)|
+| [Trados Translation Memory Management Utility](https://appstore.rws.com/Plugin/78) | [Documentation](https://github.com/RWS/Sdl-Community/tree/master/TranslationMemoryManagementUtility)|
+| [TuToTm](https://appstore.rws.com/Plugin/79) | [Documentation](https://github.com/RWS/Sdl-Community/tree/master/TuToTm)|
+| memoQ Translation Memory Provider | [Documentation](https://github.com/RWS/Sdl-Community/tree/master/memoQ%20TM%20Provider)|
-## Core Api
+
+## Terminology Provider Api
| Plugin Name | Description |
| --- | --- |
-| [Apply Studio Project Template](http://appstore.sdl.com/app/apply-studio-project-template/391/) | [Documentation](https://github.com/sdl/Sdl-Community/tree/master/ApplyStudioProjectTemplate)|
-| [Export to Excel](http://appstore.sdl.com/app/export-to-excel/532/) | [Documentation](https://github.com/sdl/Sdl-Community/blob/master/Export%20to%20Excel/)|
-| [Legacy Converter](http://appstore.sdl.com/app/sdlxliff-to-legacy-converter/134/) | [Documentation](https://github.com/sdl/Sdl-Community/tree/master/Legacy%20Converter)|
-| [Number verifier](http://appstore.sdl.com/app/sdl-number-verifier/440/) | [Documentation](https://github.com/sdl/Sdl-Community/tree/master/Number%20Verifier)|
-| [Post Edit Compare](https://appstore.sdl.com/language/app/post-edit-compare/610/) | [Documentation](https://github.com/sdl/Sdl-Community/tree/master/Post%20Edit%20Compare)|
-| [Segment Status Switcher](http://appstore.sdl.com/app/segment-status-switcher/754/) | [Documentation](https://github.com/sdl/Sdl-Community/tree/master/SegmentStatusSwitcher)|
-| [Star Transit](http://appstore.sdl.com/app/transitpackage-handler/573/) | [Documentation](https://github.com/sdl/Sdl-Community/tree/master/StarTransit)|
-| [SDL TM Anonymizer]() | [Documentation](https://github.com/sdl/Sdl-Community/tree/master/TmAnonymizer)|
+| [IATE Real-time Terminology](https://appstore.rws.com/Plugin/30) | [Documentation](https://github.com/RWS/Sdl-Community/tree/master/IATETerminologyProvider)|
+| [InterpretBank Terminology Provider](https://appstore.rws.com/Plugin/243) | [Documentation](https://github.com/RWS/Sdl-Community/tree/master/InterpretBank)|
+| [Trados Studio InQuote](https://appstore.rws.com/Plugin/55/) | [Documentation](https://github.com/RWS/Sdl-Community/tree/master/InvoiceAndQuotes)|
+| [TermExcelerator](https://appstore.rws.com/Plugin/75) | [Documentation](https://github.com/RWS/Sdl-Community/tree/master/TermInjector)|
-## Project Automation Api
+## Integration Api
| Plugin Name | Description |
| --- | --- |
-| [Apply Studio Project Template](http://appstore.sdl.com/app/apply-studio-project-template/391/) | [Documentation](https://github.com/sdl/Sdl-Community/tree/master/ApplyStudioProjectTemplate)|
-| [Post Edit Compare](https://appstore.sdl.com/language/app/post-edit-compare/610/) | [Documentation](https://github.com/sdl/Sdl-Community/tree/master/Post%20Edit%20Compare)|
-| [Project Anonymizer](https://appstore.sdl.com/language/app/projectanonymizer/895/) | [Documentation](https://github.com/sdl/Sdl-Community/tree/master/Anonymizer)|
-| [InSource](http://appstore.sdl.com/app/sdl-insource/548/) | [Documentation](https://github.com/sdl/Sdl-Community/blob/master/InSource)|
-| [Project Terms](https://appstore.sdl.com/language/app/projecttermextract/817/) | [Documentation](https://github.com/sdl/Sdl-Community/tree/master/ProjectTerms)|
-| [Record Source TU](http://appstore.sdl.com/app/record-source-tu/504/) | [Documentation](https://github.com/sdl/Sdl-Community/tree/master/Record%20Source%20TU)|
-| [Export Analysis Reports](https://appstore.sdl.com/language/app/sdl-trados-studio-export-analysis-reports/3/) | [Documentation](https://github.com/sdl/Sdl-Community/tree/master/Export%20Analysis%20Reports)|
-| [Studio Migration Utility](http://appstore.sdl.com/app/studio-migration-utility/481/) | [Documentation](https://github.com/sdl/Sdl-Community/tree/master/Studio%20Migration%20Utility)|
+| [AutoHotKey Manager](https://appstore.rws.com/Plugin/22) | [Documentation](https://github.com/RWS/Sdl-Community/tree/master/AHK%20plugin)|
+| [Trados Copy Tags](https://appstore.rws.com/Plugin/23) | [Documentation](https://github.com/RWS/Sdl-Community/tree/master/CopyTags)|
+| [DSI Viewer](https://appstore.rws.com/Plugin/25) | [Documentation](https://github.com/RWS/Sdl-Community/tree/master/DSI%20Viewer)|
+| [Trados InSource!](https://appstore.rws.com/Plugin/31) | [Documentation](https://github.com/RWS/Sdl-Community/tree/master/InSource)|
+| [Trados Jobs](https://appstore.rws.com/Plugin/32) | [Documentation](https://github.com/RWS/Sdl-Community/tree/master/Jobs)|
+| [Trados Legit!](https://appstore.rws.com/Plugin/57) | [Documentation](https://github.com/RWS/Sdl-Community/tree/master/Legit)|
+| [Post-Edit Compare](https://appstore.rws.com/Plugin/15) | [Documentation](https://github.com/RWS/Sdl-Community/tree/master/Post%20Edit%20Compare)|
+| [projectTermExtract](https://appstore.rws.com/Plugin/34) | [Documentation](https://github.com/RWS/Sdl-Community/tree/master/ProjectTerms)|
+| [Qualitivity](https://appstore.rws.com/Plugin/16) | [Documentation](https://github.com/RWS/Sdl-Community/tree/master/Qualitivity)|
+| [Rapid Add Term](https://appstore.rws.com/Plugin/35) | [Documentation](https://github.com/RWS/Sdl-Community/tree/master/RapidAddTerm)|
+| [Record Source TU](https://appstore.rws.com/Plugin/36) | [Documentation](https://github.com/RWS/Sdl-Community/tree/master/Record%20Source%20TU)|
+| [Reports Viewer Plus](https://appstore.rws.com/Plugin/37) | [Documentation](https://github.com/RWS/Sdl-Community/tree/master/Reports.Viewer)|
+| [Trados Data Protection Suite](https://appstore.rws.com/Plugin/39) | [Documentation](https://github.com/RWS/Sdl-Community/tree/master/SDLDataProtectionSuite)|
+| [Trados Transcreate](https://appstore.rws.com/Plugin/42) | [Documentation](https://github.com/RWS/Sdl-Community/tree/master/SDLTranscreate)|
+| [Segment Status Switcher](https://appstore.rws.com/Plugin/44) | [Documentation](https://github.com/RWS/Sdl-Community/tree/master/SegmentStatusSwitcher)|
+| [TransitPackage Handler](https://appstore.rws.com/Plugin/45) | [Documentation](https://github.com/RWS/Sdl-Community/tree/master/StarTransit)|
+| [studioViews](https://appstore.rws.com/Plugin/12) | [Documentation](https://github.com/RWS/Sdl-Community/tree/master/StudioViews)|
+| [Stylesheet Verifier](https://appstore.rws.com/Plugin/47) | [Documentation](https://github.com/RWS/Sdl-Community/tree/master/StyleSheetVerifier)|
+| [Time Tracker](https://appstore.rws.com/Plugin/76) | [Documentation](https://github.com/RWS/Sdl-Community/tree/master/Time%20Tracker)|
+| [SDLXLIFF Toolkit](https://appstore.rws.com/Plugin/77) | [Documentation](https://github.com/RWS/Sdl-Community/tree/master/Toolkit)|
+| [Variables Manager](https://appstore.rws.com/Plugin/180) | [Documentation](https://github.com/RWS/Sdl-Community/tree/master/VariablesManager)|
+| [Trados Word Cloud](https://appstore.rws.com/Plugin/80) | [Documentation](https://github.com/RWS/Sdl-Community/tree/master/Word%20Cloud)|
+| [XLIFF Manager for Trados Studio](https://appstore.rws.com/Plugin/67) | [Documentation](https://github.com/RWS/Sdl-Community/tree/master/XLIFF.Manager)|
+| [XML Reader](https://appstore.rws.com/Plugin/81) | [Documentation](https://github.com/RWS/Sdl-Community/tree/master/XML%20Reader)|
+| [YourProductivity](https://appstore.rws.com/Plugin/82) | [Documentation](https://github.com/RWS/Sdl-Community/tree/master/YourProductivity)|
-## Global Verifiers Api
+
+## FileType Support API
| Plugin Name | Description |
| --- | --- |
-| [Number verifier](http://appstore.sdl.com/app/sdl-number-verifier/440/) | [Documentation](https://github.com/sdl/Sdl-Community/tree/master/Number%20Verifier)|
+| [MXLIFF File Type](https://appstore.rws.com/Plugin/29) | [Documentation](https://github.com/RWS/Sdl-Community/tree/master/FileTypeSupport.MXLIFF)|
+| [Multilingual Excel FileType](https://appstore.rws.com/Plugin/17) | [Documentation](https://github.com/RWS/Sdl-Community/tree/master/Multilingual.Excel.FileType)|
+| [Multilingual XML FileType](https://appstore.rws.com/Plugin/13) | [Documentation](https://github.com/RWS/Sdl-Community/tree/master/Multilingual.XML.FileType)|
+| [File type definition for TMX](https://appstore.rws.com/Plugin/61) | [Documentation](https://github.com/RWS/Sdl-Community/tree/master/TMX) |
+| [Filetype for Wordfast TXML](https://appstore.rws.com/Plugin/62) | [Documentation](https://github.com/RWS/Sdl-Community/tree/master/Wordfast%20TXML)|
-## Terminology Provider Api
+## Verification API
| Plugin Name | Description |
| --- | --- |
-| [Excel Termonology](https://appstore.sdl.com/language/app/termexcelerator/534/) | [Documentation](https://github.com/sdl/Sdl-Community/tree/master/Sdl.Community.ExcelTerminology)|
-| [IATE Termonology Provider](https://appstore.sdl.com/language/app/iate-terminology/950/) | [Documentation](https://github.com/sdl/Sdl-Community/tree/master/IATETerminologyProvider)|
+| [Antidote Verifier](https://appstore.rws.com/Plugin/3) | [Documentation](https://github.com/RWS/Sdl-Community/tree/master/Antidote%20Verifier)|
+| [Trados Number Verifier](https://appstore.rws.com/Plugin/33) | [Documentation](https://github.com/RWS/Sdl-Community/tree/master/Number%20Verifier)|
-## Translation Memory Api
+## Batch Task Api
| Plugin Name | Description |
| --- | --- |
-| SDL TM Anonymizer | [Documentation](https://github.com/sdl/Sdl-Community/tree/master/TmAnonymizer)|
-| [Record Source TU](http://appstore.sdl.com/app/record-source-tu/504/) | [Documentation](https://github.com/sdl/Sdl-Community/tree/master/Record%20Source%20TU)|
-| [DeepL Translation Provider](https://appstore.sdl.com/language/app/deepl-translation-provider/847/) | [Documentation](https://github.com/sdl/Sdl-Community/tree/master/DeepLMTProvider)|
-| [MT Enhanced Provider](http://appstore.sdl.com/app/mt-enhanced-plugin-for-trados-studio/604/) | [Documentation](https://github.com/sdl/Sdl-Community/tree/master/MT%20Enhanced%20Provider)|
-| [Term Injector](http://appstore.sdl.com/app/terminjector/97/) | [Documentation](https://github.com/sdl/Sdl-Community/tree/master/TermInjector)|
-| [Record Source TU](http://appstore.sdl.com/app/record-source-tu/504/) | [Documentation](https://github.com/sdl/Sdl-Community/tree/master/Record%20Source%20TU)|
-| [TM Optimizer](http://appstore.sdl.com/app/tm-optimizer/347/) | [Documentation](https://github.com/sdl/Sdl-Community/tree/master/TM%20Optimizer)|
-| [TM Lifting](http://appstore.sdl.com/app/tm-lifting/419/) | [Documentation](https://github.com/sdl/Sdl-Community/tree/master/TMLifting)|
-| [SDL Machine Translation Cloud Provider](https://appstore.sdl.com/language/app/sdl-beglobal-nmt/941/) | [Documentation](https://github.com/sdl/Sdl-Community/tree/master/SDLMTCloud.Provider)|
-| [Amazon Translate](https://appstore.sdl.com/language/app/amazon-translate-mt-provider/925/) | [Documentation](https://github.com/sdl/Sdl-Community/tree/master/AmazonTranslateTradosPlugin)|
-| [SDL Machine Translation Edge Provider](https://appstore.sdl.com/language/app/sdl-ets/843/) | [Documentation](https://github.com/sdl/Sdl-Community/tree/master/SDLMTEdge.Provider)|
-| [ApplyTM Template](https://appstore.sdl.com/language/app/applytm-template/966/) | [Documentation](https://github.com/sdl/Sdl-Community/tree/master/ApplyTMTemplate)|
-| [SDLTM Repair](https://appstore.sdl.com/language/app/sdltm-repair/298/) | [Documentation](https://github.com/sdl/Sdl-Community/tree/master/SDLTMRepair)|
-| [TAUS Search](https://appstore.sdl.com/language/app/taus-search/164/) | [Documentation](https://github.com/sdl/Sdl-Community/tree/master/TAUS%20Data%20Search)|
-| [SDL TMBackup](https://appstore.sdl.com/language/app/sdl-tmbackup/869/) | [Documentation](https://github.com/sdl/Sdl-Community/tree/master/TMBackup)|
-| [SDL Translation Memory Management Utility](https://appstore.sdl.com/language/app/sdl-translation-memory-management-utility/131/) | [Documentation](https://github.com/sdl/Sdl-Community/tree/master/TranslationMemoryManagementUtility)|
-| [TuToTm](https://appstore.sdl.com/language/app/tutotm/998/) | [Documentation](https://github.com/sdl/Sdl-Community/tree/master/TuToTm)|
+| [CleanUp Tasks](https://appstore.rws.com/Plugin/23) | [Documentation](https://github.com/RWS/Sdl-Community/tree/master/CleanUpTasks)|
+| [Export to Excel](https://appstore.rws.com/Plugin/27) | [Documentation](https://github.com/RWS/Sdl-Community/tree/master/Export%20to%20Excel)|
+| [Fail Safe Task](https://appstore.rws.com/Plugin/28) | [Documentation](https://github.com/RWS/Sdl-Community/tree/master/FailSafeTask)|
+| [Trados Batch Anonymizer](https://appstore.rws.com/Plugin/38) | [Documentation](https://github.com/RWS/Sdl-Community/tree/master/SDLBatchAnonymize)|
+| TQA Reporting | [Documentation](https://github.com/RWS/Sdl-Community/tree/master/TQA)|
+| [Trados Studio Target Renamer](https://appstore.rws.com/Plugin/73) | [Documentation](https://github.com/RWS/Sdl-Community/tree/master/TargetRenamer)|
+| [Target Word Count](https://appstore.rws.com/Plugin/74) | [Documentation](https://github.com/RWS/Sdl-Community/tree/master/TargetWordCount)|
-## Integration Api
+
+## Project Automation Api
| Plugin Name | Description |
| --- | --- |
-| [RapidAddTerm](https://appstore.sdl.com/language/app/rapid-add-term/1050/) | [Documentation](https://github.com/sdl/Sdl-Community/tree/master/RapidAddTerm)
-| [Apply Studio Project Template](http://appstore.sdl.com/app/apply-studio-project-template/391/) | [Documentation](https://github.com/sdl/Sdl-Community/tree/master/ApplyStudioProjectTemplate)|
-| [Export to Excel](http://appstore.sdl.com/app/export-to-excel/532/) | [Documentation](https://github.com/sdl/Sdl-Community/blob/master/Export%20to%20Excel/)|
-| [Post Edit Compare](https://appstore.sdl.com/language/app/post-edit-compare/610/) | [Documentation](https://github.com/sdl/Sdl-Community/tree/master/Post%20Edit%20Compare)|
-| [Segment Status Switcher](http://appstore.sdl.com/app/segment-status-switcher/754/) | [Documentation](https://github.com/sdl/Sdl-Community/tree/master/SegmentStatusSwitcher)|
-| [InSource](http://appstore.sdl.com/app/sdl-insource/548/) | [Documentation](https://github.com/sdl/Sdl-Community/blob/master/InSource)|
-| [Record Source TU](http://appstore.sdl.com/app/record-source-tu/504/) | [Documentation](https://github.com/sdl/Sdl-Community/tree/master/Record%20Source%20TU)|
-| [Community Advanced Display Filter](https://appstore.sdl.com/language/app/community-advanced-display-filter/849/) | [Documentation](https://github.com/sdl/Sdl-Community/tree/master/AdvancedDisplayFilter) |
-| [AutoHotKey Manager](https://appstore.sdl.com/language/app/autohotkey-manager/893/) | [Documentation](https://github.com/sdl/Sdl-Community/tree/master/AHK%20plugin) |
-| [Qualitivity](http://appstore.sdl.com/app/qualitivity/612/) | [Documentation](https://github.com/sdl/Sdl-Community/tree/master/Qualitivity)|
-| [DSI Viewer](https://appstore.sdl.com/language/app/dsi-viewer/995/) | [Documentation](https://github.com/sdl/Sdl-Community/tree/master/DSI%20Viewer)|
-| [GrpupShare Version Fetch](https://appstore.sdl.com/language/app/groupshare-version-fetch/993/) | [Documentation](https://github.com/sdl/Sdl-Community/tree/master/GroupShare%20VersionFetch)|
-| [SDL Studio InQuote](https://appstore.sdl.com/language/app/sdl-studio-inquote/295/) | [Documentation](https://github.com/sdl/Sdl-Community/tree/master/InvoiceAndQuotes)|
-| [Jobs](https://appstore.sdl.com/language/app/jobs/463/) | [Documentation](https://github.com/sdl/Sdl-Community/tree/master/Jobs)|
-| [Legit](https://appstore.sdl.com/language/app/sdl-legit/299/) | [Documentation](https://github.com/sdl/Sdl-Community/tree/master/Legit)|
-| [SDL Data Protection Suite](https://appstore.sdl.com/language/app/sdl-data-protection-suite/936/) | [Documentation](https://github.com/sdl/Sdl-Community/tree/master/SDLDataProtectionSuite)|
-| [SDL Fresh Start](https://appstore.sdl.com/language/app/sdl-freshstart/876/) | [Documentation](https://github.com/sdl/Sdl-Community/tree/master/SdlFreshstart)|
-| [Stylesheet Verifier](https://appstore.sdl.com/language/app/stylesheet-verifier/870/) | [Documentation](https://github.com/sdl/Sdl-Community/tree/master/StyleSheetVerifier)|
-| [Time Tracker](https://appstore.sdl.com/language/app/studio-time-tracker/361/) | [Documentation](https://github.com/sdl/Sdl-Community/tree/master/Time%20Tracker)|
-| [Variables Manager](https://appstore.sdl.com/language/app/variables-manager-for-sdl-trados-studio/297/) | [Documentation](https://github.com/sdl/Sdl-Community/tree/master/VariablesManager)|
-| [#YourProductivity](https://appstore.sdl.com/language/app/yourproductivity/491/) | [Documentation](https://github.com/sdl/Sdl-Community/tree/master/YourProductivity)|
-| [CopyTags](https://appstore.sdl.com/language/app/sdl-copy-tags/1070/) | [Documentation](https://github.com/sdl/Sdl-Community/tree/master/CopyTags)|
-| SpotCheck | [Documentation](https://github.com/sdl/Sdl-Community/tree/master/SpotCheck)|
-| [TermExcelerator](https://appstore.sdl.com/language/app/termexcelerator/534/) | [Documentation](https://github.com/sdl/Sdl-Community/tree/master/TermExcelerator)|
-| [TermInjector](https://appstore.sdl.com/language/app/terminjector/759/) | [Documentation](https://github.com/sdl/Sdl-Community/tree/master/TermInjector)|
+| [Apply Studio Project Template](https://appstore.rws.com/Plugin/20) | [Documentation](https://github.com/RWS/Sdl-Community/tree/master/ApplyStudioProjectTemplate)|
+| [Trados Studio – Export Analysis Reports](https://appstore.rws.com/Plugin/92) | [Documentation](https://github.com/RWS/Sdl-Community/tree/master/Export%20Analysis%20Reports)|
-## FileType Support API
+
+## Standalone Application Api
| Plugin Name | Description |
| --- | --- |
-| [Export to Excel](http://appstore.sdl.com/app/export-to-excel/532/) | [Documentation](https://github.com/sdl/Sdl-Community/blob/master/Export%20to%20Excel/)|
-| [Legacy Converter](http://appstore.sdl.com/app/sdlxliff-to-legacy-converter/134/) | [Documentation](https://github.com/sdl/Sdl-Community/tree/master/Legacy%20Converter)|
-| [Number verifier](http://appstore.sdl.com/app/sdl-number-verifier/440/) | [Documentation](https://github.com/sdl/Sdl-Community/tree/master/Number%20Verifier)|
-| [Post Edit Compare](https://appstore.sdl.com/language/app/post-edit-compare/610/) | [Documentation](https://github.com/sdl/Sdl-Community/tree/master/Post%20Edit%20Compare)|
-| [Star Transit](http://appstore.sdl.com/app/transitpackage-handler/573/) | [Documentation](https://github.com/sdl/Sdl-Community/tree/master/StarTransit)|
-| [Project Anonymizer](https://appstore.sdl.com/language/app/projectanonymizer/895/) | [Documentation](https://github.com/sdl/Sdl-Community/tree/master/Anonymizer)|
-| [Project Term Extract](https://appstore.sdl.com/language/app/projecttermextract/817/) | [Documentation](https://github.com/sdl/Sdl-Community/tree/master/ProjectTerms)|
-| [Qualitivity](http://appstore.sdl.com/app/qualitivity/612/) | [Documentation](https://github.com/sdl/Sdl-Community/tree/master/Qualitivity)|
-| [Community Advenced Display Filter](https://appstore.sdl.com/language/app/community-advanced-display-filter/849/) | [Documentation](https://github.com/sdl/Sdl-Community/tree/master/AdvancedDisplayFilter) |
-| [Antidote Verifier](http://appstore.sdl.com/app/antidote-verifier/583/) | [Documentation](https://github.com/sdl/Sdl-Community/tree/master/Antidote%20Verifier) |
-| [SDLXLIFF Compare](https://appstore.sdl.com/language/app/sdlxliff-compare/89/) | [Documentation](https://github.com/sdl/Sdl-Community/tree/master/SdlXliff%20Compare) |
-| [SDLXLIFF Split/Merge](https://appstore.sdl.com/language/app/sdlxliff-split-merge/20/) | [Documentation](https://github.com/sdl/Sdl-Community/tree/master/SDLXLIFFSplitMerge) |
-| [File type definition for TMX](https://appstore.sdl.com/language/app/file-type-definition-for-tmx/317/) | [Documentation](https://github.com/sdl/Sdl-Community/tree/master/TMX) |
-| [SDLXLIFF Toolkit](http://appstore.sdl.com/app/sdlxliff-toolkit/296/) | [Documentation](https://github.com/sdl/Sdl-Community/tree/master/Toolkit)|
-| [Wordfast TXML](http://appstore.sdl.com/app/file-type-definition-for-wordfast-txml/247/) | [Documentation](https://github.com/sdl/Sdl-Community/tree/master/Wordfast%20TXML)|
-| [Word Cloud](http://appstore.sdl.com/app/sdl-trados-studio-word-cloud/402/) | [Documentation](https://github.com/sdl/Sdl-Community/tree/master/Word%20Cloud)|
-| [MXLIFF File Type](https://appstore.sdl.com/language/app/mxliff-file-type/962/) | [Documentation](https://github.com/sdl/Sdl-Community/tree/master/FileTypeSupport.MXLIFF)|
-| [XML Reader](https://appstore.sdl.com/language/app/xml-reader/845/) | [Documentation](https://github.com/sdl/Sdl-Community/tree/master/XML%20Reader)|
-| [XLIFF Manager](https://appstore.sdl.com/language/app/sdl-xliff-manager-for-sdl-trados-studio/1099/) | [Documentation](https://github.com/sdl/Sdl-Community/tree/master/XLIFF.Manager)|
-
-
-## Other plugins
+| [Google API Validator](https://appstore.rws.com/Plugin/53) | [Documentation](https://github.com/RWS/Sdl-Community/tree/master/GoogleApiValidator)|
+| [Hunspell Dictionary Manager](https://appstore.rws.com/Plugin/54) | [Documentation](https://github.com/sdl/Sdl-Community/tree/master/HunspellDictionaryManager)|
+| [SDLXLIFF to Legacy Converter](https://appstore.rws.com/Plugin/56) | [Documentation](https://github.com/RWS/Sdl-Community/tree/master/Legacy%20Converter)|
+| [Language Mapping Provider](https://www.nuget.org/packages/LanguageMappingProvider/) | [Documentation](https://github.com/RWS/Sdl-Community/tree/master/LanguageMappingProvider)|
+| [Trados Freshstart](https://appstore.rws.com/Plugin/107) | [Documentation](https://github.com/RWS/Sdl-Community/tree/master/SdlFreshstart)|
+| Trados Proxy Settings | [Documentation](https://github.com/RWS/Sdl-Community/tree/master/TradosProxySettings)|
-| Plugin Name | Description |
-| --- | --- |
-| [Hunspell Dictionary Manager](https://appstore.sdl.com/language/app/hunspell-dictionary-manager/928/) | [Documentation](https://github.com/sdl/Sdl-Community/tree/master/HunspellDictionaryManager)|
## We want your feedback
diff --git a/SDLXLIFFSplitMerge/ConsoleTestApplication/ConsoleTestApplication.csproj b/SDLXLIFFSplitMerge/ConsoleTestApplication/ConsoleTestApplication.csproj
deleted file mode 100644
index 0eaa03fe82..0000000000
--- a/SDLXLIFFSplitMerge/ConsoleTestApplication/ConsoleTestApplication.csproj
+++ /dev/null
@@ -1,63 +0,0 @@
-
-
-
- Debug
- x86
- 8.0.30703
- 2.0
- {19F44131-DE40-4EE0-AF06-666265DC6BF2}
- Exe
- Properties
- ConsoleTestApplication
- ConsoleTestApplication
- v3.5
- Client
- 512
- SAK
- SAK
- SAK
- SAK
-
-
- x86
- true
- full
- false
- ..\..\..\..\..\..\Bin\Mixed Platforms\Debug\
- DEBUG;TRACE
- prompt
- 4
-
-
- x86
- pdbonly
- true
- ..\..\..\..\..\..\Bin\Mixed Platforms\Release\
- TRACE
- prompt
- 4
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/SDLXLIFFSplitMerge/ConsoleTestApplication/Program.cs b/SDLXLIFFSplitMerge/ConsoleTestApplication/Program.cs
deleted file mode 100644
index d8e25a9d20..0000000000
--- a/SDLXLIFFSplitMerge/ConsoleTestApplication/Program.cs
+++ /dev/null
@@ -1,123 +0,0 @@
-namespace ConsoleTestApplication
-{
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using Sdl.Utilities.SplitSDLXLIFF.Lib;
-
- class Program
- {
- // arg[0] - input file path
- // arg[1] - output path
- // arg[2] - words count
- // arg[3] - percent limit
- static void Main(string[] args)
- {
- string fPath = @"C:\MYDOCs\SplitTaskDocumentation\test_docs\large.doc.sdlxliff";
- string outPath = @"C:\MYDOCs\SplitTaskDocumentation\test_docs\out";
- string splitInfoPath = "";
- int wordsMax = -1;
- int percMax = -1;
-
- List _statuses = new List();
- _statuses.Add(SegStatus.ApprovedSignOff);
- _statuses.Add(SegStatus.ApprovedTranslation);
- _statuses.Add(SegStatus.Translated);
-
- # region // test SPLIT + MERGE (for debug)
- if (args.Length == 0)
- {
- FileParser _testS = new FileParser(fPath, outPath);
- SplitOptions _options = new SplitOptions(SplitOptions.SplitType.WordsCount);
- _options.SplitNonCountStatus = _statuses;
- _options.WordsCount = wordsMax;
- if (percMax > 0)
- {
- _options.IsPercent = true;
- _options.PercMax = percMax;
- }
-
- _testS.Split(_options);
-
- if (_testS.FilesCount.HasValue)
- {
- Console.WriteLine("Split Succeeded!");
- Console.WriteLine(string.Format("Files Created = {0}", _testS.FilesCount.Value));
-
- FileMerger _testM = new FileMerger(_testS);
- _testM.Merge();
- Console.WriteLine();
-
- if (_testM.FilesCount.HasValue)
- {
- Console.WriteLine(string.Format("Files Merged = {0}", _testM.FilesCount.Value));
- Console.WriteLine("Merge Succeeded!");
- }
- else Console.WriteLine("No merge file created...");
- }
- else Console.WriteLine("No split files created...");
- }
- #endregion
-
- #region // test SPLIT
- if (args.Length > 0 && args[0] == "s")
- {
- if (args.Length > 1)
- fPath = args[1].Replace("/", @"\");
- if (args.Length > 2)
- outPath = args[2].Replace("/", @"\");
- if (args.Length > 3)
- int.TryParse(args[3], out wordsMax);
- if (args.Length > 4)
- int.TryParse(args[4], out percMax);
-
-
- FileParser _test = new FileParser(fPath, outPath);
- SplitOptions _options = new SplitOptions(SplitOptions.SplitType.WordsCount);
- _options.SplitNonCountStatus = _statuses;
- _options.WordsCount = wordsMax;
- if (percMax > 0)
- {
- _options.IsPercent = true;
- _options.PercMax = percMax;
- }
-
- _test.Split(_options);
-
- if (_test.FilesCount.HasValue)
- {
- Console.WriteLine("Succeeded!");
- Console.WriteLine(string.Format("Files Created = {0}", _test.FilesCount.Value));
- }
- else Console.WriteLine("No files created...");
- }
- #endregion
-
- #region // test MERGE
- else if (args.Length > 0 && args[0] == "m")
- {
- if (args.Length > 1)
- fPath = args[1].Replace("/", @"\");
- if (args.Length > 2)
- outPath = args[2].Replace("/", @"\");
- if (args.Length > 3)
- splitInfoPath = args[3].Replace("/", @"\");
-
- FileMerger _testM = new FileMerger(fPath, outPath, splitInfoPath);
- _testM.Merge();
- Console.WriteLine();
-
- if (_testM.FilesCount.HasValue)
- {
- Console.WriteLine(string.Format("Files Merged = {0}", _testM.FilesCount.Value));
- Console.WriteLine("Merge Succeeded!");
- }
- else Console.WriteLine("No merge file created...");
- }
- #endregion
-
- Console.ReadKey();
- }
- }
-}
diff --git a/SDLXLIFFSplitMerge/ConsoleTestApplication/Properties/AssemblyInfo.cs b/SDLXLIFFSplitMerge/ConsoleTestApplication/Properties/AssemblyInfo.cs
deleted file mode 100644
index c6b979f8b7..0000000000
--- a/SDLXLIFFSplitMerge/ConsoleTestApplication/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,36 +0,0 @@
-using System.Reflection;
-using System.Runtime.CompilerServices;
-using System.Runtime.InteropServices;
-
-// General Information about an assembly is controlled through the following
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-[assembly: AssemblyTitle("ConsoleTestApplication")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("SDL International")]
-[assembly: AssemblyProduct("ConsoleTestApplication")]
-[assembly: AssemblyCopyright("Copyright © SDL International 2010")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-// Setting ComVisible to false makes the types in this assembly not visible
-// to COM components. If you need to access a type in this assembly from
-// COM, set the ComVisible attribute to true on that type.
-[assembly: ComVisible(false)]
-
-// The following GUID is for the ID of the typelib if this project is exposed to COM
-[assembly: Guid("016d0bd0-dfc4-4cbe-9d92-60cb5b4c76b8")]
-
-// Version information for an assembly consists of the following four values:
-//
-// Major Version
-// Minor Version
-// Build Number
-// Revision
-//
-// You can specify all the values or you can default the Build and Revision Numbers
-// by using the '*' as shown below:
-// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/SDLXLIFFSplitMerge/ConsoleTestApplication/app.config b/SDLXLIFFSplitMerge/ConsoleTestApplication/app.config
deleted file mode 100644
index e91dbe0b26..0000000000
--- a/SDLXLIFFSplitMerge/ConsoleTestApplication/app.config
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
diff --git a/SDLXLIFFSplitMerge/Lib/Common/FileHelper.cs b/SDLXLIFFSplitMerge/Lib/Common/FileHelper.cs
deleted file mode 100644
index 8509571467..0000000000
--- a/SDLXLIFFSplitMerge/Lib/Common/FileHelper.cs
+++ /dev/null
@@ -1,44 +0,0 @@
-namespace Sdl.Utilities.SplitSDLXLIFF.Lib
-{
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.IO;
- using System.Security.Cryptography;
-
- public static class FileHelper
- {
- public static string SHA1HashFile(string fPath)
- {
- if (!File.Exists(fPath))
- return "";
-
- string sHash = "";
- using (StreamReader sr = new StreamReader(fPath))
- {
- //SHA1Managed sha1h = new SHA1Managed();
- using (SHA1CryptoServiceProvider sha1h = new SHA1CryptoServiceProvider())
- {
- sHash = BitConverter.ToString(sha1h.ComputeHash(sr.BaseStream));
- }
- }
- return sHash;
- }
-
- public static void CheckPath(string fileName, bool isOverride)
- {
- try
- {
- if (!Directory.Exists(Path.GetDirectoryName(fileName)))
- Directory.CreateDirectory(Path.GetDirectoryName(fileName));
- if (isOverride && File.Exists(fileName))
- File.Delete(fileName);
- }
- catch (Exception ex)
- {
- throw (ex);
- }
- }
- }
-}
diff --git a/SDLXLIFFSplitMerge/Lib/Common/ListExtension.cs b/SDLXLIFFSplitMerge/Lib/Common/ListExtension.cs
deleted file mode 100644
index bff1319c75..0000000000
--- a/SDLXLIFFSplitMerge/Lib/Common/ListExtension.cs
+++ /dev/null
@@ -1,109 +0,0 @@
-//
-// Copyright (c) 2010 All Right Reserved
-//
-// Oleksandr Tkachenko
-// otkachenko@sdl.com
-// 2010-06-10
-// ListExtension
-
-namespace Sdl.Utilities.SplitSDLXLIFF.Lib
-{
- using System;
- using System.Collections.Generic;
-
- ///
- /// Extension methods for List
- ///
- internal static class ListExtension
- {
- ///
- /// Removes last elements from List
- ///
- /// Type of elements in the list
- /// List to remove last element from
- public static void RemoveLast(this List list)
- {
- list.RemoveAt(list.Count - 1);
- }
-
- ///
- /// Getting the last element in list
- ///
- /// Type of elements in the list
- /// List to get last element from
- /// Returns last element in list. If the list is empty returns default(T)
- public static T Last(this List list)
- {
- if (list.Count > 0)
- {
- return list[list.Count - 1];
- }
- else
- {
- return default(T);
- }
- }
-
- ///
- /// Checking if the list is equal to this list
- ///
- /// Type of elements in the list
- /// List which is checking for equality
- /// List with which is comparing this list
- /// Returns true if the comparing list is equal to this list. Returns false if lists are different
- public static bool IsEqual(this List list, List listToCompare)
- {
- if (list.Count != listToCompare.Count)
- {
- return false;
- }
-
- for (int i = 0; i < list.Count; i++)
- {
- if (!list[i].Equals(listToCompare[i]))
- {
- return false;
- }
- }
-
- return true;
- }
-
- ///
- /// Moves a range of items to the given position.
- ///
- /// A type of items within the collection
- /// A collection of items
- /// A zero-based index indicating the start position of the range
- /// A zero-based index indicating the end position of the range
- /// A zero-based index indicating the target position where items should be moved
- public static void MoveItems(this List list, int indexStart, int indexEnd, int targetPosition)
- {
- // if items are already there where they should be
- if (targetPosition == indexStart)
- {
- return;
- }
-
- // validate the arguments
- if (indexStart > indexEnd ||
- indexStart < 0 ||
- indexEnd >= list.Count ||
- targetPosition < 0 || targetPosition > list.Count ||
- (targetPosition >= indexStart && targetPosition <= indexEnd))
- {
- throw new ArgumentException("Invalid argument values.");
- }
-
- // move items
- List itemsToMove = list.GetRange(indexStart, indexEnd - indexStart + 1);
- list.RemoveRange(indexStart, indexEnd - indexStart + 1);
-
- int position = targetPosition < indexStart
- ? targetPosition
- : targetPosition - itemsToMove.Count;
-
- list.InsertRange(position, itemsToMove);
- }
- }
-}
diff --git a/SDLXLIFFSplitMerge/Lib/Common/Text.cs b/SDLXLIFFSplitMerge/Lib/Common/Text.cs
deleted file mode 100644
index e4d3dae3fe..0000000000
--- a/SDLXLIFFSplitMerge/Lib/Common/Text.cs
+++ /dev/null
@@ -1,66 +0,0 @@
-using Sdl.FileTypeSupport.Framework.BilingualApi;
-using Sdl.FileTypeSupport.Framework.NativeApi;
-
-namespace Sdl.Utilities.SplitSDLXLIFF.Lib.Common
-{
- // Used when assigning the text from the WordCount() method in TextHelper.cs
- public class Text : IText, ITextProperties
- {
- private string _text = string.Empty;
- public Text(string text)
- {
- _text = text;
- }
- public object Clone()
- {
- return null;
- }
-
- public int UniqueId { get; set; }
- public void AcceptVisitor(IMarkupDataVisitor visitor)
- {
- }
-
- public void RemoveFromParent()
- {
- }
-
- public IAbstractMarkupDataContainer Parent { get; set; }
- public int IndexInParent { get; }
- public IParagraph ParentParagraph { get; }
-
- string ITextProperties.Text
- {
- get => _text;
- set => value = _text;
- }
-
- public ITextProperties Properties { get; set; }
-
- public IText Split(int fromIndex)
- {
- return null;
- }
-
- }
-
- // Implement ITextProperties interface (used to assign the Properties to _iTxt.Properties when calling VisitText() method in TextHelper.cs
- public class TextProperties : ITextProperties
- {
- private string _text = string.Empty;
- public TextProperties(string text)
- {
- _text = text;
- }
- public object Clone()
- {
- return null;
- }
-
- public string Text
- {
- get => _text;
- set => value = _text;
- }
- }
-}
\ No newline at end of file
diff --git a/SDLXLIFFSplitMerge/Lib/Common/TextHelper.cs b/SDLXLIFFSplitMerge/Lib/Common/TextHelper.cs
deleted file mode 100644
index c3e79ba308..0000000000
--- a/SDLXLIFFSplitMerge/Lib/Common/TextHelper.cs
+++ /dev/null
@@ -1,642 +0,0 @@
-using System.IO;
-using System.Reflection;
-using Sdl.LanguagePlatform.Core;
-using Sdl.Versioning;
-using System;
-using System.Collections.Generic;
-using System.Globalization;
-using System.Linq;
-using System.Windows.Forms;
-
-namespace Sdl.Utilities.SplitSDLXLIFF.Lib
-{
- ///
- /// Class contains extentsion methods to simplify work with strings
- ///
- public static class TextHelper
- {
- ///
- /// Cutting substring from the string
- ///
- /// String to cut from
- /// Index of the start of substring
- /// Index of the end of substring
- /// Substring of the source string
- public static string Cut(this string s, int indexStart, int indexEnd)
- {
- return s.Substring(indexStart, indexEnd - indexStart + 1);
- }
-
- ///
- /// Removes substring from the given string
- ///
- /// The source string
- /// The position to begin deleting characters
- /// The end position
- /// New string
- public static string RemovePart(this string s, int indexStart, int indexEnd)
- {
- return s.Remove(indexStart, indexEnd - indexStart + 1);
- }
-
- ///
- /// Returns attribute value
- ///
- /// Content of the tag
- /// Name of the attribute
- /// Attribute value
- public static string AttributeValue(this string tagContent, string attributeName)
- {
- string attributeValue = string.Empty;
-
- int indexStart = tagContent.IndexOf(attributeName + @"=""");
-
- if (indexStart != -1)
- {
- indexStart = indexStart + attributeName.Length + 2;
- int indexForSearch = indexStart;
-
- int indexOfEnd = tagContent.IndexOf('"', indexForSearch);
-
- attributeValue = tagContent.Cut(indexStart, indexOfEnd - 1);
- }
-
- return attributeValue;
- }
-
- ///
- /// Extracts all pairs which have the following format: key="value".
- ///
- /// The string from which values should be extracted.
- /// The extracted values in pair. (eg. pair.Key="key" pair.Value="value")
- public static IEnumerable> AttributeValues(this string text)
- {
- int p = 0;
- bool quoteOpened = false;
- List attributes = new List();
-
- for (int i = 0; i < text.Length; i++)
- {
- if (!quoteOpened && (text[i] == ' ' || text[i] == '<' || text[i] == '>'))
- {
- p = i + 1;
- }
- else if (text[i] == '\"')
- {
- if (quoteOpened)
- {
- attributes.Add(text.Cut(p, i));
- quoteOpened = false;
- p = -1;
- }
- else
- {
- if (p >= 0)
- {
- quoteOpened = true;
- }
- }
- }
- }
-
- foreach (string attribute in attributes)
- {
- char quote = '\"';
- int s = attribute.IndexOf("=" + quote);
- int e = attribute.IndexOf(quote, s + 2);
-
- if (s != -1 && e != -1 && attribute.LastIndexOf(quote) == e)
- {
- string name = attribute.Substring(0, s);
- string value = attribute.Cut(s + 2, e - 1);
-
- yield return new KeyValuePair(name, value);
- }
- }
- }
-
- ///
- /// Removes given attribute from the string.
- ///
- /// The source string
- /// The attribute to remove
- /// The source string without the given attribute
- public static string RemoveAttribute(this string text, string attribute)
- {
- char quote = '\"';
- int startIndex;
- while ((startIndex = text.IndexOf(attribute)) != -1)
- {
- int openQoute = text.IndexOf(quote, startIndex);
- int closeQuote = text.IndexOf(quote, openQoute + 1);
- text = text.RemovePart(startIndex, closeQuote);
- if (text[startIndex - 1] == ' ')
- {
- text = text.Remove(startIndex - 1, 1);
- }
- }
-
- return text;
- }
-
- ///
- /// Replace value of attribute
- ///
- /// The source string
- /// The attribute to remove
- /// /// New value of attribute
- /// The source string with replaced attribute
- public static string ReplaceAttribute(this string text, string attribute, string newValueOfAttribute)
- {
- string oldValue = text.AttributeValue(attribute);
-
- if (!string.IsNullOrEmpty(oldValue))
- {
- string oldAttribute = string.Format("{0}=\"{1}\"", attribute, oldValue);
- string newAttribute = string.Format("{0}=\"{1}\"", attribute, newValueOfAttribute);
-
- return text.Replace(oldAttribute, newAttribute);
- }
-
- return text;
- }
-
- ///
- /// Extracts value of the tag content
- ///
- /// Content of the tag
- /// The value of the tag content
- public static string ExtractValue(this string tagContent)
- {
- int startIndex = tagContent.IndexOf(">");
- if (startIndex == -1)
- {
- startIndex = 0;
- }
- else
- {
- startIndex++;
- }
-
- return TextHelper.Cut(tagContent, startIndex, tagContent.Length - 1);
- }
-
- ///
- /// Replace value between two tags
- ///
- /// text for replacment
- /// Tag after which replacment is done. Tag can be specifyed fully or only by start of it.
- /// Tag before which replacemnt is done. Tag can be specifyed fully or only by start of it.
- /// New value that will be inserted between tags.
- /// text with replaced value
- public static string ReplaceValue(this string text, string tag1Start, string tag2Start, string newValue)
- {
- int indexStart = text.IndexOf(tag1Start);
-
- if (indexStart > -1)
- {
- if (tag1Start.IndexOf("<") != -1)
- {
- indexStart = text.IndexOf(">", indexStart);
- }
- else
- {
- indexStart = indexStart + tag1Start.Length;
- }
-
- if (indexStart > -1)
- {
- int indexTitleEnd = text.IndexOf(tag2Start);
-
- if (indexTitleEnd > -1)
- {
- return string.Format("{0}{1}{2}", text.Substring(0, indexStart + 1), newValue, text.Substring(indexTitleEnd));
- }
- }
- }
-
- return text;
- }
-
- ///
- /// Returns first integer, finiding from start position
- ///
- /// String where to search
- /// Position from where to start searching
- /// Integer if string contains it. -1 if there is no numbers in the string
- public static int ExtractInt(this string stringToSearch, int startPosition)
- {
- string parsed = string.Empty;
-
- int i = startPosition;
-
- while (i < stringToSearch.Length && Char.IsDigit(stringToSearch[i]))
- {
- parsed += stringToSearch[i];
- i++;
- }
-
- if (string.IsNullOrEmpty(parsed))
- {
- return -1;
- }
-
- return Convert.ToInt32(parsed);
- }
-
- ///
- /// Comparing string with pattern
- ///
- /// String to compare
- /// Pattern to compare with
- /// Returns true if string compares with pattern
- public static bool CompareWithPattern(this string currentString, string pattern)
- {
- bool isEqual = true;
-
- string[] parts = pattern.Split('%');
-
- if (parts.Length > 1)
- {
- int i = 0;
- while (i < parts.Length && isEqual)
- {
- if (i == 0)
- {
- if (currentString.StartsWith(parts[i]))
- {
- currentString = currentString.Substring(parts[i].Length);
- }
- else
- {
- isEqual = false;
- }
- }
- else
- {
- if (i == (parts.Length - 1))
- {
- isEqual = currentString.EndsWith(parts[i]);
- }
- else
- {
- int index = currentString.IndexOf(parts[i]);
-
- if (index != -1)
- {
- index = index + parts[i].Length;
- currentString = currentString.Substring(index, currentString.Length - index);
- }
- else
- {
- isEqual = false;
- }
- }
- }
-
- i++;
- }
- }
- else
- {
- isEqual = currentString == pattern;
- }
-
- return isEqual;
- }
-
- ///
- /// Adding metadata
- ///
- /// String where to add metadata
- /// Key string
- /// Metadata string
- /// String with added metadata
- public static string AddMetadata(this string currentString, string key, string metadata)
- {
- if (!String.IsNullOrEmpty(metadata))
- {
- return String.Format(@"{0} {1}=""{2}""", currentString, key, metadata);
- }
-
- return currentString;
- }
-
- ///
- /// Returns metadata as "key=value" string
- ///
- /// Source metadata
- /// String attributes list
- public static string MetaDataToAttributeList(IEnumerable> metaData)
- {
- string info = string.Empty;
-
- foreach (KeyValuePair data in metaData)
- {
- info = string.Format(@"{0} {1}=""{2}""", info, data.Key, data.Value);
- }
-
- return info;
- }
-
- ///
- /// Returns metadata as "key=value" string
- ///
- /// Source metadata
- /// String attributes list
- public static string MetaDataToAttributeListEasyToParse(IEnumerable> metaData)
- {
- string info = string.Empty;
-
- foreach (KeyValuePair data in metaData)
- {
- if (!string.IsNullOrEmpty(info))
- {
- info = string.Format(@"{0}|{1}==""{2}""", info, data.Key, data.Value);
- }
- else
- {
- info = string.Format(@"{0}==""{1}""", data.Key, data.Value);
- }
- }
-
- return info;
- }
-
- ///
- /// Converts string to float
- ///
- /// String value
- /// Float value
- public static float ToFloat(this string value)
- {
- string separator = CultureInfo.InvariantCulture.NumberFormat.NumberDecimalSeparator;
- value = value.Replace(".", separator);
- value = value.Replace(",", separator);
- return float.Parse(value, NumberStyles.Number, CultureInfo.InvariantCulture);
- }
-
- ///
- /// Converts string to double
- ///
- /// String value
- /// double value
- public static double ToDouble(this string value)
- {
- string separator = CultureInfo.InvariantCulture.NumberFormat.NumberDecimalSeparator;
- value = value.Replace(".", separator);
- value = value.Replace(",", separator);
- return double.Parse(value, NumberStyles.Number, CultureInfo.InvariantCulture);
- }
-
- ///
- /// Indicates whether tag is closed with "/>"
- ///
- /// Tag content value
- /// Bool value indicating whether tag is finished with "/>"
- public static bool IsClosedTag(this string value)
- {
- return value.EndsWith("/>");
- }
-
- ///
- /// Indicates whether it is a close tag part
- ///
- /// Tag content value
- /// Bool value indicating whether it is a close tag part
- public static bool IfCloseTagPart(this string value)
- {
- return value.StartsWith("") && value.EndsWith(">");
- }
-
- ///
- /// Assure tag is closed with "/>"
- ///
- /// Tag string value
- /// New tag close with "/>"
- public static string AssureTagClosed(this string value)
- {
- if (value.EndsWith("/>"))
- {
- return value;
- }
-
- if (value.EndsWith(">"))
- {
- return value.Insert(value.Length - 1, @"/");
- }
-
- return value + "/>";
- }
-
- ///
- /// Gets shorten version of the string
- ///
- /// string to be shortened
- /// number of digits
- /// shortened string
- public static string ShortenString(this string value, int charCount)
- {
- string result = value;
- if (!string.IsNullOrEmpty(result))
- {
- if (result.Length > charCount)
- {
- result = result.Substring(0, charCount) + "...";
- }
- }
-
- return result;
- }
-
- ///
- /// Checks if the given string begins with any of the given strings.
- ///
- /// The text to check.
- /// The list of values to check.
- /// Returns true if any of the values is prefix of the given string, otherwise returns false.
- public static bool StartsWithAny(this string text, params string[] values)
- {
- foreach (string value in values)
- {
- if (text.StartsWith(value))
- {
- return true;
- }
- }
-
- return false;
- }
-
- ///
- /// Getting length of the string or 0 if null
- ///
- /// String to get length
- /// Length of the string if it's not null, 0 if string is null or empty
- public static int GetLength(this string text)
- {
- if (string.IsNullOrEmpty(text))
- {
- return 0;
- }
- else
- {
- return text.Length;
- }
- }
-
- ///
- /// Gets the node name by given node.
- ///
- /// The node to process
- /// The node's name. For closing nodes returns full node text, eg. 'lt;/closingNodegt;'
- public static string NodeName(this string node)
- {
- if (node.StartsWith(""))
- {
- if (node.EndsWith(">"))
- {
- return node;
- }
- }
- else if (node.StartsWith("<"))
- {
- int endIndex = node.IndexOfAny(new char[] { ' ', '/', '>' });
- if (endIndex > 0 && node.EndsWith(">"))
- {
- return node.Cut(0, endIndex - 1);
- }
- }
-
- return string.Empty;
- }
-
- public static string NodeStartName(this string node)
- {
- return node.Replace("<", "");
- }
-
- // eng only
- public static int GetWordsCountEng(this string text)
- {
- int wordsCount = 0;
- int charsInWord = 0;
- text = text + " ";
-
- for (int i = 0; i < text.Length; i++)
- if (char.IsWhiteSpace(text[i]) || char.IsSeparator(text[i]) || char.IsPunctuation(text[i]))
- {
- if (text[i] != '-' && text[i] != '\'' && charsInWord > 0)
- {
- charsInWord = 0;
- wordsCount++;
- }
- }
- else charsInWord++;
-
- return wordsCount;
- }
-
- // not exact
- public static int GetWordsCount2(this string text)
- {
- return text.Split(new char[] { ' ', '.', ',', '?', '!' }, StringSplitOptions.RemoveEmptyEntries).Length;
- }
-
- // SDL libraries reuse
- public static int GetWordsCount(this string text, string culture)
- {
- var studioInstalledLocation = GetInstalledStudioVersion();
- var studioInstalledLocationPath = studioInstalledLocation != null ? Path.GetDirectoryName(GetInstalledStudioVersion().InstallPath)
- : string.Empty;
- if (string.IsNullOrEmpty(studioInstalledLocationPath))
- {
- MessageBox.Show("Studio location could not be found. Please ensure Trados Studio is installed in order to split files!",
- "Informative message",
- MessageBoxButtons.OK,
- MessageBoxIcon.Information);
- return 0;
- }
- else
- {
- int wordsNum = 0;
- var _Culture = new CultureInfo(culture);
- var _LinguaSegment = new Segment(_Culture);
- Assembly languageProcessingAssembly;
- Assembly translationMemoryToolsAssembly;
-
- // set values to the IText (used when calling builder.VisitText() method)
- var _textSDL = new Text(text);
- var txt = new Common.Text(text);
- FileTypeSupport.Framework.BilingualApi.IText _iTxt = txt;
- var txtProperties = new Common.TextProperties(text);
- _iTxt.Properties = txtProperties;
-
- var tmAssembly = AssemblyName.GetAssemblyName(Path.Combine(studioInstalledLocationPath, "Sdl.LanguagePlatform.TranslationMemoryTools.dll"));
- translationMemoryToolsAssembly = Assembly.Load(tmAssembly);
-
- //get object type
- var linguaSegmentBuilderType =
- translationMemoryToolsAssembly.GetType("Sdl.LanguagePlatform.TranslationMemoryTools.LinguaSegmentBuilder");
-
- //create constructor type
- Type[] constructorArgumentTypes = { typeof(Segment), typeof(bool), typeof(bool) };
-
- //get constructor
- ConstructorInfo linguaSegmentConstrutor = linguaSegmentBuilderType.GetConstructor(constructorArgumentTypes);
-
- // invoke constructor with its arguments and call method/set values from builder object
- dynamic builder = linguaSegmentConstrutor.Invoke(new object[] { _LinguaSegment, false, false });
- builder.VisitText(_iTxt);
- builder.Result.Elements.Add(_textSDL);
-
- var lpAssembly = AssemblyName.GetAssemblyName(Path.Combine(studioInstalledLocationPath, "Sdl.Core.LanguageProcessing.dll"));
- languageProcessingAssembly = Assembly.Load(lpAssembly);
-
- //get object type
- var tokenizationFactoryType = languageProcessingAssembly.GetType("Sdl.Core.LanguageProcessing.Tokenization.TokenizerSetupFactory");
- dynamic tokenizerFactory = tokenizationFactoryType.GetMethods(BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.Static);
-
- var createMethod = tokenizerFactory[0];
- if (createMethod != null)
- {
- dynamic setup = createMethod.Invoke(null, new object[] { _Culture });
-
- setup.CreateWhitespaceTokens = true;
- setup.BuiltinRecognizers =
- LanguagePlatform.Core.Tokenization.BuiltinRecognizers.RecognizeNumbers |
- LanguagePlatform.Core.Tokenization.BuiltinRecognizers.RecognizeDates |
- LanguagePlatform.Core.Tokenization.BuiltinRecognizers.RecognizeTimes;
-
- var tokenizerType = languageProcessingAssembly.GetType("Sdl.Core.LanguageProcessing.Tokenization.Tokenizer");
- Type[] constructorTokenizerArgumentTypes = { setup.GetType() };
- ConstructorInfo tokenizerConstructor = tokenizerType.GetConstructor(constructorTokenizerArgumentTypes);
- dynamic tokenizer = tokenizerConstructor.Invoke(new object[] { setup });
-
- IList _tokens = tokenizer.Tokenize(_LinguaSegment);
- foreach (LanguagePlatform.Core.Tokenization.Token _token in _tokens)
- {
- if (_token.IsWord)
- {
- wordsNum++;
- }
- }
- }
- return wordsNum;
- }
- }
-
- ///
- /// Get installed version for Studio16(Studio 2021).
- /// The call studio.GetStudioVersion() is not working when using the installer, because the app is running outside the Studio context,
- /// so the workaround is to get all the installed studio versions and use the needed one (Studio16)
- ///
- ///
- private static StudioVersion GetInstalledStudioVersion()
- {
- var allStudioVersions = new StudioVersionService().GetInstalledStudioVersions();
-
- return allStudioVersions?.FirstOrDefault(v => v.Version.Equals("Studio16"));
- }
- }
-}
\ No newline at end of file
diff --git a/SDLXLIFFSplitMerge/Lib/FileMerger.cs b/SDLXLIFFSplitMerge/Lib/FileMerger.cs
deleted file mode 100644
index c623ec8a85..0000000000
--- a/SDLXLIFFSplitMerge/Lib/FileMerger.cs
+++ /dev/null
@@ -1,720 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.IO;
-using System.Xml;
-
-namespace Sdl.Utilities.SplitSDLXLIFF.Lib
-{
- public class FileMerger
- {
- private const string _filesExt = "sdlxliff";
- private string _infoFileExt = Properties.StringResource.extSplitInfo;
- private string _fileBackupExt = Properties.StringResource.extBackup;
-
- public delegate void OnProgressDelegate(double progress);
- public event OnProgressDelegate OnProgress;
-
- #region Fields
- private string _origFilePath;
- private string _infoFilePath;
- private string _inFilesPath;
-
- StreamFeeder _infoFFeeder;
- TagParser _infoFParser;
-
- private StreamWriter _writer;
- private string _fileOrigHash;
- private string[] _inFiles;
-
- private Dictionary _headerComments = new Dictionary();
- private List _bodyCommentIDs = new List();
- private List _fileCommentIDs = new List();
- private string _origFileCommentID;
- private bool _isFileCommentNew;
- private bool _isCmtToAdd;
-
- private Dictionary _headerNewTags = new Dictionary();
- private Dictionary _fileTagIDs = new Dictionary();
- private bool _isTagToAdd;
-
- private Dictionary _addedFmts= new Dictionary();
- private Dictionary _headerNewFmts = new Dictionary();
- private Dictionary _splitFFmts;
- private int _origFileFmtID;
-
- private int? _outFCount;
- private List _mergedFName;
- #endregion
-
- #region Props
- public int? FilesCount
- {
- get { return _outFCount; }
- }
-
- private string tempWriteFilePath
- {
- get
- {
- return string.Format(@"{0}\{1}{2}", Path.GetDirectoryName(_origFilePath),
- _fileOrigHash, Path.GetExtension(_origFilePath));
- }
- }
- private string tempUpdFilePath
- {
- get
- {
- return string.Format(@"{0}\{1}_comm{2}", Path.GetDirectoryName(_origFilePath),
- _fileOrigHash, Path.GetExtension(_origFilePath));
- }
- }
- #endregion
-
- #region Constructors
- public FileMerger(FileParser fileParser)
- {
- _origFilePath = fileParser.FilePath;
- _inFilesPath = fileParser.OutPath;
- _infoFilePath = string.Format(@"{0}\{1}.{2}", _inFilesPath, Path.GetFileNameWithoutExtension(_origFilePath), _infoFileExt);
- }
- public FileMerger(string origFilePath, string inFilesPath, string infoFilePath)
- {
- _origFilePath = origFilePath;
- _inFilesPath = inFilesPath;
- _infoFilePath = infoFilePath;
- }
- #endregion
-
- #region Public
- public void Merge()
- {
- // get hash from original file
- _fileOrigHash = FileHelper.SHA1HashFile(_origFilePath);
-
- ValidateFields();
-
- // TODO Sort files if needed
- // get all split files
- _inFiles = Directory.GetFiles(_inFilesPath, string.Format("*{0}.{1}", _fileOrigHash, _filesExt));
- DoMerge();
-
- if (_headerComments.Count > 0 || _headerNewTags.Count > 0)
- UpdateFile();
-
- // if succeeded - get number of files processed for merging
- _outFCount = _mergedFName.Count;
- }
- #endregion
-
- #region Private
- private void DoMerge()
- {
- string fileName = "";
- bool isTUFound = false;
- bool isNewTagFound = false;
- bool anyVal = false; // << to encrease performance
- int tuNumber = 0;
- int tuCount = 0;
- int wordCount = 0;
- _mergedFName = new List();
- _origFileCommentID = Guid.NewGuid().ToString();
-
- // create perser for split info file
- _infoFFeeder = new StreamFeeder(_infoFilePath);
- _infoFParser = new TagParser(_infoFFeeder);
-
- // to create merged file writer
- FileHelper.CheckPath(tempWriteFilePath, true);
- _writer = new StreamWriter(tempWriteFilePath);
-
- // to read original file
- StreamFeeder origFFeeder = new StreamFeeder(_origFilePath);
- TagParser origFParser = new TagParser(origFFeeder);
-
- // to read split files
- string splitFName = Path.GetFileName(_inFiles[0]);
- StreamFeeder splitFFeeder = new StreamFeeder(string.Format(@"{0}\{1}", _inFilesPath, splitFName));
- TagParser splitFParser = new TagParser(splitFFeeder);
- _splitFFmts = new Dictionary();
- _mergedFName.Add(splitFName);
-
- while (origFParser.Next())
- {
- if (!origFParser.IsInTransUnit && !origFParser.IsInCmtDef)
- {
- // always write to file everything but trans-units and comments as exception
- WriteToFile(origFParser.ParsedText);
-
- // read comment id in header (file level comments)
- if (origFParser.IsInFileCmtClosed && !string.IsNullOrEmpty(origFParser.FileCmtIDAttr))
- _origFileCommentID = origFParser.FileCmtIDAttr;
-
- // read tag id in header
- if (origFParser.TagID == Tags.TagStart && !string.IsNullOrEmpty(origFParser.TagIDAttr))
- AddTagIDToList(origFParser.TagIDAttr);
-
- // read fmt-def id in header
- if (origFParser.TagID == Tags.FmtDefStart && !string.IsNullOrEmpty(origFParser.FmtDefIDAttr))
- int.TryParse(origFParser.FmtDefIDAttr, out _origFileFmtID);
-
- // read fmt-defs written to merged file
- if (origFParser.IsInFmtDef)
- AddFmtDefOrigToDict(origFParser.FmtDefIDAttr, origFParser.ParsedText);
- }
- else if (origFParser.TagID == Tags.TransUnitStart)
- {
- // check if current TU number >= number of all TUs in split file
- if (tuCount == 0 || tuNumber >= tuCount)
- {
- // find next split file name
- fileName = getFileNameFromSplitInfo();
- tuCount = getTUCountFromSplitInfo();
- wordCount = getWordCountFromSplitInfo();
- tuNumber = 0;
-
- if (wordCount > 0)
- {
- splitFName = "";
-
- // validate
- if (string.IsNullOrEmpty(fileName) || !File.Exists(getInFilePath(fileName)))
- throw new FileNotFoundException(string.Format(Properties.StringResource.errSplitFileNotFound, fileName));
- else if (getInFileHash(fileName) != _fileOrigHash)
- throw new InvalidDataException(Properties.StringResource.errCanNotMerge);
- else
- {
- // open new split file
- splitFName = fileName;
- splitFParser.Dispose();
- splitFFeeder = new StreamFeeder(string.Format(@"{0}\{1}", _inFilesPath, splitFName));
- splitFParser = new TagParser(splitFFeeder);
- _splitFFmts = new Dictionary();
-
- if (!_mergedFName.Contains(splitFName))
- _mergedFName.Add(splitFName);
- }
- }
- }
-
- isTUFound = false;
- isNewTagFound = false;
- if (splitFName.Length > 0)
- while (splitFParser.Next())
- {
- // read trans-units
- if (splitFParser.IsInTransUnit)
- {
- // write to file trans-units from split file
- WriteToFile(splitFParser.ParsedText);
-
- // read comment ids in body (segment level comments)
- if (splitFParser.IsInMrkComm && splitFParser.TagID == Tags.MrkStart && !string.IsNullOrEmpty(splitFParser.MrkCommCIDAttr))
- AddCommentIDToList(splitFParser.MrkCommCIDAttr);
-
- if (splitFParser.TagID == Tags.TransUnitEnd)
- { isTUFound = true; break; }
- }
- // read comments in doc-info
- else if (splitFParser.IsInCmtDef && !string.IsNullOrEmpty(splitFParser.CmtDefIDAttr))
- AddCommentToDict(splitFParser.CmtDefIDAttr, splitFParser.ParsedText, (splitFParser.TagID == Tags.CmtDefStart));
-
- // read comment ids in header (file level comments)
- else if (splitFParser.IsInFileCmtClosed && !string.IsNullOrEmpty(splitFParser.FileCmtIDAttr))
- AddHdrCommentIDToList(splitFParser.FileCmtIDAttr);
-
- // read tags in header -- optimized
- else if (splitFParser.IsInTag)
- {
- if (splitFParser.TagID == Tags.TagStart)
- {
- if (_fileTagIDs.TryGetValue(splitFParser.TagIDAttr, out anyVal))
- isNewTagFound = false;
- else isNewTagFound = true;
- }
- //else if (splitFParser.IsInTag && !_fileTagIDs.Contains(splitFParser.TagIDAttr))
- if (isNewTagFound)
- {
- string pText = splitFParser.ParsedText;
- if (splitFParser.IsInFmtClosed)
- {
- // change format tag id
- pText = string.Format("{0} {1}=\"{2}\"/>", TagDirectory.FmtStart, TagDirectory.AttrID, FindFmtDef(splitFParser.FmtIDAttr));
- }
- AddTagToDict(splitFParser.TagIDAttr, pText, (splitFParser.TagID == Tags.TagStart));
- }
- if (splitFParser.TagID == Tags.TagEnd)
- isNewTagFound = false;
- }
-
- // read fmt-defs in header
- else if (splitFParser.IsInFmtDef && !string.IsNullOrEmpty(splitFParser.FmtDefIDAttr))
- AddFmtDefToDict(splitFParser.FmtDefIDAttr, splitFParser.ParsedText);
-
- }
-
- if (!isTUFound)
- throw new InvalidDataException(string.Format(Properties.StringResource.errTUNotFound,
- origFParser.TransUnitIDAttr,
- splitFName, tuNumber));
-
- tuNumber++;
-
- #region older version
- //// get trans-unit id
- //tuID = origFParser.TransUnitIDAttr;
-
- //// find split file name for current trans-unit
- //tuFileName = getFileNameFromSplitInfo(tuID);
- //if (string.IsNullOrEmpty(tuFileName) || !File.Exists(getInFilePath(tuFileName)))
- // throw new FileNotFoundException(string.Format("Split file '{0}' not found.", tuFileName));
- //else if (getInFileHash(tuFileName) != _fileOrigHash)
- // throw new InvalidDataException("Cannot merge files. Possible reasons: " +
- // "1 - Original file was modified after the split. 2 - Split files do not correspond the indicated original file.");
- //else
- //{
- // // create reader for new split file
- // if (!string.Equals(tuFileName, splitFName))
- // {
- // splitFName = tuFileName;
- // splitFParser.Dispose();
- // splitFFeeder = new StreamFeeder(string.Format(@"{0}\{1}", _inFilesPath, splitFName));
- // splitFParser = new TagParser(splitFName);
-
- // if (!_mergedFName.Contains(splitFName))
- // _mergedFName.Add(splitFName);
- // }
-
- // // find trans-unit with current id
- // // write the whole trans-unit to merged file
- // isTUFound = false;
- // fileReads = 0;
- // while (!isTUFound && fileReads < 2)
- // {
- // while (splitFParser.Next())
- // {
- // // read trans-units
- // if (splitFParser.IsInTransUnit && splitFParser.TransUnitIDAttr == tuID)
- // {
- // // write to file trans-units from split file
- // WriteToFile(splitFParser.ParsedText);
-
- // // read comment ids in body (segment level comments)
- // if (splitFParser.IsInMrkComm && splitFParser.TagID == Tags.MrkStart && !string.IsNullOrEmpty(splitFParser.MrkCommCIDAttr))
- // AddCommentIDToList(splitFParser.MrkCommCIDAttr);
-
- // if (splitFParser.TagID == Tags.TransUnitEnd)
- // { isTUFound = true; break; }
- // }
- // // read comments in doc-info
- // else if (splitFParser.IsInCmtDef && !string.IsNullOrEmpty(splitFParser.CmtDefIDAttr))
- // AddCommentToDict(splitFParser.CmtDefIDAttr, splitFParser.ParsedText, (splitFParser.TagID == Tags.CmtDefStart));
-
- // // read comment ids in header (file level comments)
- // else if (splitFParser.IsInFileCmtClosed && !string.IsNullOrEmpty(splitFParser.FileCmtIDAttr))
- // AddHdrCommentIDToList(splitFParser.FileCmtIDAttr);
- // }
-
- // if (!isTUFound)
- // {
- // // start reading this file again
- // fileReads++;
- // splitFParser = new TagParser(splitFFeeder);
- // }
- // }
-
- // // if trans-unit not found - throw ex
- // if (!isTUFound)
- // throw new InvalidDataException(string.Format("Trans-unit '{0}' not found in file '{1}'.", tuID, splitFName));
- //}
- #endregion
- }
-
- // report current operation progress
- ProgressMerge(origFParser.Progress());
- }
-
- origFParser.Dispose();
- splitFParser.Dispose();
-
- _infoFParser.Dispose();
- _writer.Dispose();
-
- RenameFiles();
- }
-
- private void ValidateFields()
- {
- // input file path/name
- if (!Directory.Exists(Path.GetDirectoryName(_origFilePath)) || !File.Exists(_origFilePath))
- throw new FileNotFoundException(string.Format(Properties.StringResource.errFileNotExist, _origFilePath));
-
- // info file path/name
- if (!Directory.Exists(Path.GetDirectoryName(_infoFilePath)) || !File.Exists(_infoFilePath))
- throw new FileNotFoundException(string.Format(Properties.StringResource.errFileNotExist, _infoFilePath));
-
- // input (split) files path
- if (!Directory.Exists(_inFilesPath))
- throw new DirectoryNotFoundException(string.Format(Properties.StringResource.errDirectoryNotExist, _inFilesPath));
- if (Directory.GetFiles(_inFilesPath, string.Format("*{0}.{1}", _fileOrigHash, _filesExt)).Length < 1)
- throw new FileNotFoundException(string.Format(Properties.StringResource.errNoFilesToMerge, _inFilesPath));
- }
-
- private void AddCommentToDict(string key, string value, bool isStart)
- {
- if (!string.IsNullOrEmpty(value))
- {
- if (isStart)
- _isCmtToAdd = (_headerComments.ContainsKey(key) ? false : true);
-
- if (_isCmtToAdd)
- if (_headerComments.ContainsKey(key)) _headerComments[key] += value;
- else _headerComments.Add(key, value);
- }
- }
- private void AddTagToDict(string key, string value, bool isStart)
- {
- if (!string.IsNullOrEmpty(value))
- {
- if (isStart)
- _isTagToAdd = (_headerNewTags.ContainsKey(key) ? false : true);
-
- if (_isTagToAdd)
- if (_headerNewTags.ContainsKey(key)) _headerNewTags[key] += value;
- else _headerNewTags.Add(key, value);
- }
- }
- private void AddFmtDefToDict(string key, string value)
- {
- if (!string.IsNullOrEmpty(value))
- {
- if (_splitFFmts.ContainsKey(key)) _splitFFmts[key] += value;
- else _splitFFmts.Add(key, value);
- }
- }
- private void AddFmtDefOrigToDict(string key, string value)
- {
- if (!string.IsNullOrEmpty(value))
- {
- if (_addedFmts.ContainsKey(key)) _addedFmts[key] += value;
- else _addedFmts.Add(key, value);
- }
- }
- private void AddCommentIDToList(string cmtID)
- {
- if (!_bodyCommentIDs.Contains(cmtID))
- _bodyCommentIDs.Add(cmtID);
- }
- private void AddHdrCommentIDToList(string cmtID)
- {
- if (!_fileCommentIDs.Contains(cmtID))
- _fileCommentIDs.Add(cmtID);
- }
- private void AddTagIDToList(string tagID)
- {
- if (!_fileTagIDs.ContainsKey(tagID))
- _fileTagIDs.Add(tagID, false);
- }
-
- private string FindFmtDef(string ID)
- {
- string newID = "";
- if (_splitFFmts.ContainsKey(ID))
- {
- // try to find format among added
- foreach (KeyValuePair _addedFmt in _addedFmts)
- if (_addedFmt.Value.Replace(string.Format(" {0}=\"{1}\">", TagDirectory.AttrID, _addedFmt.Key), string.Format(" {0}=\"{1}\">", TagDirectory.AttrID, ID)) == _splitFFmts[ID])
- { newID = _addedFmt.Key; break; }
- if (newID.Length == 0)
- {
- // add new format to add
- newID = (++_origFileFmtID).ToString();
- _headerNewFmts.Add(newID, _splitFFmts[ID].Replace(string.Format(" {0}=\"{1}\">", TagDirectory.AttrID, ID),
- string.Format(" {0}=\"{1}\">", TagDirectory.AttrID, newID)));
- AddFmtDefOrigToDict(newID, _headerNewFmts[newID]);
- }
- }
- return newID;
- }
-
- private void UpdateFile()
- {
- // to read original file
- StreamFeeder origFFeeder = new StreamFeeder(_origFilePath);
- TagParser origFParser = new TagParser(origFFeeder);
-
- // to create merged file writer
- FileHelper.CheckPath(tempUpdFilePath, true);
- _writer = new StreamWriter(tempUpdFilePath);
-
- NormalizeFileComments();
-
- bool isCmtFound = false;
- bool isTagFound = false;
- bool isFmtFound = false;
- while (origFParser.Next())
- {
- // add comments in header
- // add fmt-defs in header
- // add tags in header
- if (origFParser.TagID == Tags.HeaderEnd)
- {
- if (!isFmtFound && _headerNewFmts.Count > 0)
- {
- WriteToFile(string.Format("{0}>", TagDirectory.FmtDefsStart));
- WriteFmtsToFile();
- WriteToFile(TagDirectory.FmtDefsEnd);
- }
- if (!isTagFound && _headerNewTags.Count > 0)
- {
- WriteToFile(string.Format("{0}>", TagDirectory.TagDefsStart));
- WriteTagsToFile();
- WriteToFile(TagDirectory.TagDefsEnd);
- }
- if (_isFileCommentNew)
- WriteToFile(string.Format("{0} {1}=\"{2}\" />", TagDirectory.FileCmtStart,
- TagDirectory.AttrID, _origFileCommentID));
- }
-
- // add comments in doc-info
- if (origFParser.TagID == Tags.DocInfoEnd && _headerComments.Count > 0 && !isCmtFound)
- {
- WriteToFile(string.Format("{0}>", TagDirectory.CmtsStart));
- WriteCmtsToFile();
- WriteToFile(TagDirectory.CmtsEnd);
- isCmtFound = true;
- }
- if (origFParser.TagID == Tags.FileStart && _headerComments.Count > 0 && !isCmtFound)
- {
- WriteToFile(string.Format("{0} {1}=\"{2}\">", TagDirectory.DocInfoStart, TagDirectory.AttrXmlNs, TagDirectory.AttrXmlNsValue));
- WriteToFile(string.Format("{0}>", TagDirectory.CmtsStart));
- WriteCmtsToFile();
- WriteToFile(TagDirectory.CmtsEnd);
- WriteToFile(TagDirectory.DocInfoEnd);
- }
-
- // add fmts in header
- if (origFParser.TagID == Tags.FmtDefsEnd && _headerNewFmts.Count > 0)
- {
- WriteFmtsToFile();
- isFmtFound = true;
- }
-
- // --- always write to file everything ---
- WriteToFile(origFParser.ParsedText);
-
- // add comments in doc-info
- if (origFParser.TagID == Tags.CmtsStart && _headerComments.Count > 0)
- {
- WriteCmtsToFile();
- isCmtFound = true;
- }
- // add tags in header
- if (origFParser.TagID == Tags.TagDefsStart && _headerNewTags.Count > 0)
- {
- WriteTagsToFile();
- isTagFound = true;
- }
- }
-
- origFParser.Dispose();
- _writer.Dispose();
-
- RenameUpdFiles();
- }
- private void NormalizeFileComments()
- {
- Dictionary fileCommentTag = new Dictionary();
- XmlDocument cmtDoc;
- XmlElement cmtRoot;
-
- string fileCmtKey = "";
- if (_fileCommentIDs.Count > 0)
- foreach (KeyValuePair _comment in _headerComments)
- if (_fileCommentIDs.Contains(_comment.Key))
- {
- fileCmtKey = _comment.Key;
-
- // analyze comment & add unique only to temp dictionary of comments
- cmtDoc = new XmlDocument();
- cmtDoc.LoadXml(_comment.Value);
-
- cmtRoot = cmtDoc.DocumentElement;
- XmlNodeList cmtNodes = cmtRoot.SelectNodes(string.Format("/{0}/{1}/{2}",
- TagDirectory.CmtDefStart.NodeStartName(),
- TagDirectory.CommentsStart.NodeStartName(),
- TagDirectory.CommentStart.NodeStartName()));
-
- string cmtKey = "";
- foreach (XmlNode cmt in cmtNodes)
- {
- cmtKey = ((XmlElement)cmt).GetAttribute(TagDirectory.AttrUser) + ((XmlElement)cmt).GetAttribute(TagDirectory.AttrDate);
- if (!fileCommentTag.ContainsKey(cmtKey))
- fileCommentTag.Add(cmtKey, cmt.OuterXml);
- }
- }
-
- if (!string.IsNullOrEmpty(fileCmtKey))
- {
- StringBuilder comments = new StringBuilder();
- foreach (KeyValuePair fileCmt in fileCommentTag)
- comments.Append(fileCmt.Value);
-
- // add file comment generated to list
- cmtDoc = new XmlDocument();
- cmtDoc.LoadXml(_headerComments[fileCmtKey]);
- cmtRoot = cmtDoc.DocumentElement;
-
- XmlNode cmts = cmtRoot.SelectSingleNode(string.Format("/{0}/{1}",
- TagDirectory.CmtDefStart.NodeStartName(),
- TagDirectory.CommentsStart.NodeStartName()));
- cmts.InnerXml = comments.ToString();
-
- // add real file comments item
- if (_headerComments.ContainsKey(_origFileCommentID))
- _headerComments[_origFileCommentID] = cmtDoc.InnerXml.Replace(fileCmtKey, _origFileCommentID);
- else
- {
- _isFileCommentNew = true;
- _headerComments.Add(_origFileCommentID, cmtDoc.InnerXml.Replace(fileCmtKey, _origFileCommentID));
- }
- }
- }
-
- private void WriteToFile(string content)
- {
- _writer.Write(content);
- }
- private void WriteCmtsToFile()
- {
- foreach (KeyValuePair _comment in _headerComments)
- if (_bodyCommentIDs.Contains(_comment.Key) || _comment.Key == _origFileCommentID)
- WriteToFile(_comment.Value);
- }
- private void WriteTagsToFile()
- {
- foreach (KeyValuePair _tag in _headerNewTags)
- WriteToFile(_tag.Value);
- }
- private void WriteFmtsToFile()
- {
- foreach (KeyValuePair _fmt in _headerNewFmts)
- WriteToFile(_fmt.Value);
- }
- private void RenameFiles()
- {
- if (File.Exists(tempWriteFilePath))
- {
- // rename original file to backup
- string backupFile = string.Format("{0}.{1}", _origFilePath, _fileBackupExt);
- FileHelper.CheckPath(backupFile, true);
- File.Move(_origFilePath, backupFile);
-
- // rename merged file to original file name
- File.Move(tempWriteFilePath, _origFilePath);
- }
- }
- private void RenameUpdFiles()
- {
- if (File.Exists(tempUpdFilePath))
- {
- FileHelper.CheckPath(_origFilePath, true);
- File.Move(tempUpdFilePath, _origFilePath);
- }
- }
-
- //private string getFileNameFromSplitInfo(string transUnitID)
- //{
- // string fName = "";
-
- // int infoFileReads = 0;
- // bool isInfoTUFound = false;
- // while (!isInfoTUFound && infoFileReads < 2)
- // {
- // while (_infoFParser.Next())
- // if (_infoFParser.IsInTransUnitClosed && _infoFParser.TransUnitIDAttr == transUnitID)
- // {
- // fName = _infoFParser.FileNameAttr;
- // isInfoTUFound = true; break;
- // }
-
- // if (!isInfoTUFound)
- // {
- // // start reading this file again
- // infoFileReads++;
- // _infoFParser = new TagParser(_infoFFeeder);
- // }
- // }
-
- // return fName;
- //}
- private string getFileNameFromSplitInfo()
- {
- string fName = "";
-
- bool isFileFound = false;
- while (!isFileFound && _infoFParser.Next())
- {
- if (_infoFParser.TagID == Tags.FileStart && !string.IsNullOrEmpty(_infoFParser.FileNameAttr))
- {
- fName = _infoFParser.FileNameAttr;
- isFileFound = true; break;
- }
- }
-
- return fName;
- }
- private int getTUCountFromSplitInfo()
- {
- int tusCount = 0;
-
- bool isFileFound = false;
- while (!isFileFound && _infoFParser.Next())
- {
- if (_infoFParser.IsInTransUnits && !_infoFParser.IsTag)
- {
- int.TryParse(_infoFParser.ParsedText, out tusCount);
- isFileFound = true; break;
- }
- }
-
- return tusCount;
- }
- private int getWordCountFromSplitInfo()
- {
- int wordsCount = 0;
-
- bool isFileFound = false;
- while (!isFileFound && _infoFParser.Next())
- {
- if (_infoFParser.IsInWords && !_infoFParser.IsTag)
- {
- int.TryParse(_infoFParser.ParsedText, out wordsCount);
- isFileFound = true; break;
- }
- }
-
- return wordsCount;
- }
-
- private string getInFilePath(string fName)
- {
- return string.Format(@"{0}\{1}", _inFilesPath, fName);
- }
- private string getInFileHash(string fName)
- {
- string[] fNameParts = Path.GetFileNameWithoutExtension(getInFilePath(fName)).Split('_');
- return fNameParts.Length > 1 ? fNameParts[1] : "";
- }
-
- private void ProgressMerge(double currProgress)
- {
- if (this.OnProgress != null)
- {
- this.OnProgress(currProgress);
- }
- }
- #endregion
- }
-}
diff --git a/SDLXLIFFSplitMerge/Lib/FileParser.cs b/SDLXLIFFSplitMerge/Lib/FileParser.cs
deleted file mode 100644
index 49af5e56d2..0000000000
--- a/SDLXLIFFSplitMerge/Lib/FileParser.cs
+++ /dev/null
@@ -1,739 +0,0 @@
-namespace Sdl.Utilities.SplitSDLXLIFF.Lib
-{
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.IO;
-
- public class FileParser
- {
- public delegate void OnProgressDelegate(double progress);
- public event OnProgressDelegate OnProgress;
-
- #region Fields
- private string _fPath;
- private string _outPath;
- private bool _isSeparateFile;
-
- private SplitOptions _options;
- private int _wordsMax;
-
- private int? _outFCount;
- private StreamWriter _writer;
- private SplitInfoWriter _infoWriter;
- private string _fileHash;
-
- private string _xliffDeclar;
- private string _xliffTag = "";
- private string _fileTag = "";
- private StringBuilder _docinfo = new StringBuilder();
- private StringBuilder _header = new StringBuilder();
- private Dictionary _headerTags = new Dictionary();
- private Dictionary _headerTagSubs = new Dictionary();
- private Dictionary _prevFileTags;
- private Dictionary _splitFileTUs;
-
- private bool _isTagToAdd;
-
- private List _warnings;
- private List _segmentIDsFound;
- #endregion
-
- #region Props
- ///
- /// number of split files created,
- /// if -1 - corrupt file error
- ///
- public int? FilesCount
- {
- get { return _outFCount; }
- }
- ///
- /// warnings when splitting file (by segment numbers)
- ///
- public List Warnings
- {
- get { return _warnings; }
- }
- ///
- /// input file path
- ///
- public string FilePath
- {
- get { return _fPath; }
- }
- ///
- /// split files directory (target folder, contains folders with files)
- ///
- public string OutPath
- {
- get
- { return _outPath; }
- }
- ///
- /// split files directory (a folder in target folder, contains sdlxliff files)
- ///
- private string currFileOut
- {
- get {
- return string.Format(@"{0}\{1}_{2}.sdlxliff", _outPath,
- (_outFCount.HasValue ? _outFCount.Value.ToString("000") : "000"),
- _fileHash);
- }
- }
- ///
- /// temporary split file path
- ///
- private string tempUpdFilePath
- {
- get
- {
- return string.Format(@"{0}\{1}_{2}_tag.sdlxliff", _outPath,
- (_outFCount.HasValue ? _outFCount.Value.ToString("000") : "000"),
- _fileHash);
- }
- }
- #endregion
-
- #region Constructor
- public FileParser(string filePath, string outPath)
- {
- _fPath = filePath;
- _isSeparateFile = true;
- _outPath = NormalizeOutPath(outPath);
- }
- public FileParser(string filePath, bool isSeparateFile, string outPath)
- {
- _fPath = filePath;
- _isSeparateFile = isSeparateFile;
- _outPath = NormalizeOutPath(outPath);
- }
- #endregion
-
- #region Public
- ///
- /// splits the file using default options (word-count, 1000)
- ///
- public void Split()
- {
- _options = new SplitOptions();
- _wordsMax = _options.WordsCount;
-
- ValidateFields();
-
- DoSplit();
- }
- ///
- /// splits the file using custom options
- ///
- ///
- public void Split(SplitOptions sOptions)
- {
- _options = sOptions;
- _wordsMax = _options.WordsCount;
-
- ValidateFields();
-
- // if EgualParts - get words count for a file
- if (_options.Criterion == SplitOptions.SplitType.EqualParts)
- {
- SetWordsCount(_options.PartsCount);
- if (_wordsMax < 1)
- throw new ArgumentOutOfRangeException(string.Format(Properties.StringResource.errWordCalcOutOfRange,
- _fPath,
- _options.PartsCount));
- }
- else if (_options.Criterion == SplitOptions.SplitType.SegmentNumbers)
- {
- _warnings = new List();
- _segmentIDsFound = new List();
- }
-
- DoSplit();
-
- if (_options.Criterion == SplitOptions.SplitType.SegmentNumbers)
- CheckFoundSegments();
- }
- #endregion
-
- #region Private
- private void DoSplit()
- {
- int countWords = 0;
- string mrkID = "";
- bool isStart = true;
-
- string segID;
- // int segIDNum;
- string segToSplit = "";
-
- // Words Count dictionary for every segment
- Dictionary segmentCountWords = new Dictionary();
- List xTagTUs = new List();
- _splitFileTUs = new Dictionary();
-
- // generate file hash string
- _fileHash = FileHelper.SHA1HashFile(_fPath);
-
- // Init writer
- _outFCount = 1;
- FileHelper.CheckPath(currFileOut, true);
- FileHelper.CheckPath(_outPath, true);
- _writer = new StreamWriter(currFileOut);
- _infoWriter = new SplitInfoWriter(_fPath, _fileHash, _outPath);
- _infoWriter.WriteFileTag(Path.GetFileName(currFileOut));
-
- StreamFeeder feeder = new StreamFeeder(_fPath);
- TagParser tagParser = new TagParser(feeder);
- bool isFileCorrupt = false;
- bool isFileEmpty = true;
- bool isMrkFound = false;
-
- while (tagParser.Next() && !isFileCorrupt)
- {
- #region BODY LOGIC
- if (tagParser.IsInBody)
- {
- // if TEXT found -- count segment words and save in dictionary
- if (!tagParser.IsTag)
- {
- if (tagParser.IsInMrkText && tagParser.IsInSegSource && tagParser.isUnitTranslatable)
- {
- mrkID = tagParser.MrkMIDAttr;
- if (mrkID.Length > 0)
- // AddCountToDict(mrkID, TextHelper.GetWordsCountEng(tagParser.ParsedText), ref segmentCountWords);
- AddCountToDict(mrkID, TextHelper.GetWordsCount(tagParser.ParsedText, tagParser.SourceLangAttr), ref segmentCountWords);
-
- isMrkFound = true;
- }
- }
-
- // if TAG found
- else
- {
- // get info about segments, count words in group
- // that satisfy the conditions
- if (tagParser.TagID == Tags.SegStart)
- {
- segID = tagParser.ParsedText.AttributeValue(TagDirectory.AttrID) ?? "";
- if (segID.Length > 0)
- {
- if (_options.Criterion == SplitOptions.SplitType.SegmentNumbers)
- SetSegToSplit(segID, ref segToSplit);
- if (isGroupWordsCountable(tagParser.ParsedText.AttributeValue(TagDirectory.AttrSegConf),
- tagParser.ParsedText.AttributeValue(TagDirectory.AttrSegPerc),
- tagParser.ParsedText.AttributeValue(TagDirectory.AttrSegLocked)))
- if (segmentCountWords.ContainsKey(segID))
- countWords += segmentCountWords[segID];
- }
- }
-
- // clear the Words Count dictionary for every segment
- else if (tagParser.TagID == Tags.SegDefsEnd)
- segmentCountWords = new Dictionary();
-
- // we are at groups edge - check for words count >= max words count
- // to start new file
- else if ((tagParser.TagID == Tags.GroupStart || tagParser.TagID == Tags.TransUnitStart) && tagParser.isBodyParent)
- {
- if (xTagTUs.Count == 0 || xTagTUs.Intersect(_splitFileTUs.Keys).Count() == xTagTUs.Count)
- {
- if ((_options.Criterion == SplitOptions.SplitType.SegmentNumbers && segToSplit.Length > 0 && !_segmentIDsFound.Contains(segToSplit))
- || (_options.Criterion != SplitOptions.SplitType.SegmentNumbers && countWords >= _wordsMax))
- {
- // write to split info file
- _infoWriter.WriteTransUnitsCountTag(_splitFileTUs.Count);
- _infoWriter.WriteWordsCountTag(countWords);
- AddSplitSegmentIDs(segToSplit);
-
- WriteToNewFile();
- countWords = 0;
- segToSplit = "";
-
- // clear TUs log lists
- _splitFileTUs = new Dictionary();
- xTagTUs = new List();
- }
- }
- }
-
- // get trans-unit ids in tag
- else if (tagParser.TagID == Tags.XStart && !string.IsNullOrEmpty(tagParser.XTagXIDAttr))
- {
- string[] xTUs = tagParser.XTagXIDAttr.Split(' ');
- foreach (string xTU in xTUs)
- if (!xTagTUs.Contains(xTU))
- xTagTUs.Add(xTU);
- }
-
- // get any trans-unit id and write it to splitinfo file & list of trans-units of one split file
- if (tagParser.TagID == Tags.TransUnitStart)
- if (!_splitFileTUs.ContainsKey(tagParser.TransUnitIDAttr))
- _splitFileTUs.Add(tagParser.TransUnitIDAttr, false);
- }
-
- isFileEmpty = false;
- }
- #endregion
-
- #region HEADER LOGIC ( optimization only)
- else if (tagParser.IsInHeader)
- {
- // we are handling tags separately
- if (tagParser.IsInTag)
- {
- AddTagToDict(tagParser.TagIDAttr, tagParser.ParsedText, (tagParser.TagID == Tags.TagStart));
- if (tagParser.TagID == Tags.TagSubStart && !string.IsNullOrEmpty(tagParser.TagSubXIDAttr))
- AddTagSubToDict(tagParser.TagIDAttr, tagParser.TagSubXIDAttr);
- }
- // just write header to write it to all the split files
- else
- if (!tagParser.IsInReference)
- _header.Append(tagParser.ParsedText);
- }
- #endregion
-
- #region DOCINFO LOGIC
- else if (tagParser.IsInDocInfo)
- _docinfo.Append(tagParser.ParsedText);
- #endregion
-
- #region OTHER
- else
- {
- if (tagParser.TagID == Tags.FileStart)
- {
- if (!string.IsNullOrEmpty(_fileTag))
- isFileCorrupt = true;
- _fileTag = tagParser.ParsedText;
- }
- else if (tagParser.TagID == Tags.XliffStart)
- _xliffTag = tagParser.ParsedText;
-
- // XML Declaration
- else if (isStart)
- {
- _xliffDeclar = tagParser.ParsedText;
- isStart = false;
- }
- }
- #endregion
-
- // if not tag - always write to file
- // if not reference - optimized split files
- if (!tagParser.IsInTag && !tagParser.IsInReference)
- WriteToFile(tagParser.ParsedText);
-
- // report current operation progress
- ProgressSplit(tagParser.Progress(), 2);
- }
-
- tagParser.Dispose();
- _writer.Dispose();
-
- // write to split info file
- _infoWriter.WriteTransUnitsCountTag(_splitFileTUs.Count);
- _infoWriter.WriteWordsCountTag(countWords);
- _infoWriter.CloseWrite(_outFCount.HasValue ? _outFCount.Value : 0);
- AddSplitSegmentIDs(segToSplit);
-
- // validate file (throws exception)
- this.ValidateFileAfterParsing(isFileCorrupt, isMrkFound, isFileEmpty);
-
- // last file is empty
- if (countWords == 0)
- UpdateFile(true);
- // read & write split file again to add tags into
- else if (_headerTags.Count > 0)
- UpdateFile(false);
- }
-
- private void ValidateFields()
- {
- // input file path/name
- if (!Directory.Exists(Path.GetDirectoryName(_fPath)) || !File.Exists(_fPath))
- throw new FileNotFoundException(string.Format(Properties.StringResource.errFileNotExist, _fPath));
-
- // percent (for any criterion)
- if (_options.IsPercent)
- if (_options.PercMax < 1 || _options.PercMax > 100)
- throw new ArgumentOutOfRangeException(Properties.StringResource.errPercentOutOfRange);
-
- // words number (for word-count & equal parts)
- if (_options.Criterion == SplitOptions.SplitType.WordsCount && _wordsMax < 1)
- throw new ArgumentOutOfRangeException(Properties.StringResource.errWordCountOutOfRange);
-
- // parts number (for equal parts)
- if (_options.Criterion == SplitOptions.SplitType.EqualParts && _options.PartsCount < 2)
- throw new ArgumentOutOfRangeException(Properties.StringResource.errPartsCountOutOfRange);
- }
-
- private void ValidateFileAfterParsing(bool isFileCorrupt, bool isMrkFound, bool isFileEmpty)
- {
- // file is corrupt - rollback all changes
- if (isFileCorrupt || _xliffTag == string.Empty || _fileTag == string.Empty)
- {
- RollbackFiles();
- throw new InvalidDataException(Properties.StringResource.errFileCorrupt);
- }
-
- // file is empty (has no content)
- if (isFileEmpty)
- {
- RollbackFiles();
- throw new InvalidDataException(Properties.StringResource.errFileEmpty);
- }
-
- // file is not pre-processed
- if (!isMrkFound)
- {
- RollbackFiles();
- throw new InvalidDataException(Properties.StringResource.errFileUnexpectedStructure);
- }
- }
-
- private void SetWordsCount(int partsNumber)
- {
- int wordsInFile = 0;
- //int segIDNum = 0;
- string mrkID = "";
- string segID = "";
-
- // Words Count dictionary for every segment
- Dictionary segmentCountWords = new Dictionary();
-
- StreamFeeder feeder = new StreamFeeder(_fPath);
- TagParser tagParser = new TagParser(feeder);
- bool isMrkFound = false;
-
- while (tagParser.Next())
- {
- // look for text in body only
- if (tagParser.IsInBody)
- {
- // if TEXT found -- count segment words and save in dictionary
- if (!tagParser.IsTag)
- {
- if (tagParser.IsInMrkText && tagParser.IsInSegSource && tagParser.isUnitTranslatable)
- {
- mrkID = tagParser.MrkMIDAttr;
- if (mrkID.Length > 0)
- AddCountToDict(mrkID, TextHelper.GetWordsCount(tagParser.ParsedText, tagParser.SourceLangAttr), ref segmentCountWords);
-
- isMrkFound = true;
- }
- }
- else
- {
- // get info about segments, count words in group
- // that satisfy the conditions
- if (tagParser.TagID == Tags.SegStart)
- {
- segID = tagParser.ParsedText.AttributeValue(TagDirectory.AttrID) ?? "";
- if (segID.Length > 0)
- {
- if (isGroupWordsCountable(tagParser.ParsedText.AttributeValue(TagDirectory.AttrSegConf),
- tagParser.ParsedText.AttributeValue(TagDirectory.AttrSegPerc),
- tagParser.ParsedText.AttributeValue(TagDirectory.AttrSegLocked)))
- if (segmentCountWords.ContainsKey(segID))
- wordsInFile += segmentCountWords[segID];
- }
- }
-
- // clear the Words Count dictionary for every segment
- else if (tagParser.TagID == Tags.SegDefsEnd)
- segmentCountWords = new Dictionary();
- }
- }
-
- // report current operation progress
- ProgressSplit(tagParser.Progress(), 1);
- }
- tagParser.Dispose();
-
- // file is not pre-processed
- if (!isMrkFound)
- {
- throw new InvalidDataException(Properties.StringResource.errFileUnexpectedStructure);
- }
-
- // calculate number of words for a file
- _wordsMax = wordsInFile / partsNumber;
- if (wordsInFile % partsNumber > 0)
- _wordsMax += 1;
- }
- private void SetSegToSplit(string currSegID, ref string currSegToSplit)
- {
- if (currSegToSplit.Length > 0)
- {
- if (_options.SegmentIDs.Contains(currSegToSplit))
- _warnings.Add(new Warning(currSegToSplit, Warning.WarningType.WrongSplitLocation));
- currSegToSplit = currSegID;
- }
- else if (_options.SegmentIDs.Contains(currSegID))
- {
- currSegToSplit = currSegID;
- }
- }
- private void CheckFoundSegments()
- {
- foreach (string segID in _options.SegmentIDs.Except(_segmentIDsFound))
- {
- if (_warnings.FindIndex(w => w.ElementID == segID && w.Type == Warning.WarningType.WrongSplitLocation) < 0)
- _warnings.Add(new Warning(segID, Warning.WarningType.NotFound));
- }
- }
-
- private string NormalizeOutPath(string path)
- {
- string outPath = "";
- if (_isSeparateFile)
- outPath = string.Format(Properties.StringResource.dirSplitFiles, path, Path.GetFileNameWithoutExtension(_fPath)).Replace("/", @"\");
- else
- {
- string[] origFilePath = _fPath.Replace(@"\", "/").Split('/');
-
- outPath = string.Format(Properties.StringResource.dirSplitFilesFromProject,
- path,
- (origFilePath.Length > 1 ? origFilePath[origFilePath.Length - 2] : ""),
- Path.GetFileNameWithoutExtension(_fPath)).Replace("/", @"\");
- }
-
- string outPathTemp = outPath;
- int i = 0;
- while (Directory.Exists(outPathTemp))
- outPathTemp = string.Format("{0}_{1}", outPath, ++i);
-
- return outPathTemp;
- }
-
- #region add to dictionary/list methods
- private void AddCountToDict(string key, int value, ref Dictionary dictionary)
- {
- if (value > 0)
- {
- if (dictionary.ContainsKey(key)) dictionary[key] += value;
- else dictionary.Add(key, value);
- }
- }
- private void AddTagToDict(string key, string value, bool isTagStart)
- {
- if (!string.IsNullOrEmpty(value))
- {
- if (isTagStart)
- _isTagToAdd = (_headerTags.ContainsKey(key) ? false : true);
-
- if (_isTagToAdd)
- if (_headerTags.ContainsKey(key)) _headerTags[key] += value;
- else _headerTags.Add(key, value);
- }
- }
- private void AddTagSubToDict(string key, string value)
- {
- if (!string.IsNullOrEmpty(value))
- {
- if (_headerTagSubs.ContainsKey(key))
- _headerTagSubs[key] += string.Format("|{0}", value);
- else _headerTagSubs.Add(key, value);
- }
- }
- private void AddSplitSegmentIDs(string segmentID)
- {
- if (segmentID.Length > 0)
- if (!_segmentIDsFound.Contains(segmentID))
- _segmentIDsFound.Add(segmentID);
- }
- #endregion
-
- private bool isGroupWordsCountable(string segStatus, string segPerc, string segLocked)
- {
- int segPercNum = -1;
- int.TryParse(segPerc, out segPercNum);
-
- if (string.IsNullOrEmpty(segLocked))
- if (isStatusCountable(TagSegStatus.getTagSegStatus(segStatus)))
- {
- if (!_options.IsPercent || (_options.IsPercent && segPercNum < _options.PercMax))
- return true;
- }
-
- return false;
- }
- private bool isStatusCountable(SegStatus segStatus)
- {
- if (_options.SplitNonCountStatus.Contains(segStatus))
- return false;
- return true;
- }
-
- #region writer methods
- private void WriteToFile(string content)
- {
- //try
- //{
- _writer.Write(content);
- //}
- //catch (Exception ex)
- //{
- // _writer.Dispose();
- // RollbackFiles();
- // throw new IOException(string.Format("Error when writing to file: {0}", ex.Message));
- //}
- }
- private void WriteToNewFile()
- {
- // finish writing to old file
- WriteToFile(string.Concat(TagDirectory.BodyEnd,
- TagDirectory.FileEnd,
- TagDirectory.XliffEnd));
- _writer.Close();
-
- // read & write split file again to add tags into
- if (_headerTags.Count > 0)
- UpdateFile(false);
-
- // start writing to new file
- _outFCount++;
-
- _writer = new StreamWriter(currFileOut);
- WriteToFile(string.Concat(new string[] { _xliffDeclar,
- _xliffTag,
- _docinfo.ToString(),
- _fileTag,
- _header.ToString(),
- TagDirectory.BodyStart + '>'
- }));
- _infoWriter.WriteFileTag(Path.GetFileName(currFileOut));
- }
- ///
- /// isLastFileEmpty - if true - we delete last file and update previous,
- /// if false - we update last file as usual
- ///
- ///
- private void UpdateFile(bool isLastFileEmpty)
- {
- bool anyVal = false; // << to encrease performance
- Dictionary addedTags = new Dictionary();
-
- if (isLastFileEmpty)
- _outFCount--;
-
- // to read split file
- StreamFeeder splitFFeeder = new StreamFeeder(currFileOut);
- TagParser splitFParser = new TagParser(splitFFeeder);
-
- // to create split file writer
- FileHelper.CheckPath(tempUpdFilePath, true);
- _writer = new StreamWriter(tempUpdFilePath);
-
- while (splitFParser.Next())
- {
-
- // read all TUs from last file and write to previous
- if (isLastFileEmpty && splitFParser.TagID == Tags.BodyEnd)
- {
- _outFCount++;
-
- StreamFeeder lastFFeeder = new StreamFeeder(currFileOut);
- TagParser lastFParser = new TagParser(lastFFeeder);
-
- while (lastFParser.Next())
- if (lastFParser.IsInBody && lastFParser.TagID != Tags.BodyStart && lastFParser.TagID != Tags.BodyEnd)
- WriteToFile(lastFParser.ParsedText);
-
- // delete last file
- if (isLastFileEmpty)
- File.Delete(currFileOut);
- _outFCount--;
- }
-
- // always write to file everything
- WriteToFile(splitFParser.ParsedText);
-
- // add tags in tag_defs
- if (splitFParser.TagID == Tags.TagDefsStart)
- {
- addedTags = new Dictionary();
-
- // find tags that need to be written
- // write tag text to file
- foreach (KeyValuePair tag in _headerTags)
- {
- bool isTagToWrite = true;
- if (_headerTagSubs != null && _headerTagSubs.ContainsKey(tag.Key))
- {
- string[] tagTUs = _headerTagSubs[tag.Key].Split('|');
- foreach (string tagTU in tagTUs)
- if (_splitFileTUs.TryGetValue(tagTU, out anyVal)) { }
- else
- { isTagToWrite = false; break; }
- }
-
- if (isTagToWrite)
- {
- if (!isLastFileEmpty)
- {
- addedTags.Add(tag.Key, false);
- WriteToFile(tag.Value);
- }
- else if (_prevFileTags != null && _prevFileTags.TryGetValue(tag.Key, out anyVal))
- { }
- else
- {
- addedTags.Add(tag.Key, false);
- WriteToFile(tag.Value);
- }
- }
- }
- }
- }
-
- // restore the list of tags added to file
- _prevFileTags = addedTags;
-
- splitFFeeder.Dispose();
- _writer.Dispose();
-
- RenameUpdFiles();
- }
-
- private void RenameUpdFiles()
- {
- if (File.Exists(tempUpdFilePath))
- {
- FileHelper.CheckPath(currFileOut, true);
- File.Move(tempUpdFilePath, currFileOut);
- }
- }
- private void RollbackFiles()
- {
- string dir = Path.GetDirectoryName(currFileOut);
- if (Directory.Exists(dir))
- Directory.Delete(dir, true);
-
- _outFCount = -1;
- }
- #endregion
-
- private void ProgressSplit(double currProgress, int operationOrder)
- {
- if (this.OnProgress != null)
- {
- switch (operationOrder)
- {
- case 1:
- this.OnProgress(currProgress / 2);
- break;
- case 2:
- if (_options.Criterion == SplitOptions.SplitType.EqualParts)
- this.OnProgress(50 + currProgress / 2);
- else this.OnProgress(currProgress);
- break;
- }
- }
- }
- #endregion
- }
-
-}
diff --git a/SDLXLIFFSplitMerge/Lib/Properties/AssemblyInfo.cs b/SDLXLIFFSplitMerge/Lib/Properties/AssemblyInfo.cs
deleted file mode 100644
index 8ccfb6bee7..0000000000
--- a/SDLXLIFFSplitMerge/Lib/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,32 +0,0 @@
-using System.Reflection;
-using System.Runtime.InteropServices;
-
-// General Information about an assembly is controlled through the following
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-[assembly: AssemblyTitle("SDLXLIFF Split / Merge")]
-[assembly: AssemblyProduct("SDLXLIFF Split / Merge")]
-[assembly: AssemblyCompany("SDL Limited as part of the RWS Holdings Plc group of companies")]
-[assembly: AssemblyCopyright("Copyright © 2011 - 2022 SDL Limited as part of the RWS Holdings Plc group of companies (\"RWS Group\").")]
-
-// Setting ComVisible to false makes the types in this assembly not visible
-// to COM components. If you need to access a type in this assembly from
-// COM, set the ComVisible attribute to true on that type.
-[assembly: ComVisible(false)]
-
-// The following GUID is for the ID of the typelib if this project is exposed to COM
-[assembly: Guid("9c4cc3e4-f585-4c33-8afb-ecfc1c3ae8eb")]
-
-// Version information for an assembly consists of the following four values:
-//
-// Major Version
-// Minor Version
-// Build Number
-// Revision
-//
-// You can specify all the values or you can default the Build and Revision Numbers
-// by using the '*' as shown below:
-// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("4.0.0.0")]
-[assembly: AssemblyFileVersion("4.2.0.0")]
-
diff --git a/SDLXLIFFSplitMerge/Lib/Properties/StringResource.Designer.cs b/SDLXLIFFSplitMerge/Lib/Properties/StringResource.Designer.cs
deleted file mode 100644
index 2531810a6d..0000000000
--- a/SDLXLIFFSplitMerge/Lib/Properties/StringResource.Designer.cs
+++ /dev/null
@@ -1,234 +0,0 @@
-//------------------------------------------------------------------------------
-//
-// This code was generated by a tool.
-// Runtime Version:4.0.30319.42000
-//
-// Changes to this file may cause incorrect behavior and will be lost if
-// the code is regenerated.
-//
-//------------------------------------------------------------------------------
-
-namespace Sdl.Utilities.SplitSDLXLIFF.Lib.Properties {
- using System;
-
-
- ///
- /// A strongly-typed resource class, for looking up localized strings, etc.
- ///
- // This class was auto-generated by the StronglyTypedResourceBuilder
- // class via a tool like ResGen or Visual Studio.
- // To add or remove a member, edit your .ResX file then rerun ResGen
- // with the /str option, or rebuild your VS project.
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")]
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
- internal class StringResource {
-
- private static global::System.Resources.ResourceManager resourceMan;
-
- private static global::System.Globalization.CultureInfo resourceCulture;
-
- [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
- internal StringResource() {
- }
-
- ///
- /// Returns the cached ResourceManager instance used by this class.
- ///
- [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
- internal static global::System.Resources.ResourceManager ResourceManager {
- get {
- if (object.ReferenceEquals(resourceMan, null)) {
- global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Sdl.Utilities.SplitSDLXLIFF.Lib.Properties.StringResource", typeof(StringResource).Assembly);
- resourceMan = temp;
- }
- return resourceMan;
- }
- }
-
- ///
- /// Overrides the current thread's CurrentUICulture property for all
- /// resource lookups using this strongly typed resource class.
- ///
- [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
- internal static global::System.Globalization.CultureInfo Culture {
- get {
- return resourceCulture;
- }
- set {
- resourceCulture = value;
- }
- }
-
- ///
- /// Looks up a localized string similar to {0}\{1}.splits.
- ///
- internal static string dirSplitFiles {
- get {
- return ResourceManager.GetString("dirSplitFiles", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to {0}\{1}_{2}.splits.
- ///
- internal static string dirSplitFilesFromProject {
- get {
- return ResourceManager.GetString("dirSplitFilesFromProject", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Cannot merge files. Possible reasons: 1 - Original file was modified after the split. 2 - Split files do not correspond the indicated original file..
- ///
- internal static string errCanNotMerge {
- get {
- return ResourceManager.GetString("errCanNotMerge", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Directory '{0}' does not exist..
- ///
- internal static string errDirectoryNotExist {
- get {
- return ResourceManager.GetString("errDirectoryNotExist", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to The file is corrupt..
- ///
- internal static string errFileCorrupt {
- get {
- return ResourceManager.GetString("errFileCorrupt", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to The file contains no content..
- ///
- internal static string errFileEmpty {
- get {
- return ResourceManager.GetString("errFileEmpty", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to File '{0}' does not exist..
- ///
- internal static string errFileNotExist {
- get {
- return ResourceManager.GetString("errFileNotExist", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Unexpected file structure. Please, try to resave the file in Trados Studio and try again..
- ///
- internal static string errFileUnexpectedStructure {
- get {
- return ResourceManager.GetString("errFileUnexpectedStructure", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to No files to merge found in directory {0}..
- ///
- internal static string errNoFilesToMerge {
- get {
- return ResourceManager.GetString("errNoFilesToMerge", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Number of parts to split file to was out of range..
- ///
- internal static string errPartsCountOutOfRange {
- get {
- return ResourceManager.GetString("errPartsCountOutOfRange", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Max Percent for word-count was out of range..
- ///
- internal static string errPercentOutOfRange {
- get {
- return ResourceManager.GetString("errPercentOutOfRange", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Split file '{0}' not found..
- ///
- internal static string errSplitFileNotFound {
- get {
- return ResourceManager.GetString("errSplitFileNotFound", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Trans-unit '{0}' not found in file '{1}'. Trans-unit number in split file is {2}..
- ///
- internal static string errTUNotFound {
- get {
- return ResourceManager.GetString("errTUNotFound", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Total Number for words found in file '{0}' is too small to split it into {1} parts..
- ///
- internal static string errWordCalcOutOfRange {
- get {
- return ResourceManager.GetString("errWordCalcOutOfRange", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Max Words Number for word-count was out of range..
- ///
- internal static string errWordCountOutOfRange {
- get {
- return ResourceManager.GetString("errWordCountOutOfRange", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to backup.
- ///
- internal static string extBackup {
- get {
- return ResourceManager.GetString("extBackup", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to splitinfo.
- ///
- internal static string extSplitInfo {
- get {
- return ResourceManager.GetString("extSplitInfo", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to ATTENTION: Segment ID '{0}' was not found in file.\r\n.
- ///
- internal static string wrnSegNotFound {
- get {
- return ResourceManager.GetString("wrnSegNotFound", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to ATTENTION: Cannot split file directly after segment ID '{0}'.\r\nThis segment is followed by another segment in translation unit/group and split operation can be performed only after the last segment in translation unit/group.\r\n.
- ///
- internal static string wrnSegWrongSplit {
- get {
- return ResourceManager.GetString("wrnSegWrongSplit", resourceCulture);
- }
- }
- }
-}
diff --git a/SDLXLIFFSplitMerge/Lib/Properties/StringResource.resx b/SDLXLIFFSplitMerge/Lib/Properties/StringResource.resx
deleted file mode 100644
index 8ebbf4832a..0000000000
--- a/SDLXLIFFSplitMerge/Lib/Properties/StringResource.resx
+++ /dev/null
@@ -1,177 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- text/microsoft-resx
-
-
- 2.0
-
-
- System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- {0}\{1}.splits
-
-
- {0}\{1}_{2}.splits
-
-
- Cannot merge files. Possible reasons: 1 - Original file was modified after the split. 2 - Split files do not correspond the indicated original file.
-
-
- Directory '{0}' does not exist.
-
-
- The file is corrupt.
-
-
- The file contains no content.
-
-
- File '{0}' does not exist.
-
-
- Unexpected file structure. Please, try to resave the file in Trados Studio and try again.
-
-
- No files to merge found in directory {0}.
-
-
- Number of parts to split file to was out of range.
-
-
- Max Percent for word-count was out of range.
-
-
- Split file '{0}' not found.
-
-
- Trans-unit '{0}' not found in file '{1}'. Trans-unit number in split file is {2}.
-
-
- Total Number for words found in file '{0}' is too small to split it into {1} parts.
-
-
- Max Words Number for word-count was out of range.
-
-
- backup
-
-
- splitinfo
-
-
- ATTENTION: Segment ID '{0}' was not found in file.\r\n
-
-
- ATTENTION: Cannot split file directly after segment ID '{0}'.\r\nThis segment is followed by another segment in translation unit/group and split operation can be performed only after the last segment in translation unit/group.\r\n
-
-
\ No newline at end of file
diff --git a/SDLXLIFFSplitMerge/Lib/Sdl.Utilities.SplitSDLXLIFF.Lib.csproj b/SDLXLIFFSplitMerge/Lib/Sdl.Utilities.SplitSDLXLIFF.Lib.csproj
deleted file mode 100644
index 3de0c6477b..0000000000
--- a/SDLXLIFFSplitMerge/Lib/Sdl.Utilities.SplitSDLXLIFF.Lib.csproj
+++ /dev/null
@@ -1,48 +0,0 @@
-
-
-
- net48
- false
- True
- $(MSBuildProgramFiles32)\Trados\Trados Studio\Studio18
- false
- ..\SdlCommunity.snk
-
-
-
-
- $(TradosFolder)\Sdl.FileTypeSupport.Framework.Core.dll
-
-
- $(TradosFolder)\Sdl.FileTypeSupport.Framework.Core.Settings.dll
-
-
- $(TradosFolder)\Sdl.FileTypeSupport.Framework.Core.Utilities.dll
-
-
- $(TradosFolder)\Sdl.FileTypeSupport.Framework.Implementation.dll
-
-
- $(TradosFolder)\Sdl.LanguagePlatform.Core.dll
-
-
- $(TradosFolder)\Sdl.LanguagePlatform.Lingua.dll
-
-
- $(TradosFolder)\Sdl.Versioning.dll
-
-
- $(TradosFolder)\Sdl.Core.Globalization.Async.dll
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/SDLXLIFFSplitMerge/Lib/SplitInfoWriter.cs b/SDLXLIFFSplitMerge/Lib/SplitInfoWriter.cs
deleted file mode 100644
index b4d506034b..0000000000
--- a/SDLXLIFFSplitMerge/Lib/SplitInfoWriter.cs
+++ /dev/null
@@ -1,168 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Xml;
-using System.IO;
-
-namespace Sdl.Utilities.SplitSDLXLIFF.Lib
-{
- class SplitInfoWriter
- {
- private string _infoFileExt = Properties.StringResource.extSplitInfo;
-
- private XmlTextWriter _writer;
- private int _filesCount;
- private string _srcFile;
- private string _srcFileCRC;
-
- public SplitInfoWriter(string srcFile, string srcFileCRC, string outPath)
- {
- _filesCount = 0;
- _srcFile = srcFile;
- _srcFileCRC = srcFileCRC;
-
- _writer = new XmlTextWriter(string.Format(@"{0}\{1}.{2}", outPath, Path.GetFileNameWithoutExtension(_srcFile), _infoFileExt), null);
- WriteStart();
- }
-
- public void WriteFileTag(string fNameAttr)
- {
- if (_filesCount > 0)
- _writer.WriteEndElement(); // close file
-
- _writer.WriteStartElement(SplitInfoTag.getTag(SplitInfo.File));
- _writer.WriteAttributeString(SplitInfoTag.getTag(SplitInfo.FileNameAttr), fNameAttr);
- _filesCount++;
- }
- public void WriteTransUnitsCountTag(int tusCount)
- {
- _writer.WriteElementString(SplitInfoTag.getTag(SplitInfo.TransUnits), tusCount.ToString());
- }
- public void WriteWordsCountTag(int wordsCount)
- {
- _writer.WriteElementString(SplitInfoTag.getTag(SplitInfo.Words), wordsCount.ToString());
- }
- //public void WriteTransUnitTag(int tusCount)
- //{
- // _writer.WriteStartElement(SplitInfoTag.getTag(SplitInfo.TransUnit));
- // _writer.WriteAttributeString(SplitInfoTag.getTag(SplitInfo.TransUnitIDAttr), tuIDAttr);
- // _writer.WriteEndElement();
- //}
- public void CloseWrite(int flsCount)
- {
- _writer.WriteEndElement(); // close file
- _writer.WriteEndElement(); // close index
-
- _writer.WriteElementString(SplitInfoTag.getTag(SplitInfo.FilesCount), flsCount.ToString());
-
- WriteEnd();
- }
-
-
- private void WriteStart()
- {
- _writer.WriteStartDocument();
-
- _writer.WriteStartElement(SplitInfoTag.getTag(SplitInfo.SplitInfo));
-
- _writer.WriteElementString(SplitInfoTag.getTag(SplitInfo.FileName), Path.GetFileNameWithoutExtension(_srcFile));
- _writer.WriteElementString(SplitInfoTag.getTag(SplitInfo.FileCRC), Path.GetFileNameWithoutExtension(_srcFileCRC));
- _writer.WriteElementString(SplitInfoTag.getTag(SplitInfo.DateCreated), DateTime.Now.ToString());
-
- _writer.WriteStartElement(SplitInfoTag.getTag(SplitInfo.TransUnitIndex));
- }
- private void WriteEnd()
- {
- _writer.WriteEndDocument();
-
- _writer.Close();
- }
- }
-
- public enum SplitInfo
- {
- ///
- /// Represents SplitInfo file Tag
- ///
- SplitInfo,
-
- ///
- /// Represents SplitInfo file Tag
- ///
- FileName,
-
- ///
- /// Represents SplitInfo file Tag
- ///
- FileCRC,
-
- ///
- /// Represents SplitInfo file Tag
- ///
- DateCreated,
-
- ///
- /// Represents SplitInfo file Tag
- ///
- FilesCount,
-
- ///
- /// Represents SplitInfo file Tag
- ///
- TransUnitIndex,
-
- ///
- /// Represents SplitInfo file Tag
- ///
- File,
-
- ///
- /// Represents SplitInfo file Tag
- ///
- TransUnits,
-
- ///
- /// Represents SplitInfo file Tag
- ///
- Words,
-
- ///
- /// Represents SplitInfo file Tag Attr
- ///
- FileNameAttr
-}
-
- public static class SplitInfoTag
- {
-
- public static string getTag(SplitInfo type)
- {
- switch (type)
- {
- case SplitInfo.SplitInfo:
- return "split-info";
- case SplitInfo.FileName:
- return "file-name";
- case SplitInfo.FileCRC:
- return "file-crc";
- case SplitInfo.DateCreated:
- return "cr-date";
- case SplitInfo.FilesCount:
- return "files-count";
- case SplitInfo.TransUnitIndex:
- return "index";
- case SplitInfo.File:
- return "file";
- case SplitInfo.TransUnits:
- return "trans-units";
- case SplitInfo.Words:
- return "words";
- case SplitInfo.FileNameAttr:
- return "name";
- default:
- return "";
- }
- }
- }
-}
diff --git a/SDLXLIFFSplitMerge/Lib/SplitOptions.cs b/SDLXLIFFSplitMerge/Lib/SplitOptions.cs
deleted file mode 100644
index a0049f6a77..0000000000
--- a/SDLXLIFFSplitMerge/Lib/SplitOptions.cs
+++ /dev/null
@@ -1,78 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-namespace Sdl.Utilities.SplitSDLXLIFF.Lib
-{
- public class SplitOptions
- {
- public enum SplitType { WordsCount, EqualParts, SegmentNumbers };
-
- private List segmentIDs;
-
- public List SplitNonCountStatus
- { get; set; }
-
- public SplitType Criterion
- { get; set; }
- public int WordsCount
- { get; set; }
- public int PartsCount
- { get; set; }
- public List SegmentIDs
- { get { return segmentIDs; } }
-
- public bool IsPercent
- { get; set; }
- public int PercMax
- { get; set; }
-
- public SplitOptions()
- {
- Criterion = SplitType.WordsCount;
- WordsCount = 1000;
- PartsCount = 0;
- segmentIDs = new List();
-
- PercMax = 0;
- }
-
- public SplitOptions(SplitType criterion)
- {
- Criterion = criterion;
- segmentIDs = new List();
- PercMax = 90;
- switch (Criterion)
- {
- case SplitType.WordsCount:
- WordsCount = 1000;
- PartsCount = 0;
- break;
- case SplitType.EqualParts:
- WordsCount = 0;
- PartsCount = 2;
- break;
- case SplitType.SegmentNumbers:
- WordsCount = 0;
- PartsCount = 0;
- break;
- }
- }
-
- public void setSegmentIDs(string ids)
- {
- segmentIDs.Clear();
-
- string idNum = "";
- string[] sIds = ids.Split(',');
- foreach (string id in sIds)
- {
- idNum = id.Trim();
- if (idNum.Length > 0)
- if (!segmentIDs.Contains(idNum))
- segmentIDs.Add(idNum);
- }
- }
- }
-}
diff --git a/SDLXLIFFSplitMerge/Lib/Warning.cs b/SDLXLIFFSplitMerge/Lib/Warning.cs
deleted file mode 100644
index 6fe999e6fb..0000000000
--- a/SDLXLIFFSplitMerge/Lib/Warning.cs
+++ /dev/null
@@ -1,49 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-namespace Sdl.Utilities.SplitSDLXLIFF.Lib
-{
- public class Warning : IComparable
- {
- public enum WarningType { NotFound, WrongSplitLocation };
-
- public string ElementID
- {
- get;
- set;
- }
-
- public WarningType Type
- {
- get;
- set;
- }
-
- public Warning(string elementID, WarningType type)
- {
- ElementID = elementID;
- Type = type;
- }
-
- public string GetMessage()
- {
- switch (Type)
- {
- case WarningType.NotFound:
- return string.Format(Properties.StringResource.wrnSegNotFound, ElementID);
- case WarningType.WrongSplitLocation:
- return string.Format(Properties.StringResource.wrnSegWrongSplit, ElementID);
- default:
- return "";
- }
- }
-
- public int CompareTo(object obj)
- {
- Warning objCompare = obj as Warning;
- return string.Compare(ElementID, objCompare.ElementID);
- }
- }
-}
diff --git a/SDLXLIFFSplitMerge/Lib/XMLParser/Feeder/IStringFeeder.cs b/SDLXLIFFSplitMerge/Lib/XMLParser/Feeder/IStringFeeder.cs
deleted file mode 100644
index 417a9d3188..0000000000
--- a/SDLXLIFFSplitMerge/Lib/XMLParser/Feeder/IStringFeeder.cs
+++ /dev/null
@@ -1,41 +0,0 @@
-//
-// Copyright (c) 2010 All Right Reserved
-//
-// Oleksandr Tkachenko
-// otkachenko@sdl.com
-// 2010-06-10
-// IStringFeeder
-
-namespace Sdl.Utilities.SplitSDLXLIFF.Lib
-{
- using System;
-
- ///
- /// Interface for class that suplies TagParser with strings
- ///
- public interface IStringFeeder : IDisposable
- {
- ///
- /// Initialize class
- ///
- void Initialize();
-
- ///
- /// Provides string for parsing
- ///
- /// new string for parsing
- string FeedString();
-
- ///
- /// Indicates whether string cannot be supplied
- ///
- /// True if string cannot be supplied
- bool EOF();
-
- ///
- /// Progress of processing source string
- ///
- /// Current progress
- double Progress();
- }
-}
diff --git a/SDLXLIFFSplitMerge/Lib/XMLParser/Feeder/StreamFeeder.cs b/SDLXLIFFSplitMerge/Lib/XMLParser/Feeder/StreamFeeder.cs
deleted file mode 100644
index a40ec272e6..0000000000
--- a/SDLXLIFFSplitMerge/Lib/XMLParser/Feeder/StreamFeeder.cs
+++ /dev/null
@@ -1,161 +0,0 @@
-//
-// Copyright (c) 2010 All Right Reserved
-//
-// Oleksandr Tkachenko
-// otkachenko@sdl.com
-// 2010-06-10
-// StreamFeeder
-
-namespace Sdl.Utilities.SplitSDLXLIFF.Lib
-{
- using System;
- using System.IO;
-
- ///
- /// On progress delegate
- ///
- /// Represents a value of finishing in percents
- public delegate void OnProgressDelegate(double progress);
-
- ///
- /// Class that suplies TagParser with strings
- ///
- public class StreamFeeder : IStringFeeder
- {
- ///
- /// Path to the file
- ///
- internal readonly string FilePath;
-
- ///
- /// Size of the source
- ///
- private long sourceSize;
-
- ///
- /// Stream reader
- ///
- private StreamReader reader;
-
- ///
- /// End of file
- ///
- private bool eof;
-
- ///
- /// Buffer of chars
- ///
- private char[] buffer;
-
- ///
- /// Initializes a new instance of the StreamFeeder class
- ///
- /// Path to the file
- public StreamFeeder(string filePath)
- {
- this.FilePath = filePath;
- this.eof = false;
- this.BytesToRead = 4096;
- }
-
- ///
- /// On progress event
- ///
- public event OnProgressDelegate OnProgress;
-
- ///
- /// Gets bytest to read
- ///
- public int BytesToRead { get; private set; }
-
- ///
- /// Gets read count
- ///
- public long ReadCount { get; private set; }
-
- ///
- /// Initializing variables
- ///
- public void Initialize()
- {
- this.reader = new StreamReader(this.FilePath);
-
- this.eof = false;
- this.buffer = new char[this.BytesToRead];
-
- this.ReadCount = 0;
-
- FileInfo info = new FileInfo(this.FilePath);
- this.sourceSize = info.Length;
- }
-
- ///
- /// Feeds the string
- ///
- /// String, generates from reader
- public string FeedString()
- {
- if (!this.eof)
- {
- if (!this.reader.EndOfStream)
- {
- for (int j = 0; j < this.BytesToRead; j++)
- {
- this.buffer[j] = '\0';
- }
-
- this.reader.Read(this.buffer, 0, this.BytesToRead); // read small amount of first butes
-
- this.ReadCount += this.BytesToRead;
-
- if (this.OnProgress != null)
- {
- this.OnProgress(this.Progress());
- }
-
- return new string(this.buffer);
- }
- else
- {
- this.eof = true;
- }
- }
-
- return string.Empty;
- }
-
- ///
- /// Returns true if end of file
- ///
- /// True if end of file
- public bool EOF()
- {
- return this.eof;
- }
-
- ///
- /// Dispose the reader
- ///
- public void Dispose()
- {
- this.reader.Close();
- this.reader.Dispose();
- }
-
- ///
- /// Returns progress in percents
- ///
- /// Progress in percents
- public double Progress()
- {
- double progress = Convert.ToDouble(this.ReadCount) / this.sourceSize * 100;
-
- if (progress > 100)
- {
- return 100;
- }
-
- return progress;
- }
- }
-}
diff --git a/SDLXLIFFSplitMerge/Lib/XMLParser/TagDirectory.cs b/SDLXLIFFSplitMerge/Lib/XMLParser/TagDirectory.cs
deleted file mode 100644
index d102274b43..0000000000
--- a/SDLXLIFFSplitMerge/Lib/XMLParser/TagDirectory.cs
+++ /dev/null
@@ -1,763 +0,0 @@
-//
-// Copyright (c) 2010 All Right Reserved
-//
-// Oleksandr Tkachenko
-// otkachenko@sdl.com
-// 2010-06-10
-// TagDirectory
-
-namespace Sdl.Utilities.SplitSDLXLIFF.Lib
-{
- using System;
- using System.Collections.Generic;
- using System.Linq;
-
- ///
- /// Enumeration of tags
- ///
- public enum Tags : int
- {
- ///
- /// Represents missed tag
- ///
- None,
-
- ///
- /// Represents unknown tag
- ///
- Unknown,
-
- ///
- /// Represents starting of the xliff tag
- ///
- XliffStart,
-
- ///
- /// Represents ending of the xliff tag
- ///
- XliffEnd,
-
- ///
- /// Represents starting of the DocInfo tag
- ///
- DocInfoStart,
-
- ///
- /// Represents ending of the DocInfo tag
- ///
- DocInfoEnd,
-
- ///
- /// Represents starting of the header tag
- ///
- HeaderStart,
-
- ///
- /// Represents ending of the header tag
- ///
- HeaderEnd,
-
- ///
- /// Represents starting of the reference tag
- ///
- ReferenceStart,
-
- ///
- /// Represents ending of the reference tag
- ///
- ReferenceEnd,
-
- ///
- /// Represents starting of the body tag
- ///
- BodyStart,
-
- ///
- /// Represents ending of the body tag
- ///
- BodyEnd,
-
- ///
- /// Represents starting of the file tag
- ///
- FileStart,
-
- ///
- /// Represents ending of the file tag
- ///
- FileEnd,
-
- ///
- /// Represents starting of the group tag
- ///
- GroupStart,
-
- ///
- /// Represents ending of the group tag
- ///
- GroupEnd,
-
- ///
- /// Represents starting of the transunit tag
- ///
- TransUnitStart,
-
- ///
- /// Represents ending of the transunit tag
- ///
- TransUnitEnd,
-
- ///
- /// Represents starting of the transunits tag
- ///
- TransUnitsStart,
-
- ///
- /// Represents ending of the transunits tag
- ///
- TransUnitsEnd,
-
- ///
- /// Represents starting of the mrk tag
- ///
- MrkStart,
-
- ///
- /// Represents ending of the mrk tag
- ///
- MrkEnd,
-
- ///
- /// Represents starting of the segment tag
- ///
- SegStart,
-
- ///
- /// Represents ending of the segment tag
- ///
- SegEnd,
-
- ///
- /// Represents starting of the segdefs tag
- ///
- SegDefsStart,
-
- ///
- /// Represents ending of the segdefs tag
- ///
- SegDefsEnd,
-
- ///
- /// Represents starting of the seg-source tag
- ///
- SegSourceStart,
-
- ///
- /// Represents ending of the seg-source tag
- ///
- SegSourceEnd,
-
- ///
- /// Represents starting of the comment tag
- ///
- CmtDefStart,
-
- ///
- /// Represents ending of the comment tag
- ///
- CmtDefEnd,
-
- ///
- /// Represents starting of the comment tag
- ///
- CmtsStart,
-
- ///
- /// Represents ending of the comment tag
- ///
- CmtsEnd,
-
- ///
- /// Represents starting of the comment tag
- ///
- FileCmtStart,
-
- ///
- /// Represents ending of the comment tag
- ///
- FileCmtEnd,
-
- ///
- /// Represents starting of the tag defs tag
- ///
- TagDefsStart,
-
- ///
- /// Represents ending of the tag defs tag
- ///
- TagDefsEnd,
-
- ///
- /// Represents starting of the tag tag
- ///
- TagStart,
-
- ///
- /// Represents ending of the tag tag
- ///
- TagEnd,
-
- ///
- /// Represents starting of the x (reference to tag) tag
- ///
- TagSubStart,
-
- ///
- /// Represents ending of the x (reference to tag) tag
- ///
- TagSubEnd,
-
- ///
- /// Represents starting of the x (reference to tag) tag
- ///
- XStart,
-
- ///
- /// Represents ending of the x (reference to tag) tag
- ///
- XEnd,
-
- ///
- /// Represents starting of the fmt-defs tag
- ///
- FmtDefsStart,
-
- ///
- /// Represents ending of the fmt-defs tag
- ///
- FmtDefsEnd,
-
- ///
- /// Represents starting of the fmt-def tag
- ///
- FmtDefStart,
-
- ///
- /// Represents ending of the fmt-def tag
- ///
- FmtDefEnd,
-
- ///
- /// Represents starting of the fmt tag
- ///
- FmtStart,
-
- ///
- /// Represents ending of the fmt tag
- ///
- FmtEnd,
-
- ///
- /// Represents starting of the fmt tag
- ///
- WordsStart,
-
- ///
- /// Represents ending of the fmt tag
- ///
- WordsEnd
-}
-
- ///
- /// Any new tags should be described in this class to be proccessed by parser
- ///
- public static class TagDirectory
- {
- #region Const format strings
-
- ///
- /// Odt constant
- ///
- public const string None = "none";
-
- ///
- /// Odt constant
- ///
- public const string Unknown = "unknown";
-
- ///
- /// Odt constant
- ///
- public const string XliffStart = "
- /// Odt constant
- ///
- public const string XliffEnd = "";
-
- ///
- /// Odt constant
- ///
- public const string DocInfoStart = "
- /// Odt constant
- ///
- public const string DocInfoEnd = "";
-
- ///
- /// Odt constant
- ///
- public const string HeaderStart = "
- /// Odt constant
- ///
- public const string HeaderEnd = "";
-
- ///
- /// Odt constant
- ///
- public const string ReferenceStart = "
- /// Odt constant
- ///
- public const string ReferenceEnd = "";
-
- ///
- /// Odt constant
- ///
- public const string BodyStart = "
- /// Odt constant
- ///
- public const string BodyEnd = "";
-
- ///
- /// Odt constant
- ///
- public const string FileStart = "
- /// Odt constant
- ///
- public const string FileEnd = "";
-
- ///
- /// Odt constant
- ///
- public const string GroupStart = "
- /// Odt constant
- ///
- public const string GroupEnd = "";
-
- ///
- /// Odt constant
- ///
- public const string TransUnitStart = "
- /// Odt constant
- ///
- public const string TransUnitEnd = "";
-
- ///
- /// Odt constant
- ///
- public const string TransUnitsStart = "
- /// Odt constant
- ///
- public const string TransUnitsEnd = "";
-
- ///
- /// Odt constant
- ///
- public const string MrkStart = "
- /// Odt constant
- ///
- public const string MrkEnd = "";
-
- ///
- /// Odt constant
- ///
- public const string SegStart = "
- /// Odt constant
- ///
- public const string SegEnd = "";
-
- ///
- /// Odt constant
- ///
- public const string SegDefsStart = "
- /// Odt constant
- ///
- public const string SegDefsEnd = "";
-
- ///
- /// Odt constant
- ///
- public const string SegSourceStart = "
- /// Odt constant
- ///
- public const string SegSourceEnd = "";
-
- ///
- /// Odt constant
- ///
- public const string CommentStart = "
- /// Odt constant
- ///
- public const string CommentEnd = "";
-
- ///
- /// Odt constant
- ///
- public const string CommentsStart = "
- /// Odt constant
- ///
- public const string CommentsEnd = "";
-
- ///
- /// Odt constant
- ///
- public const string CmtDefStart = "
- /// Odt constant
- ///
- public const string CmtDefEnd = "";
-
- ///
- /// Odt constant
- ///
- public const string CmtsStart = "
- /// Odt constant
- ///
- public const string CmtsEnd = "";
-
- ///
- /// Odt constant
- ///
- public const string FileCmtStart = "
- /// Odt constant
- ///
- public const string FileCmtEnd = "";
-
- ///
- /// Odt constant
- ///
- public const string TagDefsStart = "
- /// Odt constant
- ///
- public const string TagDefsEnd = "";
-
- ///
- /// Odt constant
- ///
- public const string TagStart = "
- /// Odt constant
- ///
- public const string TagEnd = "";
-
- ///
- /// Odt constant
- ///
- public const string TagSubStart = "
- /// Odt constant
- ///
- public const string TagSubEnd = "";
-
- ///
- /// Odt constant
- ///
- public const string XStart = "
- /// Odt constant
- ///
- public const string XEnd = "";
-
- ///
- /// Odt constant
- ///
- public const string FmtDefsStart = "
- /// Odt constant
- ///
- public const string FmtDefsEnd = "";
-
- ///
- /// Odt constant
- ///
- public const string FmtDefStart = "
- /// Odt constant
- ///
- public const string FmtDefEnd = "";
-
- ///
- /// Odt constant
- ///
- public const string FmtStart = "
- /// Odt constant
- ///
- public const string FmtEnd = "";
-
- ///
- /// Odt constant
- ///
- public const string WordsStart = "
- /// Odt constant
- ///
- public const string WordsEnd = "";
-
- #region My Attributes
- ///
- /// Odt constant
- ///
- public const string AttrID = "id";
-
- ///
- /// Odt constant
- ///
- public const string AttrXID = "xid";
-
- ///
- /// Odt constant
- ///
- public const string AttrSourceLang = "source-language";
-
- ///
- /// Odt constant
- ///
- public const string AttrSegConf = "conf";
-
- ///
- /// Odt constant
- ///
- public const string AttrSegPerc= "percent";
-
- ///
- /// Odt constant
- ///
- public const string AttrSegMID = "mid";
-
- ///
- /// Odt constant
- ///
- public const string AttrCommMID = "sdl:cid";
-
- ///
- /// Odt constant
- ///
- public const string AttrSegMType = "mtype";
-
- ///
- /// Odt constant
- ///
- public const string AttrSegMTypeValue = "seg";
-
- ///
- /// Odt constant
- ///
- public const string AttrSegMTypeCommValue = "x-sdl-comment";
-
- ///
- /// Odt constant
- ///
- public const string AttrSegLocked = "locked";
-
- ///
- /// Odt constant
- ///
- public const string AttrSegLockedValue = "true";
-
- ///
- /// Odt constant
- ///
- public const string AttrUnitTranslate = "translate";
-
- ///
- /// Odt constant
- ///
- public const string AttrUnitTranslateValue = "no";
-
- ///
- /// Odt constant
- ///
- public const string AttrFileName = "name";
-
- ///
- /// Odt constant
- ///
- public const string AttrUser = "user";
-
- ///
- /// Odt constant
- ///
- public const string AttrDate = "date";
-
- ///
- /// Odt constant
- ///
- public const string AttrXmlNs = "xmlns";
-
- ///
- /// Odt constant
- ///
- public const string AttrXmlNsValue = "http://sdl.com/FileTypes/SdlXliff/1.0";
- #endregion
-
-
-
- #endregion
-
- ///
- /// Full Dictionary
- ///
- public static readonly Dictionary FullDictionary;
-
- ///
- /// HyperLink Dictionary
- ///
- public static readonly Dictionary HyperlinkDictionary;
-
- ///
- /// Initializes static members of the TagDirectory class
- ///
- static TagDirectory()
- {
- InitilizeTagProperties();
-
- int i = 0;
- FullDictionary = TagProperties.ToDictionary(e => e.Name, e => (Tags)i++);
- }
-
- ///
- /// Gets or sets properties of the tag
- ///
- internal static TagProperties[] TagProperties { get; set; }
-
- #region Tags properties
-
- ///
- /// Returns name of the tag
- ///
- /// Tag argument
- /// Name of the tag
- public static string Tag(Tags tag)
- {
- return TagProperties[(int)tag].Name;
- }
-
- ///
- /// Returns tag type
- ///
- /// Tag argument
- /// Type of the tag
- public static TagType Type(Tags tag)
- {
- return TagProperties[(int)tag].TagType;
- }
-
- ///
- /// Initializing tag properties
- ///
- private static void InitilizeTagProperties()
- {
- TagProperties = new TagProperties[Enum.GetNames(typeof(Tags)).Length];
-
- TagProperties[(int)Tags.None] = new TagProperties(None, TagType.StructureTag);
- TagProperties[(int)Tags.Unknown] = new TagProperties(Unknown, TagType.StructureTag);
- TagProperties[(int)Tags.XliffStart] = new TagProperties(XliffStart, TagType.StructureTag);
- TagProperties[(int)Tags.XliffEnd] = new TagProperties(XliffEnd, TagType.StructureTag);
- TagProperties[(int)Tags.DocInfoStart] = new TagProperties(DocInfoStart, TagType.StructureTag);
- TagProperties[(int)Tags.DocInfoEnd] = new TagProperties(DocInfoEnd, TagType.StructureTag);
- TagProperties[(int)Tags.HeaderStart] = new TagProperties(HeaderStart, TagType.StructureTag);
- TagProperties[(int)Tags.HeaderEnd] = new TagProperties(HeaderEnd, TagType.StructureTag);
- TagProperties[(int)Tags.ReferenceStart] = new TagProperties(ReferenceStart, TagType.StructureTag);
- TagProperties[(int)Tags.ReferenceEnd] = new TagProperties(ReferenceEnd, TagType.StructureTag);
- TagProperties[(int)Tags.BodyStart] = new TagProperties(BodyStart, TagType.StructureTag);
- TagProperties[(int)Tags.BodyEnd] = new TagProperties(BodyEnd, TagType.StructureTag);
- TagProperties[(int)Tags.FileStart] = new TagProperties(FileStart, TagType.StructureTag);
- TagProperties[(int)Tags.FileEnd] = new TagProperties(FileEnd, TagType.StructureTag);
-
- TagProperties[(int)Tags.GroupStart] = new TagProperties(GroupStart, TagType.StructureTag);
- TagProperties[(int)Tags.GroupEnd] = new TagProperties(GroupEnd, TagType.StructureTag);
- TagProperties[(int)Tags.TransUnitStart] = new TagProperties(TransUnitStart, TagType.StructureTag);
- TagProperties[(int)Tags.TransUnitEnd] = new TagProperties(TransUnitEnd, TagType.StructureTag);
- TagProperties[(int)Tags.TransUnitsStart] = new TagProperties(TransUnitsStart, TagType.StructureTag);
- TagProperties[(int)Tags.TransUnitsEnd] = new TagProperties(TransUnitsEnd, TagType.StructureTag);
- TagProperties[(int)Tags.MrkStart] = new TagProperties(MrkStart, TagType.StructureTag);
- TagProperties[(int)Tags.MrkEnd] = new TagProperties(MrkEnd, TagType.StructureTag);
-
- TagProperties[(int)Tags.SegStart] = new TagProperties(SegStart, TagType.StructureTag);
- TagProperties[(int)Tags.SegEnd] = new TagProperties(SegEnd, TagType.StructureTag);
- TagProperties[(int)Tags.SegDefsStart] = new TagProperties(SegDefsStart, TagType.StructureTag);
- TagProperties[(int)Tags.SegDefsEnd] = new TagProperties(SegDefsEnd, TagType.StructureTag);
- TagProperties[(int)Tags.SegSourceStart] = new TagProperties(SegSourceStart, TagType.StructureTag);
- TagProperties[(int)Tags.SegSourceEnd] = new TagProperties(SegSourceEnd, TagType.StructureTag);
-
- TagProperties[(int)Tags.CmtDefStart] = new TagProperties(CmtDefStart, TagType.StructureTag);
- TagProperties[(int)Tags.CmtDefEnd] = new TagProperties(CmtDefEnd, TagType.StructureTag);
- TagProperties[(int)Tags.CmtsStart] = new TagProperties(CmtsStart, TagType.StructureTag);
- TagProperties[(int)Tags.CmtsEnd] = new TagProperties(CmtsEnd, TagType.StructureTag);
- TagProperties[(int)Tags.FileCmtStart] = new TagProperties(FileCmtStart, TagType.StructureTag);
- TagProperties[(int)Tags.FileCmtEnd] = new TagProperties(FileCmtEnd, TagType.StructureTag);
-
- TagProperties[(int)Tags.TagDefsStart] = new TagProperties(TagDefsStart, TagType.StructureTag);
- TagProperties[(int)Tags.TagDefsEnd] = new TagProperties(TagDefsEnd, TagType.StructureTag);
- TagProperties[(int)Tags.TagStart] = new TagProperties(TagStart, TagType.StructureTag);
- TagProperties[(int)Tags.TagEnd] = new TagProperties(TagEnd, TagType.StructureTag);
- TagProperties[(int)Tags.TagSubStart] = new TagProperties(TagSubStart, TagType.StructureTag);
- TagProperties[(int)Tags.TagSubEnd] = new TagProperties(TagSubEnd, TagType.StructureTag);
- TagProperties[(int)Tags.XStart] = new TagProperties(XStart, TagType.StructureTag);
- TagProperties[(int)Tags.XEnd] = new TagProperties(XEnd, TagType.StructureTag);
-
- TagProperties[(int)Tags.FmtDefsStart] = new TagProperties(FmtDefsStart, TagType.StructureTag);
- TagProperties[(int)Tags.FmtDefsEnd] = new TagProperties(FmtDefsEnd, TagType.StructureTag);
- TagProperties[(int)Tags.FmtDefStart] = new TagProperties(FmtDefStart, TagType.StructureTag);
- TagProperties[(int)Tags.FmtDefEnd] = new TagProperties(FmtDefEnd, TagType.StructureTag);
- TagProperties[(int)Tags.FmtStart] = new TagProperties(FmtStart, TagType.StructureTag);
- TagProperties[(int)Tags.FmtEnd] = new TagProperties(FmtEnd, TagType.StructureTag);
-
- TagProperties[(int)Tags.WordsStart] = new TagProperties(WordsStart, TagType.StructureTag);
- TagProperties[(int)Tags.WordsEnd] = new TagProperties(WordsEnd, TagType.StructureTag);
- }
- #endregion
- }
-}
diff --git a/SDLXLIFFSplitMerge/Lib/XMLParser/TagInfo.cs b/SDLXLIFFSplitMerge/Lib/XMLParser/TagInfo.cs
deleted file mode 100644
index 656d6fdfc8..0000000000
--- a/SDLXLIFFSplitMerge/Lib/XMLParser/TagInfo.cs
+++ /dev/null
@@ -1,68 +0,0 @@
-//
-// Copyright (c) 2010 All Right Reserved
-//
-// Oleksandr Tkachenko
-// otkachenko@sdl.com
-// 2010-06-10
-// TagInfo
-
-namespace Sdl.Utilities.SplitSDLXLIFF.Lib
-{
- ///
- /// Represents information about the tag
- ///
- public class TagInfo
- {
- ///
- /// Initializes a new instance of the TagInfo class
- ///
- public TagInfo()
- {
- this.IndexStart = -1;
- this.IndexEnd = -1;
- this.TagID = Tags.None;
- this.Name = string.Empty;
- this.Text = string.Empty;
- }
-
- ///
- /// Gets or sets index of the start
- ///
- public int IndexStart { get; set; }
-
- ///
- /// Gets or sets index of the end
- ///
- public int IndexEnd { get; set; }
-
- ///
- /// Gets or sets the id of the tag
- ///
- public Tags TagID { get; set; }
-
- ///
- /// Gets or sets name of the tag
- ///
- public string Name { get; set; }
-
- ///
- /// Gets or sets tag's text
- ///
- public string Text { get; set; }
-
- ///
- /// Copying tag info
- ///
- /// Copy of tag info
- public TagInfo Copy()
- {
- TagInfo copy = new TagInfo();
- copy.IndexStart = this.IndexStart;
- copy.IndexEnd = this.IndexEnd;
- copy.TagID = this.TagID;
- copy.Name = this.Name;
- copy.Text = this.Text;
- return copy;
- }
- }
-}
diff --git a/SDLXLIFFSplitMerge/Lib/XMLParser/TagParser.cs b/SDLXLIFFSplitMerge/Lib/XMLParser/TagParser.cs
deleted file mode 100644
index 19383be4a1..0000000000
--- a/SDLXLIFFSplitMerge/Lib/XMLParser/TagParser.cs
+++ /dev/null
@@ -1,674 +0,0 @@
-//
-// Copyright (c) 2010 All Right Reserved
-//
-// Oleksandr Tkachenko
-// otkachenko@sdl.com
-// 2010-06-09
-// TagParser
-
-namespace Sdl.Utilities.SplitSDLXLIFF.Lib
-{
- using System;
- using System.Collections.Generic;
-
- ///
- /// Class is parses tags from string.
- /// String with tags is provided by StringFeeder.
- /// Parsed tags with differed properties are returned.
- ///
- public sealed class TagParser : IDisposable
- {
- #region Fields
-
- ///
- /// Current string that is processed
- ///
- private string text;
-
- ///
- /// Current position in text
- ///
- private int currentIndex;
-
- ///
- /// Parsed tag or text as string
- ///
- private string parsedText;
-
- ///
- /// Tag that currently parsed from string.
- ///
- private TagInfo currentTag;
-
- ///
- /// Indicates whether we have more to parse.
- ///
- private bool canFeed;
-
- ///
- /// Provides current class with string to be parsed
- ///
- private IStringFeeder feeder;
-
- ///
- /// Threshold value.
- /// When lentgh of string for parsing is bigger we will try to reduce length in twice.
- ///
- private int sizeToShrink = 4096;
-
- private int bodyDepth;
-
- #endregion
-
- #region Constructors
- ///
- /// Initializes a new instance of the TagParser class
- ///
- /// text to parse
- /// Indicates whether we are parsing contnent.xml
- public TagParser(string text)
- {
- this.text = text;
-
- this.Init();
-
- this.canFeed = false;
- }
-
- ///
- /// Initializes a new instance of the TagParser class
- ///
- /// provides parser with string to parse
- /// Indicates whether we are parsing contnent.xml
- public TagParser(IStringFeeder feeder)
- {
- this.text = String.Empty;
-
- this.Init();
-
- this.feeder = feeder;
- this.feeder.Initialize();
- this.FeedString();
- }
- #endregion
-
- #region Properties
-
- public bool IsInDocInfo { get; private set; }
- public bool IsInHeader { get; private set; }
- public bool IsInReference { get; private set; }
- public bool IsInBody { get; private set; }
- public bool IsInTransUnit { get; private set; }
- public bool IsInTransUnits { get; private set; }
- public bool IsInWords { get; private set; }
- public bool IsInTransUnitClosed { get; private set; }
- public bool IsInMrkText { get; private set; }
- public bool IsInMrkComm { get; private set; }
- public bool IsInSegSource { get; private set; }
- public bool IsInSeg { get; private set; }
- public bool IsInCmtDef { get; private set; }
- public bool IsInCmts { get; private set; }
- public bool IsInFileCmtClosed { get; private set; }
- public bool IsInTagDefs { get; private set; }
- public bool IsInTag { get; private set; }
- public bool IsInTagSub { get; private set; }
- public bool IsInXClosed { get; private set; }
- public bool IsInFmtDefs { get; private set; }
- public bool IsInFmtDef { get; private set; }
- public bool IsInFmtClosed { get; private set; }
-
- // public int MrkMIDAttr { get; private set; } // 02.24.2011 - fix
- public string MrkMIDAttr { get; private set; }
- public string MrkCommCIDAttr { get; private set; }
- public string SourceLangAttr { get; private set; }
- public string TransUnitIDAttr { get; private set; }
- public string FileNameAttr { get; private set; }
- public string CmtDefIDAttr { get; private set; }
- public string FileCmtIDAttr { get; private set; }
- public string TagIDAttr { get; private set; }
- public string TagSubXIDAttr { get; private set; }
- public string XTagIDAttr { get; private set; }
- public string XTagXIDAttr { get; private set; }
- public string FmtDefIDAttr { get; private set; }
- public string FmtIDAttr { get; private set; }
-
- public bool isUnitTranslatable { get; private set; }
-
- public bool isBodyParent
- {
- get { return this.bodyDepth == 1; }
- }
-
- ///
- /// Gets parsedText
- ///
- public string ParsedText
- {
- get
- {
- return this.parsedText;
- }
- }
-
- ///
- /// Gets Id of current tag
- ///
- public Tags TagID
- {
- get
- {
- return this.currentTag.TagID;
- }
- }
-
- ///
- /// Gets a value indicating whether we found tag. Otherwies we have text.
- ///
- public bool IsTag { get; private set; }
-
- ///
- /// Gets or sets a dictionary with know tags
- ///
- public Dictionary TagDictionary { get; set; }
-
-
- ///
- /// Gets a value indicating type of parsed information
- ///
- public TagType ResultType
- {
- get
- {
- if (this.IsTag)
- {
- return TagDirectory.Type(this.currentTag.TagID);
- }
- else
- {
- return TagType.Text;
- }
- }
- }
-
-
- ///
- /// Gets a value indicating whether text can appears.
- ///
- private bool IsInContent
- {
- get
- {
- //return this.IsInSegSource && this.IsInMrkText || this.IsInDocInfo || this.IsInHeader;
- return this.IsInBody || this.IsInDocInfo || this.IsInHeader || this.IsInTransUnits || this.IsInWords;
- }
- }
-
-
- #endregion
-
- #region Public methods
-
-
- ///
- /// Parse next tag
- ///
- /// a value indicating whether the end of parsed document is reached
- public bool Next()
- {
- bool success;
-
- ////do
- ////{
- success = false;
-
- this.BeforeParsing();
-
- this.parsedText = String.Empty;
- this.IsTag = false;
-
- while (!success && this.currentIndex < this.text.Length)
- {
- int prevIndex = this.currentIndex;
-
- this.currentTag = this.FindTag();
-
- if (this.IsInContent)
- {
- if (this.currentTag.IndexStart > prevIndex)
- {
- // if it is some text between previous tag and the next
- // return this text
- this.currentIndex = this.currentTag.IndexStart;
-
- this.parsedText = this.text.Substring(prevIndex, this.currentIndex - prevIndex);
-
- this.currentTag.Text = this.parsedText;
-
- this.currentTag.TagID = Tags.None;
-
- success = true;
- }
- else
- {
- this.ConfirmTagFound(ref success);
- }
- }
- else
- {
- if (this.currentTag.TagID != Tags.None)
- {
- this.ConfirmTagFound(ref success);
- }
- else
- {
- this.currentIndex = this.text.Length;
- }
- }
-
- if (this.currentIndex >= this.text.Length)
- {
- this.FeedString();
- }
- }
-
- if (this.text.Length > this.sizeToShrink && this.currentIndex > this.sizeToShrink / 2)
- {
- this.text = this.text.Substring(this.currentIndex);
- this.currentIndex = 0;
- }
-
- this.AfterParsing();
- ////}
- ////while ( IsInsideDeleted && success); // This is to avoid deleted framgent
-
- return success;
- }
-
- ///
- /// Copies current tag
- ///
- /// Returns copy of current tag
- public TagInfo CopyCurrentTag()
- {
- return this.currentTag.Copy();
- }
-
- ///
- /// Progress of the parser
- ///
- /// returns progress
- public double Progress()
- {
- if (this.feeder != null)
- {
- return this.feeder.Progress();
- }
- else
- {
- return 0;
- }
- }
-
- public void Dispose()
- {
- this.feeder.Dispose();
- }
-
- #endregion
-
- #region Private methods
- ///
- /// Initialize all variables
- ///
- private void Init()
- {
- this.currentIndex = 0;
- this.currentTag = new TagInfo();
-
- this.IsTag = false;
-
- this.IsInMrkText = false;
- this.IsInMrkComm = false;
- this.IsInSegSource = false;
- this.IsInSeg = false;
- this.IsInBody = false;
- this.IsInTransUnit = false;
- this.IsInTransUnits = false;
- this.IsInWords = false;
- this.IsInTransUnitClosed = false;
- this.IsInDocInfo = false;
- this.IsInHeader = false;
- this.IsInReference = false;
- this.IsInCmtDef = false;
- this.IsInCmts = false;
- this.IsInFileCmtClosed = false;
- this.IsInTagDefs = false;
- this.IsInTag = false;
- this.IsInTagSub = false;
- this.IsInXClosed = false;
- this.IsInFmtDefs = false;
- this.IsInFmtDef = false;
- this.IsInFmtClosed = false;
- this.bodyDepth = 0;
-
- this.MrkMIDAttr = "";
- this.MrkCommCIDAttr = "";
- this.SourceLangAttr = "";
- this.TransUnitIDAttr = "";
- this.FileNameAttr = "";
- this.CmtDefIDAttr = "";
- this.FileCmtIDAttr = "";
- this.TagIDAttr = "";
- this.TagSubXIDAttr = "";
- this.XTagIDAttr = "";
- this.XTagXIDAttr = "";
- this.isUnitTranslatable = true;
-
- this.TagDictionary = TagDirectory.FullDictionary;
- }
-
- ///
- /// Search next tag
- ///
- /// next tag with following spaces
- private TagInfo FindTag()
- {
- TagInfo tag = this.FindNext(this.currentIndex);
-
-
- return tag;
- }
-
- ///
- /// Search next tag
- ///
- /// start position for search
- /// returns next tag
- private TagInfo FindNext(int searchIndex)
- {
- TagInfo tag = new TagInfo();
-
- do
- {
- tag.IndexStart = this.text.IndexOf("<", searchIndex);
-
- if (tag.IndexStart == -1)
- {
- this.FeedString();
- }
- }
- while (tag.IndexStart == -1 && this.canFeed);
-
- if (tag.IndexStart != -1)
- {
- do
- {
- tag.IndexEnd = this.text.IndexOf(">", tag.IndexStart);
-
- if (tag.IndexEnd == -1)
- {
- this.FeedString();
- }
- }
- while (tag.IndexEnd == -1 && this.canFeed);
-
- tag.Text = this.text.Cut(tag.IndexStart, tag.IndexEnd);
-
- string tagName = tag.Text.NodeName();
-
- Tags tagCode = Tags.None;
-
- if (this.TagDictionary.TryGetValue(tagName, out tagCode))
- {
- tag.TagID = tagCode;
- tag.Name = tagName;
- }
-
- if (tag.TagID == Tags.None)
- {
- tag.TagID = Tags.Unknown;
- tag.Name = tag.Text; // "unknown";
- }
- }
-
- return tag;
- }
-
- ///
- /// Sets all variable accroding to found tag
- ///
- /// cofirms that tag is found
- private void ConfirmTagFound(ref bool success)
- {
- success = true;
- this.IsTag = true;
- this.parsedText = this.currentTag.Text;
- this.currentIndex = this.currentTag.IndexEnd + 1;
- }
-
- ///
- /// Gets new portion of information from feeder
- ///
- private void FeedString()
- {
- if (this.feeder != null)
- {
- this.text = string.Format("{0}{1}", this.text, this.feeder.FeedString());
- //this.text = this.text + this.feeder.FeedString();
- this.canFeed = !this.feeder.EOF();
-
- if (!this.canFeed)
- {
- this.feeder.Dispose();
- }
- }
- else
- {
- this.canFeed = false;
- }
- }
-
- ///
- /// Runned befor parsing of the tag
- ///
- private void BeforeParsing()
- {
- if (this.IsTag)
- {
- if (this.currentTag.TagID == Tags.MrkEnd)
- {
- // it is temp solution !!!
- this.IsInMrkText = false;
- this.IsInMrkComm = false;
- this.MrkMIDAttr = "";
- this.MrkCommCIDAttr = "";
- }
- if (this.currentTag.TagID == Tags.TransUnitEnd)
- this.isUnitTranslatable = true;
- if (this.currentTag.TagID == Tags.SegSourceEnd)
- this.IsInSegSource = false;
- if (this.currentTag.TagID == Tags.SegEnd)
- this.IsInSeg = false;
- if (this.currentTag.TagID == Tags.BodyEnd)
- this.IsInBody = false;
- if (this.currentTag.TagID == Tags.TransUnitEnd)
- {
- this.IsInTransUnit = false;
- this.TransUnitIDAttr = "";
- }
- if (this.currentTag.TagID == Tags.TransUnitsEnd)
- this.IsInTransUnits = false;
- if (this.currentTag.TagID == Tags.WordsEnd)
- this.IsInWords = false;
- if (this.currentTag.TagID == Tags.DocInfoEnd)
- this.IsInDocInfo = false;
- if (this.currentTag.TagID == Tags.HeaderEnd)
- this.IsInHeader = false;
- if (this.currentTag.TagID == Tags.ReferenceEnd)
- this.IsInReference = false;
- if (this.currentTag.TagID == Tags.CmtsEnd)
- this.IsInCmts = false;
- if (this.currentTag.TagID == Tags.TagDefsEnd)
- this.IsInTagDefs = false;
- if (this.currentTag.TagID == Tags.TagEnd)
- {
- this.IsInTag = false;
- this.TagIDAttr = "";
- }
- if (this.currentTag.TagID == Tags.TagSubEnd)
- {
- this.IsInTagSub = false;
- this.TagSubXIDAttr = "";
- }
- if (this.currentTag.TagID == Tags.FmtDefsEnd)
- this.IsInFmtDefs = false;
- if (this.currentTag.TagID == Tags.FmtDefEnd)
- {
- this.IsInFmtDef = false;
- this.FmtDefIDAttr = "";
- }
- if (this.currentTag.TagID == Tags.CmtDefEnd)
- {
- this.IsInCmtDef = false;
- this.CmtDefIDAttr = "";
- }
- if (this.currentTag.TagID == Tags.FileEnd)
- {
- this.SourceLangAttr = "";
- this.FileNameAttr = "";
- }
- }
-
- if (!(this.currentIndex < this.text.Length))
- {
- this.FeedString();
- }
- }
-
- ///
- /// Is runned after new tag is reached
- ///
- private void AfterParsing()
- {
- if (this.IsTag)
- {
- this.IsInTransUnitClosed = false;
- this.IsInFileCmtClosed = false;
- this.IsInXClosed = false;
- this.IsInFmtClosed = false;
-
- if (this.currentTag.TagID == Tags.MrkStart && !this.parsedText.IsClosedTag())
- {
- if (this.ParsedText.AttributeValue(TagDirectory.AttrSegMType) == TagDirectory.AttrSegMTypeValue)
- {
- this.IsInMrkText = true;
- this.MrkMIDAttr = (String.IsNullOrEmpty(this.ParsedText.AttributeValue(TagDirectory.AttrSegMID)) ?
- "" : this.ParsedText.AttributeValue(TagDirectory.AttrSegMID));
- }
- else if (this.ParsedText.AttributeValue(TagDirectory.AttrSegMType) == TagDirectory.AttrSegMTypeCommValue)
- {
- this.IsInMrkComm = true;
- this.MrkCommCIDAttr = (String.IsNullOrEmpty(this.ParsedText.AttributeValue(TagDirectory.AttrCommMID)) ?
- "" : this.ParsedText.AttributeValue(TagDirectory.AttrCommMID));
- }
- }
- if (this.currentTag.TagID == Tags.TransUnitStart && !this.parsedText.IsClosedTag())
- this.isUnitTranslatable = (String.IsNullOrEmpty(this.ParsedText.AttributeValue(TagDirectory.AttrUnitTranslate)) ? true : false);
- if (this.currentTag.TagID == Tags.SegSourceStart && !this.parsedText.IsClosedTag())
- this.IsInSegSource = true;
- if (this.currentTag.TagID == Tags.FileStart && !this.parsedText.IsClosedTag())
- {
- this.SourceLangAttr = (String.IsNullOrEmpty(this.ParsedText.AttributeValue(TagDirectory.AttrSourceLang)) ?
- "" : this.ParsedText.AttributeValue(TagDirectory.AttrSourceLang));
- this.FileNameAttr = (String.IsNullOrEmpty(this.ParsedText.AttributeValue(TagDirectory.AttrFileName)) ?
- "" : this.ParsedText.AttributeValue(TagDirectory.AttrFileName));
- }
- if (this.currentTag.TagID == Tags.ReferenceStart && !this.parsedText.IsClosedTag())
- this.IsInReference = true;
- if (this.currentTag.TagID == Tags.SegStart && !this.parsedText.IsClosedTag())
- this.IsInSeg = true;
- if (this.currentTag.TagID == Tags.CmtsStart && !this.parsedText.IsClosedTag())
- this.IsInCmts = true;
- if (this.currentTag.TagID == Tags.CmtDefStart && !this.parsedText.IsClosedTag())
- {
- this.IsInCmtDef = true;
- this.CmtDefIDAttr = (String.IsNullOrEmpty(this.ParsedText.AttributeValue(TagDirectory.AttrID)) ?
- "" : this.ParsedText.AttributeValue(TagDirectory.AttrID));
- }
- if (this.currentTag.TagID == Tags.TagDefsStart && !this.parsedText.IsClosedTag())
- this.IsInTagDefs = true;
- if (this.currentTag.TagID == Tags.TagStart && !this.parsedText.IsClosedTag())
- {
- this.IsInTag = true;
- this.TagIDAttr = (String.IsNullOrEmpty(this.ParsedText.AttributeValue(TagDirectory.AttrID)) ?
- "" : this.ParsedText.AttributeValue(TagDirectory.AttrID));
- }
- if (this.currentTag.TagID == Tags.TagSubStart && !this.parsedText.IsClosedTag())
- {
- this.IsInTagSub = true;
- this.TagSubXIDAttr = (String.IsNullOrEmpty(this.ParsedText.AttributeValue(TagDirectory.AttrXID)) ?
- "" : this.ParsedText.AttributeValue(TagDirectory.AttrXID));
- }
- if (this.currentTag.TagID == Tags.XStart)
- {
- this.IsInXClosed = true;
- this.XTagIDAttr = (String.IsNullOrEmpty(this.ParsedText.AttributeValue(TagDirectory.AttrID)) ?
- "" : this.ParsedText.AttributeValue(TagDirectory.AttrID));
- this.XTagXIDAttr = (String.IsNullOrEmpty(this.ParsedText.AttributeValue(TagDirectory.AttrXID)) ?
- "" : this.ParsedText.AttributeValue(TagDirectory.AttrXID));
- }
- if (this.currentTag.TagID == Tags.FmtDefsStart && !this.parsedText.IsClosedTag())
- this.IsInFmtDefs = true;
- if (this.currentTag.TagID == Tags.FmtDefStart && !this.parsedText.IsClosedTag())
- {
- this.IsInFmtDef = true;
- this.FmtDefIDAttr = (String.IsNullOrEmpty(this.ParsedText.AttributeValue(TagDirectory.AttrID)) ?
- "" : this.ParsedText.AttributeValue(TagDirectory.AttrID));
- }
- if (this.currentTag.TagID == Tags.FmtStart)
- {
- this.IsInFmtClosed = true;
- this.FmtIDAttr = (String.IsNullOrEmpty(this.ParsedText.AttributeValue(TagDirectory.AttrID)) ?
- "" : this.ParsedText.AttributeValue(TagDirectory.AttrID));
- }
-
-
- if (this.currentTag.TagID == Tags.TransUnitsStart && !this.parsedText.IsClosedTag())
- this.IsInTransUnits = true;
- if (this.currentTag.TagID == Tags.WordsStart && !this.parsedText.IsClosedTag())
- this.IsInWords = true;
- if (this.currentTag.TagID == Tags.TransUnitStart && !this.parsedText.IsClosedTag())
- {
- this.IsInTransUnit = true;
- this.TransUnitIDAttr = this.ParsedText.AttributeValue(TagDirectory.AttrID);
- }
- else if (this.currentTag.TagID == Tags.TransUnitStart)
- {
- this.IsInTransUnitClosed = true;
- this.TransUnitIDAttr = this.ParsedText.AttributeValue(TagDirectory.AttrID);
- }
-
- if (this.currentTag.TagID == Tags.FileCmtStart && this.parsedText.IsClosedTag())
- {
- this.IsInFileCmtClosed = true;
- this.FileCmtIDAttr = this.ParsedText.AttributeValue(TagDirectory.AttrID);
- }
- if (this.currentTag.TagID == Tags.BodyStart && !this.parsedText.IsClosedTag())
- this.IsInBody = true;
- else if (this.currentTag.TagID == Tags.DocInfoStart && !this.parsedText.IsClosedTag())
- this.IsInDocInfo = true;
- else if (this.currentTag.TagID == Tags.HeaderStart && !this.parsedText.IsClosedTag())
- this.IsInHeader = true;
- else if (this.IsInBody && !this.parsedText.IsClosedTag())
- {
- if (this.parsedText.IfCloseTagPart())
- this.bodyDepth--;
- else this.bodyDepth++;
- }
-
- }
- }
-
- #endregion
- }
-}
\ No newline at end of file
diff --git a/SDLXLIFFSplitMerge/Lib/XMLParser/TagProperties.cs b/SDLXLIFFSplitMerge/Lib/XMLParser/TagProperties.cs
deleted file mode 100644
index a9e80098d4..0000000000
--- a/SDLXLIFFSplitMerge/Lib/XMLParser/TagProperties.cs
+++ /dev/null
@@ -1,44 +0,0 @@
-//
-// Copyright (c) 2010 All Right Reserved
-//
-// Oleksandr Tkachenko
-// otkachenko@sdl.com
-// 2010-06-10
-// TagProperties
-
-namespace Sdl.Utilities.SplitSDLXLIFF.Lib
-{
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
-
- ///
- /// Represents the properties of the tag
- ///
- internal class TagProperties
- {
- ///
- /// Initializes a new instance of the TagProperties class
- ///
- /// Name of the tag
- /// Type of the tag
- /// Represents if tag needs treating
- /// Represents if tag needs storing
- public TagProperties(string name, TagType tagType)
- {
- this.Name = name;
- this.TagType = tagType;
- }
-
- ///
- /// Gets or sets type of the tag
- ///
- public TagType TagType { get; set; }
-
- ///
- /// Gets or sets name of the tag
- ///
- public string Name { get; set; }
- }
-}
diff --git a/SDLXLIFFSplitMerge/Lib/XMLParser/TagSegStatus.cs b/SDLXLIFFSplitMerge/Lib/XMLParser/TagSegStatus.cs
deleted file mode 100644
index 5d5bd5b012..0000000000
--- a/SDLXLIFFSplitMerge/Lib/XMLParser/TagSegStatus.cs
+++ /dev/null
@@ -1,100 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-namespace Sdl.Utilities.SplitSDLXLIFF.Lib
-{
- public enum SegStatus
- {
- ///
- /// Represents Seg-Source Segment status
- ///
- Unspecified,
-
- ///
- /// Represents Seg-Source Segment status
- ///
- Draft,
-
- ///
- /// Represents Seg-Source Segment status
- ///
- Translated,
-
- ///
- /// Represents Seg-Source Segment status
- ///
- RejectedTranslation,
-
- ///
- /// Represents Seg-Source Segment status
- ///
- ApprovedTranslation,
-
- ///
- /// Represents Seg-Source Segment status
- ///
- RejectedSignOff,
-
- ///
- /// Represents Seg-Source Segment status
- ///
- ApprovedSignOff,
-
- ///
- /// Represents Locked Segment status
- ///
- Locked
- }
-
- // not needed
- public static class TagSegStatus
- {
- public static SegStatus getTagSegStatus(string status)
- {
- switch (status)
- {
- case "Draft":
- return SegStatus.Draft;
- case "Translated":
- return SegStatus.Translated;
- case "Translation Rejected":
- return SegStatus.RejectedTranslation;
- case "Translation Approved":
- return SegStatus.ApprovedTranslation;
- case "Sign-off Rejected":
- return SegStatus.RejectedSignOff;
- case "Signed Off":
- return SegStatus.ApprovedSignOff;
- case "Locked":
- return SegStatus.Locked;
- default:
- return SegStatus.Unspecified;
- }
- }
-
- public static string getTagSegStatus(SegStatus status)
- {
- switch (status)
- {
- case SegStatus.Draft:
- return "Draft";
- case SegStatus.Translated:
- return "Translated";
- case SegStatus.RejectedTranslation:
- return "Translation Rejected";
- case SegStatus.ApprovedTranslation:
- return "Translation Approved";
- case SegStatus.RejectedSignOff:
- return "Sign-off Rejected";
- case SegStatus.ApprovedSignOff:
- return "Signed Off";
- case SegStatus.Locked:
- return "Locked";
- default:
- return "Not Translated";
- }
- }
- }
-}
diff --git a/SDLXLIFFSplitMerge/Lib/XMLParser/TagType.cs b/SDLXLIFFSplitMerge/Lib/XMLParser/TagType.cs
deleted file mode 100644
index 5f1e24298d..0000000000
--- a/SDLXLIFFSplitMerge/Lib/XMLParser/TagType.cs
+++ /dev/null
@@ -1,51 +0,0 @@
-//
-// Copyright (c) 2010 All Right Reserved
-//
-// Oleksandr Tkachenko
-// otkachenko@sdl.com
-// 2010-06-10
-// TagType
-
-namespace Sdl.Utilities.SplitSDLXLIFF.Lib
-{
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
-
- ///
- /// Types of parser elements
- ///
- public enum TagType
- {
- ///
- /// Represents Text tag type
- ///
- Text,
-
- ///
- /// Represents Inline tag type
- ///
- InLineTag,
-
- ///
- /// Represents Structure tag type
- ///
- StructureTag,
-
- ///
- /// Represents pair tag Starting type
- ///
- TagPairStart,
-
- ///
- /// Represents pair tag Ending type
- ///
- TagPairEnd,
-
- ///
- /// Represents context info tag type
- ///
- ContextInfo
- }
-}
diff --git a/SDLXLIFFSplitMerge/SDLXLIFFSplitMerge.sln b/SDLXLIFFSplitMerge/SDLXLIFFSplitMerge.sln
deleted file mode 100644
index e5204f988a..0000000000
--- a/SDLXLIFFSplitMerge/SDLXLIFFSplitMerge.sln
+++ /dev/null
@@ -1,61 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio Version 17
-VisualStudioVersion = 17.2.32505.173
-MinimumVisualStudioVersion = 10.0.40219.1
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sdl.Utilities.SplitSDLXLIFF", "SplitSDLXLIFF\Sdl.Utilities.SplitSDLXLIFF.csproj", "{620BC9FD-DC2E-4EE5-8C78-A6CA41979B57}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sdl.Utilities.SplitSDLXLIFF.Wizard", "Wizard\Sdl.Utilities.SplitSDLXLIFF.Wizard.csproj", "{ABFBFA8E-526F-4872-AC98-3E00BA906829}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sdl.Community.SplitMergeUIWix", "Sdl.Community.SplitMergeUIWix\Sdl.Community.SplitMergeUIWix.csproj", "{02A73F18-3069-4EAC-A6FC-95371C079C09}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sdl.Utilities.SplitSDLXLIFF.Lib", "Lib\Sdl.Utilities.SplitSDLXLIFF.Lib.csproj", "{CF7D0374-46BF-4186-BB52-10C4210106E8}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|Any CPU = Debug|Any CPU
- Debug|x86 = Debug|x86
- Release|Any CPU = Release|Any CPU
- Release|x86 = Release|x86
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {620BC9FD-DC2E-4EE5-8C78-A6CA41979B57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {620BC9FD-DC2E-4EE5-8C78-A6CA41979B57}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {620BC9FD-DC2E-4EE5-8C78-A6CA41979B57}.Debug|x86.ActiveCfg = Debug|Any CPU
- {620BC9FD-DC2E-4EE5-8C78-A6CA41979B57}.Debug|x86.Build.0 = Debug|Any CPU
- {620BC9FD-DC2E-4EE5-8C78-A6CA41979B57}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {620BC9FD-DC2E-4EE5-8C78-A6CA41979B57}.Release|Any CPU.Build.0 = Release|Any CPU
- {620BC9FD-DC2E-4EE5-8C78-A6CA41979B57}.Release|x86.ActiveCfg = Release|Any CPU
- {620BC9FD-DC2E-4EE5-8C78-A6CA41979B57}.Release|x86.Build.0 = Release|Any CPU
- {ABFBFA8E-526F-4872-AC98-3E00BA906829}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {ABFBFA8E-526F-4872-AC98-3E00BA906829}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {ABFBFA8E-526F-4872-AC98-3E00BA906829}.Debug|x86.ActiveCfg = Debug|Any CPU
- {ABFBFA8E-526F-4872-AC98-3E00BA906829}.Debug|x86.Build.0 = Debug|Any CPU
- {ABFBFA8E-526F-4872-AC98-3E00BA906829}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {ABFBFA8E-526F-4872-AC98-3E00BA906829}.Release|Any CPU.Build.0 = Release|Any CPU
- {ABFBFA8E-526F-4872-AC98-3E00BA906829}.Release|x86.ActiveCfg = Release|Any CPU
- {ABFBFA8E-526F-4872-AC98-3E00BA906829}.Release|x86.Build.0 = Release|Any CPU
- {02A73F18-3069-4EAC-A6FC-95371C079C09}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {02A73F18-3069-4EAC-A6FC-95371C079C09}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {02A73F18-3069-4EAC-A6FC-95371C079C09}.Debug|x86.ActiveCfg = Debug|Any CPU
- {02A73F18-3069-4EAC-A6FC-95371C079C09}.Debug|x86.Build.0 = Debug|Any CPU
- {02A73F18-3069-4EAC-A6FC-95371C079C09}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {02A73F18-3069-4EAC-A6FC-95371C079C09}.Release|Any CPU.Build.0 = Release|Any CPU
- {02A73F18-3069-4EAC-A6FC-95371C079C09}.Release|x86.ActiveCfg = Release|Any CPU
- {02A73F18-3069-4EAC-A6FC-95371C079C09}.Release|x86.Build.0 = Release|Any CPU
- {CF7D0374-46BF-4186-BB52-10C4210106E8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {CF7D0374-46BF-4186-BB52-10C4210106E8}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {CF7D0374-46BF-4186-BB52-10C4210106E8}.Debug|x86.ActiveCfg = Debug|Any CPU
- {CF7D0374-46BF-4186-BB52-10C4210106E8}.Debug|x86.Build.0 = Debug|Any CPU
- {CF7D0374-46BF-4186-BB52-10C4210106E8}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {CF7D0374-46BF-4186-BB52-10C4210106E8}.Release|Any CPU.Build.0 = Release|Any CPU
- {CF7D0374-46BF-4186-BB52-10C4210106E8}.Release|x86.ActiveCfg = Release|Any CPU
- {CF7D0374-46BF-4186-BB52-10C4210106E8}.Release|x86.Build.0 = Release|Any CPU
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
- GlobalSection(ExtensibilityGlobals) = postSolution
- SolutionGuid = {BA2758E4-02D1-4C01-B9D0-D09A72D97F9C}
- EndGlobalSection
-EndGlobal
diff --git a/SDLXLIFFSplitMerge/Sdl.Community.SDLXLIFFSplitMerge.Installer/Product.wxs b/SDLXLIFFSplitMerge/Sdl.Community.SDLXLIFFSplitMerge.Installer/Product.wxs
deleted file mode 100644
index 0e4acfa775..0000000000
--- a/SDLXLIFFSplitMerge/Sdl.Community.SDLXLIFFSplitMerge.Installer/Product.wxs
+++ /dev/null
@@ -1,154 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 1
- 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/SDLXLIFFSplitMerge/Sdl.Community.SDLXLIFFSplitMerge.Installer/Sdl.Community.SDLXLIFFSplitMerge.Installer.sln b/SDLXLIFFSplitMerge/Sdl.Community.SDLXLIFFSplitMerge.Installer/Sdl.Community.SDLXLIFFSplitMerge.Installer.sln
deleted file mode 100644
index 7b048a0031..0000000000
--- a/SDLXLIFFSplitMerge/Sdl.Community.SDLXLIFFSplitMerge.Installer/Sdl.Community.SDLXLIFFSplitMerge.Installer.sln
+++ /dev/null
@@ -1,25 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio Version 17
-VisualStudioVersion = 17.2.32505.173
-MinimumVisualStudioVersion = 10.0.40219.1
-Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "Sdl.Community.SDLXLIFFSplitMerge.Installer", "Sdl.Community.SDLXLIFFSplitMerge.Installer.wixproj", "{88B7519A-A0F3-4FA1-BC31-45713ABC1A1D}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|x86 = Debug|x86
- Release|x86 = Release|x86
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {88B7519A-A0F3-4FA1-BC31-45713ABC1A1D}.Debug|x86.ActiveCfg = Debug|x86
- {88B7519A-A0F3-4FA1-BC31-45713ABC1A1D}.Debug|x86.Build.0 = Debug|x86
- {88B7519A-A0F3-4FA1-BC31-45713ABC1A1D}.Release|x86.ActiveCfg = Release|x86
- {88B7519A-A0F3-4FA1-BC31-45713ABC1A1D}.Release|x86.Build.0 = Release|x86
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
- GlobalSection(ExtensibilityGlobals) = postSolution
- SolutionGuid = {DF90DF94-3EF9-438C-A975-E4B2DA20BADA}
- EndGlobalSection
-EndGlobal
diff --git a/SDLXLIFFSplitMerge/Sdl.Community.SDLXLIFFSplitMerge.Installer/Sdl.Community.SDLXLIFFSplitMerge.Installer.wixproj b/SDLXLIFFSplitMerge/Sdl.Community.SDLXLIFFSplitMerge.Installer/Sdl.Community.SDLXLIFFSplitMerge.Installer.wixproj
deleted file mode 100644
index 13e4d08b4f..0000000000
--- a/SDLXLIFFSplitMerge/Sdl.Community.SDLXLIFFSplitMerge.Installer/Sdl.Community.SDLXLIFFSplitMerge.Installer.wixproj
+++ /dev/null
@@ -1,49 +0,0 @@
-
-
-
- Debug
- x86
- 3.10
- 88b7519a-a0f3-4fa1-bc31-45713abc1a1d
- 2.0
- Sdl.Community.SDLXLIFFSplitMerge.Installer
- Package
-
-
- bin\Debug\
- obj\$(Configuration)\
- Debug;BuildOutputPath=..\Sdl.Community.SplitMergeUIWix\bin\$(Configuration)
-
-
- bin\$(Configuration)\
- obj\$(Configuration)\
- BuildOutputPath=..\Sdl.Community.SplitMergeUIWix\bin\$(Configuration)
-
-
-
-
-
-
-
-
-
- $(WixExtDir)\WixUIExtension.dll
- WixUIExtension
-
-
-
-
- Sdl.Community.SplitMergeUIWix
- {02a73f18-3069-4eac-a6fc-95371c079c09}
- True
- True
- Binaries;Content;Satellites
- INSTALLFOLDER
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/SDLXLIFFSplitMerge/Sdl.Community.SDLXLIFFSplitMerge.Installer/icon.ico b/SDLXLIFFSplitMerge/Sdl.Community.SDLXLIFFSplitMerge.Installer/icon.ico
deleted file mode 100644
index 28d54c5ec2..0000000000
Binary files a/SDLXLIFFSplitMerge/Sdl.Community.SDLXLIFFSplitMerge.Installer/icon.ico and /dev/null differ
diff --git a/SDLXLIFFSplitMerge/Sdl.Community.SplitMergeUIWix/Program.cs b/SDLXLIFFSplitMerge/Sdl.Community.SplitMergeUIWix/Program.cs
deleted file mode 100644
index 432a154050..0000000000
--- a/SDLXLIFFSplitMerge/Sdl.Community.SplitMergeUIWix/Program.cs
+++ /dev/null
@@ -1,18 +0,0 @@
-using System;
-using Sdl.Utilities.SplitSDLXLIFF;
-
-namespace Sdl.Community.SplitMergeUIWix
-{
- static class Program
- {
- ///
- /// The main entry point for the application.
- ///
- [STAThread]
- static void Main()
- {
- var wizardPage = new WizardPage(false);
- wizardPage.ShowDialog();
- }
- }
-}
diff --git a/SDLXLIFFSplitMerge/Sdl.Community.SplitMergeUIWix/Properties/AssemblyInfo.cs b/SDLXLIFFSplitMerge/Sdl.Community.SplitMergeUIWix/Properties/AssemblyInfo.cs
deleted file mode 100644
index 3dd866ee14..0000000000
--- a/SDLXLIFFSplitMerge/Sdl.Community.SplitMergeUIWix/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,31 +0,0 @@
-using System.Reflection;
-using System.Runtime.InteropServices;
-
-// General Information about an assembly is controlled through the following
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-[assembly: AssemblyTitle("Sdl.Community.SplitMergeUIWix")]
-[assembly: AssemblyProduct("Sdl.Community.SplitMergeUIWix")]
-[assembly: AssemblyCompany("SDL Limited as part of the RWS Holdings Plc group of companies")]
-[assembly: AssemblyCopyright("Copyright © 2011 - 2022 SDL Limited as part of the RWS Holdings Plc group of companies (\"RWS Group\").")]
-
-// Setting ComVisible to false makes the types in this assembly not visible
-// to COM components. If you need to access a type in this assembly from
-// COM, set the ComVisible attribute to true on that type.
-[assembly: ComVisible(false)]
-
-// The following GUID is for the ID of the typelib if this project is exposed to COM
-[assembly: Guid("7dce09ff-8c82-4ffb-9e02-345170498215")]
-
-// Version information for an assembly consists of the following four values:
-//
-// Major Version
-// Minor Version
-// Build Number
-// Revision
-//
-// You can specify all the values or you can default the Build and Revision Numbers
-// by using the '*' as shown below:
-// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("4.0.0.0")]
-[assembly: AssemblyFileVersion("4.2.0.0")]
diff --git a/SDLXLIFFSplitMerge/Sdl.Community.SplitMergeUIWix/Properties/Resources.Designer.cs b/SDLXLIFFSplitMerge/Sdl.Community.SplitMergeUIWix/Properties/Resources.Designer.cs
deleted file mode 100644
index 5aafe58f9d..0000000000
--- a/SDLXLIFFSplitMerge/Sdl.Community.SplitMergeUIWix/Properties/Resources.Designer.cs
+++ /dev/null
@@ -1,71 +0,0 @@
-//------------------------------------------------------------------------------
-//
-// This code was generated by a tool.
-// Runtime Version:4.0.30319.42000
-//
-// Changes to this file may cause incorrect behavior and will be lost if
-// the code is regenerated.
-//
-//------------------------------------------------------------------------------
-
-namespace Sdl.Community.SplitMergeUIWix.Properties
-{
-
-
- ///
- /// A strongly-typed resource class, for looking up localized strings, etc.
- ///
- // This class was auto-generated by the StronglyTypedResourceBuilder
- // class via a tool like ResGen or Visual Studio.
- // To add or remove a member, edit your .ResX file then rerun ResGen
- // with the /str option, or rebuild your VS project.
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
- internal class Resources
- {
-
- private static global::System.Resources.ResourceManager resourceMan;
-
- private static global::System.Globalization.CultureInfo resourceCulture;
-
- [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
- internal Resources()
- {
- }
-
- ///
- /// Returns the cached ResourceManager instance used by this class.
- ///
- [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
- internal static global::System.Resources.ResourceManager ResourceManager
- {
- get
- {
- if ((resourceMan == null))
- {
- global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Sdl.Community.SplitMergeUIWix.Properties.Resources", typeof(Resources).Assembly);
- resourceMan = temp;
- }
- return resourceMan;
- }
- }
-
- ///
- /// Overrides the current thread's CurrentUICulture property for all
- /// resource lookups using this strongly typed resource class.
- ///
- [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
- internal static global::System.Globalization.CultureInfo Culture
- {
- get
- {
- return resourceCulture;
- }
- set
- {
- resourceCulture = value;
- }
- }
- }
-}
diff --git a/SDLXLIFFSplitMerge/Sdl.Community.SplitMergeUIWix/Properties/Resources.resx b/SDLXLIFFSplitMerge/Sdl.Community.SplitMergeUIWix/Properties/Resources.resx
deleted file mode 100644
index af7dbebbac..0000000000
--- a/SDLXLIFFSplitMerge/Sdl.Community.SplitMergeUIWix/Properties/Resources.resx
+++ /dev/null
@@ -1,117 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- text/microsoft-resx
-
-
- 2.0
-
-
- System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
\ No newline at end of file
diff --git a/SDLXLIFFSplitMerge/Sdl.Community.SplitMergeUIWix/Properties/Settings.Designer.cs b/SDLXLIFFSplitMerge/Sdl.Community.SplitMergeUIWix/Properties/Settings.Designer.cs
deleted file mode 100644
index d237f557c6..0000000000
--- a/SDLXLIFFSplitMerge/Sdl.Community.SplitMergeUIWix/Properties/Settings.Designer.cs
+++ /dev/null
@@ -1,30 +0,0 @@
-//------------------------------------------------------------------------------
-//
-// This code was generated by a tool.
-// Runtime Version:4.0.30319.42000
-//
-// Changes to this file may cause incorrect behavior and will be lost if
-// the code is regenerated.
-//
-//------------------------------------------------------------------------------
-
-namespace Sdl.Community.SplitMergeUIWix.Properties
-{
-
-
- [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
- internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
- {
-
- private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
-
- public static Settings Default
- {
- get
- {
- return defaultInstance;
- }
- }
- }
-}
diff --git a/SDLXLIFFSplitMerge/Sdl.Community.SplitMergeUIWix/Properties/Settings.settings b/SDLXLIFFSplitMerge/Sdl.Community.SplitMergeUIWix/Properties/Settings.settings
deleted file mode 100644
index 39645652af..0000000000
--- a/SDLXLIFFSplitMerge/Sdl.Community.SplitMergeUIWix/Properties/Settings.settings
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/SDLXLIFFSplitMerge/Sdl.Community.SplitMergeUIWix/Sdl.Community.SplitMergeUIWix.csproj b/SDLXLIFFSplitMerge/Sdl.Community.SplitMergeUIWix/Sdl.Community.SplitMergeUIWix.csproj
deleted file mode 100644
index ec2c8c33d4..0000000000
--- a/SDLXLIFFSplitMerge/Sdl.Community.SplitMergeUIWix/Sdl.Community.SplitMergeUIWix.csproj
+++ /dev/null
@@ -1,88 +0,0 @@
-
-
-
- net48
- false
- WinExe
- True
- $(MSBuildProgramFiles32)\Trados\Trados Studio\Studio18
- false
- ..\SdlCommunity.snk
-
-
-
- $(TradosFolder)\Sdl.Core.Globalization.dll
-
-
- $(TradosFolder)\Sdl.Core.LanguageProcessing.dll
-
-
- $(TradosFolder)\Sdl.Core.Settings.dll
-
-
- $(TradosFolder)\Sdl.Desktop.IntegrationApi.dll
-
-
- $(TradosFolder)\Sdl.Desktop.IntegrationApi.Extensions.dll
-
-
- $(TradosFolder)\Sdl.FileTypeSupport.Framework.Core.dll
-
-
- $(TradosFolder)\Sdl.FileTypeSupport.Framework.Core.Settings.dll
-
-
- $(TradosFolder)\Sdl.FileTypeSupport.Framework.Core.Utilities.dll
-
-
- $(TradosFolder)\Sdl.FileTypeSupport.Framework.Implementation.dll
-
-
- $(TradosFolder)\Sdl.LanguagePlatform.Core.dll
-
-
- $(TradosFolder)\Sdl.LanguagePlatform.Lingua.dll
-
-
- $(TradosFolder)\Sdl.LanguagePlatform.TranslationMemoryTools.dll
-
-
- $(TradosFolder)\Sdl.ProjectAutomation.Core.dll
-
-
- $(TradosFolder)\Sdl.ProjectAutomation.FileBased.dll
-
-
- $(TradosFolder)\Sdl.ProjectAutomation.Settings.dll
-
-
- $(TradosFolder)\Sdl.TranslationStudioAutomation.IntegrationApi.dll
-
-
- $(TradosFolder)\Sdl.TranslationStudioAutomation.IntegrationApi.Extensions.dll
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- SettingsSingleFileGenerator
- Settings.Designer.cs
-
-
-
-
- {7c927446-0461-4fcc-8c1d-a309430e064c}
- Sdl.Utilities.SplitSDLXLIFF
-
-
-
diff --git a/SDLXLIFFSplitMerge/SdlCommunity.snk b/SDLXLIFFSplitMerge/SdlCommunity.snk
deleted file mode 100644
index 016e165831..0000000000
Binary files a/SDLXLIFFSplitMerge/SdlCommunity.snk and /dev/null differ
diff --git a/SDLXLIFFSplitMerge/SplitSDLXLIFF/AppOptions.cs b/SDLXLIFFSplitMerge/SplitSDLXLIFF/AppOptions.cs
deleted file mode 100644
index e616f1f23f..0000000000
--- a/SDLXLIFFSplitMerge/SplitSDLXLIFF/AppOptions.cs
+++ /dev/null
@@ -1,88 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using Sdl.Utilities.SplitSDLXLIFF.Lib;
-using System.IO;
-
-namespace Sdl.Utilities.SplitSDLXLIFF
-{
- public class AppOptions
- {
- public static bool isMerge = false;
-
- ///
- /// string - file name,
- /// bool - separate file (true), project file (false)
- ///
- public static Dictionary splitInFiles = new Dictionary();
-
- public static string splitOutPath = "";
- public static SplitOptions splitOpts = new SplitOptions();
- public static string segmentIDs = "";
-
- public static string mergeOrigFile = "";
- public static string mergeInPath = "";
- public static string mergeInfoFile = "";
-
- public static void RestoreOptions()
- {
- isMerge = false;
- splitInFiles = new Dictionary();
- splitOpts = new SplitOptions();
- splitOutPath = segmentIDs = mergeOrigFile =
- mergeInPath = mergeInfoFile = string.Empty;
- }
- }
-
- public class AppSettingsFile
- {
- public static void SaveSettings(List data)
- {
- string settsFile = GetSettingsPath();
-
- try
- {
- if (File.Exists(settsFile))
- File.Delete(settsFile);
-
- using (StreamWriter sWriter = new StreamWriter(settsFile))
- {
- foreach (string item in data)
- sWriter.WriteLine(item);
- sWriter.Close();
- }
- }
- catch
- { }
- }
-
- public static List LoadSettings()
- {
- List data = new List();
-
- string settsFile = GetSettingsPath();
- if (File.Exists(GetSettingsPath()))
- {
- using (StreamReader sReader = new StreamReader(settsFile))
- {
- while (!sReader.EndOfStream)
- data.Add(sReader.ReadLine());
- }
- }
-
- return data;
- }
-
- private static string GetSettingsPath()
- {
- string generatorFolder = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\Trados\\OpenExchange\\SplitSDLXLIFF";
- if (!Directory.Exists(generatorFolder))
- {
- Directory.CreateDirectory(generatorFolder);
- }
-
- return generatorFolder + "\\settings.txt";
- }
- }
-}
diff --git a/SDLXLIFFSplitMerge/SplitSDLXLIFF/Docs/UserGuide.docx b/SDLXLIFFSplitMerge/SplitSDLXLIFF/Docs/UserGuide.docx
deleted file mode 100644
index 32b10aa9db..0000000000
Binary files a/SDLXLIFFSplitMerge/SplitSDLXLIFF/Docs/UserGuide.docx and /dev/null differ
diff --git a/SDLXLIFFSplitMerge/SplitSDLXLIFF/FileOptionsPage.Designer.cs b/SDLXLIFFSplitMerge/SplitSDLXLIFF/FileOptionsPage.Designer.cs
deleted file mode 100644
index 5979b26e87..0000000000
--- a/SDLXLIFFSplitMerge/SplitSDLXLIFF/FileOptionsPage.Designer.cs
+++ /dev/null
@@ -1,343 +0,0 @@
-using Sdl.Utilities.SplitSDLXLIFF.Wizard;
-namespace Sdl.Utilities.SplitSDLXLIFF
-{
- partial class FileOptionsPage
- {
- ///
- /// Required designer variable.
- ///
- private System.ComponentModel.IContainer components = null;
-
- ///
- /// Clean up any resources being used.
- ///
- /// true if managed resources should be disposed; otherwise, false.
- protected override void Dispose(bool disposing)
- {
- if (disposing && (components != null))
- {
- components.Dispose();
- }
- base.Dispose(disposing);
- }
-
- #region Component Designer generated code
-
- ///
- /// Required method for Designer support - do not modify
- /// the contents of this method with the code editor.
- ///
- private void InitializeComponent()
- {
- this.pSplitOptions = new System.Windows.Forms.Panel();
- this.lvSplitInFiles = new System.Windows.Forms.ListView();
- this.chFiles = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
- this.btnSplitAddFromProject = new System.Windows.Forms.Button();
- this.btnSplitRemoveAll = new System.Windows.Forms.Button();
- this.btnSplitInFileRemove = new System.Windows.Forms.Button();
- this.btnSplitInFileAdd = new System.Windows.Forms.Button();
- this.btnSplitOutBrowse = new System.Windows.Forms.Button();
- this.tbSplitOut = new System.Windows.Forms.TextBox();
- this.lblSplitOut = new System.Windows.Forms.Label();
- this.lblSplitIn = new System.Windows.Forms.Label();
- this.pMergeOptions = new System.Windows.Forms.Panel();
- this.btnMergeInfoFile = new System.Windows.Forms.Button();
- this.tbMergeInfoFile = new System.Windows.Forms.TextBox();
- this.lblMergeInfoFile = new System.Windows.Forms.Label();
- this.btnMergeSplitFiles = new System.Windows.Forms.Button();
- this.tbMergeSplitFiles = new System.Windows.Forms.TextBox();
- this.lblMergeSpliFiles = new System.Windows.Forms.Label();
- this.btnMergeOrigFile = new System.Windows.Forms.Button();
- this.tbMergeOrigFile = new System.Windows.Forms.TextBox();
- this.lblMergeOrigFile = new System.Windows.Forms.Label();
- this.btnLoadFilesActiveProject = new System.Windows.Forms.Button();
- this.pSplitOptions.SuspendLayout();
- this.pMergeOptions.SuspendLayout();
- this.SuspendLayout();
- //
- // Banner
- //
- this.Banner.Dock = System.Windows.Forms.DockStyle.None;
- this.Banner.Size = new System.Drawing.Size(610, 64);
- //
- // pSplitOptions
- //
- this.pSplitOptions.Controls.Add(this.btnLoadFilesActiveProject);
- this.pSplitOptions.Controls.Add(this.lvSplitInFiles);
- this.pSplitOptions.Controls.Add(this.btnSplitAddFromProject);
- this.pSplitOptions.Controls.Add(this.btnSplitRemoveAll);
- this.pSplitOptions.Controls.Add(this.btnSplitInFileRemove);
- this.pSplitOptions.Controls.Add(this.btnSplitInFileAdd);
- this.pSplitOptions.Controls.Add(this.btnSplitOutBrowse);
- this.pSplitOptions.Controls.Add(this.tbSplitOut);
- this.pSplitOptions.Controls.Add(this.lblSplitOut);
- this.pSplitOptions.Controls.Add(this.lblSplitIn);
- this.pSplitOptions.Location = new System.Drawing.Point(3, 68);
- this.pSplitOptions.Name = "pSplitOptions";
- this.pSplitOptions.Size = new System.Drawing.Size(607, 317);
- this.pSplitOptions.TabIndex = 1;
- //
- // lvSplitInFiles
- //
- this.lvSplitInFiles.AllowDrop = true;
- this.lvSplitInFiles.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
- this.chFiles});
- this.lvSplitInFiles.FullRowSelect = true;
- this.lvSplitInFiles.GridLines = true;
- this.lvSplitInFiles.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable;
- this.lvSplitInFiles.HideSelection = false;
- this.lvSplitInFiles.Location = new System.Drawing.Point(10, 27);
- this.lvSplitInFiles.Name = "lvSplitInFiles";
- this.lvSplitInFiles.Size = new System.Drawing.Size(583, 197);
- this.lvSplitInFiles.TabIndex = 2;
- this.lvSplitInFiles.UseCompatibleStateImageBehavior = false;
- this.lvSplitInFiles.View = System.Windows.Forms.View.Details;
- this.lvSplitInFiles.DragDrop += new System.Windows.Forms.DragEventHandler(this.lvSplitInFiles_DragDrop);
- this.lvSplitInFiles.DragEnter += new System.Windows.Forms.DragEventHandler(this.lvSplitInFiles_DragEnter);
- this.lvSplitInFiles.KeyDown += new System.Windows.Forms.KeyEventHandler(this.lvSplitInFiles_KeyDown);
- //
- // chFiles
- //
- this.chFiles.Text = "SDLXLIFF Files";
- this.chFiles.Width = 575;
- //
- // btnSplitAddFromProject
- //
- this.btnSplitAddFromProject.Location = new System.Drawing.Point(67, 230);
- this.btnSplitAddFromProject.Name = "btnSplitAddFromProject";
- this.btnSplitAddFromProject.Size = new System.Drawing.Size(128, 23);
- this.btnSplitAddFromProject.TabIndex = 4;
- this.btnSplitAddFromProject.Text = "&Load files from Project...";
- this.btnSplitAddFromProject.UseVisualStyleBackColor = true;
- this.btnSplitAddFromProject.Click += new System.EventHandler(this.btnSplitAddFromProject_Click);
- //
- // btnSplitRemoveAll
- //
- this.btnSplitRemoveAll.Location = new System.Drawing.Point(518, 229);
- this.btnSplitRemoveAll.Name = "btnSplitRemoveAll";
- this.btnSplitRemoveAll.Size = new System.Drawing.Size(75, 23);
- this.btnSplitRemoveAll.TabIndex = 6;
- this.btnSplitRemoveAll.Text = "&Remove All";
- this.btnSplitRemoveAll.UseVisualStyleBackColor = true;
- this.btnSplitRemoveAll.Click += new System.EventHandler(this.btnSplitRemoveAll_Click);
- //
- // btnSplitInFileRemove
- //
- this.btnSplitInFileRemove.Location = new System.Drawing.Point(409, 229);
- this.btnSplitInFileRemove.Name = "btnSplitInFileRemove";
- this.btnSplitInFileRemove.Size = new System.Drawing.Size(105, 23);
- this.btnSplitInFileRemove.TabIndex = 5;
- this.btnSplitInFileRemove.Text = "Remove &Selected";
- this.btnSplitInFileRemove.UseVisualStyleBackColor = true;
- this.btnSplitInFileRemove.Click += new System.EventHandler(this.btnSplitInFileRemove_Click);
- //
- // btnSplitInFileAdd
- //
- this.btnSplitInFileAdd.Location = new System.Drawing.Point(10, 230);
- this.btnSplitInFileAdd.Name = "btnSplitInFileAdd";
- this.btnSplitInFileAdd.Size = new System.Drawing.Size(51, 23);
- this.btnSplitInFileAdd.TabIndex = 3;
- this.btnSplitInFileAdd.Text = "&Add...";
- this.btnSplitInFileAdd.UseVisualStyleBackColor = true;
- this.btnSplitInFileAdd.Click += new System.EventHandler(this.btnSplitInFileAdd_Click);
- //
- // btnSplitOutBrowse
- //
- this.btnSplitOutBrowse.Location = new System.Drawing.Point(518, 280);
- this.btnSplitOutBrowse.Name = "btnSplitOutBrowse";
- this.btnSplitOutBrowse.Size = new System.Drawing.Size(75, 23);
- this.btnSplitOutBrowse.TabIndex = 9;
- this.btnSplitOutBrowse.Text = "Br&owse...";
- this.btnSplitOutBrowse.UseVisualStyleBackColor = true;
- this.btnSplitOutBrowse.Click += new System.EventHandler(this.btnSplitOutBrowse_Click);
- //
- // tbSplitOut
- //
- this.tbSplitOut.AllowDrop = true;
- this.tbSplitOut.Location = new System.Drawing.Point(10, 282);
- this.tbSplitOut.Name = "tbSplitOut";
- this.tbSplitOut.Size = new System.Drawing.Size(504, 20);
- this.tbSplitOut.TabIndex = 8;
- this.tbSplitOut.DragDrop += new System.Windows.Forms.DragEventHandler(this.tbSplitOut_DragDrop);
- this.tbSplitOut.DragEnter += new System.Windows.Forms.DragEventHandler(this.tbSplitOut_DragEnter);
- //
- // lblSplitOut
- //
- this.lblSplitOut.AutoSize = true;
- this.lblSplitOut.Location = new System.Drawing.Point(8, 265);
- this.lblSplitOut.Name = "lblSplitOut";
- this.lblSplitOut.Size = new System.Drawing.Size(161, 13);
- this.lblSplitOut.TabIndex = 7;
- this.lblSplitOut.Text = "Specify &target folder for split files:";
- //
- // lblSplitIn
- //
- this.lblSplitIn.AutoSize = true;
- this.lblSplitIn.Location = new System.Drawing.Point(8, 11);
- this.lblSplitIn.Name = "lblSplitIn";
- this.lblSplitIn.Size = new System.Drawing.Size(83, 13);
- this.lblSplitIn.TabIndex = 1;
- this.lblSplitIn.Text = "Add &files to split:";
- //
- // pMergeOptions
- //
- this.pMergeOptions.Controls.Add(this.btnMergeInfoFile);
- this.pMergeOptions.Controls.Add(this.tbMergeInfoFile);
- this.pMergeOptions.Controls.Add(this.lblMergeInfoFile);
- this.pMergeOptions.Controls.Add(this.btnMergeSplitFiles);
- this.pMergeOptions.Controls.Add(this.tbMergeSplitFiles);
- this.pMergeOptions.Controls.Add(this.lblMergeSpliFiles);
- this.pMergeOptions.Controls.Add(this.btnMergeOrigFile);
- this.pMergeOptions.Controls.Add(this.tbMergeOrigFile);
- this.pMergeOptions.Controls.Add(this.lblMergeOrigFile);
- this.pMergeOptions.Location = new System.Drawing.Point(3, 68);
- this.pMergeOptions.Name = "pMergeOptions";
- this.pMergeOptions.Size = new System.Drawing.Size(607, 122);
- this.pMergeOptions.TabIndex = 2;
- //
- // btnMergeInfoFile
- //
- this.btnMergeInfoFile.Location = new System.Drawing.Point(516, 64);
- this.btnMergeInfoFile.Name = "btnMergeInfoFile";
- this.btnMergeInfoFile.Size = new System.Drawing.Size(75, 23);
- this.btnMergeInfoFile.TabIndex = 9;
- this.btnMergeInfoFile.Text = "Bro&wse...";
- this.btnMergeInfoFile.UseVisualStyleBackColor = true;
- this.btnMergeInfoFile.Click += new System.EventHandler(this.btnMergeInfoFile_Click);
- //
- // tbMergeInfoFile
- //
- this.tbMergeInfoFile.AllowDrop = true;
- this.tbMergeInfoFile.Location = new System.Drawing.Point(96, 66);
- this.tbMergeInfoFile.Name = "tbMergeInfoFile";
- this.tbMergeInfoFile.Size = new System.Drawing.Size(416, 20);
- this.tbMergeInfoFile.TabIndex = 8;
- this.tbMergeInfoFile.DragDrop += new System.Windows.Forms.DragEventHandler(this.tbMergeInfoFile_DragDrop);
- this.tbMergeInfoFile.DragEnter += new System.Windows.Forms.DragEventHandler(this.tbMergeInfoFile_DragEnter);
- //
- // lblMergeInfoFile
- //
- this.lblMergeInfoFile.AutoSize = true;
- this.lblMergeInfoFile.Location = new System.Drawing.Point(10, 69);
- this.lblMergeInfoFile.Name = "lblMergeInfoFile";
- this.lblMergeInfoFile.Size = new System.Drawing.Size(67, 13);
- this.lblMergeInfoFile.TabIndex = 7;
- this.lblMergeInfoFile.Text = "Split &Info file:";
- //
- // btnMergeSplitFiles
- //
- this.btnMergeSplitFiles.Location = new System.Drawing.Point(516, 38);
- this.btnMergeSplitFiles.Name = "btnMergeSplitFiles";
- this.btnMergeSplitFiles.Size = new System.Drawing.Size(75, 23);
- this.btnMergeSplitFiles.TabIndex = 6;
- this.btnMergeSplitFiles.Text = "Br&owse...";
- this.btnMergeSplitFiles.UseVisualStyleBackColor = true;
- this.btnMergeSplitFiles.Click += new System.EventHandler(this.btnMergeSplitFiles_Click);
- //
- // tbMergeSplitFiles
- //
- this.tbMergeSplitFiles.AllowDrop = true;
- this.tbMergeSplitFiles.Location = new System.Drawing.Point(96, 40);
- this.tbMergeSplitFiles.Name = "tbMergeSplitFiles";
- this.tbMergeSplitFiles.Size = new System.Drawing.Size(416, 20);
- this.tbMergeSplitFiles.TabIndex = 5;
- this.tbMergeSplitFiles.DragDrop += new System.Windows.Forms.DragEventHandler(this.tbMergeSplitFiles_DragDrop);
- this.tbMergeSplitFiles.DragEnter += new System.Windows.Forms.DragEventHandler(this.tbMergeSplitFiles_DragEnter);
- //
- // lblMergeSpliFiles
- //
- this.lblMergeSpliFiles.AutoSize = true;
- this.lblMergeSpliFiles.Location = new System.Drawing.Point(10, 43);
- this.lblMergeSpliFiles.Name = "lblMergeSpliFiles";
- this.lblMergeSpliFiles.Size = new System.Drawing.Size(80, 13);
- this.lblMergeSpliFiles.TabIndex = 4;
- this.lblMergeSpliFiles.Text = "S&plit files folder:";
- //
- // btnMergeOrigFile
- //
- this.btnMergeOrigFile.Location = new System.Drawing.Point(516, 12);
- this.btnMergeOrigFile.Name = "btnMergeOrigFile";
- this.btnMergeOrigFile.Size = new System.Drawing.Size(75, 23);
- this.btnMergeOrigFile.TabIndex = 3;
- this.btnMergeOrigFile.Text = "B&rowse...";
- this.btnMergeOrigFile.UseVisualStyleBackColor = true;
- this.btnMergeOrigFile.Click += new System.EventHandler(this.btnMergeOrigFile_Click);
- //
- // tbMergeOrigFile
- //
- this.tbMergeOrigFile.AllowDrop = true;
- this.tbMergeOrigFile.Location = new System.Drawing.Point(96, 14);
- this.tbMergeOrigFile.Name = "tbMergeOrigFile";
- this.tbMergeOrigFile.Size = new System.Drawing.Size(416, 20);
- this.tbMergeOrigFile.TabIndex = 2;
- this.tbMergeOrigFile.DragDrop += new System.Windows.Forms.DragEventHandler(this.tbMergeOrigFile_DragDrop);
- this.tbMergeOrigFile.DragEnter += new System.Windows.Forms.DragEventHandler(this.tbMergeOrigFile_DragEnter);
- //
- // lblMergeOrigFile
- //
- this.lblMergeOrigFile.AutoSize = true;
- this.lblMergeOrigFile.Location = new System.Drawing.Point(10, 17);
- this.lblMergeOrigFile.Name = "lblMergeOrigFile";
- this.lblMergeOrigFile.Size = new System.Drawing.Size(61, 13);
- this.lblMergeOrigFile.TabIndex = 1;
- this.lblMergeOrigFile.Text = "Ori&ginal file:";
- //
- // btnLoadFilesActiveProject
- //
- this.btnLoadFilesActiveProject.Location = new System.Drawing.Point(201, 229);
- this.btnLoadFilesActiveProject.Name = "btnLoadFilesActiveProject";
- this.btnLoadFilesActiveProject.Size = new System.Drawing.Size(160, 23);
- this.btnLoadFilesActiveProject.TabIndex = 10;
- this.btnLoadFilesActiveProject.Text = "&Load files from active Project...";
- this.btnLoadFilesActiveProject.UseVisualStyleBackColor = true;
- this.btnLoadFilesActiveProject.Click += new System.EventHandler(this.btnLoadFilesActiveProject_Click);
- //
- // FileOptionsPage
- //
- this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
- this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
- this.Controls.Add(this.pMergeOptions);
- this.Controls.Add(this.pSplitOptions);
- this.Name = "FileOptionsPage";
- this.Size = new System.Drawing.Size(610, 385);
- this.SetActive += new System.ComponentModel.CancelEventHandler(this.OptionsPage_SetActive);
- this.WizardNext += new Sdl.Utilities.SplitSDLXLIFF.Wizard.WizardPageEventHandler(this.FileOptionsPage_WizardNext);
- this.WizardPreNext += new Sdl.Utilities.SplitSDLXLIFF.Wizard.WizardPageEventHandler(this.FileOptionsPage_WizardPreNext);
- this.WizardBack += new Sdl.Utilities.SplitSDLXLIFF.Wizard.WizardPageEventHandler(this.FileOptionsPage_WizardBack);
- this.Controls.SetChildIndex(this.pSplitOptions, 0);
- this.Controls.SetChildIndex(this.pMergeOptions, 0);
- this.Controls.SetChildIndex(this.Banner, 0);
- this.pSplitOptions.ResumeLayout(false);
- this.pSplitOptions.PerformLayout();
- this.pMergeOptions.ResumeLayout(false);
- this.pMergeOptions.PerformLayout();
- this.ResumeLayout(false);
-
- }
-
- #endregion
-
- private System.Windows.Forms.Panel pSplitOptions;
- private System.Windows.Forms.Panel pMergeOptions;
- private System.Windows.Forms.Button btnSplitOutBrowse;
- private System.Windows.Forms.TextBox tbSplitOut;
- private System.Windows.Forms.Label lblSplitOut;
- private System.Windows.Forms.Label lblSplitIn;
- private System.Windows.Forms.Button btnSplitInFileAdd;
- private System.Windows.Forms.Button btnSplitInFileRemove;
- private System.Windows.Forms.Button btnMergeInfoFile;
- private System.Windows.Forms.TextBox tbMergeInfoFile;
- private System.Windows.Forms.Label lblMergeInfoFile;
- private System.Windows.Forms.Button btnMergeSplitFiles;
- private System.Windows.Forms.TextBox tbMergeSplitFiles;
- private System.Windows.Forms.Label lblMergeSpliFiles;
- private System.Windows.Forms.Button btnMergeOrigFile;
- private System.Windows.Forms.TextBox tbMergeOrigFile;
- private System.Windows.Forms.Label lblMergeOrigFile;
- private System.Windows.Forms.Button btnSplitRemoveAll;
- private System.Windows.Forms.Button btnSplitAddFromProject;
- private System.Windows.Forms.ListView lvSplitInFiles;
- private System.Windows.Forms.ColumnHeader chFiles;
- private System.Windows.Forms.Button btnLoadFilesActiveProject;
- }
-}
diff --git a/SDLXLIFFSplitMerge/SplitSDLXLIFF/FileOptionsPage.cs b/SDLXLIFFSplitMerge/SplitSDLXLIFF/FileOptionsPage.cs
deleted file mode 100644
index 60d460fdd4..0000000000
--- a/SDLXLIFFSplitMerge/SplitSDLXLIFF/FileOptionsPage.cs
+++ /dev/null
@@ -1,540 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.IO;
-using System.Windows.Forms;
-using System.Xml;
-using Sdl.TranslationStudioAutomation.IntegrationApi;
-using Sdl.Utilities.SplitSDLXLIFF.Helpers;
-using Sdl.Utilities.SplitSDLXLIFF.Wizard;
-
-namespace Sdl.Utilities.SplitSDLXLIFF
-{
- public partial class FileOptionsPage : InternalWizardPage
- {
- private Dictionary _splitInFiles = new Dictionary();
- private bool _isStudioPlugin;
- private Dictionary _splitInItems = new Dictionary();
-
-
- public FileOptionsPage(bool isStudioPlugin)
- {
- InitializeComponent();
-
- SetSelectedFiles();
- _isStudioPlugin = isStudioPlugin;
- }
-
- private void switchPanels(bool isMrg)
- {
- pMergeOptions.Visible = isMrg;
- pSplitOptions.Visible = !isMrg;
- }
-
- private static ProjectsController GetProjectController()
- {
- return SdlTradosStudio.Application.GetController();
- }
-
- private static FilesController GetFileController()
- {
- return SdlTradosStudio.Application.GetController();
- }
-
- private void findSplitInfoFile(string fileDir)
- {
- if (Directory.Exists(fileDir))
- {
- string[] files = Directory.GetFiles(fileDir, "*.splitinfo");
- if (files.Length == 1)
- {
- tbMergeInfoFile.Text = files[0];
- }
- }
- }
-
- private void bindInFiles()
- {
- lvSplitInFiles.Items.Clear();
- _splitInFiles = _splitInItems;
-
- foreach (KeyValuePair splitInfile in _splitInFiles)
- {
- lvSplitInFiles.Items.Add(splitInfile.Key);
- }
- }
-
- private void bindSplitData()
- {
- _splitInFiles = AppOptions.splitInFiles;
- tbSplitOut.Text = AppOptions.splitOutPath;
-
- bindInFiles();
- }
- private void bindMergeData()
- {
- // restore current settings data
- if (AppOptions.mergeOrigFile.Length > 0 || AppOptions.mergeInPath.Length > 0)
- {
- tbMergeInfoFile.Text = AppOptions.mergeInfoFile;
- tbMergeSplitFiles.Text = AppOptions.mergeInPath;
- tbMergeOrigFile.Text = AppOptions.mergeOrigFile;
- }
- // get settings from file
- else
- {
- List setts = AppSettingsFile.LoadSettings();
- if (setts.Count > 1)
- if (Directory.Exists(Path.GetDirectoryName(setts[0])) && Directory.Exists(setts[1]))
- {
- tbMergeOrigFile.Text = setts[0];
- tbMergeSplitFiles.Text = setts[1];
- findSplitInfoFile(setts[1]);
- }
- }
- }
- private void saveSplitData()
- {
- AppOptions.splitInFiles = _splitInFiles;
- AppOptions.splitOutPath = tbSplitOut.Text;
- }
- private void saveMergeData()
- {
- AppOptions.mergeInfoFile = tbMergeInfoFile.Text;
- AppOptions.mergeInPath = tbMergeSplitFiles.Text;
- AppOptions.mergeOrigFile = tbMergeOrigFile.Text;
- }
-
- private void RemoveSelectedItem()
- {
- for (int i = 0; i < lvSplitInFiles.Items.Count; i++)
- if (lvSplitInFiles.Items[i].Selected)
- _splitInFiles.Remove(lvSplitInFiles.Items[i].Text);
- }
-
- ///
- /// Parse project file and add sdlxliff files to dialog
- ///
- ///
- private void ParseProjectFile(string projPath)
- {
- // KLukianets
- // Skipping reference files while loading sdlxliff from project.
-
- Dictionary targetFiles = new Dictionary();
-
- // extract data from project file
- FileInfo projectFileInfo = new FileInfo(projPath);
- XmlDocument doc = new XmlDocument();
- doc.Load(projPath);
- string sourcelang = doc.SelectSingleNode("//SourceLanguageCode").InnerText;
- string targetlang = "";
- string targetPath = "";
- foreach (XmlNode node in doc.SelectNodes("//LanguageFiles/LanguageFile"))
- {
- targetlang = node.Attributes["LanguageCode"].Value;
- targetPath = projectFileInfo.DirectoryName + "\\" + node.SelectSingleNode("./FileVersions/FileVersion[last()]").Attributes["PhysicalPath"].Value;
- if (targetlang != sourcelang && Path.GetExtension(targetPath).ToLower() == ".sdlxliff")
- {
- targetFiles.Add(targetPath, targetlang);
- }
- }
-
- if (targetFiles.Count > 0)
- {
- // show modal form
- TargetLanguageForm tlForm = new TargetLanguageForm(projPath, targetFiles);
- tlForm.ShowDialog();
-
- if (tlForm.SelectedLang.Count > 0)
- {
- // add files with selected languages only
- foreach (KeyValuePair file in targetFiles)
- if (tlForm.SelectedLang.Contains(file.Value))
- {
- AddFile(file.Key, false);
- }
- }
- else MessageBox.Show(Properties.Resources.filesNoTargetLanguage,
- Properties.Resources.Title);
- }
- }
-
- private void AddFile(string file, bool isSeparateFile)
- {
- if (!_splitInFiles.ContainsKey(file))
- {
- _splitInFiles.Add(file, isSeparateFile);
- }
- else
- {
- _splitInFiles[file] = isSeparateFile;
- }
- }
-
- private string validateInput(bool isMrg)
- {
- string errorMsg = "";
-
- if (isMrg)
- {
- if (tbMergeOrigFile.Text.Trim().Length == 0)
- errorMsg = Properties.Resources.errMergeNoOrigFile;
- else if (!File.Exists(tbMergeOrigFile.Text))
- errorMsg = Properties.Resources.errMergeOrigFileNotExist;
- else if (tbMergeSplitFiles.Text.Trim().Length == 0)
- errorMsg = Properties.Resources.errMergeNoFolder;
- else if (!Directory.Exists(tbMergeSplitFiles.Text))
- errorMsg = Properties.Resources.errMergeFolderNotExist;
- else if (tbMergeInfoFile.Text.Trim().Length == 0)
- errorMsg = Properties.Resources.errMergeNoInfoFile;
- else if (!File.Exists(tbMergeInfoFile.Text))
- errorMsg = Properties.Resources.errMergeInfoFileNotExist;
- }
- else
- {
- if (_splitInFiles.Count == 0)
- errorMsg = Properties.Resources.errSplitNoFile;
- else if (tbSplitOut.Text.Trim().Length == 0)
- errorMsg = Properties.Resources.errSplitNoFolder;
- else if (!Directory.Exists(tbSplitOut.Text))
- errorMsg = Properties.Resources.errSplitFolderNotExist;
- }
-
- return errorMsg;
- }
-
- private void OptionsPage_SetActive(object sender, CancelEventArgs e)
- {
- // set titles for the wizard page
- if (!AppOptions.isMerge)
- {
- this.Banner.Title = Properties.Resources.msgSplitFOptsTitle;
- this.Banner.Subtitle = Properties.Resources.msgSplitFOptsSubtitle;
- bindSplitData();
-
- SetWizardButtons(WizardButtons.Back | WizardButtons.Next);
- }
- else
- {
- this.Banner.Title = Properties.Resources.msgMergeFOptsTitle;
- this.Banner.Subtitle = Properties.Resources.msgMergeFOptsSubtitle;
- bindMergeData();
-
- SetWizardButtons(WizardButtons.Back | WizardButtons.Finish);
- }
-
- switchPanels(AppOptions.isMerge);
- }
-
- private void FileOptionsPage_WizardPreNext(object sender, WizardPageEventArgs e)
- {
- // validation
- string validMsg = validateInput(AppOptions.isMerge);
- if (validMsg.Length == 0)
- this.AllowNext = true;
- else {
- this.AllowNext = false;
- MessageBox.Show(validMsg,
- (AppOptions.isMerge ? Properties.Resources.MergeSettingsTitle : Properties.Resources.SplitSettingsTitle));
- }
- }
- private void FileOptionsPage_WizardNext(object sender, WizardPageEventArgs e)
- {
- if (AppOptions.isMerge)
- saveMergeData();
- else saveSplitData();
- }
-
- private void FileOptionsPage_WizardBack(object sender, WizardPageEventArgs e)
- {
- if (AppOptions.isMerge)
- saveMergeData();
- else saveSplitData();
- }
-
- // buttons functionality
- private void btnMergeOrigFile_Click(object sender, EventArgs e)
- {
- var a = new FolderSelectDialog
- {
- Title = Properties.Resources.OrigFileDialogTitle,
- Filter = Constants.MergeOrigText,
- Multiselect = true
- };
-
- if (a.ShowDialog(string.Empty) == DialogResult.OK)
- {
- tbMergeOrigFile.Text = a.FileName;
- }
- }
- private void btnMergeSplitFiles_Click(object sender, EventArgs e)
- {
- var folderDialog = new FolderSelectDialog();
- if (Directory.Exists(tbMergeSplitFiles.Text))
- {
- folderDialog.FileName = tbMergeSplitFiles.Text;
- }
- if (folderDialog.ShowDialog())
- {
- tbMergeSplitFiles.Text = folderDialog.FileName;
- findSplitInfoFile(folderDialog.FileName);
- }
- }
- private void btnMergeInfoFile_Click(object sender, EventArgs e)
- {
- var a = new FolderSelectDialog
- {
- Title = Properties.Resources.InfoFileDialogTitle,
- Filter = Constants.MergeInfoText,
- Multiselect = true
- };
-
- if (a.ShowDialog(string.Empty) == DialogResult.OK)
- {
- tbMergeInfoFile.Text = a.FileName;
- }
- }
-
- private void btnSplitOutBrowse_Click(object sender, EventArgs e)
- {
- var folderDialog = new FolderSelectDialog();
- if (Directory.Exists(tbSplitOut.Text))
- {
- folderDialog.FileName = tbSplitOut.Text;
- }
- if (folderDialog.ShowDialog())
- {
- tbSplitOut.Text = folderDialog.FileName;
- }
- }
- private void btnSplitInFileAdd_Click(object sender, EventArgs e)
- {
- var a = new FolderSelectDialog
- {
- Title = Properties.Resources.FileDialogTitle,
- Filter = Constants.SplitInFilterText,
- Multiselect = true
- };
- if (a.ShowDialog(string.Empty) == DialogResult.OK)
- {
- string inFile = string.Empty;
- foreach (string file in a.Files)
- {
- inFile = file.Trim().Replace("/", @"\");
- AddFile(inFile, true);
- }
- bindInFiles();
- }
- }
- private void btnSplitRemoveAll_Click(object sender, EventArgs e)
- {
- if (lvSplitInFiles.Items.Count > 0)
- {
- _splitInFiles.Clear();
- bindInFiles();
- }
- else MessageBox.Show(Properties.Resources.msgEmptyList,
- Properties.Resources.SplitSettingsTitle);
- }
- private void btnSplitInFileRemove_Click(object sender, EventArgs e)
- {
- RemoveSelectedItem();
- bindInFiles();
- }
- private void btnSplitAddFromProject_Click(object sender, EventArgs e)
- {
- if (_isStudioPlugin)
- {
- var a = new FolderSelectDialog
- {
- Title = Properties.Resources.FileDialogTitle,
- Filter = Constants.SplitAddFilterText,
- Multiselect = true
- };
-
- if (a.ShowDialog(string.Empty) == DialogResult.OK)
- {
- foreach (string file in a.Files)
- {
- ParseProjectFile(file);
- }
-
- bindInFiles();
- }
- }
- else
- {
- btnSplitAddFromProject.Enabled = false;
- }
- }
- private void lvSplitInFiles_KeyDown(object sender, KeyEventArgs e)
- {
- if (e.KeyData == Keys.Delete)
- {
- RemoveSelectedItem();
- bindInFiles();
- }
- }
-
- private void lvSplitInFiles_DragEnter(object sender, DragEventArgs e)
- {
- if (e.Data.GetDataPresent(DataFormats.FileDrop))
- e.Effect = DragDropEffects.Copy;
- else
- e.Effect = DragDropEffects.None;
- }
- private void lvSplitInFiles_DragDrop(object sender, DragEventArgs e)
- {
- string[] fileList = (string[])e.Data.GetData(DataFormats.FileDrop, false);
- string inFile = "";
- foreach (string file in fileList)
- {
- if (File.Exists(file))
- {
- inFile = file.Trim().Replace("/", @"\");
- if (Path.GetExtension(inFile).ToLower() == ".sdlxliff")
- AddFile(inFile, true);
- else if (Path.GetExtension(inFile).ToLower() == ".sdlproj")
- ParseProjectFile(inFile);
- }
- }
-
- bindInFiles();
- }
- private void tbSplitOut_DragEnter(object sender, DragEventArgs e)
- {
- if (e.Data.GetDataPresent(DataFormats.FileDrop) && ((string[])e.Data.GetData(DataFormats.FileDrop, false)).Length == 1)
- e.Effect = DragDropEffects.Copy;
- else
- e.Effect = DragDropEffects.None;
- }
- private void tbSplitOut_DragDrop(object sender, DragEventArgs e)
- {
- string[] pathList = (string[])e.Data.GetData(DataFormats.FileDrop, false);
- if (pathList.Length > 0)
- {
- string path = (File.Exists(pathList[0]) ? Path.GetDirectoryName(pathList[0]) : pathList[0])?.Replace("/", @"\");
- if (Directory.Exists(path))
- tbSplitOut.Text = path;
- }
- }
-
- private void tbMergeOrigFile_DragEnter(object sender, DragEventArgs e)
- {
- if (e.Data.GetDataPresent(DataFormats.FileDrop) && ((string[])e.Data.GetData(DataFormats.FileDrop, false)).Length == 1)
- e.Effect = DragDropEffects.Copy;
- else
- e.Effect = DragDropEffects.None;
- }
- private void tbMergeOrigFile_DragDrop(object sender, DragEventArgs e)
- {
- string[] pathList = (string[])e.Data.GetData(DataFormats.FileDrop, false);
- if (pathList.Length > 0)
- {
- string path = pathList[0].Replace("/", @"\");
- if (Directory.Exists(Path.GetDirectoryName(path)) && File.Exists(path) && Path.GetExtension(path).ToLower() == ".sdlxliff")
- tbMergeOrigFile.Text = path;
- }
- }
- private void tbMergeSplitFiles_DragEnter(object sender, DragEventArgs e)
- {
- if (e.Data.GetDataPresent(DataFormats.FileDrop) && ((string[])e.Data.GetData(DataFormats.FileDrop, false)).Length == 1)
- e.Effect = DragDropEffects.Copy;
- else
- e.Effect = DragDropEffects.None;
- }
- private void tbMergeSplitFiles_DragDrop(object sender, DragEventArgs e)
- {
- string[] pathList = (string[])e.Data.GetData(DataFormats.FileDrop, false);
- if (pathList.Length > 0)
- {
- string path = (File.Exists(pathList[0]) ? Path.GetDirectoryName(pathList[0]) : pathList[0])?.Replace("/", @"\");
- if (Directory.Exists(path))
- {
- tbMergeSplitFiles.Text = path;
- findSplitInfoFile(path);
- }
- }
- }
- private void tbMergeInfoFile_DragEnter(object sender, DragEventArgs e)
- {
- if (e.Data.GetDataPresent(DataFormats.FileDrop) && ((string[])e.Data.GetData(DataFormats.FileDrop, false)).Length == 1)
- e.Effect = DragDropEffects.Copy;
- else
- e.Effect = DragDropEffects.None;
- }
- private void tbMergeInfoFile_DragDrop(object sender, DragEventArgs e)
- {
- string[] pathList = (string[])e.Data.GetData(DataFormats.FileDrop, false);
- if (pathList.Length > 0)
- {
- string path = pathList[0].Replace("/", @"\");
- if (Directory.Exists(Path.GetDirectoryName(path)) && File.Exists(path) && Path.GetExtension(path).ToLower() == ".splitinfo")
- tbMergeInfoFile.Text = path;
- }
- }
-
- private void btnLoadFilesActiveProject_Click(object sender, EventArgs e)
- {
- if (_isStudioPlugin)
- {
- var projectController = GetProjectController();
- var currentProjectLocalPath = string.Empty;
-
- if (projectController != null)
- {
- if (projectController.CurrentProject != null)
- {
- currentProjectLocalPath = projectController.CurrentProject.GetProjectInfo() != null
- ? projectController.CurrentProject.GetProjectInfo().LocalProjectFolder
- : string.Empty;
- }
-
- var a = new FolderSelectDialog
- {
- Title = Properties.Resources.FileDialogTitle,
- Filter = Constants.SplitAddFilterText,
- InitialDirectory = currentProjectLocalPath,
- Multiselect = true
- };
-
- if (a.ShowDialog(string.Empty) == DialogResult.OK)
- {
- foreach (string file in a.Files)
- {
- ParseProjectFile(file);
- }
-
- bindInFiles();
- }
- }
- else
- {
- btnLoadFilesActiveProject.Enabled = false;
- }
- }
- else
- {
- btnLoadFilesActiveProject.Enabled = false;
- }
- }
-
- private void SetSelectedFiles()
- {
- if (_isStudioPlugin)
- {
- var fileControler = GetFileController();
- if (fileControler != null)
- {
- var selectedFiles = fileControler.SelectedFiles;
-
- foreach (var selectedFile in selectedFiles)
- {
- _splitInItems.Add(selectedFile.LocalFilePath, true);
- }
- }
- }
- }
- }
-}
diff --git a/SDLXLIFFSplitMerge/SplitSDLXLIFF/FileOptionsPage.resx b/SDLXLIFFSplitMerge/SplitSDLXLIFF/FileOptionsPage.resx
deleted file mode 100644
index 1af7de150c..0000000000
--- a/SDLXLIFFSplitMerge/SplitSDLXLIFF/FileOptionsPage.resx
+++ /dev/null
@@ -1,120 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- text/microsoft-resx
-
-
- 2.0
-
-
- System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
\ No newline at end of file
diff --git a/SDLXLIFFSplitMerge/SplitSDLXLIFF/FilterDefinition(C77668).ico b/SDLXLIFFSplitMerge/SplitSDLXLIFF/FilterDefinition(C77668).ico
deleted file mode 100644
index 28d54c5ec2..0000000000
Binary files a/SDLXLIFFSplitMerge/SplitSDLXLIFF/FilterDefinition(C77668).ico and /dev/null differ
diff --git a/SDLXLIFFSplitMerge/SplitSDLXLIFF/Helpers/Constants.cs b/SDLXLIFFSplitMerge/SplitSDLXLIFF/Helpers/Constants.cs
deleted file mode 100644
index 3009c4bd31..0000000000
--- a/SDLXLIFFSplitMerge/SplitSDLXLIFF/Helpers/Constants.cs
+++ /dev/null
@@ -1,11 +0,0 @@
-namespace Sdl.Utilities.SplitSDLXLIFF.Helpers
-{
- public static class Constants
- {
- public static readonly string SplitInFilterText = "SDLXLIFF Files (*.sdlxliff)|*.sdlxliff";
- public static readonly string SplitAddFilterText = "Trados Studio Project Files (*.sdlproj)|*.sdlproj";
- public static readonly string MergeInfoText = "Trados Split Info Files (*.splitinfo)|*.splitinfo";
- public static readonly string MergeOrigText = "SDLXLIFF Files (*.sdlxliff)|*.sdlxliff";
- public static readonly string SDLXLIFFName = "SDLXLIFF Split/Merge";
- }
-}
diff --git a/SDLXLIFFSplitMerge/SplitSDLXLIFF/Helpers/FolderSelectDialog.cs b/SDLXLIFFSplitMerge/SplitSDLXLIFF/Helpers/FolderSelectDialog.cs
deleted file mode 100644
index 55a7d2be8c..0000000000
--- a/SDLXLIFFSplitMerge/SplitSDLXLIFF/Helpers/FolderSelectDialog.cs
+++ /dev/null
@@ -1,145 +0,0 @@
-using System;
-using System.Windows.Forms;
-
-namespace Sdl.Utilities.SplitSDLXLIFF.Helpers
-{
- public class FolderSelectDialog : IDisposable
- {
- private OpenFileDialog ofd;
-
- public string FileName
- {
- get => ofd.FileName;
- set => value = ofd.FileName;
- }
-
- public string InitialDirectory
- {
- get
- {
- return this.ofd.InitialDirectory;
- }
- set
- {
- string str;
- var openFileDialog = ofd;
- str = (value == null || value.Length == 0 ? Environment.CurrentDirectory : value);
- openFileDialog.InitialDirectory = str;
- }
- }
-
- public string Title
- {
- get
- {
- return ofd.Title;
- }
- set
- {
- string str;
- var openFileDialog = ofd;
- str = (value == null ? "Select a folder" : value);
- openFileDialog.Title = str;
- }
- }
-
- public bool Multiselect
- {
- get
- {
- return ofd.Multiselect;
- }
- set
- {
- value = ofd.Multiselect;
- }
- }
-
- public string Filter
- {
- get
- {
- return ofd.Filter;
- }
- set
- {
- string filter;
- var openFileDialog = ofd;
- filter = (value == null ? "Select a file" : value);
- openFileDialog.Filter = filter;
- }
- }
-
- public string[] Files
- {
- get
- {
- return ofd.FileNames;
- }
- }
- public FolderSelectDialog()
- {
- ofd = new OpenFileDialog();
- ofd.Filter = "SDLXLIFF Files(*.sdlxliff) | *.sdlxliff";
- ofd.AddExtension = false;
- ofd.CheckFileExists = false;
- ofd.DereferenceLinks = true;
- ofd.FileName = string.Empty;
-
- ofd.Multiselect = true;
- }
-
- // Used to display dialog for file(s) selection
- public DialogResult ShowDialog(string message)
- {
- return ofd.ShowDialog();
- }
-
- //Used to display dialog for folder(s) selection
- public bool ShowDialog()
- {
- return ShowDialog(IntPtr.Zero);
- }
-
- //Used to display dialog for folder(s) selection
- public bool ShowDialog(IntPtr hWndOwner)
- {
- bool flag = false;
-
- var reflector = new Reflector("System.Windows.Forms");
- uint num = 0;
- Type type = reflector.GetType("FileDialogNative.IFileDialog");
- object obj = reflector.Call(this.ofd, "CreateVistaDialog", new object[0]);
- object[] objArray = new object[] { obj };
- reflector.Call(this.ofd, "OnBeforeVistaDialog", objArray);
- uint @enum = (uint)reflector.CallAs(typeof(FileDialog), this.ofd, "GetOptions", new object[0]);
- @enum = @enum | (uint)reflector.GetEnum("FileDialogNative.FOS", "FOS_PICKFOLDERS");
- object[] objArray1 = new object[] { @enum };
- reflector.CallAs(type, obj, "SetOptions", objArray1);
- object[] objArray2 = new object[] { this.ofd };
- object obj1 = reflector.New("FileDialog.VistaDialogEvents", objArray2);
- object[] objArray3 = new object[] { obj1, num };
- object[] objArray4 = objArray3;
- reflector.CallAs2(type, obj, "Advise", objArray4);
- num = (uint)objArray4[1];
- try
- {
- object[] objArray5 = new object[] { hWndOwner };
- int num1 = (int)reflector.CallAs(type, obj, "Show", objArray5);
- flag = 0 == num1;
- }
- finally
- {
- object[] objArray6 = new object[] { num };
- reflector.CallAs(type, obj, "Unadvise", objArray6);
- GC.KeepAlive(obj1);
- }
-
- return flag;
- }
- public void Dispose()
- {
-
- }
- }
-}
\ No newline at end of file
diff --git a/SDLXLIFFSplitMerge/SplitSDLXLIFF/Helpers/Reflector.cs b/SDLXLIFFSplitMerge/SplitSDLXLIFF/Helpers/Reflector.cs
deleted file mode 100644
index ca735e3917..0000000000
--- a/SDLXLIFFSplitMerge/SplitSDLXLIFF/Helpers/Reflector.cs
+++ /dev/null
@@ -1,115 +0,0 @@
-using System;
-using System.Reflection;
-
-namespace Sdl.Utilities.SplitSDLXLIFF.Helpers
-{
- internal class Reflector
- {
- private string m_ns;
-
- private Assembly m_asmb;
-
- public Reflector(string ns) : this(ns, ns)
- {
- }
-
- public Reflector(string an, string ns)
- {
- m_ns = ns;
- m_asmb = null;
- var referencedAssemblies = Assembly.GetExecutingAssembly().GetReferencedAssemblies();
- for (int i = 0; i < (int)referencedAssemblies.Length; i++)
- {
- var assemblyName = referencedAssemblies[i];
- if (assemblyName.FullName.StartsWith(an))
- {
- m_asmb = Assembly.Load(assemblyName);
- return;
- }
- }
- }
-
- public object Call(object obj, string func, params object[] parameters)
- {
- return Call2(obj, func, parameters);
- }
-
- public object Call2(object obj, string func, object[] parameters)
- {
- return CallAs2(obj.GetType(), obj, func, parameters);
- }
-
- public object CallAs(Type type, object obj, string func, params object[] parameters)
- {
- return CallAs2(type, obj, func, parameters);
- }
-
- public object CallAs2(Type type, object obj, string func, object[] parameters)
- {
- var method = type.GetMethod(func, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
- return method.Invoke(obj, parameters);
- }
-
- public object Get(object obj, string prop)
- {
- return GetAs(obj.GetType(), obj, prop);
- }
-
- public object GetAs(Type type, object obj, string prop)
- {
- var property = type.GetProperty(prop, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
- return property.GetValue(obj, null);
- }
-
- public object GetEnum(string typeName, string name)
- {
- var type = this.GetType(typeName);
- var field = type.GetField(name);
- return field.GetValue(null);
- }
-
- public Type GetType(string typeName)
- {
- Type type = null;
- var chrArray = new char[] { '.' };
- var strArrays = typeName.Split(chrArray);
- if ((int)strArrays.Length > 0)
- {
- type = m_asmb.GetType(string.Concat(this.m_ns, ".", strArrays[0]));
- }
- for (int i = 1; i < (int)strArrays.Length; i++)
- {
- type = type.GetNestedType(strArrays[i], BindingFlags.NonPublic);
- }
- return type;
- }
-
- public object New(string name, params object[] parameters)
- {
- object obj = null;
- var type = this.GetType(name);
- var constructors = type.GetConstructors();
- var constructorInfoArray = constructors;
- int num = 0;
- Label1:
- while (num < (int)constructorInfoArray.Length)
- {
- ConstructorInfo constructorInfo = constructorInfoArray[num];
- try
- {
- obj = constructorInfo.Invoke(parameters);
- }
- catch
- {
- object obj1 = obj;
- goto Label0;
- }
- return obj;
- }
- return null;
- Label0:
- num++;
- goto Label1;
- }
- }
-}
\ No newline at end of file
diff --git a/SDLXLIFFSplitMerge/SplitSDLXLIFF/OptionsPage.Designer.cs b/SDLXLIFFSplitMerge/SplitSDLXLIFF/OptionsPage.Designer.cs
deleted file mode 100644
index b3304d22cf..0000000000
--- a/SDLXLIFFSplitMerge/SplitSDLXLIFF/OptionsPage.Designer.cs
+++ /dev/null
@@ -1,347 +0,0 @@
-using Sdl.Utilities.SplitSDLXLIFF.Wizard;
-namespace Sdl.Utilities.SplitSDLXLIFF
-{
- partial class OptionsPage
- {
- ///
- /// Required designer variable.
- ///
- private System.ComponentModel.IContainer components = null;
-
- ///
- /// Clean up any resources being used.
- ///
- /// true if managed resources should be disposed; otherwise, false.
- protected override void Dispose(bool disposing)
- {
- if (disposing && (components != null))
- {
- components.Dispose();
- }
- base.Dispose(disposing);
- }
-
- #region Component Designer generated code
-
- ///
- /// Required method for Designer support - do not modify
- /// the contents of this method with the code editor.
- ///
- private void InitializeComponent()
- {
- this.gbSplitOptions = new System.Windows.Forms.GroupBox();
- this.clbSegments = new System.Windows.Forms.CheckedListBox();
- this.chSplitCheckPercent = new System.Windows.Forms.CheckBox();
- this.lblSplitWordCount2 = new System.Windows.Forms.Label();
- this.lblSplitWordCount = new System.Windows.Forms.Label();
- this.label1 = new System.Windows.Forms.Label();
- this.label2 = new System.Windows.Forms.Label();
- this.nudWords = new System.Windows.Forms.NumericUpDown();
- this.nudPercent = new System.Windows.Forms.NumericUpDown();
- this.groupBox1 = new System.Windows.Forms.GroupBox();
- this.lblSplitSegNumbers2 = new System.Windows.Forms.Label();
- this.tbSegments = new System.Windows.Forms.TextBox();
- this.lblSplitSegNumbers = new System.Windows.Forms.Label();
- this.rbSegNumbers = new System.Windows.Forms.RadioButton();
- this.lblSplitEqualParts = new System.Windows.Forms.Label();
- this.nudParts = new System.Windows.Forms.NumericUpDown();
- this.rbEqualParts = new System.Windows.Forms.RadioButton();
- this.rbWordCount = new System.Windows.Forms.RadioButton();
- this.pWordCountOptions = new System.Windows.Forms.Panel();
- this.gbSplitOptions.SuspendLayout();
- ((System.ComponentModel.ISupportInitialize)(this.nudWords)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.nudPercent)).BeginInit();
- this.groupBox1.SuspendLayout();
- ((System.ComponentModel.ISupportInitialize)(this.nudParts)).BeginInit();
- this.pWordCountOptions.SuspendLayout();
- this.SuspendLayout();
- //
- // Banner
- //
- this.Banner.Size = new System.Drawing.Size(610, 64);
- //
- // gbSplitOptions
- //
- this.gbSplitOptions.Controls.Add(this.clbSegments);
- this.gbSplitOptions.Location = new System.Drawing.Point(3, 46);
- this.gbSplitOptions.Name = "gbSplitOptions";
- this.gbSplitOptions.Size = new System.Drawing.Size(318, 117);
- this.gbSplitOptions.TabIndex = 17;
- this.gbSplitOptions.TabStop = false;
- this.gbSplitOptions.Text = "&Don\'t include the following segment statuses in word count:";
- //
- // clbSegments
- //
- this.clbSegments.BackColor = System.Drawing.SystemColors.Control;
- this.clbSegments.BorderStyle = System.Windows.Forms.BorderStyle.None;
- this.clbSegments.CheckOnClick = true;
- this.clbSegments.FormattingEnabled = true;
- this.clbSegments.Location = new System.Drawing.Point(11, 19);
- this.clbSegments.Name = "clbSegments";
- this.clbSegments.Size = new System.Drawing.Size(223, 90);
- this.clbSegments.TabIndex = 18;
- //
- // chSplitCheckPercent
- //
- this.chSplitCheckPercent.AutoSize = true;
- this.chSplitCheckPercent.Location = new System.Drawing.Point(15, 6);
- this.chSplitCheckPercent.Name = "chSplitCheckPercent";
- this.chSplitCheckPercent.Size = new System.Drawing.Size(262, 17);
- this.chSplitCheckPercent.TabIndex = 13;
- this.chSplitCheckPercent.Text = "C&heck translation correspondence score (percent)";
- this.chSplitCheckPercent.UseVisualStyleBackColor = true;
- this.chSplitCheckPercent.CheckedChanged += new System.EventHandler(this.chSplitCheckPercent_CheckedChanged);
- //
- // lblSplitWordCount2
- //
- this.lblSplitWordCount2.AutoSize = true;
- this.lblSplitWordCount2.Location = new System.Drawing.Point(258, 39);
- this.lblSplitWordCount2.Name = "lblSplitWordCount2";
- this.lblSplitWordCount2.Size = new System.Drawing.Size(35, 13);
- this.lblSplitWordCount2.TabIndex = 5;
- this.lblSplitWordCount2.Text = "words";
- //
- // lblSplitWordCount
- //
- this.lblSplitWordCount.AutoSize = true;
- this.lblSplitWordCount.Location = new System.Drawing.Point(44, 39);
- this.lblSplitWordCount.Name = "lblSplitWordCount";
- this.lblSplitWordCount.Size = new System.Drawing.Size(134, 13);
- this.lblSplitWordCount.TabIndex = 3;
- this.lblSplitWordCount.Text = "&Max word count in split file:";
- //
- // label1
- //
- this.label1.AutoSize = true;
- this.label1.Location = new System.Drawing.Point(228, 26);
- this.label1.Name = "label1";
- this.label1.Size = new System.Drawing.Size(15, 13);
- this.label1.TabIndex = 16;
- this.label1.Text = "%";
- //
- // label2
- //
- this.label2.AutoSize = true;
- this.label2.Location = new System.Drawing.Point(47, 26);
- this.label2.Name = "label2";
- this.label2.Size = new System.Drawing.Size(104, 13);
- this.label2.TabIndex = 14;
- this.label2.Text = "Max score (&percent):";
- //
- // nudWords
- //
- this.nudWords.Increment = new decimal(new int[] {
- 100,
- 0,
- 0,
- 0});
- this.nudWords.Location = new System.Drawing.Point(183, 36);
- this.nudWords.Maximum = new decimal(new int[] {
- 10000,
- 0,
- 0,
- 0});
- this.nudWords.Minimum = new decimal(new int[] {
- 100,
- 0,
- 0,
- 0});
- this.nudWords.Name = "nudWords";
- this.nudWords.Size = new System.Drawing.Size(74, 20);
- this.nudWords.TabIndex = 4;
- this.nudWords.Value = new decimal(new int[] {
- 1000,
- 0,
- 0,
- 0});
- //
- // nudPercent
- //
- this.nudPercent.Increment = new decimal(new int[] {
- 10,
- 0,
- 0,
- 0});
- this.nudPercent.Location = new System.Drawing.Point(151, 23);
- this.nudPercent.Minimum = new decimal(new int[] {
- 30,
- 0,
- 0,
- 0});
- this.nudPercent.Name = "nudPercent";
- this.nudPercent.Size = new System.Drawing.Size(74, 20);
- this.nudPercent.TabIndex = 15;
- this.nudPercent.Value = new decimal(new int[] {
- 90,
- 0,
- 0,
- 0});
- //
- // groupBox1
- //
- this.groupBox1.Controls.Add(this.lblSplitSegNumbers2);
- this.groupBox1.Controls.Add(this.tbSegments);
- this.groupBox1.Controls.Add(this.lblSplitSegNumbers);
- this.groupBox1.Controls.Add(this.rbSegNumbers);
- this.groupBox1.Controls.Add(this.lblSplitEqualParts);
- this.groupBox1.Controls.Add(this.nudParts);
- this.groupBox1.Controls.Add(this.rbEqualParts);
- this.groupBox1.Controls.Add(this.rbWordCount);
- this.groupBox1.Controls.Add(this.lblSplitWordCount);
- this.groupBox1.Controls.Add(this.nudWords);
- this.groupBox1.Controls.Add(this.lblSplitWordCount2);
- this.groupBox1.Location = new System.Drawing.Point(11, 69);
- this.groupBox1.Name = "groupBox1";
- this.groupBox1.Size = new System.Drawing.Size(381, 141);
- this.groupBox1.TabIndex = 1;
- this.groupBox1.TabStop = false;
- this.groupBox1.Text = "Split Criterion";
- //
- // lblSplitSegNumbers2
- //
- this.lblSplitSegNumbers2.AutoSize = true;
- this.lblSplitSegNumbers2.Location = new System.Drawing.Point(257, 111);
- this.lblSplitSegNumbers2.Name = "lblSplitSegNumbers2";
- this.lblSplitSegNumbers2.Size = new System.Drawing.Size(112, 13);
- this.lblSplitSegNumbers2.TabIndex = 12;
- this.lblSplitSegNumbers2.Text = "(comma-separated list)";
- //
- // tbSegments
- //
- this.tbSegments.Location = new System.Drawing.Point(183, 108);
- this.tbSegments.Name = "tbSegments";
- this.tbSegments.Size = new System.Drawing.Size(74, 20);
- this.tbSegments.TabIndex = 11;
- //
- // lblSplitSegNumbers
- //
- this.lblSplitSegNumbers.AutoSize = true;
- this.lblSplitSegNumbers.Location = new System.Drawing.Point(31, 111);
- this.lblSplitSegNumbers.Name = "lblSplitSegNumbers";
- this.lblSplitSegNumbers.Size = new System.Drawing.Size(152, 13);
- this.lblSplitSegNumbers.TabIndex = 10;
- this.lblSplitSegNumbers.Text = "Segment numbers to split &after:";
- //
- // rbSegNumbers
- //
- this.rbSegNumbers.AutoSize = true;
- this.rbSegNumbers.Location = new System.Drawing.Point(12, 91);
- this.rbSegNumbers.Name = "rbSegNumbers";
- this.rbSegNumbers.Size = new System.Drawing.Size(145, 17);
- this.rbSegNumbers.TabIndex = 9;
- this.rbSegNumbers.Text = "Split by &segment numbers";
- this.rbSegNumbers.UseVisualStyleBackColor = true;
- this.rbSegNumbers.CheckedChanged += new System.EventHandler(this.rbSegNumbers_CheckedChanged);
- //
- // lblSplitEqualParts
- //
- this.lblSplitEqualParts.AutoSize = true;
- this.lblSplitEqualParts.Location = new System.Drawing.Point(44, 75);
- this.lblSplitEqualParts.Name = "lblSplitEqualParts";
- this.lblSplitEqualParts.Size = new System.Drawing.Size(130, 13);
- this.lblSplitEqualParts.TabIndex = 7;
- this.lblSplitEqualParts.Text = "&Number of parts to split to:";
- //
- // nudParts
- //
- this.nudParts.Location = new System.Drawing.Point(183, 72);
- this.nudParts.Minimum = new decimal(new int[] {
- 2,
- 0,
- 0,
- 0});
- this.nudParts.Name = "nudParts";
- this.nudParts.Size = new System.Drawing.Size(74, 20);
- this.nudParts.TabIndex = 8;
- this.nudParts.Value = new decimal(new int[] {
- 2,
- 0,
- 0,
- 0});
- //
- // rbEqualParts
- //
- this.rbEqualParts.AutoSize = true;
- this.rbEqualParts.Location = new System.Drawing.Point(12, 55);
- this.rbEqualParts.Name = "rbEqualParts";
- this.rbEqualParts.Size = new System.Drawing.Size(120, 17);
- this.rbEqualParts.TabIndex = 6;
- this.rbEqualParts.Text = "Split into &equal parts";
- this.rbEqualParts.UseVisualStyleBackColor = true;
- this.rbEqualParts.CheckedChanged += new System.EventHandler(this.rbEqualParts_CheckedChanged);
- //
- // rbWordCount
- //
- this.rbWordCount.AutoSize = true;
- this.rbWordCount.Checked = true;
- this.rbWordCount.Location = new System.Drawing.Point(12, 19);
- this.rbWordCount.Name = "rbWordCount";
- this.rbWordCount.Size = new System.Drawing.Size(115, 17);
- this.rbWordCount.TabIndex = 2;
- this.rbWordCount.TabStop = true;
- this.rbWordCount.Text = "Split by &word count";
- this.rbWordCount.UseVisualStyleBackColor = true;
- this.rbWordCount.CheckedChanged += new System.EventHandler(this.rbWordCount_CheckedChanged);
- //
- // pWordCountOptions
- //
- this.pWordCountOptions.Controls.Add(this.gbSplitOptions);
- this.pWordCountOptions.Controls.Add(this.chSplitCheckPercent);
- this.pWordCountOptions.Controls.Add(this.nudPercent);
- this.pWordCountOptions.Controls.Add(this.label2);
- this.pWordCountOptions.Controls.Add(this.label1);
- this.pWordCountOptions.Location = new System.Drawing.Point(8, 212);
- this.pWordCountOptions.Name = "pWordCountOptions";
- this.pWordCountOptions.Size = new System.Drawing.Size(384, 166);
- this.pWordCountOptions.TabIndex = 12;
- //
- // OptionsPage
- //
- this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
- this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
- this.Controls.Add(this.pWordCountOptions);
- this.Controls.Add(this.groupBox1);
- this.Name = "OptionsPage";
- this.Size = new System.Drawing.Size(610, 385);
- this.SetActive += new System.ComponentModel.CancelEventHandler(this.OptionsPage_SetActive);
- this.WizardNext += new Sdl.Utilities.SplitSDLXLIFF.Wizard.WizardPageEventHandler(this.OptionsPage_WizardNext);
- this.WizardPreNext += new Sdl.Utilities.SplitSDLXLIFF.Wizard.WizardPageEventHandler(this.OptionsPage_WizardPreNext);
- this.WizardBack += new Sdl.Utilities.SplitSDLXLIFF.Wizard.WizardPageEventHandler(this.OptionsPage_WizardBack);
- this.Controls.SetChildIndex(this.Banner, 0);
- this.Controls.SetChildIndex(this.groupBox1, 0);
- this.Controls.SetChildIndex(this.pWordCountOptions, 0);
- this.gbSplitOptions.ResumeLayout(false);
- ((System.ComponentModel.ISupportInitialize)(this.nudWords)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.nudPercent)).EndInit();
- this.groupBox1.ResumeLayout(false);
- this.groupBox1.PerformLayout();
- ((System.ComponentModel.ISupportInitialize)(this.nudParts)).EndInit();
- this.pWordCountOptions.ResumeLayout(false);
- this.pWordCountOptions.PerformLayout();
- this.ResumeLayout(false);
-
- }
-
- #endregion
-
- private System.Windows.Forms.GroupBox gbSplitOptions;
- private System.Windows.Forms.CheckedListBox clbSegments;
- private System.Windows.Forms.CheckBox chSplitCheckPercent;
- private System.Windows.Forms.Label lblSplitWordCount2;
- private System.Windows.Forms.Label lblSplitWordCount;
- private System.Windows.Forms.Label label1;
- private System.Windows.Forms.Label label2;
- private System.Windows.Forms.NumericUpDown nudWords;
- private System.Windows.Forms.NumericUpDown nudPercent;
- private System.Windows.Forms.GroupBox groupBox1;
- private System.Windows.Forms.Label lblSplitEqualParts;
- private System.Windows.Forms.NumericUpDown nudParts;
- private System.Windows.Forms.RadioButton rbEqualParts;
- private System.Windows.Forms.RadioButton rbWordCount;
- private System.Windows.Forms.Label lblSplitSegNumbers2;
- private System.Windows.Forms.TextBox tbSegments;
- private System.Windows.Forms.Label lblSplitSegNumbers;
- private System.Windows.Forms.RadioButton rbSegNumbers;
- private System.Windows.Forms.Panel pWordCountOptions;
- }
-}
diff --git a/SDLXLIFFSplitMerge/SplitSDLXLIFF/OptionsPage.cs b/SDLXLIFFSplitMerge/SplitSDLXLIFF/OptionsPage.cs
deleted file mode 100644
index ef0a7d51d9..0000000000
--- a/SDLXLIFFSplitMerge/SplitSDLXLIFF/OptionsPage.cs
+++ /dev/null
@@ -1,185 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Drawing;
-using System.Data;
-using System.Linq;
-using System.Text;
-using System.Windows.Forms;
-using Sdl.Utilities.SplitSDLXLIFF.Wizard;
-using Sdl.Utilities.SplitSDLXLIFF.Lib;
-
-namespace Sdl.Utilities.SplitSDLXLIFF
-{
- public partial class OptionsPage : InternalWizardPage
- {
- private const int _wordsDef = 1000;
- private const int _partsDef = 2;
- private const int _percDef = 90;
-
- public OptionsPage()
- {
- InitializeComponent();
- }
-
- private void bindSegments()
- {
- clbSegments.Items.Clear();
-
- clbSegments.Items.Add(TagSegStatus.getTagSegStatus(SegStatus.Draft));
- clbSegments.Items.Add(TagSegStatus.getTagSegStatus(SegStatus.Translated));
- clbSegments.Items.Add(TagSegStatus.getTagSegStatus(SegStatus.Locked));
- clbSegments.Items.Add(TagSegStatus.getTagSegStatus(SegStatus.RejectedTranslation));
- clbSegments.Items.Add(TagSegStatus.getTagSegStatus(SegStatus.RejectedSignOff));
- clbSegments.Items.Add(TagSegStatus.getTagSegStatus(SegStatus.ApprovedTranslation));
- clbSegments.Items.Add(TagSegStatus.getTagSegStatus(SegStatus.ApprovedSignOff));
- }
- private void bindOptions()
- {
- chSplitCheckPercent.Checked = AppOptions.splitOpts.IsPercent;
- rbWordCount.Checked = true;
- if (AppOptions.splitOpts.Criterion == SplitOptions.SplitType.EqualParts)
- rbEqualParts.Checked = true;
- if (AppOptions.splitOpts.Criterion == SplitOptions.SplitType.SegmentNumbers)
- rbSegNumbers.Checked = true;
- nudWords.Value = (AppOptions.splitOpts.WordsCount == 0 ? _wordsDef : AppOptions.splitOpts.WordsCount);
- nudParts.Value = (AppOptions.splitOpts.PartsCount == 0 ? _partsDef : AppOptions.splitOpts.PartsCount);
- nudPercent.Value = (AppOptions.splitOpts.PercMax == 0 ? _percDef : AppOptions.splitOpts.PercMax);
-
- tbSegments.Text = AppOptions.segmentIDs;
-
- // restore non-countable segments
- for (int i = 0; i < clbSegments.Items.Count; i++)
- if (AppOptions.splitOpts.SplitNonCountStatus.Contains(TagSegStatus.getTagSegStatus((string)clbSegments.Items[i])))
- clbSegments.SetItemChecked(i, true);
- else clbSegments.SetItemChecked(i, false);
-
- // rebind views
- bindCriterionView(AppOptions.splitOpts.Criterion);
- bindPercentView();
- }
- private void bindCriterionView(SplitOptions.SplitType criterion)
- {
- switch (criterion)
- {
- case SplitOptions.SplitType.WordsCount:
- nudWords.Enabled = true;
- nudParts.Enabled = false;
- tbSegments.Enabled = false;
- pWordCountOptions.Visible = true;
- break;
- case SplitOptions.SplitType.EqualParts:
- nudWords.Enabled = false;
- nudParts.Enabled = true;
- tbSegments.Enabled = false;
- pWordCountOptions.Visible = true;
- break;
- case SplitOptions.SplitType.SegmentNumbers:
- nudWords.Enabled = false;
- nudParts.Enabled = false;
- tbSegments.Enabled = true;
- pWordCountOptions.Visible = false;
- break;
- }
- }
- private void bindPercentView()
- {
- if (chSplitCheckPercent.Checked)
- nudPercent.Enabled = true;
- else nudPercent.Enabled = false;
- }
-
- private string validateInput()
- {
- if (rbSegNumbers.Checked)
- {
- AppOptions.splitOpts.setSegmentIDs(tbSegments.Text.Trim());
- if (AppOptions.splitOpts.SegmentIDs.Count < 1)
- return Properties.Resources.errSplitSegNumbers;
- }
- return "";
- }
-
- private void saveOptions()
- {
- AppOptions.splitOpts.IsPercent = chSplitCheckPercent.Checked;
- AppOptions.splitOpts.PercMax = int.Parse(nudPercent.Value.ToString());
- if (rbWordCount.Checked)
- {
- AppOptions.splitOpts.Criterion = SplitOptions.SplitType.WordsCount;
- AppOptions.splitOpts.WordsCount = int.Parse(nudWords.Value.ToString());
- }
- else if (rbEqualParts.Checked)
- {
- AppOptions.splitOpts.Criterion = SplitOptions.SplitType.EqualParts;
- AppOptions.splitOpts.PartsCount = int.Parse(nudParts.Value.ToString());
- }
- else if (rbSegNumbers.Checked)
- {
- AppOptions.splitOpts.Criterion = SplitOptions.SplitType.SegmentNumbers;
- AppOptions.segmentIDs = tbSegments.Text.Trim();
- AppOptions.splitOpts.setSegmentIDs(AppOptions.segmentIDs);
- }
-
- AppOptions.splitOpts.SplitNonCountStatus.Clear();
- for (int i = 0; i < clbSegments.Items.Count; i++ )
- if (clbSegments.GetItemCheckState(i) == CheckState.Checked)
- AppOptions.splitOpts.SplitNonCountStatus.Add(TagSegStatus.getTagSegStatus((string)clbSegments.Items[i]));
- }
-
- private void OptionsPage_SetActive(object sender, CancelEventArgs e)
- {
- this.Banner.Title = Properties.Resources.msgSplitOptsTitle;
- this.Banner.Subtitle = Properties.Resources.msgSplitOptsSubtitle;
- bindSegments();
-
- bindOptions();
-
- SetWizardButtons(WizardButtons.Back | WizardButtons.Finish);
- }
-
- private void OptionsPage_WizardNext(object sender, WizardPageEventArgs e)
- {
- saveOptions();
- }
- private void OptionsPage_WizardPreNext(object sender, WizardPageEventArgs e)
- {
- // validation
- string validMsg = validateInput();
- if (validMsg.Length == 0)
- this.AllowNext = true;
- else
- {
- this.AllowNext = false;
- MessageBox.Show(validMsg, Properties.Resources.SplitSettingsTitle);
- }
- }
-
- private void OptionsPage_WizardBack(object sender, WizardPageEventArgs e)
- {
- saveOptions();
- }
-
- // form functionality
- private void chSplitCheckPercent_CheckedChanged(object sender, EventArgs e)
- {
- bindPercentView();
- }
-
- private void rbWordCount_CheckedChanged(object sender, EventArgs e)
- {
-
- bindCriterionView(SplitOptions.SplitType.WordsCount);
- }
-
- private void rbEqualParts_CheckedChanged(object sender, EventArgs e)
- {
- bindCriterionView(SplitOptions.SplitType.EqualParts);
- }
-
- private void rbSegNumbers_CheckedChanged(object sender, EventArgs e)
- {
- bindCriterionView(SplitOptions.SplitType.SegmentNumbers);
- }
- }
-}
diff --git a/SDLXLIFFSplitMerge/SplitSDLXLIFF/OptionsPage.resx b/SDLXLIFFSplitMerge/SplitSDLXLIFF/OptionsPage.resx
deleted file mode 100644
index 1af7de150c..0000000000
--- a/SDLXLIFFSplitMerge/SplitSDLXLIFF/OptionsPage.resx
+++ /dev/null
@@ -1,120 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- text/microsoft-resx
-
-
- 2.0
-
-
- System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
\ No newline at end of file
diff --git a/SDLXLIFFSplitMerge/SplitSDLXLIFF/PerformMerge.Designer.cs b/SDLXLIFFSplitMerge/SplitSDLXLIFF/PerformMerge.Designer.cs
deleted file mode 100644
index 2e5c1a7b0b..0000000000
--- a/SDLXLIFFSplitMerge/SplitSDLXLIFF/PerformMerge.Designer.cs
+++ /dev/null
@@ -1,97 +0,0 @@
-namespace Sdl.Utilities.SplitSDLXLIFF
-{
- partial class PerformMerge
- {
- ///
- /// Required designer variable.
- ///
- private System.ComponentModel.IContainer components = null;
-
- ///
- /// Clean up any resources being used.
- ///
- /// true if managed resources should be disposed; otherwise, false.
- protected override void Dispose(bool disposing)
- {
- if (disposing && (components != null))
- {
- components.Dispose();
- }
- base.Dispose(disposing);
- }
-
- #region Component Designer generated code
-
- ///
- /// Required method for Designer support - do not modify
- /// the contents of this method with the code editor.
- ///
- private void InitializeComponent()
- {
- this.tbLog = new System.Windows.Forms.TextBox();
- this.pbProgress = new System.Windows.Forms.ProgressBar();
- this.btnOpenFolder = new System.Windows.Forms.Button();
- this.SuspendLayout();
- //
- // Banner
- //
- this.Banner.Size = new System.Drawing.Size(610, 64);
- //
- // tbLog
- //
- this.tbLog.BackColor = System.Drawing.Color.White;
- this.tbLog.Location = new System.Drawing.Point(6, 95);
- this.tbLog.Multiline = true;
- this.tbLog.Name = "tbLog";
- this.tbLog.ReadOnly = true;
- this.tbLog.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
- this.tbLog.Size = new System.Drawing.Size(594, 251);
- this.tbLog.TabIndex = 1;
- //
- // pbProgress
- //
- this.pbProgress.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(192)))), ((int)(((byte)(0)))));
- this.pbProgress.Location = new System.Drawing.Point(6, 71);
- this.pbProgress.Name = "pbProgress";
- this.pbProgress.Size = new System.Drawing.Size(594, 17);
- this.pbProgress.TabIndex = 7;
- //
- // btnOpenFolder
- //
- this.btnOpenFolder.Location = new System.Drawing.Point(472, 352);
- this.btnOpenFolder.Name = "btnOpenFolder";
- this.btnOpenFolder.Size = new System.Drawing.Size(128, 23);
- this.btnOpenFolder.TabIndex = 2;
- this.btnOpenFolder.Text = "&Open Target Folder";
- this.btnOpenFolder.UseVisualStyleBackColor = true;
- this.btnOpenFolder.Click += new System.EventHandler(this.btnOpenFolder_Click);
- //
- // PerformMerge
- //
- this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
- this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
- this.Controls.Add(this.tbLog);
- this.Controls.Add(this.pbProgress);
- this.Controls.Add(this.btnOpenFolder);
- this.Name = "PerformMerge";
- this.Size = new System.Drawing.Size(610, 385);
- this.SetActive += new System.ComponentModel.CancelEventHandler(this.PerformMerge_SetActive);
- this.PostSetActive += new System.ComponentModel.CancelEventHandler(this.PerformMerge_PostSetActive);
- this.WizardNewStart += new Sdl.Utilities.SplitSDLXLIFF.Wizard.WizardPageEventHandler(this.PerformMerge_WizardNewStart);
- this.Controls.SetChildIndex(this.Banner, 0);
- this.Controls.SetChildIndex(this.btnOpenFolder, 0);
- this.Controls.SetChildIndex(this.pbProgress, 0);
- this.Controls.SetChildIndex(this.tbLog, 0);
- this.ResumeLayout(false);
- this.PerformLayout();
-
- }
-
- #endregion
-
- private System.Windows.Forms.TextBox tbLog;
- private System.Windows.Forms.ProgressBar pbProgress;
- private System.Windows.Forms.Button btnOpenFolder;
-
- }
-}
diff --git a/SDLXLIFFSplitMerge/SplitSDLXLIFF/PerformMerge.cs b/SDLXLIFFSplitMerge/SplitSDLXLIFF/PerformMerge.cs
deleted file mode 100644
index b158279199..0000000000
--- a/SDLXLIFFSplitMerge/SplitSDLXLIFF/PerformMerge.cs
+++ /dev/null
@@ -1,134 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Drawing;
-using System.Data;
-using System.Linq;
-using System.Text;
-using System.Windows.Forms;
-using Sdl.Utilities.SplitSDLXLIFF.Wizard;
-using System.IO;
-using Sdl.Utilities.SplitSDLXLIFF.Lib;
-using System.Threading;
-
-namespace Sdl.Utilities.SplitSDLXLIFF
-{
- public partial class PerformMerge : InternalWizardPage
- {
- delegate void UpdateProgressDelegate(double value);
- delegate void UpdateLogDelegate(string value);
- delegate void UpdateButtonsDelegate(bool value);
-
- public PerformMerge()
- {
- InitializeComponent();
- }
-
- private void PerformMerge_SetActive(object sender, CancelEventArgs e)
- {
- this.Banner.Title = Properties.Resources.msgMergeTitle;
- this.Banner.Subtitle = Properties.Resources.msgMergeSubtitle;
-
- SetWizardButtons(WizardButtons.Start | WizardButtons.Close);
- changeButtonsView(false);
- EnableCancelButton(false);
- }
- private void PerformMerge_PostSetActive(object sender, CancelEventArgs e)
- {
- tbLog.Text = "";
- updateLog(Properties.Resources.msgMergeStart);
-
- // merge process >>
- Thread t = new Thread(new ThreadStart(MergeFiles));
- t.IsBackground = true;
- t.Start();
- // <<
- }
- private void PerformMerge_WizardNewStart(object sender, WizardPageEventArgs e)
- {
- AppOptions.RestoreOptions();
- AppOptions.splitOpts.SplitNonCountStatus = new List();
- AppOptions.splitOpts.SplitNonCountStatus.Add(SegStatus.ApprovedSignOff);
- AppOptions.splitOpts.SplitNonCountStatus.Add(SegStatus.ApprovedTranslation);
- }
- private void btnOpenFolder_Click(object sender, EventArgs e)
- {
- string myPath = Path.GetDirectoryName(AppOptions.mergeOrigFile);
- System.Diagnostics.Process prc = new System.Diagnostics.Process();
- prc.StartInfo.FileName = myPath;
- prc.Start();
- }
-
- private void MergeFiles()
- {
- bool isSuccess = false;
- try
- {
- // updateLog(string.Format("\r\nStart Time: {0}", DateTime.Now.ToLongTimeString()));
- updateLog(string.Format(Properties.Resources.msgMerging, AppOptions.mergeOrigFile));
- Application.DoEvents();
-
- FileMerger _merger = new FileMerger(AppOptions.mergeOrigFile, AppOptions.mergeInPath, AppOptions.mergeInfoFile);
- _merger.OnProgress += new FileMerger.OnProgressDelegate(updateProgress);
- _merger.Merge();
-
- if (_merger.FilesCount.HasValue)
- updateLog(string.Format(Properties.Resources.msgMergeScc, _merger.FilesCount.Value));
- else updateLog(Properties.Resources.errMergeNoFiles);
-
- isSuccess = true;
- // updateLog(string.Format("End Time: {0}\r\n", DateTime.Now.ToLongTimeString()));
- }
- catch (Exception ex)
- {
- updateLog(string.Format(Properties.Resources.errMergeUnexp, ex.Message));
- }
-
- updateProgress(100);
-
- if (isSuccess) MessageBox.Show(Properties.Resources.msbMergeFinished,
- Properties.Resources.MergeTitle,
- MessageBoxButtons.OK,
- MessageBoxIcon.Information);
- else MessageBox.Show(Properties.Resources.errMerge,
- Properties.Resources.MergeTitle,
- MessageBoxButtons.OK,
- MessageBoxIcon.Error);
-
- changeButtonsView(true);
- }
-
- private void updateProgress(double progress)
- {
- if (InvokeRequired)
- {
- // not in the UI thread, so need to call BeginInvoke
- BeginInvoke(new UpdateProgressDelegate(updateProgress), new object[] { progress });
- return;
- }
- pbProgress.Value = (int)progress;
- }
- private void updateLog(string msg)
- {
- if (InvokeRequired)
- {
- // not in the UI thread, so need to call BeginInvoke
- BeginInvoke(new UpdateLogDelegate(updateLog), new object[] { msg });
- return;
- }
- tbLog.AppendText(msg.Replace("\\r\\n", "\r\n"));
- }
- private void changeButtonsView(bool isEnabled)
- {
- if (InvokeRequired)
- {
- // not in the UI thread, so need to call BeginInvoke
- BeginInvoke(new UpdateButtonsDelegate(changeButtonsView), new object[] { isEnabled });
- return;
- }
- EnableCloseButton(isEnabled);
- EnableStartButton(isEnabled);
- btnOpenFolder.Enabled = isEnabled;
- }
- }
-}
diff --git a/SDLXLIFFSplitMerge/SplitSDLXLIFF/PerformMerge.resx b/SDLXLIFFSplitMerge/SplitSDLXLIFF/PerformMerge.resx
deleted file mode 100644
index 1af7de150c..0000000000
--- a/SDLXLIFFSplitMerge/SplitSDLXLIFF/PerformMerge.resx
+++ /dev/null
@@ -1,120 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- text/microsoft-resx
-
-
- 2.0
-
-
- System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
\ No newline at end of file
diff --git a/SDLXLIFFSplitMerge/SplitSDLXLIFF/PerformSplit.Designer.cs b/SDLXLIFFSplitMerge/SplitSDLXLIFF/PerformSplit.Designer.cs
deleted file mode 100644
index ae1552b551..0000000000
--- a/SDLXLIFFSplitMerge/SplitSDLXLIFF/PerformSplit.Designer.cs
+++ /dev/null
@@ -1,120 +0,0 @@
-namespace Sdl.Utilities.SplitSDLXLIFF
-{
- partial class PerformSplit
- {
- ///
- /// Required designer variable.
- ///
- private System.ComponentModel.IContainer components = null;
-
- ///
- /// Clean up any resources being used.
- ///
- /// true if managed resources should be disposed; otherwise, false.
- protected override void Dispose(bool disposing)
- {
- if (disposing && (components != null))
- {
- components.Dispose();
- }
- base.Dispose(disposing);
- }
-
- #region Component Designer generated code
-
- ///
- /// Required method for Designer support - do not modify
- /// the contents of this method with the code editor.
- ///
- private void InitializeComponent()
- {
- this.tbLog = new System.Windows.Forms.TextBox();
- this.btnOpenFolder = new System.Windows.Forms.Button();
- this.pbProgress = new System.Windows.Forms.ProgressBar();
- this.pbProgressFiles = new System.Windows.Forms.ProgressBar();
- this.lblProgress = new System.Windows.Forms.Label();
- this.SuspendLayout();
- //
- // Banner
- //
- this.Banner.Size = new System.Drawing.Size(610, 64);
- //
- // tbLog
- //
- this.tbLog.BackColor = System.Drawing.Color.White;
- this.tbLog.Location = new System.Drawing.Point(6, 132);
- this.tbLog.Multiline = true;
- this.tbLog.Name = "tbLog";
- this.tbLog.ReadOnly = true;
- this.tbLog.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
- this.tbLog.Size = new System.Drawing.Size(594, 214);
- this.tbLog.TabIndex = 1;
- //
- // btnOpenFolder
- //
- this.btnOpenFolder.Location = new System.Drawing.Point(472, 352);
- this.btnOpenFolder.Name = "btnOpenFolder";
- this.btnOpenFolder.Size = new System.Drawing.Size(128, 23);
- this.btnOpenFolder.TabIndex = 2;
- this.btnOpenFolder.Text = "&Open Target Folder...";
- this.btnOpenFolder.UseVisualStyleBackColor = true;
- this.btnOpenFolder.Click += new System.EventHandler(this.btnOpenFolder_Click);
- //
- // pbProgress
- //
- this.pbProgress.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(192)))), ((int)(((byte)(0)))));
- this.pbProgress.Location = new System.Drawing.Point(6, 109);
- this.pbProgress.Name = "pbProgress";
- this.pbProgress.Size = new System.Drawing.Size(594, 17);
- this.pbProgress.TabIndex = 4;
- //
- // pbProgressFiles
- //
- this.pbProgressFiles.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(192)))), ((int)(((byte)(0)))));
- this.pbProgressFiles.Location = new System.Drawing.Point(6, 85);
- this.pbProgressFiles.Name = "pbProgressFiles";
- this.pbProgressFiles.Size = new System.Drawing.Size(594, 18);
- this.pbProgressFiles.TabIndex = 5;
- //
- // lblProgress
- //
- this.lblProgress.AutoSize = true;
- this.lblProgress.Location = new System.Drawing.Point(6, 68);
- this.lblProgress.Name = "lblProgress";
- this.lblProgress.Size = new System.Drawing.Size(0, 13);
- this.lblProgress.TabIndex = 6;
- //
- // PerformSplit
- //
- this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
- this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
- this.Controls.Add(this.lblProgress);
- this.Controls.Add(this.pbProgressFiles);
- this.Controls.Add(this.tbLog);
- this.Controls.Add(this.btnOpenFolder);
- this.Controls.Add(this.pbProgress);
- this.Name = "PerformSplit";
- this.Size = new System.Drawing.Size(610, 385);
- this.SetActive += new System.ComponentModel.CancelEventHandler(this.PerformSplit_SetActive);
- this.PostSetActive += new System.ComponentModel.CancelEventHandler(this.PerformSplit_PostSetActive);
- this.WizardNewStart += new Sdl.Utilities.SplitSDLXLIFF.Wizard.WizardPageEventHandler(this.PerformSplit_WizardNewStart);
- this.Controls.SetChildIndex(this.pbProgress, 0);
- this.Controls.SetChildIndex(this.btnOpenFolder, 0);
- this.Controls.SetChildIndex(this.tbLog, 0);
- this.Controls.SetChildIndex(this.pbProgressFiles, 0);
- this.Controls.SetChildIndex(this.lblProgress, 0);
- this.Controls.SetChildIndex(this.Banner, 0);
- this.ResumeLayout(false);
- this.PerformLayout();
-
- }
-
- #endregion
-
- private System.Windows.Forms.TextBox tbLog;
- private System.Windows.Forms.Button btnOpenFolder;
- private System.Windows.Forms.ProgressBar pbProgress;
- private System.Windows.Forms.ProgressBar pbProgressFiles;
- private System.Windows.Forms.Label lblProgress;
- }
-}
diff --git a/SDLXLIFFSplitMerge/SplitSDLXLIFF/PerformSplit.cs b/SDLXLIFFSplitMerge/SplitSDLXLIFF/PerformSplit.cs
deleted file mode 100644
index f711eab251..0000000000
--- a/SDLXLIFFSplitMerge/SplitSDLXLIFF/PerformSplit.cs
+++ /dev/null
@@ -1,201 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Drawing;
-using System.Data;
-using System.Linq;
-using System.Text;
-using System.Windows.Forms;
-using Sdl.Utilities.SplitSDLXLIFF.Wizard;
-using Sdl.Utilities.SplitSDLXLIFF.Lib;
-using System.Threading;
-using System.IO;
-
-namespace Sdl.Utilities.SplitSDLXLIFF
-{
- public partial class PerformSplit : InternalWizardPage
- {
- delegate void UpdateProgressDelegate(double value);
- delegate void UpdateLogDelegate(string value);
- delegate void UpdateButtonsDelegate(bool value);
-
- private enum SplitStatus { Success, SuccessWithErrors, Fail };
-
- public PerformSplit()
- {
- InitializeComponent();
- }
-
- private void PerformSplit_SetActive(object sender, CancelEventArgs e)
- {
- this.Banner.Title = Properties.Resources.msgSplitTitle;
- this.Banner.Subtitle = Properties.Resources.msgSplitSubtitle;
-
- SetWizardButtons(WizardButtons.Start | WizardButtons.Close);
- changeButtonsView(false);
- EnableCancelButton(false);
- }
- private void PerformSplit_PostSetActive(object sender, CancelEventArgs e)
- {
- tbLog.Text = "";
- updateLog(Properties.Resources.msgSplitStart);
-
- // start split process >>
- Thread t = new Thread(new ThreadStart(SplitFiles));
- t.IsBackground = true;
- t.Start();
- // <<
- }
- private void PerformSplit_WizardNewStart(object sender, WizardPageEventArgs e)
- {
- AppOptions.RestoreOptions();
- AppOptions.splitOpts.SplitNonCountStatus = new List();
- AppOptions.splitOpts.SplitNonCountStatus.Add(SegStatus.ApprovedSignOff);
- AppOptions.splitOpts.SplitNonCountStatus.Add(SegStatus.ApprovedTranslation);
- }
- private void btnOpenFolder_Click(object sender, EventArgs e)
- {
- string myPath = AppOptions.splitOutPath;
- System.Diagnostics.Process prc = new System.Diagnostics.Process();
- prc.StartInfo.FileName = myPath;
- prc.Start();
- }
-
- private void SplitFiles()
- {
- SplitStatus status = SplitStatus.Success;
- FileParser _splitter;
- int filesCnt = AppOptions.splitInFiles.Count;
- try
- {
- for (int f = 0; f < filesCnt; f++)
- {
- updateLog(string.Format(Properties.Resources.msgSplitting, AppOptions.splitInFiles.ElementAt(f).Key));
- updateProgressFiles((f * 100) / filesCnt);
- updateProgressStatus(string.Format(Properties.Resources.msgSplittingFiles, f + 1, filesCnt));
-
- _splitter = new FileParser(AppOptions.splitInFiles.ElementAt(f).Key,
- AppOptions.splitInFiles.ElementAt(f).Value,
- AppOptions.splitOutPath);
- _splitter.OnProgress += new FileParser.OnProgressDelegate(updateProgress);
-
- _splitter.Split(AppOptions.splitOpts);
-
- if (_splitter.FilesCount.HasValue && _splitter.FilesCount.Value > 0)
- {
- updateLog(string.Format(Properties.Resources.msgSplitScc, _splitter.FilesCount.Value));
-
- #region write warnings
- if (AppOptions.splitOpts.Criterion == SplitOptions.SplitType.EqualParts
- && _splitter.FilesCount.Value < AppOptions.splitOpts.PartsCount)
- updateLog(Properties.Resources.msgSplitWarning);
- if (AppOptions.splitOpts.Criterion == SplitOptions.SplitType.SegmentNumbers
- && _splitter.Warnings.Count > 0)
- foreach (Warning wrn in _splitter.Warnings)
- updateLog(wrn.GetMessage());
- #endregion
-
- // save last split settings
- List settsList = new List(2);
- settsList.Add(_splitter.FilePath);
- settsList.Add(_splitter.OutPath);
- AppSettingsFile.SaveSettings(settsList);
- }
- else if (_splitter.FilesCount.HasValue && _splitter.FilesCount.Value == -1)
- {
- updateLog(Properties.Resources.msgSplitCorruptFile);
- status = SplitStatus.SuccessWithErrors;
- }
- else updateLog(Properties.Resources.errSplitNoFiles);
- }
- }
- catch (Exception ex)
- {
- updateLog(string.Format(Properties.Resources.errSplitUnexp, ex.Message));
- status = SplitStatus.Fail;
- }
-
- updateProgress(100);
- updateProgressFiles(100);
- updateProgressStatus(string.Format(Properties.Resources.msgSplitFinished, filesCnt));
-
- switch (status)
- {
- case SplitStatus.Success:
- MessageBox.Show(Properties.Resources.msbSplitFinished,
- Properties.Resources.SplitTitle,
- MessageBoxButtons.OK,
- MessageBoxIcon.Information);
- break;
- case SplitStatus.SuccessWithErrors:
- MessageBox.Show(Properties.Resources.msbSplitFinishedWithErr,
- Properties.Resources.SplitTitle,
- MessageBoxButtons.OK,
- MessageBoxIcon.Information);
- break;
- case SplitStatus.Fail:
- MessageBox.Show(Properties.Resources.errSplit,
- Properties.Resources.SplitTitle,
- MessageBoxButtons.OK,
- MessageBoxIcon.Error);
- break;
- }
-
- changeButtonsView(true);
- }
-
- private void updateProgressStatus(string progress)
- {
- if (InvokeRequired)
- {
- // not in the UI thread, so need to call BeginInvoke
- BeginInvoke(new UpdateLogDelegate(updateProgressStatus), new object[] { progress });
- return;
- }
- lblProgress.Text = progress;
- }
- private void updateProgressFiles(double progress)
- {
- if (InvokeRequired)
- {
- // not in the UI thread, so need to call BeginInvoke
- BeginInvoke(new UpdateProgressDelegate(updateProgressFiles), new object[] { progress });
- return;
- }
- pbProgressFiles.Value = (int)progress;
- }
- private void updateProgress(double progress)
- {
- if (InvokeRequired)
- {
- // not in the UI thread, so need to call BeginInvoke
- BeginInvoke(new UpdateProgressDelegate(updateProgress), new object[] { progress });
- return;
- }
- pbProgress.Value = (int)progress;
- }
- private void updateLog(string msg)
- {
- if (InvokeRequired)
- {
- // not in the UI thread, so need to call BeginInvoke
- BeginInvoke(new UpdateLogDelegate(updateLog), new object[] { msg });
- return;
- }
- tbLog.AppendText(msg.Replace("\\r\\n", "\r\n"));
- }
- private void changeButtonsView(bool isEnabled)
- {
- if (InvokeRequired)
- {
- // not in the UI thread, so need to call BeginInvoke
- BeginInvoke(new UpdateButtonsDelegate(changeButtonsView), new object[] { isEnabled });
- return;
- }
- EnableCloseButton(isEnabled);
- EnableStartButton(isEnabled);
- btnOpenFolder.Enabled = isEnabled;
- }
-
- }
-}
diff --git a/SDLXLIFFSplitMerge/SplitSDLXLIFF/PerformSplit.resx b/SDLXLIFFSplitMerge/SplitSDLXLIFF/PerformSplit.resx
deleted file mode 100644
index 1af7de150c..0000000000
--- a/SDLXLIFFSplitMerge/SplitSDLXLIFF/PerformSplit.resx
+++ /dev/null
@@ -1,120 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- text/microsoft-resx
-
-
- 2.0
-
-
- System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
\ No newline at end of file
diff --git a/SDLXLIFFSplitMerge/SplitSDLXLIFF/Properties/AssemblyInfo.cs b/SDLXLIFFSplitMerge/SplitSDLXLIFF/Properties/AssemblyInfo.cs
deleted file mode 100644
index 6a757716a3..0000000000
--- a/SDLXLIFFSplitMerge/SplitSDLXLIFF/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,31 +0,0 @@
-using System.Reflection;
-using System.Runtime.InteropServices;
-
-// General Information about an assembly is controlled through the following
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-[assembly: AssemblyTitle("SDLXLIFF Split/Merge")]
-[assembly: AssemblyProduct("SDLXLIFF Split/Merge")]
-[assembly: AssemblyCompany("SDL Limited as part of the RWS Holdings Plc group of companies")]
-[assembly: AssemblyCopyright("Copyright © 2011 - 2022 SDL Limited as part of the RWS Holdings Plc group of companies (\"RWS Group\").")]
-
-// Setting ComVisible to false makes the types in this assembly not visible
-// to COM components. If you need to access a type in this assembly from
-// COM, set the ComVisible attribute to true on that type.
-[assembly: ComVisible(false)]
-
-// The following GUID is for the ID of the typelib if this project is exposed to COM
-[assembly: Guid("a4006542-31cd-46cd-b659-ce03e5ae3f6b")]
-
-// Version information for an assembly consists of the following four values:
-//
-// Major Version
-// Minor Version
-// Build Number
-// Revision
-//
-// You can specify all the values or you can default the Build and Revision Numbers
-// by using the '*' as shown below:
-// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("4.0.0.0")]
-[assembly: AssemblyFileVersion("4.2.0.0")]
diff --git a/SDLXLIFFSplitMerge/SplitSDLXLIFF/Properties/Resources.Designer.cs b/SDLXLIFFSplitMerge/SplitSDLXLIFF/Properties/Resources.Designer.cs
deleted file mode 100644
index 7539b91a4d..0000000000
--- a/SDLXLIFFSplitMerge/SplitSDLXLIFF/Properties/Resources.Designer.cs
+++ /dev/null
@@ -1,567 +0,0 @@
-//------------------------------------------------------------------------------
-//
-// This code was generated by a tool.
-// Runtime Version:4.0.30319.42000
-//
-// Changes to this file may cause incorrect behavior and will be lost if
-// the code is regenerated.
-//
-//------------------------------------------------------------------------------
-
-namespace Sdl.Utilities.SplitSDLXLIFF.Properties {
- using System;
-
-
- ///
- /// A strongly-typed resource class, for looking up localized strings, etc.
- ///
- // This class was auto-generated by the StronglyTypedResourceBuilder
- // class via a tool like ResGen or Visual Studio.
- // To add or remove a member, edit your .ResX file then rerun ResGen
- // with the /str option, or rebuild your VS project.
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")]
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
- internal class Resources {
-
- private static global::System.Resources.ResourceManager resourceMan;
-
- private static global::System.Globalization.CultureInfo resourceCulture;
-
- [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
- internal Resources() {
- }
-
- ///
- /// Returns the cached ResourceManager instance used by this class.
- ///
- [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
- internal static global::System.Resources.ResourceManager ResourceManager {
- get {
- if (object.ReferenceEquals(resourceMan, null)) {
- global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Sdl.Utilities.SplitSDLXLIFF.Properties.Resources", typeof(Resources).Assembly);
- resourceMan = temp;
- }
- return resourceMan;
- }
- }
-
- ///
- /// Overrides the current thread's CurrentUICulture property for all
- /// resource lookups using this strongly typed resource class.
- ///
- [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
- internal static global::System.Globalization.CultureInfo Culture {
- get {
- return resourceCulture;
- }
- set {
- resourceCulture = value;
- }
- }
-
- ///
- /// Looks up a localized string similar to Files merge failed!.
- ///
- internal static string errMerge {
- get {
- return ResourceManager.GetString("errMerge", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Specified split files folder does not exist..
- ///
- internal static string errMergeFolderNotExist {
- get {
- return ResourceManager.GetString("errMergeFolderNotExist", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Specified Splitinfo file does not exist..
- ///
- internal static string errMergeInfoFileNotExist {
- get {
- return ResourceManager.GetString("errMergeInfoFileNotExist", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Failed.\r\nNo files were merged..
- ///
- internal static string errMergeNoFiles {
- get {
- return ResourceManager.GetString("errMergeNoFiles", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Please specify split files folder..
- ///
- internal static string errMergeNoFolder {
- get {
- return ResourceManager.GetString("errMergeNoFolder", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Please specify split info file..
- ///
- internal static string errMergeNoInfoFile {
- get {
- return ResourceManager.GetString("errMergeNoInfoFile", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Please specify original file..
- ///
- internal static string errMergeNoOrigFile {
- get {
- return ResourceManager.GetString("errMergeNoOrigFile", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Specified original file does not exist..
- ///
- internal static string errMergeOrigFileNotExist {
- get {
- return ResourceManager.GetString("errMergeOrigFileNotExist", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Failed.\r\nERROR: {0}.
- ///
- internal static string errMergeUnexp {
- get {
- return ResourceManager.GetString("errMergeUnexp", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Files split failed!.
- ///
- internal static string errSplit {
- get {
- return ResourceManager.GetString("errSplit", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Specified target folder does not exist..
- ///
- internal static string errSplitFolderNotExist {
- get {
- return ResourceManager.GetString("errSplitFolderNotExist", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Please specify file to split..
- ///
- internal static string errSplitNoFile {
- get {
- return ResourceManager.GetString("errSplitNoFile", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Failed.\r\nNo files were created.\r\n.
- ///
- internal static string errSplitNoFiles {
- get {
- return ResourceManager.GetString("errSplitNoFiles", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Please specify target folder..
- ///
- internal static string errSplitNoFolder {
- get {
- return ResourceManager.GetString("errSplitNoFolder", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Please indicate valid segment numbers to split the file by..
- ///
- internal static string errSplitSegNumbers {
- get {
- return ResourceManager.GetString("errSplitSegNumbers", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Failed.\r\nERROR: {0}.
- ///
- internal static string errSplitUnexp {
- get {
- return ResourceManager.GetString("errSplitUnexp", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Select SDLXLIFF file to split..
- ///
- internal static string FileDialogTitle {
- get {
- return ResourceManager.GetString("FileDialogTitle", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to No target languages selected..
- ///
- internal static string filesNoTargetLanguage {
- get {
- return ResourceManager.GetString("filesNoTargetLanguage", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Select Split Info file..
- ///
- internal static string InfoFileDialogTitle {
- get {
- return ResourceManager.GetString("InfoFileDialogTitle", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Trados Studio is not licensed on this computer. Activate it first before using this add-on..
- ///
- internal static string LicenseErrorMessage {
- get {
- return ResourceManager.GetString("LicenseErrorMessage", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Merge Settings..
- ///
- internal static string MergeSettingsTitle {
- get {
- return ResourceManager.GetString("MergeSettingsTitle", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Merge Task..
- ///
- internal static string MergeTitle {
- get {
- return ResourceManager.GetString("MergeTitle", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Finished merging files..
- ///
- internal static string msbMergeFinished {
- get {
- return ResourceManager.GetString("msbMergeFinished", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Finished splitting files..
- ///
- internal static string msbSplitFinished {
- get {
- return ResourceManager.GetString("msbSplitFinished", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Finished with errors..
- ///
- internal static string msbSplitFinishedWithErr {
- get {
- return ResourceManager.GetString("msbSplitFinishedWithErr", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to The list of files is empty..
- ///
- internal static string msgEmptyList {
- get {
- return ResourceManager.GetString("msgEmptyList", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Specify the path to the original SDLXLIFF file, the folder with split files as well as the path to the split info file..
- ///
- internal static string msgMergeFOptsSubtitle {
- get {
- return ResourceManager.GetString("msgMergeFOptsSubtitle", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Settings for Merge Task.
- ///
- internal static string msgMergeFOptsTitle {
- get {
- return ResourceManager.GetString("msgMergeFOptsTitle", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Task finished successfully.\r\nNumber of files merged: {0}.\r\n.
- ///
- internal static string msgMergeScc {
- get {
- return ResourceManager.GetString("msgMergeScc", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Files merge started...\r\n.
- ///
- internal static string msgMergeStart {
- get {
- return ResourceManager.GetString("msgMergeStart", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Please wait while the files are being merged..
- ///
- internal static string msgMergeSubtitle {
- get {
- return ResourceManager.GetString("msgMergeSubtitle", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Merging Files....
- ///
- internal static string msgMergeTitle {
- get {
- return ResourceManager.GetString("msgMergeTitle", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to \r\nMerging files to '{0}'...\r\n.
- ///
- internal static string msgMerging {
- get {
- return ResourceManager.GetString("msgMerging", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Failed.\r\nCannot process the file. The file is corrupt or contains more than one merged in Trados Studio SDLXLIFF files.\r\n.
- ///
- internal static string msgSplitCorruptFile {
- get {
- return ResourceManager.GetString("msgSplitCorruptFile", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Finished splitting files. Number of files processed: {0}..
- ///
- internal static string msgSplitFinished {
- get {
- return ResourceManager.GetString("msgSplitFinished", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Specify the files to split and indicate where the split files should be copied..
- ///
- internal static string msgSplitFOptsSubtitle {
- get {
- return ResourceManager.GetString("msgSplitFOptsSubtitle", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to File Management Settings for Split Task.
- ///
- internal static string msgSplitFOptsTitle {
- get {
- return ResourceManager.GetString("msgSplitFOptsTitle", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Specify the rules governing how the files should be split..
- ///
- internal static string msgSplitOptsSubtitle {
- get {
- return ResourceManager.GetString("msgSplitOptsSubtitle", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Options for Split Task.
- ///
- internal static string msgSplitOptsTitle {
- get {
- return ResourceManager.GetString("msgSplitOptsTitle", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Task finished successfully.\r\nNumber of split files created: {0}.\r\n.
- ///
- internal static string msgSplitScc {
- get {
- return ResourceManager.GetString("msgSplitScc", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to File split started...\r\n.
- ///
- internal static string msgSplitStart {
- get {
- return ResourceManager.GetString("msgSplitStart", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Please wait while the files are being split..
- ///
- internal static string msgSplitSubtitle {
- get {
- return ResourceManager.GetString("msgSplitSubtitle", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to \r\nSplitting '{0}'...\r\n.
- ///
- internal static string msgSplitting {
- get {
- return ResourceManager.GetString("msgSplitting", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Splitting files ({0} of {1}):.
- ///
- internal static string msgSplittingFiles {
- get {
- return ResourceManager.GetString("msgSplittingFiles", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Splitting Files....
- ///
- internal static string msgSplitTitle {
- get {
- return ResourceManager.GetString("msgSplitTitle", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to ATTENTION: The number of files created is different from the number of split parts you requested.\r\nThe Application does split of text within a segment, so in some cases, when the input file is too small, or the number of split parts too high, the number of files created may be less than indicated.\r\n.
- ///
- internal static string msgSplitWarning {
- get {
- return ResourceManager.GetString("msgSplitWarning", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to SDLXLIFF Split/Merge allows you to split large SDLXLIFF files and re-merge them back into one file after translation or review. Indicate the task you would like to perform..
- ///
- internal static string msgWelcomeSubtitle {
- get {
- return ResourceManager.GetString("msgWelcomeSubtitle", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Welcome to SDLXLIFF Split/Merge.
- ///
- internal static string msgWelcomeTitle {
- get {
- return ResourceManager.GetString("msgWelcomeTitle", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Select original SDLXLIFF file..
- ///
- internal static string OrigFileDialogTitle {
- get {
- return ResourceManager.GetString("OrigFileDialogTitle", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Error.
- ///
- internal static string PrerequisitesProblemTitle {
- get {
- return ResourceManager.GetString("PrerequisitesProblemTitle", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Select Trados Studio project file.
- ///
- internal static string ProjectFileDialogTitle {
- get {
- return ResourceManager.GetString("ProjectFileDialogTitle", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Select a path for split files..
- ///
- internal static string SplitFilesDialogDesc {
- get {
- return ResourceManager.GetString("SplitFilesDialogDesc", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Split Settings..
- ///
- internal static string SplitSettingsTitle {
- get {
- return ResourceManager.GetString("SplitSettingsTitle", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Split Task..
- ///
- internal static string SplitTitle {
- get {
- return ResourceManager.GetString("SplitTitle", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Select a target path..
- ///
- internal static string TargetPathDialogDesc {
- get {
- return ResourceManager.GetString("TargetPathDialogDesc", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to SDLXLIFF Split and Merge.
- ///
- internal static string Title {
- get {
- return ResourceManager.GetString("Title", resourceCulture);
- }
- }
- }
-}
diff --git a/SDLXLIFFSplitMerge/SplitSDLXLIFF/Properties/Resources.resx b/SDLXLIFFSplitMerge/SplitSDLXLIFF/Properties/Resources.resx
deleted file mode 100644
index 047a9baaca..0000000000
--- a/SDLXLIFFSplitMerge/SplitSDLXLIFF/Properties/Resources.resx
+++ /dev/null
@@ -1,288 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- text/microsoft-resx
-
-
- 2.0
-
-
- System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- Files merge failed!
-
-
- Specified split files folder does not exist.
-
-
- Specified Splitinfo file does not exist.
-
-
- Failed.\r\nNo files were merged.
-
-
- Please specify split files folder.
-
-
- Please specify split info file.
-
-
- Please specify original file.
-
-
- Specified original file does not exist.
-
-
- Failed.\r\nERROR: {0}
-
-
- Files split failed!
-
-
- Specified target folder does not exist.
-
-
- Please specify file to split.
-
-
- Failed.\r\nNo files were created.\r\n
-
-
- Please specify target folder.
-
-
- Failed.\r\nERROR: {0}
-
-
- Trados Studio is not licensed on this computer. Activate it first before using this add-on.
-
-
- Merge Task.
-
-
- Finished merging files.
-
-
- Finished splitting files.
-
-
- Specify the path to the original SDLXLIFF file, the folder with split files as well as the path to the split info file.
-
-
- Settings for Merge Task
-
-
- Task finished successfully.\r\nNumber of files merged: {0}.\r\n
-
-
- Files merge started...\r\n
-
-
- Please wait while the files are being merged.
-
-
- Merging Files...
-
-
- \r\nMerging files to '{0}'...\r\n
-
-
- Finished splitting files. Number of files processed: {0}.
-
-
- Specify the files to split and indicate where the split files should be copied.
-
-
- File Management Settings for Split Task
-
-
- Specify the rules governing how the files should be split.
-
-
- Options for Split Task
-
-
- Task finished successfully.\r\nNumber of split files created: {0}.\r\n
-
-
- File split started...\r\n
-
-
- Please wait while the files are being split.
-
-
- \r\nSplitting '{0}'...\r\n
-
-
- Splitting files ({0} of {1}):
-
-
- Splitting Files...
-
-
- SDLXLIFF Split/Merge allows you to split large SDLXLIFF files and re-merge them back into one file after translation or review. Indicate the task you would like to perform.
-
-
- Welcome to SDLXLIFF Split/Merge
-
-
- Error
-
-
- Split Task.
-
-
- Select SDLXLIFF file to split.
-
-
- Select Split Info file.
-
-
- Merge Settings.
-
-
- The list of files is empty.
-
-
- Select original SDLXLIFF file.
-
-
- Select Trados Studio project file
-
-
- Select a path for split files.
-
-
- Split Settings.
-
-
- Select a target path.
-
-
- ATTENTION: The number of files created is different from the number of split parts you requested.\r\nThe Application does split of text within a segment, so in some cases, when the input file is too small, or the number of split parts too high, the number of files created may be less than indicated.\r\n
-
-
- Please indicate valid segment numbers to split the file by.
-
-
- Finished with errors.
-
-
- Failed.\r\nCannot process the file. The file is corrupt or contains more than one merged in Trados Studio SDLXLIFF files.\r\n
-
-
- No target languages selected.
-
-
- SDLXLIFF Split and Merge
-
-
\ No newline at end of file
diff --git a/SDLXLIFFSplitMerge/SplitSDLXLIFF/Properties/Settings.Designer.cs b/SDLXLIFFSplitMerge/SplitSDLXLIFF/Properties/Settings.Designer.cs
deleted file mode 100644
index 0e4c3cfdf0..0000000000
--- a/SDLXLIFFSplitMerge/SplitSDLXLIFF/Properties/Settings.Designer.cs
+++ /dev/null
@@ -1,26 +0,0 @@
-//------------------------------------------------------------------------------
-//
-// This code was generated by a tool.
-// Runtime Version:4.0.30319.42000
-//
-// Changes to this file may cause incorrect behavior and will be lost if
-// the code is regenerated.
-//
-//------------------------------------------------------------------------------
-
-namespace Sdl.Utilities.SplitSDLXLIFF.Properties {
-
-
- [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.5.0.0")]
- internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
-
- private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
-
- public static Settings Default {
- get {
- return defaultInstance;
- }
- }
- }
-}
diff --git a/SDLXLIFFSplitMerge/SplitSDLXLIFF/Properties/Settings.settings b/SDLXLIFFSplitMerge/SplitSDLXLIFF/Properties/Settings.settings
deleted file mode 100644
index 39645652af..0000000000
--- a/SDLXLIFFSplitMerge/SplitSDLXLIFF/Properties/Settings.settings
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/SDLXLIFFSplitMerge/SplitSDLXLIFF/Properties/launchSettings.json b/SDLXLIFFSplitMerge/SplitSDLXLIFF/Properties/launchSettings.json
deleted file mode 100644
index 41f8178fc3..0000000000
--- a/SDLXLIFFSplitMerge/SplitSDLXLIFF/Properties/launchSettings.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "profiles": {
- "Profile 1": {
- "commandName": "Executable",
- "executablePath": "C:\\Program Files (x86)\\Trados\\Trados Studio\\Studio17\\SDLTradosStudio.exe"
- }
- }
-}
\ No newline at end of file
diff --git a/SDLXLIFFSplitMerge/SplitSDLXLIFF/Resources/FilterDefinition(C77668).ico b/SDLXLIFFSplitMerge/SplitSDLXLIFF/Resources/FilterDefinition(C77668).ico
deleted file mode 100644
index 28d54c5ec2..0000000000
Binary files a/SDLXLIFFSplitMerge/SplitSDLXLIFF/Resources/FilterDefinition(C77668).ico and /dev/null differ
diff --git a/SDLXLIFFSplitMerge/SplitSDLXLIFF/Sdl.Utilities.SplitSDLXLIFF.csproj b/SDLXLIFFSplitMerge/SplitSDLXLIFF/Sdl.Utilities.SplitSDLXLIFF.csproj
deleted file mode 100644
index be5c425811..0000000000
--- a/SDLXLIFFSplitMerge/SplitSDLXLIFF/Sdl.Utilities.SplitSDLXLIFF.csproj
+++ /dev/null
@@ -1,59 +0,0 @@
-
-
-
- net48
- false
- True
- $(MSBuildProgramFiles32)\Trados\Trados Studio\Studio18
- false
- ..\SdlCommunity.snk
-
-
-
- $(TradosFolder)\Sdl.Desktop.IntegrationApi.dll
-
-
- $(TradosFolder)\Sdl.Desktop.IntegrationApi.Extensions.dll
-
-
- $(TradosFolder)\Sdl.ProjectAutomation.Core.dll
-
-
- $(TradosFolder)\Sdl.ProjectAutomation.FileBased.dll
-
-
- $(TradosFolder)\Sdl.TranslationStudioAutomation.IntegrationApi.dll
-
-
- $(TradosFolder)\Sdl.TranslationStudioAutomation.IntegrationApi.Extensions.dll
-
-
-
-
-
-
-
-
-
-
-
-
-
- SettingsSingleFileGenerator
- Settings.Designer.cs
-
-
-
-
-
-
-
-
- 3.3.2
-
-
-
-
-
-
-
diff --git a/SDLXLIFFSplitMerge/SplitSDLXLIFF/Sdl.Utilities.SplitSDLXLIFF.sln b/SDLXLIFFSplitMerge/SplitSDLXLIFF/Sdl.Utilities.SplitSDLXLIFF.sln
deleted file mode 100644
index ae472bbfee..0000000000
--- a/SDLXLIFFSplitMerge/SplitSDLXLIFF/Sdl.Utilities.SplitSDLXLIFF.sln
+++ /dev/null
@@ -1,78 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 15
-VisualStudioVersion = 15.0.27130.2027
-MinimumVisualStudioVersion = 10.0.40219.1
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sdl.Utilities.SplitSDLXLIFF", "Sdl.Utilities.SplitSDLXLIFF.csproj", "{7C927446-0461-4FCC-8C1D-A309430E064C}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sdl.Utilities.SplitSDLXLIFF.Lib", "Lib\Sdl.Utilities.SplitSDLXLIFF.Lib.csproj", "{B4F2FDEE-3167-4295-A831-36B5BBBC9557}"
- ProjectSection(ProjectDependencies) = postProject
- {80614F74-563D-418E-9BF6-1294F73521C0} = {80614F74-563D-418E-9BF6-1294F73521C0}
- EndProjectSection
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sdl.Utilities.SplitSDLXLIFF.Wizard", "Wizard\Sdl.Utilities.SplitSDLXLIFF.Wizard.csproj", "{80614F74-563D-418E-9BF6-1294F73521C0}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sdl.Community.SDLXLIFFSplitMerge", "..\Sdl.Community.SDLXLIFFSplitMerge\Sdl.Community.SDLXLIFFSplitMerge.csproj", "{A1C821CC-0519-4542-85D6-5D3354F185D2}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|Any CPU = Debug|Any CPU
- Debug|Mixed Platforms = Debug|Mixed Platforms
- Debug|x86 = Debug|x86
- Release|Any CPU = Release|Any CPU
- Release|Mixed Platforms = Release|Mixed Platforms
- Release|x86 = Release|x86
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {7C927446-0461-4FCC-8C1D-A309430E064C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {7C927446-0461-4FCC-8C1D-A309430E064C}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {7C927446-0461-4FCC-8C1D-A309430E064C}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {7C927446-0461-4FCC-8C1D-A309430E064C}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
- {7C927446-0461-4FCC-8C1D-A309430E064C}.Debug|x86.ActiveCfg = Debug|Any CPU
- {7C927446-0461-4FCC-8C1D-A309430E064C}.Debug|x86.Build.0 = Debug|Any CPU
- {7C927446-0461-4FCC-8C1D-A309430E064C}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {7C927446-0461-4FCC-8C1D-A309430E064C}.Release|Any CPU.Build.0 = Release|Any CPU
- {7C927446-0461-4FCC-8C1D-A309430E064C}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
- {7C927446-0461-4FCC-8C1D-A309430E064C}.Release|Mixed Platforms.Build.0 = Release|Any CPU
- {7C927446-0461-4FCC-8C1D-A309430E064C}.Release|x86.ActiveCfg = Release|Any CPU
- {7C927446-0461-4FCC-8C1D-A309430E064C}.Release|x86.Build.0 = Release|Any CPU
- {B4F2FDEE-3167-4295-A831-36B5BBBC9557}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {B4F2FDEE-3167-4295-A831-36B5BBBC9557}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {B4F2FDEE-3167-4295-A831-36B5BBBC9557}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {B4F2FDEE-3167-4295-A831-36B5BBBC9557}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
- {B4F2FDEE-3167-4295-A831-36B5BBBC9557}.Debug|x86.ActiveCfg = Debug|Any CPU
- {B4F2FDEE-3167-4295-A831-36B5BBBC9557}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {B4F2FDEE-3167-4295-A831-36B5BBBC9557}.Release|Any CPU.Build.0 = Release|Any CPU
- {B4F2FDEE-3167-4295-A831-36B5BBBC9557}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
- {B4F2FDEE-3167-4295-A831-36B5BBBC9557}.Release|Mixed Platforms.Build.0 = Release|Any CPU
- {B4F2FDEE-3167-4295-A831-36B5BBBC9557}.Release|x86.ActiveCfg = Release|Any CPU
- {80614F74-563D-418E-9BF6-1294F73521C0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {80614F74-563D-418E-9BF6-1294F73521C0}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {80614F74-563D-418E-9BF6-1294F73521C0}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {80614F74-563D-418E-9BF6-1294F73521C0}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
- {80614F74-563D-418E-9BF6-1294F73521C0}.Debug|x86.ActiveCfg = Debug|Any CPU
- {80614F74-563D-418E-9BF6-1294F73521C0}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {80614F74-563D-418E-9BF6-1294F73521C0}.Release|Any CPU.Build.0 = Release|Any CPU
- {80614F74-563D-418E-9BF6-1294F73521C0}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
- {80614F74-563D-418E-9BF6-1294F73521C0}.Release|Mixed Platforms.Build.0 = Release|Any CPU
- {80614F74-563D-418E-9BF6-1294F73521C0}.Release|x86.ActiveCfg = Release|Any CPU
- {A1C821CC-0519-4542-85D6-5D3354F185D2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {A1C821CC-0519-4542-85D6-5D3354F185D2}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {A1C821CC-0519-4542-85D6-5D3354F185D2}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {A1C821CC-0519-4542-85D6-5D3354F185D2}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
- {A1C821CC-0519-4542-85D6-5D3354F185D2}.Debug|x86.ActiveCfg = Debug|Any CPU
- {A1C821CC-0519-4542-85D6-5D3354F185D2}.Debug|x86.Build.0 = Debug|Any CPU
- {A1C821CC-0519-4542-85D6-5D3354F185D2}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {A1C821CC-0519-4542-85D6-5D3354F185D2}.Release|Any CPU.Build.0 = Release|Any CPU
- {A1C821CC-0519-4542-85D6-5D3354F185D2}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
- {A1C821CC-0519-4542-85D6-5D3354F185D2}.Release|Mixed Platforms.Build.0 = Release|Any CPU
- {A1C821CC-0519-4542-85D6-5D3354F185D2}.Release|x86.ActiveCfg = Release|Any CPU
- {A1C821CC-0519-4542-85D6-5D3354F185D2}.Release|x86.Build.0 = Release|Any CPU
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
- GlobalSection(ExtensibilityGlobals) = postSolution
- SolutionGuid = {1AAA9E4D-8736-44A9-8C93-C2385F648FBD}
- EndGlobalSection
-EndGlobal
diff --git a/SDLXLIFFSplitMerge/SplitSDLXLIFF/Sdl.Utilities.SplitSDLXLIFF.vshost.exe.config b/SDLXLIFFSplitMerge/SplitSDLXLIFF/Sdl.Utilities.SplitSDLXLIFF.vshost.exe.config
deleted file mode 100644
index 7d7586c439..0000000000
--- a/SDLXLIFFSplitMerge/SplitSDLXLIFF/Sdl.Utilities.SplitSDLXLIFF.vshost.exe.config
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
diff --git a/SDLXLIFFSplitMerge/SplitSDLXLIFF/Sdl.Utilities.SplitSDLXLIFF.vshost.exe.manifest b/SDLXLIFFSplitMerge/SplitSDLXLIFF/Sdl.Utilities.SplitSDLXLIFF.vshost.exe.manifest
deleted file mode 100644
index d991980100..0000000000
--- a/SDLXLIFFSplitMerge/SplitSDLXLIFF/Sdl.Utilities.SplitSDLXLIFF.vshost.exe.manifest
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
diff --git a/SDLXLIFFSplitMerge/SplitSDLXLIFF/TargetLanguageForm.Designer.cs b/SDLXLIFFSplitMerge/SplitSDLXLIFF/TargetLanguageForm.Designer.cs
deleted file mode 100644
index 97ebb744f0..0000000000
--- a/SDLXLIFFSplitMerge/SplitSDLXLIFF/TargetLanguageForm.Designer.cs
+++ /dev/null
@@ -1,124 +0,0 @@
-namespace Sdl.Utilities.SplitSDLXLIFF
-{
- partial class TargetLanguageForm
- {
- ///
- /// Required designer variable.
- ///
- private System.ComponentModel.IContainer components = null;
-
- ///
- /// Clean up any resources being used.
- ///
- /// true if managed resources should be disposed; otherwise, false.
- protected override void Dispose(bool disposing)
- {
- if (disposing && (components != null))
- {
- components.Dispose();
- }
- base.Dispose(disposing);
- }
-
- #region Windows Form Designer generated code
-
- ///
- /// Required method for Designer support - do not modify
- /// the contents of this method with the code editor.
- ///
- private void InitializeComponent()
- {
- System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(TargetLanguageForm));
- this.lblTitle = new System.Windows.Forms.Label();
- this.pTargetLang = new System.Windows.Forms.Panel();
- this.btnCancel = new System.Windows.Forms.Button();
- this.btnOK = new System.Windows.Forms.Button();
- this.clbLangs = new System.Windows.Forms.CheckedListBox();
- this.pTargetLang.SuspendLayout();
- this.SuspendLayout();
- //
- // lblTitle
- //
- this.lblTitle.Location = new System.Drawing.Point(9, 9);
- this.lblTitle.Name = "lblTitle";
- this.lblTitle.Size = new System.Drawing.Size(231, 26);
- this.lblTitle.TabIndex = 6;
- this.lblTitle.Text = "Select the target languages for the find and replace operation:";
- //
- // pTargetLang
- //
- this.pTargetLang.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
- | System.Windows.Forms.AnchorStyles.Left)
- | System.Windows.Forms.AnchorStyles.Right)));
- this.pTargetLang.Controls.Add(this.btnCancel);
- this.pTargetLang.Controls.Add(this.btnOK);
- this.pTargetLang.Controls.Add(this.clbLangs);
- this.pTargetLang.Location = new System.Drawing.Point(12, 39);
- this.pTargetLang.Name = "pTargetLang";
- this.pTargetLang.Size = new System.Drawing.Size(231, 107);
- this.pTargetLang.TabIndex = 9;
- //
- // btnCancel
- //
- this.btnCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
- this.btnCancel.Location = new System.Drawing.Point(156, 84);
- this.btnCancel.Name = "btnCancel";
- this.btnCancel.Size = new System.Drawing.Size(75, 23);
- this.btnCancel.TabIndex = 10;
- this.btnCancel.Text = "Cancel";
- this.btnCancel.UseVisualStyleBackColor = true;
- this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click);
- //
- // btnOK
- //
- this.btnOK.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
- this.btnOK.Location = new System.Drawing.Point(75, 84);
- this.btnOK.Name = "btnOK";
- this.btnOK.Size = new System.Drawing.Size(75, 23);
- this.btnOK.TabIndex = 9;
- this.btnOK.Text = "&OK";
- this.btnOK.UseVisualStyleBackColor = true;
- this.btnOK.Click += new System.EventHandler(this.btnOK_Click);
- //
- // clbLangs
- //
- this.clbLangs.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
- | System.Windows.Forms.AnchorStyles.Left)
- | System.Windows.Forms.AnchorStyles.Right)));
- this.clbLangs.BackColor = System.Drawing.SystemColors.Control;
- this.clbLangs.CheckOnClick = true;
- this.clbLangs.FormattingEnabled = true;
- this.clbLangs.Location = new System.Drawing.Point(0, 0);
- this.clbLangs.Name = "clbLangs";
- this.clbLangs.Size = new System.Drawing.Size(231, 79);
- this.clbLangs.TabIndex = 6;
- this.clbLangs.SelectedIndexChanged += new System.EventHandler(this.clbLangs_SelectedIndexChanged);
- //
- // TargetLanguageForm
- //
- this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
- this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
- this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
- this.ClientSize = new System.Drawing.Size(255, 158);
- this.Controls.Add(this.pTargetLang);
- this.Controls.Add(this.lblTitle);
- this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
- this.MaximizeBox = false;
- this.MinimizeBox = false;
- this.MinimumSize = new System.Drawing.Size(250, 150);
- this.Name = "TargetLanguageForm";
- this.Text = "Project Target Languages";
- this.pTargetLang.ResumeLayout(false);
- this.ResumeLayout(false);
-
- }
-
- #endregion
-
- private System.Windows.Forms.Label lblTitle;
- private System.Windows.Forms.Panel pTargetLang;
- private System.Windows.Forms.CheckedListBox clbLangs;
- private System.Windows.Forms.Button btnCancel;
- private System.Windows.Forms.Button btnOK;
- }
-}
\ No newline at end of file
diff --git a/SDLXLIFFSplitMerge/SplitSDLXLIFF/TargetLanguageForm.cs b/SDLXLIFFSplitMerge/SplitSDLXLIFF/TargetLanguageForm.cs
deleted file mode 100644
index 0ceb1d4f27..0000000000
--- a/SDLXLIFFSplitMerge/SplitSDLXLIFF/TargetLanguageForm.cs
+++ /dev/null
@@ -1,82 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Data;
-using System.Drawing;
-using System.Linq;
-using System.Text;
-using System.Windows.Forms;
-using System.IO;
-
-namespace Sdl.Utilities.SplitSDLXLIFF
-{
- public partial class TargetLanguageForm : Form
- {
- private string _projPath;
-
- ///
- /// all languages in project
- ///
- public List AllLang
- { get; private set; }
- ///
- /// languages in project user selected
- ///
- public List SelectedLang
- { get; private set; }
-
- public TargetLanguageForm(string projecPath, Dictionary targetFiles)
- {
- InitializeComponent();
- OkButtonMode(false);
-
- _projPath = projecPath;
-
- AllLang = new List();
- foreach (KeyValuePair pair in targetFiles)
- if (!AllLang.Contains(pair.Value))
- AllLang.Add(pair.Value);
-
- SelectedLang = new List();
- bindLangs();
- }
-
- private void bindLangs()
- {
- AllLang.Sort();
- foreach (string lang in AllLang)
- clbLangs.Items.Add(lang);
- }
-
- private void OkButtonMode(bool isEnable)
- {
- btnOK.Enabled = isEnable;
- }
-
- private void btnOK_Click(object sender, EventArgs e)
- {
- for (int i = 0; i < clbLangs.Items.Count; i++)
- if (clbLangs.GetItemCheckState(i) == CheckState.Checked && !SelectedLang.Contains((string)clbLangs.Items[i]))
- SelectedLang.Add((string)clbLangs.Items[i]);
-
- this.Close();
- }
-
- private void btnCancel_Click(object sender, EventArgs e)
- {
- this.Close();
- }
-
- private void clbLangs_SelectedIndexChanged(object sender, EventArgs e)
- {
- bool isAnyChecked = false;
- for (int i = 0; i < clbLangs.Items.Count; i++)
- if (clbLangs.GetItemCheckState(i) == CheckState.Checked)
- {
- isAnyChecked = true;
- break;
- }
- OkButtonMode(isAnyChecked);
- }
- }
-}
diff --git a/SDLXLIFFSplitMerge/SplitSDLXLIFF/WelcomePage.Designer.cs b/SDLXLIFFSplitMerge/SplitSDLXLIFF/WelcomePage.Designer.cs
deleted file mode 100644
index 2cfa5cad4f..0000000000
--- a/SDLXLIFFSplitMerge/SplitSDLXLIFF/WelcomePage.Designer.cs
+++ /dev/null
@@ -1,119 +0,0 @@
-using Sdl.Utilities.SplitSDLXLIFF.Wizard;
-namespace Sdl.Utilities.SplitSDLXLIFF
-{
- partial class WelcomePage
- {
- ///
- /// Required designer variable.
- ///
- private System.ComponentModel.IContainer components = null;
-
- ///
- /// Clean up any resources being used.
- ///
- /// true if managed resources should be disposed; otherwise, false.
- protected override void Dispose(bool disposing)
- {
- if (disposing && (components != null))
- {
- components.Dispose();
- }
- base.Dispose(disposing);
- }
-
- #region Component Designer generated code
-
- ///
- /// Required method for Designer support - do not modify
- /// the contents of this method with the code editor.
- ///
- private void InitializeComponent()
- {
- this.gbSplitMerge = new System.Windows.Forms.GroupBox();
- this.rbMerge = new System.Windows.Forms.RadioButton();
- this.rbSplit = new System.Windows.Forms.RadioButton();
- this.linkLbl_Help = new System.Windows.Forms.LinkLabel();
- this.gbSplitMerge.SuspendLayout();
- this.SuspendLayout();
- //
- // Banner
- //
- this.Banner.MaximumSize = new System.Drawing.Size(1000, 64);
- this.Banner.MinimumSize = new System.Drawing.Size(30, 64);
- this.Banner.Size = new System.Drawing.Size(610, 64);
- //
- // gbSplitMerge
- //
- this.gbSplitMerge.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
- | System.Windows.Forms.AnchorStyles.Left)
- | System.Windows.Forms.AnchorStyles.Right)));
- this.gbSplitMerge.BackColor = System.Drawing.Color.Transparent;
- this.gbSplitMerge.Controls.Add(this.linkLbl_Help);
- this.gbSplitMerge.Controls.Add(this.rbMerge);
- this.gbSplitMerge.Controls.Add(this.rbSplit);
- this.gbSplitMerge.Location = new System.Drawing.Point(15, 71);
- this.gbSplitMerge.Name = "gbSplitMerge";
- this.gbSplitMerge.Size = new System.Drawing.Size(580, 300);
- this.gbSplitMerge.TabIndex = 1;
- this.gbSplitMerge.TabStop = false;
- this.gbSplitMerge.Text = "Task";
- //
- // rbMerge
- //
- this.rbMerge.AutoSize = true;
- this.rbMerge.Location = new System.Drawing.Point(10, 40);
- this.rbMerge.Name = "rbMerge";
- this.rbMerge.Size = new System.Drawing.Size(128, 17);
- this.rbMerge.TabIndex = 1;
- this.rbMerge.TabStop = true;
- this.rbMerge.Text = "&Merge SDLXLIFF files";
- this.rbMerge.UseVisualStyleBackColor = true;
- //
- // rbSplit
- //
- this.rbSplit.AutoSize = true;
- this.rbSplit.Location = new System.Drawing.Point(10, 17);
- this.rbSplit.Name = "rbSplit";
- this.rbSplit.Size = new System.Drawing.Size(118, 17);
- this.rbSplit.TabIndex = 0;
- this.rbSplit.TabStop = true;
- this.rbSplit.Text = "&Split SDLXLIFF files";
- this.rbSplit.UseVisualStyleBackColor = true;
- //
- // linkLbl_Help
- //
- this.linkLbl_Help.AutoSize = true;
- this.linkLbl_Help.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
- this.linkLbl_Help.Location = new System.Drawing.Point(538, 275);
- this.linkLbl_Help.Name = "linkLbl_Help";
- this.linkLbl_Help.Size = new System.Drawing.Size(33, 15);
- this.linkLbl_Help.TabIndex = 2;
- this.linkLbl_Help.TabStop = true;
- this.linkLbl_Help.Text = "Help";
- this.linkLbl_Help.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLbl_Help_LinkClicked);
- //
- // WelcomePage
- //
- this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
- this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
- this.Controls.Add(this.gbSplitMerge);
- this.Name = "WelcomePage";
- this.Size = new System.Drawing.Size(610, 385);
- this.SetActive += new System.ComponentModel.CancelEventHandler(this.WelcomePage_SetActive);
- this.WizardNext += new Sdl.Utilities.SplitSDLXLIFF.Wizard.WizardPageEventHandler(this.WelcomePage_WizardNext);
- this.Controls.SetChildIndex(this.gbSplitMerge, 0);
- this.Controls.SetChildIndex(this.Banner, 0);
- this.gbSplitMerge.ResumeLayout(false);
- this.gbSplitMerge.PerformLayout();
- this.ResumeLayout(false);
-
- }
-
- #endregion
-
- private System.Windows.Forms.GroupBox gbSplitMerge;
- private System.Windows.Forms.RadioButton rbMerge;
- private System.Windows.Forms.RadioButton rbSplit;
- private System.Windows.Forms.LinkLabel linkLbl_Help;
- }
-}
diff --git a/SDLXLIFFSplitMerge/SplitSDLXLIFF/WelcomePage.cs b/SDLXLIFFSplitMerge/SplitSDLXLIFF/WelcomePage.cs
deleted file mode 100644
index 97b88a6490..0000000000
--- a/SDLXLIFFSplitMerge/SplitSDLXLIFF/WelcomePage.cs
+++ /dev/null
@@ -1,56 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Drawing;
-using System.Data;
-using System.Diagnostics;
-using System.Linq;
-using System.Text;
-using System.Windows.Forms;
-using Sdl.Utilities.SplitSDLXLIFF.Wizard;
-
-namespace Sdl.Utilities.SplitSDLXLIFF
-{
- public partial class WelcomePage : InternalWizardPage
- {
-
- public WelcomePage()
- {
- InitializeComponent();
-
- this.Banner.Title = Properties.Resources.msgWelcomeTitle;
- this.Banner.Subtitle = Properties.Resources.msgWelcomeSubtitle;
-
- rbSplit.Checked = true;
- }
-
- private void WelcomePage_SetActive(object sender, CancelEventArgs e)
- {
- SetWizardButtons(WizardButtons.Next);
- EnableCancelButton(true);
- }
-
- private void WelcomePage_WizardNext(object sender, WizardPageEventArgs e)
- {
- for (int i = GetWizard().Pages.Count; i > 2; i--)
- GetWizard().Pages.RemoveAt(GetWizard().Pages.Count - 1);
-
- if (rbSplit.Checked)
- {
- AppOptions.isMerge = false;
- GetWizard().Pages.Add(new OptionsPage());
- GetWizard().Pages.Add(new PerformSplit());
- }
- else
- {
- AppOptions.isMerge = true;
- GetWizard().Pages.Add(new PerformMerge());
- }
- }
-
- private void linkLbl_Help_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
- {
- Process.Start(new ProcessStartInfo("https://community.rws.com/product-groups/trados-portfolio/rws-appstore/w/wiki/3166/sdlxliff-split-merge"));
- }
- }
-}
diff --git a/SDLXLIFFSplitMerge/SplitSDLXLIFF/WelcomePage.resx b/SDLXLIFFSplitMerge/SplitSDLXLIFF/WelcomePage.resx
deleted file mode 100644
index 1af7de150c..0000000000
--- a/SDLXLIFFSplitMerge/SplitSDLXLIFF/WelcomePage.resx
+++ /dev/null
@@ -1,120 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- text/microsoft-resx
-
-
- 2.0
-
-
- System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
\ No newline at end of file
diff --git a/SDLXLIFFSplitMerge/SplitSDLXLIFF/WizardPage.Designer.cs b/SDLXLIFFSplitMerge/SplitSDLXLIFF/WizardPage.Designer.cs
deleted file mode 100644
index 21a79b4394..0000000000
--- a/SDLXLIFFSplitMerge/SplitSDLXLIFF/WizardPage.Designer.cs
+++ /dev/null
@@ -1,46 +0,0 @@
-namespace Sdl.Utilities.SplitSDLXLIFF
-{
- partial class WizardPage
- {
- ///
- /// Required designer variable.
- ///
- private System.ComponentModel.IContainer components = null;
-
- ///
- /// Clean up any resources being used.
- ///
- /// true if managed resources should be disposed; otherwise, false.
- protected override void Dispose(bool disposing)
- {
- if (disposing && (components != null))
- {
- components.Dispose();
- }
- base.Dispose(disposing);
- }
-
- #region Windows Form Designer generated code
-
- ///
- /// Required method for Designer support - do not modify
- /// the contents of this method with the code editor.
- ///
- private void InitializeComponent()
- {
- System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(WizardPage));
- //
- // Wizard
- //
- this.components = new System.ComponentModel.Container();
- this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
- this.ClientSize = new System.Drawing.Size(610, 385);
- this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
- this.MaximizeBox = false;
- this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
- this.Text = "Wizard";
- }
-
- #endregion
- }
-}
\ No newline at end of file
diff --git a/SDLXLIFFSplitMerge/SplitSDLXLIFF/WizardPage.cs b/SDLXLIFFSplitMerge/SplitSDLXLIFF/WizardPage.cs
deleted file mode 100644
index a865a2efc5..0000000000
--- a/SDLXLIFFSplitMerge/SplitSDLXLIFF/WizardPage.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-using Sdl.Utilities.SplitSDLXLIFF.Wizard;
-using System.Collections.Generic;
-using Sdl.Utilities.SplitSDLXLIFF.Helpers;
-using Sdl.Utilities.SplitSDLXLIFF.Lib;
-
-namespace Sdl.Utilities.SplitSDLXLIFF
-{
- public partial class WizardPage : WizardSheet
- {
- public WizardPage(bool isStudioPlugin)
- {
- InitializeComponent();
-
- this.Pages.Add(new WelcomePage());
- this.Pages.Add(new FileOptionsPage(isStudioPlugin));
- this.Text = Constants.SDLXLIFFName;
-
- AppOptions.splitOpts.SplitNonCountStatus = new List();
- AppOptions.splitOpts.SplitNonCountStatus.Add(SegStatus.ApprovedSignOff);
- AppOptions.splitOpts.SplitNonCountStatus.Add(SegStatus.ApprovedTranslation);
-
- }
- }
-}
diff --git a/SDLXLIFFSplitMerge/SplitSDLXLIFF/WizardPage.resx b/SDLXLIFFSplitMerge/SplitSDLXLIFF/WizardPage.resx
deleted file mode 100644
index a08885e4d2..0000000000
--- a/SDLXLIFFSplitMerge/SplitSDLXLIFF/WizardPage.resx
+++ /dev/null
@@ -1,573 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- text/microsoft-resx
-
-
- 2.0
-
-
- System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- True
-
-
-
-
- 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
- Pv8tyUL/CYQN/wCDAB+cfWz///72//z37//89+///Pbu//v27P/79er/+/Tp//v06P/78+f/+vPm//vx
- 4f+Qb17/AAAAAAAAAAAAAAAAAAAAAAB/ABIHiAr9N9VS/zHKSv841FP/CYkN/8nlyVmffm3////4//z4
- 8f/8+PH//Pfw//z27v/79uz/+/Xr//v06v/79Oj//PTo//3x5P+RcF//AAAAAAAAAADNvrf/1MW+/7C7
- nv8SmBn/Qd1h/zvUWf9C3mP/DpQT/7e7pP/DrKL////8//369f/9+vX//fn0//z48v/89/D//Pbu//z2
- 7f/79ev/+/Xr//zy5f+TcV//AAAAAAAAAAByol//S69D/zmZMv8KlA//S+Vx/0bfaf9L5XL/FqQg/xyU
- Gv8WmhP/gs6B//379//9+/f//fr2//359P/8+PH//Pfw//z27v/79u3/+/bs//z05v+VcmH/AAAAAAAA
- AAC6qJz/W7BX/yCwMP9a9oj/Uux9/1DpeP9U7Xz/XfiM/0XcZ/8zmCv/+/37//7+/f/+/v3//v37//37
- +P/9+vX//fnz//z48v/89/D//Pfv//306f+Vc2H/AAAAAAAAAACcfWz//v71/228Z/8ftC3/Zv+a/132
- jP9h+pH/Vu+A/yKgIP+3sJn//////////////////v39//78+v/9+vb//fn0//z48v/8+PH//Pjw//32
- 6/+XdGP/AAAAAP///0yffm3////4//z48f+A1Xv/GrIl/3L/rP9u/6X/DqMM/9Hsx/+siHf/////////
- /////////v7+//79+//9+/f//vv2//769v/9+vP//fry//317P+YdWP/AAAAAAAAAACjgHD////8//36
- 9f/9+vX/lduQ/xu1JP8ZtSX/ruGk//358/+tiXj//////////////////////4fVhv+l3KH/9vLt//Ps
- 5//s5N//4dbQ/8m1qf+NaFftAAAAAAAAAACjgXH////+//379//9+/f//fr2/6fdof+G0oH//Pfw//35
- 9P+uiXj/////////////////sOew/xm1Jf8atCT/hsl9/9vOxv+ohGr/onpc/4ZgT/OQZ1ZBAAAAAAAA
- AACohXT///////7+/f/+/v3//v37//37+P/9+vX//fnz//369/+ui3r////////////T8tP/DqQN/27/
- pf9y/6z/GrMl/4HSb//13rj/m3Rc85ZpXDoAAAAAAAAAAAAAAACohnX//////////////////v39//78
- +v/9+vb//fn0//369/+vi3j//////+z57P8ioSL/Vu+A/2H6kf9d9oz/Zv+a/x+1Lf9QmD/8lHBcQAAA
- AAAAAAAAAAAAAAAAAACsiHf//////////////////v7+//79+//9+/f//vv2//78+f+uiXn/+/37/0Ks
- Qv9F3Gf/XfiM/1TtfP9Q6Xj/Uux9/1r2iP8gsDD/AIUApABmAAUAAAAAAAAAAAAAAACtiXj/////////
- //////////////79/P/6+PX/9vLt//fz7/+vjHr/gs6C/x2jHf8dlh3/FqQg/0vlcv9G32n/S+Vx/wqU
- D/8AggDFAJQAtACaAGUAAAAAAAAAAAAAAACuiXj///////////////////////79/P/Ktar/nHpp/+jf
- 2v+edmH/zLas/8u1qf+xrZX/DpQT/0LeY/871Fn/Qd1h/xKYGf8AiwAqAAAAAAAAAAAAAAAAAAAAAAAA
- AACui3r//////////////////v7+//79+//Vx77/zLWj//725v/46tH/1sa8+pZpXDoAhgATCYkN/zjU
- U/8xykr/N9VS/weICv0AfwASAAAAAAAAAAAAAAAAAAAAAAAAAACvi3j//////////////////v7+//78
- +v/ZysP/xKOE/+zIjv+Xb1jylm5dPwAAAAAAgwAfCYQN/y3JQv8pxD7/JLw2/wB2AMQAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAACuiXn///////7+/v/+/v7//v38//78+f/azMT/u5Np/5x0W/KbbV84AAAAAAAA
- AAAAcQBhDpEV/yHBMv8duSz/AnUD+ACBADkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACvjHr/////////
- ///////////////////RvrT/i2NR8Z1zYD0AAAAAAAAAAAB6ADIBawDrEqMb/wqJD/8AaADhAHkAQwAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACedmH/sY9//6+Ne/+ui3z/q4l5/6iHd/+WcmHlmmtYNgAA
- AAAAAAAAAHIAQwBoAM0AZgDDAGAAmgBmAFUASAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wD+AAEA/AABAPgAAQDwQAEA8AABAIAA
- AQCAAAEAgAABAIAAAQCAAAEAgAABAIAAAwCAAAcAgAAPAIAABwCAAAMAgAAfAIAMHwCAHB8AgDg/AIB4
- fwCA8P8A////ACgAAAAgAAAAQAAAAAEAIAAAAAAAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEYVD/hmFQ/4Rg
- T/+EYE//g2BP/4NgT/+DYE//gl9O/4FeTf+AXk3/gF1O/39dTP9/XU3/flxL/35cTP99W0v/fl1N/3tb
- S/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMOx
- qf/67OD/9ujb//bo2//y3sz/8t7M//LfzP/y3cv/8tzK//Lcx//z28f/8drE//HZwv/y2MD/8Ne+//HW
- vf/12b3/fFtL/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGgAMQBl
- AHYAZgClMHkq/ziHNv+807T/+/fw//rz6f/68+j/+vTo//ry5//68eb/+vLl//ry5P/58eL/+fDg//nv
- 3v/47Nv/+e3Z//TcxP97Wkn/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGoAQwBo
- AM0AaAH+Bn8J/wNzBP8SbhH/xt3B//z27P/89uz//Pbs//v17P/79ez/+/Xq//v06f/79Oj/+/Po//vz
- 5//68ub/+vLm//rx4v/68OH/89/J/3xbSv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABu
- AHEAaQD9DpMV/xezJP8VqyD/AGgA9qCmiv////f//Pbu//z27v/89u7//Pbt//z27f/79ez/+/Xq//v0
- 6v/79On/+/Po//vz5//68+b/+vLl//vz5P/14Mz/fVxL/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAdwBLAW4B/RquKP8fuS//ILsw/w6QFf8AbwCXimRT////+v/8+PH//Pjx//z48f/8+PD//Pfw//z3
- 7//89u3/+/Xs//v16//79er/+/Tp//v06P/78+f//PXo//bj0v+AXUv/AAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAByANIYoyT/JsA5/ya/Of8pwz3/CYYP/wB3AFqLZVP////7//358v/9+fL//Pjy//z4
- 8v/8+PL//Pfw//z37v/89u3//Pbt//v17P/79ev/+/Tp//v06P/89On/9eTT/39cTf8AAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAfwAqAXkB/i/JRv8txkT/LsdF/zDLSf8Jhw3/AH0AR49mVf///////fr1//36
- 9f/9+vX//fr1//359f/9+fP//Pjx//z38P/89+///Pbu//z27f/79ev/+/Xq//z16//15NP/gl1M/wAA
- AAAAAAAAhGFQ/4ZhUP+EYE//hGBP/5S6jP8MjxL/NtFS/zXOT/81zlD/OdNV/wuNEP+fv5b/kWhV////
- ///9+/j//vz5//37+P/9+/j//fv3//369f/9+fP//Pjy//z48f/89/D//Pfv//z27f/79ez//Pft//Xl
- 1v+DXk3/AAAAAAAAAACFYVD/+uzg//bo2//26Nv/lMCD/xKbHP8/2V7/PNVb/z3WW/9A2mD/EJcX/5y9
- f//Kt6z///////7+/f/+/v3//v39//79/P/+/fv//fv5//369v/9+vX//fn0//z48v/8+PH//Pfv//z2
- 7v/9+O//9+bW/4RfTv8AAAAAAAAAAIZhUP+h1Jn/ZLZd/16yWP83mzP/EJoY/0fgav9E3Wb/Rd5n/0fh
- bP8YpSP/HJAa/x6OF/8lnyX/hMiE///////+/v7//v7+//79/f/+/Pn//fv3//369v/9+fT//fnz//z4
- 8f/89/D//Pfv//337//25tj/hWFO/wAAAAAAAAAAh2NR//L46v88ojj/AowD/yu+Qf8zx0z/TOZz/0zl
- cv9M5XP/Tud2/0LaZP890l3/E6Mc/zakNv/4/Pj////////////+/v7//v7+//78+v/9+/j//fr2//36
- 9f/9+fP//Pjy//z48f/89+///ffw//fn2f+GYVD/AAAAAAAAAACIYlH////3//Hy5P9Dqz//FaYf/1bv
- gv9U7X//VO1+/1Ttf/9V7n//WfKF/znRV/8Rkw7/4vXi/////////////////////////////v38/9Tt
- z/9ywm///v34///99//++/f//fjz//n17f/18Oj/6dbI/4diUPwAAAAAAAAAAIpkU/////r//Pjx//T0
- 6f9KsUf/Eqgb/1z1iv9c9Yv/XPWK/173jv9R6nr/BJkE/6HDkf//////////////////////////////
- ///w+O7/J6cm/wabCf9Tq0r/5t7Y/9nLxP/Vxb7/yLat/7ukmv+XdWX/hmJRtgAAAAAAAAAAi2VT////
- +//9+fL//fny//b27P9RuE7/EasZ/2P8lf9m/5r/Zf6X/wqjDv+Fz33/mm9c////////////////////
- /////////v7+/1G6UP8euC3/aP+c/xCqF/9DoTj/3NPK/6N/Z/+wiGb/k2xU/4pkU8SGX0sOAAAAAAAA
- AACPZlX///////369f/9+vX//fr1//n48f9YvFb/EKoX/2j/nP8euC3/ULlM//v17f+bcFv/////////
- //////////////////+H1Yf/CqIO/2X+l/9m/5r/Y/yV/xGrGf9RtUf/9OG2/8Webv+JY1PBjF1fDAAA
- AAAAAAAAAAAAAJFoVf///////fv4//78+f/9+/j//fv4//r59P9gvV3/BpwJ/yenJf/u8+T//Pfw/5xy
- Xf//////////////////////u+e7/wSaBP9R6nr/XveO/1z1iv9c9Yv/XPWK/xKoG/8+niz/xLiu6Itk
- Tg4AAAAAAAAAAAAAAAAAAAAAlGxX///////+/v3//v79//79/f/+/fz//v37//z7+P9xwG7/0uvM//35
- 9P/8+PL/nHJc/////////////////+L14v8VmBX/OdFX/1nyhf9V7n//VO1//1Ttfv9U7X//Vu+C/xWm
- H/8EjwLAAKIACwAAAAAAAAAAAAAAAAAAAACVa1n///////7+/v///////v7+//7+/v/+/f3//vz5//37
- 9//9+vb//fn0//358/+dcV3///////7+/v/4/Pj/NqM2/xOjHP890l3/Qtpk/07ndv9M5XP/TOVy/0zm
- c/8zx0z/K75B/wKMA/8AhwDCAIkADQAAAAAAAAAAAAAAAJhuW///////////////////////////////
- ///+/fz//fv5//379//9+vb//fn0/5txW////////v79/4TIhP8lniX/Kp8q/x2SHf8YpSP/R+Fs/0Xe
- Z/9E3Wb/R+Bq/xCaGP8AgQDHAIsAnwCNAJkAjQBeAAAAAAAAAAAAAAAAmXBa////////////////////
- //////////////79/P///fn//v35///9+f///ff/nHFd////////////////////////////pdWl/xCX
- F/9A2mD/PdZb/zzVW/8/2V7/Epsc/wCEAGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACab1z/////////
- /////////////////////////v38///9+//m3Nf/2cvC/+DTzP+acV3/nXJf/5pxXf+acV3/mHBc/5hv
- Wv+bt43/C40Q/znTVf81zlD/Nc5P/zbRUv8MjxL/AIAAVwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJtw
- W//////////////////////////////////+/fz//////7uilf+hgHL/p4l4/6WDb/+jf2f/sIhm/5Ns
- VP+KZFPEhl9LDgB9AEcJhw3/MMtJ/y7HRf8txkT/L8lG/wF5Af4AfwAqAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAnHJd//////////////////////////////////79/P//////y7et/8Wtn///9eD/+eG7//jW
- nP/Fnm7/iWNTwYxdXwwAAAAAAHcAWgmGD/8pwz3/Jr85/ybAOf8YoyT/AHIA0gAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAACeclz////////////////////////////+/v7//v37/////P/MurD/vqGL//bf
- uP/zz5b/wJhq/4hiVM+LZE4OAAAAAAAAAAAAbwCXDpAV/yC7MP8fuS//Gq4o/wFtAf0AdwBLAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAJxyXP///////////////////////v7+//7+/v/+/Pr///78/9fJ
- wf+yjXL/9tOa/8ifbv+JZFXMnW5eEgAAAAAAAAAAAHEALwBnAPYVqyD/F7Mk/w6TFf8AaAD9AG4AcQAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnXFd///////+/v7///////7+/v/+/v7//v39//78
- +v////v/08K5/7eQav/LoW//i2RUzZViUhEAAAAAAAAAAABrADkAZADpA3ME/wZ/Cf8AaAH+AGgAzQBq
- AEMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACbcVv///////7+/f/+/v3//v79//79
- /P/+/fz//fv5///++//OurH/onla/49pVtadcVkZAAAAAAAAAAAAZwBAAGYAxwBmAMAAZgClAGUAdgBo
- ADEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJxxXf//////////////
- /////////////////////////////7OXif+PZ1XUoW1iFwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmnFd/51y
- X/+acV3/mnFd/5hwXP+Yb1r/l21b/5RrWf+TbFn/jmdVuZNuVRYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAA///////4AAH/+AAB/+AAAf+AAAH+AAAB/gAAAfwAAAH8CAABgAAAAYAAAAGAAAABgAAAAYAA
- AAGAAAABgAAAA4AAAAeAAAAPgAAAD4AAAAeAAAADgAAAH4AAAB+AADA/gABgP4AA4H+AAeB/gAPB/4AH
- h/+AD///gB////////8oAAAAMAAAAGAAAAABACAAAAAAAIAlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACFYVD/hGFR/4NgT/+DX0//g19P/4JfT/+CYE//gl5O/4Je
- Tv+BXk7/gV5O/4BdTf9/Xk3/f1xN/39cTP9+XEz/fl1M/35bTP99W0v/fVxL/3xaSv98W0r/e1tK/3tb
- S/97W0v/e1tM/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwmo//9OHT/+3Sv//qzbn/6s25/+rN
- uv/qzbn/6s25/+rNuf/rzrn/6c24/+rNt//qzLf/6sy2/+nMtv/py7X/6cu0/+nLtP/py7P/6Muz/+jK
- s//oyrL/6Mqx/+fJsf/ry7L/dlZI/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGMAEgBkAFEAZQCFAGUAqwBkAMYebxn/M4Au/7/I
- q//o1MX/59C//+fQwP/m0L//5tC//+bQv//m0L//5s++/+bPvf/lz7z/5c68/+XOu//lzrv/5c26/+TN
- uv/kzbn/5My5/+TMuP/kzLf/5Mu3/+TMt//lyLD/d1VG/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABmAEgAYwC2AW0C+gV/B/8HjAv/CZYO/wR9
- Bv8mcSD/2dzJ/+/f0v/s2sz/7NvM/+zbzP/s2sz/7NrM/+zay//r2sv/69rK/+vZyf/r2Mj/6tjI/+rY
- x//q18f/6tfG/+rXxv/p1sX/6dbE/+nWxP/p1cP/6NbD/+bQvP/mybH/dldH/wAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAdAGUAugR4B/4MmBP/EKkY/xCp
- Gf8Rqhn/CYsN/wBlAL2vn5D/9efb//Pp3f/y6N7/8uje//Lo3f/y6N7/8uje//Lo3v/y6N3/8ufc//Ho
- 2//x5tr/8efa//Ll2f/w5dj/8ObY//Dk1//x5dX/7+PW/+/j1f/w5NT/7d7N/+fQvP/lyLH/eFZH/wAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABjAC4BawHnDpUV/xWu
- IP8VriD/Fa4h/xavIf8SpBz/AGgA4ABtAA6HYlL/9efa//fw6P/28eb/9vHo//fw6P/28ej/9vHn//bv
- 5//27+f/9vDm//Xv5f/17eP/9e7j//bu4v/07OL/9O3h//Tr4P/07OD/9ezf//Pq3v/0697/7eDQ/+bQ
- vf/lyrP/eVhH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGoAGAFt
- AeUUoh7/GrMo/xu0KP8btCj/G7Qp/xu0Kf8LixH/AGoAZwAAAACDXkv/9Ofb//jy6f/38en/9/Hp//fx
- 6f/38en/9/Hp//fx6f/38Oj/9/Dn//bv5v/27+X/9u7k//Xu5P/17eP/9e3i//Xt4f/07OH/9Ozg//Tr
- 3//17N//7+HS/+bRv//my7P/eldI/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAG4AphOaHP8fuC//ILkw/yC5MP8guTH/Ibox/yG6Mf8EeAf9AGYAFAAAAACEXUr/9ujc//jy
- 7P/48ur/+PLq//jy6//48ur/+PLq//jy6v/38en/9/Hp//fw5//27+b/9u/l//bv5f/27uT/9e7j//Xt
- 4v/17eL/9ezh//Ts4P/07OD/7uDR/+fSwP/myrT/ellI/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAcgAoBnsJ/SS9N/8lvjj/Jb44/ya/OP8mvzn/Jr85/yW9OP8AcgDhAAAAAAAA
- AACHXkv/9+nf//n07f/58+3/+fTt//n07f/58+3/+fPt//jz7P/48+z/+PLr//fx6f/38Oj/9/Dn//bw
- 5//27+b/9u/l//bu5P/17uT/9e3j//Xt4v/27eL/8OHT/+fTwf/oy7X/e1pI/wAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcwCAF6Aj/yrDP/8rxED/K8RA/yvEQf8rxEH/LMVC/ye9
- O/8AdQDKAAAAAAAAAACGYE3/9urg//n17v/59O7/+fTu//n07v/59O7/+fTu//n07v/58+3/+PPs//jy
- 6v/38en/9/Ho//fw6P/38Of/9u/m//bv5f/27uT/9e7k//Xt4//17uP/7+PV/+jTwv/ny7b/fFlI/wAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdwC+J7o7/zDJSP8wyUj/MMlI/zHK
- Sf8xykn/McpK/yvAQf8AegDCAAAAAAAAAACGYE3/9uvh//r18f/59e//+fXw//r18P/59e//+fXv//n1
- 7//59O7/+fTt//jz7P/48ur/9/Hp//fx6f/38Oj/9/Dn//bv5v/27+X/9u7l//Xu5P/17uT/7+LU/+jT
- wv/ny7j/fFlI/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQHkM8tN/zXO
- T/81zk//Nc5Q/zbPUP82z1H/Ns9R/zDFR/8AfADDAAAAAAAAAACHX0z/9+zi//r28f/69vH/+vbx//r2
- 8f/69vH/+vbw//r18P/59e//+fTu//jz7f/48uv/+PLq//fx6v/38en/9/Do//fw5//27+b/9u/l//bu
- 5P/17+X/7+TV/+jUw//nzbf/fFlK/wAAAAAAAAAAAAAAAAAAAACFYVD/hGFR/4NgT/+DX0//g19P/7ik
- m/8LhQz/OtNX/zrTV/8601j/O9RY/zvUWf871Fn/PNVZ/zbNUf8khx//rZeN/35bTP+IYU7/9+zj//r3
- 8v/69vL/+vfy//r38v/69/L/+vby//r28f/69vH/+fXw//n07v/48+z/+PPr//jy6//38ur/9/Hp//fw
- 6P/38Of/9u/m//bv5f/37+X/8ePW/+jUxP/nzLn/fVtJ/wAAAAAAAAAAAAAAAAAAAACAXEv/8tvJ//Lg
- 0v/y39L/8d/S//Pj2f8Mig7/P9hf/0DZYP9A2WD/QNlg/0DZYf9B2mH/Qdpi/z/XXv8ikB7/8+LV//Dc
- zf+xlIj/+vTt//z59v/7+PT/+/j1//v49f/7+PX/+/j0//v49P/79/P/+vby//n18P/59O7/+fTt//jz
- 7P/48+z/+PLr//fx6v/38en/9/Do//fw5//28Of/8OXX/+nVxf/ozbn/flpJ/wAAAAAAAAAAAAAAAAAA
- AACafnD/g7h1/zCXLP8wlyz/NZsw/zecMv8FiAb/RN1n/0XeaP9F3mj/Rt9p/0bfaf9G32n/R+Bq/0fg
- av8Jjgr/PZ83/z+fOf82ki3/R6dF/5XMk//9+/n//Pv4//37+f/8+vj//Pr4//z69//8+fb/+/j1//r3
- 8//69vH/+vXw//n17//59O7/+fTt//jz7P/48uv/+PLq//fx6f/38en/8eTZ/+nWx//ozrr/f1xK/wAA
- AAAAAAAAAAAAAAAAAACBW0r/8ujd/1SqTf8VpCD/QNdh/0DXYf9B2GH/SuNv/0vkcP9L5HD/S+Rx/0vk
- cf9M5XL/TOVy/0zlc/9C2WP/Qdhi/0HXYf8ltzj/MqEx//P48P/9+/n//fv6//38+v/9+/n//fv5//z7
- +f/8+vj//Pn2//v49P/69vL/+vbx//r18P/59e//+fTu//jz7f/48+z/+PLr//fx6v/38un/8ebb/+rW
- x//ozrz/f1tK/wAAAAAAAAAAAAAAAAAAAACBXEr/9OXZ//Tw5v9YsFT/H7Eu/07ndv9P6Hf/UOl4/1Dp
- eP9Q6Xn/Uep5/1Hqev9R6nr/Uep6/1Lre/9S63v/Uut8/0HYYf8XlRT/4e3a//79+//+/fz//v38//79
- /f/+/fz//fz8//38+//9+/r//Pr4//v59f/79/P/+vfy//r28f/69fD/+fXv//n07v/58+3/+PPs//jy
- 6//38uv/8eXc/+rWyP/p0L3/gFtK/wAAAAAAAAAAAAAAAAAAAACCW0r/9efa//fw6P/39e3/V7RU/yC0
- MP9U7X7/Ve6A/1Xugf9W74H/Vu+B/1bvgv9X8IL/V/CD/1fwg/9X8IT/TeZ0/xKfFf+bpYD//PTv//79
- /v/+/f3//v79//7+/v/+/v3//v39//79/P/9/Pv//fv5//z59v/7+PT/+/fz//r38v/69vH/+fXw//n0
- 7//59O3/+PPs//jy6//58+v/8efb/+rXyf/pz7z/gFxL/wAAAAAAAAAAAAAAAAAAAACDXkv/9Ofb//jy
- 6f/38en/9/bv/1m3Vv8htzL/WfKH/1v0if9b9In/W/SK/1z1iv9c9Yv/XPWL/132i/9Y8YX/FKgc/6rW
- ov+phnb/+/Pu//////////////////////////////////7+/v/+/fz//fz7//z69//7+fX/+/j0//v3
- 8//69vL/+vbx//n18P/59O7/+fTt//jz7P/48+z/8ubc/+rXyf/pz77/gVxL/wAAAAAAAAAAAAAAAAAA
- AACEXUr/9ujc//jy7P/48ur/+PLq//j28P9du1r/JLw2/1/4j/9h+pH/YfqS/2H6kv9h+pP/YvuT/2H6
- kv8etS3/hMp///jy6v+TZ1P//PTx///////////////////////////////////////+/v7//v38//z7
- +P/8+fb/+/j1//v49P/69/P/+vbx//r18P/59e//+fTu//jz7f/49Oz/8ubc/+rXyf/pz73/gV5L/wAA
- AAAAAAAAAAAAAAAAAACHXkv/9+nf//n07f/58+3/+fTt//n07f/49vH/YL1d/yW+OP9k/Zb/Zf6Y/2X+
- mP9l/pj/Zf6Y/y3GRP9eu1v/+fXu//bu5P+ValT/+/Pw////////////////////////////////////
- /////////v39//37+f/8+vf/+/r3//z69//79/P/+vfy//r28f/59e//+vXv//j07v/59O3/8ubc/+jV
- x//kybj/gl1N/wAAAAAAAAAAAAAAAAAAAACGYE3/9urg//n17v/59O7/+fTu//n07v/59O7/+ffz/2O/
- YP8kvTb/ZP2W/2b/mf9m/5n/PdZc/z2wO//z8+r/9u/m//bv5f+VaVT/+/Pw////////////////////
- /////////////////////////v39//37+f/9+/j/ueG2/2rCaP/8+vf/+/fz//r28v/59O//9vHr//n1
- 7v/28On/8+zk/+nZzv/fxLT/gl1M/wAAAAAAAAAAAAAAAAAAAACGYE3/9uvh//r18f/59e//+fXw//r1
- 8P/59e//+fXv//n48/9gvF7/JL02/2T9lv9L5HH/JKgk/+bw4P/38en/9/Dn//bv5v+Xalb/+/Tv////
- /////////////////////////////////////////v7+//7+/f/U69P/F6QY/x+4L/9kwWP//Pz4//n1
- 8v/18Or/8enk/+zl3v/o39n/5dzW/9zKv/+xj3//hmJQ/wAAAAAAAAAAAAAAAAAAAACHX0z/9+zi//r2
- 8f/69vH/+vbx//r28f/69vH/+vbw//r18P/5+PP/Y79g/x+4L/8XpRn/0+jM//jy7P/38en/9/Do//fw
- 5/+YbFX/+/Tv/////////////////////////////////////////////v7+/+r26v8kqCX/S+Rx/2T9
- lv8kvTb/U6xM/9TFvv+5oZX/s5uQ/7KYj/+ojYD/lHNl/4diUf+IY1L8hGNV9AAAAAAAAAAAAAAAAAAA
- AACIYU7/9+zj//r38v/69vL/+vfy//r38v/69/L/+vby//r28f/69vH/+vn1/2rBZ/+33rL/+fXv//jy
- 6//38ur/9/Hp//fw6P+Ya1f/+/Tv////////////////////////////////////////////9/v3/z6y
- Pv891lz/Zv+Z/2b/mf9k/Zb/JL02/1ixUf/azL//w6OE/8GceP/KonL/uI9l/4lkVvuUc2JFimxdTwAA
- AAAAAAAAAAAAAAAAAACLYU//+O7l//v49P/7+PT/+/j1//v49f/7+PX/+/j0//v49P/79/P/+vby//v4
- 9P/69fD/+fTt//jz7P/48+z/+PLr//fx6v+aa1b/+/Xv////////////////////////////////////
- ////////YL5g/y3GRP9l/pj/Zf6Y/2X+mP9l/pj/ZP2W/yW+OP9fulb/9OLC//PNjP/TqW//h2VX+Y9z
- YzoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMZE//+fDp//z7+P/8+vj//Pv4//37+f/8+vj//Pr4//z6
- 9//8+fb/+/j1//r38//69vH/+vXw//n17//59O7/+fTt//jz7P+ZbVb/+/Pw////////////////////
- //////////////////+Hz4f/HrQt/2H6kv9i+5P/YfqT/2H6kv9h+pL/YfqR/1/4j/8kvDb/W7NG/9zF
- o/+IZ1n5j3JnMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACOY1H/+fHq//37+f/9+/n//fv6//38
- +v/9+/n//fv5//z7+f/8+vj//Pn2//v49P/69vL/+vbx//r18P/59e//+fTu//jz7f+aa1b/+vTu////
- /////////////////////////////63drf8Upxz/WPGF/132i/9c9Yv/XPWL/1z1iv9b9Ir/W/SJ/1v0
- if9Z8of/Ibcy/0OcOf7d2tKJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACPZlD/+vLs//79
- +//+/fz//v38//79/f/+/fz//fz8//38+//9+/r//Pr4//v59f/79/P/+vfy//r28f/69fD/+fXv//n0
- 7v+Ya1f/+vLt//7+/v/+/v7/////////////////zOnM/xOeFf9N5nT/V/CE/1fwg/9X8IP/V/CC/1bv
- gv9W74H/Vu+B/1Xugf9V7oD/VO1+/yC0MP8AkACmAFUAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AACQZVL/+/Lt//79/v/+/f3//v79//7+/v/+/v3//v39//79/P/9/Pv//fv5//z59v/7+PT/+/fz//r3
- 8v/69vH/+fXw//n07/+ZbFX/+vPs//7+/f/+/v3//v7+//7+/v/j8uP/Hp0e/0HYYf9S63z/Uut7/1Lr
- e/9R6nr/Uep6/1Hqev9R6nn/UOl5/1DpeP9Q6Xj/T+h3/07ndv8fsS7/AIwApQB/AAQAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAACSZlL/+/Pu//////////////////////////////////7+/v/+/fz//fz7//z6
- 9//7+fX/+/j0//v38//69vL/+vbx//n18P+XalX/+fHr//79/f///fz//v3+//P68/8zozP/Jbc4/0HX
- Yf9B2GL/Qtlj/0zlc/9M5XL/TOVy/0vkcf9L5HH/S+Rw/0vkcP9K42//Qdhh/0DXYf9A12H/FaQg/wCI
- AKgAfwAEAAAAAAAAAAAAAAAAAAAAAAAAAACTZ1P//PTx////////////////////////////////////
- ///+/v7//v38//z7+P/8+fb/+/j1//v49P/69/P/+vbx//r18P+Wa1b/+vLr//z7+f/9+/n//fz6/5XM
- lP9HqUf/R6lH/0OmQv9ApUD/CY8L/0fgav9H4Gr/Rt9p/0bfaf9G32n/Rd5o/0XeaP9E3Wf/AoYD/ACG
- AMUAhgDHAIQAzACEAMwAhAB1AAAAAAAAAAAAAAAAAAAAAAAAAACValT/+/Pw////////////////////
- /////////////////////////v39//37+f/8+vf/+/n2//v49P/79/P/+vfy//r28f+Ya1b//fHp//vw
- 6P/68On/+vDp//vz7v/89fH//Pbw//z28f/99/L/JJMi/z/XXv9B2mL/Qdph/0DZYf9A2WD/QNlg/0DZ
- YP8/2F//BIYH9gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACVaVT/+/Pw////
- /////////////////////////////////////////v39//37+f/8+vf//Pn2//v49P/89/T/+/fz//r2
- 8v+bcV3/m3Bc/5tvW/+ab1r/mW5a/5luWv+Zb1v/l25a/5dsWP+8opT/Jokg/zbNUf881Vn/O9RZ/zvU
- Wf871Fj/OtNY/zrTV/8601f/A4IF9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AACXalb/+/Tv/////////////////////////////////////////////v7+//7+/f/8+vj//fv5////
- /P///fr//fz3//n18v/18Or/8enk/+zl3v/o39n/5dzW/9zKv/+xj3//hmJQ/wAAAAAAAAAAAHwAwzDF
- R/82z1H/Ns9R/zbPUP81zlD/Nc5P/zXOT/8zy03/AH0B5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAACYbFX/+/Tv/////////////////////////////////////////////v7+//79
- /f/8+vj///77/9rNxf/Aqp//vqab/7yjmP+4oJT/s5uQ/7KYj/+ojYD/lHNl/4diUf+IY1L8hGNV9AAA
- AAAAAAAAAHoAwivAQf8xykr/McpJ/zHKSf8wyUj/MMlI/zDJSP8nujv/AHcAvgAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACYa1f/+/Tv////////////////////////////////////
- /////////v7+//79/f/8+vj///z6/8Ouo/+kg3P/zLuy/8izpf/GrZr/w6KD/8GceP/KonL/uI9l/4lk
- VvuUc2JFimxdTwAAAAAAAAAAAHUAyie9O/8sxUL/K8RB/yvEQf8rxED/K8RA/yrDP/8XoCP/AHMAgAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACaa1b/+/Xv////////////////////
- /////////////////////////v79//79/P/8+vf//vv4/825sP+8pJj////6//vw3v/45sn/8tOf//PM
- i//TqW//h2VX+Y9zYzoAAAAAAAAAAAAAAAAAAAAAAHIA4SW9OP8mvzn/Jr85/ya/OP8lvjj/Jb44/yS9
- N/8Gegn9AHIAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACZbVb/+/Pw////
- /////////////////////////////////////////v39//38/P/8+vf///v5/93QyP+nhnX//fLe//Xi
- w//y2K//78iI/8uga/+HZVf5j3JnMQAAAAAAAAAAAAAAAAAAAAAAZgAUBHcH/SG6Mf8hujH/ILkx/yC5
- MP8guTD/H7gv/xOaHP8AbgCmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AACaa1b/+vTu///////////////////////////////////////+/v7//f38//38+//8+ff//fz3/97S
- yv+mgm7/++jJ//LXrv/uzZv/xZpp/4dkV/mQc2U6AAAAAAAAAAAAAAAAAAAAAAAAAAAAagBnC4sR/xu0
- Kf8btCn/G7Qo/xu0KP8asyj/FKIe/wFtAeUAagAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAACYa1f/+vLt//7+/v/+/v7///////////////////////7+/v/+/v7//fz7//38
- +v/8+fb//fr4/97Sy/+kfWT/9NKb//DGg//Gmmj/hmZY95N2ajAAAAAAAAAAAAAAAAAAAAAAAAAAAABt
- AA4AZwDgEqQc/xavIf8VriH/Fa4g/xWuIP8OlRX/AWsB5wBjAC4AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACZbFX/+vPs//7+/f/+/v3//v7+//7+/v/+/v7//v7+//7+
- /f/+/f3//fz6//37+f/7+fX//fr2/9/Ty/+jfF7/88uF/7+UZf+HZ1r3lXlqKAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAFwACwBlAL0Jiw3/EaoZ/xCpGf8QqRj/DJgT/wR4B/4AZQC6AGAAHQAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACXalX/+fHr//79/f///fz//v3+//7/
- /f/+//3//v3+///+/P/9/P3//vv5//z8+P/7+PX//vv3/9vNxP+nf1v/zKBo/4poXPWTeHEoAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAZgAeAGIAygR9Bv8Jlg7/B4wL/wV/B/8BbQL6AGMAtgBmAEgAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACWa1b/+vLr//z7
- +f/9+/n//Pv5//z7+v/8+/r//Pv5//36+f/7+vj//Pn2//r49f/59vL///r2/8OtoP+Yb1b/i21f8oxz
- ayEAAAAAAAAAAAAAAAAAAAAAAAAAAABkADMAZQDJAGUA1gBkAMYAZQCrAGUAhQBkAFEAYwASAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AACYa1b//fHp//vw6P/68On/+vDp//rw6v/68Or/+vHp//vx6v/78ej/+u/o//rv5//57eX/++/l/5t1
- Zf+NbWDvk35yGgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAACbcV3/m3Bc/5tvW/+ab1r/mW5a/5luWv+Zb1v/l25a/5dsWP+WbVj/lGpX/5Nr
- WP+RaVb/kGlX/4twY9V/cmUVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////AAD///AAAAMAAP//8AAAAwAA//8AAAAD
- AAD//AAAAAMAAP/wAAAAAwAA/+AQAAADAAD/wBAAAAMAAP+AMAAAAwAA/4AwAAADAAD/ADAAAAMAAP8A
- MAAAAwAA/wAwAAADAADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAwAAAAAAD
- AADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADAAAAAAA8AAMAA
- AAAAHwAAwAAAAAA/AADAAAAAAD8AAMAAAAAAPwAAwAAAAAAfAADAAAAAAA8AAMAAAAAABwAAwAAAAAD/
- AADAAAAAAP8AAMAAAAwA/wAAwAAADAD/AADAAAA8AP8AAMAAAHwB/wAAwAAA/AH/AADAAAH4A/8AAMAA
- A/gH/wAAwAAH8A//AADAAA/gP/8AAMAAH8D//wAAwAA/////AADAAH////8AAP///////wAA
-
-
-
\ No newline at end of file
diff --git a/SDLXLIFFSplitMerge/Wizard/AssemblyInfo.cs b/SDLXLIFFSplitMerge/Wizard/AssemblyInfo.cs
deleted file mode 100644
index f5cea5d840..0000000000
--- a/SDLXLIFFSplitMerge/Wizard/AssemblyInfo.cs
+++ /dev/null
@@ -1,50 +0,0 @@
-using System.Reflection;
-
-//
-// General Information about an assembly is controlled through the following
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-//
-[assembly: AssemblyTitle("SDLXLIFF Split/Merge")]
-[assembly: AssemblyCompany("SDL Limited as part of the RWS Holdings Plc group of companies")]
-[assembly: AssemblyCopyright("Copyright © 2011 - 2022 SDL Limited as part of the RWS Holdings Plc group of companies (\"RWS Group\").")]
-
-//
-// Version information for an assembly consists of the following four values:
-//
-// Major Version
-// Minor Version
-// Build Number
-// Revision
-//
-// You can specify all the values or you can default the Revision and Build Numbers
-// by using the '*' as shown below:
-
-[assembly: AssemblyVersion("4.0.0.0")]
-
-//
-// In order to sign your assembly you must specify a key to use. Refer to the
-// Microsoft .NET Framework documentation for more information on assembly signing.
-//
-// Use the attributes below to control which key is used for signing.
-//
-// Notes:
-// (*) If no key is specified, the assembly is not signed.
-// (*) KeyName refers to a key that has been installed in the Crypto Service
-// Provider (CSP) on your machine. KeyFile refers to a file which contains
-// a key.
-// (*) If the KeyFile and the KeyName values are both specified, the
-// following processing occurs:
-// (1) If the KeyName can be found in the CSP, that key is used.
-// (2) If the KeyName does not exist and the KeyFile does exist, the key
-// in the KeyFile is installed into the CSP and used.
-// (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility.
-// When specifying the KeyFile, the location of the KeyFile should be
-// relative to the project output directory which is
-// %Project Directory%\obj\. For example, if your KeyFile is
-// located in the project directory, you would specify the AssemblyKeyFile
-// attribute as [assembly: AssemblyKeyFile("..\\..\\mykey.snk")]
-// (*) Delay Signing is an advanced option - see the Microsoft .NET Framework
-// documentation for more information on this.
-//
-[assembly: AssemblyDelaySign(false)]
diff --git a/SDLXLIFFSplitMerge/Wizard/EtchedLine.cs b/SDLXLIFFSplitMerge/Wizard/EtchedLine.cs
deleted file mode 100644
index 836051c396..0000000000
--- a/SDLXLIFFSplitMerge/Wizard/EtchedLine.cs
+++ /dev/null
@@ -1,136 +0,0 @@
-using System;
-using System.Collections;
-using System.ComponentModel;
-using System.Drawing;
-using System.Data;
-using System.Windows.Forms;
-
-namespace Sdl.Utilities.SplitSDLXLIFF.Wizard
-{
- ///
- /// Summary description for UserControl1.
- ///
- public class EtchedLine : System.Windows.Forms.UserControl
- {
- ///
- /// Required designer variable.
- ///
- private System.ComponentModel.Container components = null;
-
- public EtchedLine()
- {
- // This call is required by the Windows.Forms Form Designer.
- InitializeComponent();
-
- // Avoid receiving the focus.
- SetStyle(ControlStyles.Selectable, false);
- }
-
- ///
- /// Clean up any resources being used.
- ///
- protected override void Dispose( bool disposing )
- {
- if( disposing )
- {
- if( components != null )
- components.Dispose();
- }
- base.Dispose( disposing );
- }
-
- #region Component Designer generated code
- ///
- /// Required method for Designer support - do not modify
- /// the contents of this method with the code editor.
- ///
- private void InitializeComponent()
- {
- //
- // EtchedLine
- //
- this.Name = "EtchedLine";
- }
- #endregion
-
- protected override void OnPaint(PaintEventArgs e)
- {
- base.OnPaint(e);
-
- Brush lightBrush = new SolidBrush(_lightColor);
- Brush darkBrush = new SolidBrush(_darkColor);
- Pen lightPen = new Pen(lightBrush, 1);
- Pen darkPen = new Pen(darkBrush, 1);
-
- if (this.Edge == EtchEdge.Top)
- {
- e.Graphics.DrawLine(darkPen, 0, 0, this.Width, 0);
- e.Graphics.DrawLine(lightPen, 0, 1, this.Width, 1);
- }
- else if (this.Edge == EtchEdge.Bottom)
- {
- e.Graphics.DrawLine(darkPen, 0, this.Height - 2,
- this.Width, this.Height - 2);
- e.Graphics.DrawLine(lightPen, 0, this.Height - 1,
- this.Width, this.Height - 1);
- }
- }
-
- protected override void OnResize(EventArgs e)
- {
- base.OnResize (e);
-
- Refresh();
- }
-
- Color _darkColor = SystemColors.ControlDark;
-
- [Category("Appearance")]
- Color DarkColor
- {
- get { return _darkColor; }
-
- set
- {
- _darkColor = value;
- Refresh();
- }
- }
-
- Color _lightColor = SystemColors.ControlLightLight;
-
- [Category("Appearance")]
- Color LightColor
- {
- get { return _lightColor; }
-
- set
- {
- _lightColor = value;
- Refresh();
- }
- }
-
- EtchEdge _edge = EtchEdge.Top;
-
- [Category("Appearance")]
- public EtchEdge Edge
- {
- get
- {
- return _edge;
- }
-
- set
- {
- _edge = value;
- Refresh();
- }
- }
- }
-
- public enum EtchEdge
- {
- Top, Bottom
- }
-}
diff --git a/SDLXLIFFSplitMerge/Wizard/EtchedLine.resx b/SDLXLIFFSplitMerge/Wizard/EtchedLine.resx
deleted file mode 100644
index 3eb7993d83..0000000000
--- a/SDLXLIFFSplitMerge/Wizard/EtchedLine.resx
+++ /dev/null
@@ -1,130 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- text/microsoft-resx
-
-
- 1.3
-
-
- System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- False
-
-
- False
-
-
- True
-
-
- True
-
-
- 80
-
-
- (Default)
-
-
- False
-
-
- Private
-
-
- EtchedLine
-
-
- 8, 8
-
-
\ No newline at end of file
diff --git a/SDLXLIFFSplitMerge/Wizard/ExternalWizardPage.cs b/SDLXLIFFSplitMerge/Wizard/ExternalWizardPage.cs
deleted file mode 100644
index d6a6bd2c00..0000000000
--- a/SDLXLIFFSplitMerge/Wizard/ExternalWizardPage.cs
+++ /dev/null
@@ -1,56 +0,0 @@
-using System;
-using System.Collections;
-using System.ComponentModel;
-using System.Drawing;
-using System.Windows.Forms;
-
-namespace Sdl.Utilities.SplitSDLXLIFF.Wizard
-{
- public class ExternalWizardPage : Sdl.Utilities.SplitSDLXLIFF.Wizard.WizardPage
- {
- private System.ComponentModel.IContainer components = null;
-
- public ExternalWizardPage()
- {
- // This call is required by the Windows Form Designer.
- InitializeComponent();
-
- // TODO: Add any initialization after the InitializeComponent call
- }
-
- ///
- /// Clean up any resources being used.
- ///
- protected override void Dispose( bool disposing )
- {
- if( disposing )
- {
- if (components != null)
- {
- components.Dispose();
- }
- }
- base.Dispose( disposing );
- }
-
- #region Designer generated code
- ///
- /// Required method for Designer support - do not modify
- /// the contents of this method with the code editor.
- ///
- private void InitializeComponent()
- {
- this.SuspendLayout();
- //
- // ExternalWizardPage
- //
- this.BackColor = System.Drawing.SystemColors.Window;
- this.Name = "ExternalWizardPage";
- this.Size = new System.Drawing.Size(424, 208);
- this.ResumeLayout(false);
-
- }
- #endregion
- }
-}
-
diff --git a/SDLXLIFFSplitMerge/Wizard/ExternalWizardPage.resx b/SDLXLIFFSplitMerge/Wizard/ExternalWizardPage.resx
deleted file mode 100644
index 19dc0dd8b3..0000000000
--- a/SDLXLIFFSplitMerge/Wizard/ExternalWizardPage.resx
+++ /dev/null
@@ -1,120 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- text/microsoft-resx
-
-
- 2.0
-
-
- System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
\ No newline at end of file
diff --git a/SDLXLIFFSplitMerge/Wizard/InternalWizardPage.cs b/SDLXLIFFSplitMerge/Wizard/InternalWizardPage.cs
deleted file mode 100644
index d411437327..0000000000
--- a/SDLXLIFFSplitMerge/Wizard/InternalWizardPage.cs
+++ /dev/null
@@ -1,69 +0,0 @@
-using System;
-using System.Collections;
-using System.ComponentModel;
-using System.Drawing;
-using System.Windows.Forms;
-
-namespace Sdl.Utilities.SplitSDLXLIFF.Wizard
-{
- public class InternalWizardPage : Sdl.Utilities.SplitSDLXLIFF.Wizard.WizardPage
- {
- public WizardBanner Banner;
- private System.ComponentModel.IContainer components = null;
-
- public InternalWizardPage()
- {
- // This call is required by the Windows Form Designer.
- InitializeComponent();
-
- // TODO: Add any initialization after the InitializeComponent call
- }
-
- ///
- /// Clean up any resources being used.
- ///
- protected override void Dispose( bool disposing )
- {
- if( disposing )
- {
- if (components != null)
- {
- components.Dispose();
- }
- }
- base.Dispose( disposing );
- }
-
- #region Designer generated code
- ///
- /// Required method for Designer support - do not modify
- /// the contents of this method with the code editor.
- ///
- private void InitializeComponent()
- {
- this.Banner = new Sdl.Utilities.SplitSDLXLIFF.Wizard.WizardBanner();
- this.SuspendLayout();
- //
- // Banner
- //
- this.Banner.BackColor = System.Drawing.SystemColors.Window;
- this.Banner.Dock = System.Windows.Forms.DockStyle.Top;
- this.Banner.Location = new System.Drawing.Point(0, 0);
- this.Banner.Name = "Banner";
- this.Banner.Size = new System.Drawing.Size(432, 64);
- this.Banner.Subtitle = "Subtitle";
- this.Banner.TabIndex = 0;
- this.Banner.Title = "Title";
- //
- // InternalWizardPage
- //
- this.Controls.Add(this.Banner);
- this.Name = "InternalWizardPage";
- this.Size = new System.Drawing.Size(432, 150);
- this.ResumeLayout(false);
-
- }
- #endregion
- }
-}
-
diff --git a/SDLXLIFFSplitMerge/Wizard/InternalWizardPage.resx b/SDLXLIFFSplitMerge/Wizard/InternalWizardPage.resx
deleted file mode 100644
index 19dc0dd8b3..0000000000
--- a/SDLXLIFFSplitMerge/Wizard/InternalWizardPage.resx
+++ /dev/null
@@ -1,120 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- text/microsoft-resx
-
-
- 2.0
-
-
- System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
\ No newline at end of file
diff --git a/SDLXLIFFSplitMerge/Wizard/Properties/Resources.Designer.cs b/SDLXLIFFSplitMerge/Wizard/Properties/Resources.Designer.cs
deleted file mode 100644
index d2ac23b9e4..0000000000
--- a/SDLXLIFFSplitMerge/Wizard/Properties/Resources.Designer.cs
+++ /dev/null
@@ -1,93 +0,0 @@
-//------------------------------------------------------------------------------
-//
-// This code was generated by a tool.
-// Runtime Version:4.0.30319.42000
-//
-// Changes to this file may cause incorrect behavior and will be lost if
-// the code is regenerated.
-//
-//------------------------------------------------------------------------------
-
-namespace Sdl.Utilities.SplitSDLXLIFF.Wizard.Properties {
- using System;
-
-
- ///
- /// A strongly-typed resource class, for looking up localized strings, etc.
- ///
- // This class was auto-generated by the StronglyTypedResourceBuilder
- // class via a tool like ResGen or Visual Studio.
- // To add or remove a member, edit your .ResX file then rerun ResGen
- // with the /str option, or rebuild your VS project.
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
- internal class Resources {
-
- private static global::System.Resources.ResourceManager resourceMan;
-
- private static global::System.Globalization.CultureInfo resourceCulture;
-
- [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
- internal Resources() {
- }
-
- ///
- /// Returns the cached ResourceManager instance used by this class.
- ///
- [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
- internal static global::System.Resources.ResourceManager ResourceManager {
- get {
- if (object.ReferenceEquals(resourceMan, null)) {
- global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Sdl.Utilities.SplitSDLXLIFF.Wizard.Properties.Resources", typeof(Resources).Assembly);
- resourceMan = temp;
- }
- return resourceMan;
- }
- }
-
- ///
- /// Overrides the current thread's CurrentUICulture property for all
- /// resource lookups using this strongly typed resource class.
- ///
- [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
- internal static global::System.Globalization.CultureInfo Culture {
- get {
- return resourceCulture;
- }
- set {
- resourceCulture = value;
- }
- }
-
- ///
- /// Looks up a localized resource of type System.Drawing.Bitmap.
- ///
- internal static System.Drawing.Bitmap SDL_logo {
- get {
- object obj = ResourceManager.GetObject("SDL_logo", resourceCulture);
- return ((System.Drawing.Bitmap)(obj));
- }
- }
-
- ///
- /// Looks up a localized resource of type System.Drawing.Bitmap.
- ///
- internal static System.Drawing.Bitmap SDL_logo_color {
- get {
- object obj = ResourceManager.GetObject("SDL_logo_color", resourceCulture);
- return ((System.Drawing.Bitmap)(obj));
- }
- }
-
- ///
- /// Looks up a localized resource of type System.Drawing.Bitmap.
- ///
- internal static System.Drawing.Bitmap sdlxliff_splitnmerge {
- get {
- object obj = ResourceManager.GetObject("sdlxliff_splitnmerge", resourceCulture);
- return ((System.Drawing.Bitmap)(obj));
- }
- }
- }
-}
diff --git a/SDLXLIFFSplitMerge/Wizard/Properties/Resources.resx b/SDLXLIFFSplitMerge/Wizard/Properties/Resources.resx
deleted file mode 100644
index 6ed05a29b9..0000000000
--- a/SDLXLIFFSplitMerge/Wizard/Properties/Resources.resx
+++ /dev/null
@@ -1,130 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- text/microsoft-resx
-
-
- 2.0
-
-
- System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
-
- ..\resources\sdlxliff_splitnmerge.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
-
- ..\Resources\SDL_logo.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
-
- ..\Resources\SDL_logo-02_png_2.jpg;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
-
\ No newline at end of file
diff --git a/SDLXLIFFSplitMerge/Wizard/Resources/SDL_logo-02_png_2.jpg b/SDLXLIFFSplitMerge/Wizard/Resources/SDL_logo-02_png_2.jpg
deleted file mode 100644
index 0a039afb1a..0000000000
Binary files a/SDLXLIFFSplitMerge/Wizard/Resources/SDL_logo-02_png_2.jpg and /dev/null differ
diff --git a/SDLXLIFFSplitMerge/Wizard/Resources/SDL_logo.png b/SDLXLIFFSplitMerge/Wizard/Resources/SDL_logo.png
deleted file mode 100644
index ef5cfe8004..0000000000
Binary files a/SDLXLIFFSplitMerge/Wizard/Resources/SDL_logo.png and /dev/null differ
diff --git a/SDLXLIFFSplitMerge/Wizard/Resources/sdlxliff_splitnmerge.png b/SDLXLIFFSplitMerge/Wizard/Resources/sdlxliff_splitnmerge.png
deleted file mode 100644
index be0e0a6907..0000000000
Binary files a/SDLXLIFFSplitMerge/Wizard/Resources/sdlxliff_splitnmerge.png and /dev/null differ
diff --git a/SDLXLIFFSplitMerge/Wizard/Sdl.Utilities.SplitSDLXLIFF.Wizard.csproj b/SDLXLIFFSplitMerge/Wizard/Sdl.Utilities.SplitSDLXLIFF.Wizard.csproj
deleted file mode 100644
index 175a4c0a2c..0000000000
--- a/SDLXLIFFSplitMerge/Wizard/Sdl.Utilities.SplitSDLXLIFF.Wizard.csproj
+++ /dev/null
@@ -1,46 +0,0 @@
-
-
-
- net48
- false
- True
- false
- ..\SdlCommunity.snk
-
-
-
- System
-
-
- System.Data
-
-
- System.Drawing
-
-
- System.Windows.Forms
-
-
- System.XML
-
-
-
-
-
-
-
-
-
-
- True
- True
- Resources.resx
-
-
-
-
- ResXFileCodeGenerator
- Resources.Designer.cs
-
-
-
\ No newline at end of file
diff --git a/SDLXLIFFSplitMerge/Wizard/Sdl.Utilities.SplitSDLXLIFF.Wizard.dll b/SDLXLIFFSplitMerge/Wizard/Sdl.Utilities.SplitSDLXLIFF.Wizard.dll
deleted file mode 100644
index f677a309e3..0000000000
Binary files a/SDLXLIFFSplitMerge/Wizard/Sdl.Utilities.SplitSDLXLIFF.Wizard.dll and /dev/null differ
diff --git a/SDLXLIFFSplitMerge/Wizard/WizardBanner.cs b/SDLXLIFFSplitMerge/Wizard/WizardBanner.cs
deleted file mode 100644
index 80404cd162..0000000000
--- a/SDLXLIFFSplitMerge/Wizard/WizardBanner.cs
+++ /dev/null
@@ -1,130 +0,0 @@
-using System;
-using System.Collections;
-using System.ComponentModel;
-using System.Drawing;
-using System.Data;
-using System.Windows.Forms;
-
-namespace Sdl.Utilities.SplitSDLXLIFF.Wizard
-{
- ///
- /// Summary description for WizardBanner.
- ///
- public class WizardBanner : System.Windows.Forms.UserControl
- {
- private System.Windows.Forms.Label titleLabel;
- private System.Windows.Forms.Label subtitleLabel;
- private Sdl.Utilities.SplitSDLXLIFF.Wizard.EtchedLine etchedLine1;
- private Panel panel1;
- ///
- /// Required designer variable.
- ///
- private System.ComponentModel.Container components = null;
-
- public WizardBanner()
- {
- // This call is required by the Windows.Forms Form Designer.
- InitializeComponent();
-
- // Avoid getting the focus.
- this.SetStyle(ControlStyles.Selectable, false);
- }
-
- ///
- /// Clean up any resources being used.
- ///
- protected override void Dispose( bool disposing )
- {
- if( disposing )
- {
- if(components != null)
- {
- components.Dispose();
- }
- }
- base.Dispose( disposing );
- }
-
- #region Component Designer generated code
- ///
- /// Required method for Designer support - do not modify
- /// the contents of this method with the code editor.
- ///
- private void InitializeComponent()
- {
- this.titleLabel = new System.Windows.Forms.Label();
- this.subtitleLabel = new System.Windows.Forms.Label();
- this.etchedLine1 = new Sdl.Utilities.SplitSDLXLIFF.Wizard.EtchedLine();
- this.panel1 = new System.Windows.Forms.Panel();
- this.SuspendLayout();
- //
- // titleLabel
- //
- this.titleLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
- | System.Windows.Forms.AnchorStyles.Right)));
- this.titleLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
- this.titleLabel.Location = new System.Drawing.Point(16, 8);
- this.titleLabel.Name = "titleLabel";
- this.titleLabel.Size = new System.Drawing.Size(432, 16);
- this.titleLabel.TabIndex = 0;
- this.titleLabel.Text = "Title";
- //
- // subtitleLabel
- //
- this.subtitleLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
- | System.Windows.Forms.AnchorStyles.Left)
- | System.Windows.Forms.AnchorStyles.Right)));
- this.subtitleLabel.Location = new System.Drawing.Point(40, 24);
- this.subtitleLabel.Name = "subtitleLabel";
- this.subtitleLabel.Size = new System.Drawing.Size(285, 32);
- this.subtitleLabel.TabIndex = 1;
- this.subtitleLabel.Text = "Subtitle";
- //
- // etchedLine1
- //
- this.etchedLine1.Dock = System.Windows.Forms.DockStyle.Bottom;
- this.etchedLine1.Edge = Sdl.Utilities.SplitSDLXLIFF.Wizard.EtchEdge.Bottom;
- this.etchedLine1.Location = new System.Drawing.Point(0, 56);
- this.etchedLine1.Name = "etchedLine1";
- this.etchedLine1.Size = new System.Drawing.Size(456, 8);
- this.etchedLine1.TabIndex = 0;
- //
- // panel1
- //
- this.panel1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
- this.panel1.BackgroundImage = global::Sdl.Utilities.SplitSDLXLIFF.Wizard.Properties.Resources.sdlxliff_splitnmerge;
- this.panel1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None;
- this.panel1.Location = new System.Drawing.Point(331, 10);
- this.panel1.Name = "panel1";
- this.panel1.Size = new System.Drawing.Size(99, 46);
- this.panel1.TabIndex = 2;
- //
- // WizardBanner
- //
- this.BackColor = System.Drawing.SystemColors.Window;
- this.Controls.Add(this.panel1);
- this.Controls.Add(this.etchedLine1);
- this.Controls.Add(this.subtitleLabel);
- this.Controls.Add(this.titleLabel);
- this.Name = "WizardBanner";
- this.Size = new System.Drawing.Size(456, 64);
- this.ResumeLayout(false);
-
- }
- #endregion
-
- [Category("Appearance")]
- public string Title
- {
- get { return titleLabel.Text; }
- set { titleLabel.Text = value; }
- }
-
- [Category("Appearance")]
- public string Subtitle
- {
- get { return subtitleLabel.Text; }
- set { subtitleLabel.Text = value; }
- }
- }
-}
diff --git a/SDLXLIFFSplitMerge/Wizard/WizardBanner.resx b/SDLXLIFFSplitMerge/Wizard/WizardBanner.resx
deleted file mode 100644
index d58980a38d..0000000000
--- a/SDLXLIFFSplitMerge/Wizard/WizardBanner.resx
+++ /dev/null
@@ -1,120 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- text/microsoft-resx
-
-
- 2.0
-
-
- System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
\ No newline at end of file
diff --git a/SDLXLIFFSplitMerge/Wizard/WizardPage.cs b/SDLXLIFFSplitMerge/Wizard/WizardPage.cs
deleted file mode 100644
index a8131eb5b9..0000000000
--- a/SDLXLIFFSplitMerge/Wizard/WizardPage.cs
+++ /dev/null
@@ -1,153 +0,0 @@
-using System;
-using System.Collections;
-using System.ComponentModel;
-using System.Drawing;
-using System.Data;
-using System.Windows.Forms;
-
-namespace Sdl.Utilities.SplitSDLXLIFF.Wizard
-{
- [DefaultEvent("SetActive")]
- public class WizardPage : System.Windows.Forms.UserControl
- {
- private System.ComponentModel.Container components = null;
- private bool _allowNext = true;
-
- public WizardPage()
- {
- InitializeComponent();
- }
-
- protected override void Dispose( bool disposing )
- {
- if( disposing )
- {
- if(components != null)
- {
- components.Dispose();
- }
- }
- base.Dispose( disposing );
- }
-
- #region Component Designer generated code
- ///
- /// Required method for Designer support - do not modify
- /// the contents of this method with the code editor.
- ///
- private void InitializeComponent()
- {
- components = new System.ComponentModel.Container();
- }
- #endregion
-
- protected WizardSheet GetWizard()
- {
- WizardSheet wizard = (WizardSheet)this.ParentForm;
- return wizard;
- }
-
- public bool AllowNext
- {
- get { return _allowNext; }
- set { _allowNext = value; }
- }
-
- protected void SetWizardButtons(WizardButtons buttons)
- {
- GetWizard().SetWizardButtons(buttons);
- }
-
- protected void EnableCancelButton(bool enableCancelButton)
- {
- GetWizard().EnableCancelButton(enableCancelButton);
- }
-
- protected void EnableCloseButton(bool enableCloseButton)
- {
- GetWizard().EnableCloseButton(enableCloseButton);
- }
-
- protected void EnableStartButton(bool enableStartButton)
- {
- GetWizard().EnableStartButton(enableStartButton);
- }
-
- protected void PressButton(WizardButtons buttons)
- {
- GetWizard().PressButton(buttons);
- }
-
- [Category("Wizard")]
- public event CancelEventHandler SetActive;
-
- public virtual void OnSetActive(CancelEventArgs e)
- {
- if (SetActive != null)
- SetActive(this, e);
- }
-
- [Category("Wizard")]
- public event CancelEventHandler PostSetActive;
-
- public virtual void OnPostSetActive(CancelEventArgs e)
- {
- if (PostSetActive != null)
- PostSetActive(this, e);
- }
-
- [Category("Wizard")]
- public event WizardPageEventHandler WizardNext;
-
- public virtual void OnWizardNext(WizardPageEventArgs e)
- {
- if (WizardNext != null)
- WizardNext(this, e);
- }
-
- [Category("Wizard")]
- public event WizardPageEventHandler WizardNewStart;
-
- public virtual void OnWizardNewStart(WizardPageEventArgs e)
- {
- if (WizardNewStart != null)
- WizardNewStart(this, e);
- }
-
- [Category("Wizard")]
- public event WizardPageEventHandler WizardPreNext;
-
- public virtual void OnWizardPreNext(WizardPageEventArgs e)
- {
- if (WizardPreNext != null)
- WizardPreNext(this, e);
- }
-
- [Category("Wizard")]
- public event WizardPageEventHandler WizardBack;
-
- public virtual void OnWizardBack(WizardPageEventArgs e)
- {
- if (WizardBack != null)
- WizardBack(this, e);
- }
-
- [Category("Wizard")]
- public event CancelEventHandler WizardFinish;
-
- public virtual void OnWizardFinish(CancelEventArgs e)
- {
- if (WizardFinish != null)
- WizardFinish(this, e);
- }
-
- [Category("Wizard")]
- public event CancelEventHandler QueryCancel;
-
- public virtual void OnQueryCancel(CancelEventArgs e)
- {
- if (QueryCancel != null)
- QueryCancel(this, e);
- }
- }
-}
diff --git a/SDLXLIFFSplitMerge/Wizard/WizardPage.resx b/SDLXLIFFSplitMerge/Wizard/WizardPage.resx
deleted file mode 100644
index 3f337e081d..0000000000
--- a/SDLXLIFFSplitMerge/Wizard/WizardPage.resx
+++ /dev/null
@@ -1,42 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- text/microsoft-resx
-
-
- 1.0.0.0
-
-
- System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
diff --git a/SDLXLIFFSplitMerge/Wizard/WizardPageEventArgs.cs b/SDLXLIFFSplitMerge/Wizard/WizardPageEventArgs.cs
deleted file mode 100644
index fd84e90970..0000000000
--- a/SDLXLIFFSplitMerge/Wizard/WizardPageEventArgs.cs
+++ /dev/null
@@ -1,18 +0,0 @@
-using System;
-using System.ComponentModel;
-
-namespace Sdl.Utilities.SplitSDLXLIFF.Wizard
-{
- public class WizardPageEventArgs : CancelEventArgs
- {
- string _newPage = null;
-
- public string NewPage
- {
- get { return _newPage; }
- set { _newPage = value; }
- }
- }
-
- public delegate void WizardPageEventHandler(object sender, WizardPageEventArgs e);
-}
diff --git a/SDLXLIFFSplitMerge/Wizard/WizardSheet.cs b/SDLXLIFFSplitMerge/Wizard/WizardSheet.cs
deleted file mode 100644
index e6d3dff9ac..0000000000
--- a/SDLXLIFFSplitMerge/Wizard/WizardSheet.cs
+++ /dev/null
@@ -1,517 +0,0 @@
-using System;
-using System.Drawing;
-using System.Collections;
-using System.ComponentModel;
-using System.Windows.Forms;
-
-namespace Sdl.Utilities.SplitSDLXLIFF.Wizard
-{
- ///
- /// Summary description for WizardSheet.
- ///
- public class WizardSheet : System.Windows.Forms.Form
- {
- ///
- /// Required designer variable.
- ///
- private System.ComponentModel.Container components = null;
-
- public WizardSheet()
- {
- //
- // Required for Windows Form Designer support
- //
- InitializeComponent();
-
- //
- // TODO: Add any constructor code after InitializeComponent call
- //
- }
-
- ///
- /// Clean up any resources being used.
- ///
- protected override void Dispose( bool disposing )
- {
- if( disposing )
- {
- if(components != null)
- {
- components.Dispose();
- }
- }
- base.Dispose( disposing );
- }
-
- #region Windows Form Designer generated code
- ///
- /// Required method for Designer support - do not modify
- /// the contents of this method with the code editor.
- ///
- private void InitializeComponent()
- {
- this.backButton = new System.Windows.Forms.Button();
- this.nextButton = new System.Windows.Forms.Button();
- this.finishButton = new System.Windows.Forms.Button();
- this.cancelButton = new System.Windows.Forms.Button();
- this.buttonPanel = new System.Windows.Forms.Panel();
- this.btnClose = new System.Windows.Forms.Button();
- this.pagePanel = new System.Windows.Forms.Panel();
- this.btnStart = new System.Windows.Forms.Button();
- this.etchedLine1 = new Sdl.Utilities.SplitSDLXLIFF.Wizard.EtchedLine();
- this.buttonPanel.SuspendLayout();
- this.SuspendLayout();
- //
- // backButton
- //
- this.backButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
- this.backButton.FlatStyle = System.Windows.Forms.FlatStyle.System;
- this.backButton.Location = new System.Drawing.Point(134, 8);
- this.backButton.Name = "backButton";
- this.backButton.Size = new System.Drawing.Size(75, 23);
- this.backButton.TabIndex = 0;
- this.backButton.Text = "< &Back";
- this.backButton.Click += new System.EventHandler(this.backButton_Click);
- //
- // nextButton
- //
- this.nextButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
- this.nextButton.FlatStyle = System.Windows.Forms.FlatStyle.System;
- this.nextButton.Location = new System.Drawing.Point(208, 8);
- this.nextButton.Name = "nextButton";
- this.nextButton.Size = new System.Drawing.Size(75, 23);
- this.nextButton.TabIndex = 1;
- this.nextButton.Text = "&Next >";
- this.nextButton.Click += new System.EventHandler(this.nextButton_Click);
- //
- // finishButton
- //
- this.finishButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
- this.finishButton.FlatStyle = System.Windows.Forms.FlatStyle.System;
- this.finishButton.Location = new System.Drawing.Point(208, 8);
- this.finishButton.Name = "finishButton";
- this.finishButton.Size = new System.Drawing.Size(75, 23);
- this.finishButton.TabIndex = 2;
- this.finishButton.Text = "&Finish >";
- this.finishButton.Click += new System.EventHandler(this.finishButton_Click);
- //
- // cancelButton
- //
- this.cancelButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
- this.cancelButton.FlatStyle = System.Windows.Forms.FlatStyle.System;
- this.cancelButton.Location = new System.Drawing.Point(296, 8);
- this.cancelButton.Name = "cancelButton";
- this.cancelButton.Size = new System.Drawing.Size(75, 23);
- this.cancelButton.TabIndex = 3;
- this.cancelButton.Text = "Cancel";
- this.cancelButton.Click += new System.EventHandler(this.cancelButton_Click);
- //
- // buttonPanel
- //
- this.buttonPanel.Controls.Add(this.btnStart);
- this.buttonPanel.Controls.Add(this.btnClose);
- this.buttonPanel.Controls.Add(this.etchedLine1);
- this.buttonPanel.Controls.Add(this.cancelButton);
- this.buttonPanel.Controls.Add(this.backButton);
- this.buttonPanel.Controls.Add(this.finishButton);
- this.buttonPanel.Controls.Add(this.nextButton);
- this.buttonPanel.Dock = System.Windows.Forms.DockStyle.Bottom;
- this.buttonPanel.Location = new System.Drawing.Point(0, 101);
- this.buttonPanel.Name = "buttonPanel";
- this.buttonPanel.Size = new System.Drawing.Size(384, 40);
- this.buttonPanel.TabIndex = 4;
- //
- // btnClose
- //
- this.btnClose.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
- this.btnClose.FlatStyle = System.Windows.Forms.FlatStyle.System;
- this.btnClose.Location = new System.Drawing.Point(208, 8);
- this.btnClose.Name = "btnClose";
- this.btnClose.Size = new System.Drawing.Size(75, 23);
- this.btnClose.TabIndex = 4;
- this.btnClose.Text = "&Close";
- this.btnClose.Click += new System.EventHandler(this.btnClose_Click);
- //
- // pagePanel
- //
- this.pagePanel.Dock = System.Windows.Forms.DockStyle.Fill;
- this.pagePanel.Location = new System.Drawing.Point(0, 0);
- this.pagePanel.Name = "pagePanel";
- this.pagePanel.Size = new System.Drawing.Size(384, 101);
- this.pagePanel.TabIndex = 5;
- //
- // btnStart
- //
- this.btnStart.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
- this.btnStart.FlatStyle = System.Windows.Forms.FlatStyle.System;
- this.btnStart.Location = new System.Drawing.Point(133, 8);
- this.btnStart.Name = "btnStart";
- this.btnStart.Size = new System.Drawing.Size(75, 23);
- this.btnStart.TabIndex = 3;
- this.btnStart.Text = "< &Start";
- this.btnStart.Click += new System.EventHandler(this.btnStart_Click);
- //
- // etchedLine1
- //
- this.etchedLine1.Dock = System.Windows.Forms.DockStyle.Top;
- this.etchedLine1.Edge = Sdl.Utilities.SplitSDLXLIFF.Wizard.EtchEdge.Top;
- this.etchedLine1.Location = new System.Drawing.Point(0, 0);
- this.etchedLine1.Name = "etchedLine1";
- this.etchedLine1.Size = new System.Drawing.Size(384, 8);
- this.etchedLine1.TabIndex = 4;
- //
- // WizardSheet
- //
- this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
- this.ClientSize = new System.Drawing.Size(384, 141);
- this.Controls.Add(this.pagePanel);
- this.Controls.Add(this.buttonPanel);
- this.KeyPreview = true;
- this.Name = "WizardSheet";
- this.Text = "WizardSheet";
- this.Closing += new System.ComponentModel.CancelEventHandler(this.WizardSheet_Closing);
- this.Load += new System.EventHandler(this.WizardSheet_Load);
- this.buttonPanel.ResumeLayout(false);
- this.ResumeLayout(false);
-
- }
- #endregion
-
- private System.Windows.Forms.Button backButton;
- private System.Windows.Forms.Button nextButton;
- private System.Windows.Forms.Button finishButton;
- private System.Windows.Forms.Button cancelButton;
- private System.Windows.Forms.Panel buttonPanel;
- private Sdl.Utilities.SplitSDLXLIFF.Wizard.EtchedLine etchedLine1;
- private System.Windows.Forms.Panel pagePanel;
-
- private IList _pages = new ArrayList();
- private Button btnClose;
- private Button btnStart;
- private WizardPage _activePage;
-
- private void WizardSheet_Load(object sender, System.EventArgs e)
- {
- if (_pages.Count != 0)
- {
- ResizeToFit();
- SetActivePage(0);
- }
- else
- SetWizardButtons(WizardButtons.None);
- }
-
- private void ResizeToFit()
- {
- Size maxPageSize = new Size(buttonPanel.Width, 0);
-
- foreach (WizardPage page in _pages)
- {
- if (page.Width > maxPageSize.Width)
- maxPageSize.Width = page.Width;
- if (page.Height > maxPageSize.Height)
- maxPageSize.Height = page.Height;
- }
-
- foreach (WizardPage page in _pages)
- {
- page.Size = maxPageSize;
- }
-
- Size extraSize = this.Size;
- extraSize -= pagePanel.Size;
-
- Size newSize = maxPageSize + extraSize;
- this.Size = newSize;
- }
-
- public IList Pages
- {
- get { return _pages; }
- }
-
- private int GetActiveIndex()
- {
- WizardPage activePage = GetActivePage();
-
- for (int i = 0; i < _pages.Count; ++i)
- {
- if (activePage == _pages[i])
- return i;
- }
-
- return -1;
- }
-
- private WizardPage GetActivePage()
- {
- return _activePage;
- }
-
- public void SetActivePage(int pageIndex)
- {
- if (pageIndex < 0 || pageIndex >= _pages.Count)
- throw new ArgumentOutOfRangeException("pageIndex");
-
- WizardPage page = (WizardPage)_pages[pageIndex];
- SetActivePage(page);
- }
-
- private WizardPage FindPage(string pageName)
- {
- foreach (WizardPage page in _pages)
- {
- if (page.Name == pageName)
- return page;
- }
-
- return null;
- }
-
- private void SetActivePage(string newPageName)
- {
- WizardPage newPage = FindPage(newPageName);
-
- if (newPage == null)
- throw new Exception(string.Format("Can't find page named {0}", newPageName));
-
- SetActivePage(newPage);
- }
-
- private void SetActivePage(WizardPage newPage)
- {
- WizardPage oldActivePage = _activePage;
-
- // If this page isn't in the Controls collection, add it.
- // This is what causes the Load event, so we defer
- // it as late as possible.
- if (!pagePanel.Controls.Contains(newPage))
- pagePanel.Controls.Add(newPage);
-
- // Show this page.
- newPage.Visible = true;
-
- _activePage = newPage;
- CancelEventArgs e = new CancelEventArgs();
- newPage.OnSetActive(e);
-
- if (e.Cancel)
- {
- newPage.Visible = false;
- _activePage = oldActivePage;
- }
-
- // Hide all of the other pages.
- foreach (WizardPage page in _pages)
- {
- if (page != _activePage)
- page.Visible = false;
- }
-
- newPage.OnPostSetActive(e);
- }
-
- internal void SetWizardButtons(WizardButtons buttons)
- {
- // The Back button is simple.
- backButton.Enabled = ((buttons & WizardButtons.Back) != 0);
-
- // The Start button will be shown in one case only
- btnStart.Enabled = btnStart.Visible = ((buttons & WizardButtons.Start) != 0);
-
- // The Next button is a bit more complicated. If we've got a Finish button, then it's disabled and hidden.
- if ((buttons == WizardButtons.Finish) || buttons == (WizardButtons.Back | WizardButtons.Finish))
- {
- finishButton.Visible = true;
- finishButton.Enabled = true;
-
- btnClose.Visible = false;
- btnClose.Enabled = false;
-
- nextButton.Visible = false;
- nextButton.Enabled = false;
-
- this.AcceptButton = finishButton;
- }
- else if ((buttons == WizardButtons.Close) || buttons == (WizardButtons.Back | WizardButtons.Close)
- || buttons == (WizardButtons.Start | WizardButtons.Close))
- {
- btnClose.Visible = true;
- btnClose.Enabled = true;
-
- finishButton.Visible = false;
- finishButton.Enabled = false;
-
- nextButton.Visible = false;
- nextButton.Enabled = false;
-
- this.AcceptButton = btnClose;
- }
- else
- {
- finishButton.Visible = false;
- finishButton.Enabled = false;
-
- btnClose.Visible = false;
- btnClose.Enabled = false;
-
- nextButton.Visible = true;
- nextButton.Enabled = ((buttons & WizardButtons.Next) != 0);
-
- this.AcceptButton = nextButton;
- }
- }
-
- private WizardPageEventArgs PreChangePage(int delta)
- {
- int nextIndex;
- if (delta == 0)
- nextIndex = 0;
- else
- {
- // Figure out which page is next.
- int activeIndex = GetActiveIndex();
- nextIndex = activeIndex + delta;
-
- if (nextIndex < 0 || nextIndex >= _pages.Count)
- nextIndex = activeIndex;
- }
-
- // Fill in the event args.
- WizardPage newPage = (WizardPage)_pages[nextIndex];
-
- WizardPageEventArgs e = new WizardPageEventArgs();
- e.NewPage = newPage.Name;
- e.Cancel = false;
-
- return e;
- }
-
- private void PostChangePage(WizardPageEventArgs e)
- {
- if (!e.Cancel)
- SetActivePage(e.NewPage);
- }
-
- private void nextButton_Click(object sender, System.EventArgs e)
- {
- WizardPageEventArgs wpea2 = new WizardPageEventArgs();
- wpea2.NewPage = _activePage.Name;
- _activePage.OnWizardPreNext(wpea2);
-
- if (_activePage.AllowNext)
- {
- WizardPageEventArgs wpea = PreChangePage(+1);
- _activePage.OnWizardNext(wpea);
- PostChangePage(wpea);
- }
- }
-
- private void backButton_Click(object sender, System.EventArgs e)
- {
- WizardPageEventArgs wpea = PreChangePage(-1);
- _activePage.OnWizardBack(wpea);
- PostChangePage(wpea);
- }
-
- private void finishButton_Click(object sender, System.EventArgs e)
- {
- WizardPageEventArgs wpea2 = new WizardPageEventArgs();
- wpea2.NewPage = _activePage.Name;
- _activePage.OnWizardPreNext(wpea2);
-
- if (_activePage.AllowNext)
- {
- WizardPageEventArgs wpea = PreChangePage(+1);
- _activePage.OnWizardNext(wpea);
- PostChangePage(wpea);
- }
-
- //CancelEventArgs cea = new CancelEventArgs();
- //_activePage.OnWizardFinish(cea);
- //if (cea.Cancel)
- // return;
-
- //this.DialogResult = DialogResult.OK;
- //this.Close();
- }
-
- internal void PressButton(WizardButtons buttons)
- {
- if ((buttons & WizardButtons.Finish) == WizardButtons.Finish)
- finishButton.PerformClick();
- else if ((buttons & WizardButtons.Next) == WizardButtons.Next)
- nextButton.PerformClick();
- else if ((buttons & WizardButtons.Back) == WizardButtons.Back)
- backButton.PerformClick();
- else if ((buttons & WizardButtons.Close) == WizardButtons.Close)
- btnClose.PerformClick();
- else if ((buttons & WizardButtons.Start) == WizardButtons.Start)
- btnStart.PerformClick();
- }
-
- internal void EnableCancelButton(bool enableCancelButton)
- {
- cancelButton.Enabled = enableCancelButton;
- }
-
- internal void EnableCloseButton(bool enableCloseButton)
- {
- btnClose.Enabled = enableCloseButton;
- }
-
- internal void EnableStartButton(bool enableStartButton)
- {
- btnStart.Enabled = enableStartButton;
- }
-
- private void cancelButton_Click(object sender, System.EventArgs e)
- {
- this.Close();
- }
-
- private void WizardSheet_Closing(object sender, System.ComponentModel.CancelEventArgs e)
- {
- //if (!cancelButton.Enabled)
- // e.Cancel = true;
- //else if (!finishButton.Enabled)
- if (cancelButton.Enabled && !finishButton.Enabled)
- OnQueryCancel(e);
- }
-
- protected virtual void OnQueryCancel(CancelEventArgs e)
- {
- _activePage.OnQueryCancel(e);
- }
-
- private void btnClose_Click(object sender, EventArgs e)
- {
- CancelEventArgs cea = new CancelEventArgs();
- _activePage.OnWizardFinish(cea);
- if (cea.Cancel)
- return;
-
- this.DialogResult = DialogResult.OK;
- this.Close();
- }
-
- private void btnStart_Click(object sender, EventArgs e)
- {
- WizardPageEventArgs wpea = PreChangePage(0);
- _activePage.OnWizardBack(wpea);
- _activePage.OnWizardNewStart(wpea);
- PostChangePage(wpea);
- }
- }
-
- [Flags]
- public enum WizardButtons
- {
- None = 0,
- Back = 1,
- Next = 2,
- Finish = 4,
- Close = 8,
- Start = 16,
- }
-}
diff --git a/SDLXLIFFSplitMerge/Wizard/WizardSheet.resx b/SDLXLIFFSplitMerge/Wizard/WizardSheet.resx
deleted file mode 100644
index 19dc0dd8b3..0000000000
--- a/SDLXLIFFSplitMerge/Wizard/WizardSheet.resx
+++ /dev/null
@@ -1,120 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- text/microsoft-resx
-
-
- 2.0
-
-
- System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
\ No newline at end of file
diff --git a/SDLXLIFFSplitMerge/Wizard/WizardSidebar.cs b/SDLXLIFFSplitMerge/Wizard/WizardSidebar.cs
deleted file mode 100644
index dadc309db3..0000000000
--- a/SDLXLIFFSplitMerge/Wizard/WizardSidebar.cs
+++ /dev/null
@@ -1,65 +0,0 @@
-using System;
-using System.Collections;
-using System.ComponentModel;
-using System.Drawing;
-using System.Data;
-using System.Windows.Forms;
-
-namespace Sdl.Utilities.SplitSDLXLIFF.Wizard
-{
- ///
- /// Summary description for WizardSidebar.
- ///
- public class WizardSidebar : System.Windows.Forms.UserControl
- {
- ///
- /// Required designer variable.
- ///
- private System.ComponentModel.Container components = null;
-
- public WizardSidebar()
- {
- this.Dock = DockStyle.Left;
-
- // This call is required by the Windows.Forms Form Designer.
- InitializeComponent();
-
- // Set a default image.
- Bitmap image = new Bitmap(this.GetType(), "Bitmaps.ExampleSidebar.bmp");
- this.BackgroundImage = image;
-
- // Avoid getting the focus.
- this.SetStyle(ControlStyles.Selectable, false);
- }
-
- ///
- /// Clean up any resources being used.
- ///
- protected override void Dispose( bool disposing )
- {
- if( disposing )
- {
- if(components != null)
- {
- components.Dispose();
- }
- }
- base.Dispose( disposing );
- }
-
- #region Component Designer generated code
- ///
- /// Required method for Designer support - do not modify
- /// the contents of this method with the code editor.
- ///
- private void InitializeComponent()
- {
- //
- // WizardSidebar
- //
- this.Name = "WizardSidebar";
- this.Size = new System.Drawing.Size(165, 320);
- }
- #endregion
- }
-}
diff --git a/SDLXLIFFSplitMerge/Wizard/WizardSidebar.resx b/SDLXLIFFSplitMerge/Wizard/WizardSidebar.resx
deleted file mode 100644
index 04ae11c879..0000000000
--- a/SDLXLIFFSplitMerge/Wizard/WizardSidebar.resx
+++ /dev/null
@@ -1,130 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- text/microsoft-resx
-
-
- 1.3
-
-
- System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- False
-
-
- False
-
-
- True
-
-
- True
-
-
- 80
-
-
- (Default)
-
-
- False
-
-
- Private
-
-
- WizardSidebar
-
-
- 8, 8
-
-
\ No newline at end of file
diff --git a/SpotCheck/Form1.Designer.cs b/SpotCheck/Form1.Designer.cs
deleted file mode 100644
index d7cedce313..0000000000
--- a/SpotCheck/Form1.Designer.cs
+++ /dev/null
@@ -1,108 +0,0 @@
-namespace Sdl.Community.SpotCheck
-{
- partial class dlgSpotcheckWarning
- {
- ///
- /// Required designer variable.
- ///
- private System.ComponentModel.IContainer components = null;
-
- ///
- /// Clean up any resources being used.
- ///
- /// true if managed resources should be disposed; otherwise, false.
- protected override void Dispose(bool disposing)
- {
- if (disposing && (components != null))
- {
- components.Dispose();
- }
- base.Dispose(disposing);
- }
-
- #region Windows Form Designer generated code
-
- ///
- /// Required method for Designer support - do not modify
- /// the contents of this method with the code editor.
- ///
- private void InitializeComponent()
- {
- System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(dlgSpotcheckWarning));
- this.lstFiles = new System.Windows.Forms.ListBox();
- this.label1 = new System.Windows.Forms.Label();
- this.cmdNo = new System.Windows.Forms.Button();
- this.cmdYes = new System.Windows.Forms.Button();
- this.SuspendLayout();
- //
- // lstFiles
- //
- this.lstFiles.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
- | System.Windows.Forms.AnchorStyles.Left)
- | System.Windows.Forms.AnchorStyles.Right)));
- this.lstFiles.FormattingEnabled = true;
- this.lstFiles.Location = new System.Drawing.Point(12, 49);
- this.lstFiles.Name = "lstFiles";
- this.lstFiles.SelectionMode = System.Windows.Forms.SelectionMode.None;
- this.lstFiles.Size = new System.Drawing.Size(445, 147);
- this.lstFiles.TabIndex = 0;
- //
- // label1
- //
- this.label1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
- | System.Windows.Forms.AnchorStyles.Right)));
- this.label1.Location = new System.Drawing.Point(12, 9);
- this.label1.Name = "label1";
- this.label1.Size = new System.Drawing.Size(445, 36);
- this.label1.TabIndex = 1;
- this.label1.Text = "The following files still seem to have spot check comments in them. Do you really" +
- " want to close Trados Studio?";
- //
- // cmdNo
- //
- this.cmdNo.DialogResult = System.Windows.Forms.DialogResult.Cancel;
- this.cmdNo.Location = new System.Drawing.Point(382, 203);
- this.cmdNo.Name = "cmdNo";
- this.cmdNo.Size = new System.Drawing.Size(75, 23);
- this.cmdNo.TabIndex = 2;
- this.cmdNo.Text = "No";
- this.cmdNo.UseVisualStyleBackColor = true;
- this.cmdNo.Click += new System.EventHandler(this.cmdNo_Click);
- //
- // cmdYes
- //
- this.cmdYes.Location = new System.Drawing.Point(301, 203);
- this.cmdYes.Name = "cmdYes";
- this.cmdYes.Size = new System.Drawing.Size(75, 23);
- this.cmdYes.TabIndex = 3;
- this.cmdYes.Text = "Yes";
- this.cmdYes.UseVisualStyleBackColor = true;
- this.cmdYes.Click += new System.EventHandler(this.cmdYes_Click);
- //
- // dlgSpotcheckWarning
- //
- this.AcceptButton = this.cmdYes;
- this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
- this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
- this.CancelButton = this.cmdNo;
- this.ClientSize = new System.Drawing.Size(469, 238);
- this.Controls.Add(this.cmdYes);
- this.Controls.Add(this.cmdNo);
- this.Controls.Add(this.label1);
- this.Controls.Add(this.lstFiles);
- this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
- this.MinimumSize = new System.Drawing.Size(324, 120);
- this.Name = "dlgSpotcheckWarning";
- this.Text = "Spotcheck marker warning";
- this.ResumeLayout(false);
-
- }
-
- #endregion
-
- private System.Windows.Forms.ListBox lstFiles;
- private System.Windows.Forms.Label label1;
- private System.Windows.Forms.Button cmdNo;
- private System.Windows.Forms.Button cmdYes;
- }
-}
\ No newline at end of file
diff --git a/SpotCheck/Form1.cs b/SpotCheck/Form1.cs
deleted file mode 100644
index ebc519ad1d..0000000000
--- a/SpotCheck/Form1.cs
+++ /dev/null
@@ -1,32 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Windows.Forms;
-
-namespace Sdl.Community.SpotCheck
-{
- public partial class dlgSpotcheckWarning : Form
- {
- public dlgSpotcheckWarning()
- {
- InitializeComponent();
- }
-
- public void FillList(List paths)
- {
- foreach (string path in paths)
- lstFiles.Items.Add(path);
- }
-
- private void cmdYes_Click(object sender, EventArgs e)
- {
- this.DialogResult = System.Windows.Forms.DialogResult.Yes;
- Close();
- }
-
- private void cmdNo_Click(object sender, EventArgs e)
- {
- this.DialogResult = System.Windows.Forms.DialogResult.No;
- Close();
- }
- }
-}
diff --git a/SpotCheck/Form1.resx b/SpotCheck/Form1.resx
deleted file mode 100644
index 05a4a8c93d..0000000000
--- a/SpotCheck/Form1.resx
+++ /dev/null
@@ -1,1953 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- text/microsoft-resx
-
-
- 2.0
-
-
- System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
-
-
- 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
- EREREBAQEBAQIioAAAAAAAAAAAIiozERETETERMQEBAQwi4AAAAAAAAAAAI8IrMRMRERERERETGwwigA
- AAAAAAAAAAAjAiIxETERERERERERIqAAAAAAAAAAAAACKiKzERExERERERERomAAAAAAAAAAAAAAIgI6
- OxERMREREREzwuAAAAAAAAAAAAAAAiACMjszETMRE7MzogAAAAAAAAAAAAAAACIgwjI7OzMzMzMsKAAA
- AAAAAAAAAAAAAAIiIKIzIzOzMTpCoAAAAAAAAAAAAAAAAAACIiACIjIyqMIqAAAAAAAAAAAAAAAAAAAA
- AiIipKSkIiKAAAAAAAAAAAAAAAAAAAAAAAACIiIirgAAAAD///////8AAPH//////wAA4P//////AADA
- f/////8AAIA//////wAAgB//////AACAD/////8AAIAH/////wAAwAP/////AADAAf////8AAOAB////
- /wAA+AD/////AAD8AH////8AAP4AP////wAA/wAf////AAD/gA////8AAP/AB////wAA/+AD////AAD/
- 8AH///8AAP/4Af///wAA//wB////AAD//gDB//8AAP//AAAP/wAA//+AAAP/AAD//8AAAP8AAP//wAAA
- PwAA///AAAAfAAD//4AAAA8AAP//gACABwAA//+ALSADAAD//4FrUAEAAP//Ab32AQAA//8Eq1oAAAD/
- /wA27YAAAP//AgVbQAAA//8AkqqgAAD//wAAVVAAAP//gAAFUAAA//+AAAAQAAD//8AAAAEAAP//4AAA
- AQAA///wAAABAAD///gAAAMAAP///AAAAwAA///+AAAHAAD///+AAA8AAP///+AAHwAA/////gD/AAAo
- AAAAIAAAAEAAAAABAAQAAAAAAIACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wCAgIAAwMDAAAAAgAAA
- AP8AAICAAAD//wAAgAAAAP8AAICAAAD//wAAgAAAAP8AAACAAIAA/wD/AAACQAAAAAAAAAAAAAAAAAAE
- ZmQAAAAAAAAAAAAAAAAARmQmAAAAAAAAAAAAAAAAAGI2QmAAAAAAAAAAAAAAAABiY1bmAAAAAAAAAAAA
- AAAAIiZiYkAAAAAAAAAAAAAAAASCJkYkAAAAAAAAAAAAAAAAZDJyYkAAAAAAAAAAAAAAAARiNSVkAAAA
- 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
- ////AAD/8AH///8AAP/4Af///wAA//wB////AAD//gDB//8AAP//AAAP/wAA//+AAAP/AAD//8AAAP8A
- AP//wAAAPwAA///AAAAfAAD//4AAAA8AAP//gACABwAA//+ALSADAAD//4FrUAEAAP//Ab32AQAA//8E
- q1oAAAD//wA27YAAAP//AgVbQAAA//8AkqqgAAD//wAAVVAAAP//gAAFUAAA//+AAAAQAAD//8AAAAEA
- AP//4AAAAQAA///wAAABAAD///gAAAMAAP///AAAAwAA///+AAAHAAD///+AAA8AAP///+AAHwAA////
- /gD/AAAoAAAAIAAAAEAAAAABAAgAAAAAAIAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQD///8AooJd
- AHG65gAXV4MA5cihAE5ENgBbiKkACylFAKOingBnamsAPSQCAP7nyAB5XDUAktT3AIeHhAC4v70AwqR9
- AD1skAAcHiEAEU1bAHGjwwDa0ccAQVVXAAALNAAsMTUAX1dKAIJ0YgDCs6EARTIcAI+owgAoTWwAjcHk
- AP/z5gCtkm8AQ3yjAPLZuACimIYAGzhRANGzjQBxZVQAh2tCAAlRcQDOxbYAXZi9AHZ3cgDv59sAk4Nv
- ACZnhwCwr6sAACA1AEFESgBaW14AUFU+ABISEgB6tNcAk5KPACgnJgA/Z38AEz9jACdWfgC2qpgAIkNc
- ALaghgB2m7UAOTgxAG9cQgDdyrMAX1A7AIjM8gD/4boAz7yjAH3C7AAbTG8AToafACJbbQBTj7UAmYx6
- AIt2VgD//dkA//nxAO3PqgCcmZUABwsMAGiWtQAAFD8AYl9VAHNyaQCDf3kAxLqrAHGtzwBPTUgAln9e
- ADExJAATVmoAL1+GAKufjQD/79kAP3KbAObTugCCv+IAk5KCAJuEZwBqbnUAHlF6ANrBogBWVlIAQy4R
- ADc5PQBEPzIAuJl0AIV4awC5uLMAS3ucANm6kgD/880AaGdcAApPZQBIRkAAM2yUAGmz4gBRkqoAESxO
- AK6mmABrZUsAXmNsAGunywCMhXkAETVTAHViSwAORlsAq6mjAB5ciAA0ZYsAI0dlAINsSwD//OgAVEo7
- AFVTSQB7e2wAbWtlAOLTwgDq07MAEUhzAL2miABGhakAjoqBACEhHQBAQEAAABkzAIqJjACQ0PEAI1d1
- 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
- 5Pfdl71ANqAXAozVYDC950eGk3uoy09WDjkeE77mY63SXWb8eiVbG5dzdXG1wAg3iPnvNjjio4t5xP5U
- AK4y9i8n9q/Gt+T7v7iSjk/PhuHLi5vxzbUt+P52OoE+lwP/B/L5X19P5R1+JvfFgzrZLj7G+lzyK83z
- M78vHt7B5/lDFH4/z3MO0p2nIs97KQ6XR3Lw7y0IxLY0N/jo9ybGf56D32N5N/jr90Ww6SCYz+3zk/60
- nvPlJyuHHI+JjebqVmnOU369TOC/lKuPKwT+6wT+1+od8OH5bHzIC0ChwvvfqsTX5Ps/u5SGT06F4fML
- sfjmahK+J4n/46vZilHeG2n4gnz+x4Lcf5vL/RDc3e+P27u8eZefbeFlkl+c5z8orO83+/1l3O/neMxG
- mtNk5HgtxkulYdhXGIjd+f7YnrkJXjq9+Dw/k/1stj/AsC8iVw6Bxfy+vxjMUl0mP1k55Hhcw8907NoU
- 52n/uETgv5itj8v5RrhWbIY72+zx/rksfHAhBx9dyif2L8HntypI+teRnE/Fx6dC8dn5GHx5OZH8fRqx
- f2bT7btslPeDM7FNcp8t77G1/ZvbPXmjj7N+qS1O5K/H4Sw2z7+Cz/PXx+ihOkKL+/1C8vvZ7rOQ5jAJ
- 2Z4LcLA0FHsJ+LtyfTn4/YwGwmXRc5z9Wdc/yHgA3+m3dlH//zGY3lse8ZVDjseFu+motanOU3+9kKWN
- Czn6uJRnhKuFCvC/dyYDH5zLxIcX8vAx8/7Xy/Dl7Rp8eikDH74cgk/OxeCLSwn4hmQ+a/CJa/ps9x4b
- 5X3rWBgf6mFynx3XxfbuX9rq/AjrH8qw5JJ/B5P8UTqoIslf6r+I+/0stxlIsZ+EFIdp2F8QgD0E/J1Z
- Xmggz+9r0B9OC1W43/chFRBkMgCxq4fDRmPgb0Yz+jjLT1YOOR4Tm1aOXbPFccav5zO1cZ6Y/yKB/3KR
- Ke40uOHd0+l490wmPjjP2L8AnxD7f/FKFT69nI0PToTg4zPRZAESCPRbOPDZNVwfnVX4/IfHw3l3n8t9
- 3uTzxJVaV1yodORen7N+9hocSFtJkt+kSfKzef4i34V8si/DZRq22E9Esv0U7Mnzxa4cYv0MT9RneiHY
- fBQHP2v6+er1RoiJGuLWjISD1qBG41n95CO85ZCjPeBPdpr+Dwb+c5n6uJBrhEuFJrhd74qHL6fi3VPp
- eO9sVjP736jAJ5cy8d7xYHx0OgqfXIwnqZ/M1/M/OZfQ5PPZgR18mo/kPmvysU08l6qd+XFdLxdZN7N+
- ijl2xhvxLbzsvD5R8rPLONOdpiLZdjyS7aZgd7a3gvXTPVCf7olAs+FwXqQCT83u8Dfoi3CzQYizGglP
- o5GNJrPV8uQnK4ccjwlXw7FWDPznMrRxNksf53KMcLHABLfqXPDwRAoenkwh9s/A+8T+fOnvRhkVggy8
- ezQIH5yKxCfn4/AZSX2+ZZeAzzbvMJ8vdvdFuc/27Z+vdOA38B5/hPVNsX2zQVOXny/xeSkkf6rjZCRu
- GM9P6t2ZtYmzfl2qO7aleSDSagp5fhXu9wMM+yF85VAkWo2Ct/HIRtM5/atV5CO85ZCj7XAzHheU5jbz
- n2fStXEmUxdnCfwX8k1ws9aZPHsS3jq5Be+cSuPs/8FFYn+S/h+eT8M7RwLx3skIkvmbeWf/w9PM50fy
- Zb03DgXzST7W3Wdr+qzJd7HKiVjfDi8XNrP+Psb67OCOGD1+ak9F0FIU+yqW+DJdpwv38Y1D7NqRqEt2
- 4l6/LtkVtVvcEGE1Ca4Efu73WbOPwJ9ERSLEYizM5w88pSvP98shx2MafmbjArM3zvrtDDH/6XRdnMk2
- xPk8E9yoccQbRxPwJhUAxv7vCOz/0eUivHcmFQ8PB+DdE+H4gNj+wzOxBPxofgsP8/n39geQ3Pfhx3Sx
- M/qY3D9X7sDv4TsudPibWF9s9IUu57v4miS/M/l9O8X5/NFrRqAm0Z4Y3x1bqQhsTXJBvP08uC5+rsnv
- x1gOQ9KLYxG9djxWLBx8yXi2Si/56cohx2PAn+U267dTxPwn03RxOssQZ3NNcK3aAW8cjscbR+Lx4Hgy
- 3ib2f5exP0n/989n4S0C/9vHwviGHd7gO0Y+nwH/QABf1mM+v1nuO/Lbd9lVXEdz1j7C+vUx+qiJ0EJl
- 8DKU+C3ikj/bfSbSHKcgyUYdm9eN5pdz1CTYYVuKK6rj7Skdkei4CO5Ln+PDPaHk92OoQGyxHo/N6ydi
- zcIhb1rO7DVUfrpyyNGW5zcZE5hJ4H85VRsniPlPZRriTI4JrlbZ496hzXj9pc3E/okk/8n7nyb2v5BH
- FiADbx7yJ4kfyj2+osEXoljP3+vLfT6T+6y73yT3izbgeN46PsrLWH+PwPps+y6b5S8PXIIi3wVNkj/F
- YRL3+7Hk48NWDEZ51BrUJrugOs4OlfEOSPXQhIfG8wq/T3/POv0pG9SRaj8FVkuHf2q+aPAw+enKIUdb
- nt9oTECG68zfTqQQ+NN0cDLDAKezjXG5wo5YPAr3XorFfYH9HzL2P5eDd06n4f4BP2L/YC71xUEe1uBr
- 8vl1bvx8Pramz5p87Iw+dhsP273H1vU568fq8+U93ugLWEySf54g+aeS5J/I7+OLJlCHmquhNNwSNUlO
- qIi1obRFlo8+vLS6IcioP5/si1s7Cik2E5DhMBXWmiO+WqMxdKb8dOWQo41wMR7jn+4y87fjqVo4nqJD
- 7G+AU1nGuFRui1f3ReC1g9Gc/d84mogH3PtnkQVIIbD7EtsHKRj/UDPw2RQfX9bb6sKP5FbIfWscy7XC
- S5mr+Gk9otevi1awPm/0+S3kgz3ZbjMUkt9Wnfv9qNXD+RXcRaErsTXRCeUxG1BG4M/1N4G3dncEk9+P
- shiKeKvRSLWdgByX6XDQGf23VcuGaMhPVw452ggnAn8agf/YFi0c26KL42n6OJlphAulG3B7Txhe3R+O
- uwdj8Dqx/5uc/TPIAiTj7j4f3D8Y0LSkJwU+8/lsmKdJ7uev40t7bIZfyvq1kQrWL2Os7zMfuR6zueRP
- dZgsSH7m94ch0LgfCoLNyes7oCzqRZRFW1MxsOTr+6FmAxFtORwJ68ci3X4iCt1nwlF/7N/XLB9hJD9d
- OeRoPZ5zMRidmu4287ejyVo4nKyNY6n6OJFhhPMl1ri1O4QKQCgVgEjcPUTy/2gCsX8qHrycQt7eG/f2
- +zUt6THgX+fAd+Wz+wz47KAOJvcVTb5V2Je64lHWD1ewPmv0FXg9KvkTrMfx+/jYZZzsFt5MLy3u90uj
- 1nPwF4dZItCwLz+/P3b1CCS9OI4k/yQU0GtsNB7/z3UaI1zkxyuHHG2A39FgVH7+pjmNR5K08FKSNo6k
- 6OF4uiHOFr2IGzuCcGtXMG7vDcdrB6Jx73Ac3iD2f/PEFtzZ402M78P35yuAvxFXahQNPtHns+4+l/ti
- ky/ZjE/ziazP5vjLJI2+LEHyJ9s2L/GFkZ8PMOyDDI/lqIizQUmEFYF/PSqoAIStGIqIFUOwec1IJFuP
- 536/mNSDr8XERiuNkV7y45VDjseAP2/T7MbDictxKJHYf4sejqYZ4EzhOlxvCMCNnYF4ZXco7uyLxGuc
- /RNx/1gSsf0m3N7pJUh9CfAr7PnsPvP5rLsvyn22tMdO6mHTfIz12Sgvm+Mv8SfW956nkPwurMs/GUk2
- 4/kSX9Sq4QglZvc36I10Dw3y+8T44WtJ+q9HefQ6Av8wRFoMQZzVKGzZoI5Mx2kE/jkIXjOZwD8qXX68
- csjRBvgdDMfk5XrObjwYr4kDCVo4lKyLI6mGOJVvhavbfHBtux9u7gzCK+T/77DuP7H/vSNxfB2fdfWZ
- x28GvqLBx2b3mc8/Ish9tmWXLe2xk3n5uj5jfTbUQ6zPJvp4o4+8ulTyx64dhQjLYQghT+9H4E+wn41S
- Yvzi8DUE/PXk/+0QvZoKhOVQxK8bwzv9WU7TUUyvFWs9rXH9slHV8uOVQ442wG+vNzo3x2NW48E4Deyn
- AnAwSZfY3wAn89bicq0XrtT74Pr2ANzcRf5/bwRn/9deim0C/mUB+OcfAb7C57PuPpP7e7eY8SZfA2P9
- qGbWZ1t3WaOP7eDLcp3eJPnZEl8MSXnxMk5f/V6Is5lB4F+HorDVKI9ch60E/lgrdURTgUgg8KfaTkS2
- 8zSUeM1Dou3MxvWaY/d5LFB5QX7EcsjRBvizN85q3Be3DPvjiP0TdYj99XEiZzUubvXApZpNuFrvi+s7
- AnGTyX9i/zsHo0gVKLr6Co/fDPwTIvCZzxfk/m4m9+MM+Qw/W9evCtVoZn2vubzRx7bvioM9cST5o1cz
- vz+Y79P30evJ2BwlkVYoJvBXEPPXJjgifsNkxK4ahsT1Y5FmN4kv85US+DNc5sJae+zV9TPkI7zlkKNV
- 8NsS+DPdZzXu3bwMe+KWY1+8Ng4k6eFY9iqcr3LHhWoqALXeuNrgj+s7g/EKsf/tA9G4UsvO4XPkzb0m
- 4LPOfq4VDhPwFT5f0d1nTb6GWH1ifR3Fur7g9Ys46ysafWz7bpPkJw/PRnpDV7CbePvDR1cV0esnozhi
- DTH/KgK/FWoSHLDFYSY/wIN1+tPsGfhJHXjTa26cjw3a42+u1u3fX37EcsjRQjBm3KA1ujTDbWbj3til
- 2B2jgb1xWtifqIcjmRY4W+aCc1VupAA8cblOkP/E/reoAFysduXLeayr38T4IvAzLBU+P7lZ7m+L1kVN
- uFZTh5+xfgGxfq7HLMXavuPkZsnPlvjIyzO/H2DUD966PRG6cgSX/MUE/vIoK9Qm2iOdGH4zKQTW6U93
- mIxcVwK/13wUei+EvaH6h3a6I0fJT1kOOVoBv4Ph6AN5m2ZjT8xS7IzWwO7NWtiXQL4/fSUB2wlneAHY
- iIs1Xri8zQ9XdwbhOhWAc5VOOF1sw7fotgT8vQT8XYnGTXKfLe1Vhy1XrOs3ef05vNGX4TyVH9cl7t1n
- S3zhKxV+n93E66WjipAVwznrM9lfHkPgT7JDjucybGYbejaoI8NxCvLcZnLwV/gthpPRhK+ddceNk5+y
- HHK0An47vdEHCjbNatwZtQQ7opZhV6wmyX/y/anmxOj2OFXiiDPlrjhP8v8il/8BuEr+/0ypPV/HZ8t5
- zOMz4B/iwFc0+NiyHjuXr54DXyH3K0OWCay/gLM+8/qZYqPPbkKT5GdLfKLf9zPoi03aPRBkPowzf2nE
- as78dQl2yPPSRByphBRb1umfinz3WSjzWYAK/6VwNZv44wbNcUvkpyyHHC0E64bb6I3cn+c5q3FHxGJs
- j2Tsv5zYn3z/FlNidFucLLLDqVJSABVuVAA8canOF5dIAbxcZINjeVY4krOGN/cOKgNf4vO3CnK/XGR9
- bynrKxp9bPuuQvIrRnpFv++r3wdeWj2oCAzgI70M/JVR61ATb4PiICPErxuFVLuJyKLXKdg4m8C/ELX0
- Xl4rp/xqqz1eW37KcsjRCvPb6I7cn0O+uz58Meojl2F7lAZ2xpLvJxAfzWXLdqwA2ON0qTPOVrrjwlYv
- XCAFcLzAmg/wsAs3WHOPS336N7slwOc+P4LkfqhC7rOde0UC64teP81pCj+kU9HlV0h+NtLL/H6gUX9+
- WAc7p8/PoD+KQiw4+Cui1qKWwF8SbISEdaN5pz/beToHfzm9/jZ6Pz/Lab/a66lbyU9ZDjnaAD8xcGN9
- 2CJsC1uChkgNbI/WxN4kE5LyjNlJ2hdQASh2wCny/2fJ/5+t9MDRvPVc5h9Is+Az+48AX2jwKXx+s9wv
- 8Vv4KOu7TOObeFijr0nyrya/b6nw+2yvvo9eL3gI4C8MWakAf8xaYv4NqIy05Kf3pNtP5st8hR5ziPnp
- /xGqgbD1s36zNZjgLz9lOeRoRfZv0B2+L8ttZmNdCMnlsMXYFr4UDVEk/ROMCNxM0lMBYAqAFwAnKgCu
- OFXuhpeyrfjlmmwdf0+yqRLwFQ0+NsxTyeX+Ej7Qw27hYdN8ueT12VAPW95jjb5myT+SS352eEcQb/b1
- 5Z1+Dn5SAcUE/rKIVcT8awj81qiKskAyFQ3W6c9xnYEiKirlvgtRH7Yc0TazG211J0bIT7nd8dxTTjn+
- nWOcrkqPF7VH7M1wm4Ga4AWoDV5EBWAJtkWQ9I8zIClvgQPpq6kArMORPGscK7CnAuCIE0VO5PFXK9g+
- yZR39XfEGxLw9QXg63Dgs2GeckHus6U9dlgHm+YTWT/NcTI/p69Z8iuW+Ng8fyBv9vWBt05PeGp1JwXQ
- G/mBJs3gj7NGbdw6RaffYQpf5ivynEvgZwpGE4kOcxttdcZXyE/5qYNaLhD/CcGGYEj2X890m9FYHTQf
- 1UELUROyGHXh5P1j9bA32ZyYnQoAKYDD2etwNN+GCoAtfbQjqW/B2X4nKQTW1Rc9voLxtTjwmc9ne/XZ
- QR1saY+xfo6U9Vmjz1bB+putFFN93O+bD2xu9mmrYhOB348+L2DgD1+FSnakF4G/ZrMVUknyZzoS+N1m
- oohev9xvETG/JtLdFsJWb0K9yn/2Ed6dBV2XZ5ByYfhTef4FA/pt0Bp5PWfjTFQHzENl0AJUE/vXhC5F
- fYwOSX8TkvRUAFLJ22cyC0A+P+dFkvzW/M8Z27NdevWPAF+Tb9phU3wKn6+Q+4omnzLrT2xa22eSny3x
- sfV9cbiHNfuawE8WoCDQmDN/VRR5/rj1qE/cwO/yy6RCwtb4izfNQ4Uf8/yayPFYAjuDCS9bLBjR8/8Z
- 2Lv8m6ZcDP6dwm6JWt91mkOvZTpPRummqSjZNA2l3jNRETCX5P9SYn8DYnYT7Cag709dRQpgLdmANdhP
- H3clmnG2Z+v4bDmPdfV/B3zm83l3fx5v8onr+mz3XiqBVmz0se27bCNPpKXC74vDPazZx8DP0pc+z/cz
- EJh/tQB+G2Q5z+Br/Hnus5rAX0c/Q4mfBpyNJt31+HOC/2mD+/lnkH90YZDjScJQXaXfqoV9ruV4zMH5
- hs14cHU/vvrgHj56/TxeP9+A8/XRxOg6aIjRJW9vhj0p7BguC/poie1xxgq258DX4l19tpZfEbyUA581
- +NgwD/P5+Zvm8KU9NsMvZX2x0ce6/FzyC36fDfewZp+PrgL8zPf76fdGjo8uysMtURm9Cltj16Eh2RaZ
- LjOpACgGfIq95vHpvjq+tLgcjkYT33AwnjDkTw74Pwrcf2RxkAvBs46KvXv7uVjOvXbj5E4Ajfj0nZO4
- f6UAr1/Ox+uX8vDFBxchxmcPb+BE+SbUUzHYkWCKbTEGTWzPxnZZV597fIHxm4HfLPc56ztN4V6fs/6G
- cY9KfguF5Gd+nzf7dHty8LMiwIpBjo8OyX4F+Gs3r+OyP99jPrIZ+ElVlLDR3gACf8hybA3RhJvZ1C9d
- DSer/0mA3hlgd20hX3hGqfw+/+rCIBeDpxmFhYV9K6tqr3737Re4tG8jamIHYevmwaiNGyrkEPp6EKpj
- BuBwhSE+eniCF4Iv37tLBWAFgX0hb+yxCzfKheZeM/Dn8+26eQR81lNgTT42w5+qxPpM8kdLJb8Ifn1F
- p5/N9TPvz3oACvBboDJyNf1ca1GfZKMAPxvt3ThbAX5i/loC//YIXbibT/7azmzi9D8Z4J8GwLu1M59F
- YXjWhUAuAk8jCMfPlZRVHX//4RVsTxmL2oTh2JY0pinrkym3KD6yr+sSRxLoBmJPzlx8/v45Xggu7khC
- 4aYZfDmPDfEUicAnxmfLery7L8p9xvr2CtZnjb54Yn2p5BfX93mzj2Q+A79C8vdBADF/xsYlKGfMH2mJ
- rTFrOPiLfZcj22Uqn+6Tgr8hQgc+q6b/1d10ou6/CdjbC/KOgLo7ZY9nlN2fUqHoaFF4FoVAjpaiqLTC
- 9trls40709QJ4KOagL89ZRwatoxFWeRwFAQNRXHocNTEjcaOVPbnY/j3Vsf0x9mdjrwIvH37JPI9ZxHw
- 5z4CfHYOf6awtMem+UTWTxBYX5T8EST5m/2+otPPgM8lv0FfBFFB4OAPX4mqyFUK8Cdac/DnOCuDXwO7
- o/QQtG72/9oaqZv/QYBvi9VbYnFlUEuzLZCqdjCfVmHo3snC0JFiIBeBZ/0LW7/j0IMjFSbYljhCYPyx
- aCAlEOfYD846XWGn2QUOml3hpPk8fXwe3mY9kOymhtrEMbxA1CUMo2IxCX//6zf47vP3keUymUv9JuAT
- OFmTL8V+osD645obfWtG8Kk+vsRnPrC52afXi4NflPzBZAUy3RnzM/BbEPhXoz7BGmXBushx+j34dxH4
- gxn4DSa6/UGAb4vV28PeDKg9lbL3M0zp+6g+oVr4dy8Ecoix3rjngmj3kY31AvMz8NcljoanSTc4aKjA
- jtJhmQocl1IuV4GL9nNw0+sGN90e/GOK+0BeBLgaiB6A7z67Q/ke0hzUyedP4Vt2WZOPTfOxk3nZ8h6b
- 6GNXb0evHt4k+ZubfYpOP2v4McnPNvgEGw9AuusCzvwVVABqYon5E15ERYg+P7uvwEMJ/NG62Gw/r9HB
- YEL4MwZ9S+yuzOzdWmByKRv3UsrWANqHsm8Hs89TKAziz6X6DIvB0ywCcgHoSGwwV4svCBuBhmSFx2fM
- 72OuysEfsWEyXjm3B9989i7+8uM3ePjaeRysjEEwAXejzvPYZNQLG/UJqCt6o3rzaP7vq2PVSAXcwbef
- vovEF0c2yX3O+uT1xbV9heQfyrfwsvV9BnTW6Wfgb5L8VBBCSBGkOM9uAn919CrUx69DVZjJ78C/lcC/
- k8Cf6Lyg0c5oYuozBryU3ZWZXcrqrTF4H0n2kyQ7gmzAM0zpe/XpRJHo1QmV8DQLgVwEnmY4mPc/XZsw
- lrM/Y/Js38Ec/DmhJvjvv/2CX37+Fj9+8xm+++pDfPvFB/j+yw/x9WfvYF9JKLwNyZ8b9YYXFQJP+rw8
- cgTvDVTHDsRP3z7A/StHEL1qEJf7bHmPHc3NJb+lQvJzv286gEt8xvYM+FzykwUIJuCHmqkhxZHAH7YC
- FZErCPyWqIu3QnWkGXJcpOBfhK1By7EjUgfp7osb7Y0m7VJ5shHflmS9MuCVmb0lRu8tYWMR3P0fA/KB
- ncwnKQriz9RR1SAWg/Yqgn9VEZDB395wW6v2DmvqsQLAPvqYqsJ/5WBi/K844L/6+G188cEb+PTdu/j4
- 4W18+OYNvH//Kj56cBO3z+1GMEl4X+M+8DbuzdVACamJ+uTR2EY2ovG3v+FQUQix/RBFo0+U/MJIL/P7
- Yqefg19f8Psmagijv+fMH2aOinBzVEdZoG7zWtREr2wCv2LIh4F/GXZE6CDfeykI/Ac7eYR3ewDfrQV/
- 3rsFJpeCS02SgyQ5mHLIM0zxfQYK790ZpdCnA4VA9SkWgWetAuQQw3fDoH/uSB2rkO+bR8F5eRe8tHUz
- vvzkbXz69h189NZNfPDGNbx37xLeefUc3nrlNN68cRyvXz2M+5S3z+/BZptJ8DMh727Sh9uCiijWTByJ
- fbkL+OpAxsYFCLcYzCW/6PeZvGfNPg5+vV5c/jMbEEJ2IJxsQZLtVJSFmXH2r4pcidrY1aiNtkCuq+Ig
- Dyn4t0doo9hXAw5GE6/ZmU3s+4SgV2Z4KeCVWV3K5moC2ERwD34MyId1MjtbEMSfZ1AHFYOoDNrbSHwa
- ReBJVYCsANobATaDsYN8P5PuOb5D4bL8Ody/cZKz/Dvk+R/ePoMHN0/izevHSNK/hHuXDuA1Av2dMztx
- 6+UG3DxZh4sHixFOzO5v1p8XAW+TXny5sDZ+KG4eiyAL8RWBu2ez32fgN1CAnyUrBEHGA/hNvOHmg5Hc
- BH5zJfDP5EM+DPxsV1914FLUs52FQZpwNJ70xnpD9X6dZPnWGL53C8yuDHQRYEMlOVySIyhHPcMcIbyP
- +N4dVQkDO1AI+rRTDTyNIvCsLIAcvysAqYoCkOo+mOR8f7xLbP/mjWN4nQP+IO5e2IfXLuwm0O/AK6cJ
- 9MdrcP1IJS4fKsGFfQU4vy8PB0rD4E/g9zftx+1AyJp+Qj9ADb/8+B72F4XCX79XM/jJ6ysGe/oJfn8Q
- Ish6JNlOQVmoGcl+U1RGrEBNzCqS/quQ7z6bj/eyjT1sPz8Hf5gWqoO14GI66X03jfFjn4DlpQwv9est
- sfpQCRuPEHJkK+Ac8wTZ2YIwUviZhnVQHQx8imqg5x9YAGTwdyQ8rQb+KBaAZKfBCFo5CG+QxL9zdhdu
- M8Cfqsetk7XE5NUE+gpcPVSKKwcKcXFvHs7vzsaZHRk41ZCC09vTURhiQgWAwE12wNOgF9I8B6EheTT2
- ZM3iViDIpD+/l4+xvij5mSJg13Aze5C4YSJKQ02pAJgQ+M0J/Jaopcwj1s8XdvWV+S5EVcAS1IVqoi5c
- G5tWTv3BWnvStHaAXlnW95TIeSm7D5IAXcrmIshHC8lAOk6S4yknPKNUF95jrOT9O1IQhnVAEbRHDfR9
- CiqgsxZABv/TDNdVam9vTxnDC8AW5yEIWTkEr57bhWtHq3D1cLkA+CJc2V+Ay/vycWlvLi4S8M/vzMDZ
- 7ak4Xb8FJ2sTcHxrHI5Shq8Zzq0AUwHueqrYyqxA3GC8/Wodzu4uhMfy5wXJr/D7YWQLIgn8CdbjURJs
- jHICf0W4GbZGs6bfGhQS6Bn42WEe7PTeSgJ/behybI/UhseKqT/amY5e1A7Q95B06PsoMfwgJWYXGX20
- hI1FgLcE8omUk54gO1sQxgs/W3uLwYh2WoTB7VQCj1MBqk+gAJ42+8vRWtib9jtem6hQAFlewxBAEv4S
- efrze3JxYU8OLhDYL/LMwqVdWbhIwL9ArH+OWP9MXRJO1sThWGU0DpeF4xDZgLLo1VwFsF6Ah0FPhK/v
- B0WBGcdVAOvys+4/awSGrxiMSEsGfnUUBxoR8xujIswUVVHmnPkLNs3n+/kZ+Et9FqDSv3m+32/VzH84
- GqivlIBeWdors3x/iZwfImH3kUqMPl4CbDGnSHIq5fRnlFOF95gkvG97C8L4DtiG4U+pCPR9glWBbk+Z
- /WXm73QBMBuQVRCuWL8vDByBAOO+eKksAmd2puMMMfy57Wk4T3mB8hJ9fYGAf74hGWeI9V+ujsXxikgc
- Lg3FgcJA7Mv3wx7KsNVDuQ1gKwIu2t1QGT0StfFD8M6dWhyuiEeQYW+Ek9+PEsEfZIiyECPO/tXk+2vJ
- 8xd6LSLwz+Rn+JV6s0s7FqOGdfwjdRBoNfOfNoaTrFpo4omg7yOR9QOFX+hhkqbcGEFOjxfYVGTxyQII
- WU5TAudMyllPkJ0tCJM7UAzGP0VLoPaEBaAz8l8G/7867MzUrJO8hvNdgJXRozk7V8Wuw6ltW/BybRKx
- fCLPs5QXKM9vo6yNx6mqaBwn1j9SHIyDBX7Ym+OFnZkbsZ0y1WMR/Ex78wLgptcdEdZ9eYHZmT4Vf/+v
- XxCgr0rgH4Y4q9EoCtBDabAhgd8YleHM91ug0Hsx8txmoNBzDkq8FYM+rOm3PUILoetn/WanOyFE+IXp
- LpH2yiwvMvwoCbtLwS5l8xlCMqDOFnIe5fxnkPMk7zGzA8VgWgcsQ3tswZMWgM7I/7bGg7vKkv8PCAuL
- PoP8Nwz6X9YI3J4yGmEWg5DiPIekfTxJ+yicIHl/ksDOAH+2KhbnqmNwqiICJ0pDcKQoAAfzCPzZngR+
- N9SnOKJ2iz2KoyzhY6yYEHTX7w5Hra580IhtIf7+yzvI89FBzJoRKPTTQWmQAbG/IaoizFBDvr/IZwly
- CfwFHnMUy32+i1AVtBQN4VqId5jbaKOtnqbk58Xm3RCJhx8tkfNSZp8mYfI5lHOFlAJ0IeWiVnKZJJe0
- 8j2dKQhz2lkMpgmF62kogcepgM6yf89OSP+uMuv/geG0Qu12XSIVACoCSQ7sMI6B2F/gj8MloThaEkwZ
- guOUJwn0J+jrE0VBOEp/fzDPG3sz3bEz1Rn1yXb8DP6KzWtRFrMafmb9uAJgBcBBqwvSPNWoCIzApf1e
- uHmiHrmeS1ASpE/sb4AKYv/qqJUo9l2GXBdh0Id1/FnTL3AJP8U30XF+o7XO+CpJA0/08sMlgFeXsLvI
- 7LMFgDGwLRBykQBglhqUy59BSovEgnYWg7ntLARTn4IKGNrJ1YD+nQB/d5WO7QaUGf9fGQ5mA8Iz/BU2
- oCBwJJ/Wy/PRxAEOch+ehwp88FKeL17K9cLBHE/sJ+DvTnPGDmL8bQkbiN2tUBG1CsUk4wtDzRBG8n6T
- YU9uAZy0nof/KlX++nXxw/BfP/+AHI/FnP3Lw4xQFWnGJ/nYjT1srV9s+jHfvy1EAxluC0HMf1zSrRdZ
- XmzYTVZid5HVGfgWS1hbCnbtNlKHUl9I3Rb+XquDxYC971JBXbRHEbSnCDyuLzD2MX2AzjQA+6t0fE9A
- 92fI+nI8lT6ArtooH+tBv7K9AGwkOHzVUPLoQ7AzzQW7GdAz3LAnwxX70l2wh0C/m6T+DmL8hgRrfhZf
- VfQqlEWsQFGICfICDZDjr8sLgKeBKlz1usFRuwvsNJ/jA0fMBvzw9X3e7S8j718ZYYrSAB3kuCpO8BV9
- P5v0qw0mReC5CNY64y4M6dd9guDl1SWSXmR4kd0XC0BjoNMUgKorpB6l4TNIXaFgaLazGCxthyKYJ/zf
- 2ioAUzqpANpqAg5uw/v362DHvzW/3xHgy4z/rwpbswGHymNGcxuQ7q44kDPdZQ4aUh25vG9ItKHcwPfh
- b4tbh9rYtSTbV6GCgF8SaoJCBnzy9BleGkgheR++fhw26veAi25XsgDPwXqpCj9ZqDZhKO5fLcCx8iiU
- B+ujxF+TH+LJLu4QfT8b9qkm38+agRt0x781cUTP+RKWFxl+oSCxlwng0xbAyFjbQAJQY0qTFpKdErRC
- KZW/x6gDhcBAKDKa7VQEj1MCj1s5aKshOK4Ty4Btgb9vByW/DPw/nQ0w7rskyH5wI1MBNfGjELJyMC8C
- Bf462MrAHr2aAL+an8ZTRaBnc/rstt3CQH3k+Woji4Cf5rEISa7zEO80CwEWgxXyX/t5Yn8V2GioINtv
- MN8kdGaHLW6dqEWRnwj+GXzGX5T+VeT7y/2XwEZv/Efqg1U1BQ8vMrzI7iKrGwlpSmkmJJsPsHiKaS68
- rlEHVMHjisDiJygAUzvRAGyN+cUNQmrtZP3W5H5LjN8Rjy8D/g9XAeZq5ypjxnAVkOY2DKFUBCLIDrB1
- +lJi+WICfBH59sIAPeT7aSPXZzmyNi1F2saF2OI6FwmOMxFrNwXRGybBy7Qfsf8LvAEoFoAkt/784JE9
- ObPx9q3TSLMZR9J/+iPSnw37lPgshoOB+jezx/RbJ7C8psSXi4xuJrC2CPZVlKsluYZyXSu5WinbWwhW
- dqAQaLejSdhZCzCpg8zfFvjVVNq/8ae9wH9BBv6fMGxWqi0LsR/8G5vc25Y0FqEWA6kIDELE6uHI9l5O
- gNdEjvcyZJLEzyDQp7rNQ7LzbAL+dGy2n4Io6wkII+kftHbkI+wvFoDNjn0VZwgmjsCH928g3Xa8IP2F
- HX58zn8xXIwm/n3GyD5OEsCLzG4pJAP3Wsr1lC8+pVwnvK5lOwvB44qA3mMKwMJOsP/UVpp/6q00/Ua2
- Ivlb2vzTX6XlMwBaYvzuLQC/JbZvb0NPjn+XsDdX21sQNpJvEc4PGA5/0wEIWqGGMMvB2OIym3IOkpxm
- ItFhOuLtpiLWZiKiXhzPm35Bq4bDjwqGp3FvfpioPXl/aQFIdh/AC0BN3GC8f/c0MuzUFV1/Nu3nM5/P
- +bsYq/997vgBYYLsFlndSgAoA/wGVqsk6dBG2km+z7oDxWBtO21BWwVApxPsLw4JdUT2j2ul4TdCpf27
- /loDvmonZb7M9H/aFQEz1VHuawb+wA4HZUogzm4QfIz78Q0+gSsGIILd3LNhAqLXj0c4gT5k9QgEWg6B
- HxUJL5O+2GioysHvIAH/IxaACkBt/GB8cO8sshwn8sZfifc8kv6L4GUx6Z8Lp6rlCmC3FoDLQGzPxhWe
- Qjoyp9POIrDmMQVgxWMagpodBH9rMwAtTQCKuwPHtIPxW/L4LbF9r3aCXgb8f34voI9zpMuQRlYA2LJg
- kKVij7+PcR+eflQMAlYMhJ+5GnxMFQM/Gw168CU/J53nfwd+lhuWqSAvcIiiACQMxZ2XK5DjPBnFngz8
- C+G9cnLjokkDKiTs7UzpKkmPNtJd+B6XDhQCm3YUgbYKgEkb4NfqYONvtkr7R3/Ht8D4Le3/b03m930C
- pu8o6OX4s8YG4wENGYHDFWv3caPhZdyTr+uL6UHJQM8m/RjwGes7kue31/w9+MUCwI4b57cLJQ7H1YP5
- yHObhjKfBQhcPblRa8aQwwKQGaA3PWG6taMIOHRSAaxsBfytLQNqCI3MBS3I/VlKzT5x1HeSStu7/Vo6
- 9KOl475aY3rpqb7t8fMy2P+/xXpdld72K9TulUaNEorAKJL3xPK63YR8gXf5m4Cv1TLwWdouV4GfZQ+I
- h4/uzJiCE5VR5P1nIWzdFAb+s/SWPpS+lAFtpJ/wfe0pAhufoABYdRD8+q10/Vsa+pnbQpOvpV1/41Wa
- DwCRruEz0A9VYnm1Fli+jxLgez6hrJcB//8o+B77Dab9xzmvUvtya/wYPsZbTUXA06Q7sXwXvrzHpH5r
- jC9NNgRUGDJMcYFI4ihc2ONEvn8RItdNbtSfPejVLl1U2O6+oA6m72MKgGcnwL++FeZnft+0FcbXbsHj
- L1Zi+rlKMn9aC6BXV2J6keWlTC9leTUJw4uA79UOhle+vFNmdzkeBb5K8x77Hha6fTRdVg/8XiwC7JLQ
- 0PW9OKgfB3xR+kfa9G5if3aD0LEya2x+cRJM5g15j8AfTe8TKckIytB2FIBASq82wO/aCvjtW1kRsGph
- CdC8BcbXV/n96O/SFmT+HCWJ35K8H6fE8tIDPqUMP1CJ3aU+vmcLgO+InJfBLscj4H9B+EXqJfzCDdZa
- 3MvEeaXa16VRo/ny4M60cZzR3Qy78kLAJH5Lsp/9XdiLvej7FceOK24eGoMtLtNhOG/Qxz26dUmk149u
- JaMeUwD8WgG/RwvNQMdWgL9OifGlI8EtMb2m4OmlO/1EWT9XAvipEoafJGF3aed+hETSS8/xF+8QUL69
- R9qlV22D2WWgy/FE4FcVmEVN+AVlv7CTp47vbmxn1v8jsTG4neQ8+8gKAQO5o04XzvZiQWC7//KDhihU
- Q/JY4bbhMcgPGAfzuUN/6NOja3ob4G+rAAS2Iv83tsD6TOrbSoDPJD5b418tYXtR3ksHe3QlgNdUad46
- LG4nnqPSfKCHCHjpUV5SsI+WLM+J/l2Z2ftJmL2XEqt3BOgyyOXoNPi7Cr9oIviHCb/IUwQfu3xAHxUL
- C81+F8KchjTWJSmKAPP17BpxpgrYqT818aP554orxMc2XTXOPq+KHYu12gN/7qv6fCG9XhJlbCvAZzYg
- WAn0AUrAF5cAXSUsLwLeRqV57NdKAPxKAeyirDdRad7yK27xFbcNM2ZfKLD6nDaArq7y6Em9I5SadNL1
- 9/4tMLqqSuvbZttqyslAl+Ophuj7uyuxv7rwy79YkMEMRNYLpqiW2JkP+DHVdxgvAiz58l7S75P9OVMK
- JdGj4LhywF9HDH6BHeqRQLlZCfjsJt8wCfClXX/m9d1Vmtf7nQVJL076WQtAF9ldeQOPuK9fV9KoWyr8
- v+YpAX2qBOiidBebcyMkKb39Z6DKo5du9lZqyEnvEFRuxLUl1eWQ4w8pAn0E9hopMN0sATCGAsAcVLur
- BGrN7XXK3lztlwTPYSiJHMXlPgP7DuEj+7qUgB/lOrTRQqffhwMHdM0QgB6qJOe9lPy7s8DqdgK4rSVN
- OjHF7bpGkqac2JhbLJHryuvtU1SaT/tVV3n0aG3x6GxRpkuX15TX03u2k71l5pbjT2kHegieVCwEEwTf
- qyGAjhUCm+4vqHjOndKjynRpnxs2Jv2/8d0wqJHdNsTS2WLAzyuW970+f4pqpiDN10pSZGgxDSUsLWVq
- 0X8vVvLfs5Q661JJPlbl0Qk5sdEm+m61Fjrqyt30bp3w3XLI8R/dH+glMKF4COdIlUcP35zaRood8UlK
- QFXuikubZYNUfn8Fdl+llIK3p8qja98tSW6ZleWQ4ykWh9au0+5Idm0BpO2R0DJg5ZBDDjnkkKM98X/m
- gNA6RhJY5gAAAABJRU5ErkJggigAAAAwAAAAYAAAAAEAIAAAAAAAgCUAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAgAAABIAAAA2AAAAVQAAAFMAAABKAAAAQgAAADkAAAAxAAAAKAAAACAAAAAZAAAAEgAAAA0A
- AAAJAAAABQAAAAMAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAgAAABIKMz9pD0ZX3xRVav4ORFXrBRkekQAAAHIAAABuAAAAZgAAAF4A
- AABWAAAATQAAAEMAAAA5AAAAMAAAACcAAAAeAAAAFwAAABAAAAALAAAABwAAAAQAAAACAAAAAQAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5IW1wQVGn7DmB9/wtYeP8YdZT/GjZR8AkTHHYA
- AABhAAAAYQAAAF4AAABbAAAAVQAAAE8AAABLAAAAQwAAADwAAAA1AAAALQAAACYAAAAgAAAAGgAAABQA
- AAAPAAAACgAAAAYAAAAEAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADkdcJBBRZPUSWn3/D0Zp/wA6Wv8K
- WXj/PnCT/xo5U+MKGCJLAAAAQgAAAEgAAABLAAAASgAAAEgAAABFAAAAQQAAADwAAAA5AAAAMgAAACwA
- AAAoAAAAIgAAAB0AAAAYAAAAFAAAAA8AAAALAAAACAAAAAUAAAADAAAAAgAAAAEAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD0hcmxNgfv9N
- dpn/SnWZ/ydbe/8IV3b/VIOm/ytchP8fQFnUDx0sIwAAAB4AAAAoAAAALgAAADIAAAA0AAAAMwAAADIA
- AAAvAAAALQAAACkAAAAmAAAAIgAAAB0AAAAbAAAAFgAAABIAAAAQAAAACwAAAAgAAAAGAAAABAAAAAIA
- AAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAADUld6Tp7m/+For7/eJm3/ztoiP87gJr/MmOJ/zxxmf8tXYX/IkFbxRQnTg0AAAAHAAAADQAAABQA
- AAAZAAAAHQAAAB8AAAAgAAAAIAAAAB8AAAAdAAAAGwAAABkAAAAWAAAAFAAAABEAAAAPAAAACwAAAAkA
- AAAHAAAABQAAAAMAAAACAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAADVJm/lmQqf/Bztr/l67B/xRafP9Kfpz/CT5r/zdmi/89cpv/LVuC/yNEXLUA
- M2YFAAAAAAAAAAEAAAADAAAABwAAAAoAAAANAAAADwAAABAAAAARAAAAEQAAABAAAAAPAAAADgAAAAwA
- AAAKAAAACQAAAAcAAAAFAAAABAAAAAMAAAACAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJldo6h97mv9aip//HWeG/2Wctf8gV4D/Fk53/wpAa/85
- Z4z/PXGb/ytYe/4jRFuiAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAAEAAAABQAAAAYA
- AAAGAAAABgAAAAYAAAAFAAAABAAAAAQAAAADAAAAAgAAAAIAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlZKQc2Z/jv5Vmbb/c6K+/z11nf80
- bZX/KmGK/xxTfP8KQGv/PGiL/zlvmf8pUnP+ID5ZjwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABI1ToIa
- RWf+Pnyn/12Ut/9Oh63/P3mf/zJqkv8iWoL/DURu/z1oi/8zaZP/JUxs/h8/VnoAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAbQFh8Hktu/kiGsP9vpMT/W5e6/0uFq/87dZz/KmKK/xJJc/9BaYv/LGKN/yBGZP0c
- OlZlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHENddiBNb/5Njrf/fbHP/2qlyf9ZlLr/RoGn/zJrk/8a
- Unr/RG2N/yRXgv8aP1v7FjhOUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB9DXnIhUHL9U5XA/4m72P92
- tNf/Z6TI/1KNs/88dpz/JVuE/0pwkf8ZTHf/EzVU9hAvS0EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAc
- SmZuIVJ1/Vabxv+SxOD/f8Di/3e12P9fnMD/R4Go/y5mjv9Qd5b/DkBp/w0tSPAFKUIyAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAHUtoaR9UeP1Xn8z/m8vn/4fI6/+IyOr/b6zQ/1KNsv84cJf/V36d/wY4Yf8G
- JD3nACI+JQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB9La2IcVHz7WaDQ/6PS7f+LzvP/ldb2/3m32P9Z
- lbn/Qnqf/1+Fo/8DMlr/ABsw3QAdMRoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbSWpeGVR8+1qj1v+o
- 1fD/hMvy/5fY+f+AvuH/YJzB/0yDqf9kjKn/BTJZ/wAdM9AAHjwRAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAHE9uWhtUf/pXoNP/qtTv/3zF7v+W2fr/iMfp/2ikyP9WjbH/aJGt/wc1Wv8OKjzCcTk5CQAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAB5RdVUbVH/5VJzQ/6zV7v9zvur/ktb5/4/P8P9vrdD/Ypi6/2iTsv9F
- VVz+UklBpQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdUHZQG1R8+FSdz/+u1e3/arbm/4rR9v+W
- 1fb/d7XX/2qhxP+Mnqb/VEk8/kU+MCUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHlF1TBpTe/dV
- ns//sdXu/2Gx4f+EyvL/mNn5/37A5P98kZn/f3Zr/1ZORmIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- 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
- 47dA/+a7PP/zzj///+dL/PHgWpqCZXJeQBmQSjENojAlHNOBgXr9TkxH/wwMCv8lJSD/Pz02/1hXTf9U
- U0r/REQ5igAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAATkhBlK+rpP9WVlT8ua6h4vTw7ur//fjY//fwvP/u0on/5Lpo/+O9ZP/iv2D/
- 5sJc/+LCWP/hvVX/471R/969Tf/nvUn/4bxF/+S8Qf/zzUL/+9dAlntWX2hLJIw2IgyrXFtV8nVyaf8r
- KiT/RUQ8/19eU/95eGr/VFNJ901NRB4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfHx6z+De2v8yKR7y6+HT3P/26cf/9+/J//fvyv/37cv/
- 9+i0/+fIgv/fuXH/471t/9+7af/ju2X/4r1h/+G9Xf/lvVn/58NV/+a9Uf/lw03/475K/+3FRvHWsEqJ
- a0V3XEMhlT8/OOmEgnb/SUg//2VkWP+BgHH/dnVm/1BOR4IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABhoaD7b69uv9TRjL+/vDe0P/16Mf/
- 7NKx//jt0v/579T/+/HU//vz0//257L/5sKG/+G8ef/lwHX/5L5x/+O9bf/nvWn/4b5m/+K+Yv/hvl7/
- 475a/+G+Vv/pwVL/78tPrZFsbXNWOY5APjjqhIN3/2hnW/+GhXb/jIt7/1BOR84AAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABiIaE7bi2s/9J
- OCP/49S98//nxrT/9+rT/+vSu//47tj/+fHc//nx3f/6893//PXb//Xmu//nxZL/4rqC/+O8fv/kvnr/
- 4b52/+a+cv/lvm7/5b5q/+S+Zv/ivmL/5L5e/+vEW8isg29xWD2TVlZO+H99b/+KiXr/kpGB/1hXS/kA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAent209DQzP9ANCP/qJF0/+fRsOL/7tLH//nx4P/t0cT/9uvb//nw5P/58OT/+fPl//n35v/8+OX/
- 9uzM/+7Upf/iuYv/4rqG/+TAgv/lwH7/5MB6/+O/d//gv3P/47pv/+K8a//rxmfVuZF4OzAjtoWFef+J
- iHf/k5KC/15dVP4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAeXl1lMrIxP9DQDr/kXhW/7mhgv7s0rHj//Lf2v/68en/69TQ//Lj2//79er/
- +PTr//j16//59uz/+/bt//v47v/79OP/9OXB/+XHn//fuY//47mL/+O9h//kv4P/5b9//+a/e//jv3f/
- 5cB13L2Ygzk5M/GRkIH/kpGB/1NUSfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfXl5N5mXlP6EgoL/dmVN/5N4V//DrIv+6dGv7f/z5un/
- +fTw//Hh3//r1dj/+fXu//n08f/59fH/+vby//r38v/8+PP//Pr0//779f/79OP/8+LE/+jFpP/iuJP/
- 4rmP/+K8jP/jvYj/5sGE/+zHgzwyK8iUlIb/hoZ2/1BORsIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHt7eLnLycb/NjYz/5d/Xv+Z
- fVr/v6aE/+vRsPj78OT1//r19f/16+//58nb//Tl6v/8+PX/+vX2//v39v/7+Pf//Pj4///5+f//+vr/
- //77/////P/8++7/9enR/+7TtP/hvJv/4riU/+zDkHlqV7V3d2v/d3Zo/1FPRYUAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH9/ciaH
- hoTztrSw/zIuJ/+ghWL/ooZi/7OYdv/my6j++/Dk/P/69vn/+/b4/+3Y6f/ozeT/+PH0//z7+f/7+Pr/
- //z6///6+////Pz////9/////v////////////////////v/+fTl//zvypOAabtpaV//aGhb/05OQ0gA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAB7e3ZblJSO/ZmXlP8nJh7/oIZk/66Rbf+sj2z/0LSP//zv3/7//vr9//z5/P/38Pj/
- 6crp/+rP7P/79Pj///79///+/f///f7////+///////////////////////////////+/uzX2XlpVed5
- em7/WFhO+lVVRA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeHZ0dZaUkf6Yl5P/DQ0L/39rT/+4m3b/spZy/7WXc//W
- xKv/9e7m/v////7////+//nu+P/lxu//6Mzw//bs+P////7///////////////////////////r39f7i
- z7T14sei/EM7Mf+Qj4H/UVFKyQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHZ0bWyKiYT6rqun/wwPD/84
- LyX/rJFw/72fef+5nnj/u513/8eujf/dzLf/7uXY//j39v7++O/8/+nN+f3kwvj87dr9/fny//r49v/w
- 59v/5NG5/9rAm//kyab/r5p//0tLQ/90c2f/U1NFcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB0
- dHFEenl15bCvp/9iY2D/BggM/2BVSv+ymXf/xaiA/8Wngf/EqYP/xqmF/8qshv/Oso3/1buZ/9q+mv/c
- vpr/276a/93Am//gw5//5Mik/+/Tr/+3ooX/Kysn/5GQgf9SUkreVStADAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAeXlrE3Fxbp6IhoD8p6ae/1hZV/8WGyH/VVNT/5SGdf/Ap4b/0bKM/9GzjP/U
- tpD/1rmU/9q9l//fwp3/4sag/+rNp//y067/07yb/2JYSP86OzX/kZGC/1lXTvJNTUg1AAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABzaW4zcG1psYSCevyjoJf/dnVv/0tMT/8w
- NkL/Uldi/4eFif+jnZj/raGV/7Kkk/+xo5D/o5aE/3pvYP89OTL/Ozo2/31+cf9+fXH/VVVN31NTSjQA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGxsZihq
- amWLcHBo4YaFfP6Yloz/h4V8/25vZv9iY17/WlxY/1ZYVP9XV1L/X19X/3Z1a/+MjH7/eXht/lxaUe5U
- VkuFNzdJDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAmNjXjFoY19xZWVfpmZmXtBqamPub25l/nNyav9sa2L+ZGNb7ltdVcxa
- WFCZV1dOVV1GRgsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD7//////8AAPBq/////wAA4N+/////AADA
- avt///8AAIA/b////wAAgB//////AACAD/////8AAIAH/////wAAwAP/////AADAAf////8AAOAB////
- /wAA+AD/////AAD8AH////8AAP4AP////wAA/wAf////AAD/gA////8AAP/AB////wAA/+AD////AAD/
- 8AH///8AAP/4Af///wAA//wB////AAD//gDB//8AAP//AAAP/wAA//+AAAP/AAD//8AAAP8AAP//wAAA
- PwAA///AAAAfAAD//4AAAA8AAP//gACABwAA//+ALSADAAD//4FrUAEAAP//Ab32AQAA//8Eq1oAAAD/
- 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
- BQT/MTEq/0lHP/85OjK5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABJ
- RDyeramj/3dzbO78+Pbr//v0wv/kwXP/37pg/922W//hvVX/375P/+O9Sf/swkP/+9lD/OTJS4hrQ2tD
- LRGjYl9V6UdGP/83NzD/YmJW/1xbUP5ST0VRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAIaGgtSJiYX/y72r3f/46sT/+O7M//nvyv/y36H/47x2/+G5bf/kv2f/4sBh/966XP/hvlb/
- 5r9Q//XLSuzQpFF6XDWCU01E22RkWv9paFz/hYR1/1BQRboAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAjIuI5ndzbv/PvKLt//bfwP/v3cL/+fHY//v02v/58tP/8N2q/+C9hP/iunr/
- 4r90/+O+bv/mwmj/4r5i/+TDXf/oxlqhg159VlRL43t7bP+TkoH/WlhO9QAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACCgH3Mh4aE/5eAX//s1LPc//fp2v/x287/+vDh//jy5v/59Of/
- +vjh//PkwP/oypn/4ryG/+G6gf/kv3v/4751/+PBb//qwmyJdliRcHBm/JKRgf9gX1T+AAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHx6eISvr6v/X1A7/6uScP7y2bjo//vz6//x3dz/
- 8+jk//r27//59/D/+/fx//v58v/58t//8uC+/+fBnf/gt43/47mH/+S+gv/tw39YU0nZlJOD/1RSSeUA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf39sGo+Oi/N4eHP/jHZU/66UcP/r
- 1LX4//v19v/z5uz/7tjl//n09P/6+Pf//Pv3//35+f///Pr//v/8//v46v/1583/7NKw/+zEl29iUcSI
- iHr/UE5FqQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAe3h4aKOinv5P
- TUj/lX1c/6+Rbf/awaL+//31/P/8+fn/79rs//Dd8P/++/r///78/////f////7/////////////////
- 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
-
-
-
\ No newline at end of file
diff --git a/SpotCheck/Helpers/ApplicationSettings.cs b/SpotCheck/Helpers/ApplicationSettings.cs
deleted file mode 100644
index ef0929d192..0000000000
--- a/SpotCheck/Helpers/ApplicationSettings.cs
+++ /dev/null
@@ -1,45 +0,0 @@
-namespace Sdl.Community.SpotCheck.Helpers
-{
- public class ApplicationSettings : ApplicationSettingsBase
- {
- public int Percentage { get; set; }
- public int TotalWords { get; set; }
- public int MinWords { get; set; }
- public int MaxWords { get; set; }
- public bool SkipLocked { get; set; }
- public bool SkipCm { get; set; }
- public bool Skip100 { get; set; }
- public bool SkipRepetition { get; set; }
- public bool LockContext { get; set; }
- public bool LimitByWords { get; set; }
-
- protected override void TextFileToValues()
- {
- Percentage = _settings.GetIntValue("Percentage", 20);
- TotalWords = _settings.GetIntValue("TotalWords", 0);
- MinWords = _settings.GetIntValue("MinWords", 5);
- MaxWords = _settings.GetIntValue("MaxWords", 25);
- SkipLocked = _settings.GetBoolValue("SkipLocked", true);
- SkipCm = _settings.GetBoolValue("SkipCm", false);
- SkipRepetition = _settings.GetBoolValue("SkipRepetition", false);
- Skip100 = _settings.GetBoolValue("Skip100", false);
- LockContext = _settings.GetBoolValue("LockContext", false);
- LimitByWords = _settings.GetBoolValue("LimitByWords", false);
- }
-
- protected override void ValuesToTextFile()
- {
- _settings.SetIntValue("Percentage", Percentage);
- _settings.SetIntValue("TotalWords", TotalWords);
- _settings.SetIntValue("MinWords", MinWords);
- _settings.SetIntValue("MaxWords", MaxWords);
- _settings.SetBoolValue("SkipLocked", SkipLocked);
- _settings.SetBoolValue("SkipCm", SkipCm);
- _settings.SetBoolValue("SkipRepetition", SkipRepetition);
- _settings.SetBoolValue("Skip100", Skip100);
- _settings.SetBoolValue("LockContext", LockContext);
- _settings.SetBoolValue("LimitByWords", LimitByWords);
- }
-
- }
-}
diff --git a/SpotCheck/Helpers/ApplicationSettingsBase.cs b/SpotCheck/Helpers/ApplicationSettingsBase.cs
deleted file mode 100644
index 55b83ecdec..0000000000
--- a/SpotCheck/Helpers/ApplicationSettingsBase.cs
+++ /dev/null
@@ -1,112 +0,0 @@
-using System;
-using System.IO;
-using System.Windows.Forms;
-
-namespace Sdl.Community.SpotCheck.Helpers
-{
- public class ApplicationSettingsBase
- {
- protected SimpleTextSettings _settings;
-
- public string SettingsFile { get; private set; }
- public Form MainForm { get; set; }
-
- public static string DefaultSettingsPath
- {
- get
- {
- string filename = Path.GetFileNameWithoutExtension(new System.Uri(
- System.Reflection.Assembly.GetEntryAssembly().GetName().CodeBase).LocalPath);
- return Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "SDL.Imt" + "\\" + filename + ".settings.txt");
- }
- }
-
- public virtual void Init(string[] args)
- {
- _settings = new SimpleTextSettings();
- _settings.Open(args);
- _settings.Close();
- SettingsFile = _settings.SettingsFile;
- if (SettingsFile == null)
- SettingsFile = DefaultSettingsPath;
- TextFileToValues();
- }
-
- public void RestorePosition()
- {
- if (MainForm != null && _settings != null)
- {
- MainForm.Left = _settings.GetIntValue("form-left", MainForm.Left);
- if (MainForm.Left < 0)
- MainForm.Left = 0;
- MainForm.Top = _settings.GetIntValue("form-top", MainForm.Top);
- if (MainForm.Top < 0)
- MainForm.Top = 0;
- MainForm.Width = _settings.GetIntValue("form-width", MainForm.Width);
- MainForm.Height = _settings.GetIntValue("form-height", MainForm.Height);
- }
- }
-
- public void GetPosition(out int left, out int top, out int width, out int height)
- {
- height = _settings.GetIntValue("form-height", 300);
- width = _settings.GetIntValue("form-width", 150);
- left = _settings.GetIntValue("form-left", 50);
- top = _settings.GetIntValue("form-top", 50);
-
- if (top < 0)
- top = 0;
- if (left < 0)
- left = 0;
- }
-
- public void SavePosition(int left, int top, int width, int height)
- {
- if (_settings != null)
- {
- _settings.SetIntValue("form-left", left);
- _settings.SetIntValue("form-top", top);
- _settings.SetIntValue("form-width", width);
- _settings.SetIntValue("form-height", height);
- }
- }
-
- public void SavePosition()
- {
- if (MainForm != null)
- {
- SavePosition(MainForm.Left, MainForm.Top, MainForm.Width, MainForm.Height);
- }
- }
-
- protected virtual void ValuesToTextFile()
- {
- }
-
- protected virtual void TextFileToValues()
- {
- }
-
- public void Load(string path)
- {
- string[] args = new string[] { "-f", path };
- Init(args);
- }
-
- public void Save(string path)
- {
- Save(path, false);
- }
-
- public void Save(string path, bool keepPosition)
- {
- if (!keepPosition)
- _settings.Clear();
- ValuesToTextFile();
- if (!keepPosition)
- SavePosition();
- _settings.Save(path);
- }
-
- }
-}
diff --git a/SpotCheck/Helpers/SimpleTextSettings.cs b/SpotCheck/Helpers/SimpleTextSettings.cs
deleted file mode 100644
index 296b22c45f..0000000000
--- a/SpotCheck/Helpers/SimpleTextSettings.cs
+++ /dev/null
@@ -1,382 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Text;
-
-namespace Sdl.Community.SpotCheck.Helpers
-{
- public class SimpleTextSettings
- {
- private StreamReader _reader;
- private Dictionary _data = new Dictionary();
-
- public string SettingsFile { get; private set; }
-
- #region Init
-
- public void Open(string[] args)
- {
- _data.Clear();
- if (args == null || args.Length == 0)
- return;
-
- if (args[0].StartsWith("-f"))
- {
- string file;
- if (args[0] == "-f")
- {
- file = args[1];
- }
- else
- {
- file = args[0].Substring(2);
- }
- file = file.Trim(new char[] { '"' });
-
- if (File.Exists(file))
- {
- SettingsFile = file;
- _reader = new StreamReader(file);
- InitFromFile();
- }
- else
- {
- System.Windows.Forms.MessageBox.Show("Can't find settings file: " + file);
- }
- }
- else
- {
- InitFromCommandLine(args);
- }
- }
-
- public void Close()
- {
- if (_reader != null)
- _reader.Close();
- }
-
-
- public void Save(string path)
- {
- Directory.CreateDirectory(Path.GetDirectoryName(path));
- StreamWriter sw = new StreamWriter(path, false);
- foreach ( string key in _data.Keys)
- {
- sw.WriteLine(string.Format("{0}={1}", key, _data[key]));
- }
- sw.Close();
- }
-
- private void InitFromCommandLine(string[] args)
- {
- for (int i = 0; i < args.Length; ++i)
- {
- string key_value = args[i];
- string[] parts = key_value.Split(new char[] { '=' });
- if (parts.Length != 2 || parts[0] == "" || parts[1] == "")
- {
- // handle space in "key= value"
- if (key_value.EndsWith("="))
- {
- parts = new string[2];
- parts[0] = key_value.Substring(0, key_value.Length - 1);
- if (i + 1 < args.Length)
- {
- ++i;
- parts[1] = args[i];
- }
- else
- {
- parts[1] = "";
- }
- }
-
- // handle space in "key = value" or "key =value"
- else if (i + 1 < args.Length && args[i + 1].StartsWith("="))
- {
- parts = new string[2];
- parts[0] = key_value;
- ++i;
-
- // handle space in "key =value"
- if (args[i].Length > 1)
- {
- parts[1] = args[i].Substring(1);
- }
- // handle space in "key = value"
- else if (i + 1 < args.Length)
- {
- ++i;
- parts[1] = args[i];
- }
- else
- {
- parts[1] = "";
- }
- }
-
- else
- {
- System.Windows.Forms.MessageBox.Show("Can't parse parameter " + key_value);
- continue;
- }
- }
- _data.Add(parts[0], parts[1].Trim(new char[] { '"' }));
- }
- }
-
- private void InitFromFile()
- {
- string line = _reader.ReadLine();
- while (line != null)
- {
- if (!line.TrimStart().StartsWith("#"))
- {
- int pos = line.IndexOf('=');
- if (pos != -1)
- {
- string key = line.Substring(0, pos).Trim();
- string value = line.Substring(pos + 1, line.Length - pos - 1).Trim();
- _data[key] = value;
- }
- }
- line = _reader.ReadLine();
- }
- }
-
- #endregion
-
- #region setting values
-
- public void Clear()
- {
- _data.Clear();
- }
-
- public void SetValue(string key, string value)
- {
- _data[key] = value;
- }
-
- public void SetIntValue(string key, int value)
- {
- SetValue(key, value.ToString());
- }
-
- public void SetBoolValue(string key, bool value)
- {
- SetValue(key, value.ToString());
- }
-
- public void SetDateTimeValue(string key, DateTime value)
- {
- SetValue(key, value.ToString("dd/MM/yyyy, HH:mm:ss"));
- }
-
- public void SetListValue(string key, List values)
- {
- StringBuilder sb = new StringBuilder();
- foreach (string val in values)
- {
- if (sb.Length != 0)
- sb.Append(",");
- sb.Append('"');
- sb.Append(val);
- sb.Append('"');
- }
-
- SetValue(key, sb.ToString());
- }
-
- public void SetIntListValue(string key, List values)
- {
- SetListValue(key, values.ConvertAll(x => x.ToString()));
- }
- #endregion
-
- #region getting typed values
-
- public string GetValue(string key)
- {
- if (!_data.ContainsKey(key))
- return null;
- return _data[key];
- }
-
- public string GetValue(string key, string defaultValue)
- {
- if (!_data.ContainsKey(key))
- return defaultValue;
- return _data[key];
- }
-
- public bool GetBoolValue(string key)
- {
- string value = GetValue(key);
- if (value == null)
- return false;
-
- return bool.Parse(value.ToLower());
- }
-
- public bool GetBoolValue(string key, bool defaultValue)
- {
- string value = GetValue(key);
- if (value == null)
- return defaultValue;
-
- return bool.Parse(value.ToLower());
- }
-
- public int GetIntValue(string key)
- {
- string value = GetValue(key);
- if (value == null)
- return 0;
-
- return int.Parse(value.ToLower());
- }
-
- public int GetIntValue(string key, int defaultValue)
- {
- string value = GetValue(key);
- if (value == null)
- return defaultValue;
-
- return int.Parse(value.ToLower());
- }
-
- public void GetListValue(string key, List list)
- {
- list.Clear();
- string value = GetValue(key);
- if (String.IsNullOrEmpty(value))
- return;
-
- StringBuilder sb = new StringBuilder();
- bool quotedSegmentOpen = false;
- bool plainSegmentOpen = false;
- for (int i = 0; i < value.Length; ++i)
- {
- char c = value[i];
- switch (c)
- {
- case '"':
- if (quotedSegmentOpen)
- {
- list.Add(sb.ToString());
- sb.Clear();
- quotedSegmentOpen = false;
- }
- else if (plainSegmentOpen)
- {
- sb.Append(c);
- }
- else
- {
- quotedSegmentOpen = true;
- }
- break;
- case ',':
- if (plainSegmentOpen)
- {
- list.Add(sb.ToString().Trim());
- sb.Clear();
- plainSegmentOpen = false;
- }
- else if (quotedSegmentOpen)
- {
- sb.Append(c);
- }
- break;
- default:
- if (!char.IsWhiteSpace(c) && !quotedSegmentOpen && !plainSegmentOpen)
- plainSegmentOpen = true;
-
- if (!(char.IsWhiteSpace(c) && !quotedSegmentOpen))
- sb.Append(c);
- break;
- }
- }
- if (plainSegmentOpen)
- list.Add(sb.ToString().Trim());
-
- list.Remove("");
- }
-
- private void GetListValue(string key, List list, bool clearList)
- {
- if (clearList)
- list.Clear();
- string val = GetValue(key);
- if (val != null && val.StartsWith("@"))
- {
- GetListValueFromFile(val, list);
- }
- else
- {
- GetListValueFromParameter(val, list);
- }
- }
-
- public void GetIntListValue(string key, List list)
- {
- List stringlist = new List();
- GetListValue(key, stringlist);
-
- list.AddRange(stringlist.ConvertAll(i => Int32.Parse(i)));
- }
-
- public void GetIntListValue(string key, List list, bool clearList)
- {
- List stringlist = new List();
- GetListValue(key, stringlist, clearList);
-
- list.AddRange(stringlist.ConvertAll(i => Int32.Parse(i)));
- }
-
- public DateTime GetDateTimeValue(string key)
- {
- if (!_data.ContainsKey(key))
- return DateTime.MinValue;
- return DateTime.ParseExact(_data[key], "dd/MM/yyyy, HH:mm:ss", null);
- }
-
- public DateTime GetDateTimeValue(string key, DateTime defaultValue)
- {
- if (!_data.ContainsKey(key))
- return defaultValue;
- return DateTime.ParseExact(_data[key], "dd/MM/yyyy, HH:mm:ss", null);
- }
-
- public void GetListValueFromFile(string value, List list)
- {
- using (StreamReader sr = new StreamReader(value.Substring(1).Trim(new char[] { '"' })))
- {
- string line = sr.ReadLine();
- while (line != null)
- {
- if (line.Trim().Length > 0)
- list.Add(line);
- line = sr.ReadLine();
- }
- sr.Close();
- }
- }
-
- public void GetListValueFromParameter(string value, List list)
- {
- if (value == null)
- return;
-
- string[] items = value.Split(new char[] { ',' });
- foreach (string item in items)
- {
- list.Add(item.Trim());
- }
- }
-
- #endregion
- }
-}
\ No newline at end of file
diff --git a/SpotCheck/Helpers/WordCounter.cs b/SpotCheck/Helpers/WordCounter.cs
deleted file mode 100644
index b91084e1ee..0000000000
--- a/SpotCheck/Helpers/WordCounter.cs
+++ /dev/null
@@ -1,35 +0,0 @@
-namespace Sdl.Community.SpotCheck.Helpers
-{
- class WordCounter
- {
- public static int Count(string text)
- {
- if (string.IsNullOrEmpty(text))
- return 0;
-
- int asianWordCount = 0;
- int nonAsianWordCount = 0;
- bool inWord = false;
- foreach (char c in text)
- {
- if (c > 0x3000 && c <= 0xFFFF)
- {
- ++asianWordCount;
- }
- else
- {
- if (!inWord && char.IsLetter(c))
- {
- inWord = true;
- ++nonAsianWordCount;
- }
- else if (inWord && (c == ' ' || c == '\t'))
- {
- inWord = false;
- }
- }
- }
- return asianWordCount + nonAsianWordCount;
- }
- }
-}
diff --git a/SpotCheck/Plugin/PluginInitializer.cs b/SpotCheck/Plugin/PluginInitializer.cs
deleted file mode 100644
index f23acea511..0000000000
--- a/SpotCheck/Plugin/PluginInitializer.cs
+++ /dev/null
@@ -1,52 +0,0 @@
-#region "PluginInitializer"
-
-using System;
-using System.Windows.Forms;
-using Sdl.Desktop.IntegrationApi;
-using Sdl.Desktop.IntegrationApi.Extensions;
-using Sdl.TranslationStudioAutomation.IntegrationApi;
-
-namespace Sdl.StudioInitializer.Sample
-{
- ///
- /// Implements a SDL Trados Studio application initializer which will keep track of the application startup and closing time.
- ///
- [ApplicationInitializer]
- class PluginInitializer : IApplicationInitializer
- {
- private const int MinimumWorkTime = 4;
-
- ///
- /// This method is executed when SDL Trados Studio application is starting.
- ///
- public void Execute()
- {
- StudioTracking.Start();
-
- // Setting up a check at SDL Trados Studio application closure verifying if the user has worked less then the minimum amount of time
- // If the time passed since Studio opening and Studio closing is less than the MinimumWorkTime(4h) than
- // request a confirmation from the user for the application closure otherwise just exit.
- SdlTradosStudio.Application.Closing += (s, e) =>
- {
- TimeSpan elapsedTime = StudioTracking.Elapsed;
- if (elapsedTime.Hours < MinimumWorkTime)
- {
- DialogResult dialogResult =
- MessageBox.Show(
- string.Format("You have been working for {0:dd\\.hh\\:mm\\:ss} and spending less than {1} hours. Are you sure you want to quit Trados Studio?", StudioTracking.Elapsed, MinimumWorkTime)
- , string.Format("Total work time is {0} minutes", elapsedTime.Minutes)
- , MessageBoxButtons.YesNo, MessageBoxIcon.Question);
- if (dialogResult == DialogResult.No)
- {
- //Cancel the SDL Trados Studio application closing
- e.Cancel = true;
- return;
- }
- }
- StudioTracking.Stop();
- };
- }
- }
-}
-
-#endregion
\ No newline at end of file
diff --git a/SpotCheck/Plugin/SpotcheckProcessor.cs b/SpotCheck/Plugin/SpotcheckProcessor.cs
deleted file mode 100644
index 74a4625bc7..0000000000
--- a/SpotCheck/Plugin/SpotcheckProcessor.cs
+++ /dev/null
@@ -1,110 +0,0 @@
-using System;
-using System.IO;
-using System.Xml;
-
-namespace Sdl.Studio.SpotCheck
-{
- class SpotCheckProcessor
- {
- #region variables
-
- private XmlNodeList _segments;
- private Random _rnd = new Random();
- private const string _marker = "~~~spotcheck~~~";
- private XmlDocument _doc;
-
- #endregion
-
- #region add/remove markers
-
- public void AddMarkers(string path, int percentage)
- {
- Open(path);
-
- _segments = _doc.SelectNodes("//seg-source/mrk[@mtype='seg']");
- int percent = (int)((_segments.Count / 100.0) * percentage);
- if (percent < 1) percent = 1;
- for (int i = 0; i < percent; ++i)
- {
- AddMarker();
- }
-
- Save(path);
- }
-
- public void RemoveMarkers(string path)
- {
- Open(path);
-
- _segments = _doc.SelectNodes("//seg-source/mrk[@mtype='seg']");
- foreach (XmlNode node in _segments)
- {
- XmlNode textNode = GetTextNode(node);
- if (textNode.InnerText.StartsWith(_marker))
- textNode.InnerText = textNode.InnerText.Substring(_marker.Length);
- }
-
- Save(path);
- }
-
- private void Open(string path)
- {
- _doc = new XmlDocument();
- using (XmlTextReader tr = new XmlTextReader(path))
- {
- tr.Namespaces = false;
- _doc.Load(tr);
- }
- }
-
- private void Save(string path)
- {
- using (XmlTextWriter tr = new XmlTextWriter(path, System.Text.Encoding.UTF8))
- {
- tr.Namespaces = false;
- _doc.Save(tr);
- }
- }
-
- private void AddMarker()
- {
- string text = "";
- XmlNode node = null;
- do
- {
- int position = _rnd.Next(_segments.Count);
- node = _segments[position];
- node = GetTextNode(node);
- text = node.InnerText;
- } while (text.StartsWith(_marker));
- node.InnerText = _marker + node.InnerText;
- }
-
- private XmlNode GetTextNode(XmlNode node)
- {
- // in case the segment starts with a tag, move to first text node
- foreach (XmlNode child in node.ChildNodes)
- if (child.NodeType == XmlNodeType.Text)
- return child;
-
- return null;
- }
-
- #endregion
-
- #region verifying markers
-
- public bool ContainsMarkers(string path)
- {
- using (StreamReader sr = new StreamReader(path))
- {
- string line;
- while ((line = sr.ReadLine()) != null)
- if (line.Contains(_marker))
- return true;
- }
- return false;
- }
- #endregion
- }
-}
diff --git a/SpotCheck/PluginInitializer.cs b/SpotCheck/PluginInitializer.cs
deleted file mode 100644
index 253d7719c3..0000000000
--- a/SpotCheck/PluginInitializer.cs
+++ /dev/null
@@ -1,43 +0,0 @@
-using System.Collections.Generic;
-using System.Windows.Forms;
-using Sdl.Desktop.IntegrationApi;
-using Sdl.Desktop.IntegrationApi.Extensions;
-using Sdl.TranslationStudioAutomation.IntegrationApi;
-
-namespace Sdl.Community.SpotCheck
-{
- ///
- /// Implements a SDL Trados Studio application initializer.
- ///
- [ApplicationInitializer]
- class PluginInitializer : IApplicationInitializer
- {
- public static List FilesWithSpotcheckMarkers = new List();
-
- ///
- /// This method is executed when SDL Trados Studio application is starting.
- ///
- public void Execute()
- {
- SdlTradosStudio.Application.Closing += Application_Closing;
- }
-
- void Application_Closing(object sender, System.ComponentModel.CancelEventArgs e)
- {
- // todo: crashes Studio when something is open in the editor, disabled for now
-
-// if (FilesWithSpotcheckMarkers.Count > 0)
- if (false)
- {
- dlgSpotcheckWarning warning = new dlgSpotcheckWarning();
- warning.FillList(FilesWithSpotcheckMarkers);
- DialogResult dr = warning.ShowDialog();
- if (dr == DialogResult.No)
- {
- e.Cancel = true;
- return;
- }
- }
- }
- }
-}
diff --git a/SpotCheck/PluginResources.Designer.cs b/SpotCheck/PluginResources.Designer.cs
deleted file mode 100644
index 2e9693a629..0000000000
--- a/SpotCheck/PluginResources.Designer.cs
+++ /dev/null
@@ -1,82 +0,0 @@
-//------------------------------------------------------------------------------
-//
-// This code was generated by a tool.
-// Runtime Version:4.0.30319.42000
-//
-// Changes to this file may cause incorrect behavior and will be lost if
-// the code is regenerated.
-//
-//------------------------------------------------------------------------------
-
-namespace Sdl.Community.SpotCheck {
- using System;
-
-
- ///
- /// A strongly-typed resource class, for looking up localized strings, etc.
- ///
- // This class was auto-generated by the StronglyTypedResourceBuilder
- // class via a tool like ResGen or Visual Studio.
- // To add or remove a member, edit your .ResX file then rerun ResGen
- // with the /str option, or rebuild your VS project.
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")]
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
- internal class PluginResources {
-
- private static global::System.Resources.ResourceManager resourceMan;
-
- private static global::System.Globalization.CultureInfo resourceCulture;
-
- [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
- internal PluginResources() {
- }
-
- ///
- /// Returns the cached ResourceManager instance used by this class.
- ///
- [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
- internal static global::System.Resources.ResourceManager ResourceManager {
- get {
- if (object.ReferenceEquals(resourceMan, null)) {
- global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Sdl.Community.SpotCheck.PluginResources", typeof(PluginResources).Assembly);
- resourceMan = temp;
- }
- return resourceMan;
- }
- }
-
- ///
- /// Overrides the current thread's CurrentUICulture property for all
- /// resource lookups using this strongly typed resource class.
- ///
- [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
- internal static global::System.Globalization.CultureInfo Culture {
- get {
- return resourceCulture;
- }
- set {
- resourceCulture = value;
- }
- }
-
- ///
- /// Looks up a localized string similar to SDL Trados Studio SpotCheck Plugin.
- ///
- internal static string Plugin_Name {
- get {
- return ResourceManager.GetString("Plugin_Name", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon).
- ///
- internal static System.Drawing.Icon spotcheck {
- get {
- object obj = ResourceManager.GetObject("spotcheck", resourceCulture);
- return ((System.Drawing.Icon)(obj));
- }
- }
- }
-}
diff --git a/SpotCheck/PluginResources.resx b/SpotCheck/PluginResources.resx
deleted file mode 100644
index 624ac0032b..0000000000
--- a/SpotCheck/PluginResources.resx
+++ /dev/null
@@ -1,127 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- text/microsoft-resx
-
-
- 2.0
-
-
- System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- SDL Trados Studio SpotCheck Plugin
-
-
-
- spotcheck.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
-
\ No newline at end of file
diff --git a/SpotCheck/Properties/AssemblyInfo.cs b/SpotCheck/Properties/AssemblyInfo.cs
deleted file mode 100644
index 73f6ed6eec..0000000000
--- a/SpotCheck/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,30 +0,0 @@
-using System.Reflection;
-using System.Runtime.InteropServices;
-
-// General Information about an assembly is controlled through the following
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-[assembly: AssemblyTitle("Sdl.Studio.SpotCheck")]
-[assembly: AssemblyProduct("Sdl.Studio.SpotCheck")]
-[assembly: AssemblyCopyright("Copyright © 2014")]
-
-// Setting ComVisible to false makes the types in this assembly not visible
-// to COM components. If you need to access a type in this assembly from
-// COM, set the ComVisible attribute to true on that type.
-[assembly: ComVisible(false)]
-
-// The following GUID is for the ID of the typelib if this project is exposed to COM
-[assembly: Guid("38FEA767-FEEF-47C2-B52C-54B875BE7203")]
-
-// Version information for an assembly consists of the following four values:
-//
-// Major Version
-// Minor Version
-// Build Number
-// Revision
-//
-// You can specify all the values or you can default the Build and Revision Numbers
-// by using the '*' as shown below:
-// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("3.0.0.0")]
-[assembly: AssemblyFileVersion("3.0.2.0")]
diff --git a/SpotCheck/Properties/PluginProperties.cs b/SpotCheck/Properties/PluginProperties.cs
deleted file mode 100644
index 2a692207bc..0000000000
--- a/SpotCheck/Properties/PluginProperties.cs
+++ /dev/null
@@ -1,6 +0,0 @@
-using Sdl.Core.PluginFramework;
-
-// TODO: edit the Plugin_Name string in PluginResources.resx to change the name of your plug-in
-[assembly: Plugin("Plugin_Name")]
-
-
diff --git a/SpotCheck/Sdl.Community.Spotcheck.csproj b/SpotCheck/Sdl.Community.Spotcheck.csproj
deleted file mode 100644
index 4c0fc64b5f..0000000000
--- a/SpotCheck/Sdl.Community.Spotcheck.csproj
+++ /dev/null
@@ -1,171 +0,0 @@
-
-
-
- Debug
- AnyCPU
- 11.0.3344.0
- 2.0
- {65A1A6C7-7A2B-4260-8329-131032AAA305}
- Library
- Properties
- Sdl.Community.SpotCheck
- Sdl.Community.SpotCheck
- v4.8
-
-
-
-
- 2.0
- SAK
- SAK
- SAK
- SAK
-
-
-
-
-
- true
- full
- false
- bin\Debug\
- DEBUG;TRACE
- prompt
- 4
- AllRules.ruleset
- false
-
-
- pdbonly
- true
- bin\Release\
- TRACE
- prompt
- 4
- AllRules.ruleset
- false
-
-
-
- $(MSBuildProgramFiles32)\SDL\SDL Trados Studio\Studio16\Sdl.Core.Globalization.dll
-
-
- $(MSBuildProgramFiles32)\SDL\SDL Trados Studio\Studio16\Sdl.Core.Settings.dll
-
-
- $(MSBuildProgramFiles32)\SDL\SDL Trados Studio\Studio16\Sdl.Desktop.IntegrationApi.dll
-
-
- $(MSBuildProgramFiles32)\SDL\SDL Trados Studio\Studio16\Sdl.Desktop.IntegrationApi.Extensions.dll
-
-
- $(MSBuildProgramFiles32)\SDL\SDL Trados Studio\Studio16\Sdl.FileTypeSupport.Framework.Core.dll
-
-
- $(MSBuildProgramFiles32)\SDL\SDL Trados Studio\Studio16\Sdl.ProjectAutomation.Core.dll
-
-
- $(MSBuildProgramFiles32)\SDL\SDL Trados Studio\Studio16\Sdl.ProjectAutomation.FileBased.dll
-
-
- $(MSBuildProgramFiles32)\SDL\SDL Trados Studio\Studio16\Sdl.ProjectAutomation.Settings.dll
-
-
- $(MSBuildProgramFiles32)\SDL\SDL Trados Studio\Studio16\Sdl.TranslationStudioAutomation.IntegrationApi.dll
-
-
- $(MSBuildProgramFiles32)\SDL\SDL Trados Studio\Studio16\Sdl.TranslationStudioAutomation.IntegrationApi.Extensions.dll
-
-
-
-
-
-
-
-
- 3.5
-
-
-
-
-
- Form
-
-
- Form1.cs
-
-
-
-
-
-
-
- True
- True
- PluginResources.resx
-
-
-
-
-
-
-
- UserControl
-
-
- SpotcheckViewPartControl.cs
-
-
-
-
-
-
-
-
-
-
-
- Designer
- ResXFileCodeGenerator
- PluginResources.Designer.cs
-
-
-
-
-
- Form1.cs
-
-
- SpotcheckViewPartControl.cs
- Designer
-
-
-
-
-
-
-
- 2.1.0
-
-
- 16.1.0
-
-
-
- true
-
-
- samples.snk
-
-
- true
-
-
-
- $(AppData)\Sdl\Sdl Trados Studio\16\Plugins
-
-
- spotcheck.ico
-
-
-
\ No newline at end of file
diff --git a/SpotCheck/Sdl.Studio.Spotcheck.sln b/SpotCheck/Sdl.Studio.Spotcheck.sln
deleted file mode 100644
index cbe8eb51bc..0000000000
--- a/SpotCheck/Sdl.Studio.Spotcheck.sln
+++ /dev/null
@@ -1,25 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 15
-VisualStudioVersion = 15.0.28010.2046
-MinimumVisualStudioVersion = 10.0.40219.1
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sdl.Community.Spotcheck", "Sdl.Community.Spotcheck.csproj", "{65A1A6C7-7A2B-4260-8329-131032AAA305}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|Any CPU = Debug|Any CPU
- Release|Any CPU = Release|Any CPU
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {65A1A6C7-7A2B-4260-8329-131032AAA305}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {65A1A6C7-7A2B-4260-8329-131032AAA305}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {65A1A6C7-7A2B-4260-8329-131032AAA305}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {65A1A6C7-7A2B-4260-8329-131032AAA305}.Release|Any CPU.Build.0 = Release|Any CPU
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
- GlobalSection(ExtensibilityGlobals) = postSolution
- SolutionGuid = {BCED1558-23B2-4E82-9AB7-77908C708965}
- EndGlobalSection
-EndGlobal
diff --git a/SpotCheck/SdlXliff/CommentHandler.cs b/SpotCheck/SdlXliff/CommentHandler.cs
deleted file mode 100644
index f4e97cb35b..0000000000
--- a/SpotCheck/SdlXliff/CommentHandler.cs
+++ /dev/null
@@ -1,231 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Xml;
-
-#region comments
-/*
- * Comments are stored in /xliff/doc-info/cmt-defs
-
-
- context
-
-
- *
- * and they are wrapped around content as markup tags:
-
- Tube Warm up konnte nicht abgeschlossen, blabla...
-
- */
-
-//using Sdl.FileTypeSupport.Framework.BilingualApi;
-
-/* early experiment to do this properly, not by xml hacks, but the framework is not allowed in plugins
-FileTypeSupport.Framework.Native.Comment c = new FileTypeSupport.Framework.Native.Comment("batman", "1", "magic");
-FileTypeSupport.Framework.Bilingual.CommentMarker d = new FileTypeSupport.Framework.Bilingual.CommentMarker();
-d.Comments.Add(c);
-
-IEnumerator enu = _editorController.ActiveDocument.SegmentPairs.GetEnumerator();
-enu.MoveNext();
-enu.Current.Target.Add(d);
- */
-
-#endregion
-
-namespace Sdl.Community.SpotCheck.SdlXliff
-{
- class CommentHandler
- {
- #region variables
-
- private XmlDocument _doc;
- private XmlNode _commentStore;
- private Dictionary _existingComments;
- private XmlNamespaceManager _nsmgr;
-
- #endregion
-
- #region init
-
- public CommentHandler(XmlDocument doc, XmlNamespaceManager nsmgr)
- {
- _nsmgr = nsmgr;
- _doc = doc;
-
- CreateCommentStore(nsmgr);
-
- _existingComments = new Dictionary();
- RefreshExistingComments();
- }
-
- public void RefreshExistingComments()
- {
- _existingComments.Clear();
- foreach (XmlNode cmt in _commentStore)
- {
- XmlNode comment = cmt.SelectSingleNode("s:Comments/s:Comment", _nsmgr);
- if (comment.Attributes.GetNamedItem("user").Value == "SpotCheck Plugin")
- _existingComments.Add(cmt.Attributes.GetNamedItem("id").Value, cmt);
- }
- }
-
- #endregion
-
- #region public functions
-
- public static bool ContainsComments(string path)
- {
- using (StreamReader sr = new StreamReader(path))
- {
- string line;
- while ((line = sr.ReadLine()) != null)
- if (line.Contains("user=\"SpotCheck Plugin\""))
- return true;
- }
- return false;
- }
-
- public bool ContainsComment(XmlNode segment)
- {
- string dummy;
- return ContainsComment(segment, out dummy);
- }
-
- public bool ContainsComment(XmlNode segment, out string value)
- {
- value = null;
- XmlNode child = segment.SelectSingleNode("o:mrk[@mtype='x-sdl-comment']", _nsmgr);
- if (child == null) return false;
- string id = child.Attributes.GetNamedItem("sdl:cid").Value;
-
- bool result = false;
- if (_existingComments.ContainsKey(id))
- {
- result = true;
- XmlNode cmtDef = _existingComments[id];
- value = cmtDef.InnerText;
- }
- return result;
- }
-
- public void CreateComment(XmlNode segment, string label)
- {
- string guid = CreateCommentInList(label);
-
- XmlNode marker = _doc.CreateElement("mrk", _nsmgr.LookupNamespace("o"));
- AddAttribute(marker, "mtype", "x-sdl-comment");
- AddAttribute(marker, "sdl", "cid", guid);
-
- segment.InsertBefore(marker, segment.FirstChild);
- int count = segment.ChildNodes.Count;
- for (int i = 1; i < count; ++i)
- {
- XmlNode removed = segment.RemoveChild(segment.ChildNodes[1]);
- marker.AppendChild(removed);
- }
- }
-
- public void RemoveComments()
- {
- XmlNodeList markers = _doc.SelectNodes("/o:xliff/o:file/o:body//o:trans-unit//o:mrk[@mtype='x-sdl-comment']", _nsmgr);
- foreach (XmlNode marker in markers)
- RemoveComment(marker);
- _existingComments.Clear();
- RemoveCommentStore();
- }
-
- #endregion
-
- #region private functions
-
- private void CreateCommentStore(XmlNamespaceManager nsmgr)
- {
- _commentStore = _doc.SelectSingleNode("/o:xliff/s:doc-info/s:cmt-defs", nsmgr);
- if (_commentStore == null)
- {
- XmlNode parent = _doc.SelectSingleNode("/o:xliff/s:doc-info", nsmgr);
- if (parent == null)
- {
- parent = _doc.SelectSingleNode("/o:xliff", nsmgr);
- parent = parent.InsertBefore(_doc.CreateElement("doc-info", "http://sdl.com/FileTypes/SdlXliff/1.0"), _doc.SelectSingleNode("/o:xliff/o:file", nsmgr));
- }
- _commentStore = parent.AppendChild(_doc.CreateElement("cmt-defs", _nsmgr.LookupNamespace("sdl")));
- }
- }
-
- // can't have empty cmt-defs for some reason
- private void RemoveCommentStore()
- {
- _commentStore = _doc.SelectSingleNode("/o:xliff/s:doc-info/s:cmt-defs", _nsmgr);
- if (_commentStore != null)
- {
- XmlNodeList comments = _doc.SelectNodes("/o:xliff/s:doc-info/s:cmt-defs/s:cmt-def", _nsmgr);
- if (comments.Count > 0)
- return;
-
- _doc.SelectSingleNode("/o:xliff/s:doc-info", _nsmgr).RemoveChild(_commentStore);
- }
- }
-
- private string CreateCommentInList(string label)
- {
- string id = Guid.NewGuid().ToString();
- XmlNode cmtDef = _doc.CreateElement("cmt-def", _nsmgr.LookupNamespace("sdl"));
- AddAttribute(cmtDef, "id", id);
- _commentStore.AppendChild(cmtDef);
-
- XmlNode comments = _doc.CreateElement("Comments", _nsmgr.LookupNamespace("sdl"));
- cmtDef.AppendChild(comments);
-
- XmlNode comment = _doc.CreateElement("Comment", _nsmgr.LookupNamespace("sdl"));
- comments.AppendChild(comment);
- AddAttribute(comment, "version", "1.0");
- AddAttribute(comment, "date", DateTime.Now.ToString("O"));
- AddAttribute(comment, "user", "SpotCheck Plugin");
- AddAttribute(comment, "severity", "Low");
- comment.InnerText = label;
-
- _existingComments.Add(id, cmtDef);
-
- return id;
- }
-
- private void AddAttribute(XmlNode node, string name, string val)
- {
- AddAttribute(node, null, name, val);
- }
-
- private void AddAttribute(XmlNode node, string prefix, string name, string val)
- {
- XmlAttribute attr;
- if (prefix == null)
- attr = _doc.CreateAttribute(name);
- else
- attr = _doc.CreateAttribute(prefix, name, _nsmgr.LookupNamespace(prefix));
- attr.Value = val;
- node.Attributes.Append(attr);
- }
-
- private void RemoveComment(XmlNode commentMarker)
- {
- string id = commentMarker.Attributes.GetNamedItem("sdl:cid").Value;
- if (!_existingComments.ContainsKey(id))
- return; // it's not ours, keep it
-
- int count = commentMarker.ChildNodes.Count;
- for (int i = 0; i < count; ++i )
- {
- XmlNode removed = commentMarker.ChildNodes[0];
- commentMarker.ParentNode.InsertBefore(removed, commentMarker);
- }
- commentMarker.ParentNode.RemoveChild(commentMarker);
-
- XmlNode existingStored = _commentStore.SelectSingleNode(string.Format("//sdl:cmt-def[@id='{0}']", id), _nsmgr);
- if (existingStored != null)
- _commentStore.RemoveChild(existingStored);
- }
-
- #endregion
-
- }
-}
diff --git a/SpotCheck/SdlXliff/LockHandler.cs b/SpotCheck/SdlXliff/LockHandler.cs
deleted file mode 100644
index 72167ff773..0000000000
--- a/SpotCheck/SdlXliff/LockHandler.cs
+++ /dev/null
@@ -1,153 +0,0 @@
-using System.Collections.Generic;
-using System.Xml;
-
-#region comments
-/*
- lock markers are stored in the TU trans-unit/sdl:seg-defs/ - walk up from the mrk seg to the TU
-
-
- ... lots of stuff to leave untouched
-
-
- * there is no locked=false, just remove it
- * where the id is equivalent to the segment mrk mid, like so:
-
- If the condition persists, please contact your service representative.
-
- */
-#endregion
-
-namespace Sdl.Community.SpotCheck.SdlXliff
-{
- class LockHandler
- {
- #region variables
-
- private XmlDocument _doc;
- private List _existingLocks;
- private XmlNamespaceManager _nsmgr;
- private CommentHandler _commenter;
- private HashSet _segments;
-
- #endregion
-
- #region public functions
-
- public LockHandler(XmlDocument doc, XmlNamespaceManager nsmgr, CommentHandler commenter)
- {
- _nsmgr = nsmgr;
- _doc = doc;
- _commenter = commenter;
- _existingLocks = new List();
- RefreshExistingLocks();
- _segments = new HashSet();
- }
-
- public bool IsLocked(XmlNode segment)
- {
- XmlNode defNode = GetDefForSegment(segment);
- return (defNode.Attributes.GetNamedItem("locked") != null);
- }
-
- public bool Is100(XmlNode segment)
- {
- bool is100;
- XmlNode defNode = GetDefForSegment(segment);
- XmlNode attribute = defNode.Attributes.GetNamedItem("percent");
- is100 = attribute != null && attribute.Value == "100";
- attribute = defNode.Attributes.GetNamedItem("text-match");
- is100 &= attribute == null || attribute.Value != "SourceAndTarget";
- return is100;
- }
-
- public bool IsCm(XmlNode segment)
- {
- bool isCm;
- XmlNode defNode = GetDefForSegment(segment);
- XmlNode attribute = defNode.Attributes.GetNamedItem("percent");
- isCm = attribute != null && attribute.Value == "100";
- attribute = defNode.Attributes.GetNamedItem("text-match");
- isCm &= attribute != null && attribute.Value == "SourceAndTarget";
- return isCm;
- }
-
- public bool IsRepetition(XmlNode segment)
- {
- if (_segments.Contains(segment.InnerText.ToLower()))
- return true;
-
- _segments.Add(segment.InnerText.ToLower());
- return false;
- /* earlier attempt, already caught by 100%
- XmlNode defNode = GetDefForSegment(segment);
- XmlNode attribute = defNode.Attributes.GetNamedItem("origin");
- isRepetition = attribute != null && attribute.Value == "auto-propagated";
- return isRepetition;
- */
- }
-
- public void LockSegment(XmlNode segment)
- {
- XmlNode defNode = GetDefForSegment(segment);
- XmlAttribute newAttr = _doc.CreateAttribute("locked");
- newAttr.Value = "true";
- defNode.Attributes.SetNamedItem(newAttr);
- _existingLocks.Add(segment);
- }
-
- public void UnlockSegment(XmlNode segment)
- {
- XmlNode defNode = GetDefForSegment(segment);
- defNode.Attributes.RemoveNamedItem("locked");
- _existingLocks.Remove(segment);
- }
-
- public void RemoveLocks()
- {
- int count = _existingLocks.Count;
- for (int i = 0; i < count; ++i)
- {
- XmlNode segment = _existingLocks[0];
- UnlockSegment(segment);
- }
- }
-
- #endregion
-
- #region private functions
-
- private void RefreshExistingLocks()
- {
- _existingLocks.Clear();
-
- XmlNodeList allSegments = _doc.SelectNodes("/o:xliff/o:file/o:body//o:trans-unit/o:seg-source//o:mrk[@mtype='seg']", _nsmgr);
-
- foreach (XmlNode segment in allSegments)
- {
- if (!IsLocked(segment))
- continue;
-
- string content;
- if (!_commenter.ContainsComment(segment, out content))
- continue;
-
- if (content == "Lock Protected")
- continue;
-
- _existingLocks.Add(segment);
- }
- }
-
- private XmlNode GetDefForSegment(XmlNode segment)
- {
- string id = segment.Attributes.GetNamedItem("mid").Value;
- XmlNode parentTu = segment.ParentNode;
- while (parentTu.Name != "trans-unit")
- parentTu = parentTu.ParentNode;
- XmlNode defNode = parentTu.SelectSingleNode(string.Format("sdl:seg-defs/sdl:seg[@id='{0}']", id), _nsmgr);
- return defNode;
- }
- #endregion
-
- }
-}
diff --git a/SpotCheck/SdlXliff/SegmentSelector.cs b/SpotCheck/SdlXliff/SegmentSelector.cs
deleted file mode 100644
index 7d958426a1..0000000000
--- a/SpotCheck/SdlXliff/SegmentSelector.cs
+++ /dev/null
@@ -1,152 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Xml;
-using Sdl.Community.SpotCheck.Helpers;
-
-namespace Sdl.Community.SpotCheck.SdlXliff
-{
- class SegmentSelector
- {
- #region variables
-
- private Random _rnd;
- private XmlDocument _doc;
- private CommentHandler _commenter;
- private LockHandler _locker;
- private XmlNamespaceManager _nsmgr;
- private List _segments;
- private Dictionary _segmentMap;
- private ApplicationSettings _settings;
- public bool GetContext;
- #endregion
-
- #region public functions
-
- public SegmentSelector(XmlDocument doc, XmlNamespaceManager nsmgr, CommentHandler commenter, LockHandler locker)
- {
- _nsmgr = nsmgr;
- _doc = doc;
- _locker = locker;
- _commenter = commenter;
-
- _rnd = new Random();
- }
-
- public int GetSegmentLimit(ApplicationSettings settings)
- {
- if (settings.LimitByWords)
- {
- return _segments.Count;
- }
- else
- {
- int requiredSegments = (int)(_segments.Count / 100.0 * settings.Percentage + .5);
- if (requiredSegments == 0)
- requiredSegments = 1;
- return requiredSegments;
- }
- }
-
- public List GetAvailableSegments(ApplicationSettings settings, out int words)
- {
- words = 0;
- _settings = settings;
-
- XmlNodeList _segmentNodesList;
-
- _segmentNodesList = _doc.SelectNodes("/o:xliff/o:file/o:body//o:trans-unit/o:seg-source//o:mrk[@mtype='seg']", _nsmgr);
- _segments = new List(_segmentNodesList.Cast());
- _segmentMap = new Dictionary(_segments.Count);
-
- int requiredSegments = GetSegmentLimit(settings);
- List remaining = _segments.Where(n => WordCounter.Count(n.InnerText) >= settings.MinWords && WordCounter.Count(n.InnerText) <= settings.MaxWords).ToList();
-
- // need to preserve original positions while remaining shrinks
- Dictionary segmentIndexMap = new Dictionary(_segments.Count);
- for (int i = 0; i < _segments.Count; ++i)
- segmentIndexMap.Add(_segments[i], i);
-
- while (remaining.Count > 0 && _segmentMap.Count < requiredSegments)
- {
- int position = _rnd.Next(remaining.Count);
- XmlNode segment = remaining[position];
-
- position = segmentIndexMap[segment];
- if (IsValidSegment(segment))
- _segmentMap.Add(segment, position);
- remaining.Remove(segment);
- if (_settings.LimitByWords)
- {
- int segmentWordCount = WordCounter.Count(segment.InnerText);
- words += segmentWordCount;
- if (words > settings.TotalWords)
- break;
- }
- }
- return _segmentMap.Keys.ToList();
- }
-
- private bool IsValidSegment(XmlNode segment)
- {
- bool valid = !(_settings.SkipLocked && _locker.IsLocked(segment));
- valid &= !(_settings.SkipCm && _locker.IsCm(segment));
- valid &= !(_settings.Skip100 && _locker.Is100(segment));
- valid &= !(_settings.SkipRepetition && _locker.IsRepetition(segment));
- return valid;
- }
-
- public void GetContextNodes(XmlNode segment, out XmlNode before, out XmlNode after)
- {
- before = null;
- after = null;
-
- int index = _segmentMap[segment];
-
- while (index > 0)
- {
- if (FindContext(--index, out before))
- break;
- }
-
- index = _segmentMap[segment];
- while (index < _segments.Count - 1)
- {
- if (FindContext(++index, out after))
- break;
- }
- }
- #endregion
-
- #region private functions
-
- private bool FindContext(int index, out XmlNode context)
- {
- bool doBreak = false;
- context = null;
-
- XmlNode parent = _segments[index];
- string content;
- if (!_commenter.ContainsComment(parent, out content) && !_locker.IsLocked(parent))
- {
- context = parent;
- doBreak = true; // it's a valid context node, return
- }
- if (content == "SpotCheck Context")
- {
- doBreak = true; // it already is context, don't do anything
- }
-
- return doBreak;
- }
-
- private int WordCount(string text)
- {
- string[] words = text.Split(new char[] {' ', '\r', '\n', '\t' }, StringSplitOptions.RemoveEmptyEntries);
- return words.Length;
- }
-
- #endregion
-
- }
-}
diff --git a/SpotCheck/SpotcheckProcessor.cs b/SpotCheck/SpotcheckProcessor.cs
deleted file mode 100644
index ff5c20c05a..0000000000
--- a/SpotCheck/SpotcheckProcessor.cs
+++ /dev/null
@@ -1,136 +0,0 @@
-using System.Collections.Generic;
-using System.Xml;
-using Sdl.Community.SpotCheck.Helpers;
-using Sdl.Community.SpotCheck.SdlXliff;
-
-namespace Sdl.Community.SpotCheck
-{
- class SpotCheckProcessor
- {
- #region variables
- private string _path;
- private XmlDocument _doc;
- private XmlNamespaceManager _nsmgr;
-
- private SegmentSelector _selector;
- private CommentHandler _commenter;
- private LockHandler _locker;
-
- #endregion
-
- public int Segments { get; set; }
- public int Words { get; set; }
-
- #region public functions
-
- public void Open(string path)
- {
- _path = path;
- _doc = new XmlDocument();
- _doc.Load(path);
- _doc.PreserveWhitespace = true;
-
- _nsmgr = new XmlNamespaceManager(_doc.NameTable);
- _nsmgr.AddNamespace("o", "urn:oasis:names:tc:xliff:document:1.2");
- _nsmgr.AddNamespace("s", "http://sdl.com/FileTypes/SdlXliff/1.0");
- _nsmgr.AddNamespace("sdl", "http://sdl.com/FileTypes/SdlXliff/1.0");
-
- _commenter = new CommentHandler(_doc, _nsmgr);
- _locker = new LockHandler(_doc, _nsmgr, _commenter);
- _selector = new SegmentSelector(_doc, _nsmgr, _commenter, _locker);
- _selector.GetContext = true;
- }
-
- public void Close()
- {
- _doc.Save(_path);
- }
-
- public bool AddMarkers(ApplicationSettings settings)
- {
- int words;
-
- List segments = _selector.GetAvailableSegments(settings, out words);
- Words = words;
- Segments = segments.Count;
-
- int requestedSegments = _selector.GetSegmentLimit(settings);
- if (settings.LimitByWords)
- {
- if (words < settings.TotalWords)
- System.Windows.Forms.MessageBox.Show(
- _path +
- "\nThere are not enough segments meeting the specified word length limits.\n" +
- string.Format("{0} words were requested, but only {1} words are available in valid segments.",
- settings.TotalWords, words),
- "Not enough matches",
- System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Information);
- }
- else
- {
- if (segments.Count < requestedSegments)
- System.Windows.Forms.MessageBox.Show(
- _path +
- "\nThere are not enough segments meeting the specified word length limits.\n" +
- string.Format("{0} segments were requested, but only {1} segments are valid.", requestedSegments, segments.Count),
- "Not enough matches",
- System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Information);
- }
-
- if (segments.Count == 0)
- return false;
-
- foreach (XmlNode segment in segments)
- _commenter.CreateComment(segment, "SpotCheck Segment");
-
- if (settings.LockContext)
- {
- foreach (XmlNode segment in segments)
- {
- XmlNode before;
- XmlNode after;
- _selector.GetContextNodes(segment, out before, out after);
- LockContext(before);
- LockContext(after);
- }
- }
-
- PluginInitializer.FilesWithSpotcheckMarkers.Add(_path);
-
- return true;
- }
-
- public void RemoveMarkers(ApplicationSettings settings)
- {
- _commenter.RemoveComments();
- if (settings.LockContext)
- _locker.RemoveLocks();
- PluginInitializer.FilesWithSpotcheckMarkers.Remove(_path);
- }
-
- #endregion
-
- #region private functions
-
- private void LockContext(XmlNode node)
- {
- if (node != null)
- {
- if (!_commenter.ContainsComment(node))
- _commenter.CreateComment(node, "SpotCheck Context");
- if (_locker.IsLocked(node))
- {
- // if its not a spotchecker lock, mark, so it won't be removed during cleanup
- string content;
- if (!_commenter.ContainsComment(node, out content) || content != "Lock Protected")
- _commenter.CreateComment(node, "Lock Protected");
- }
- else
- _locker.LockSegment(node);
- }
- }
-
- #endregion
-
- }
-}
diff --git a/SpotCheck/SpotcheckViewPart.cs b/SpotCheck/SpotcheckViewPart.cs
deleted file mode 100644
index d7104ddbe6..0000000000
--- a/SpotCheck/SpotcheckViewPart.cs
+++ /dev/null
@@ -1,34 +0,0 @@
-using System;
-using Sdl.Desktop.IntegrationApi;
-using Sdl.Desktop.IntegrationApi.Extensions;
-using Sdl.Desktop.IntegrationApi.Interfaces;
-using Sdl.TranslationStudioAutomation.IntegrationApi;
-
-namespace Sdl.Community.SpotCheck
-{
- [ViewPart(
- Id = "SDL SpotCheck",
- Name = "SDL SpotCheck",
- Description = "Mark a percentage of segments for spot-checking",
- Icon="spotcheck"
- )]
- [ViewPartLayout(typeof(FilesController), Dock = DockType.Bottom)]
- class SpotCheckFilesViewPart : AbstractViewPartController
- {
- protected override IUIControl GetContentControl()
- {
- return _control.Value;
- }
-
- protected override void Initialize()
- {
- }
-
- private FilesController FilesController
- {
- get { return SdlTradosStudio.Application.GetController(); }
- }
-
- private static readonly Lazy _control = new Lazy(() => new SpotCheckViewPartControl());
- }
-}
diff --git a/SpotCheck/SpotcheckViewPartControl.Designer.cs b/SpotCheck/SpotcheckViewPartControl.Designer.cs
deleted file mode 100644
index d96e278529..0000000000
--- a/SpotCheck/SpotcheckViewPartControl.Designer.cs
+++ /dev/null
@@ -1,464 +0,0 @@
-namespace Sdl.Community.SpotCheck
-{
- partial class SpotCheckViewPartControl
- {
- ///
- /// Required designer variable.
- ///
- private System.ComponentModel.IContainer components = null;
-
- ///
- /// Clean up any resources being used.
- ///
- /// true if managed resources should be disposed; otherwise, false.
- protected override void Dispose(bool disposing)
- {
- if (disposing && (components != null))
- {
- components.Dispose();
- }
- base.Dispose(disposing);
- }
-
- #region Component Designer generated code
-
- ///
- /// Required method for Designer support - do not modify
- /// the contents of this method with the code editor.
- ///
- private void InitializeComponent()
- {
- System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SpotCheckViewPartControl));
- this.cmdAddMarkers = new System.Windows.Forms.Button();
- this.cmdRemoveMarkers = new System.Windows.Forms.Button();
- this.numPercentage = new System.Windows.Forms.NumericUpDown();
- this.lblNotes = new System.Windows.Forms.Label();
- this.groupBox1 = new System.Windows.Forms.GroupBox();
- this.numMinWords = new System.Windows.Forms.NumericUpDown();
- this.numMaxWords = new System.Windows.Forms.NumericUpDown();
- this.chkSkipLocked = new System.Windows.Forms.CheckBox();
- this.chkSkipCm = new System.Windows.Forms.CheckBox();
- this.chkSkip100 = new System.Windows.Forms.CheckBox();
- this.panel1 = new System.Windows.Forms.Panel();
- this.lblWordLimit = new System.Windows.Forms.Label();
- this.numTotalWords = new System.Windows.Forms.NumericUpDown();
- this.chkLimitByWords = new System.Windows.Forms.CheckBox();
- this.pictureBox4 = new System.Windows.Forms.PictureBox();
- this.label4 = new System.Windows.Forms.Label();
- this.label3 = new System.Windows.Forms.Label();
- this.lblSegmentLimit = new System.Windows.Forms.Label();
- this.label1 = new System.Windows.Forms.Label();
- this.panel2 = new System.Windows.Forms.Panel();
- this.chkSkipRepetition = new System.Windows.Forms.CheckBox();
- this.pictureBox3 = new System.Windows.Forms.PictureBox();
- this.label5 = new System.Windows.Forms.Label();
- this.label6 = new System.Windows.Forms.Label();
- this.label7 = new System.Windows.Forms.Label();
- this.pictureBox1 = new System.Windows.Forms.PictureBox();
- this.pictureBox2 = new System.Windows.Forms.PictureBox();
- ((System.ComponentModel.ISupportInitialize)(this.numPercentage)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.numMinWords)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.numMaxWords)).BeginInit();
- this.panel1.SuspendLayout();
- ((System.ComponentModel.ISupportInitialize)(this.numTotalWords)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.pictureBox4)).BeginInit();
- this.panel2.SuspendLayout();
- ((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).BeginInit();
- this.SuspendLayout();
- //
- // cmdAddMarkers
- //
- this.cmdAddMarkers.Location = new System.Drawing.Point(270, 11);
- this.cmdAddMarkers.Name = "cmdAddMarkers";
- this.cmdAddMarkers.Size = new System.Drawing.Size(117, 23);
- this.cmdAddMarkers.TabIndex = 1;
- this.cmdAddMarkers.Text = "Add Markers";
- this.cmdAddMarkers.UseVisualStyleBackColor = true;
- this.cmdAddMarkers.Click += new System.EventHandler(this.cmdAddMarkers_Click);
- //
- // cmdRemoveMarkers
- //
- this.cmdRemoveMarkers.Location = new System.Drawing.Point(270, 99);
- this.cmdRemoveMarkers.Name = "cmdRemoveMarkers";
- this.cmdRemoveMarkers.Size = new System.Drawing.Size(117, 23);
- this.cmdRemoveMarkers.TabIndex = 3;
- this.cmdRemoveMarkers.Text = "Remove Markers";
- this.cmdRemoveMarkers.UseVisualStyleBackColor = true;
- this.cmdRemoveMarkers.Click += new System.EventHandler(this.cmdRemoveMarkers_Click);
- //
- // numPercentage
- //
- this.numPercentage.Location = new System.Drawing.Point(134, 41);
- this.numPercentage.Minimum = new decimal(new int[] {
- 1,
- 0,
- 0,
- 0});
- this.numPercentage.Name = "numPercentage";
- this.numPercentage.Size = new System.Drawing.Size(47, 20);
- this.numPercentage.TabIndex = 2;
- this.numPercentage.Value = new decimal(new int[] {
- 20,
- 0,
- 0,
- 0});
- this.numPercentage.ValueChanged += new System.EventHandler(this.numPercentage_ValueChanged);
- //
- // lblNotes
- //
- this.lblNotes.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
- this.lblNotes.AutoSize = true;
- this.lblNotes.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(0)))), ((int)(((byte)(0)))));
- this.lblNotes.Location = new System.Drawing.Point(25, 188);
- this.lblNotes.Name = "lblNotes";
- this.lblNotes.Size = new System.Drawing.Size(0, 13);
- this.lblNotes.TabIndex = 7;
- //
- // groupBox1
- //
- this.groupBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
- | System.Windows.Forms.AnchorStyles.Right)));
- this.groupBox1.Location = new System.Drawing.Point(1, 175);
- this.groupBox1.Name = "groupBox1";
- this.groupBox1.Size = new System.Drawing.Size(919, 10);
- this.groupBox1.TabIndex = 6;
- this.groupBox1.TabStop = false;
- //
- // numMinWords
- //
- this.numMinWords.Location = new System.Drawing.Point(134, 115);
- this.numMinWords.Minimum = new decimal(new int[] {
- 1,
- 0,
- 0,
- 0});
- this.numMinWords.Name = "numMinWords";
- this.numMinWords.Size = new System.Drawing.Size(47, 20);
- this.numMinWords.TabIndex = 7;
- this.numMinWords.Value = new decimal(new int[] {
- 5,
- 0,
- 0,
- 0});
- this.numMinWords.ValueChanged += new System.EventHandler(this.numMinWords_ValueChanged);
- //
- // numMaxWords
- //
- this.numMaxWords.Location = new System.Drawing.Point(134, 137);
- this.numMaxWords.Maximum = new decimal(new int[] {
- 1000,
- 0,
- 0,
- 0});
- this.numMaxWords.Minimum = new decimal(new int[] {
- 1,
- 0,
- 0,
- 0});
- this.numMaxWords.Name = "numMaxWords";
- this.numMaxWords.Size = new System.Drawing.Size(47, 20);
- this.numMaxWords.TabIndex = 9;
- this.numMaxWords.Value = new decimal(new int[] {
- 15,
- 0,
- 0,
- 0});
- this.numMaxWords.ValueChanged += new System.EventHandler(this.numMaxWords_ValueChanged);
- //
- // chkSkipLocked
- //
- this.chkSkipLocked.AutoSize = true;
- this.chkSkipLocked.Location = new System.Drawing.Point(20, 50);
- this.chkSkipLocked.Name = "chkSkipLocked";
- this.chkSkipLocked.Size = new System.Drawing.Size(130, 17);
- this.chkSkipLocked.TabIndex = 1;
- this.chkSkipLocked.Text = "Skip locked segments";
- this.chkSkipLocked.UseVisualStyleBackColor = true;
- this.chkSkipLocked.CheckStateChanged += new System.EventHandler(this.chkSkipLocked_CheckStateChanged);
- //
- // chkSkipCm
- //
- this.chkSkipCm.AutoSize = true;
- this.chkSkipCm.Location = new System.Drawing.Point(20, 94);
- this.chkSkipCm.Name = "chkSkipCm";
- this.chkSkipCm.Size = new System.Drawing.Size(114, 17);
- this.chkSkipCm.TabIndex = 3;
- this.chkSkipCm.Text = "Skip CM segments";
- this.chkSkipCm.UseVisualStyleBackColor = true;
- this.chkSkipCm.CheckStateChanged += new System.EventHandler(this.chkSkipCm_CheckStateChanged);
- //
- // chkSkip100
- //
- this.chkSkip100.AutoSize = true;
- this.chkSkip100.Location = new System.Drawing.Point(20, 72);
- this.chkSkip100.Name = "chkSkip100";
- this.chkSkip100.Size = new System.Drawing.Size(119, 17);
- this.chkSkip100.TabIndex = 2;
- this.chkSkip100.Text = "Skip 100% matches";
- this.chkSkip100.UseVisualStyleBackColor = true;
- this.chkSkip100.CheckStateChanged += new System.EventHandler(this.chkSkip100_CheckStateChanged);
- //
- // panel1
- //
- this.panel1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
- | System.Windows.Forms.AnchorStyles.Left)));
- this.panel1.BackColor = System.Drawing.Color.WhiteSmoke;
- this.panel1.Controls.Add(this.lblWordLimit);
- this.panel1.Controls.Add(this.numTotalWords);
- this.panel1.Controls.Add(this.chkLimitByWords);
- this.panel1.Controls.Add(this.pictureBox4);
- this.panel1.Controls.Add(this.label4);
- this.panel1.Controls.Add(this.label3);
- this.panel1.Controls.Add(this.lblSegmentLimit);
- this.panel1.Controls.Add(this.label1);
- this.panel1.Controls.Add(this.numPercentage);
- this.panel1.Controls.Add(this.numMaxWords);
- this.panel1.Controls.Add(this.numMinWords);
- this.panel1.Location = new System.Drawing.Point(3, 3);
- this.panel1.Name = "panel1";
- this.panel1.Size = new System.Drawing.Size(200, 182);
- this.panel1.TabIndex = 0;
- //
- // lblWordLimit
- //
- this.lblWordLimit.AutoSize = true;
- this.lblWordLimit.Location = new System.Drawing.Point(15, 87);
- this.lblWordLimit.Name = "lblWordLimit";
- this.lblWordLimit.Size = new System.Drawing.Size(100, 13);
- this.lblWordLimit.TabIndex = 4;
- this.lblWordLimit.Text = "Total words to mark";
- //
- // numTotalWords
- //
- this.numTotalWords.Enabled = false;
- this.numTotalWords.Location = new System.Drawing.Point(134, 85);
- this.numTotalWords.Maximum = new decimal(new int[] {
- 1000000,
- 0,
- 0,
- 0});
- this.numTotalWords.Name = "numTotalWords";
- this.numTotalWords.Size = new System.Drawing.Size(47, 20);
- this.numTotalWords.TabIndex = 5;
- this.numTotalWords.Value = new decimal(new int[] {
- 1,
- 0,
- 0,
- 0});
- this.numTotalWords.ValueChanged += new System.EventHandler(this.numTotalWords_ValueChanged);
- //
- // chkLimitByWords
- //
- this.chkLimitByWords.AutoSize = true;
- this.chkLimitByWords.Location = new System.Drawing.Point(18, 66);
- this.chkLimitByWords.Name = "chkLimitByWords";
- this.chkLimitByWords.Size = new System.Drawing.Size(152, 17);
- this.chkLimitByWords.TabIndex = 3;
- this.chkLimitByWords.Text = "Limit by total words instead";
- this.chkLimitByWords.UseVisualStyleBackColor = true;
- this.chkLimitByWords.CheckedChanged += new System.EventHandler(this.chkLimitByWords_CheckedChanged);
- //
- // pictureBox4
- //
- this.pictureBox4.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox4.Image")));
- this.pictureBox4.Location = new System.Drawing.Point(165, 3);
- this.pictureBox4.Name = "pictureBox4";
- this.pictureBox4.Size = new System.Drawing.Size(32, 32);
- this.pictureBox4.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
- this.pictureBox4.TabIndex = 29;
- this.pictureBox4.TabStop = false;
- //
- // label4
- //
- this.label4.AutoSize = true;
- this.label4.Location = new System.Drawing.Point(15, 138);
- this.label4.Name = "label4";
- this.label4.Size = new System.Drawing.Size(102, 13);
- this.label4.TabIndex = 8;
- this.label4.Text = "Max segment length";
- //
- // label3
- //
- this.label3.AutoSize = true;
- this.label3.Location = new System.Drawing.Point(15, 115);
- this.label3.Name = "label3";
- this.label3.Size = new System.Drawing.Size(99, 13);
- this.label3.TabIndex = 6;
- this.label3.Text = "Min segment length";
- //
- // lblSegmentLimit
- //
- this.lblSegmentLimit.AutoSize = true;
- this.lblSegmentLimit.Location = new System.Drawing.Point(15, 43);
- this.lblSegmentLimit.Name = "lblSegmentLimit";
- this.lblSegmentLimit.Size = new System.Drawing.Size(113, 13);
- this.lblSegmentLimit.TabIndex = 1;
- this.lblSegmentLimit.Text = "% of segments to mark";
- //
- // label1
- //
- this.label1.AutoSize = true;
- this.label1.ForeColor = System.Drawing.SystemColors.ControlDarkDark;
- this.label1.Location = new System.Drawing.Point(114, 3);
- this.label1.Name = "label1";
- this.label1.Size = new System.Drawing.Size(45, 13);
- this.label1.TabIndex = 0;
- this.label1.Text = "Settings";
- //
- // panel2
- //
- this.panel2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
- | System.Windows.Forms.AnchorStyles.Right)));
- this.panel2.BackColor = System.Drawing.Color.WhiteSmoke;
- this.panel2.Controls.Add(this.chkSkipRepetition);
- this.panel2.Controls.Add(this.pictureBox3);
- this.panel2.Controls.Add(this.chkSkip100);
- this.panel2.Controls.Add(this.chkSkipLocked);
- this.panel2.Controls.Add(this.label5);
- this.panel2.Controls.Add(this.chkSkipCm);
- this.panel2.Location = new System.Drawing.Point(717, 3);
- this.panel2.Name = "panel2";
- this.panel2.Size = new System.Drawing.Size(200, 182);
- this.panel2.TabIndex = 5;
- //
- // chkSkipRepetition
- //
- this.chkSkipRepetition.AutoSize = true;
- this.chkSkipRepetition.Location = new System.Drawing.Point(20, 116);
- this.chkSkipRepetition.Name = "chkSkipRepetition";
- this.chkSkipRepetition.Size = new System.Drawing.Size(98, 17);
- this.chkSkipRepetition.TabIndex = 4;
- this.chkSkipRepetition.Text = "Skip repetitions";
- this.chkSkipRepetition.UseVisualStyleBackColor = true;
- this.chkSkipRepetition.CheckedChanged += new System.EventHandler(this.chkSkipRepetition_CheckedChanged);
- //
- // pictureBox3
- //
- this.pictureBox3.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox3.Image")));
- this.pictureBox3.Location = new System.Drawing.Point(168, 3);
- this.pictureBox3.Name = "pictureBox3";
- this.pictureBox3.Size = new System.Drawing.Size(32, 32);
- this.pictureBox3.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
- this.pictureBox3.TabIndex = 29;
- this.pictureBox3.TabStop = false;
- //
- // label5
- //
- this.label5.AutoSize = true;
- this.label5.ForeColor = System.Drawing.SystemColors.ControlDarkDark;
- this.label5.Location = new System.Drawing.Point(119, 3);
- this.label5.Name = "label5";
- this.label5.Size = new System.Drawing.Size(43, 13);
- this.label5.TabIndex = 0;
- this.label5.Text = "Options";
- //
- // label6
- //
- this.label6.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
- | System.Windows.Forms.AnchorStyles.Right)));
- this.label6.ForeColor = System.Drawing.SystemColors.ControlDarkDark;
- this.label6.Location = new System.Drawing.Point(267, 37);
- this.label6.Name = "label6";
- this.label6.Size = new System.Drawing.Size(444, 53);
- this.label6.TabIndex = 2;
- this.label6.Text = "For selected files: Add comments to mark spotcheck segments. The files are then o" +
- "pened for review.";
- //
- // label7
- //
- this.label7.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
- | System.Windows.Forms.AnchorStyles.Right)));
- this.label7.ForeColor = System.Drawing.SystemColors.ControlDarkDark;
- this.label7.Location = new System.Drawing.Point(267, 125);
- this.label7.Name = "label7";
- this.label7.Size = new System.Drawing.Size(444, 45);
- this.label7.TabIndex = 4;
- this.label7.Text = "For selected files: Remove spotcheck comments and and open files for review.";
- //
- // pictureBox1
- //
- this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image")));
- this.pictureBox1.Location = new System.Drawing.Point(229, 11);
- this.pictureBox1.Name = "pictureBox1";
- this.pictureBox1.Size = new System.Drawing.Size(32, 32);
- this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
- this.pictureBox1.TabIndex = 27;
- this.pictureBox1.TabStop = false;
- //
- // pictureBox2
- //
- this.pictureBox2.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox2.Image")));
- this.pictureBox2.Location = new System.Drawing.Point(229, 99);
- this.pictureBox2.Name = "pictureBox2";
- this.pictureBox2.Size = new System.Drawing.Size(32, 32);
- this.pictureBox2.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
- this.pictureBox2.TabIndex = 28;
- this.pictureBox2.TabStop = false;
- //
- // SpotCheckViewPartControl
- //
- this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
- this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
- this.BackColor = System.Drawing.SystemColors.Window;
- this.Controls.Add(this.pictureBox2);
- this.Controls.Add(this.pictureBox1);
- this.Controls.Add(this.label7);
- this.Controls.Add(this.label6);
- this.Controls.Add(this.panel2);
- this.Controls.Add(this.panel1);
- this.Controls.Add(this.groupBox1);
- this.Controls.Add(this.lblNotes);
- this.Controls.Add(this.cmdRemoveMarkers);
- this.Controls.Add(this.cmdAddMarkers);
- this.Name = "SpotCheckViewPartControl";
- this.Size = new System.Drawing.Size(920, 209);
- ((System.ComponentModel.ISupportInitialize)(this.numPercentage)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.numMinWords)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.numMaxWords)).EndInit();
- this.panel1.ResumeLayout(false);
- this.panel1.PerformLayout();
- ((System.ComponentModel.ISupportInitialize)(this.numTotalWords)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.pictureBox4)).EndInit();
- this.panel2.ResumeLayout(false);
- this.panel2.PerformLayout();
- ((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).EndInit();
- this.ResumeLayout(false);
- this.PerformLayout();
-
- }
-
- #endregion
-
- private System.Windows.Forms.Button cmdAddMarkers;
- private System.Windows.Forms.Button cmdRemoveMarkers;
- private System.Windows.Forms.NumericUpDown numPercentage;
- private System.Windows.Forms.Label lblNotes;
- private System.Windows.Forms.GroupBox groupBox1;
- private System.Windows.Forms.NumericUpDown numMinWords;
- private System.Windows.Forms.NumericUpDown numMaxWords;
- private System.Windows.Forms.CheckBox chkSkipLocked;
- private System.Windows.Forms.CheckBox chkSkipCm;
- private System.Windows.Forms.CheckBox chkSkip100;
- private System.Windows.Forms.Panel panel1;
- private System.Windows.Forms.Label label4;
- private System.Windows.Forms.Label label3;
- private System.Windows.Forms.Label lblSegmentLimit;
- private System.Windows.Forms.Label label1;
- private System.Windows.Forms.Panel panel2;
- private System.Windows.Forms.PictureBox pictureBox3;
- private System.Windows.Forms.Label label5;
- private System.Windows.Forms.Label label6;
- private System.Windows.Forms.Label label7;
- private System.Windows.Forms.PictureBox pictureBox1;
- private System.Windows.Forms.PictureBox pictureBox2;
- private System.Windows.Forms.PictureBox pictureBox4;
- private System.Windows.Forms.Label lblWordLimit;
- private System.Windows.Forms.NumericUpDown numTotalWords;
- private System.Windows.Forms.CheckBox chkLimitByWords;
- private System.Windows.Forms.CheckBox chkSkipRepetition;
- }
-}
diff --git a/SpotCheck/SpotcheckViewPartControl.cs b/SpotCheck/SpotcheckViewPartControl.cs
deleted file mode 100644
index bcb5a409b9..0000000000
--- a/SpotCheck/SpotcheckViewPartControl.cs
+++ /dev/null
@@ -1,362 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
-using System.Threading;
-using System.Windows.Forms;
-using Sdl.Community.SpotCheck.Helpers;
-using Sdl.Community.SpotCheck.SdlXliff;
-using Sdl.Desktop.IntegrationApi.Interfaces;
-using Sdl.ProjectAutomation.Core;
-using Sdl.TranslationStudioAutomation.IntegrationApi;
-
-namespace Sdl.Community.SpotCheck
-{
- public partial class SpotCheckViewPartControl : UserControl, IUIControl
- {
- #region variables
-
- private SpotCheckProcessor _processor;
- private FilesController _filesController;
- private EditorController _editorController;
- private ProjectsController _projectsController;
- private ApplicationSettings _settings;
- private bool _updatingUi = false;
- private static Random _rnd = new Random();
-
- #endregion
-
- #region init
-
- public SpotCheckViewPartControl()
- {
- InitializeComponent();
- _settings = new ApplicationSettings();
-
- this.Load += SpotCheckViewPartControl_Load;
-
- _processor = new SpotCheckProcessor();
- _filesController = SdlTradosStudio.Application.GetController();
- _editorController = SdlTradosStudio.Application.GetController();
- _projectsController = SdlTradosStudio.Application.GetController();
- }
-
- private void SpotCheckViewPartControl_Load(object sender, EventArgs e)
- {
- string[] args = new string[2];
- _settings.Init(new string[0]); // to get the default settings path - which is Studio, so change it:
- args[0] = "-f";
- args[1] = ChangeName(_settings.SettingsFile, "Studio.Plugins.Spotcheck");
- if (File.Exists(args[1]))
- _settings.Init(args);
- UpdateUiFromSettings();
- // was a requirement, no longer
- // chkSkipLocked.CheckState = CheckState.Indeterminate;
-}
-
- #endregion
-
- #region event handlers
-
- private void cmdAddMarkers_Click(object sender, EventArgs e)
- {
- /* was a requirement, no longer
- if (chkSkipLocked.CheckState == CheckState.Indeterminate)
- {
- MessageBox.Show("Please select how to handle locked segments in the options first.", "Undefined option", MessageBoxButtons.OK, MessageBoxIcon.Information);
- return;
- }
- */
- ClearEditor();
- Note("Processing...");
- UpdateSettingsFromUi();
-
- List translatableFiles = _filesController.SelectedFiles.Where(f => f.Role == FileRole.Translatable).ToList();
- if (translatableFiles.Count == 0)
- Note("No translatable files are selected");
- Shuffle(translatableFiles);
-
- List validFiles = new List();
- List alreadyMarkedFiles = new List();
- bool addedMarkers = false;
-
- int totalSelectedWords = 0;
- int totalSegments = 0;
-
- int totalWords = 0;
- double fraction = 1;
-
-
- if (_settings.LimitByWords)
- {
- foreach (ProjectFile file in translatableFiles)
- // When a file is first opened, need to trigger word count
- if (file.AnalysisStatistics.Total.Words == 0)
- _projectsController.CurrentProject.RunAutomaticTask(new Guid[] { file.Id }, AutomaticTaskTemplateIds.WordCount);
- // for some weird reason, the word count statistics are not updated unless
- // we jump through the hoop of reselecting the files
- translatableFiles = _filesController.SelectedFiles.Where(f => f.Role == FileRole.Translatable).ToList();
- foreach (ProjectFile file in translatableFiles)
- totalWords += file.AnalysisStatistics.Total.Words;
- fraction = (double)totalWords / _settings.TotalWords;
- }
-
- int requestedWords = _settings.TotalWords;
- foreach (ProjectFile file in translatableFiles)
- {
- _processor.Open(file.LocalFilePath);
- if (CommentHandler.ContainsComments(file.LocalFilePath))
- {
- string fileName = Path.GetFileNameWithoutExtension(file.LocalFilePath);
- alreadyMarkedFiles.Add(fileName);
- }
- else
- {
- if (_settings.LimitByWords)
- _settings.TotalWords = (int)(file.AnalysisStatistics.Total.Words / fraction);
- bool addedThisFile = _processor.AddMarkers(_settings);
- totalSegments += _processor.Segments;
- addedMarkers = addedMarkers || addedThisFile;
- if (addedThisFile)
- validFiles.Add(file);
- if (_settings.LimitByWords)
- {
- totalSelectedWords += _processor.Words;
- if (totalSelectedWords > requestedWords)
- {
- _processor.Close();
- break;
- }
- }
- }
- _processor.Close();
- }
- if (_settings.LimitByWords)
- {
- Note($"Selected {totalSelectedWords} words in {totalSegments} segments.");
- }
- else
- {
- Note($"Selected {totalSegments} segments.");
- }
-
- if (alreadyMarkedFiles.Count > 0)
- {
- if (alreadyMarkedFiles.Count == 1)
- Note("This file does already contain markers: " + alreadyMarkedFiles[0]);
- else
- Note("These files do already contain markers: " + string.Join(", ", alreadyMarkedFiles.ToArray()));
- }
-
- if (validFiles.Count > 0)
- {
- if (!addedMarkers)
- {
- Note("No segment could be found that matches the settings.");
- }
- else
- {
- // was a requirement, no longer
- // chkSkipLocked.CheckState = CheckState.Indeterminate;
- _editorController.Open(validFiles, EditingMode.Review);
- }
- }
- else
- {
- ClearNotes();
- }
- // was a requirement, no longer
- // chkSkipLocked.CheckState = CheckState.Indeterminate;
- }
-
- private void cmdRemoveMarkers_Click(object sender, EventArgs e)
- {
- ClearEditor();
- Note("Processing...");
-
- List translatableFiles = _filesController.SelectedFiles.Where(f => f.Role == FileRole.Translatable).ToList();
- if (translatableFiles.Count == 0)
- Note("No translatable files are selected");
-
- List validFiles = new List();
- List invalidFiles = new List();
- foreach (ProjectFile file in translatableFiles)
- {
- _processor.Open(file.LocalFilePath);
- if (!CommentHandler.ContainsComments(file.LocalFilePath))
- {
- string fileName = Path.GetFileNameWithoutExtension(file.LocalFilePath);
- invalidFiles.Add(fileName);
- }
- else
- {
- _processor.RemoveMarkers(_settings);
- validFiles.Add(file);
- }
- _processor.Close();
- }
- if (invalidFiles.Count > 0)
- {
- if (invalidFiles.Count == 1)
- Note("This file does not contain markers: " + invalidFiles[0]);
- else
- Note("These files do not contain markers: " + string.Join(", ", invalidFiles.ToArray()));
- }
- if (validFiles.Count > 0)
- {
- Note("");
- _editorController.Open(validFiles, EditingMode.Review);
- }
- else
- {
- ClearNotes();
- }
- }
-
-
- #endregion
-
- #region save settings on change
-
- private void numPercentage_ValueChanged(object sender, EventArgs e)
- {
- SaveSettings();
- }
-
- private void numMinWords_ValueChanged(object sender, EventArgs e)
- {
- SaveSettings();
- }
-
- private void numMaxWords_ValueChanged(object sender, EventArgs e)
- {
- SaveSettings();
- }
-
- private void chkSkipLocked_CheckStateChanged(object sender, EventArgs e)
- {
- SaveSettings();
- }
-
- private void chkSkip100_CheckStateChanged(object sender, EventArgs e)
- {
- SaveSettings();
- }
-
- private void chkSkipCm_CheckStateChanged(object sender, EventArgs e)
- {
- SaveSettings();
- }
- private void chkLimitByWords_CheckedChanged(object sender, EventArgs e)
- {
- lblWordLimit.Enabled = numTotalWords.Enabled = chkLimitByWords.Checked;
- lblSegmentLimit.Enabled = numPercentage.Enabled = !chkLimitByWords.Checked;
- SaveSettings();
- }
- private void chkSkipRepetition_CheckedChanged(object sender, EventArgs e)
- {
- SaveSettings();
- }
-
- private void numTotalWords_ValueChanged(object sender, EventArgs e)
- {
- SaveSettings();
- }
-
- private void SaveSettings()
- {
- UpdateSettingsFromUi();
- _settings.Save(ChangeName(_settings.SettingsFile, "Studio.Plugins.Spotcheck"));
- }
-
- #endregion
-
- #region helpers
-
- private void ClearEditor()
- {
- // need to close documents to ensure the modified ones are reloaded
- var allDocs = new List(_editorController.GetDocuments());
- foreach (var doc in allDocs)
- {
- _editorController.Save(doc);
- _editorController.Close(doc);
- }
- }
-
- private void UpdateSettingsFromUi()
- {
- if (_settings == null || _updatingUi) return; //during initialisation
-
- _settings.MinWords = (int)numMinWords.Value;
- _settings.MaxWords = (int)numMaxWords.Value;
- _settings.Percentage = (int)numPercentage.Value;
- _settings.SkipLocked = chkSkipLocked.Checked;
- _settings.SkipCm = chkSkipCm.Checked;
- _settings.SkipRepetition = chkSkipRepetition.Checked;
- _settings.Skip100 = chkSkip100.Checked;
- _settings.LimitByWords = chkLimitByWords.Checked;
- _settings.TotalWords = (int)numTotalWords.Value;
- }
-
- private void UpdateUiFromSettings()
- {
- if (_settings == null) return; //during initialisation
-
- _updatingUi = true;
-
- numMinWords.Value = _settings.MinWords;
- numMaxWords.Value = _settings.MaxWords;
- numPercentage.Value = _settings.Percentage;
- numTotalWords.Value = _settings.TotalWords;
-
- chkSkipCm.Checked = _settings.SkipCm;
- chkSkipRepetition.Checked = _settings.SkipRepetition;
- chkSkip100.Checked = _settings.Skip100;
- chkSkipLocked.Checked = _settings.SkipLocked;
- chkLimitByWords.Checked = _settings.LimitByWords;
-
- _updatingUi = false;
- }
-
- private string ChangeName(string path, string newName)
- {
- string folder = Path.GetDirectoryName(path);
- string extension = Path.GetExtension(path);
- string newPath = Path.Combine(folder, newName + extension);
- return newPath;
- }
-
- private void Note(string text)
- {
- lblNotes.Text = text;
- lblNotes.Refresh();
- }
-
- private void ClearNotes()
- {
- TimerCallback tc = timerCallback;
- System.Threading.Timer t = new System.Threading.Timer(tc, lblNotes, 5000, System.Threading.Timeout.Infinite);
- }
-
- void timerCallback(object info)
- {
- Note("");
- }
-
- public static void Shuffle(List list)
- {
- int n = list.Count;
- while (n > 1)
- {
- n--;
- int k = _rnd.Next(n + 1);
- ProjectFile value = list[k];
- list[k] = list[n];
- list[n] = value;
- }
- }
- #endregion
-
- }
-}
diff --git a/SpotCheck/SpotcheckViewPartControl.resx b/SpotCheck/SpotcheckViewPartControl.resx
deleted file mode 100644
index 337117761d..0000000000
--- a/SpotCheck/SpotcheckViewPartControl.resx
+++ /dev/null
@@ -1,233 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- text/microsoft-resx
-
-
- 2.0
-
-
- System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
-
-
- 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
- AsDK4XjjaQAAAABJRU5ErkJggg==
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vgAADr4B6kKxwAAABUVJREFUWEftlmlMVGcUhm9/9V+TWmlMo0ljg2nT2MRWjIlpupnGJrXQGJpqrJQu
- QitBWTMVKaNVpohaWQoyAgMjewdKXAA1yJKigizCFJBlVAqORAHRIkUovP3OufcOd5ChaY2kP3qSNx83
- M/c+73nv+T5G+r/+85WffxBFRYdhMn3nkNG4F8rHj7cIZrOVAVN2AANi7cTwcAPs9ipcaStGY30eqquP
- 4lRJHIosBuRl70WGKRxHjdNSHvXvigzgT6uAj7gQmRLmWJ2KmoDxKgzeKkZPdzbarUdRVxOPirMxOFkc
- BUtuBHJMYUhN9mOzCmr2Ol2WIj9chWnBjlUx4WRGlcaUYgyT5UIlrJhtT7o2YDRG4UZf6TREyHa1Bcdy
- slBRWYbjJ4vQ2lqDvr5m3B3uEIDrQgSlVZVigFLUauwMhjpCEfaR5NqA2awXNwvXs3Zmx9gfV9nA+Qul
- rNT0I0hMOgxLYSb/nZuXjsbGU7jWXYGpBw0OYeIiMFqAiszVc8ffVJ8mQNSBCp2lM5dq4iGtPZ/Bu+Z4
- 8QHuGqPHZY2bcdjvCdcGaHr5Bg14bPSK8rcGpEZKXTGgAFP3zWI8jPIqrlkCqP3sblcgIrzniJ8mVh4c
- GTRyr5mjpYhJFG9ubjLOlf+IDmuCDJgoVIZLDBkNmyoypoq6FwYq01e4NpCaEoDhgTznodFKdDtgN+Om
- LYH3PR1KGZk/IGZ/FL7VfwPaORR9V2u2DCRTSvTjd0xsYM74f/5Jx108NDjK8DiiVTvkbaVIQAZuFPA7
- J3MGQzifAY5XcS8Od9v85+heHA49HUnygxUoDVN/rzw4cswKTBurkxQYfVeIDJPU7mvzNyAhzMUOyDIF
- yDer3QnRbvAP2IQdoV9zzPGJej7hbl7PmQYKc+qAUZekiaFEeR2IBX6P5Wt6tcFLFuDAMxIMryx52ERr
- Q7T8UE13/GDl5KLr3s50Pk4N+/wQErYZPr6io7ivUFGqg826RwaOCRMCymBxTXC6TxcZiaFLF9DuuQr2
- z7ycTaQl+codcFeKHNdKrGqHBNBopD8GxQU7QAl+vtUbH2/6EIGBGzF1J9oBj9q9Rxxqcl1u/hWdXiuQ
- 9JxmFuqqIpQBk4FdLft5gHgmCEwwJV6naJXVofv7WAwXn9Fu0e94A+UlJxzwtGwLao+Z4CMpBtKPfMJO
- ZQNypzQ0FK1Otxm7Ij5lUcy9HeI/pBYoRDBVk7f1LIa370d85GI0n3mTD5+E6BCG19Q1cSIMp6o+HcJd
- aad1ZtQUM32PDFG8FHOsYQsungtmIIYjWZO3dvK1DF/I8BH7Toz2bEDP+beQmpLqDE845C1PrAolia6o
- A7UrbZdqxPRQe1sYmwja7g3PDet5JZMddbud4PdsXhhsX4+Lhe7Q+a+chlOZ97wMq+VV9FW9j4kefzlW
- 6loDVWPl7lTdFJ0LYVDWg98CcbkqiH9saOEEVuF7gxY6w7VlDJCQ9KWErEAJlYfc0FOyBpPdvnLXarQK
- lGCTvdtYZJo03qtDX/Ouh+D9Lev+Hj5bxW2RQCJDl5KX4k7VWjZE3bKRGfBrjeKQ0sAJTKrMef6fw2er
- aPHrJW6jhJytEs7on2VT1wpexO2zr8NatN4J3te4lkXw2HA3xAaseXQDMys5REL2vqeRddADNEcz4Wcz
- FzNc+frjqy/WuaFQ/xIaT7yHG00f8FYj+PehCx4/nGq75yJUmt/GL7kr+YdGeerS+YNThfh4oN6yGnm7
- lyEreBEOhr4wf/Dly1+Dr992bHx3KehV+Lzz1PzBqVZ6rIK7+7JHgErSX4+Fn3Kr8x/HAAAAAElFTkSu
- QmCC
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vgAADr4B6kKxwAAABQNJREFUWEftVVtPVFcYPX3qH2ib9LVp+9D2obEvTZomTdO+aW3jpZZixFovCBJA
- EAigiOIoWkWljMOUGe4gUkQLQkC5KagUMDpymQoqFShBkBmqgAisft93LuKEM03TNvHBnazsc8KevS57
- nY3yYjz34+TJH1BWlgancy+yspKNWfvz/zuYrK+vGpgfIAwDc3fg8bRjaKgRPT1n0NFWjKYmOyrPHUVZ
- qQXFBXvhyIpDpm2HwGGP+ndC2SnmXAAmF8EEYUwVxgJxi9Z209yG+ZkmjI2Uo7+3AN0uO1qbj6Gh1oKK
- 8l0oLYpHUW40HLYQ5Doj/AusqbFpmzOZL4hch4jQwWlpoMRElJhoo7mZcIFQRe9ncWDry+YCMjN3YXCA
- FvKmGlHf7RvIK8xHfUM1zlaU4ebNyxgYuA6vx02bEplBqkFPRReh4/F5PHBHIXq1Yi4gNydJXWzicHrq
- Nrq6LqLlcpXgJ8cJpGekofTnHHkuKnago6MSd3rrMTvVAcxQAoT5mSskoAj1OR/6j/9au1N1sDBWX3c6
- 5OwXPrehp/M0rrZkIy/Pgl/KDwFTVOapCqpPOQnIQVqwH/fcYI5pIen0ZM/ixJSSuGKCRyWYf5QPPHSo
- IKcGjL/Z4XWHIWGVHwF1tQfFhUrejYcT1yVajpjB8RYVWVF34Ue4XcfFEZ6U0lrqDJWMvwIGHtcTyIi4
- 1xKYzkKDY4m5gEzrNnjuF4uzxdGM0aFcDPaly3dvs6UgO+cI9u/fjZ1Jcag6d0Kiv9VZoBLOVKqxEySB
- SSvSNr5k7v70qVgiYSdEphXHKI8eI83sTlzKZ6WBCEcHS+TMWZzFskPuAFnPv53IgLdri7n7rIyN6Hdn
- aBFeEXCZhu+dXRAzEXGsRrRasXzBa+nsWbDRi6mjuGh7H7FfmAjId4aqPzLOrx7XWu3YEhqA8KitSD2Y
- iGPpSXLD/XG3UCWSNKhkUjy7uMSf5NqbJpj3HjTAAo4F+SlfZ/s+dVPdHT/zxnwkfJbktv83h1ynlpTN
- 2B4diHXrV+D40WA0VMeiz5WM6fupQmQQj6eooGfvze/M3WdZg6ShEqkeK79rLvVPSNwxiETHw+EDKC8J
- Bye4YdMqrAn4CmFh3zwlJ2AyVeKPWmoioLUxnpzTOWuEt26kSoG4E9xcITOJloGJ/UJiwJusko/uFPB7
- 2rd+3M+Mpz9tODmdGXdKtLGxgUiIDxJcqIzBPfeeZ8n4mWC41QgFIzEGPB1rEPG5iYDG6gjazGrELEVi
- pz4xN9VGiyCOl2M+YAnClbpI1eEYJTiRIPPc8HYDswPbgJFwtKS/u7iA44dXi3sRoDX4mXjZlTaL20c0
- E6aG4jHUFY1D+wIRGb4Sy1csQ9i2lag7swEjXSGY+z3YAAvICDC5fJx73oGrdAkGGpfKYjlPciyzHu0i
- seoOMRYpYKcd59fDduRr1JYGAoPfY/buBoHn6nLEmcWvD3uoAutmBXlhChoOv4r+cx9hrne9WiYt4oWx
- 6mDRTCJOiZTBz5M96/Ckd628Xzr0FsI++RsBvoMby5cGC/rV+gbGGz9TN2THFCmT+GKk8Uu4c99Dc6IC
- l/0DIX/QvAyJn/5D8sXGPrq/WVThJgU1Sa+JqLslb2O08k0Mn3oF/Q4Fg8Uq+pwKWpMV1O1+XcgjPv4P
- BPiOE1EKsnepOJmiojhJQU6MgowQBXvXKv7/578YL8bzMRTlL+zjLbmdr27dAAAAAElFTkSuQmCC
-
-
-
\ No newline at end of file
diff --git a/SpotCheck/doc/SpotCheck Studio Plugin.docx b/SpotCheck/doc/SpotCheck Studio Plugin.docx
deleted file mode 100644
index 7f263433b0..0000000000
Binary files a/SpotCheck/doc/SpotCheck Studio Plugin.docx and /dev/null differ
diff --git a/SpotCheck/doc/comments.png b/SpotCheck/doc/comments.png
deleted file mode 100644
index 31a23f66ce..0000000000
Binary files a/SpotCheck/doc/comments.png and /dev/null differ
diff --git a/SpotCheck/doc/plugin.png b/SpotCheck/doc/plugin.png
deleted file mode 100644
index 94a2300c45..0000000000
Binary files a/SpotCheck/doc/plugin.png and /dev/null differ
diff --git a/SpotCheck/doc/search.png b/SpotCheck/doc/search.png
deleted file mode 100644
index 3f09255a42..0000000000
Binary files a/SpotCheck/doc/search.png and /dev/null differ
diff --git a/SpotCheck/doc/segments.png b/SpotCheck/doc/segments.png
deleted file mode 100644
index be6217732b..0000000000
Binary files a/SpotCheck/doc/segments.png and /dev/null differ
diff --git a/SpotCheck/doc/selectcomments.png b/SpotCheck/doc/selectcomments.png
deleted file mode 100644
index cff78572d3..0000000000
Binary files a/SpotCheck/doc/selectcomments.png and /dev/null differ
diff --git a/SpotCheck/doc/tooltip.png b/SpotCheck/doc/tooltip.png
deleted file mode 100644
index eee9480c15..0000000000
Binary files a/SpotCheck/doc/tooltip.png and /dev/null differ
diff --git a/SpotCheck/doc/view.png b/SpotCheck/doc/view.png
deleted file mode 100644
index 4f94171ce4..0000000000
Binary files a/SpotCheck/doc/view.png and /dev/null differ
diff --git a/SpotCheck/images/note.ico b/SpotCheck/images/note.ico
deleted file mode 100644
index 72b47c9b3e..0000000000
Binary files a/SpotCheck/images/note.ico and /dev/null differ
diff --git a/SpotCheck/images/note_edit.ico b/SpotCheck/images/note_edit.ico
deleted file mode 100644
index a0ba2f68eb..0000000000
Binary files a/SpotCheck/images/note_edit.ico and /dev/null differ
diff --git a/SpotCheck/images/preferences-old.ico b/SpotCheck/images/preferences-old.ico
deleted file mode 100644
index b8d676af8a..0000000000
Binary files a/SpotCheck/images/preferences-old.ico and /dev/null differ
diff --git a/SpotCheck/images/preferences.ico b/SpotCheck/images/preferences.ico
deleted file mode 100644
index 679c595d71..0000000000
Binary files a/SpotCheck/images/preferences.ico and /dev/null differ
diff --git a/SpotCheck/images/registry.ico b/SpotCheck/images/registry.ico
deleted file mode 100644
index 2c9f4b8b2c..0000000000
Binary files a/SpotCheck/images/registry.ico and /dev/null differ
diff --git a/SpotCheck/images/spotcheck.ico b/SpotCheck/images/spotcheck.ico
deleted file mode 100644
index 5bee33bd4a..0000000000
Binary files a/SpotCheck/images/spotcheck.ico and /dev/null differ
diff --git a/SpotCheck/pluginpackage.manifest.xml b/SpotCheck/pluginpackage.manifest.xml
deleted file mode 100644
index cbe8ca67a8..0000000000
--- a/SpotCheck/pluginpackage.manifest.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- SpotCheck
- 3.0.2.0
- This plugin will carry out a QA check against a prescribed number of words. It's used as part of the Quality Evaluation Services (QES) requirement for SDL Language Services.
- SDL Community Developers
-
-
\ No newline at end of file
diff --git a/SpotCheck/samples.snk b/SpotCheck/samples.snk
deleted file mode 100644
index 57177a3896..0000000000
Binary files a/SpotCheck/samples.snk and /dev/null differ
diff --git a/SpotCheck/spotcheck.ico b/SpotCheck/spotcheck.ico
deleted file mode 100644
index 5bee33bd4a..0000000000
Binary files a/SpotCheck/spotcheck.ico and /dev/null differ
diff --git a/Studio Migration Utility/.nuget/packages.config b/Studio Migration Utility/.nuget/packages.config
deleted file mode 100644
index 2dff3f2f49..0000000000
--- a/Studio Migration Utility/.nuget/packages.config
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/Studio Migration Utility/README.md b/Studio Migration Utility/README.md
deleted file mode 100644
index d310215b65..0000000000
--- a/Studio Migration Utility/README.md
+++ /dev/null
@@ -1,6 +0,0 @@
-# Studio Migration Utility
-
-This application will migrate the projects from a source Studio version to a destination Studio version. Also you can opt to move the projects in the destionation Studio version default project location. Besides project migration you can also populate destination Studio version transalation memory navigation.
-
-
-
diff --git a/Studio Migration Utility/Sdl.Community.Controls/AssemblyInfo.cs b/Studio Migration Utility/Sdl.Community.Controls/AssemblyInfo.cs
deleted file mode 100644
index 62feac7e65..0000000000
--- a/Studio Migration Utility/Sdl.Community.Controls/AssemblyInfo.cs
+++ /dev/null
@@ -1,33 +0,0 @@
-#region Copyright �2005, Cristi Potlog - All Rights Reserved
-/* ------------------------------------------------------------------- *
-* Cristi Potlog *
-* Copyright �2005 - All Rights reserved *
-* *
-* THIS SOURCE CODE IS PROVIDED "AS IS" WITH NO WARRANTIES OF ANY KIND, *
-* EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE *
-* WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR *
-* PURPOSE, NONINFRINGEMENT, OR ARISING FROM A COURSE OF DEALING, *
-* USAGE OR TRADE PRACTICE. *
-* *
-* THIS COPYRIGHT NOTICE MAY NOT BE REMOVED FROM THIS FILE. *
-* ------------------------------------------------------------------- */
-#endregion Copyright �2005, Cristi Potlog - All Rights Reserved
-
-#region References
-using System.Reflection;
-using System.Runtime.CompilerServices;
-#endregion
-
-[assembly: AssemblyTitle("Sdl.Community.Controls")]
-[assembly: AssemblyDescription("A Custom Controls Library for .NET")]
-[assembly: AssemblyProduct("Cristi Potlog's Controls for .NET")]
-[assembly: AssemblyCompany("SDL Limited as part of the RWS Holdings Plc group of companies")]
-[assembly: AssemblyCopyright("Copyright © 2011 - 2022 SDL Limited as part of the RWS Holdings Plc group of companies (\"RWS Group\").")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-[assembly: AssemblyDelaySign(false)]
-[assembly: AssemblyKeyFile("")]
-[assembly: AssemblyKeyName("")]
-[assembly: AssemblyVersion("0.10.0.0")]
-[assembly: AssemblyFileVersion("0.10.0.0")]
-
diff --git a/Studio Migration Utility/Sdl.Community.Controls/Sdl.Community.Controls.csproj b/Studio Migration Utility/Sdl.Community.Controls/Sdl.Community.Controls.csproj
deleted file mode 100644
index 284bdc995e..0000000000
--- a/Studio Migration Utility/Sdl.Community.Controls/Sdl.Community.Controls.csproj
+++ /dev/null
@@ -1,124 +0,0 @@
-
-
-
- Local
- 7.10.3077
- 2.0
- {870C7D59-F59B-44D1-961E-C4341DAA5306}
- Debug
- AnyCPU
-
-
- Sdl.Community.Controls
- SdlCommunity.snk
- JScript
- Grid
- IE50
- false
- Library
- Sdl.Community.Controls
- OnBuildSuccess
-
-
-
- v4.8
-
-
- 0.0
-
- $(AppData)\Trados\Trados Studio\18\Plugins
-
-
- bin/Debug
- false
- 285212672
- false
-
- DEBUG;TRACE
-
- true
- 4096
- false
-
- false
- false
- false
- false
- 0
- full
- prompt
- false
-
-
- bin/Debug
- false
- 285212672
- false
-
- TRACE
-
- false
- 4096
- false
-
- true
- false
- false
- false
- 4
- none
- prompt
- false
-
-
- true
-
-
-
- System
-
-
- System.Data
-
-
- System.Design
-
-
- System.Drawing
-
-
- System.Windows.Forms
-
-
- System.XML
-
-
-
-
- Code
-
-
- UserControl
-
-
- Component
-
-
- Code
-
-
- Wizard.cs
-
-
- WizardPage.cs
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Studio Migration Utility/Sdl.Community.Controls/SdlCommunity.snk b/Studio Migration Utility/Sdl.Community.Controls/SdlCommunity.snk
deleted file mode 100644
index 016e165831..0000000000
Binary files a/Studio Migration Utility/Sdl.Community.Controls/SdlCommunity.snk and /dev/null differ
diff --git a/Studio Migration Utility/Sdl.Community.Controls/Wizard.cs b/Studio Migration Utility/Sdl.Community.Controls/Wizard.cs
deleted file mode 100644
index 6064ffc007..0000000000
--- a/Studio Migration Utility/Sdl.Community.Controls/Wizard.cs
+++ /dev/null
@@ -1,1191 +0,0 @@
-#region Copyright ©2005, Cristi Potlog - All Rights Reserved
-/* ------------------------------------------------------------------- *
-* Cristi Potlog *
-* Copyright ©2005 - All Rights reserved *
-* *
-* THIS SOURCE CODE IS PROVIDED "AS IS" WITH NO WARRANTIES OF ANY KIND, *
-* EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE *
-* WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR *
-* PURPOSE, NONINFRINGEMENT, OR ARISING FROM A COURSE OF DEALING, *
-* USAGE OR TRADE PRACTICE. *
-* *
-* THIS COPYRIGHT NOTICE MAY NOT BE REMOVED FROM THIS FILE. *
-* ------------------------------------------------------------------- */
-#endregion Copyright ©2005, Cristi Potlog - All Rights Reserved
-
-#region References
-using System;
-using System.Collections;
-using System.ComponentModel;
-using System.Drawing;
-using System.Data;
-using System.Windows.Forms;
-using System.Windows.Forms.Design;
-using System.ComponentModel.Design;
-using Sdl.Community.Controls;
-
-#endregion
-
-namespace CristiPotlog.Controls
-{
- ///
- /// Represents an extentable wizard control with basic page navigation functionality.
- ///
- [Designer(typeof(Wizard.WizardDesigner))]
- public class Wizard : System.Windows.Forms.UserControl
- {
-
- #region Consts
- private const int FOOTER_AREA_HEIGHT = 48;
- private readonly Point offsetCancel = new Point(84, 36);
- private readonly Point offsetNext = new Point(168, 36);
- private readonly Point offsetBack = new Point(244, 36);
- #endregion
-
- #region Fields
- private WizardPage selectedPage = null;
- private WizardPagesCollection pages = null;
- private Image headerImage = null;
- private Image welcomeImage = null;
- private Font headerFont = null;
- private Font headerTitleFont = null;
- private Font welcomeFont = null;
- private Font welcomeTitleFont = null;
- #endregion
-
- #region Designer generated code
- private System.Windows.Forms.Button buttonCancel;
- private System.Windows.Forms.Button buttonNext;
- private System.Windows.Forms.Button buttonBack;
- private System.Windows.Forms.Button buttonHelp;
- ///
- /// Required designer variable.
- ///
- private System.ComponentModel.Container components = null;
- #endregion
-
- #region Constructor&Dispose
- ///
- /// Creates a new instance of the class.
- ///
- public Wizard()
- {
- // call required by designer
- this.InitializeComponent();
-
- // reset control style to improove rendering (reduce flicker)
- base.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
- base.SetStyle(ControlStyles.DoubleBuffer, true);
- base.SetStyle(ControlStyles.ResizeRedraw, true);
- base.SetStyle(ControlStyles.UserPaint, true);
-
- // reset dock style
- base.Dock = DockStyle.Fill;
-
- // init pages collection
- this.pages = new WizardPagesCollection(this);
- }
-
- ///
- /// Clean up any resources being used.
- ///
- protected override void Dispose(bool disposing)
- {
- if (disposing)
- {
- if (this.components != null)
- {
- this.components.Dispose();
- }
- }
- base.Dispose(disposing);
- }
-
- #endregion
-
- #region Designer generated code
- ///
- /// Required method for Designer support - do not modify
- /// the contents of this method with the code editor.
- ///
- private void InitializeComponent()
- {
- this.buttonCancel = new System.Windows.Forms.Button();
- this.buttonNext = new System.Windows.Forms.Button();
- this.buttonBack = new System.Windows.Forms.Button();
- this.buttonHelp = new System.Windows.Forms.Button();
- this.SuspendLayout();
- //
- // buttonCancel
- //
- this.buttonCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
- this.buttonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
- this.buttonCancel.FlatStyle = System.Windows.Forms.FlatStyle.System;
- this.buttonCancel.Location = new System.Drawing.Point(344, 224);
- this.buttonCancel.Name = "buttonCancel";
- this.buttonCancel.TabIndex = 8;
- this.buttonCancel.Text = "Cancel";
- this.buttonCancel.Click += new System.EventHandler(this.buttonCancel_Click);
- //
- // buttonNext
- //
- this.buttonNext.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
- this.buttonNext.FlatStyle = System.Windows.Forms.FlatStyle.System;
- this.buttonNext.Location = new System.Drawing.Point(260, 224);
- this.buttonNext.Name = "buttonNext";
- this.buttonNext.TabIndex = 7;
- this.buttonNext.Text = "&Next >";
- this.buttonNext.Click += new System.EventHandler(this.buttonNext_Click);
- //
- // buttonBack
- //
- this.buttonBack.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
- this.buttonBack.FlatStyle = System.Windows.Forms.FlatStyle.System;
- this.buttonBack.Location = new System.Drawing.Point(184, 224);
- this.buttonBack.Name = "buttonBack";
- this.buttonBack.TabIndex = 6;
- this.buttonBack.Text = "< &Back";
- this.buttonBack.Click += new System.EventHandler(this.buttonBack_Click);
- //
- // buttonHelp
- //
- this.buttonHelp.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
- this.buttonHelp.FlatStyle = System.Windows.Forms.FlatStyle.System;
- this.buttonHelp.Location = new System.Drawing.Point(8, 224);
- this.buttonHelp.Name = "buttonHelp";
- this.buttonHelp.TabIndex = 9;
- this.buttonHelp.Text = "&Help";
- this.buttonHelp.Visible = false;
- this.buttonHelp.Click += new System.EventHandler(this.buttonHelp_Click);
- //
- // Wizard
- //
- this.Controls.Add(this.buttonHelp);
- this.Controls.Add(this.buttonCancel);
- this.Controls.Add(this.buttonNext);
- this.Controls.Add(this.buttonBack);
- this.Name = "Wizard";
- this.Size = new System.Drawing.Size(428, 256);
- this.ResumeLayout(false);
-
- }
- #endregion
-
- #region Properties
- ///
- /// Gets or sets which edge of the parent container a control is docked to.
- ///
- [DefaultValue(DockStyle.Fill)]
- [Category("Layout")]
- [Description("Gets or sets which edge of the parent container a control is docked to.")]
- public new DockStyle Dock
- {
- get
- {
- return base.Dock;
- }
- set
- {
- base.Dock = value;
- }
- }
-
- ///
- /// Gets the collection of wizard pages in this tab control.
- ///
- [Category("Wizard")]
- [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
- [Description("Gets the collection of wizard pages in this tab control.")]
- public WizardPagesCollection Pages
- {
- get
- {
- return this.pages;
- }
- }
-
- ///
- /// Gets or sets the currently-selected wizard page.
- ///
- [Browsable(false)]
- [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
- public WizardPage SelectedPage
- {
- get
- {
- return this.selectedPage;
- }
- set
- {
- // select new page
- this.ActivatePage(value);
- }
- }
-
- ///
- /// Gets or sets the currently-selected wizard page by index.
- ///
- [Browsable(false)]
- [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
- internal int SelectedIndex
- {
- get
- {
- return this.pages.IndexOf(this.selectedPage);
- }
- set
- {
- // check if there are any pages
- if(this.pages.Count == 0)
- {
- // reset invalid index
- this.ActivatePage(-1);
- return;
- }
-
- // validate page index
- if (value < -1 || value >= this.pages.Count)
- {
- throw new ArgumentOutOfRangeException("SelectedIndex",
- value,
- "The page index must be between 0 and " + Convert.ToString(this.pages.Count - 1));
- }
-
- // select new page
- this.ActivatePage(value);
- }
- }
-
- ///
- /// Gets or sets the image displayed on the header of the standard pages.
- ///
- [DefaultValue(null)]
- [Category("Wizard")]
- [Description("Gets or sets the image displayed on the header of the standard pages.")]
- public Image HeaderImage
- {
- get
- {
- return this.headerImage;
- }
- set
- {
- if (this.headerImage != value)
- {
- this.headerImage = value;
- this.Invalidate();
- }
- }
- }
-
- ///
- /// Gets or sets the image displayed on the welcome and finish pages.
- ///
- [DefaultValue(null)]
- [Category("Wizard")]
- [Description("Gets or sets the image displayed on the welcome and finish pages.")]
- public Image WelcomeImage
- {
- get
- {
- return this.welcomeImage;
- }
- set
- {
- if (this.welcomeImage != value)
- {
- this.welcomeImage = value;
- this.Invalidate();
- }
- }
- }
-
- ///
- /// Gets or sets the font used to display the description of a standard page.
- ///
- [Category("Appearance")]
- [Description("Gets or sets the font used to display the description of a standard page.")]
- public Font HeaderFont
- {
- get
- {
- if (this.headerFont == null)
- {
- return this.Font;
- }
- else
- {
- return this.headerFont;
- }
- }
- set
- {
- if (this.headerFont != value)
- {
- this.headerFont = value;
- this.Invalidate();
- }
- }
- }
- protected bool ShouldSerializeHeaderFont()
- {
- return this.headerFont != null;
- }
-
- ///
- /// Gets or sets the font used to display the title of a standard page.
- ///
- [Category("Appearance")]
- [Description("Gets or sets the font used to display the title of a standard page.")]
- public Font HeaderTitleFont
- {
- get
- {
- if (this.headerTitleFont == null)
- {
- return new Font(this.Font.FontFamily, this.Font.Size + 2, FontStyle.Bold);
- }
- else
- {
- return this.headerTitleFont;
- }
- }
- set
- {
- if (this.headerTitleFont != value)
- {
- this.headerTitleFont = value;
- this.Invalidate();
- }
- }
- }
- protected bool ShouldSerializeHeaderTitleFont()
- {
- return this.headerTitleFont != null;
- }
-
- ///
- /// Gets or sets the font used to display the description of a welcome of finish page.
- ///
- [Category("Appearance")]
- [Description("Gets or sets the font used to display the description of a welcome of finish page.")]
- public Font WelcomeFont
- {
- get
- {
- if (this.welcomeFont == null)
- {
- return this.Font;
- }
- else
- {
- return this.welcomeFont;
- }
- }
- set
- {
- if (this.welcomeFont != value)
- {
- this.welcomeFont = value;
- this.Invalidate();
- }
- }
- }
- protected bool ShouldSerializeWelcomeFont()
- {
- return this.welcomeFont != null;
- }
-
- ///
- /// Gets or sets the font used to display the title of a welcome of finish page.
- ///
- [Category("Appearance")]
- [Description("Gets or sets the font used to display the title of a welcome of finish page.")]
- public Font WelcomeTitleFont
- {
- get
- {
- if (this.welcomeTitleFont == null)
- {
- return new Font(this.Font.FontFamily, this.Font.Size + 10, FontStyle.Bold);
- }
- else
- {
- return this.welcomeTitleFont;
- }
- }
- set
- {
- if (this.welcomeTitleFont != value)
- {
- this.welcomeTitleFont = value;
- this.Invalidate();
- }
- }
- }
- protected bool ShouldSerializeWelcomeTitleFont()
- {
- return this.welcomeTitleFont != null;
- }
-
- ///
- /// Gets or sets the enabled state of the Next button.
- ///
- [Browsable(false)]
- [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
- public bool NextEnabled
- {
- get
- {
- return this.buttonNext.Enabled;
- }
- set
- {
- this.buttonNext.Enabled = value;
- }
- }
-
- ///
- /// Gets or sets the enabled state of the back button.
- ///
- [Browsable(false)]
- [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
- public bool BackEnabled
- {
- get
- {
- return this.buttonBack.Enabled;
- }
- set
- {
- this.buttonBack.Enabled = value;
- }
- }
-
- ///
- /// Gets or sets the enabled state of the cancel button.
- ///
- [Browsable(false)]
- [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
- public bool CancelEnabled
- {
- get
- {
- return this.buttonCancel.Enabled;
- }
- set
- {
-
- this.buttonCancel.Enabled = value;
- }
- }
-
- ///
- /// Gets or sets the visible state of the help button.
- ///
- [Category("Behavior")]
- [DefaultValue(false)]
- [Description("Gets or sets the visible state of the help button. ")]
- public bool HelpVisible
- {
- get
- {
- return this.buttonHelp.Visible;
- }
- set
- {
-
- this.buttonHelp.Visible = value;
- }
- }
-
- ///
- /// Gets or sets the text displayed by the Next button.
- ///
- [Browsable(false)]
- [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
- public string NextText
- {
- get
- {
- return this.buttonNext.Text;
- }
- set
- {
- this.buttonNext.Text = value;
- }
- }
-
- ///
- /// Gets or sets the text displayed by the back button.
- ///
- [Browsable(false)]
- [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
- public string BackText
- {
- get
- {
- return this.buttonBack.Text;
- }
- set
- {
- this.buttonBack.Text = value;
- }
- }
-
- ///
- /// Gets or sets the text displayed by the cancel button.
- ///
- [Browsable(false)]
- [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
- public string CancelText
- {
- get
- {
- return this.buttonCancel.Text;
- }
- set
- {
-
- this.buttonCancel.Text = value;
- }
- }
-
- ///
- /// Gets or sets the text displayed by the cancel button.
- ///
- [Browsable(false)]
- [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
- public string HelpText
- {
- get
- {
- return this.buttonHelp.Text;
- }
- set
- {
-
- this.buttonHelp.Text = value;
- }
- }
-
- #endregion
-
- #region Methods
- ///
- /// Swithes forward to next wizard page.
- ///
- public void Next()
- {
- // check if we're on the last page (finish)
- if (this.SelectedIndex == this.pages.Count - 1)
- {
- this.buttonNext.Enabled = false;
- }
- else
- {
- // handle page switch
- this.OnBeforeSwitchPages(new BeforeSwitchPagesEventArgs(this.SelectedIndex, this.SelectedIndex + 1));
- }
- }
-
- ///
- /// Swithes backward to previous wizard page.
- ///
- public void Back()
- {
- if (this.SelectedIndex == 0)
- {
- this.buttonBack.Enabled = false;
- }
- else
- {
- // handle page switch
- this.OnBeforeSwitchPages(new BeforeSwitchPagesEventArgs(this.SelectedIndex, this.SelectedIndex - 1));
- }
- }
-
- ///
- /// Activates the specified wizard bage.
- ///
- /// An Integer value representing the zero-based index of the page to be activated.
- private void ActivatePage(int index)
- {
- // check if new page is invalid
- if (index < 0 || index >= this.pages.Count)
- {
- // filter out
- return;
- }
-
- // get new page
- WizardPage page = (WizardPage)this.pages[index];
-
- // activate page
- this.ActivatePage(page);
- }
-
- ///
- /// Activates the specified wizard bage.
- ///
- /// A WizardPage object representing the page to be activated.
- private void ActivatePage(WizardPage page)
- {
- // validate given page
- if (this.pages.Contains(page) == false)
- {
- // filter out
- return;
- }
-
- // deactivate current page
- if (this.selectedPage != null)
- {
- this.selectedPage.Visible = false;
- }
-
- // activate new page
- this.selectedPage = page;
-
- if (this.selectedPage != null)
- {
- //Ensure that this panel displays inside the wizard
- this.selectedPage.Parent = this;
- if (this.Contains(this.selectedPage) == false)
- {
- this.Container.Add(this.selectedPage);
- }
- if (this.selectedPage.Style == WizardPageStyle.Finish)
- {
- this.buttonCancel.Text = "OK";
- this.buttonCancel.DialogResult = DialogResult.OK;
- }
- else
- {
- this.buttonCancel.Text = "Cancel";
- this.buttonCancel.DialogResult = DialogResult.Cancel;
- }
-
- //Make it fill the space
- this.selectedPage.SetBounds(0, 0, this.Width, this.Height - FOOTER_AREA_HEIGHT);
- this.selectedPage.Visible = true;
- this.selectedPage.BringToFront();
- this.FocusFirstTabIndex(this.selectedPage);
- }
-
- //What should the back button say
- if (this.SelectedIndex > 0)
- {
- buttonBack.Enabled = true;
- }
- else
- {
- buttonBack.Enabled = false;
- }
-
- //What should the Next button say
- if (this.SelectedIndex < this.pages.Count - 1)
- {
- this.buttonNext.Enabled = true;
- }
- else
- {
- if (this.DesignMode == false)
- {
- // at runtime disable back button (we finished; there's no point going back)
- buttonBack.Enabled = false;
- }
- this.buttonNext.Enabled = false;
- }
-
- // refresh
- if (this.selectedPage != null)
- {
- this.selectedPage.Invalidate();
- }
- else
- {
- this.Invalidate();
- }
- }
-
- ///
- /// Focus the control with a lowest tab index in the given container.
- ///
- /// A Control object to pe processed.
- private void FocusFirstTabIndex(Control container)
- {
- // init search result varialble
- Control searchResult = null;
-
- // find the control with the lowest tab index
- foreach (Control control in container.Controls)
- {
- if (control.CanFocus && (searchResult == null || control.TabIndex < searchResult.TabIndex))
- {
- searchResult = control;
- }
- }
-
- // check if anything searchResult
- if (searchResult != null)
- {
- // focus found control
- searchResult.Focus();
- }
- else
- {
- // focus the container
- container.Focus();
- }
- }
-
- ///
- /// Raises the SwitchPages event.
- ///
- /// A WizardPageEventArgs object that holds event data.
- protected virtual void OnBeforeSwitchPages(BeforeSwitchPagesEventArgs e)
- {
- // check if there are subscribers
- if (this.BeforeSwitchPages != null)
- {
- // raise BeforeSwitchPages event
- this.BeforeSwitchPages(this, e);
- }
-
- // check if user canceled
- if (e.Cancel)
- {
- // filter
- return;
- }
-
- // activate new page
- this.ActivatePage(e.NewIndex);
-
- // raise the after event
- this.OnAfterSwitchPages(e as AfterSwitchPagesEventArgs);
- }
-
- ///
- /// Raises the SwitchPages event.
- ///
- /// A WizardPageEventArgs object that holds event data.
- protected virtual void OnAfterSwitchPages(AfterSwitchPagesEventArgs e)
- {
- // check if there are subscribers
- if (this.AfterSwitchPages != null)
- {
- // raise AfterSwitchPages event
- this.AfterSwitchPages(this, e);
- }
- }
-
- ///
- /// Raises the Cancel event.
- ///
- /// A CancelEventArgs object that holds event data.
- protected virtual void OnCancel(CancelEventArgs e)
- {
- // check if there are subscribers
- if (this.Cancel != null)
- {
- // raise Cancel event
- this.Cancel(this, e);
- }
-
- // check if user canceled
- if (e.Cancel)
- {
- // cancel closing (when ShowDialog is used)
- this.ParentForm.DialogResult = DialogResult.None;
- }
- else
- {
- // ensure parent form is closed (even when ShowDialog is not used)
- this.ParentForm.Close();
- }
- }
-
- ///
- /// Raises the Finish event.
- ///
- /// A EventArgs object that holds event data.
- protected virtual void OnFinish(EventArgs e)
- {
- // check if there are subscribers
- if (this.Finish != null)
- {
- // raise Finish event
- this.Finish(this, e);
- }
-
- // ensure parent form is closed (even when ShowDialog is not used)
- this.ParentForm.Close();
- }
-
- ///
- /// Raises the Help event.
- ///
- /// A EventArgs object that holds event data.
- protected virtual void OnHelp(EventArgs e)
- {
- // check if there are subscribers
- if (this.Help != null)
- {
- // raise Help event
- this.Help(this, e);
- }
- }
-
- ///
- /// Raises the Load event.
- ///
- protected override void OnLoad(EventArgs e)
- {
- // raise the Load event
- base.OnLoad(e);
-
- // activate first page, if exists
- if (this.pages.Count > 0)
- {
- this.ActivatePage(0);
- }
- }
-
- ///
- /// Raises the Resize event.
- ///
- protected override void OnResize(EventArgs e)
- {
- // raise the Resize event
- base.OnResize(e);
-
- // resize the selected page to fit the wizard
- if (this.selectedPage != null)
- {
- this.selectedPage.SetBounds(0, 0, this.Width, this.Height - FOOTER_AREA_HEIGHT);
- }
-
- // position navigation buttons
- this.buttonCancel.Location = new Point(this.Width - this.offsetCancel.X,
- this.Height - this.offsetCancel.Y);
- this.buttonNext.Location = new Point(this.Width - this.offsetNext.X,
- this.Height - this.offsetNext.Y);
- this.buttonBack.Location = new Point(this.Width - this.offsetBack.X,
- this.Height - this.offsetBack.Y);
- this.buttonHelp.Location = new Point(this.buttonHelp.Location.X,
- this.Height - this.offsetBack.Y);
- }
-
- ///
- /// Raises the Paint event.
- ///
- protected override void OnPaint(PaintEventArgs e)
- {
- // raise the Paint event
- base.OnPaint(e);
-
- Rectangle bottomRect = this.ClientRectangle;
- bottomRect.Y = this.Height - FOOTER_AREA_HEIGHT;
- bottomRect.Height = FOOTER_AREA_HEIGHT;
- ControlPaint.DrawBorder3D(e.Graphics, bottomRect, Border3DStyle.Etched, Border3DSide.Top);
- }
-
- ///
- /// Raises the ControlAdded event.
- ///
- protected override void OnControlAdded(ControlEventArgs e)
- {
- // prevent other controls from being added directly to the wizard
- if (e.Control is WizardPage == false &&
- e.Control != this.buttonCancel &&
- e.Control != this.buttonNext &&
- e.Control != this.buttonBack)
- {
- // add the control to the selected page
- if (this.selectedPage != null)
- {
- this.selectedPage.Controls.Add(e.Control);
- }
- }
- else
- {
- // raise the ControlAdded event
- base.OnControlAdded(e);
- }
- }
-
- #endregion
-
- #region Events
- ///
- /// Occurs before the wizard pages are switched, giving the user a chance to validate.
- ///
- [Category("Wizard")]
- [Description("Occurs before the wizard pages are switched, giving the user a chance to validate.")]
- public event BeforeSwitchPagesEventHandler BeforeSwitchPages;
- ///
- /// Occurs after the wizard pages are switched, giving the user a chance to setup the new page.
- ///
- [Category("Wizard")]
- [Description("Occurs after the wizard pages are switched, giving the user a chance to setup the new page.")]
- public event AfterSwitchPagesEventHandler AfterSwitchPages;
- ///
- /// Occurs when wizard is canceled, giving the user a chance to validate.
- ///
- [Category("Wizard")]
- [Description("Occurs when wizard is canceled, giving the user a chance to validate.")]
- public event CancelEventHandler Cancel;
- ///
- /// Occurs when wizard is finished, giving the user a chance to do extra stuff.
- ///
- [Category("Wizard")]
- [Description("Occurs when wizard is finished, giving the user a chance to do extra stuff.")]
- public event EventHandler Finish;
- ///
- /// Occurs when the user clicks the help button.
- ///
- [Category("Wizard")]
- [Description("Occurs when the user clicks the help button.")]
- public event EventHandler Help;
- ///
- /// Represents the method that will handle the BeforeSwitchPages event of the Wizard control.
- ///
- public delegate void BeforeSwitchPagesEventHandler(object sender, BeforeSwitchPagesEventArgs e);
- ///
- /// Represents the method that will handle the AfterSwitchPages event of the Wizard control.
- ///
- public delegate void AfterSwitchPagesEventHandler(object sender, AfterSwitchPagesEventArgs e);
- #endregion
-
- #region Events handlers
- ///
- /// Handles the Click event of buttonNext.
- ///
- private void buttonNext_Click(object sender, System.EventArgs e)
- {
- this.Next();
- }
-
- ///
- /// Handles the Click event of buttonBack.
- ///
- private void buttonBack_Click(object sender, System.EventArgs e)
- {
- this.Back();
- }
-
- ///
- /// Handles the Click event of buttonCancel.
- ///
- private void buttonCancel_Click(object sender, System.EventArgs e)
- {
- // check if button is cancel mode
- if (this.buttonCancel.DialogResult == DialogResult.Cancel)
- {
- this.OnCancel(new CancelEventArgs());
- }
- // check if button is finish mode
- else if (this.buttonCancel.DialogResult == DialogResult.OK)
- {
- this.OnFinish(EventArgs.Empty);
- }
- }
-
- ///
- /// Handles the Click event of buttonHelp.
- ///
- private void buttonHelp_Click(object sender, System.EventArgs e)
- {
- this.OnHelp(EventArgs.Empty);
- }
- #endregion
-
- #region Inner classes
- ///
- /// Represents a designer for the wizard control.
- ///
- internal class WizardDesigner : ParentControlDesigner
- {
-
- #region Methods
- ///
- /// Overrides the handling of Mouse clicks to allow back-next to work in the designer.
- ///
- /// A Message value.
- protected override void WndProc(ref Message msg)
- {
- // declare PInvoke constants
- const int WM_LBUTTONDOWN = 0x0201;
- const int WM_LBUTTONDBLCLK = 0x0203;
-
- // check message
- if (msg.Msg == WM_LBUTTONDOWN || msg.Msg == WM_LBUTTONDBLCLK)
- {
- // get the control under the mouse
- ISelectionService ss = (ISelectionService)GetService(typeof(ISelectionService));
-
- if (ss.PrimarySelection is Wizard)
- {
- Wizard wizard = (Wizard)ss.PrimarySelection;
-
- // extract the mouse position
- int xPos = (short)((uint)msg.LParam & 0x0000FFFF);
- int yPos = (short)(((uint)msg.LParam & 0xFFFF0000) >> 16);
- Point mousePos = new Point(xPos, yPos);
-
- if (msg.HWnd == wizard.buttonNext.Handle)
- {
- if (wizard.buttonNext.Enabled &&
- wizard.buttonNext.ClientRectangle.Contains(mousePos))
- {
- //Press the button
- wizard.Next();
- }
- }
- else if (msg.HWnd == wizard.buttonBack.Handle)
- {
- if (wizard.buttonBack.Enabled &&
- wizard.buttonBack.ClientRectangle.Contains(mousePos))
- {
- //Press the button
- wizard.Back();
- }
- }
-
- // filter message
- return;
- }
- }
-
- // forward message
- base.WndProc(ref msg);
- }
-
- ///
- /// Prevents the grid from being drawn on the Wizard.
- ///
- protected override bool DrawGrid
- {
- get
- {
- return false;
- }
- }
- #endregion
-
- }
-
- ///
- /// Provides data for the AfterSwitchPages event of the Wizard control.
- ///
- public class AfterSwitchPagesEventArgs : EventArgs
- {
-
- #region Fields
- private int oldIndex;
- protected int newIndex;
- #endregion
-
- #region Constructor
- ///
- /// Creates a new instance of the class.
- ///
- /// An integer value representing the index of the old page.
- /// An integer value representing the index of the new page.
- internal AfterSwitchPagesEventArgs(int oldIndex, int newIndex)
- {
- this.oldIndex = oldIndex;
- this.newIndex = newIndex;
- }
-
- #endregion
-
- #region Properties
- ///
- /// Gets the index of the old page.
- ///
- public int OldIndex
- {
- get
- {
- return this.oldIndex;
- }
- }
-
- ///
- /// Gets or sets the index of the new page.
- ///
- public int NewIndex
- {
- get
- {
- return this.newIndex;
- }
- }
- #endregion
-
- }
-
- ///
- /// Provides data for the BeforeSwitchPages event of the Wizard control.
- ///
- public class BeforeSwitchPagesEventArgs : AfterSwitchPagesEventArgs
- {
-
- #region Fields
- private bool cancel = false;
- #endregion
-
- #region Constructor
- ///
- /// Creates a new instance of the class.
- ///
- /// An integer value representing the index of the old page.
- /// An integer value representing the index of the new page.
- internal BeforeSwitchPagesEventArgs(int oldIndex, int newIndex) : base(oldIndex, newIndex)
- {
- // nothing
- }
-
- #endregion
-
- #region Properties
- ///
- /// Indicates whether the page switch should be canceled.
- ///
- public bool Cancel
- {
- get
- {
- return this.cancel;
- }
- set
- {
- this.cancel = value;
- }
- }
-
- ///
- /// Gets or sets the index of the new page.
- ///
- public new int NewIndex
- {
- get
- {
- return base.newIndex;
- }
- set
- {
- base.newIndex = value;
- }
- }
- #endregion
-
-
- }
- #endregion
-
- }
-}
diff --git a/Studio Migration Utility/Sdl.Community.Controls/Wizard.resx b/Studio Migration Utility/Sdl.Community.Controls/Wizard.resx
deleted file mode 100644
index f483ca304d..0000000000
--- a/Studio Migration Utility/Sdl.Community.Controls/Wizard.resx
+++ /dev/null
@@ -1,166 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- text/microsoft-resx
-
-
- 1.3
-
-
- System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- False
-
-
- Private
-
-
- Private
-
-
- False
-
-
- Private
-
-
- Private
-
-
- False
-
-
- Private
-
-
- Private
-
-
- False
-
-
- Private
-
-
- Private
-
-
- False
-
-
- False
-
-
- True
-
-
- True
-
-
- 80
-
-
- (Default)
-
-
- False
-
-
- Private
-
-
- Wizard
-
-
- 4, 4
-
-
\ No newline at end of file
diff --git a/Studio Migration Utility/Sdl.Community.Controls/WizardPage.cs b/Studio Migration Utility/Sdl.Community.Controls/WizardPage.cs
deleted file mode 100644
index 7f83a0923e..0000000000
--- a/Studio Migration Utility/Sdl.Community.Controls/WizardPage.cs
+++ /dev/null
@@ -1,356 +0,0 @@
-#region Copyright ©2005, Cristi Potlog - All Rights Reserved
-/* ------------------------------------------------------------------- *
-* Cristi Potlog *
-* Copyright ©2005 - All Rights reserved *
-* *
-* THIS SOURCE CODE IS PROVIDED "AS IS" WITH NO WARRANTIES OF ANY KIND, *
-* EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE *
-* WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR *
-* PURPOSE, NONINFRINGEMENT, OR ARISING FROM A COURSE OF DEALING, *
-* USAGE OR TRADE PRACTICE. *
-* *
-* THIS COPYRIGHT NOTICE MAY NOT BE REMOVED FROM THIS FILE. *
-* ------------------------------------------------------------------- */
-#endregion Copyright ©2005, Cristi Potlog - All Rights Reserved
-
-#region References
-
-using System;
-using System.ComponentModel;
-using System.Drawing;
-using System.Windows.Forms;
-using System.Windows.Forms.Design;
-using CristiPotlog.Controls;
-
-#endregion
-
-namespace Sdl.Community.Controls
-{
-
- #region Enums
- ///
- /// Represents possible styles of a wizard page.
- ///
- public enum WizardPageStyle
- {
- ///
- /// Represents a standard interior wizard page with a white banner at the top.
- ///
- Standard,
- ///
- /// Represents a welcome wizard page with white background and large logo on the left.
- ///
- Welcome,
- ///
- /// Represents a finish wizard page with white background,
- /// a large logo on the left and OK button.
- ///
- Finish,
- ///
- /// Represents a blank wizard page.
- ///
- Custom
- }
- #endregion
-
- ///
- /// Represents a wizard page control with basic layout functionality.
- ///
- [DefaultEvent("Click")]
- [Designer(typeof(WizardPage.WizardPageDesigner))]
- public class WizardPage : Panel
- {
- #region Consts
- private const int HEADER_AREA_HEIGHT = 64;
- private const int HEADER_GLYPH_SIZE = 48;
- private const int HEADER_TEXT_PADDING = 8;
- private const int WELCOME_GLYPH_WIDTH = 164;
- #endregion
-
- #region Fields
- private WizardPageStyle style = WizardPageStyle.Standard;
- private string title = String.Empty;
- private string description = String.Empty;
- #endregion
-
- #region Constructor
- ///
- /// Creates a new instance of the class.
- ///
- public WizardPage()
- {
- // reset control style to improove rendering (reduce flicker)
- base.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
- base.SetStyle(ControlStyles.DoubleBuffer, true);
- base.SetStyle(ControlStyles.ResizeRedraw, true);
- base.SetStyle(ControlStyles.UserPaint, true);
- }
- #endregion
-
- #region Properties
- ///
- /// Gets or sets the style of the wizard page.
- ///
- [DefaultValue(WizardPageStyle.Standard)]
- [Category("Wizard")]
- [Description("Gets or sets the style of the wizard page.")]
- public WizardPageStyle Style
- {
- get
- {
- return this.style;
- }
- set
- {
- if (this.style != value)
- {
- this.style = value;
- // get the parent wizard control
- if (this.Parent != null && this.Parent is Wizard)
- {
- Wizard parentWizard = (Wizard)this.Parent;
- // check if page is selected
- if (parentWizard.SelectedPage == this)
- {
- // reactivate the selected page (performs redraw too)
- parentWizard.SelectedPage = this;
- }
- }
- else
- {
- // just redraw the page
- this.Invalidate();
- }
- }
- }
- }
-
- ///
- /// Gets or sets the title of the wizard page.
- ///
- [DefaultValue("")]
- [Category("Wizard")]
- [Description("Gets or sets the title of the wizard page.")]
- public string Title
- {
- get
- {
- return this.title;
- }
- set
- {
- if (value == null)
- {
- value = String.Empty;
- }
- if (this.title != value)
- {
- this.title = value;
- this.Invalidate();
- }
- }
- }
-
- ///
- /// Gets or sets the description of the wizard page.
- ///
- [DefaultValue("")]
- [Category("Wizard")]
- [Description("Gets or sets the description of the wizard page.")]
- public string Description
- {
- get
- {
- return this.description;
- }
- set
- {
- if (value == null)
- {
- value = String.Empty;
- }
- if (this.description != value)
- {
- this.description = value;
- this.Invalidate();
- }
- }
- }
- #endregion
-
- #region Methods
- ///
- /// Provides custom drawing to the wizard page.
- ///
- protected override void OnPaint(PaintEventArgs e)
- {
- // raise paint event
- base.OnPaint(e);
-
- // check if custom style
- if (this.style == WizardPageStyle.Custom)
- {
- // filter out
- return;
- }
-
- // init graphic resources
- Rectangle headerRect = this.ClientRectangle;
- Rectangle glyphRect = Rectangle.Empty;
- Rectangle titleRect = Rectangle.Empty;
- Rectangle descriptionRect = Rectangle.Empty;
-
- // determine text format
- StringFormat textFormat = StringFormat.GenericDefault;
- textFormat.LineAlignment = StringAlignment.Near;
- textFormat.Alignment = StringAlignment.Near;
- textFormat.Trimming = StringTrimming.EllipsisCharacter;
-
- switch (this.style)
- {
- case WizardPageStyle.Standard:
- // adjust height for header
- headerRect.Height = HEADER_AREA_HEIGHT;
- // draw header border
- ControlPaint.DrawBorder3D(e.Graphics, headerRect, Border3DStyle.Etched, Border3DSide.Bottom);
- // adjust header rect not to overwrite the border
- headerRect.Height -= SystemInformation.Border3DSize.Height;
- // fill header with window color
- e.Graphics.FillRectangle(SystemBrushes.Window, headerRect);
-
- // determine header image regtangle
- int headerPadding = (int)Math.Floor(((decimal)HEADER_AREA_HEIGHT - HEADER_GLYPH_SIZE) / 2);
- glyphRect.Location = new Point(this.Width - HEADER_GLYPH_SIZE - headerPadding, headerPadding);
- glyphRect.Size = new Size(HEADER_GLYPH_SIZE, HEADER_GLYPH_SIZE);
-
- // determine the header content
- Image headerImage = null;
- Font headerFont = this.Font;
- Font headerTitleFont = this.Font;
- if (this.Parent != null && this.Parent is Wizard)
- {
- // get content from parent wizard, if exists
- Wizard parentWizard = (Wizard)this.Parent;
- headerImage = parentWizard.HeaderImage;
- headerFont = parentWizard.HeaderFont;
- headerTitleFont = parentWizard.HeaderTitleFont;
- }
-
- // check if we have an image
- if (headerImage == null)
- {
- // display a focus rect as a place holder
- ControlPaint.DrawFocusRectangle(e.Graphics, glyphRect);
- }
- else
- {
- // draw header image
- e.Graphics.DrawImage(headerImage, glyphRect);
- }
-
- // determine title height
- int headerTitleHeight = (int)Math.Ceiling(e.Graphics.MeasureString(this.title, headerTitleFont, 0, textFormat).Height);
-
- // calculate text sizes
- titleRect.Location = new Point(HEADER_TEXT_PADDING,
- HEADER_TEXT_PADDING);
- titleRect.Size = new Size(glyphRect.Left - HEADER_TEXT_PADDING,
- headerTitleHeight);
- descriptionRect.Location = titleRect.Location;
- descriptionRect.Y += headerTitleHeight + HEADER_TEXT_PADDING / 2;
- descriptionRect.Size = new Size(titleRect.Width,
- HEADER_AREA_HEIGHT - descriptionRect.Y);
-
- // draw tilte text (single line, truncated with ellipsis)
- e.Graphics.DrawString(this.title,
- headerTitleFont,
- SystemBrushes.WindowText,
- titleRect,
- textFormat);
- // draw description text (multiple lines if needed)
- e.Graphics.DrawString(this.description,
- headerFont,
- SystemBrushes.WindowText,
- descriptionRect,
- textFormat);
- break;
- case WizardPageStyle.Welcome:
- case WizardPageStyle.Finish:
- // fill whole page with window color
- e.Graphics.FillRectangle(SystemBrushes.Window, headerRect);
-
- // determine welcome image regtangle
- glyphRect.Location = Point.Empty;
- glyphRect.Size = new Size(WELCOME_GLYPH_WIDTH, this.Height);
-
- // determine the icon that should appear on the welcome page
- Image welcomeImage = null;
- Font welcomeFont = this.Font;
- Font welcomeTitleFont = this.Font;
- if (this.Parent != null && this.Parent is Wizard)
- {
- // get content from parent wizard, if exists
- Wizard parentWizard = (Wizard)this.Parent;
- welcomeImage = parentWizard.WelcomeImage;
- welcomeFont = parentWizard.WelcomeFont;
- welcomeTitleFont = parentWizard.WelcomeTitleFont;
- }
-
- // check if we have an image
- if (welcomeImage != null)
- {
- // draw welcome page image
- e.Graphics.DrawImage(welcomeImage, glyphRect);
- }
-
- // calculate text sizes
- titleRect.Location = welcomeImage != null ?
- new Point(WELCOME_GLYPH_WIDTH + HEADER_TEXT_PADDING, HEADER_TEXT_PADDING) :
- new Point(HEADER_TEXT_PADDING, HEADER_TEXT_PADDING);
- titleRect.Width = this.Width - titleRect.Left - HEADER_TEXT_PADDING;
- // determine title height
- int welcomeTitleHeight = (int)Math.Ceiling(e.Graphics.MeasureString(this.title, welcomeTitleFont, titleRect.Width, textFormat).Height);
- descriptionRect.Location = titleRect.Location;
- descriptionRect.Y += welcomeTitleHeight + HEADER_TEXT_PADDING;
- descriptionRect.Size = new Size(this.Width - descriptionRect.Left - HEADER_TEXT_PADDING,
- this.Height - descriptionRect.Y);
-
- // draw tilte text (multiple lines if needed)
- e.Graphics.DrawString(this.title,
- welcomeTitleFont,
- SystemBrushes.WindowText,
- titleRect,
- textFormat);
- // draw description text (multiple lines if needed)
- e.Graphics.DrawString(this.description,
- welcomeFont,
- SystemBrushes.WindowText,
- descriptionRect,
- textFormat);
- break;
- }
- }
- #endregion
-
- #region Inner classes
- ///
- /// This is a designer for the Banner.
- /// This designer locks the control vertical sizing.
- ///
- internal class WizardPageDesigner : ParentControlDesigner
- {
- ///
- /// Gets the selection rules that indicate the movement capabilities of a component.
- ///
- public override SelectionRules SelectionRules
- {
- get
- {
- // lock the control
- return SelectionRules.Visible | SelectionRules.Locked;
- }
- }
- }
- #endregion
- }
-}
diff --git a/Studio Migration Utility/Sdl.Community.Controls/WizardPage.resx b/Studio Migration Utility/Sdl.Community.Controls/WizardPage.resx
deleted file mode 100644
index 3f337e081d..0000000000
--- a/Studio Migration Utility/Sdl.Community.Controls/WizardPage.resx
+++ /dev/null
@@ -1,42 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- text/microsoft-resx
-
-
- 1.0.0.0
-
-
- System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
diff --git a/Studio Migration Utility/Sdl.Community.Controls/WizardPagesCollection.cs b/Studio Migration Utility/Sdl.Community.Controls/WizardPagesCollection.cs
deleted file mode 100644
index 5244c51912..0000000000
--- a/Studio Migration Utility/Sdl.Community.Controls/WizardPagesCollection.cs
+++ /dev/null
@@ -1,169 +0,0 @@
-#region Copyright ©2005, Cristi Potlog - All Rights Reserved
-/* ------------------------------------------------------------------- *
-* Cristi Potlog *
-* Copyright ©2005 - All Rights reserved *
-* *
-* THIS SOURCE CODE IS PROVIDED "AS IS" WITH NO WARRANTIES OF ANY KIND, *
-* EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE *
-* WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR *
-* PURPOSE, NONINFRINGEMENT, OR ARISING FROM A COURSE OF DEALING, *
-* USAGE OR TRADE PRACTICE. *
-* *
-* THIS COPYRIGHT NOTICE MAY NOT BE REMOVED FROM THIS FILE. *
-* ------------------------------------------------------------------- */
-#endregion Copyright ©2005, Cristi Potlog - All Rights Reserved
-
-#region References
-using System;
-using System.Collections;
-using Sdl.Community.Controls;
-
-#endregion
-
-namespace CristiPotlog.Controls
-{
- ///
- /// Represents a collection of wizard pages.
- ///
- public class WizardPagesCollection : CollectionBase
- {
- #region Fields
- private Wizard owner = null;
- #endregion
-
- #region Constructor
- ///
- /// Creates a new instance of the class.
- ///
- /// A Wizard object that owns the collection.
- internal WizardPagesCollection(Wizard owner)
- {
- this.owner = owner;
- }
- #endregion
-
- #region Indexer
- public WizardPage this[int index]
- {
- get
- {
- return (WizardPage)base.List[index];
- }
- set
- {
- base.List[index] = value;
- }
- }
- #endregion
-
- #region Methods
- ///
- /// Adds an object to the end of the WizardPagesCollection.
- ///
- /// The WizardPage to be added.
- /// The value can be null.
- /// An Integer value representing the index at which the value has been added.
- public int Add(WizardPage value )
- {
- int result = List.Add( value );
- return result;
- }
-
- ///
- /// Adds the elements of an array of WizardPage objects to the end of the WizardPagesCollection.
- ///
- /// An array on WizardPage objects to be added.
- /// The array itself cannot be null, but it can contain elements that are null.
- public void AddRange(WizardPage[] pages)
- {
- // Use external to validate and add each entry
- foreach(WizardPage page in pages)
- {
- this.Add(page);
- }
- }
-
- ///
- /// Searches for the specified WizardPage and returns the zero-based index
- /// of the first occurrence in the entire WizardPagesCollection.
- ///
- /// A WizardPage object to locate in the WizardPagesCollection.
- /// The value can be null.
- ///
- public int IndexOf(WizardPage value)
- {
- return List.IndexOf(value);
- }
-
- ///
- /// Inserts an element into the WizardPagesCollection at the specified index.
- ///
- /// An Integer value representing the zero-based index at which value should be inserted.
- /// A WizardPage object to insert. The value can be null.
- public void Insert( int index, WizardPage value )
- {
- // insert the item
- List.Insert(index, value );
- }
-
- ///
- /// Removes the first occurrence of a specific object from the WizardPagesCollection.
- ///
- /// A WizardPage object to remove. The value can be null.
- public void Remove(WizardPage value)
- {
- // remove the item
- List.Remove(value);
- }
-
- ///
- /// Determines whether an element is in the WizardPagesCollection.
- ///
- /// The WizardPage object to locate. The value can be null.
- /// true if item is found in the WizardPagesCollection; otherwise, false.
- public bool Contains(WizardPage value)
- {
- return List.Contains(value);
- }
-
- ///
- /// Performs additional custom processes after inserting a new element into the WizardPagesCollection instance.
- ///
- /// The zero-based index at which to insert value.
- /// The new value of the element at index.
- protected override void OnInsertComplete(int index, object value)
- {
- // call base class
- base.OnInsertComplete(index, value);
-
- // reset current page index
- this.owner.SelectedIndex = index;
- }
-
- ///
- /// Performs additional custom processes after removing an element from the System.Collections.CollectionBase instance.
- ///
- /// The zero-based index at which value can be found.
- /// The value of the element to remove from index.
- protected override void OnRemoveComplete(int index, object value)
- {
- // call base class
- base.OnRemoveComplete(index, value);
-
- // check if removing current page
- if (this.owner.SelectedIndex == index)
- {
- // check if at the end of the list
- if (index < InnerList.Count)
- {
- this.owner.SelectedIndex = index;
- }
- else
- {
- this.owner.SelectedIndex = InnerList.Count - 1;
- }
- }
- }
- #endregion
- }
-}
diff --git a/Studio Migration Utility/Sdl.Community.PluginInfo/PluginPackageInfo.cs b/Studio Migration Utility/Sdl.Community.PluginInfo/PluginPackageInfo.cs
deleted file mode 100644
index 82fd901e54..0000000000
--- a/Studio Migration Utility/Sdl.Community.PluginInfo/PluginPackageInfo.cs
+++ /dev/null
@@ -1,30 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Sdl.Core.PluginFramework.PackageSupport;
-
-namespace Sdl.Community.PluginInfo
-{
- public class PluginPackageInfo
- {
- public string PluginName { get; set; }
-
- public PluginPackageInfo()
- {
-
- }
- public static string GetPluginName(string pluginPackagePath)
- {
- string pluginName;
- using (var pluginPackage = new PluginPackage(pluginPackagePath, FileAccess.Read))
- {
- pluginName = pluginPackage.PackageManifest.PlugInName;
- }
-
- return pluginName;
- }
- }
-}
diff --git a/Studio Migration Utility/Sdl.Community.PluginInfo/Properties/AssemblyInfo.cs b/Studio Migration Utility/Sdl.Community.PluginInfo/Properties/AssemblyInfo.cs
deleted file mode 100644
index 7fc07f4942..0000000000
--- a/Studio Migration Utility/Sdl.Community.PluginInfo/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,37 +0,0 @@
-using System.Reflection;
-using System.Runtime.CompilerServices;
-using System.Runtime.InteropServices;
-
-// General Information about an assembly is controlled through the following
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-[assembly: AssemblyTitle("Sdl.Community.PluginInfo")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyProduct("Sdl.Community.PluginInfo")]
-[assembly: AssemblyCompany("SDL Limited as part of the RWS Holdings Plc group of companies")]
-[assembly: AssemblyCopyright("Copyright © 2011 - 2022 SDL Limited as part of the RWS Holdings Plc group of companies (\"RWS Group\").")]
-
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-// Setting ComVisible to false makes the types in this assembly not visible
-// to COM components. If you need to access a type in this assembly from
-// COM, set the ComVisible attribute to true on that type.
-[assembly: ComVisible(false)]
-
-// The following GUID is for the ID of the typelib if this project is exposed to COM
-[assembly: Guid("867db6ef-2b27-4626-8c2e-fd6ec7a4a943")]
-
-// Version information for an assembly consists of the following four values:
-//
-// Major Version
-// Minor Version
-// Build Number
-// Revision
-//
-// You can specify all the values or you can default the Build and Revision Numbers
-// by using the '*' as shown below:
-// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/Studio Migration Utility/Sdl.Community.PluginInfo/Sdl.Community.PluginInfo.csproj b/Studio Migration Utility/Sdl.Community.PluginInfo/Sdl.Community.PluginInfo.csproj
deleted file mode 100644
index 25b61dec15..0000000000
--- a/Studio Migration Utility/Sdl.Community.PluginInfo/Sdl.Community.PluginInfo.csproj
+++ /dev/null
@@ -1,65 +0,0 @@
-
-
-
-
- Debug
- AnyCPU
- {867DB6EF-2B27-4626-8C2E-FD6EC7A4A943}
- Library
- Properties
- Sdl.Community.PluginInfo
- Sdl.Community.PluginInfo
- v4.8
- 512
- $(AppData)\Trados\Trados Studio\18\Plugins
-
-
- true
- full
- false
- ..\Sdl.Community.StudioMigrationUtility\bin\Debug\
- DEBUG;TRACE
- prompt
- 4
-
-
- pdbonly
- true
- bin\Debug\
- TRACE
- prompt
- 4
-
-
- true
-
-
- ..\..\SdlCommunity.snk
-
-
-
- $(MSBuildProgramFiles32)\Trados\Trados Studio\Studio18\Sdl.Core.PluginFramework.PackageSupport.dll
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- SdlCommunity.snk
-
-
-
-
- copy /Y "$(TargetDir)$(ProjectName).dll" "$(TargetDir)$(ProjectName)"
-
-
diff --git a/Studio Migration Utility/Sdl.Community.StudioMigrationUtility.sln b/Studio Migration Utility/Sdl.Community.StudioMigrationUtility.sln
deleted file mode 100644
index 2fe3ec6f5e..0000000000
--- a/Studio Migration Utility/Sdl.Community.StudioMigrationUtility.sln
+++ /dev/null
@@ -1,42 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio Version 16
-VisualStudioVersion = 16.0.29905.134
-MinimumVisualStudioVersion = 10.0.40219.1
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sdl.Community.StudioMigrationUtility", "Sdl.Community.StudioMigrationUtility\Sdl.Community.StudioMigrationUtility.csproj", "{DCD95D2B-60E7-4D11-B6AC-5A63B590195A}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sdl.Community.Controls", "Sdl.Community.Controls\Sdl.Community.Controls.csproj", "{870C7D59-F59B-44D1-961E-C4341DAA5306}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{BF8E838B-5F09-4875-9420-EAA4B7EAE578}"
- ProjectSection(SolutionItems) = preProject
- setup.iss = setup.iss
- EndProjectSection
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sdl.Community.PluginInfo", "Sdl.Community.PluginInfo\Sdl.Community.PluginInfo.csproj", "{867DB6EF-2B27-4626-8C2E-FD6EC7A4A943}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|Any CPU = Debug|Any CPU
- Release|Any CPU = Release|Any CPU
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {DCD95D2B-60E7-4D11-B6AC-5A63B590195A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {DCD95D2B-60E7-4D11-B6AC-5A63B590195A}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {DCD95D2B-60E7-4D11-B6AC-5A63B590195A}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {DCD95D2B-60E7-4D11-B6AC-5A63B590195A}.Release|Any CPU.Build.0 = Release|Any CPU
- {870C7D59-F59B-44D1-961E-C4341DAA5306}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {870C7D59-F59B-44D1-961E-C4341DAA5306}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {870C7D59-F59B-44D1-961E-C4341DAA5306}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {870C7D59-F59B-44D1-961E-C4341DAA5306}.Release|Any CPU.Build.0 = Release|Any CPU
- {867DB6EF-2B27-4626-8C2E-FD6EC7A4A943}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {867DB6EF-2B27-4626-8C2E-FD6EC7A4A943}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {867DB6EF-2B27-4626-8C2E-FD6EC7A4A943}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {867DB6EF-2B27-4626-8C2E-FD6EC7A4A943}.Release|Any CPU.Build.0 = Release|Any CPU
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
- GlobalSection(ExtensibilityGlobals) = postSolution
- SolutionGuid = {865FDB15-446A-4845-926E-885DF4155CF1}
- EndGlobalSection
-EndGlobal
diff --git a/Studio Migration Utility/Sdl.Community.StudioMigrationUtility/App.config b/Studio Migration Utility/Sdl.Community.StudioMigrationUtility/App.config
deleted file mode 100644
index 8227adb989..0000000000
--- a/Studio Migration Utility/Sdl.Community.StudioMigrationUtility/App.config
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
diff --git a/Studio Migration Utility/Sdl.Community.StudioMigrationUtility/MigrateProjects.Designer.cs b/Studio Migration Utility/Sdl.Community.StudioMigrationUtility/MigrateProjects.Designer.cs
deleted file mode 100644
index 816fd53a7c..0000000000
--- a/Studio Migration Utility/Sdl.Community.StudioMigrationUtility/MigrateProjects.Designer.cs
+++ /dev/null
@@ -1,587 +0,0 @@
-namespace Sdl.Community.StudioMigrationUtility
-{
- partial class MigrateUtility
- {
- ///
- /// Required designer variable.
- ///
- private System.ComponentModel.IContainer components = null;
-
- ///
- /// Clean up any resources being used.
- ///
- /// true if managed resources should be disposed; otherwise, false.
- protected override void Dispose(bool disposing)
- {
- if (disposing && (components != null))
- {
- components.Dispose();
- }
- base.Dispose(disposing);
- }
-
- #region Windows Form Designer generated code
-
- ///
- /// Required method for Designer support - do not modify
- /// the contents of this method with the code editor.
- ///
- private void InitializeComponent()
- {
- System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MigrateUtility));
- this.projectMigrationWizzard = new CristiPotlog.Controls.Wizard();
- this.welcomePage = new Sdl.Community.Controls.WizardPage();
- this.finalPage = new Sdl.Community.Controls.WizardPage();
- this.taskRunnerPage = new Sdl.Community.Controls.WizardPage();
- this.labelProgress = new System.Windows.Forms.Label();
- this.progressLongTask = new System.Windows.Forms.ProgressBar();
- this.translationMemories = new Sdl.Community.Controls.WizardPage();
- this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel();
- this.label5 = new System.Windows.Forms.Label();
- this.label4 = new System.Windows.Forms.Label();
- this.chkCustomers = new System.Windows.Forms.CheckBox();
- this.chkTranslationMemories = new System.Windows.Forms.CheckBox();
- this.pluginsPage = new Sdl.Community.Controls.WizardPage();
- this.pluginsTableLayout = new System.Windows.Forms.TableLayoutPanel();
- this.installedPluginsListView = new BrightIdeasSoftware.ObjectListView();
- this.pluginsColumn = ((BrightIdeasSoftware.OLVColumn)(new BrightIdeasSoftware.OLVColumn()));
- this.descriptionLabel = new System.Windows.Forms.Label();
- this.moveProjects = new Sdl.Community.Controls.WizardPage();
- this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
- this.panel3 = new System.Windows.Forms.Panel();
- this.projectsToBeMoved = new BrightIdeasSoftware.ObjectListView();
- this.projectsNameColumn = ((BrightIdeasSoftware.OLVColumn)(new BrightIdeasSoftware.OLVColumn()));
- this.label3 = new System.Windows.Forms.Label();
- this.toStudioVersion = new Sdl.Community.Controls.WizardPage();
- this.tableLayoutPanelDestinationStudioVersion = new System.Windows.Forms.TableLayoutPanel();
- this.panel2 = new System.Windows.Forms.Panel();
- this.chkDestinationStudioVersion = new BrightIdeasSoftware.ObjectListView();
- this.destinationStudioVersionColumn = ((BrightIdeasSoftware.OLVColumn)(new BrightIdeasSoftware.OLVColumn()));
- this.label1 = new System.Windows.Forms.Label();
- this.fromStudioVersion = new Sdl.Community.Controls.WizardPage();
- this.tableLayoutSourceStudioVersions = new System.Windows.Forms.TableLayoutPanel();
- this.panel1 = new System.Windows.Forms.Panel();
- this.chkSourceStudioVersions = new BrightIdeasSoftware.ObjectListView();
- this.sourceStudioVersionColumn = ((BrightIdeasSoftware.OLVColumn)(new BrightIdeasSoftware.OLVColumn()));
- this.label2 = new System.Windows.Forms.Label();
- this.projectMigrationWizzard.SuspendLayout();
- this.taskRunnerPage.SuspendLayout();
- this.translationMemories.SuspendLayout();
- this.tableLayoutPanel2.SuspendLayout();
- this.pluginsPage.SuspendLayout();
- this.pluginsTableLayout.SuspendLayout();
- ((System.ComponentModel.ISupportInitialize)(this.installedPluginsListView)).BeginInit();
- this.moveProjects.SuspendLayout();
- this.tableLayoutPanel1.SuspendLayout();
- this.panel3.SuspendLayout();
- ((System.ComponentModel.ISupportInitialize)(this.projectsToBeMoved)).BeginInit();
- this.toStudioVersion.SuspendLayout();
- this.tableLayoutPanelDestinationStudioVersion.SuspendLayout();
- this.panel2.SuspendLayout();
- ((System.ComponentModel.ISupportInitialize)(this.chkDestinationStudioVersion)).BeginInit();
- this.fromStudioVersion.SuspendLayout();
- this.tableLayoutSourceStudioVersions.SuspendLayout();
- this.panel1.SuspendLayout();
- ((System.ComponentModel.ISupportInitialize)(this.chkSourceStudioVersions)).BeginInit();
- this.SuspendLayout();
- //
- // projectMigrationWizzard
- //
- this.projectMigrationWizzard.Controls.Add(this.welcomePage);
- this.projectMigrationWizzard.Controls.Add(this.finalPage);
- this.projectMigrationWizzard.Controls.Add(this.taskRunnerPage);
- this.projectMigrationWizzard.Controls.Add(this.translationMemories);
- this.projectMigrationWizzard.Controls.Add(this.pluginsPage);
- this.projectMigrationWizzard.Controls.Add(this.moveProjects);
- this.projectMigrationWizzard.Controls.Add(this.toStudioVersion);
- this.projectMigrationWizzard.Controls.Add(this.fromStudioVersion);
- this.projectMigrationWizzard.HeaderImage = global::Sdl.Community.StudioMigrationUtility.Properties.Resources.migrate;
- this.projectMigrationWizzard.Location = new System.Drawing.Point(0, 0);
- this.projectMigrationWizzard.Name = "projectMigrationWizzard";
- this.projectMigrationWizzard.Pages.AddRange(new Sdl.Community.Controls.WizardPage[] {
- this.welcomePage,
- this.fromStudioVersion,
- this.toStudioVersion,
- this.moveProjects,
- this.pluginsPage,
- this.translationMemories,
- this.taskRunnerPage,
- this.finalPage});
- this.projectMigrationWizzard.Size = new System.Drawing.Size(550, 338);
- this.projectMigrationWizzard.TabIndex = 0;
- this.projectMigrationWizzard.BeforeSwitchPages += new CristiPotlog.Controls.Wizard.BeforeSwitchPagesEventHandler(this.projectMigrationWizzard_BeforeSwitchPages);
- this.projectMigrationWizzard.AfterSwitchPages += new CristiPotlog.Controls.Wizard.AfterSwitchPagesEventHandler(this.projectMigrationWizzard_AfterSwitchPages);
- //
- // welcomePage
- //
- this.welcomePage.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None;
- this.welcomePage.Description = "This wizard will guide you through the steps of performing a Studio migration.";
- this.welcomePage.Location = new System.Drawing.Point(0, 0);
- this.welcomePage.Name = "welcomePage";
- this.welcomePage.Size = new System.Drawing.Size(550, 290);
- this.welcomePage.Style = Sdl.Community.Controls.WizardPageStyle.Welcome;
- this.welcomePage.TabIndex = 10;
- this.welcomePage.Title = "Studio migration utility";
- //
- // finalPage
- //
- this.finalPage.Location = new System.Drawing.Point(0, 0);
- this.finalPage.Name = "finalPage";
- this.finalPage.Size = new System.Drawing.Size(550, 307);
- this.finalPage.Style = Sdl.Community.Controls.WizardPageStyle.Finish;
- this.finalPage.TabIndex = 15;
- this.finalPage.Title = "Migration has finished.";
- //
- // taskRunnerPage
- //
- this.taskRunnerPage.Controls.Add(this.labelProgress);
- this.taskRunnerPage.Controls.Add(this.progressLongTask);
- this.taskRunnerPage.Location = new System.Drawing.Point(0, 0);
- this.taskRunnerPage.Name = "taskRunnerPage";
- this.taskRunnerPage.Size = new System.Drawing.Size(428, 208);
- this.taskRunnerPage.TabIndex = 14;
- this.taskRunnerPage.Title = "Studio projects are being migrated";
- //
- // labelProgress
- //
- this.labelProgress.Location = new System.Drawing.Point(16, 132);
- this.labelProgress.Name = "labelProgress";
- this.labelProgress.Size = new System.Drawing.Size(252, 16);
- this.labelProgress.TabIndex = 5;
- this.labelProgress.Text = "Please wait while projects are migrated...";
- //
- // progressLongTask
- //
- this.progressLongTask.Location = new System.Drawing.Point(12, 152);
- this.progressLongTask.Name = "progressLongTask";
- this.progressLongTask.Size = new System.Drawing.Size(526, 20);
- this.progressLongTask.TabIndex = 4;
- //
- // translationMemories
- //
- this.translationMemories.Controls.Add(this.tableLayoutPanel2);
- this.translationMemories.Location = new System.Drawing.Point(0, 0);
- this.translationMemories.Name = "translationMemories";
- this.translationMemories.Size = new System.Drawing.Size(428, 208);
- this.translationMemories.TabIndex = 16;
- this.translationMemories.Title = "Translation Memories";
- //
- // tableLayoutPanel2
- //
- this.tableLayoutPanel2.ColumnCount = 2;
- this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
- this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
- this.tableLayoutPanel2.Controls.Add(this.label5, 0, 1);
- this.tableLayoutPanel2.Controls.Add(this.label4, 0, 0);
- this.tableLayoutPanel2.Controls.Add(this.chkCustomers, 1, 1);
- this.tableLayoutPanel2.Controls.Add(this.chkTranslationMemories, 1, 0);
- this.tableLayoutPanel2.Location = new System.Drawing.Point(12, 78);
- this.tableLayoutPanel2.Name = "tableLayoutPanel2";
- this.tableLayoutPanel2.RowCount = 2;
- this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
- this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 106F));
- this.tableLayoutPanel2.Size = new System.Drawing.Size(518, 213);
- this.tableLayoutPanel2.TabIndex = 4;
- //
- // label5
- //
- this.label5.Anchor = System.Windows.Forms.AnchorStyles.Left;
- this.label5.AutoSize = true;
- this.label5.Location = new System.Drawing.Point(3, 130);
- this.label5.Name = "label5";
- this.label5.Size = new System.Drawing.Size(240, 60);
- this.label5.TabIndex = 6;
- this.label5.Text = "Selecting this option will result in all Customers recreated in the application y" +
- "ou are migrating to. ";
- //
- // label4
- //
- this.label4.Anchor = System.Windows.Forms.AnchorStyles.Left;
- this.label4.AutoSize = true;
- this.label4.Location = new System.Drawing.Point(3, 0);
- this.label4.Name = "label4";
- this.label4.Size = new System.Drawing.Size(249, 107);
- this.label4.TabIndex = 3;
- this.label4.Text = resources.GetString("label4.Text");
- //
- // chkCustomers
- //
- this.chkCustomers.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
- this.chkCustomers.AutoSize = true;
- this.chkCustomers.Location = new System.Drawing.Point(262, 148);
- this.chkCustomers.Name = "chkCustomers";
- this.chkCustomers.Padding = new System.Windows.Forms.Padding(10, 0, 0, 0);
- this.chkCustomers.Size = new System.Drawing.Size(253, 24);
- this.chkCustomers.TabIndex = 5;
- this.chkCustomers.Text = "Migrate Customers";
- this.chkCustomers.UseVisualStyleBackColor = true;
- //
- // chkTranslationMemories
- //
- this.chkTranslationMemories.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
- this.chkTranslationMemories.AutoSize = true;
- this.chkTranslationMemories.Location = new System.Drawing.Point(262, 41);
- this.chkTranslationMemories.Name = "chkTranslationMemories";
- this.chkTranslationMemories.Padding = new System.Windows.Forms.Padding(10, 0, 0, 0);
- this.chkTranslationMemories.Size = new System.Drawing.Size(253, 24);
- this.chkTranslationMemories.TabIndex = 4;
- this.chkTranslationMemories.Text = "Update translation memories";
- this.chkTranslationMemories.UseVisualStyleBackColor = true;
- //
- // pluginsPage
- //
- this.pluginsPage.Controls.Add(this.pluginsTableLayout);
- this.pluginsPage.Description = "Select plugins which you want to migrate.";
- this.pluginsPage.Location = new System.Drawing.Point(0, 0);
- this.pluginsPage.Name = "pluginsPage";
- this.pluginsPage.Size = new System.Drawing.Size(428, 208);
- this.pluginsPage.TabIndex = 17;
- this.pluginsPage.Title = "Installed plugins list";
- //
- // pluginsTableLayout
- //
- this.pluginsTableLayout.ColumnCount = 2;
- this.pluginsTableLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
- this.pluginsTableLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
- this.pluginsTableLayout.Controls.Add(this.installedPluginsListView, 1, 0);
- this.pluginsTableLayout.Controls.Add(this.descriptionLabel, 0, 0);
- this.pluginsTableLayout.Location = new System.Drawing.Point(12, 78);
- this.pluginsTableLayout.Name = "pluginsTableLayout";
- this.pluginsTableLayout.RowCount = 1;
- this.pluginsTableLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
- this.pluginsTableLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));
- this.pluginsTableLayout.Size = new System.Drawing.Size(518, 213);
- this.pluginsTableLayout.TabIndex = 0;
- //
- // installedPluginsListView
- //
- this.installedPluginsListView.AllColumns.Add(this.pluginsColumn);
- this.installedPluginsListView.CheckBoxes = true;
- this.installedPluginsListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
- this.pluginsColumn});
- this.installedPluginsListView.Cursor = System.Windows.Forms.Cursors.Default;
- this.installedPluginsListView.Dock = System.Windows.Forms.DockStyle.Fill;
- this.installedPluginsListView.EmptyListMsg = "All plugins from the source Studio version ar available on the destination Studio" +
- " version.";
- this.installedPluginsListView.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None;
- this.installedPluginsListView.HideSelection = false;
- this.installedPluginsListView.Location = new System.Drawing.Point(262, 3);
- this.installedPluginsListView.Name = "installedPluginsListView";
- this.installedPluginsListView.Size = new System.Drawing.Size(253, 207);
- this.installedPluginsListView.TabIndex = 0;
- this.installedPluginsListView.UseCompatibleStateImageBehavior = false;
- this.installedPluginsListView.View = System.Windows.Forms.View.Details;
- //
- // pluginsColumn
- //
- this.pluginsColumn.CheckBoxes = true;
- this.pluginsColumn.FillsFreeSpace = true;
- this.pluginsColumn.Groupable = false;
- this.pluginsColumn.IsEditable = false;
- //
- // descriptionLabel
- //
- this.descriptionLabel.Anchor = System.Windows.Forms.AnchorStyles.Left;
- this.descriptionLabel.AutoSize = true;
- this.descriptionLabel.Location = new System.Drawing.Point(3, 76);
- this.descriptionLabel.Name = "descriptionLabel";
- this.descriptionLabel.Size = new System.Drawing.Size(242, 60);
- this.descriptionLabel.TabIndex = 1;
- this.descriptionLabel.Text = "All selected plugins will be migrated to the version of Studio selected in the pr" +
- "evious steps.";
- //
- // moveProjects
- //
- this.moveProjects.Controls.Add(this.tableLayoutPanel1);
- this.moveProjects.Location = new System.Drawing.Point(0, 0);
- this.moveProjects.Name = "moveProjects";
- this.moveProjects.Size = new System.Drawing.Size(428, 208);
- this.moveProjects.TabIndex = 13;
- this.moveProjects.Title = "Change projects location";
- //
- // tableLayoutPanel1
- //
- this.tableLayoutPanel1.ColumnCount = 2;
- this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
- this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
- this.tableLayoutPanel1.Controls.Add(this.panel3, 1, 0);
- this.tableLayoutPanel1.Controls.Add(this.label3, 0, 0);
- this.tableLayoutPanel1.Location = new System.Drawing.Point(12, 78);
- this.tableLayoutPanel1.Name = "tableLayoutPanel1";
- this.tableLayoutPanel1.RowCount = 1;
- this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
- this.tableLayoutPanel1.Size = new System.Drawing.Size(518, 213);
- this.tableLayoutPanel1.TabIndex = 3;
- //
- // panel3
- //
- this.panel3.Controls.Add(this.projectsToBeMoved);
- this.panel3.Dock = System.Windows.Forms.DockStyle.Fill;
- this.panel3.Location = new System.Drawing.Point(262, 3);
- this.panel3.Name = "panel3";
- this.panel3.Size = new System.Drawing.Size(253, 207);
- this.panel3.TabIndex = 2;
- //
- // projectsToBeMoved
- //
- this.projectsToBeMoved.AllColumns.Add(this.projectsNameColumn);
- this.projectsToBeMoved.CheckBoxes = true;
- this.projectsToBeMoved.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
- this.projectsNameColumn});
- this.projectsToBeMoved.Cursor = System.Windows.Forms.Cursors.Default;
- this.projectsToBeMoved.Dock = System.Windows.Forms.DockStyle.Fill;
- this.projectsToBeMoved.EmptyListMsg = "All projects from the source Studio version are available on the destination Stud" +
- "io version.";
- this.projectsToBeMoved.FullRowSelect = true;
- this.projectsToBeMoved.HasCollapsibleGroups = false;
- this.projectsToBeMoved.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None;
- this.projectsToBeMoved.HideSelection = false;
- this.projectsToBeMoved.Location = new System.Drawing.Point(0, 0);
- this.projectsToBeMoved.Name = "projectsToBeMoved";
- this.projectsToBeMoved.Size = new System.Drawing.Size(253, 207);
- this.projectsToBeMoved.TabIndex = 0;
- this.projectsToBeMoved.UseCompatibleStateImageBehavior = false;
- this.projectsToBeMoved.View = System.Windows.Forms.View.Details;
- //
- // projectsNameColumn
- //
- this.projectsNameColumn.AspectName = "";
- this.projectsNameColumn.CheckBoxes = true;
- this.projectsNameColumn.FillsFreeSpace = true;
- this.projectsNameColumn.Groupable = false;
- this.projectsNameColumn.IsEditable = false;
- this.projectsNameColumn.Width = 151;
- //
- // label3
- //
- this.label3.Anchor = System.Windows.Forms.AnchorStyles.Left;
- this.label3.AutoSize = true;
- this.label3.Location = new System.Drawing.Point(3, 36);
- this.label3.Name = "label3";
- this.label3.Size = new System.Drawing.Size(242, 140);
- this.label3.TabIndex = 3;
- this.label3.Text = resources.GetString("label3.Text");
- //
- // toStudioVersion
- //
- this.toStudioVersion.Controls.Add(this.tableLayoutPanelDestinationStudioVersion);
- this.toStudioVersion.Description = "Select Studio version to which you want to migrate the projects.";
- this.toStudioVersion.Location = new System.Drawing.Point(0, 0);
- this.toStudioVersion.Name = "toStudioVersion";
- this.toStudioVersion.Size = new System.Drawing.Size(428, 208);
- this.toStudioVersion.TabIndex = 12;
- this.toStudioVersion.Tag = "";
- this.toStudioVersion.Title = "Destination Studio Version";
- //
- // tableLayoutPanelDestinationStudioVersion
- //
- this.tableLayoutPanelDestinationStudioVersion.ColumnCount = 2;
- this.tableLayoutPanelDestinationStudioVersion.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
- this.tableLayoutPanelDestinationStudioVersion.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
- this.tableLayoutPanelDestinationStudioVersion.Controls.Add(this.panel2, 1, 0);
- this.tableLayoutPanelDestinationStudioVersion.Controls.Add(this.label1, 0, 0);
- this.tableLayoutPanelDestinationStudioVersion.Location = new System.Drawing.Point(12, 78);
- this.tableLayoutPanelDestinationStudioVersion.Name = "tableLayoutPanelDestinationStudioVersion";
- this.tableLayoutPanelDestinationStudioVersion.RowCount = 1;
- this.tableLayoutPanelDestinationStudioVersion.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
- this.tableLayoutPanelDestinationStudioVersion.Size = new System.Drawing.Size(518, 213);
- this.tableLayoutPanelDestinationStudioVersion.TabIndex = 2;
- //
- // panel2
- //
- this.panel2.Controls.Add(this.chkDestinationStudioVersion);
- this.panel2.Dock = System.Windows.Forms.DockStyle.Fill;
- this.panel2.Location = new System.Drawing.Point(262, 3);
- this.panel2.Name = "panel2";
- this.panel2.Size = new System.Drawing.Size(253, 207);
- this.panel2.TabIndex = 2;
- //
- // chkDestinationStudioVersion
- //
- this.chkDestinationStudioVersion.AllColumns.Add(this.destinationStudioVersionColumn);
- this.chkDestinationStudioVersion.CheckBoxes = true;
- this.chkDestinationStudioVersion.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
- this.destinationStudioVersionColumn});
- this.chkDestinationStudioVersion.Cursor = System.Windows.Forms.Cursors.Default;
- this.chkDestinationStudioVersion.Dock = System.Windows.Forms.DockStyle.Fill;
- this.chkDestinationStudioVersion.FullRowSelect = true;
- this.chkDestinationStudioVersion.HasCollapsibleGroups = false;
- this.chkDestinationStudioVersion.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None;
- this.chkDestinationStudioVersion.HideSelection = false;
- this.chkDestinationStudioVersion.Location = new System.Drawing.Point(0, 0);
- this.chkDestinationStudioVersion.Name = "chkDestinationStudioVersion";
- this.chkDestinationStudioVersion.Size = new System.Drawing.Size(253, 207);
- this.chkDestinationStudioVersion.TabIndex = 0;
- this.chkDestinationStudioVersion.UseCompatibleStateImageBehavior = false;
- this.chkDestinationStudioVersion.View = System.Windows.Forms.View.Details;
- //
- // destinationStudioVersionColumn
- //
- this.destinationStudioVersionColumn.AspectName = "";
- this.destinationStudioVersionColumn.CheckBoxes = true;
- this.destinationStudioVersionColumn.FillsFreeSpace = true;
- this.destinationStudioVersionColumn.Groupable = false;
- this.destinationStudioVersionColumn.IsEditable = false;
- this.destinationStudioVersionColumn.Width = 151;
- //
- // label1
- //
- this.label1.Anchor = System.Windows.Forms.AnchorStyles.Left;
- this.label1.AutoSize = true;
- this.label1.Location = new System.Drawing.Point(3, 86);
- this.label1.Name = "label1";
- this.label1.Size = new System.Drawing.Size(253, 40);
- this.label1.TabIndex = 3;
- this.label1.Text = "Select Studio version to which you want to migrate the projects.";
- //
- // fromStudioVersion
- //
- this.fromStudioVersion.Controls.Add(this.tableLayoutSourceStudioVersions);
- this.fromStudioVersion.Description = "Select Studio version from which you want to migrate the projects.";
- this.fromStudioVersion.Location = new System.Drawing.Point(0, 0);
- this.fromStudioVersion.Name = "fromStudioVersion";
- this.fromStudioVersion.Size = new System.Drawing.Size(428, 208);
- this.fromStudioVersion.TabIndex = 11;
- this.fromStudioVersion.Title = "Source Studio version";
- //
- // tableLayoutSourceStudioVersions
- //
- this.tableLayoutSourceStudioVersions.ColumnCount = 2;
- this.tableLayoutSourceStudioVersions.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
- this.tableLayoutSourceStudioVersions.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
- this.tableLayoutSourceStudioVersions.Controls.Add(this.panel1, 1, 0);
- this.tableLayoutSourceStudioVersions.Controls.Add(this.label2, 0, 0);
- this.tableLayoutSourceStudioVersions.Location = new System.Drawing.Point(12, 78);
- this.tableLayoutSourceStudioVersions.Name = "tableLayoutSourceStudioVersions";
- this.tableLayoutSourceStudioVersions.RowCount = 1;
- this.tableLayoutSourceStudioVersions.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
- this.tableLayoutSourceStudioVersions.Size = new System.Drawing.Size(518, 213);
- this.tableLayoutSourceStudioVersions.TabIndex = 1;
- //
- // panel1
- //
- this.panel1.Controls.Add(this.chkSourceStudioVersions);
- this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;
- this.panel1.Location = new System.Drawing.Point(262, 3);
- this.panel1.Name = "panel1";
- this.panel1.Size = new System.Drawing.Size(253, 207);
- this.panel1.TabIndex = 2;
- //
- // chkSourceStudioVersions
- //
- this.chkSourceStudioVersions.AllColumns.Add(this.sourceStudioVersionColumn);
- this.chkSourceStudioVersions.CheckBoxes = true;
- this.chkSourceStudioVersions.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
- this.sourceStudioVersionColumn});
- this.chkSourceStudioVersions.Cursor = System.Windows.Forms.Cursors.Default;
- this.chkSourceStudioVersions.Dock = System.Windows.Forms.DockStyle.Fill;
- this.chkSourceStudioVersions.FullRowSelect = true;
- this.chkSourceStudioVersions.HasCollapsibleGroups = false;
- this.chkSourceStudioVersions.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None;
- this.chkSourceStudioVersions.HideSelection = false;
- this.chkSourceStudioVersions.Location = new System.Drawing.Point(0, 0);
- this.chkSourceStudioVersions.Name = "chkSourceStudioVersions";
- this.chkSourceStudioVersions.Size = new System.Drawing.Size(253, 207);
- this.chkSourceStudioVersions.TabIndex = 0;
- this.chkSourceStudioVersions.UseCompatibleStateImageBehavior = false;
- this.chkSourceStudioVersions.View = System.Windows.Forms.View.Details;
- //
- // sourceStudioVersionColumn
- //
- this.sourceStudioVersionColumn.AspectName = "";
- this.sourceStudioVersionColumn.CheckBoxes = true;
- this.sourceStudioVersionColumn.FillsFreeSpace = true;
- this.sourceStudioVersionColumn.Groupable = false;
- this.sourceStudioVersionColumn.IsEditable = false;
- this.sourceStudioVersionColumn.Width = 151;
- //
- // label2
- //
- this.label2.Anchor = System.Windows.Forms.AnchorStyles.Left;
- this.label2.AutoSize = true;
- this.label2.Location = new System.Drawing.Point(3, 86);
- this.label2.Name = "label2";
- this.label2.Size = new System.Drawing.Size(242, 40);
- this.label2.TabIndex = 3;
- this.label2.Text = "Select Studio version from which you want to migrate the projects.";
- //
- // MigrateUtility
- //
- this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
- this.BackColor = System.Drawing.Color.White;
- this.ClientSize = new System.Drawing.Size(550, 338);
- this.Controls.Add(this.projectMigrationWizzard);
- this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
- this.MaximumSize = new System.Drawing.Size(800, 394);
- this.MinimumSize = new System.Drawing.Size(16, 394);
- this.Name = "MigrateUtility";
- this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
- this.Text = "Studio Migration Utility";
- this.projectMigrationWizzard.ResumeLayout(false);
- this.taskRunnerPage.ResumeLayout(false);
- this.translationMemories.ResumeLayout(false);
- this.tableLayoutPanel2.ResumeLayout(false);
- this.tableLayoutPanel2.PerformLayout();
- this.pluginsPage.ResumeLayout(false);
- this.pluginsTableLayout.ResumeLayout(false);
- this.pluginsTableLayout.PerformLayout();
- ((System.ComponentModel.ISupportInitialize)(this.installedPluginsListView)).EndInit();
- this.moveProjects.ResumeLayout(false);
- this.tableLayoutPanel1.ResumeLayout(false);
- this.tableLayoutPanel1.PerformLayout();
- this.panel3.ResumeLayout(false);
- ((System.ComponentModel.ISupportInitialize)(this.projectsToBeMoved)).EndInit();
- this.toStudioVersion.ResumeLayout(false);
- this.tableLayoutPanelDestinationStudioVersion.ResumeLayout(false);
- this.tableLayoutPanelDestinationStudioVersion.PerformLayout();
- this.panel2.ResumeLayout(false);
- ((System.ComponentModel.ISupportInitialize)(this.chkDestinationStudioVersion)).EndInit();
- this.fromStudioVersion.ResumeLayout(false);
- this.tableLayoutSourceStudioVersions.ResumeLayout(false);
- this.tableLayoutSourceStudioVersions.PerformLayout();
- this.panel1.ResumeLayout(false);
- ((System.ComponentModel.ISupportInitialize)(this.chkSourceStudioVersions)).EndInit();
- this.ResumeLayout(false);
-
- }
-
- #endregion
-
- private CristiPotlog.Controls.Wizard projectMigrationWizzard;
- private Controls.WizardPage welcomePage;
- private Controls.WizardPage moveProjects;
- private Controls.WizardPage toStudioVersion;
- private Controls.WizardPage fromStudioVersion;
- private Controls.WizardPage finalPage;
- private Controls.WizardPage taskRunnerPage;
- private System.Windows.Forms.TableLayoutPanel tableLayoutSourceStudioVersions;
- private System.Windows.Forms.Panel panel1;
- private BrightIdeasSoftware.ObjectListView chkSourceStudioVersions;
- private BrightIdeasSoftware.OLVColumn sourceStudioVersionColumn;
- private System.Windows.Forms.Label label2;
- private System.Windows.Forms.TableLayoutPanel tableLayoutPanelDestinationStudioVersion;
- private System.Windows.Forms.Panel panel2;
- private BrightIdeasSoftware.ObjectListView chkDestinationStudioVersion;
- private BrightIdeasSoftware.OLVColumn destinationStudioVersionColumn;
- private System.Windows.Forms.Label label1;
- private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
- private System.Windows.Forms.Panel panel3;
- private BrightIdeasSoftware.ObjectListView projectsToBeMoved;
- private BrightIdeasSoftware.OLVColumn projectsNameColumn;
- private System.Windows.Forms.Label label3;
- private Controls.WizardPage translationMemories;
- private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2;
- private System.Windows.Forms.Label label4;
- private System.Windows.Forms.CheckBox chkTranslationMemories;
- private System.Windows.Forms.Label labelProgress;
- private System.Windows.Forms.ProgressBar progressLongTask;
- private System.Windows.Forms.Label label5;
- private System.Windows.Forms.CheckBox chkCustomers;
- private Controls.WizardPage pluginsPage;
- private System.Windows.Forms.TableLayoutPanel pluginsTableLayout;
- private BrightIdeasSoftware.ObjectListView installedPluginsListView;
- private System.Windows.Forms.Label descriptionLabel;
- private BrightIdeasSoftware.OLVColumn pluginsColumn;
- }
-}
-
diff --git a/Studio Migration Utility/Sdl.Community.StudioMigrationUtility/MigrateProjects.cs b/Studio Migration Utility/Sdl.Community.StudioMigrationUtility/MigrateProjects.cs
deleted file mode 100644
index d877eb2594..0000000000
--- a/Studio Migration Utility/Sdl.Community.StudioMigrationUtility/MigrateProjects.cs
+++ /dev/null
@@ -1,507 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Drawing;
-using System.IO;
-using System.Linq;
-using System.Reflection;
-using System.Windows.Forms;
-using BrightIdeasSoftware;
-using Sdl.Community.Controls;
-using Sdl.Community.StudioMigrationUtility.Model;
-using Sdl.Community.StudioMigrationUtility.Properties;
-using Sdl.Community.StudioMigrationUtility.Services;
-using Sdl.TranslationStudioAutomation.IntegrationApi;
-using Sdl.Versioning;
-
-namespace Sdl.Community.StudioMigrationUtility
-{
- public partial class MigrateUtility : Form
- {
- private readonly StudioVersionService _studioVersionService;
- private BackgroundWorker _bw;
- private List _projects=new List();
- private List _pluginsToBeMigrated = new List();
- public MigrateUtility(StudioVersionService studioVersionService)
- {
- InitializeComponent();
-
- _studioVersionService = studioVersionService;
- }
-
- public ProjectsController GetProjectsController()
- {
- return SdlTradosStudio.Application.GetController();
- }
-
- protected override void OnLoad(EventArgs e)
- {
- base.OnLoad(e);
- var installedStudioVersions = _studioVersionService.GetInstalledStudioVersions();
-
- Closing += MigrateUtility_Closing;
-
- sourceStudioVersionColumn.AspectGetter = delegate(object rowObject)
- {
- var studioVersion = (StudioVersion) rowObject;
- return string.Format("{0} - {1}", studioVersion.PublicVersion, studioVersion.ExecutableVersion);
- };
-
- chkSourceStudioVersions.SetObjects(installedStudioVersions);
-
- destinationStudioVersionColumn.AspectGetter = delegate(object rowObject)
- {
- var studioVersion = (StudioVersion) rowObject;
- return string.Format("{0} - {1}", studioVersion.PublicVersion, studioVersion.ExecutableVersion);
- };
-
- chkDestinationStudioVersion.SetObjects(installedStudioVersions);
-
- projectsNameColumn.AspectGetter = delegate(object rowObject)
- {
- var project = (Project)rowObject;
- return project.Name;
- };
-
- pluginsColumn.AspectGetter = delegate(object rowObject)
- {
- var plugin = (Model.PluginInfo) rowObject;
- return plugin.PluginName;
- };
- _bw = new BackgroundWorker { WorkerSupportsCancellation = true, WorkerReportsProgress = true };
- _bw.ProgressChanged += _bw_ProgressChanged;
- _bw.DoWork += _bw_DoWork;
- _bw.RunWorkerCompleted += _bw_RunWorkerCompleted;
-
- installedPluginsListView.CellToolTipShowing += InstalledPluginsListView_CellToolTipShowing;
- }
-
- private void InstalledPluginsListView_CellToolTipShowing(object sender, ToolTipShowingEventArgs e)
- {
- var index = ((ObjectListView)sender).HotRowIndex;
- var plugin = _pluginsToBeMigrated[index];
- e.Text = plugin.PluginName;
- }
-
- private void MigrateUtility_Closing(object sender, CancelEventArgs e)
- {
- var controllerProjects = GetProjectsController().GetProjects().ToList();
-
- if (_projects.Count > 0)
- {
- foreach (var project in _projects)
- {
- var exist = controllerProjects.Any(p => p.FilePath.Contains(project.Name));
- if (!exist)
- {
- GetProjectsController().Add(project.ProjectFilePath);
- }
-
- }
- GetProjectsController().RefreshProjects();
- }
- GetProjectsController().RefreshProjects();
-
- }
-
- private void projectMigrationWizzard_BeforeSwitchPages(object sender,
- CristiPotlog.Controls.Wizard.BeforeSwitchPagesEventArgs e)
- {
- // get wizard page already displayed
- WizardPage oldPage = projectMigrationWizzard.Pages[e.OldIndex];
-
- // check if we're going forward from options page
- if (oldPage == fromStudioVersion && e.NewIndex > e.OldIndex)
- {
- var selectedStudioVersionsGeneric = chkSourceStudioVersions.CheckedObjects;
- if (selectedStudioVersionsGeneric.Count == 0)
- {
- MessageBox.Show(this,
- Resources
- .MigrateProjects_projectMigrationWizzard_BeforeSwitchPages_Please_select_a_Studio_version_,
- Resources.MigrateProjects_projectMigrationWizzard_BeforeSwitchPages_Select_a_studio_version,
- MessageBoxButtons.OK);
- e.Cancel = true;
- return;
- }
- if (selectedStudioVersionsGeneric.Count > 1)
- {
- MessageBox.Show(this,
- Resources
- .MigrateProjects_projectMigrationWizzard_BeforeSwitchPages_Please_select_only_one_version,
- Resources.MigrateProjects_projectMigrationWizzard_BeforeSwitchPages_Only_one_version
- , MessageBoxButtons.OK);
- e.Cancel = true;
- return;
- }
-
-
- }
-
- if (oldPage == toStudioVersion && e.NewIndex > e.OldIndex)
- {
-
- var selectedDestinationStudioVersionsGeneric = chkDestinationStudioVersion.CheckedObjects;
- if (selectedDestinationStudioVersionsGeneric.Count == 0)
- {
- MessageBox.Show(this,
- Resources
- .MigrateProjects_projectMigrationWizzard_BeforeSwitchPages_Please_select_a_Studio_version_,
- Resources.MigrateProjects_projectMigrationWizzard_BeforeSwitchPages_Select_a_studio_version,
- MessageBoxButtons.OK);
- e.Cancel = true;
- return;
- }
- if (selectedDestinationStudioVersionsGeneric.Count > 1)
- {
- MessageBox.Show(this,
- Resources
- .MigrateProjects_projectMigrationWizzard_BeforeSwitchPages_Please_select_only_one_version,
- Resources.MigrateProjects_projectMigrationWizzard_BeforeSwitchPages_Only_one_version
- , MessageBoxButtons.OK);
- e.Cancel = true;
- return;
- }
- var selectedSourceStudioVersionsGeneric = chkSourceStudioVersions.CheckedObjects;
- var destinationStudioVersion = (StudioVersion) selectedDestinationStudioVersionsGeneric[0];
- var sourceStudioVersion = (StudioVersion) selectedSourceStudioVersionsGeneric[0];
-
- if (destinationStudioVersion.Equals(selectedSourceStudioVersionsGeneric[0]))
- {
- MessageBox.Show(this,
- string.Format("Destination version ({0}) must be different than the source version ({1})",
- destinationStudioVersion.PublicVersion, sourceStudioVersion.PublicVersion),
- Resources.MigrateProjects_projectMigrationWizzard_BeforeSwitchPages_Same_version
- , MessageBoxButtons.OK);
- e.Cancel = true;
- return;
- }
-
- var migrateProjects = new MigrateProjectsService(sourceStudioVersion,
- destinationStudioVersion);
-
- var selectAllProjects = new Project {Name = "Select all projects"};
-
- var projects = migrateProjects.GetProjectsToBeMigrated();
-
- if (projects.Count != 0 && projects.Count != 1)
- {
- projects.Insert(0, selectAllProjects);
- }
-
-
- projectsToBeMoved.SetObjects(projects);
-
- foreach (OLVListItem item in from OLVListItem item in projectsToBeMoved.Items
- let project = (Project) item.RowObject
- where !Path.IsPathRooted(project.ProjectFilePath)
- select item)
- {
- if (item.Text != @"Select all projects")
- {
- item.Checked = true;
- }
-
- }
-
- projectsToBeMoved.ItemChecked += ProjectsToBeMoved_ItemChecked;
-
- if (projectsToBeMoved.Items.Count > 0)
- {
- if (projectsToBeMoved.Items[0].Text == @"Select all projects")
- {
- projectsToBeMoved.Items[0].ForeColor = ColorTranslator.FromHtml("#6887B2");
- projectsToBeMoved.Items[0].Font = new Font(projectsToBeMoved.Items[0].Font, FontStyle.Bold);
-
- }
- }
-
- }
-
-
- #region Plugins page
- if (oldPage == moveProjects && e.NewIndex > e.OldIndex)
- {
-
- //call Sdl.Community.PluginInfo.dll in order to get the plugin name
- var currentAssembly = Assembly.GetAssembly(typeof(MigrateProjectsService));
- var path = Path.GetDirectoryName(currentAssembly.Location);
- if (path != null)
- {
- var pluginInfoDll = Assembly.LoadFrom(Path.Combine(path, "Sdl.Community.PluginInfo"));
- var type = pluginInfoDll.GetType("Sdl.Community.PluginInfo.PluginPackageInfo");
-
- var selectedSourceStudioVersionsGeneric = chkSourceStudioVersions.CheckedObjects;
- var sourceStudioVersion = (StudioVersion)selectedSourceStudioVersionsGeneric[0];
-
- var selectedDestinationStudioVersionsGeneric = chkDestinationStudioVersion.CheckedObjects;
- var destinationStudioVersion = (StudioVersion)selectedDestinationStudioVersionsGeneric[0];
-
- //get plugins list for source selected studio version
- var sourcePluginsList = GetInstallledPluginsForSpecificStudioVersion(sourceStudioVersion);
-
- //get plugins list for destination selected studio version
- var destinationPluginsPathList = GetInstallledPluginsForSpecificStudioVersion(destinationStudioVersion);
-
- //check if there are any plugins to be migrated for selected verions
- var pluginsList =
- sourcePluginsList.Where(p => destinationPluginsPathList.All(d => d.PluginName != p.PluginName));
-
- //call "GetPluginName" method in order to get the plugin name
- var method = type.GetMethod("GetPluginName");
- var constructor = type.GetConstructor(
- BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic,
- null, Type.EmptyTypes, null);
- var instance = constructor.Invoke(new object[] { });
-
- foreach (var plugin in pluginsList)
- {
- var name = method.Invoke(instance, new object[] { plugin.Path });
- var pluginToBeMoved = new Model.PluginInfo
- {
- Path = plugin.Path,
- PluginName = name as string
- };
-
- if (!_pluginsToBeMigrated.Exists(p => p.PluginName == pluginToBeMoved.PluginName))
- {
- _pluginsToBeMigrated.Add(pluginToBeMoved);
- }
-
- }
- }
-
- var selectAllPlugins = new Model.PluginInfo
- {
- PluginName = "Select all plugins"
- };
-
- if (_pluginsToBeMigrated.Count > 1&&!_pluginsToBeMigrated.Exists(p => p.PluginName == selectAllPlugins.PluginName))
- {
- _pluginsToBeMigrated.Insert(0,selectAllPlugins);
- }
-
- installedPluginsListView.SetObjects(_pluginsToBeMigrated);
-
-
- installedPluginsListView.ItemChecked += InstalledPluginsListView_ItemChecked;
-
- if (installedPluginsListView.Items.Count > 0)
- {
- if (installedPluginsListView.Items[0].Text == @"Select all plugins")
- {
- installedPluginsListView.Items[0].ForeColor = ColorTranslator.FromHtml("#6887B2");
- installedPluginsListView.Items[0].Font = new Font(installedPluginsListView.Items[0].Font, FontStyle.Bold);
- }
- }
- }
- #endregion
- }
-
- private void InstalledPluginsListView_ItemChecked(object sender, ItemCheckedEventArgs e)
- {
- var selectedItem = e.Item;
-
- if (selectedItem.Text.Equals("Select all plugins") && selectedItem.Checked)
- {
- SelectPlugins(true);
- }else if(selectedItem.Text.Equals("Select all plugins") && !selectedItem.Checked)
- {
- SelectPlugins(false);
- }
- }
-
- private void SelectPlugins(bool check)
- {
- foreach (var plugin in installedPluginsListView.Items)
- {
- ((OLVListItem)plugin).Checked = check;
- }
- }
- private List GetInstallledPluginsForSpecificStudioVersion(StudioVersion studioVersion)
- {
- var pluginService = new PluginService();
-
- var pluginsList = new List();
- foreach (var path in pluginService.GetInstalledPlugins(studioVersion))
- {
- var plugin = new Model.PluginInfo
- {
- Path = path,
- PluginName = Path.GetFileNameWithoutExtension(path)
- };
- pluginsList.Add(plugin);
- }
-
- return pluginsList;
- }
-
- private void ProjectsToBeMoved_ItemChecked(object sender, ItemCheckedEventArgs e)
- {
- var selectedItem = e.Item;
-
- if (selectedItem.Text.Equals("Select all projects")&&selectedItem.Checked)
- {
- SelectProjects(true);
- }else if (selectedItem.Text.Equals("Select all projects") && !selectedItem.Checked)
- {
- SelectProjects(false);
- }
-
- }
-
- private void SelectProjects(bool check)
- {
- foreach (var item in projectsToBeMoved.Items)
- {
- ((OLVListItem)item).Checked = check;
- }
- }
-
- private void projectMigrationWizzard_AfterSwitchPages(object sender, CristiPotlog.Controls.Wizard.AfterSwitchPagesEventArgs e)
- {
- // get wizard page to be displayed
- WizardPage newPage = projectMigrationWizzard.Pages[e.NewIndex];
- var selectedSourceStudioVersionsGeneric = chkSourceStudioVersions.CheckedObjects;
- var sourceStudioVersion= new StudioVersion();
- var destinationStudioVersion = new StudioVersion();
- var skipPluginsPage=true;
-
- if (selectedSourceStudioVersionsGeneric.Count > 0)
- {
- sourceStudioVersion = (StudioVersion)selectedSourceStudioVersionsGeneric[0];
- }
-
- var selectedDestinationStudioVersionsGeneric = chkDestinationStudioVersion.CheckedObjects;
- if (selectedDestinationStudioVersionsGeneric.Count > 0)
- {
- destinationStudioVersion = (StudioVersion)selectedDestinationStudioVersionsGeneric[0];
- }
-
- if (destinationStudioVersion.Version != null && (sourceStudioVersion.Version != null && (sourceStudioVersion.Version.Equals("Studio4") && destinationStudioVersion.Version.Equals("Studio5"))))
- {
- skipPluginsPage = false;
- }
-
- if (newPage == taskRunnerPage)
- {
- StartTask();
- }
- //this will skip the plugins page if selected versions are different from 2015-2017
- if (newPage == pluginsPage && e.OldIndex==3&&skipPluginsPage)
- {
- projectMigrationWizzard.Next();
-
- }
- if (newPage == pluginsPage && e.OldIndex == 5&&skipPluginsPage)
- {
- projectMigrationWizzard.Back();
-
- }
- }
-
- private void StartTask()
- {
- progressLongTask.Value = progressLongTask.Minimum;
- projectMigrationWizzard.NextEnabled = false;
- projectMigrationWizzard.BackEnabled = false;
-
- var selectedDestinationStudioVersionsGeneric = chkDestinationStudioVersion.CheckedObjects;
- var selectedSourceStudioVersionsGeneric = chkSourceStudioVersions.CheckedObjects;
- var selectedProjectsToBeMoved = projectsToBeMoved.CheckedObjects;
- var projects = projectsToBeMoved.Objects;
- var selectedPluginsToBeMoved = installedPluginsListView.CheckedObjects;
-
- var taskArgument = new TaskArgument
- {
- Projects = projects.Cast().ToList(),
- ProjectToBeMoved = selectedProjectsToBeMoved.Cast().ToList(),
- DestinationStudioVersion = (StudioVersion) selectedDestinationStudioVersionsGeneric[0],
- SourceStudioVersion = (StudioVersion) selectedSourceStudioVersionsGeneric[0],
- MigrateTranslationMemories = chkTranslationMemories.Checked,
- MigrateCustomers = chkCustomers.Checked,
- PluginsToBeMoved = selectedPluginsToBeMoved.Cast().ToList()
- };
-
- _bw.RunWorkerAsync(taskArgument);
- }
-
- void _bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
- {
- projectMigrationWizzard.NextEnabled =true;
- projectMigrationWizzard.BackEnabled = true;
- if (e.Cancelled)
- {
- projectMigrationWizzard.Back();
- }
- else
- {
- projectMigrationWizzard.Next();
- }
-
- }
-
- void _bw_DoWork(object sender, DoWorkEventArgs e)
- {
- if (e.Argument == null) return;
-
- var taskArgument = (TaskArgument)e.Argument;
-
-
- var mpService = new MigrateProjectsService(taskArgument.SourceStudioVersion, taskArgument.DestinationStudioVersion);
-
- //remove the Select al project object which coresponds with to the first line in the list view
- var selectAllProjectsObj = taskArgument.Projects.FirstOrDefault(s => s.Name == @"Select all projects");
- if (selectAllProjectsObj != null)
- {
- taskArgument.Projects.Remove(selectAllProjectsObj);
- }
-
- var selectAllProj = taskArgument.ProjectToBeMoved.FirstOrDefault(s => s.Name == @"Select all projects");
- if (selectAllProj != null)
- {
- taskArgument.ProjectToBeMoved.Remove(selectAllProj);
- }
- _projects = taskArgument.ProjectToBeMoved;
-
- mpService.MigrateProjects(taskArgument.Projects, taskArgument.ProjectToBeMoved, taskArgument.MigrateCustomers, _bw.ReportProgress);
- _bw.ReportProgress(95);
-
- if (taskArgument.MigrateTranslationMemories)
- {
- mpService.MigrateTranslationMemories();
- }
-
- if (taskArgument.PluginsToBeMoved.Count > 0)
- {
- var selectAllPlugins = taskArgument.PluginsToBeMoved.FirstOrDefault(s => s.PluginName == @"Select all plugins");
- if (selectAllPlugins != null)
- {
- taskArgument.PluginsToBeMoved.Remove(selectAllPlugins);
- }
- MovePlugins(taskArgument.PluginsToBeMoved, taskArgument.SourceStudioVersion.ExecutableVersion.Major);
- }
-
- _bw.ReportProgress(100);
-
- }
-
- private void MovePlugins(List pluginsToBeMoved,int sourceStudioVersion)
- {
- var selectedDestinationStudioVersionsGeneric = chkDestinationStudioVersion.CheckedObjects;
- var destinationStudioVersion = (StudioVersion)selectedDestinationStudioVersionsGeneric[0];
-
- var majorVersion = destinationStudioVersion.ExecutableVersion.Major;
-
- foreach (var plugin in pluginsToBeMoved)
- {
- var destinationPath = plugin.Path.Replace(sourceStudioVersion.ToString(), majorVersion.ToString());
- File.Copy(plugin.Path,destinationPath,true);
- }
- }
- void _bw_ProgressChanged(object sender, ProgressChangedEventArgs e)
- {
- progressLongTask.Value = e.ProgressPercentage;
- }
- }
-}
diff --git a/Studio Migration Utility/Sdl.Community.StudioMigrationUtility/MigrateProjects.resx b/Studio Migration Utility/Sdl.Community.StudioMigrationUtility/MigrateProjects.resx
deleted file mode 100644
index 71e4e4bb8a..0000000000
--- a/Studio Migration Utility/Sdl.Community.StudioMigrationUtility/MigrateProjects.resx
+++ /dev/null
@@ -1,1886 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- text/microsoft-resx
-
-
- 2.0
-
-
- System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- Selecting this option will result in all Translation Memories and Language Resource Templates listed in the Translation Memories View being recreated in the application you are migrating to. The actual Translation Memories and Language resource Templates will not be moved, they will remain in the same location they are now.
-
-
- All selected projects will be migrated to the version of Studio selected in the previous steps. Projects already selected are those that have been created in the default Studio location. You can add/remove as you wish.
-
-
-
-
- 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
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAOfn5wvh4eEr4uLiLOLi4izi4uIs4uLiLOLi4izi4uIs4uLiLOLi4izi4uIs4uLiLOLi4izi
- 4uIs4uLiLOLi4izi4uIs4uLiLOLi4izi4uIs4eHhGgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAA39/fGOHh4eLj4+Om4+PjnOPj45zj4+Oc4+PjnOPj45zj4+Oc4+PjnOPj45zj
- 4+Oc4+PjnOPj45zj4+Oc4+PjnOPj45zj4+Oc4+PjnOPj45zj4+Oe4+Pj5+Tk5FYAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4+PjUuPj45MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4+PjVOPj46UA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4+PjVOPj44QAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- 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
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4+PjVOPj44Tp5OQ66OTkROjk5ETo
- 5ORE6OTkROjk5ETo5ORE6OTkROjk5ETo5ORE6OTkROjk5ETo5ORE6OTkROjk5ETo5ORE6OTkROjk5ETi
- 4uIb5OTkROPj46gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADCwsScwcHEYAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4+PjVOPj44Tp
- 5eVH6ebmVOnm5lTp5uZU6ebmVOnm5lTp5uZU6ebmVOnm5lTp5uZU6ebmVOnm5lTp5uZU6ebmVOnm5lTp
- 5uZU6ebmVOnm5lTn5+cg5OTkROPj46gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADC
- wsScwcHEYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAA4+PjVOPj44QAAAAAAAAAAMzMzAXl5eUU5eXlFOXl5RTl5eUU5eXlFOXl5RTl5eUU5eXlFOXl5RTl
- 5eUU5eXlFOXl5RTl5eUU5eXlFOXl5RTn5+cW4+PjlOPj46gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAADCwsScwcHEYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAA4+PjVOPj47ri4uJI4uLiSOPj44rj4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j
- 4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj46gAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAADCwsScwcHEYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4eHhTuPj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j
- 4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/7XEe//Gys3/c3/k/5XZ5f+x3eX/4+Pj/+Li4qEA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADCwsScwcHEYAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5+fnC+Pj48Lj4+P34+Pj+OPj4/jj
- 4+P44+Pj+OPj4/jj4+P44+Pj+OPj4/jj4+P44+Pj+OPj4/jj4+P44+Pj+OLi4Pjj4+P43+Dj+ODj5Pji
- 4+P44+Pj5eTk5DkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADCwsScwcHEYAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMLCxIPB
- wcLywsLC7MLCxFwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAMTExCPDw8Tvw8PE4r+/vwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxMTEJ8XFxUwA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAADDw8OJw8PDVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/
- //8CwsLC08PDw+/IyMgOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAADCwsJdwsLD+MPDxPTDw8OKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4+PjZeHh4dnh
- 4eHI4eHhyOHh4cjh4eHI4eHhyOHh4cjh4eHI4eHhyOHh4cjh4eHI4eHhyOHh4cjh4eHI4eHhyOHh4cjh
- 4eHI4eHhyOHh4cjj4+Pb4uLifQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMzMwKwcHFdMLCxai7u8wPAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAA4+Pj3+Li4hsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAADl5eUU4+Pj79TU1AYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwcHEYMLCxJwAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAA4eHh2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4+Pj3Onp6QwAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwcHEYMLCxJwA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4eHh2Orm5j7o5uaI6ObmiOjm5ojo5uaI6ObmiOjm5ojo
- 5uaI6ObmiOjm5ojo5uaI6OjoLT3Z/aI+2f24Ptn9uD7Z/bg+2f24Ptn9uELZ/hsAAAAA4+Pj3Onp6QwA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAwcHEYMLCxJwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4eHh2Onk5DDo5uZo6ObmaOjm5mjo
- 5uZo6ObmaOjm5mjo5uZo6ObmaOjm5mjo5uZo6enpIz3a/eQ+2v//Ptr//z7a//8+2v//Ptr//z/Y/ygA
- AAAA4+Pj3Onp6QwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAwcHEYMLCxJwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4eHh2Ofn5yHo
- 5ORD6OTkQ+jk5EPo5ORD6OTkQ+jk5EPo5ORD6OTkQ+jk5EPo5ORD6enpGD3a/eQ+2v//Ptr//z7a//8+
- 2v//Ptr//z/Y/ygAAAAA4+Pj3Onp6QwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwcHEYMLCxJwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAA4eHh2Ofn5yzp5+dg6efnYOnn52Dp5+dg6efnYOnn52Dp5+dg6efnYOnn52Dp5+dg5+fnID3a/eQ+
- 2v//Ptr//z7a//8+2v//Ptr//z/Y/ygAAAAA4+Pj3Onp6QwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwcHEYMLCxJwAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAA4eHh2Orm5j7o5uaI6ObmiOjm5ojo5uaI6ObmiOjm5ojo5uaI6ObmiOjm5ojo
- 5uaI6OjoLTza/a0+2v3EPtr9xD7a/cQ+2v3EPtr9xD3b/h0AAAAA4+Pj3Onp6QwAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwcHEYMLCxJwA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4eHh2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4+Pj3Onp6QwA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAwcHEYMLCxJwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4eHh2AAAAACt4jWQrOI3sKziN7Cs
- 4jewrOI3sKziN7Cp4jgk6ObmiOjm5ojo5uaI6ObmiOjm5ojo5uaI6ObmiOjm5ojo5uaI6ObmiOnn52sA
- AAAA4+Pj3Onp6QwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAwsLCXcPDxO/BwcTUwcHE1MHBxNTBwcTUwcHE1MHBxNTFxcU14eHh2AAAAACt
- 4jfUreI3/63iN/+t4jf/reI3/63iN/+t4zY46ebmdOnm5nTp5uZ06ebmdOnm5nTp5uZ06ebmdOnm5nTp
- 5uZ06ebmdOjl5VsAAAAA4+Pj3Onp6QwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1NTUBsXFxSjFxcUoxcXFKMXFxSjFxcUoxcXFKMXFxSi/
- v78E4eHh2AAAAACt4jfUreI3/63iN/+t4jf/reI3/63iN/+t4zY45ubmSObm5kjm5uZI5ubmSObm5kjm
- 5uZI5ubmSObm5kjm5uZI5ubmSOjk5DkAAAAA4+Pj3Onp6QwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAA4eHh2AAAAACt4jfUreI3/63iN/+t4jf/reI3/63iN/+t4zY46ebmVOnm5lTp
- 5uZU6ebmVOnm5lTp5uZU6ebmVOnm5lTp5uZU6ebmVOfn50IAAAAA4+Pj3Onp6QwAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4eHh2AAAAACs4DWnrOI3zKziN8ys4jfMrOI3zKziN8yr
- 4TUr6ObmiOjm5ojo5uaI6ObmiOjm5ojo5uaI6ObmiOjm5ojo5uaI6ObmiOnn52sAAAAA4+Pj3Onp6QwA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4eHh2AAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADf
- 398Q4+Pj8Onp6QwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4uLi4OTk5BPf
- 398I3d3dD+Pj48Pj4+PU4+Pj1OPj49Tj4+PU4+Pj1OPj49Tj4+PU4+Pj1OPj49Tj4+PU4+Pj1OPj49Tj
- 4+PU4+Pj1OPj49Tj4+Pt4+Pj/+np6QwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAA4eHh6+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j
- 4+P/1NnB/8bQov+Ol+P/w9Lk/4/X5f/j4+P/4+Pj/+Xl5QoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAA4+PjpePj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j
- 4+P/4+Pj/+Pj4//j4+P/3+DZ/9nczP/EyOP/3ODk/8Xf5P/j4+P/4+PjwgAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AuXl5TLj4+M44+PjOOPj4zjj4+M44+PjOOPj4zjj
- 4+M44+PjOOPj4zjj4+M44+PjOOPj4zjj4+M44+PjOOPj4zjj4+M44+PjOOPj4zji4uI11NTUBgAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP//////
- /wAA////////AAD4AAA///8AAPAAAB///wAA8///n///AADz//+f//8AAPAAAJ///wAA8AAAn///AADw
- AACf//8AAPAAAJ///wAA8AAAn///AADz//+YA/8AAPAAABgD/wAA8AAAH/P/AADwAAAf8/8AAPAAAB/z
- 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
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4uLikQAAAADi4uIS4eHhYOHh4WDh
- 4eFg4eHhYOHh4WDh4eFg4eHhYOHh4WDh4eFg4eHhYOLi4m3i4uK8AAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAwsLCqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADj4+Pc4eHh2OPj4+bj
- 4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/ztW0/7S62/+00+T/zeDk/+Pj48EAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAADCwsKoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOTk5F/j
- 4+Oo4+PjqOPj46jj4+Oo4+PjqOPj46jj4+Oo4+PjqOPj46ji4t+p39/iqd/f4qng4+On4+PjSQAAAAAA
- AAAAAAAAAAAAAAAAAAAAwcHBGcLCwr7ExMQnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMUxwcHC9sHBxGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL+/vwTExMSUAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADDw8Vm////AQAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAw8PDecPDxPfBwcVCAAAAAAAAAAAA
- AAAA39/fCOPj44Tj4+OE4+PjhOPj44Tj4+OE4+PjhOPj44Tj4+OE4+PjhOPj44Tj4+OE4+PjhOPj44Tj
- 4+OJ2traDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADExMQNwsLCsL+/vwgA
- AAAAAAAAAAAAAADh4eFF4uLiWgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- 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
- /AAD//wAA///////////KAAAAIAAAAAAAQAAAQAgAAAAAAAAAAEAEwsAABMLAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAADl5eU74+PjpuPj48rj4+PM4+PjzOPj48zj4+PM4+PjzOPj48zj4+PM4+PjzOPj48zj
- 4+PM4+PjzOPj48zj4+PM4+PjzOPj48zj4+PM4+PjzOPj48zj4+PM4+PjzOPj48zj4+PM4+PjzOPj48zj
- 4+PM4+PjzOPj48zj4+PM4+PjzOPj48zj4+PM4+PjzOPj48zj4+PM4+PjzOPj48zj4+PM4+PjzOPj48zj
- 4+PM4+PjzOPj48zj4+PM4+PjzOPj48zj4+PM4+PjzOPj48zj4+PM4+PjzOPj48Lj4+OB39/fEAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4uLiZOHh4f3j4+P/4+Pj/+Pj4//j
- 4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j
- 4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j
- 4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j
- 4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+Pc39/fGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAOLi4hvj4+P44+Pj/+Hh4fvj4+OT4+PjUuTk5Ezk5ORM5OTkTOTk5Ezk5ORM5OTkTOTk5Ezk
- 5ORM5OTkTOTk5Ezk5ORM5OTkTOTk5Ezk5ORM5OTkTOTk5Ezk5ORM5OTkTOTk5Ezk5ORM5OTkTOTk5Ezk
- 5ORM5OTkTOTk5Ezk5ORM5OTkTOTk5Ezk5ORM5OTkTOTk5Ezk5ORM5OTkTOTk5Ezk5ORM5OTkTOTk5Ezk
- 5ORM5OTkTOTk5Ezk5ORM5OTkTOTk5Ezk5ORM5OTkTOTk5Ezk5ORM5OTkTOPj42/j4+Pf4+Pj/+Pj4//j
- 4+OmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4uLia+Pj4//j4+P/4uLiWAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAOTk5BPh4eHh4+Pj/+Pj4/jMzMwFAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAADj4+OD4+Pj/+Hh4dgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOPj43fj
- 4+P/4+Pj/+fn5xYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOPj44Tj4+P/4uLivAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4uLiWOPj4//j4+P/39/fGAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAA4+PjhOPj4//i4uK8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADi
- 4uJY4+Pj/+Pj4//f398YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADj4+OE4+Pj/+Li4rwA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLi4ljj4+P/4+Pj/9/f3xgAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAOPj44Tj4+P/4uLivAAAAADs7OwO6enpGOnp6Rjp6ekY6enpGOnp6Rjp
- 6ekY6enpGOnp6Rjp6ekY6enpGOnp6Rjp6ekY6enpGOnp6Rjp6ekY6enpGOnp6Rjp6ekY6enpGOnp6Rjp
- 6ekY6enpGOnp6Rjp6ekY6enpGOnp6Rjp6ekY6enpGP///wUAAAAAwXs2Ib9/M0C/fzNAv38zQL9/M0C/
- fzNAv38zQL9/M0C/fzNAv38zQL9/M0C/fzNAv38zQL9/M0C/fzNAv38zQMx/MwoAAAAAAAAAAAAAAAAA
- AAAA4uLiWOPj4//j4+P/39/fGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4+PjhOPj4//i
- 4uK8AAAAAOjl5ZTp5+f/6efn/+nn5//p5+f/6efn/+nn5//p5+f/6efn/+nn5//p5+f/6efn/+nn5//p
- 5+f/6efn/+nn5//p5+f/6efn/+nn5//p5+f/6efn/+nn5//p5+f/6efn/+nn5//p5+f/6efn/+nn5//p
- 5+f/5+fnLAAAAADBfzG+wX8z/8F/M//BfzP/wX8z/8F/M//BfzP/wX8z/8F/M//BfzP/wX8z/8F/M//B
- fzP/wX8z/8F/M//BfzP/wH80YgAAAAAAAAAAAAAAAAAAAADi4uJY4+Pj/+Pj4//f398YAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAADj4+OE4+Pj/+Li4rwAAAAA6uTkMenm5lTp5uZU6ebmVOnm5lTp
- 5uZU6ebmVOnm5lTp5uZU6ebmVOnm5lTp5uZU6ebmVOnm5lTp5uZU6ebmVOnm5lTp5uZU6ebmVOnm5lTp
- 5uZU6ebmVOnm5lTp5uZU6ebmVOnm5lTp5uZU6ebmVOnm5lTu7u4PAAAAAMB/MsDBfzP/wX8z/8F/M//B
- fzP/wX8z/8F/M//BfzP/wX8z/8F/M//BfzP/wX8z/8F/M//BfzP/wX8z/8F/M//BfzJkAAAAAAAAAAAA
- AAAAAAAAAOLi4ljj4+P/4+Pj/9/f3xgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOPj44Tj
- 4+P/4uLivAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAwH8ywMF/M//BfzP/wX8z/8F/M//BfzP/wX8z/8F/M//BfzP/wX8z/8F/M//B
- fzP/wX8z/8F/M//BfzP/wX8z/8F/MmQAAAAAAAAAAAAAAAAAAAAA4uLiWOPj4//j4+P/39/fGAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4+PjhOPj4//i4uK8AAAAAOjo6G/o5+fA6OfnwOjn58Do
- 5+fA6OfnwOjn58Do5+fA6OfnwOjn58Do5+fA6OfnwOjn58Do5+fA6OfnwOjn58Do5+fA6OfnwOjn58Do
- 5+fA6OfnwOjn58Do5+fA6OfnwOjn58Do5+fA6OfnwOjn58Do5+fA5+fnIQAAAADAfzLAwX8z/8F/M//B
- fzP/wX8z/8F/M//BfzP/wX8z/8F/M//BfzP/wX8z/8F/M//BfzP/wX8z/8F/M//BfzP/wX8yZAAAAAAA
- AAAAAAAAAAAAAADi4uJY4+Pj/+Pj4//f398YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADj
- 4+OE4+Pj/+Li4rwAAAAA6OjoZOfn56zn5+es5+fnrOfn56zn5+es5+fnrOfn56zn5+es5+fnrOfn56zn
- 5+es5+fnrOfn56zn5+es5+fnrOfn56zn5+es5+fnrOfn56zn5+es5+fnrOfn56zn5+es5+fnrOfn56zn
- 5+es5+fnrOfn56zl5eUeAAAAAMB/MsDBfzP/wX8z/8F/M//BfzP/wX8z/8F/M//BfzP/wX8z/8F/M//B
- fzP/wX8z/8F/M//BfzP/wX8z/8F/M//BfzJkAAAAAAAAAAAAAAAAAAAAAOLi4ljj4+P/4+Pj/9/f3xgA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOPj44Tj4+P/4uLivAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwH8ywMF/M//B
- fzP/wX8z/8F/M//BfzP/wX8z/8F/M//BfzP/wX8z/8F/M//BfzP/wX8z/8F/M//BfzP/wX8z/8F/MmQA
- AAAAAAAAAAAAAAAAAAAA4uLiWOPj4//j4+P/39/fGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAA4+PjhOPj4//i4uK8AAAAAOrm5j/p5+ds6efnbOnn52zp5+ds6efnbOnn52zp5+ds6efnbOnn52zp
- 5+ds6efnbOnn52zp5+ds6efnbOnn52zp5+ds6efnbOnn52zp5+ds6efnbOnn52zp5+ds6efnbOnn52zp
- 5+ds6efnbOnn52zp5+ds5OTkEwAAAADAfzLAwX8z/8F/M//BfzP/wX8z/8F/M//BfzP/wX8z/8F/M//B
- fzP/wX8z/8F/M//BfzP/wX8z/8F/M//BfzP/wX8yZAAAAAAAAAAAAAAAAAAAAADi4uJY4+Pj/+Pj4//f
- 398YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADj4+OE4+Pj/+Li4rwAAAAA6OXllOnn5//p
- 5+f/6efn/+nn5//p5+f/6efn/+nn5//p5+f/6efn/+nn5//p5+f/6efn/+nn5//p5+f/6efn/+nn5//p
- 5+f/6efn/+nn5//p5+f/6efn/+nn5//p5+f/6efn/+nn5//p5+f/6efn/+nn5//n5+csAAAAAMB/MsDB
- fzP/wX8z/8F/M//BfzP/wX8z/8F/M//BfzP/wX8z/8F/M//BfzP/wX8z/8F/M//BfzP/wX8z/8F/M//B
- fzJkAAAAAAAAAAAAAAAAAAAAAOLi4ljj4+P/4+Pj/9/f3xgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAOPj44Tj4+P/4uLivAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwH8ywMF/M//BfzP/wX8z/8F/M//BfzP/wX8z/8F/M//B
- fzP/wX8z/8F/M//BfzP/wX8z/8F/M//BfzP/wX8z/8F/MmQAAAAAAAAAAAAAAAAAAAAA4uLiWOPj4//j
- 4+P/39/fGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4+PjhOPj4//i4uK8AAAAAOnp6Qzl
- 5eUU5eXlFOXl5RTl5eUU5eXlFOXl5RTl5eUU5eXlFOXl5RTl5eUU5eXlFOXl5RTl5eUU5eXlFOXl5RTl
- 5eUU5eXlFOXl5RTl5eUU5eXlFOXl5RTl5eUU5eXlFOXl5RTl5eUU5eXlFOXl5RTl5eUU////BAAAAADA
- fzLAwX8z/8F/M//BfzP/wX8z/8F/M//BfzP/wX8z/8F/M//BfzP/wX8z/8F/M//BfzP/wX8z/8F/M//B
- fzP/wX8yZAAAAAAAAAAAAAAAAAAAAADi4uJY4+Pj/+Pj4//f398YAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAADj4+OE4+Pj/+Li4rwAAAAA6OXllOnn5//p5+f/6efn/+nn5//p5+f/6efn/+nn5//p
- 5+f/6efn/+nn5//p5+f/6efn/+nn5//p5+f/6efn/+nn5//p5+f/6efn/+nn5//p5+f/6efn/+nn5//p
- 5+f/6efn/+nn5//p5+f/6efn/+nn5//n5+csAAAAAMB/MsDBfzP/wX8z/8F/M//BfzP/wX8z/8F/M//B
- fzP/wX8z/8F/M//BfzP/wX8z/8F/M//BfzP/wX8z/8F/M//BfzJkAAAAAAAAAAAAAAAAAAAAAOLi4ljj
- 4+P/4+Pj/9/f3xgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOPj44Tj4+P/4uLivAAAAADr
- 5uYz5+fnWOfn51jn5+dY5+fnWOfn51jn5+dY5+fnWOfn51jn5+dY5+fnWOfn51jn5+dY5+fnWOfn51jn
- 5+dY5+fnWOfn51jn5+dY5+fnWOfn51jn5+dY5+fnWOfn51jn5+dY5+fnWOfn51jn5+dY5+fnWO/f3xAA
- AAAAwH4zd8B/MbTAfzG0wH8xtMB/MbTAfzG0wH8xtMB/MbTAfzG0wH8xtMB/MbTAfzG0wH8xtMB/MbTA
- fzG0wH8xtMF/MzYAAAAAAAAAAAAAAAAAAAAA4uLiWOPj4//j4+P/39/fGAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAA4+PjhOPj4//i4uK8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADi
- 4uJY4+Pj/+Pj4//f398YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADj4+OE4+Pj/+Li4rwA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLi4ljj4+P/4+Pj/9/f3xgAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAwsLFVMPDxMjDw8TMw8PEzMPDxMzDw8TMw8PEzMPDxMzDw8TMw8PEzMPDxMzD
- w8TMw8PEzMPDxMzDw8TMw8PEzMPDxMzDw8TMw8PEzMHBxMPDw8M4AAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAOPj44Tj4+P/4uLivAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAA4uLiWOPj4//j4+P/39/fGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADDw8TNw8PE/8PDxP/D
- w8T/w8PE/8PDxP/Dw8T/w8PE/8PDxP/Dw8T/w8PE/8PDxP/Dw8T/w8PE/8PDxP/Dw8T/w8PE/8PDxP/D
- w8T/w8PE/8PDw6cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4+PjhOPj4//i
- 4uK8AAAAAOrq6iXn5+dA5+fnQOfn50Dn5+dA5+fnQOfn50Dn5+dA5+fnQOfn50Dn5+dA5+fnQOfn50Dn
- 5+dA5+fnQOfn50Dn5+dA5+fnQOfn50Dn5+dA5+fnQOfn50Dn5+dA5+fnQOfn50Dn5+dA5+fnQOfn50Dn
- 5+dA5+fnQOfn50Dn5+dA5+fnQOfn50Dn5+dA5+fnQOfn50Dn5+dA5+fnQOfn50Dn5+dA5+fnQOfn50Dn
- 5+dA5+fnQOfn50Dn5+dA5+fnQOfn50D///8CAAAAAAAAAADi4uJY4+Pj/+Pj4//f398YAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAMTExFvDw8TRwcHE1MHBxNTBwcTUwcHE1MHBxNTBwcTUwcHE1MHBxNTB
- wcTUwcHE1MHBxNTBwcTUwcHE1MHBxNTBwcTUwcHE1MHBwv7Dw8T/w8PDrAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAADj4+OE4+Pj/+Li4rwAAAAA6OXllOnn5//p5+f/6efn/+nn5//p
- 5+f/6efn/+nn5//p5+f/6efn/+nn5//p5+f/6efn/+nn5//p5+f/6efn/+nn5//p5+f/6efn/+nn5//p
- 5+f/6efn/+nn5//p5+f/6efn/+nn5//p5+f/6efn/+nn5//p5+f/6efn/+nn5//p5+f/6efn/+nn5//p
- 5+f/6efn/+nn5//p5+f/6efn/+nn5//p5+f/6efn/+nn5//p5+f/6efn/+nn5//p5+f/6efn/9/f3wgA
- AAAAAAAAAOLi4ljj4+P/4+Pj/9/f3xgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAw8PE9MPDxP/Dw8OsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOPj44Tj
- 4+P/4uLivAAAAADr6+sa5+fnLOfn5yzn5+cs5+fnLOfn5yzn5+cs5+fnLOfn5yzn5+cs5+fnLOfn5yzn
- 5+cs5+fnLOfn5yzn5+cs5+fnLOfn5yzn5+cs5+fnLOfn5yzn5+cs5+fnLOfn5yzn5+cs5+fnLOfn5yzn
- 5+cs5+fnLOfn5yzn5+cs5+fnLOfn5yzn5+cs5+fnLOfn5yzn5+cs5+fnLOfn5yzn5+cs5+fnLOfn5yzn
- 5+cs5+fnLOfn5yzn5+cs5+fnLOfn5yzn5+cs////AgAAAAAAAAAA4uLiWOPj4//j4+P/39/fGAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADDw8T0w8PE/8PDw6wAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4+PjhOPj4//i4uK8AAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAADi4uJY4+Pj/+Pj4//f398YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAMPDxPTDw8T/w8PDrAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADj
- 4+OE4+Pj/+Li4rwAAAAA6Obmh+nl5ejp5eXo6eXl6Onl5ejp5eXo6eXl6Onl5ejp5eXo6eXl6Onl5ejp
- 5eXo6eXl6Onl5ejp5eXo6eXl6Onl5ejp5eXo6eXl6Onl5ejp5eXo6eXl6Onl5ejp5eXo6eXl6Onl5ejp
- 5eXo6eXl6Onl5ejp5eXo6eXl6Onl5ejp5eXo6eXl6Onl5ejp5eXo6eXl6Onl5ejp5eXo6eXl6Onl5ejp
- 5eXo6eXl6Onl5ejp5eXo6eXl6Onl5ejp5eXo6eXl6N/f3wgAAAAAAAAAAOLi4ljj4+P/4+Pj/9/f3xgA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAw8PE9MPDxP/Dw8OsAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOPj44Tj4+P/4uLivAAAAADn5+dN6efnhOnn54Tp
- 5+eE6efnhOnn54Tp5+eE6efnhOnn54Tp5+eE6efnhOnn54Tp5+eE6efnhOnn54Tp5+eE6efnhOnn54Tp
- 5+eE6efnhOnn54Tp5+eE6efnhOnn54Tp5+eE6efnhOnn54Tp5+eE6efnhOnn54Tp5+eE6efnhOnn54Tp
- 5+eE6efnhOnn54Tp5+eE6efnhOnn54Tp5+eE6efnhOnn54Tp5+eE6efnhOnn54Tp5+eE6efnhOnn54Tp
- 5+eE////BQAAAAAAAAAA4uLiWOPj4//j4+P/39/fGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAADDw8T0w8PE/8PDw6wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAA4+PjhOPj4//i4uK8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADi4uJY4+Pj/+Pj4//f
- 398YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMPDxPTDw8T/w8PDrAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADj4+OE4+Pj/+Li4rwAAAAA6ebmVOnm5pDp
- 5uaQ6ebmkOnm5pDp5uaQ6ebmkOnm5pDp5uaQ6ebmkOnm5pDp5uaQ6ebmkOnm5pDp5uaQ6ebmkOnm5pDp
- 5uaQ6ebmkOnm5pDp5uaQ6ebmkOnm5pDp5uaQ6ebmkOnm5pDp5uaQ6ebmkOnm5pDp5uaQ6ebmkOnm5pDp
- 5uaQ6ebmkOnm5pDp5uaQ6ebmkOnm5pDp5uaQ6ebmkOnm5pDp5uaQ6ebmkOnm5pDp5uaQ6ebmkOnm5pDp
- 5uaQ6ebmkP///wUAAAAAAAAAAOLi4ljj4+P/4+Pj/9/f3xgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAw8PE9MPDxP/Dw8OsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAOPj44Tj4+P/4uLivAAAAADp5+eA5+Xl3Ofl5dzn5eXc5+Xl3Ofl5dzn5eXc5+Xl3Ofl5dzn
- 5eXc5+Xl3Ofl5dzn5eXc5+Xl3Ofl5dzn5eXc5+Xl3Ofl5dzn5eXc5+Xl3Ofl5dzn5eXc5+Xl3Ofl5dzn
- 5eXc5+Xl3Ofl5dzn5eXc5+Xl3Ofl5dzn5eXc5+Xl3Ofl5dzn5eXc5+Xl3Ofl5dzn5eXc5+Xl3Ofl5dzn
- 5eXc5+Xl3Ofl5dzn5eXc5+Xl3Ofl5dzn5eXc5+Xl3Ofl5dzn5eXc2traBwAAAAAAAAAA4uLiWOPj4//j
- 4+P/39/fGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADDw8T0w8PE/8PDw6wA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4+PjhOPj4//i4uK8AAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAADi4uJY4+Pj/+Pj4//f398YAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAMPDxPTDw8T/w8PDrAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAADj4+OE4+Pj/+Li4rwAAAAA5+fnIejo6Djo6Og46OjoOOjo6Djo6Og46OjoOOjo6Djo
- 6Og46OjoOOjo6Djo6Og46OjoOOjo6Djo6Og46OjoOOjo6Djo6Og46OjoOOjo6Djo6Og46OjoOOjo6Djo
- 6Og46OjoOOjo6Djo6Og46OjoOOjo6Djo6Og46OjoOOjo6Djo6Og46OjoOOjo6Djo6Og46OjoOOjo6Djo
- 6Og46OjoOOjo6Djo6Og46OjoOOjo6Djo6Og46OjoOOjo6Djo6Og46OjoOP///wIAAAAAAAAAAOLi4ljj
- 4+P/4+Pj/9/f3xgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAw8PE9MPDxP/D
- w8OsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOPj44Tj4+P/4uLivAAAAADo
- 5eWU6efn/+nn5//p5+f/6efn/+nn5//p5+f/6efn/+nn5//p5+f/6efn/+nn5//p5+f/6efn/+nn5//p
- 5+f/6efn/+nn5//p5+f/6efn/+nn5//p5+f/6efn/+nn5//p5+f/6efn/+nn5//p5+f/6efn/+nn5//p
- 5+f/6efn/+nn5//p5+f/6efn/+nn5//p5+f/6efn/+nn5//p5+f/6efn/+nn5//p5+f/6efn/+nn5//p
- 5+f/6efn/+nn5//p5+f/39/fCAAAAAAAAAAA4uLiWOPj4//j4+P/39/fGAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAADDw8T0w8PE/8PDw6wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAA4+PjhOPj4//i4uK8AAAAAObm5h/r5uY06+bmNOvm5jTr5uY06+bmNOvm5jTr
- 5uY06+bmNOvm5jTr5uY06+bmNOvm5jTr5uY06+bmNOvm5jTr5uY06+bmNOvm5jTr5uY06+bmNOvm5jTr
- 5uY06+bmNOvm5jTr5uY06+bmNOvm5jTr5uY06+bmNOvm5jTr5uY06+bmNOvm5jTr5uY06+bmNOvm5jTr
- 5uY06+bmNOvm5jTr5uY06+bmNOvm5jTr5uY06+bmNOvm5jTr5uY06+bmNOvm5jT///8CAAAAAAAAAADi
- 4uJY4+Pj/+Pj4//f398YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMPDxPTD
- w8T/w8PDrAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADj4+OE4+Pj/+Li4rwA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLi4lrj4+P/4+Pj/9/f3xgAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAw8PE9MPDxP/Dw8OsAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAOPj44Tj4+P/4uLivAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAA4+Pji+Pj4//j4+P/39/fGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADD
- w8T0w8PE/8PDw6wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4+PjhOPj4//i
- 4uK8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOPj4zfh4eH14+Pj/+Pj4//f398YAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMPDxPTDw8T/w8PDrAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAADj4+OE4+Pj/+Li4rwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAOLi4lvj4+OM4+PjjOPj44zj4+OM4+PjjOPj44zj4+OM4+PjjOPj44zj4+OM4+PjjOPj44zj
- 4+OM4+PjjOPj44zj4+OM4+PjjOPj44zj4+OM4+PjjOPj44zj4+OM4+PjjOPj44zj4+OM4+PjjOPj44zj
- 4+OM4+PjjOPj44zj4+OM4+PjjOPj44zj4+OM4+PjjOPj44zj4+OM4+PjjOPj44zj4+OM4+PjjOPj44zh
- 4eGt4+Pj+uPj4//j4+P/4+Pj/9/f3xgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAw8PE9MPDxP/Dw8OsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOPj44Tj
- 4+P/4eHh2f///wIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4+PjyePj4//j4+P/4+Pj/+Pj4//j
- 4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j
- 4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j
- 4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/39/fGAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADDw8T0w8PE/8PDw6wAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4+PjhOPj4//j4+P/4uLis+Li4m3i4uJs4uLibOLi4mzi
- 4uJs4uLibOLi4qnj4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j
- 4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j
- 4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j
- 4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//f398YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAMPDxPTDw8T/w8PDrAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADj
- 4+OE4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j
- 4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j
- 4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//Q1rj/vcqO/93f1P/j
- 4+P/xsnj/4iS4//HyuP/4+Pj/9ji4/+P1+X/sd3l/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/9/f3xgA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAw8PE9MPDxP/Dw8OsAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOPj44Hj4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j
- 4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j
- 4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j
- 4+P/4+Pj/+Pj4//j4+P/4eLg/561SP+bs0L/t8aB/+Pj4/9gbuT/PU/k/19t5P/j4+P/jNfl/0HN5/9C
- zef/2OHj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/5ubmFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAADDw8T0w8PE/8PDw6wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAA4+PjXePj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j
- 4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j
- 4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+L/q71l/5uzQv/G
- 0KH/4+Pj/4CK5P89T+T/gIrk/+Pj4/+q2+X/Qc3n/1rR5//g4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4+7/
- //8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMPDxPTDw8T/w8PDrAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADr6+sN4+Pj6OPj4//j4+P/4+Pj/+Pj4//j
- 4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j
- 4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j
- 4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//i4+D/3N7T/+Pj4//j4+P/4uLj/8/R4//i4uP/4+Pj/+Pj4//U
- 4eT/3uLj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4uLiiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAw8PE9MPDxP/Dw8OsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAADl5eU74+Pj7ePj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j
- 4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j
- 4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j
- 4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Li4rTa
- 2toHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADDw8T0w8PE/8PDw6wA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADl5eUU4+Pjb+Pj45Lj
- 4+OU4+PjlOPj45Tj4+OU4+PjlOPj45Tj4+OU4+PjlOPj45Tj4+OU4+PjlOPj45Tj4+OU4+PjlOPj45Tj
- 4+OU4+PjlOPj45Tj4+OU4+PjlOPj45Tj4+OU4+PjlOPj45Tj4+OU4+PjlOPj45Tj4+OU4+PjlOPj45Tj
- 4+OU4+PjlOPj45Tj4+OU4+PjlOPj45Tj4+OU4+PjlOPj45Tj4+OU4+PjlOPj45Tj4+OU4+PjlOPj45Tj
- 4+OU4+PjlOPj45Tj4+OU4+PjlOPj44rj4+NK////AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAC5ubkLv7+/DMHBwvXDw8T/w8PDsL+/vwy/v78IAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwsLEi8PDxP/Dw8T/w8PE/8PDxP/D
- w8T/w8PE/8PDxP/CwsRyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAADDw8Oew8PE/8PDxP/Dw8T/w8PE/8PDxP/Dw8T/w8PE/8LCxIYAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMLCwhXDw8Tqw8PE/8PDxPzD
- w8T/w8PE88PDxP/Dw8TZubm5CwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAMHBxFPDw8T/w8PE/8PDxP/Dw8T/w8PE+8XFxTUAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMPDxKbD
- w8T/w8PE/8PDxP/CwsR7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAycnJE8PDxPzDw8T/wsLD6L+/vwQAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADM
- zMwFwsLEdsTExCMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAw8PDY8PDxczFxcUxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMPDw8HDw8T/wsLD9czMzAUAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADE
- xMRBwsLD/8PDxP/Dw8T/wsLEfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAw8PDEcPDxOLDw8T/w8PE/8PDxP/Dw8T7wcHBMgAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wHD
- w8Onw8PE/8HBwvnDw8T/wsLD/sPDxP/BwcTUtra2BwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADk5OQw4+PjbuPj43jj
- 4+N44+PjeOPj43jj4+N44+PjeOPj43jj4+N44+PjeOPj43jj4+N44+PjeOPj43jj4+N44+PjeOPj43jj
- 4+N44+PjeOPj43jj4+N44+PjeOPj43jj4+N44+PjeOPj43jj4+N44+PjeOPj43jj4+N44+PjeOPj43jj
- 4+N44+PjeOPj43jj4+N44+PjeOPj43jj4+N44+PjeOPj43jj4+N44+PjeOPj43jj4+N44+PjeOPj43jj
- 4+N44+PjeOPj43jj4+N44uLideHh4U/U1NQGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwsLFWMPDxP/Dw8T/w8PE+8PDxP/CwsP/w8PE/8PDxP/D
- w8OFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAD///8D4+PjnePj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j
- 4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j
- 4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j
- 4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Hh4dnj
- 4+MlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADD
- w8OOw8PE/8PDxP/Dw8T/w8PE/8PDxP/Dw8T/w8PE/8PDw7gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLi4n3j4+P/4+Pj/+Pj4/fj
- 4+Ox4+PjnOPj45zj4+Oc4+PjnOPj45zj4+Oc4+PjnOPj45zj4+Oc4+PjnOPj45zj4+Oc4+PjnOPj45zj
- 4+Oc4+PjnOPj45zj4+Oc4+PjnOPj45zj4+Oc4+PjnOPj45zj4+Oc4+PjnOPj45zj4+Oc4+PjnOPj45zj
- 4+Oc4+PjnOPj45zj4+Oc4+PjnOPj45zj4+Oc4+PjnOPj45zj4+Oc4+PjnOPj45zj4+Oc4+PjnOPj45zj
- 4+Oc4+PjnOPj45zj4+Oc4uLiqePj4+7j4+P/4+Pj/+Li4tf///8EAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMzMzArCwsJQwsLFVMLCwsLDw8T/wcHD/cLCxVTC
- wsVUxcXFFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAD///8C4eHh7OPj4//h4eHj4uLiJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4uLiEuHh4cjj
- 4+P/4+Pj/+Tk5EwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAwsLCpMPDxP/Dw8T8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN/f3xjj4+P/4+Pj/+Pj41wA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4+PjLuPj4//j4+P/4+PjdwAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADCwsKkw8PE/8PDxPwA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAA4+PjHOPj4//j4+P/5OTkJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAA4+Pj9+Pj4//i4uJ8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAMLCwqTDw8T/w8PE/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADj4+Mc4+Pj/+Pj4//i
- 4uIkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADh4eH04+Pj/+Li4nwAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwsLCpMPDxP/D
- w8T8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAOPj4xzj4+P/4+Pj/+Li4iQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAOHh4fTj4+P/4uLifAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- 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
- 2v//Ptr//z7a//8+2v//Ptr//z7a//8+2v//Ptr//z7a//8+2v//Ptr//z7a//8+2v//Ptr9yAAAAAAA
- AAAAAAAAAAAAAAAAAAAA4eHh9OPj4//i4uJ8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMLCwqTDw8T/w8PE/AAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADj
- 4+Mc4+Pj/+Pj4//i4uIk5ubmFenn52zp5+ds6efnbOnn52zp5+ds6efnbOnn52zp5+ds6efnbOnn52zp
- 5+ds6efnbOnn52zp5+ds6efnbOnn52zp5+ds6efnbOnn52zp5+ds6efnbOnn52zp5+ds6efnbOnn52zp
- 5+ds6efnbOnn52zq5uY/AAAAADzZ/lg+2v//Ptr//z7a//8+2v//Ptr//z7a//8+2v//Ptr//z7a//8+
- 2v//Ptr//z7a//8+2v//Ptr//z7a//8+2v3IAAAAAAAAAAAAAAAAAAAAAAAAAADh4eH04+Pj/+Li4nwA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAwsLCpMPDxP/Dw8T8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOPj4xzj4+P/4+Pj/+Li4iTp5OQw6efn/+nn5//p
- 5+f/6efn/+nn5//p5+f/6efn/+nn5//p5+f/6efn/+nn5//p5+f/6efn/+nn5//p5+f/6efn/+nn5//p
- 5+f/6efn/+nn5//p5+f/6efn/+nn5//p5+f/6efn/+nn5//p5+f/6efn/+jl5ZQAAAAAPNn+WD7a//8+
- 2v//Ptr//z7a//8+2v//Ptr//z7a//8+2v//Ptr//z7a//8+2v//Ptr//z7a//8+2v//Ptr//z7a/cgA
- AAAAAAAAAAAAAAAAAAAAAAAAAOHh4fTj4+P/4uLifAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADCwsKkw8PE/8PDxPwAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAA4+PjHOPj4//j4+P/4uLiJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA82f5YPtr//z7a//8+2v//Ptr//z7a//8+2v//Ptr//z7a//8+
- 2v//Ptr//z7a//8+2v//Ptr//z7a//8+2v//Ptr9yAAAAAAAAAAAAAAAAAAAAAAAAAAA4eHh9OPj4//i
- 4uJ8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAMLCwqTDw8T/w8PE/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADj4+Mc4+Pj/+Pj4//i4uIk////Benp6Rjp
- 6ekY6enpGOnp6Rjp6ekY6enpGOnp6Rjp6ekY6enpGOnp6Rjp6ekY6enpGOnp6Rjp6ekY6enpGOnp6Rjp
- 6ekY6enpGOnp6Rjp6ekY6enpGOnp6Rjp6ekY6enpGOnp6Rjp6ekY6enpGOnp6Rjs7OwOAAAAADzZ/lg+
- 2v//Ptr//z7a//8+2v//Ptr//z7a//8+2v//Ptr//z7a//8+2v//Ptr//z7a//8+2v//Ptr//z7a//8+
- 2v3IAAAAAAAAAAAAAAAAAAAAAAAAAADh4eH04+Pj/+Li4nwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwsLCpMPDxP/Dw8T8AAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAOPj4xzj4+P/4+Pj/+Li4iTp5OQw6efn/+nn5//p5+f/6efn/+nn5//p5+f/6efn/+nn5//p
- 5+f/6efn/+nn5//p5+f/6efn/+nn5//p5+f/6efn/+nn5//p5+f/6efn/+nn5//p5+f/6efn/+nn5//p
- 5+f/6efn/+nn5//p5+f/6efn/+jl5ZQAAAAAPNn+WD7a//8+2v//Ptr//z7a//8+2v//Ptr//z7a//8+
- 2v//Ptr//z7a//8+2v//Ptr//z7a//8+2v//Ptr//z7a/cgAAAAAAAAAAAAAAAAAAAAAAAAAAOHh4fTj
- 4+P/4uLifAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAADCwsKkw8PE/8PDxPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4+PjHOPj4//j4+P/4uLiJO/f3xDp
- 5uZU6ebmVOnm5lTp5uZU6ebmVOnm5lTp5uZU6ebmVOnm5lTp5uZU6ebmVOnm5lTp5uZU6ebmVOnm5lTp
- 5uZU6ebmVOnm5lTp5uZU6ebmVOnm5lTp5uZU6ebmVOnm5lTp5uZU6ebmVOnm5lTp5uZU6uTkMQAAAAA8
- 2f5YPtr//z7a//8+2v//Ptr//z7a//8+2v//Ptr//z7a//8+2v//Ptr//z7a//8+2v//Ptr//z7a//8+
- 2v//Ptr9yAAAAAAAAAAAAAAAAAAAAAAAAAAA4eHh9OPj4//i4uJ8AAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMLCwqTDw8T/w8PE/AAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAADj4+Mc4+Pj/+Pj4//i4uIkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADzZ/lg+2v//Ptr//z7a//8+2v//Ptr//z7a//8+
- 2v//Ptr//z7a//8+2v//Ptr//z7a//8+2v//Ptr//z7a//8+2v3IAAAAAAAAAAAAAAAAAAAAAAAAAADh
- 4eH04+Pj/+Li4nwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAwsLCpMPDxP/Dw8T8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOPj4xzj4+P/4+Pj/+Li4iTp
- 6ekk6OfnwOjn58Do5+fA6OfnwOjn58Do5+fA6OfnwOjn58Do5+fA6OfnwOjn58Do5+fA6OfnwOjn58Do
- 5+fA6OfnwOjn58Do5+fA6OfnwOjn58Do5+fA6OfnwOjn58Do5+fA6OfnwOjn58Do5+fA6OfnwOjo6G8A
- AAAAPNn+WD7a//8+2v//Ptr//z7a//8+2v//Ptr//z7a//8+2v//Ptr//z7a//8+2v//Ptr//z7a//8+
- 2v//Ptr//z7a/cgAAAAAAAAAAAAAAAAAAAAAAAAAAOHh4fTj4+P/4uLifAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADCwsKkw8PE/8PDxPwA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAA4+PjHOPj4//j4+P/4uLiJOfn5yHn5+es5+fnrOfn56zn5+es5+fnrOfn56zn
- 5+es5+fnrOfn56zn5+es5+fnrOfn56zn5+es5+fnrOfn56zn5+es5+fnrOfn56zn5+es5+fnrOfn56zn
- 5+es5+fnrOfn56zn5+es5+fnrOfn56zn5+es6OjoZAAAAAA92f5LPtr//z7a//8+2v//Ptr//z7a//8+
- 2v//Ptr//z7a//8+2v//Ptr//z7a//8+2v//Ptr//z7a//8+2v//Ptj9uQAAAAAAAAAAAAAAAAAAAAAA
- AAAA4eHh9OPj4//i4uJ8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAMLCwqTDw8T/w8PE/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADj4+Mc4+Pj/+Pj4//i
- 4uIkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAA/v/8EP7//BD+//wQ/v/8EP7//BD+//wQ/v/8EP7//BD+//wQ/v/8EP7//BD+//wQ/
- v/8EP7//BD+//wQA//8CAAAAAAAAAAAAAAAAAAAAAAAAAADh4eH04+Pj/+Li4nwAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwsLCpMPDxP/D
- w8T8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAOPj4xzj4+P/4+Pj/+Li4iQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAOHh4fTj4+P/4uLifAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAADCwsKkw8PE/8PDxPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4+PjHOPj4//j
- 4+P/4uLiJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4eHh9OPj4//i4uJ8AAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMLCwqTD
- w8T/w8PE/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAADj4+Mc4+Pj/+Pj4//i4uIkAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAADh4eH04+Pj/+Li4nwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwsLCpMPDxP/Dw8T8AAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOPj4xzj
- 4+P/4+Pj/+Li4iQAAAAAAAAAAKzgNl2t4jfUreI31K3iN9St4jfUreI31K3iN9St4jfUreI31K3iN9St
- 4jfUreI31K3iN9St4jfUreI31K3iN9St4TZwAAAAAOjo6E7p5+fs6efn7Onn5+zp5+fs6efn7Onn5+zp
- 5+fs6efn7Onn5+zp5+fs6efn7Onn5+zp5+fs6efn7Onn5+zp5+fs6efn7Onn5+zp5+fs6efn7Onn5+zp
- 5+fs6efn7Onn5+zp5+fs6efn7Onn5+zp5+fs6OjoZAAAAAAAAAAAAAAAAOHh4fTj4+P/4uLifAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADC
- wsKkw8PE/8PDxPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4+PjHOPj4//j4+P/4uLiJAAAAAAAAAAAreI2hK3iN/+t
- 4jf/reI3/63iN/+t4jf/reI3/63iN/+t4jf/reI3/63iN/+t4jf/reI3/63iN/+t4jf/reI3/63hN5wA
- AAAA5ubmKunn54Dp5+eA6efngOnn54Dp5+eA6efngOnn54Dp5+eA6efngOnn54Dp5+eA6efngOnn54Dp
- 5+eA6efngOnn54Dp5+eA6efngOnn54Dp5+eA6efngOnn54Dp5+eA6efngOnn54Dp5+eA6efngOnn54Dn
- 5+c2AAAAAAAAAAAAAAAA4eHh9OPj4//i4uJ8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMLCwqTDw8T/w8PE/8LCxIzCwsSMwsLEjMLCxIzC
- wsSMwsLEjMLCxIzCwsSMwsLEjMLCxIzCwsSMwsLEjMLCxIzCwsSMwsLEjMLCxIzDw8OJwMDGLQAAAADj
- 4+Mc4+Pj/+Pj4//i4uIkAAAAAAAAAACt4jaEreI3/63iN/+t4jf/reI3/63iN/+t4jf/reI3/63iN/+t
- 4jf/reI3/63iN/+t4jf/reI3/63iN/+t4jf/reE3nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADh4eH04+Pj/+Li4nwA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAwsLCpMPDxP/Dw8T/w8PE/8PDxP/Dw8T/w8PE/8PDxP/Dw8T/w8PE/8PDxP/Dw8T/w8PE/8PDxP/D
- w8T/w8PE/8PDxP/Dw8T/w8PE/8PDxP/BwcLPAAAAAOPj4xzj4+P/4+Pj/+Li4iQAAAAAAAAAAK3iNoSt
- 4jf/reI3/63iN/+t4jf/reI3/63iN/+t4jf/reI3/63iN/+t4jf/reI3/63iN/+t4jf/reI3/63iN/+t
- 4TecAAAAAOrk5DHo5eWU6OXllOjl5ZTo5eWU6OXllOjl5ZTo5eWU6OXllOjl5ZTo5eWU6OXllOjl5ZTo
- 5eWU6OXllOjl5ZTo5eWU6OXllOjl5ZTo5eWU6OXllOjl5ZTo5eWU6OXllOjl5ZTo5eWU6OXllOjl5ZTo
- 5eWU6ubmPwAAAAAAAAAAAAAAAOHh4fTj4+P/4uLifAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADDw8NewcHC/sPDxP/Dw8T/w8PE/8PDxP/D
- w8T/w8PE/8PDxP/Dw8T/w8PE/8PDxP/Dw8T/w8PE/8PDxP/Dw8T/w8PE/8PDxP/Dw8T/w8PE/8PDw5YA
- AAAA4+PjHOPj4//j4+P/4uLiJAAAAAAAAAAAreI2hK3iN/+t4jf/reI3/63iN/+t4jf/reI3/63iN/+t
- 4jf/reI3/63iN/+t4jf/reI3/63iN/+t4jf/reI3/63hN5wAAAAA6eXlR+jn59jo5+fY6Ofn2Ojn59jo
- 5+fY6Ofn2Ojn59jo5+fY6Ofn2Ojn59jo5+fY6Ofn2Ojn59jo5+fY6Ofn2Ojn59jo5+fY6Ofn2Ojn59jo
- 5+fY6Ofn2Ojn59jo5+fY6Ofn2Ojn59jo5+fY6Ofn2Ojn59jo5uZcAAAAAAAAAAAAAAAA4eHh9OPj4//i
- 4uJ8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAADExMQNv7+/FL+/vxS/v78Uv7+/FL+/vxS/v78Uv7+/FL+/vxS/v78Uv7+/FL+/vxS/
- v78Uv7+/FL+/vxS/v78Uv7+/FL+/vxTGxsYS////AQAAAADj4+Mc4+Pj/+Pj4//i4uIkAAAAAAAAAACt
- 4jaEreI3/63iN/+t4jf/reI3/63iN/+t4jf/reI3/63iN/+t4jf/reI3/63iN/+t4jf/reI3/63iN/+t
- 4jf/reE3nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAADh4eH04+Pj/+Li4nwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- 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
- 4jf/reI3/63iN/+t4TecAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOHh4fTj4+P/4uLifAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAA4+PjHOPj4//j4+P/4uLiJAAAAAAAAAAAreI2hK3iN/+t4jf/reI3/63iN/+t
- 4jf/reI3/63iN/+t4jf/reI3/63iN/+t4jf/reI3/63iN/+t4jf/reI3/63hN5wAAAAA5+fnTenl5ejp
- 5eXo6eXl6Onl5ejp5eXo6eXl6Onl5ejp5eXo6eXl6Onl5ejp5eXo6eXl6Onl5ejp5eXo6eXl6Onl5ejp
- 5eXo6eXl6Onl5ejp5eXo6eXl6Onl5ejp5eXo6eXl6Onl5ejp5eXo6eXl6Onl5ejq5+diAAAAAAAAAAAA
- AAAA4eHh9OPj4//i4uJ8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADj4+Mc4+Pj/+Pj4//i
- 4uIkAAAAAAAAAACs4jZ+reI3/63iN/+t4jf/reI3/63iN/+t4jf/reI3/63iN/+t4jf/reI3/63iN/+t
- 4jf/reI3/63iN/+t4jf/rOA2lQAAAADo6Ogt6ObmiOjm5ojo5uaI6ObmiOjm5ojo5uaI6ObmiOjm5ojo
- 5uaI6ObmiOjm5ojo5uaI6ObmiOjm5ojo5uaI6ObmiOjm5ojo5uaI6ObmiOjm5ojo5uaI6ObmiOjm5ojo
- 5uaI6ObmiOjm5ojo5uaI6ObmiOnp6ToAAAAAAAAAAAAAAADh4eH04+Pj/+Li4nwAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAOPj4xzj4+P/4+Pj/+Li4iQAAAAAAAAAAKrUKgat4zYcreM2HK3jNhyt
- 4zYcreM2HK3jNhyt4zYcreM2HK3jNhyt4zYcreM2HK3jNhyt4zYcreM2HK3jNhyp4jgJAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAOHh4fTj4+P/4uLifAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4+PjHOPj4//j
- 4+P/4uLiJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADd3d0P4eHh/uPj4//i4uJ8AAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAADj4+Mc4+Pj/+Pj4//i4uIkAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAOPj44Pj4+P/4+Pj/+Li4nwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOPj4xzj
- 4+P/4+Pj/+Li4iQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3d3dD+Hh4Tzh4eE84eHhPOHh4Tzh
- 4eE84eHhPOHh4Tzh4eE84eHhPOHh4Tzh4eE84eHhPOHh4Tzh4eE84eHhPOHh4Tzh4eE84eHhPOHh4Tzh
- 4eE84eHhPOHh4Tzh4eE84eHhPOHh4Tzh4eE84eHhPOHh4Tzh4eE84eHhPOHh4Tzh4eE84eHhPOHh4Tzh
- 4eE84eHhPOHh4Tzh4eE84eHhPOHh4Tzh4eE84eHhPOLi4kfj4+Oe4+Pj/+Pj4//j4+P/4uLifAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4+PjHOPj4//j4+P/4uLiLQAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAADh4eFO4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j
- 4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j
- 4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j
- 4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//i4uJ8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADj
- 4+Mc4+Pj/+Pj4//i4uKy4eHhI9/f3xjf398Y39/fGN/f3xjf398Y4ODgKuPj48nj4+P/4+Pj/+Pj4//j
- 4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j
- 4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j
- 4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Li4nwA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOPj4xzj4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j
- 4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j
- 4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j
- 4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4v/U2cP/3+DZ/+Pj4//j4+P/ycvj/9HT4//j4+P/4+Pj/9Xh5P/H
- 3+T/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4uLifAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAA4uLiG+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j
- 4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j
- 4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/w82a/5uzQv+k
- uVb/4eLg/7a75P89T+T/RFbk/9HT4//Y4eP/S87n/0HN5/+u3OT/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//h
- 4eF7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADl5eUK4eHh/ePj4//j4+P/4+Pj/+Pj4//j
- 4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j
- 4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j
- 4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4/+7yYr/m7NC/561Sf/h4t7/pazj/z1P5P89T+T/yczk/9Dg4/9C
- zef/Qc3n/5/a5f/j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj42YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAADj4+O44+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j
- 4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j
- 4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/9/g2v/E
- z57/1NnC/+Pj4//h4eP/pKvk/7K34//j4+P/4+Pj/7jd5P+i2uT/4OPk/+Pj4//j4+P/4+Pj/+Pj4//j
- 4+P54+PjHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOTk5Cbh4eHr4+Pj/+Pj4//j
- 4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j
- 4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j
- 4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j
- 4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj43AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAObm5h/j4+Od4+Pj2+Pj4+Tj4+Pk4+Pj5OPj4+Tj4+Pk4+Pj5OPj4+Tj
- 4+Pk4+Pj5OPj4+Tj4+Pk4+Pj5OPj4+Tj4+Pk4+Pj5OPj4+Tj4+Pk4+Pj5OPj4+Tj4+Pk4+Pj5OPj4+Tj
- 4+Pk4+Pj5OPj4+Tj4+Pk4+Pj5OPj4+Tj4+Pk4+Pj5OPj4+Tj4+Pk4+Pj5OPj4+Tj4+Pk4+Pj5OPj4+Tj
- 4+Pk4+Pj5OPj4+Tj4+Pk4+Pj5OPj4+Tj4+Pk4+Pj5OPj4+Tj4+Pk4+Pj5OPj4+Tj4+Pk4eHh4uLi4r3k
- 5ORNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAD/////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////
- //////////////////////////////////////////////////////////////////////wAAAAAAAAD
- ///////////4AAAAAAAAAf//////////8AAAAAAAAAH///////////D////////g///////////x////
- ////8P//////////8f////////D///////////H////////w///////////x////////8P//////////
- 8QAAAAIAAPD///////////EAAAACAADw///////////xAAAAAgAA8P//////////8f////4AAPD/////
- //////EAAAACAADw///////////xAAAAAgAA8P//////////8f////4AAPD///////////EAAAACAADw
- ///////////xAAAAAgAA8P//////////8f////4AAPD///////////EAAAACAADw///////////xAAAA
- AgAA8P//////////8QAAAAIAAPD///////////H////////w///////////x////////8P4AAA//////
- 8f////////D+AAAP//////EAAAAAAAAw/gAAD//////xAAAAAAAAMP///4//////8QAAAAAAADD///+P
- //////H////////w////j//////xAAAAAAAAMP///4//////8QAAAAAAADD///+P//////H////////w
- ////j//////xAAAAAAAAMP///4//////8QAAAAAAADD///+P//////H////////w////j//////xAAAA
- AAAAMP///4//////8QAAAAAAADD///+P//////EAAAAAAAAw////j//////x////////8P///4//////
- 8f////////D///+P//////H////////g////j//////x/gAAAAAAAP///4//////8P4AAAAAAAD///+P
- //////AAAAAAAAAA////j//////wAAAAAAAAAP///4//////8AAAAAAAAAD///+P//////AAAAAAAAAA
- ////j//////wAAAAAAAAAf///4//////+AAAAAAAAAH///+P//////wAAAAAAAAD///+A///////////
- /////////AH///////////////////wB///////////////////8Af///////////////////gP/////
- //////////////8H////////////////////B//////////x/////////4//////////8P//////////
- /////////+D////////////////////Af///////////////////gD//+AAAAAAAAA///////4A//+AA
- AAAAAAAH//////+AP//gAAAAAAAAA///////gD//wf///////4P///////H//8P////////D///////x
- ///D////////4///////8f//w////////+P///////H//8P////////j///////x///D////////4///
- ////8f//wAAAAAgAA+P///////H//8AAAAAIAAPj///////x///D////+AAD4///////8f//wAAAAAgA
- A+P///////H//8AAAAAIAAPj///////x///D////+AAD4///////8f//wAAAAAgAA+P///////H//8AA
- AAAIAAPj///////x///AAAAACAAD4///////8f//w/////gAA+P///////H//8AAAAAIAAPj///////x
- ///AAAAACAAD4///////8f//w/////wAA+P///////H//8P////////j///////x///D////////4///
- ////8f//w////////+P///////H//8MAAEAAAADj///////x///DAABAAAAA4///////8AAAQwAAf///
- /+P///////AAAEMAAEAAAADj///////wAABDAABAAAAA4///////+AAAQwAAf////+P//////////8MA
- AEAAAADj///////////DAABAAAAA4///////////wwAAQAAAAOP//////////8MAAH/////j////////
- ///DAABAAAAA4///////////wwAAQAAAAOP//////////8MAAH/////j///////////D////////w///
- ////////w////////8P//////////8P4AAAAAAAD///////////D+AAAAAAAA///////////wAAAAAAA
- AAP//////////8AAAAAAAAAD///////////AAAAAAAAAA///////////wAAAAAAAAAP//////////+AA
- AAAAAAAD///////////gAAAAAAAAB///////////8AAAAAAAAA//////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////
- /////////////////////////ygAAABAAAAAgAAAAAEAIAAAAAAAAEAAABMLAAATCwAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAODg4Bnh4eG24eHh4+Pj4+Tj
- 4+Pk4+Pj5OPj4+Tj4+Pk4+Pj5OPj4+Tj4+Pk4+Pj5OPj4+Tj4+Pk4+Pj5OPj4+Tj4+Pk4+Pj5OPj4+Tj
- 4+Pk4+Pj5OPj4+Tj4+Pk4+Pj5OPj4+Tj4+Pk4+Pj5OHh4eHi4uKYzMzMBQAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADi
- 4uKh4+Pj1OXl5Tvl5eUo5eXlKOXl5Sjl5eUo5eXlKOXl5Sjl5eUo5eXlKOXl5Sjl5eUo5eXlKOXl5Sjl
- 5eUo5eXlKOXl5Sjl5eUo5eXlKOXl5Sjl5eUo5eXlKOXl5Sjl5eUo5eXlKOXl5Sji4uJb4+Pj+ePj42cA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAA4+Pjw+Li4mMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAOLi4rTj4+OLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLi4sTj4+NcAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAADh4eGs4+PjjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADi4uLE4+PjXOjl5XDp
- 5+eM6efnjOnn54zp5+eM6efnjOnn54zp5+eM6efnjOnn54zp5+eM6efnjOnn54zp5+eM6OXlUb9/Mji/
- fzOgv38zoL9/M6C/fzOgv38zoL9/M6C/fzOgwH8yagAAAAAAAAAA4eHhrOPj44wAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAA4uLixOPj41zp6ekk5+fnLOfn5yzn5+cs5+fnLOfn5yzn5+cs5+fnLOfn5yzn5+cs5+fnLOfn5yzn
- 5+cs5+fnLOvr6xrBfzJgwX8z/8F/M//BfzP/wX8z/8F/M//BfzP/wX8z/8B/MrAAAAAAAAAAAOHh4azj
- 4+OMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAOLi4sTj4+Nc6Obmk+fn57jn5+e45+fnuOfn57jn5+e45+fnuOfn57jn
- 5+e45+fnuOfn57jn5+e45+fnuOfn57jp5+drwX8yYMF/M//BfzP/wX8z/8F/M//BfzP/wX8z/8F/M//A
- fzKwAAAAAAAAAADh4eGs4+PjjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADi4uLE4+PjXObm5irr5uY06+bmNOvm5jTr
- 5uY06+bmNOvm5jTr5uY06+bmNOvm5jTr5uY06+bmNOvm5jTr5uY05ubmH8F/MmDBfzP/wX8z/8F/M//B
- fzP/wX8z/8F/M//BfzP/wH8ysAAAAAAAAAAA4eHhrOPj44wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4uLixOPj41zo
- 5uZm6efngOnn54Dp5+eA6efngOnn54Dp5+eA6efngOnn54Dp5+eA6efngOnn54Dp5+eA6efngOrm5krB
- fzJgwX8z/8F/M//BfzP/wX8z/8F/M//BfzP/wX8z/8B/MrAAAAAAAAAAAOHh4azj4+OMAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAOLi4sTj4+Nc6efnbejm5ojo5uaI6ObmiOjm5ojo5uaI6ObmiOjm5ojo5uaI6ObmiOjm5ojo
- 5uaI6ObmiOjm5ojo6OhPwX8yYMF/M//BfzP/wX8z/8F/M//BfzP/wX8z/8F/M//AfzKwAAAAAAAAAADh
- 4eGs4+PjjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAADi4uLE4+PjXOnp6STn5+cs5+fnLOfn5yzn5+cs5+fnLOfn5yzn
- 5+cs5+fnLOfn5yzn5+cs5+fnLOfn5yzn5+cs6+vrGr17MR/CfzFcwn8xXMJ/MVzCfzFcwn8xXMJ/MVzC
- fzFcwn0zOwAAAAAAAAAA4eHhrOPj44wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4uLixOPj41wAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOHh4azj4+OMAAAAAAAAAAAAAAAAxMTESsHBwuTB
- wcLkwcHC5MHBwuTBwcLkwcHC5MHBwuTBwcLkwcHC5MPDxKYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLi4sTj
- 4+Nc6efngOjn56Do5+eg6OfnoOjn56Do5+eg6OfnoOjn56Do5+eg6OfnoOjn56Do5+eg6OfnoOjn56Do
- 5+eg6OfnoOjn56Do5+eg6OfnoOjn56Do5+eg6OfnoOjn56Do5+eg6ebmUwAAAADh4eGs4+PjjAAAAAAA
- AAAAAAAAAMHBwRnDw8Nsw8PDbMPDw2zDw8Nsw8PDbMPDw2zDw8Nsw8PDbMPDw7TBwcTUAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAADi4uLE4+PjXOXl5RTp6ekY6enpGOnp6Rjp6ekY6enpGOnp6Rjp6ekY6enpGOnp6Rjp
- 6ekY6enpGOnp6Rjp6ekY6enpGOnp6Rjp6ekY6enpGOnp6Rjp6ekY6enpGOnp6Rjp6ekY6enpGOvr6w0A
- AAAA4eHhrOPj44wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADD
- w8N8wcHE1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4uLixOPj41zo5uaT5+fnuOfn57jn5+e45+fnuOfn57jn
- 5+e45+fnuOfn57jn5+e45+fnuOfn57jn5+e45+fnuOfn57jn5+e45+fnuOfn57jn5+e45+fnuOfn57jn
- 5+e45+fnuOfn57jp5uZfAAAAAOHh4azj4+OMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAw8PDfMHBxNQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLi4sTj4+Nc6enpOunm5kjp
- 5uZI6ebmSOnm5kjp5uZI6ebmSOnm5kjp5uZI6ebmSOnm5kjp5uZI6ebmSOnm5kjp5uZI6ebmSOnm5kjp
- 5uZI6ebmSOnm5kjp5uZI6ebmSOnm5kjp5uZI6uTkJgAAAADh4eGs4+PjjAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMPDw3zBwcTUAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADi
- 4uLE4+PjXOjo6Fro5eVw6OXlcOjl5XDo5eVw6OXlcOjl5XDo5eVw6OXlcOjl5XDo5eVw6OXlcOjl5XDo
- 5eVw6OXlcOjl5XDo5eVw6OXlcOjl5XDo5eVw6OXlcOjl5XDo5eVw6OXlcOnp6ToAAAAA4eHhrOPj44wA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADDw8N8wcHE1AAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAA4uLixOPj41zo5uZ96ebmnOnm5pzp5uac6ebmnOnm5pzp5uac6ebmnOnm5pzp
- 5uac6ebmnOnm5pzp5uac6ebmnOnm5pzp5uac6ebmnOnm5pzp5uac6ebmnOnm5pzp5uac6ebmnOnm5pzo
- 5eVRAAAAAOHh4azj4+OMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAw8PDfMHBxNQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLi4sTj4+Nc6OjoF+zj4xzs4+Mc7OPjHOzj4xzs
- 4+Mc7OPjHOzj4xzs4+Mc7OPjHOzj4xzs4+Mc7OPjHOzj4xzs4+Mc7OPjHOzj4xzs4+Mc7OPjHOzj4xzs
- 4+Mc7OPjHOzj4xzs4+Mc7u7uDwAAAADh4eGs4+PjjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAMPDw3zBwcTUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADi4uLE4+PjXAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADr6+sN4uLi4OPj44wAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADDw8N8wcHE1AAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAA4uLixOLi4mMAAAAAAAAAAAAAAADi4uJI4uLixOLi4sTi4uLE4uLixOLi4sTi4uLE4uLixOLi4sTi
- 4uLE4uLixOLi4sTi4uLE4uLixOLi4sTi4uLE4uLixOLi4sTi4uLE4uLixOLi4sTi4uLE4eHh6ePj4//j
- 4+OMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAw8PDfMHBxNQA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAOLi4sTh4eHr4uLitOLi4rTi4uK04eHh6ePj4//j4+P/4+Pj/+Pj4//j
- 4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/9TZw//i4uD/xsnj/9zc4//L
- 4OT/1+Hj/+Pj4//j4+P/4+PjjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAMPDw3zBwcTUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADj4+O64+Pj/+Pj4//j4+P/4+Pj/+Pj4//j
- 4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4v+e
- tUr/0de7/1Vl5P+rseT/bNPl/5XZ5f/j4+P/4+Pj/+Pj44EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAADDw8N8wcHE1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4eHhT+Hh4fzj
- 4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j
- 4+P/4+Pj/+Pj4//j4+P/4OHd/+Pj4//d3uP/4uLj/9/j4//i4+P/4+Pj/+Pj4+3i4uIkAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAw8PDfMHBxNQAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAADh4eEj4+PjS+Tk5Ezk5ORM5OTkTOTk5Ezk5ORM5OTkTOTk5Ezk5ORM5OTkTOTk5Ezk
- 5ORM5OTkTOTk5Ezk5ORM5OTkTOTk5Ezk5ORM5OTkTOTk5Ezk5ORM5OTkTOTk5Ezk5ORM5OTkTOPj40nk
- 5OQTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwcHEZMPDw8DD
- w8TqwsLEg7+/yBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAMLCwqjExMT3wcHC9cPDxPfAwMAlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAADFxcUWwcHC9cPDxPzCwsJqAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMPDwyK/v78IAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMLCwoLBwcTU////AQAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMPDwxHC
- wsP5wsLDwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAP///wHCwsKowsLE9MPDxPjDw8NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAA5+fnC+Tk5Dnh4eE84eHhPOHh4Tzh4eE84eHhPOHh4Tzh4eE84eHhPOHh4Tzh4eE84eHhPOHh4Tzh
- 4eE84eHhPOHh4Tzh4eE84eHhPOHh4Tzh4eE84eHhPOHh4Tzh4eE84eHhPOHh4Tzl5eU75eXlFAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAADDw8M8w8PE/8LCw/3BwcL9w8PEzQAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAA39/fIOPj4+bh4eHr4eHh0OHh4dDh4eHQ4eHh0OHh4dDh4eHQ4eHh0OHh4dDh
- 4eHQ4eHh0OHh4dDh4eHQ4eHh0OHh4dDh4eHQ4eHh0OHh4dDh4eHQ4eHh0OHh4dDh4eHQ4eHh0OHh4dDh
- 4eHQ4+Pj5+Hh4fXh4eE9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqqA8PDwyvCwsPbxMTEk7+/yBwA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOPj44Pi4uLO4uLiCQAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAMzMzAXj4+PA4+PjrgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAwcHE1MPDw3wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADi4uKQ4uLikAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4uLifeLi4rwAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAMHBxNTDw8N8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAA4uLikOLi4pAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLi4nzi
- 4uK8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBwcTUw8PDfAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAOLi4pDi4uKQ6efna+jl5bTo5eW06OXltOjl5bTo5eW06OXltOjl5bTo
- 5eW06OXltOjl5bTo5eW06OXltOjl5bTp5+eNOtf+JzzY/fg82P34PNj9+DzY/fg82P34PNj9+DzY/fg+
- 2v3ZAAAAAAAAAADi4uJ84uLivAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwcHE1MPDw3wA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADi4uKQ4uLikObm5h/r5uY06+bmNOvm5jTr
- 5uY06+bmNOvm5jTr5uY06+bmNOvm5jTr5uY06+bmNOvm5jTr5uY05ubmKT/c/iw+2v//Ptr//z7a//8+
- 2v//Ptr//z7a//8+2v//Pdr95AAAAAAAAAAA4uLifOLi4rwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAMHBxNTDw8N8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4uLikOLi4pDn
- 5+dM6efngOnn54Dp5+eA6efngOnn54Dp5+eA6efngOnn54Dp5+eA6efngOnn54Dp5+eA6efngOjo6GQ/
- 3P4sPtr//z7a//8+2v//Ptr//z7a//8+2v//Ptr//z3a/eQAAAAAAAAAAOLi4nzi4uK8AAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBwcTUw8PDfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAOLi4pDi4uKQ6ebmVOnn54zp5+eM6efnjOnn54zp5+eM6efnjOnn54zp5+eM6efnjOnn54zp
- 5+eM6efnjOnn54zq5+duP9z+LD7a//8+2v//Ptr//z7a//8+2v//Ptr//z7a//892v3kAAAAAAAAAADi
- 4uJ84uLivAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwcHE1MPDw3wAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAADi4uKQ4uLikOzi4hvn5+cs5+fnLOfn5yzn5+cs5+fnLOfn5yzn
- 5+cs5+fnLOfn5yzn5+cs5+fnLOfn5yzn5+cs6enpIz/c/iw+2v//Ptr//z7a//8+2v//Ptr//z7a//8+
- 2v//Pdr95AAAAAAAAAAA4uLifOLi4rwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMHBxNTD
- w8N8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4uLikOLi4pDq5+du5+fnuOfn57jn
- 5+e45+fnuOfn57jn5+e45+fnuOfn57jn5+e45+fnuOfn57jn5+e45+fnuOnm5pA+2f4pPtr//z7a//8+
- 2v//Ptr//z7a//8+2v//Ptr//z7Y/eEAAAAAAAAAAOLi4nzi4uK8AAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAADBwcTUw8PDfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLi4pDi
- 4uKQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAP//AT+//wQ/v/8EP7//BD+//wQ/v/8EP7//BD+//wRV//8DAAAAAAAAAADi4uJ84uLivAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwcHE1MPDw3wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAADi4uKQ4uLikAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAA4uLifOLi4rwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMHBxNTDw8N8AAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4uLikOLi4pAAAAAAq+E3rqviNeir4jXoq+I16KviNeir
- 4jXoq+I16KviNeis4zZB6efneejl5bTo5eW06OXltOjl5bTo5eW06OXltOjl5bTo5eW06OXltOjl5bTo
- 5eW06OXltOjl5bTo5uZ/AAAAAOLi4nzi4uK8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADB
- wcTUw8PE4sPDxMTDw8TEw8PExMPDxMTDw8TEw8PExMPDxMTBwcTDwcHFPuLi4pDi4uKQAAAAAK3iNsSt
- 4jf/reI3/63iN/+t4jf/reI3/63iN/+t4jf/ruA1TOrk5DHp5uZI6ebmSOnm5kjp5uZI6ebmSOnm5kjp
- 5uZI6ebmSOnm5kjp5uZI6ebmSOnm5kjp5uZI6+bmMwAAAADi4uJ84uLivAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAw8PDXsLCxIzCwsSMwsLEjMLCxIzCwsSMwsLEjMLCxIzCwsSMwsLEjMTExCfi
- 4uKQ4uLikAAAAACt4jbEreI3/63iN/+t4jf/reI3/63iN/+t4jf/reI3/67gNUzq5uZJ6efnbOnn52zp
- 5+ds6efnbOnn52zp5+ds6efnbOnn52zp5+ds6efnbOnn52zp5+ds6efnbOfn50wAAAAA4uLifOLi4rwA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAA4uLikOLi4pAAAAAAreI2xK3iN/+t4jf/reI3/63iN/+t4jf/reI3/63iN/+u
- 4DVM6efnbOjn56Do5+eg6OfnoOjn56Do5+eg6OfnoOjn56Do5+eg6OfnoOjn56Do5+eg6OfnoOjn56Do
- 5uZxAAAAAOLi4nzi4uK8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLi4pDi4uKQAAAAAK3iNsSt4jf/reI3/63iN/+t
- 4jf/reI3/63iN/+t4jf/ruA1TPDh4RHp6ekY6enpGOnp6Rjp6ekY6enpGOnp6Rjp6ekY6enpGOnp6Rjp
- 6ekY6enpGOnp6Rjp6ekY8OHhEQAAAADi4uJ84uLivAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADi4uKQ4uLikAAAAACs
- 4jXDreI3/63iN/+t4jf/reI3/63iN/+t4jf/reI3/63gNkvo5uZ85+fnuOfn57jn5+e45+fnuOfn57jn
- 5+e45+fnuOfn57jn5+e45+fnuOfn57jn5+e45+fnuOnn54IAAAAA4uLifOLi4rwAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAA4uLikOLi4pAAAAAAsuUzCq/fLxCv3y8Qr98vEK/fLxCv3y8Qr98vEK/fLxCq/1UDAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOPj44Li
- 4uK8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAOLi4pDi4uKQAAAAAAAAAAAAAAAA////A+Pj4xzj4+Mc4+PjHOPj4xzj
- 4+Mc4+PjHOPj4xzj4+Mc4+PjHOPj4xzj4+Mc4+PjHOPj4xzj4+Mc4+PjHOPj4xzj4+Mc4+PjHOPj4xzj
- 4+Mc4+PjHOPj4zfi4uLg4uLivAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADi4uKQ4uLitNra2g7p6ekM6enpDOPj41Lj
- 4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j
- 4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Li4rwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4uLij+Pj4//j
- 4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j
- 4+P/4+Pj/+Pj4//j4+P/xc+g/9LXvf+oruP/s7jj/7fd5P+n2+T/4+Pj/+Pj4//i4uK7AAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAOHh4XLj4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j
- 4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/73Kj//N1LP/maHk/6at4/+r3OX/mdnl/+Pj4//j
- 4+P/4+PjnQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAADl5eUK4eHhreHh4fLh4eH04eHh9OHh4fTh4eH04eHh9OHh4fTh
- 4eH04eHh9OHh4fTh4eH04eHh9OHh4fTh4eH04eHh9OHh4fTh4eH04eHh9OHh4fTh4eH04eHh9OHh4fTh
- 4eH04eHh9OHh4fTh4eHz4uLixOLi4hsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAA//////////////////////////////////////////////////////wAAAAP/////AAAAA/////8
- ////z/////z////P/////AAAAM/////8AAAAz/////wAAADP/////AAAAM/////8AAAAz/////wAAADP
- /////AAAAM/////8////zgA///wAAABOAD///AAAAE//P//8AAAAT/8///wAAABP/z///AAAAE//P//8
- AAAAT/8///wAAABP/z///P///4//P//84AAAD/8///wAAAAP/z///AAAAA//P//8AAAAD/8///4AAAAf
- /g/////////+D/////////4f////z////x////+P/////////wf8AAAAP///B/gAAAAf//8H+P///x//
- /8/5////n///z/n///+f///P+AAAAZ///8/4AAABn///z/gAAAGf///P+AAAAZ///8/4AAABn///z/gA
- AAGf///P+f/8AZ///8/5////n///z/kAAACf///AAQAAAJ///8ABAAAAn/////kAAACf////+QAAAJ//
- ///5AAAAn/////kAf/+f////+cAAAB/////4AAAAH/////gAAAAf////+AAAAB/////4AAAAH///////
- //////////////////////////////////////////////8=
-
-
-
\ No newline at end of file
diff --git a/Studio Migration Utility/Sdl.Community.StudioMigrationUtility/Model/Customer.cs b/Studio Migration Utility/Sdl.Community.StudioMigrationUtility/Model/Customer.cs
deleted file mode 100644
index 92d4b3a177..0000000000
--- a/Studio Migration Utility/Sdl.Community.StudioMigrationUtility/Model/Customer.cs
+++ /dev/null
@@ -1,29 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace Sdl.Community.StudioMigrationUtility.Model
-{
- [Serializable]
- public class Customer
- {
- public Guid Guid { get; set; }
- public string Name { get; set; }
- public string Email { get; set; }
-
- public override string ToString()
- {
- return Name;
- }
-
- public Customer(Guid guid, string name, string email)
- {
- Guid = guid;
- Name = name;
- Email = email;
- }
- }
-
-}
diff --git a/Studio Migration Utility/Sdl.Community.StudioMigrationUtility/Model/PluginInfo.cs b/Studio Migration Utility/Sdl.Community.StudioMigrationUtility/Model/PluginInfo.cs
deleted file mode 100644
index 7a799889c5..0000000000
--- a/Studio Migration Utility/Sdl.Community.StudioMigrationUtility/Model/PluginInfo.cs
+++ /dev/null
@@ -1,15 +0,0 @@
-using System;
-using System.IO;
-
-
-namespace Sdl.Community.StudioMigrationUtility.Model
-{
- public class PluginInfo
- {
- public string PluginName { get; set; }
-
- public string Path { get; set; }
-
-
- }
-}
diff --git a/Studio Migration Utility/Sdl.Community.StudioMigrationUtility/Model/Project.cs b/Studio Migration Utility/Sdl.Community.StudioMigrationUtility/Model/Project.cs
deleted file mode 100644
index ffd3eb0747..0000000000
--- a/Studio Migration Utility/Sdl.Community.StudioMigrationUtility/Model/Project.cs
+++ /dev/null
@@ -1,40 +0,0 @@
-using System;
-
-namespace Sdl.Community.StudioMigrationUtility.Model
-{
- public class Project
- {
-
- public Guid Guid { get; set; }
- public string ProjectFilePath { get; set; }
- public DateTime StartedAt { get; set; }
- public bool IsInPlace { get; set; }
- public bool IsImported { get; set; }
- public string Description { get; set; }
- public string Name { get; set; }
- public string CreatedBy { get; set; }
- public DateTime CreatedAt { get; set; }
-
- public string Status { get; set; }
-
-
-
- //Modification ID: PH_2015-07-05T21:12:00
- //Date: 2015-07-05
- //Added by: Patrick Hartnett
- //Begin Edit (PH_2015-07-05T21:00:00)
- public Customer Customer { get; set; }
- //End Edit (PH_2015-07-05T21:00:00)
-
- public override string ToString()
- {
- return Name;
- }
-
- public override bool Equals(object obj)
- {
- var tmpProj = (Project) obj;
- return Guid.Equals(tmpProj.Guid);
- }
- }
-}
diff --git a/Studio Migration Utility/Sdl.Community.StudioMigrationUtility/Model/TaskArguments.cs b/Studio Migration Utility/Sdl.Community.StudioMigrationUtility/Model/TaskArguments.cs
deleted file mode 100644
index 902149a8d2..0000000000
--- a/Studio Migration Utility/Sdl.Community.StudioMigrationUtility/Model/TaskArguments.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-using System.Collections.Generic;
-using Sdl.Versioning;
-
-namespace Sdl.Community.StudioMigrationUtility.Model
-{
- public class TaskArgument
- {
- public List Projects { get; set; }
-
- public List ProjectToBeMoved{ get; set; }
-
- public StudioVersion DestinationStudioVersion { get; set; }
-
- public StudioVersion SourceStudioVersion { get; set; }
-
- public bool MigrateTranslationMemories { get; set; }
-
- public bool MigrateCustomers { get; set; }
-
- public List PluginsToBeMoved { get; set; }
- }
-}
diff --git a/Studio Migration Utility/Sdl.Community.StudioMigrationUtility/PluginResources.Designer.cs b/Studio Migration Utility/Sdl.Community.StudioMigrationUtility/PluginResources.Designer.cs
deleted file mode 100644
index fc8f623d8e..0000000000
--- a/Studio Migration Utility/Sdl.Community.StudioMigrationUtility/PluginResources.Designer.cs
+++ /dev/null
@@ -1,92 +0,0 @@
-//------------------------------------------------------------------------------
-//
-// This code was generated by a tool.
-// Runtime Version:4.0.30319.42000
-//
-// Changes to this file may cause incorrect behavior and will be lost if
-// the code is regenerated.
-//
-//------------------------------------------------------------------------------
-
-namespace Sdl.Community.StudioMigrationUtility {
- using System;
-
-
- ///
- /// A strongly-typed resource class, for looking up localized strings, etc.
- ///
- // This class was auto-generated by the StronglyTypedResourceBuilder
- // class via a tool like ResGen or Visual Studio.
- // To add or remove a member, edit your .ResX file then rerun ResGen
- // with the /str option, or rebuild your VS project.
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
- internal class PluginResources {
-
- private static global::System.Resources.ResourceManager resourceMan;
-
- private static global::System.Globalization.CultureInfo resourceCulture;
-
- [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
- internal PluginResources() {
- }
-
- ///
- /// Returns the cached ResourceManager instance used by this class.
- ///
- [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
- internal static global::System.Resources.ResourceManager ResourceManager {
- get {
- if (object.ReferenceEquals(resourceMan, null)) {
- global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Sdl.Community.StudioMigrationUtility.PluginResources", typeof(PluginResources).Assembly);
- resourceMan = temp;
- }
- return resourceMan;
- }
- }
-
- ///
- /// Overrides the current thread's CurrentUICulture property for all
- /// resource lookups using this strongly typed resource class.
- ///
- [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
- internal static global::System.Globalization.CultureInfo Culture {
- get {
- return resourceCulture;
- }
- set {
- resourceCulture = value;
- }
- }
-
- ///
- /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon).
- ///
- internal static System.Drawing.Icon migrate {
- get {
- object obj = ResourceManager.GetObject("migrate", resourceCulture);
- return ((System.Drawing.Icon)(obj));
- }
- }
-
- ///
- /// Looks up a localized string similar to Studio Migration Utility.
- ///
- internal static string Plugin_Name {
- get {
- return ResourceManager.GetString("Plugin_Name", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon).
- ///
- internal static System.Drawing.Icon question {
- get {
- object obj = ResourceManager.GetObject("question", resourceCulture);
- return ((System.Drawing.Icon)(obj));
- }
- }
- }
-}
diff --git a/Studio Migration Utility/Sdl.Community.StudioMigrationUtility/PluginResources.resx b/Studio Migration Utility/Sdl.Community.StudioMigrationUtility/PluginResources.resx
deleted file mode 100644
index 36915409f4..0000000000
--- a/Studio Migration Utility/Sdl.Community.StudioMigrationUtility/PluginResources.resx
+++ /dev/null
@@ -1,130 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- text/microsoft-resx
-
-
- 2.0
-
-
- System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
-
- Resources\migrate.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
-
- Studio Migration Utility
-
-
- Resources\question.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
-
\ No newline at end of file
diff --git a/Studio Migration Utility/Sdl.Community.StudioMigrationUtility/Program.cs b/Studio Migration Utility/Sdl.Community.StudioMigrationUtility/Program.cs
deleted file mode 100644
index 0e773ee3b5..0000000000
--- a/Studio Migration Utility/Sdl.Community.StudioMigrationUtility/Program.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-using System;
-using System.Windows.Forms;
-using Sdl.Versioning;
-
-namespace Sdl.Community.StudioMigrationUtility
-{
- static class Program
- {
- ///
- /// The main entry point for the application.
- ///
- [STAThread]
- static void Main()
- {
- Application.EnableVisualStyles();
- Application.SetCompatibleTextRenderingDefault(false);
- Application.Run(new MigrateUtility(new StudioVersionService()));
- }
- }
-}
diff --git a/Studio Migration Utility/Sdl.Community.StudioMigrationUtility/Properties/AssemblyInfo.cs b/Studio Migration Utility/Sdl.Community.StudioMigrationUtility/Properties/AssemblyInfo.cs
deleted file mode 100644
index 0415826bd0..0000000000
--- a/Studio Migration Utility/Sdl.Community.StudioMigrationUtility/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,36 +0,0 @@
-using System.Reflection;
-using System.Runtime.CompilerServices;
-using System.Runtime.InteropServices;
-
-// General Information about an assembly is controlled through the following
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-[assembly: AssemblyTitle("Sdl.Community.StudioProjectMigration")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyProduct("Sdl.Community.StudioProjectMigration")]
-[assembly: AssemblyCompany("SDL Limited as part of the RWS Holdings Plc group of companies")]
-[assembly: AssemblyCopyright("Copyright © 2011 - 2022 SDL Limited as part of the RWS Holdings Plc group of companies (\"RWS Group\").")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-// Setting ComVisible to false makes the types in this assembly not visible
-// to COM components. If you need to access a type in this assembly from
-// COM, set the ComVisible attribute to true on that type.
-[assembly: ComVisible(false)]
-
-// The following GUID is for the ID of the typelib if this project is exposed to COM
-[assembly: Guid("83391ce1-c932-49c9-be25-118ea1a51953")]
-
-// Version information for an assembly consists of the following four values:
-//
-// Major Version
-// Minor Version
-// Build Number
-// Revision
-//
-// You can specify all the values or you can default the Build and Revision Numbers
-// by using the '*' as shown below:
-// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("4.0.0.0")]
-[assembly: AssemblyFileVersion("4.0.0.0")]
diff --git a/Studio Migration Utility/Sdl.Community.StudioMigrationUtility/Properties/PluginProperties.cs b/Studio Migration Utility/Sdl.Community.StudioMigrationUtility/Properties/PluginProperties.cs
deleted file mode 100644
index 1bd091f3bb..0000000000
--- a/Studio Migration Utility/Sdl.Community.StudioMigrationUtility/Properties/PluginProperties.cs
+++ /dev/null
@@ -1,6 +0,0 @@
-using Sdl.Core.PluginFramework;
-
-// TODO: edit the Plugin_Name string in PluginResources.resx to change the name of your plug-in
-[assembly: Plugin("Plugin_Name")]
-
-
diff --git a/Studio Migration Utility/Sdl.Community.StudioMigrationUtility/Properties/Resources.Designer.cs b/Studio Migration Utility/Sdl.Community.StudioMigrationUtility/Properties/Resources.Designer.cs
deleted file mode 100644
index 529cd4d7f3..0000000000
--- a/Studio Migration Utility/Sdl.Community.StudioMigrationUtility/Properties/Resources.Designer.cs
+++ /dev/null
@@ -1,131 +0,0 @@
-//------------------------------------------------------------------------------
-//
-// This code was generated by a tool.
-// Runtime Version:4.0.30319.42000
-//
-// Changes to this file may cause incorrect behavior and will be lost if
-// the code is regenerated.
-//
-//------------------------------------------------------------------------------
-
-namespace Sdl.Community.StudioMigrationUtility.Properties {
- using System;
-
-
- ///
- /// A strongly-typed resource class, for looking up localized strings, etc.
- ///
- // This class was auto-generated by the StronglyTypedResourceBuilder
- // class via a tool like ResGen or Visual Studio.
- // To add or remove a member, edit your .ResX file then rerun ResGen
- // with the /str option, or rebuild your VS project.
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")]
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
- internal class Resources {
-
- private static global::System.Resources.ResourceManager resourceMan;
-
- private static global::System.Globalization.CultureInfo resourceCulture;
-
- [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
- internal Resources() {
- }
-
- ///
- /// Returns the cached ResourceManager instance used by this class.
- ///
- [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
- internal static global::System.Resources.ResourceManager ResourceManager {
- get {
- if (object.ReferenceEquals(resourceMan, null)) {
- global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Sdl.Community.StudioMigrationUtility.Properties.Resources", typeof(Resources).Assembly);
- resourceMan = temp;
- }
- return resourceMan;
- }
- }
-
- ///
- /// Overrides the current thread's CurrentUICulture property for all
- /// resource lookups using this strongly typed resource class.
- ///
- [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
- internal static global::System.Globalization.CultureInfo Culture {
- get {
- return resourceCulture;
- }
- set {
- resourceCulture = value;
- }
- }
-
- ///
- /// Looks up a localized resource of type System.Drawing.Bitmap.
- ///
- internal static System.Drawing.Bitmap migrate {
- get {
- object obj = ResourceManager.GetObject("migrate", resourceCulture);
- return ((System.Drawing.Bitmap)(obj));
- }
- }
-
- ///
- /// Looks up a localized string similar to Only one version.
- ///
- internal static string MigrateProjects_projectMigrationWizzard_BeforeSwitchPages_Only_one_version {
- get {
- return ResourceManager.GetString("MigrateProjects_projectMigrationWizzard_BeforeSwitchPages_Only_one_version", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Please select a Studio version!.
- ///
- internal static string MigrateProjects_projectMigrationWizzard_BeforeSwitchPages_Please_select_a_Studio_version_ {
- get {
- return ResourceManager.GetString("MigrateProjects_projectMigrationWizzard_BeforeSwitchPages_Please_select_a_Studio_" +
- "version_", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Please select only one version.
- ///
- internal static string MigrateProjects_projectMigrationWizzard_BeforeSwitchPages_Please_select_only_one_version {
- get {
- return ResourceManager.GetString("MigrateProjects_projectMigrationWizzard_BeforeSwitchPages_Please_select_only_one_" +
- "version", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Same version.
- ///
- internal static string MigrateProjects_projectMigrationWizzard_BeforeSwitchPages_Same_version {
- get {
- return ResourceManager.GetString("MigrateProjects_projectMigrationWizzard_BeforeSwitchPages_Same_version", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Select a studio version.
- ///
- internal static string MigrateProjects_projectMigrationWizzard_BeforeSwitchPages_Select_a_studio_version {
- get {
- return ResourceManager.GetString("MigrateProjects_projectMigrationWizzard_BeforeSwitchPages_Select_a_studio_version" +
- "", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized resource of type System.Drawing.Bitmap.
- ///
- internal static System.Drawing.Bitmap sdl_logo {
- get {
- object obj = ResourceManager.GetObject("sdl_logo", resourceCulture);
- return ((System.Drawing.Bitmap)(obj));
- }
- }
- }
-}
diff --git a/Studio Migration Utility/Sdl.Community.StudioMigrationUtility/Properties/Resources.resx b/Studio Migration Utility/Sdl.Community.StudioMigrationUtility/Properties/Resources.resx
deleted file mode 100644
index 4746a0dc17..0000000000
--- a/Studio Migration Utility/Sdl.Community.StudioMigrationUtility/Properties/Resources.resx
+++ /dev/null
@@ -1,142 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- text/microsoft-resx
-
-
- 2.0
-
-
- System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
-
- ..\Resources\migrate.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
-
- ..\Resources\logo.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
-
- Select a studio version
-
-
- Please select a Studio version!
-
-
- Same version
-
-
- Only one version
-
-
- Please select only one version
-
-
\ No newline at end of file
diff --git a/Studio Migration Utility/Sdl.Community.StudioMigrationUtility/Properties/Settings.Designer.cs b/Studio Migration Utility/Sdl.Community.StudioMigrationUtility/Properties/Settings.Designer.cs
deleted file mode 100644
index 08c0063df4..0000000000
--- a/Studio Migration Utility/Sdl.Community.StudioMigrationUtility/Properties/Settings.Designer.cs
+++ /dev/null
@@ -1,26 +0,0 @@
-//------------------------------------------------------------------------------
-//
-// This code was generated by a tool.
-// Runtime Version:4.0.30319.34209
-//
-// Changes to this file may cause incorrect behavior and will be lost if
-// the code is regenerated.
-//
-//------------------------------------------------------------------------------
-
-namespace Sdl.Community.StudioMigrationUtility.Properties {
-
-
- [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "12.0.0.0")]
- internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
-
- private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
-
- public static Settings Default {
- get {
- return defaultInstance;
- }
- }
- }
-}
diff --git a/Studio Migration Utility/Sdl.Community.StudioMigrationUtility/Properties/Settings.settings b/Studio Migration Utility/Sdl.Community.StudioMigrationUtility/Properties/Settings.settings
deleted file mode 100644
index 39645652af..0000000000
--- a/Studio Migration Utility/Sdl.Community.StudioMigrationUtility/Properties/Settings.settings
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/Studio Migration Utility/Sdl.Community.StudioMigrationUtility/Resources/logo.png b/Studio Migration Utility/Sdl.Community.StudioMigrationUtility/Resources/logo.png
deleted file mode 100644
index 706b10b088..0000000000
Binary files a/Studio Migration Utility/Sdl.Community.StudioMigrationUtility/Resources/logo.png and /dev/null differ
diff --git a/Studio Migration Utility/Sdl.Community.StudioMigrationUtility/Resources/migrate.ico b/Studio Migration Utility/Sdl.Community.StudioMigrationUtility/Resources/migrate.ico
deleted file mode 100644
index c90670bb15..0000000000
Binary files a/Studio Migration Utility/Sdl.Community.StudioMigrationUtility/Resources/migrate.ico and /dev/null differ
diff --git a/Studio Migration Utility/Sdl.Community.StudioMigrationUtility/Resources/migrate.png b/Studio Migration Utility/Sdl.Community.StudioMigrationUtility/Resources/migrate.png
deleted file mode 100644
index 1d22704dc4..0000000000
Binary files a/Studio Migration Utility/Sdl.Community.StudioMigrationUtility/Resources/migrate.png and /dev/null differ
diff --git a/Studio Migration Utility/Sdl.Community.StudioMigrationUtility/Resources/question.ico b/Studio Migration Utility/Sdl.Community.StudioMigrationUtility/Resources/question.ico
deleted file mode 100644
index 593735764f..0000000000
Binary files a/Studio Migration Utility/Sdl.Community.StudioMigrationUtility/Resources/question.ico and /dev/null differ
diff --git a/Studio Migration Utility/Sdl.Community.StudioMigrationUtility/Resources/sdl-logo.png b/Studio Migration Utility/Sdl.Community.StudioMigrationUtility/Resources/sdl-logo.png
deleted file mode 100644
index 00295f8871..0000000000
Binary files a/Studio Migration Utility/Sdl.Community.StudioMigrationUtility/Resources/sdl-logo.png and /dev/null differ
diff --git a/Studio Migration Utility/Sdl.Community.StudioMigrationUtility/Sdl.Community.StudioMigrationUtility.csproj b/Studio Migration Utility/Sdl.Community.StudioMigrationUtility/Sdl.Community.StudioMigrationUtility.csproj
deleted file mode 100644
index f49f23b151..0000000000
--- a/Studio Migration Utility/Sdl.Community.StudioMigrationUtility/Sdl.Community.StudioMigrationUtility.csproj
+++ /dev/null
@@ -1,175 +0,0 @@
-
-
-
-
- Debug
- AnyCPU
- {DCD95D2B-60E7-4D11-B6AC-5A63B590195A}
- Library
- Properties
- Sdl.Community.StudioMigrationUtility
- Sdl.Community.StudioMigrationUtility
- v4.8
- 512
-
-
-
- $(AppData)\Trados\Trados Studio\18\Plugins
-
-
- AnyCPU
- true
- full
- false
- bin\Debug\
- DEBUG;TRACE
- prompt
- 4
-
-
- AnyCPU
- pdbonly
- true
- bin\Debug
- TRACE
- prompt
- 4
-
-
-
-
-
-
- Resources\migrate.ico
-
-
- true
-
-
- true
-
-
- ..\..\SdlCommunity.snk
-
-
-
-
- $(MSBuildProgramFiles32)\Trados\Trados Studio\Studio18\Sdl.Desktop.IntegrationApi.dll
-
-
-
- $(MSBuildProgramFiles32)\Trados\Trados Studio\Studio18\Sdl.Desktop.IntegrationApi.Extensions.dll
-
-
-
- $(MSBuildProgramFiles32)\Trados\Trados Studio\Studio18\Sdl.ProjectAutomation.Core.dll
-
-
-
- $(MSBuildProgramFiles32)\Trados\Trados Studio\Studio18\Sdl.ProjectAutomation.FileBased.dll
-
-
-
- $(MSBuildProgramFiles32)\Trados\Trados Studio\Studio18\Sdl.TranslationStudioAutomation.IntegrationApi.dll
-
-
-
- $(MSBuildProgramFiles32)\Trados\Trados Studio\Studio18\Sdl.Versioning.dll
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Form
-
-
- MigrateProjects.cs
-
-
-
-
-
-
- True
- True
- PluginResources.resx
-
-
-
-
-
-
-
-
- MigrateProjects.cs
-
-
- ResXFileCodeGenerator
- PluginResources.Designer.cs
-
-
- ResXFileCodeGenerator
- Resources.Designer.cs
- Designer
-
-
- True
- Resources.resx
- True
-
-
- SdlCommunity.snk
-
-
- SettingsSingleFileGenerator
- Settings.Designer.cs
-
-
- True
- Settings.settings
- True
-
-
-
-
-
-
-
- {870C7D59-F59B-44D1-961E-C4341DAA5306}
- Sdl.Community.Controls
-
-
-
-
- 2.8.1
-
-
- 2.1.0
-
-
- 17.0.0
-
-
-
-
-
-
- Always
-
-
-
-
-
-
-
diff --git a/Studio Migration Utility/Sdl.Community.StudioMigrationUtility/Services/MigrateProjectsService.cs b/Studio Migration Utility/Sdl.Community.StudioMigrationUtility/Services/MigrateProjectsService.cs
deleted file mode 100644
index 831fac08b3..0000000000
--- a/Studio Migration Utility/Sdl.Community.StudioMigrationUtility/Services/MigrateProjectsService.cs
+++ /dev/null
@@ -1,371 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Globalization;
-using System.IO;
-using System.Linq;
-using System.Reflection;
-using System.Xml.Linq;
-using Sdl.Community.StudioMigrationUtility.Model;
-using Sdl.TranslationStudioAutomation.IntegrationApi;
-using Sdl.Versioning;
-
-namespace Sdl.Community.StudioMigrationUtility.Services
-{
- public class MigrateProjectsService
- {
- private readonly StudioVersion _sourceStudioVersion;
- private readonly StudioVersion _destinationStudioVersion;
-
- public MigrateProjectsService(StudioVersion sourceVersion,StudioVersion destinationVersion)
- {
- _sourceStudioVersion = sourceVersion;
- _destinationStudioVersion = destinationVersion;
- }
-
- public ProjectsController GetProjectsController()
- {
- return SdlTradosStudio.Application.GetController();
- }
-
- public List GetProjectsToBeMigrated()
- {
- var projects = new List();
- var sourceProjectsPath = GetProjectsPath(_sourceStudioVersion);
- var destinationProjectsPath = GetProjectsPath(_destinationStudioVersion);
-
- var projectsXml = XElement.Load(sourceProjectsPath);
- var projectTagItem = XName.Get("ProjectListItem");
- var projectInfoTagItem = XName.Get("ProjectInfo");
-
- var projectCustomerItem = XName.Get("Customer");
-
- foreach (var projectTagItems in projectsXml.Descendants(projectTagItem))
- {
- var guidAttribute = projectTagItems.Attribute("Guid");
- if (guidAttribute != null)
- {
- var filePathAttribute = projectTagItems.Attribute("ProjectFilePath");
- if (filePathAttribute != null)
- {
- var project = new Project
- {
- Guid = new Guid(guidAttribute.Value),
- ProjectFilePath = filePathAttribute.Value
- };
- foreach (var projectInfoTagItems in projectTagItems.Descendants(projectInfoTagItem))
- {
-
- if (projectInfoTagItems.Attribute("StartedAt") != null)
- {
- var startedAtAttribute = projectInfoTagItems.Attribute("StartedAt");
- if (startedAtAttribute != null)
- {
- project.StartedAt = Convert.ToDateTime(startedAtAttribute.Value,
- DateTimeFormatInfo.InvariantInfo);
- }
- }
- else
- {
- project.StartedAt = DateTime.MinValue;
- }
- project.IsInPlace = Convert.ToBoolean(projectInfoTagItems.Attribute("IsInPlace").Value);
- project.IsImported = Convert.ToBoolean(projectInfoTagItems.Attribute("IsImported").Value);
- project.CreatedBy = projectInfoTagItems.Attribute("CreatedBy").Value;
- if (projectInfoTagItems.Attribute("Description") != null)
- {
- project.Description = projectInfoTagItems.Attribute("Description").Value;
- }
- project.CreatedAt = Convert.ToDateTime(projectInfoTagItems.Attribute("CreatedAt").Value);
- project.Name = projectInfoTagItems.Attribute("Name").Value;
- project.Status = projectInfoTagItems.Attribute("Status").Value;
-
-
- //Modification ID: PH_2015-07-05T21:12:00
- //Date: 2015-07-05
- //Added by: Patrick Hartnett
- //Begin Edit (PH_2015-07-05T21:12:00)
- if (projectInfoTagItems.HasElements)
- {
- var customerElement = projectInfoTagItems.Element(projectCustomerItem);
- if (customerElement != null)
- {
- var customerGuid = new Guid(customerElement.Attribute("Guid").Value);
- var customerName = customerElement.Attribute("Name").Value;
- var customerEmail = customerElement.Attribute("Email").Value;
- project.Customer = new Customer(customerGuid, customerName, customerEmail);
- }
- }
- //End Edit (PH_2015-07-05T21:12:00)
-
- }
- projects.Add(project);
- }
- }
- }
-
- var destinationProjectsXml = XElement.Load(destinationProjectsPath);
- var destinationProjects = destinationProjectsXml.Descendants(projectTagItem).Select(projectTagItems => new Project
- {
- Guid = new Guid(projectTagItems.Attribute("Guid").Value), ProjectFilePath = projectTagItems.Attribute("ProjectFilePath").Value
- }).ToList();
-
-
- return projects.Where(x=>destinationProjects.All(y => y.Guid != x.Guid)).ToList();
-
- }
-
- public string GetProjectsPath(StudioVersion studioVersion)
- {
- var myDocumnetsPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
-
- return Path.Combine(myDocumnetsPath, $@"{studioVersion.StudioDocumentsFolderName}\Projects\projects.xml");
- }
-
- public string GetTranslationMemoryPath(StudioVersion studioVersion)
- {
- var appDataPath = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
- var folderName = $@"{studioVersion.ExecutableVersion.Major}.0.0.0";
-
- return Path.Combine(appDataPath, $@"SDL\SDL Trados Studio\{folderName}\TranslationMemoryRepository.xml");
- }
-
- public void MigrateProjects(List projects, List projectsToBeMoved, bool migrateCustomers, Action reportProgress)
- {
- var destinationProjectPath = GetProjectsPath(_destinationStudioVersion);
- var projectsXml = XElement.Load(destinationProjectPath);
-
- if (migrateCustomers)
- {
- //if there customers associated with projects we need to make sure that we also migrate the customers
- //otherwise they will not appear
- MigrateCustomers(projectsXml);
-
- }
- MoveProjects(projectsToBeMoved,reportProgress);
-
- var projectsElement = projectsXml.Element("Projects");
- if (projectsElement == null)
- {
- var workFlowElement = projectsXml.Element("Workflow");
-
- projectsElement = new XElement("Projects");
- workFlowElement?.AddAfterSelf(projectsElement);
- }
-
-
- foreach (var project in projectsToBeMoved)
- {
- var workingProject = project;
- var projectMoved = projectsToBeMoved.Find(x => x.Guid.Equals(project.Guid));
- if (projectMoved != null)
- {
- workingProject = projectMoved;
- }
- var projectInfoItem = new XElement("ProjectInfo");
-
- if (workingProject.StartedAt != DateTime.MinValue)
- {
- projectInfoItem.Add(new XAttribute("StartedAt", workingProject.StartedAt));
- }
-
- projectInfoItem.Add(new XAttribute("IsInPlace", workingProject.IsInPlace),
- new XAttribute("IsImported", workingProject.IsImported),
- new XAttribute("CreatedBy", workingProject.CreatedBy),
- new XAttribute("CreatedAt", workingProject.CreatedAt),
- new XAttribute("Name", workingProject.Name),
- new XAttribute("Status", workingProject.Status));
-
- if (!string.IsNullOrEmpty(workingProject.Description))
- {
- projectInfoItem.Add(new XAttribute("Description", workingProject.Description));
- }
-
- //Modification ID: PH_2015-07-05T21:12:00
- //Date: 2015-07-05
- //Added by: Patrick Hartnett
- //Begin Edit (PH_2015-07-05T31:12:00)
- if (project.Customer != null && migrateCustomers)
- {
- var customertem = new XElement("Customer");
-
- customertem.Add(new XAttribute("Guid", project.Customer.Guid));
- customertem.Add(new XAttribute("Name", project.Customer.Name));
- customertem.Add(new XAttribute("Email", project.Customer.Email));
-
- projectInfoItem.Add(customertem);
- }
- //End Edit (PH_2015-07-05T31:12:00)
-
- var projectItem = new XElement("ProjectListItem", new XAttribute("Guid", workingProject.Guid),
- new XAttribute("ProjectFilePath", workingProject.ProjectFilePath), projectInfoItem);
- projectsElement.Add(projectItem);
- }
-
- projectsXml.Save(destinationProjectPath);
- reportProgress(95);
- }
-
-
- private void MigrateCustomers(XElement destinationProjectsXml)
- {
- var sourceProjectsPath = GetProjectsPath(_sourceStudioVersion);
- var sourceProjectsXml = XElement.Load(sourceProjectsPath);
-
- var xElement = sourceProjectsXml.Element("Customers");
- if (xElement != null && !xElement.HasElements) return;
-
- var element = destinationProjectsXml.Element("Customers");
- foreach (var sourceDescendant in from sourceDescendant in sourceProjectsXml.Descendants("Customer")
- let sourcePath = sourceDescendant.Attribute("Guid")
- where
- element != null && element
- .Descendants("Customer")
- .All(x => x.Attribute("Guid").Value != sourcePath.Value)
- select sourceDescendant)
- {
- //destinationProjectsXml.Element("Customers").Add(sourceDescendant);
- var xAttribute = sourceDescendant.Attribute("Name");
- var name = string.Empty;
- var email = string.Empty;
- if (xAttribute != null)
- {
- name = xAttribute.Value;
- }
- var attribute = sourceDescendant.Attribute("Email");
- if (attribute != null)
- {
- email = attribute.Value;
- }
- AddCustomers(name, email);
-
- }
- }
-
- private void AddCustomers(string name, string email)
- {
- var currentProject = GetProjectsController().CurrentProject;
- var type = currentProject.GetType();
-
- var internalProjectField = type.GetField("_project", BindingFlags.Instance | BindingFlags.NonPublic);
- if (internalProjectField != null)
- {
- dynamic internalDynamicaProject = internalProjectField.GetValue(currentProject);
- dynamic customersList = internalDynamicaProject.ProjectServer.Customers;
- var existCustomer = false;
- foreach (var customer in customersList)
- {
- if (customer.Name == name)
- {
- existCustomer = true;
- }
- }
- if (existCustomer==false)
- {
- internalDynamicaProject.ProjectServer.AddCustomer(name, email);
- }
- }
- }
-
- private void MoveProjects(IEnumerable projectToBeMoved, Action reportProgress)
- {
- var destinationProjectsPath = Path.GetDirectoryName(GetProjectsPath(_destinationStudioVersion));
- var sourceProjectsPath = Path.GetDirectoryName(GetProjectsPath(_sourceStudioVersion));
- var chunkSize = 90/(!projectToBeMoved.Any() ? 1 : projectToBeMoved.Count());
- var progress = 0;
- foreach (var project in projectToBeMoved)
- {
- var destinationProjectPath = Path.Combine(destinationProjectsPath, project.Name);
- var projectFilePath = project.ProjectFilePath;
- if (!Path.IsPathRooted(projectFilePath))
- {
- projectFilePath = Path.Combine(sourceProjectsPath, project.ProjectFilePath);
- }
- DirectoryCopy(Path.GetDirectoryName(projectFilePath), destinationProjectPath);
- var fileName = Path.GetFileName(project.ProjectFilePath);
- project.ProjectFilePath = Path.Combine(destinationProjectPath, fileName);
- progress += chunkSize;
- reportProgress(progress);
- }
- }
-
- private void DirectoryCopy(string sourceDirectory, string destinationDirectory)
- {
-
- if (Directory.Exists(destinationDirectory))
- {
- return;
- }
-
- Directory.CreateDirectory(string.Format(destinationDirectory));
-
- var dir = new DirectoryInfo(sourceDirectory);
- var dirs = dir.GetDirectories();
-
- var files = dir.GetFiles();
- foreach (var file in files)
- {
- var temppath = Path.Combine(destinationDirectory, file.Name);
- file.CopyTo(temppath, false);
- }
-
- foreach (var subdir in dirs)
- {
- var temppath = Path.Combine(destinationDirectory, subdir.Name);
- DirectoryCopy(subdir.FullName, temppath);
- }
- }
-
- internal void MigrateTranslationMemories()
- {
- var sourceVersionTmPath = GetTranslationMemoryPath(_sourceStudioVersion);
- var destinationVersionTmPath = GetTranslationMemoryPath(_destinationStudioVersion);
-
- var sourceTmXml = XElement.Load(sourceVersionTmPath);
- var destinationTmXml = XElement.Load(destinationVersionTmPath);
-
- foreach (var sourceDescendant in sourceTmXml.Descendants("TranslationMemory"))
- {
- var pathAttribute = sourceDescendant.Attribute("path");
- if (pathAttribute != null)
- {
- var sourcePath = pathAttribute.Value;
- if (destinationTmXml.Descendants("TranslationMemory").All(x => x.Attribute("path").Value != sourcePath))
- {
- var tmElement = destinationTmXml.Element("TranslationMemories");
- tmElement?.Add(sourceDescendant);
- }
- }
- }
-
- foreach (var sourceDescendant in sourceTmXml.Descendants("LanguageResources"))
- {
- var pathAttribute = sourceDescendant.Attribute("path");
- if (pathAttribute != null)
- {
- var sourcePath = pathAttribute.Value;
- if (destinationTmXml.Descendants("LanguageResources").All(x => x.Attribute("path").Value != sourcePath))
- {
- var languagteResourcesElement = destinationTmXml.Element("LanguageResourceGroups");
- languagteResourcesElement?.Add(sourceDescendant);
- }
- }
- }
-
- destinationTmXml.Save(destinationVersionTmPath);
- }
-
- public string TryGetElementValue(XElement parentEl, string elementName, string defaultValue = null)
- {
- var foundEl = parentEl.Element(elementName);
-
- if (foundEl != null)
- {
- return foundEl.Value;
- }
-
- return defaultValue;
- }
-
-
- }
-}
diff --git a/Studio Migration Utility/Sdl.Community.StudioMigrationUtility/Services/PluginService.cs b/Studio Migration Utility/Sdl.Community.StudioMigrationUtility/Services/PluginService.cs
deleted file mode 100644
index a0db3fdce5..0000000000
--- a/Studio Migration Utility/Sdl.Community.StudioMigrationUtility/Services/PluginService.cs
+++ /dev/null
@@ -1,35 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
-using Sdl.Versioning;
-
-namespace Sdl.Community.StudioMigrationUtility.Services
-{
- public class PluginService
- {
- private readonly List _pluginFolderLocations = new List
- {
- Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData),
- Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData),
- Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData)
- };
-
- public List GetInstalledPlugins(StudioVersion studioVersion)
- {
- var installedPlugins = new List();
-
- var pluginPath = _pluginFolderLocations.Select(
- pluginFolderLocation => Path.Combine(pluginFolderLocation, studioVersion.PluginPackagePath));
-
- foreach (var plugin in pluginPath.Select(path => Directory.GetFiles(path, "*.sdlplugin"))
- .Where(plugin => plugin.Length != 0))
- {
- installedPlugins.AddRange(plugin);
- }
-
- return installedPlugins;
- }
-
- }
-}
diff --git a/Studio Migration Utility/Sdl.Community.StudioMigrationUtility/StudioMigrationUtilityRibbon.cs b/Studio Migration Utility/Sdl.Community.StudioMigrationUtility/StudioMigrationUtilityRibbon.cs
deleted file mode 100644
index 55433e82c6..0000000000
--- a/Studio Migration Utility/Sdl.Community.StudioMigrationUtility/StudioMigrationUtilityRibbon.cs
+++ /dev/null
@@ -1,38 +0,0 @@
-using System;
-using Sdl.Desktop.IntegrationApi;
-using Sdl.Desktop.IntegrationApi.DefaultLocations;
-using Sdl.Desktop.IntegrationApi.Extensions;
-using Sdl.Versioning;
-
-namespace Sdl.Community.StudioMigrationUtility
-{
- [RibbonGroup("Sdl.Community.StudioMigrationUtility", Name = "Studio Migration Utility")]
- [RibbonGroupLayout(LocationByType = typeof(StudioDefaultRibbonTabs.AddinsRibbonTabLocation))]
- class StudioMigrationUtilityRibbon : AbstractRibbonGroup
- {
- }
-
-
- [Action("Sdl.Community.StudioMigrationUtility", Name = "Studio Migration Utility", Icon = "migrate", Description = "Studio Migration Utility")]
- [ActionLayout(typeof(StudioMigrationUtilityRibbon), 20, DisplayType.Large)]
- class StudioMigrationUtilityViewPartAction : AbstractAction
- {
- protected override void Execute()
- {
-
- var migrateUtility = new MigrateUtility(new StudioVersionService());
- migrateUtility.ShowDialog();
-
- }
- }
- [Action("Sdl.Community.StudioMigrationUtilityHelp", Name = "Migration Utility help", Icon = "question", Description = "An wiki page will be opened in browser with user documentation")]
- [ActionLayout(typeof(StudioMigrationUtilityRibbon), 250, DisplayType.Large)]
- public class AhkHelpAction : AbstractAction
- {
- protected override void Execute()
- {
- System.Diagnostics.Process.Start("https://community.sdl.com/product-groups/translationproductivity/w/customer-experience/3265.studio-migration-utility");
-
- }
- }
-}
diff --git a/Studio Migration Utility/Sdl.Community.StudioMigrationUtility/pluginpackage.manifest.xml b/Studio Migration Utility/Sdl.Community.StudioMigrationUtility/pluginpackage.manifest.xml
deleted file mode 100644
index 8ca7d29532..0000000000
--- a/Studio Migration Utility/Sdl.Community.StudioMigrationUtility/pluginpackage.manifest.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
- Studio Migration Utility
- 4.0.0.0
- Studio Migration Utility
- Trados AppStore Team
-
-
- Sdl.Community.Controls.dll
- ObjectListView.dll
- Sdl.Community.PluginInfo
-
-
diff --git a/Studio Migration Utility/setup.iss b/Studio Migration Utility/setup.iss
deleted file mode 100644
index de5e67f1ad..0000000000
--- a/Studio Migration Utility/setup.iss
+++ /dev/null
@@ -1,83 +0,0 @@
-; -- setup.iss --
-; SEE THE DOCUMENTATION FOR DETAILS ON CREATING .ISS SCRIPT FILES!
-
-[Setup]
-AppName=Studio Migration Utility
-AppPublisher=SDL Community Developers
-AppPublisherURL=https://community.sdl.com/
-AppVersion=2.2.0.0
-DisableDirPage = yes
-DisableWelcomePage = yes
-AllowNoIcons = yes
-DefaultDirName={pf32}\SDL\SDL Community\Studio Migration Utility
-Compression=lzma2
-SolidCompression=yes
-OutputDir=userdocs:Inno Setup Examples Output
-PrivilegesRequired = admin
-DefaultGroupName=SDL\SDL Community
-
-[Files]
-Source: "c:\Work\Git\SDL-Community\Studio Migration Utility\Sdl.Community.StudioMigrationUtility\bin\Release\Sdl.Community.StudioMigrationUtility.exe"; DestDir: "{app}"
-Source: "c:\Work\Git\SDL-Community\Studio Migration Utility\Sdl.Community.StudioMigrationUtility\bin\Release\Sdl.Community.StudioMigrationUtility.exe.config"; DestDir: "{app}"
-Source: "c:\Work\Git\SDL-Community\Studio Migration Utility\Sdl.Community.StudioMigrationUtility\bin\Release\Sdl.Community.Controls.dll"; DestDir: "{app}"
-Source: "c:\Work\Git\SDL-Community\Studio Migration Utility\Sdl.Community.StudioMigrationUtility\bin\Release\ObjectListView.dll"; DestDir: "{app}"
-Source: "c:\Work\Git\SDL-Community\Studio Migration Utility\Sdl.Community.StudioMigrationUtility\bin\Release\Resources\migrate.ico"; DestDir: "{app}"
-
-[UninstallDelete]
-Type: filesandordirs; Name: "{pf32}\SDL\SDL Community\Studio Migration Utility"
-
-[Icons]
-Name: {group}\Studio Migration Utility; Filename: {app}\Sdl.Community.StudioMigrationUtility.exe; WorkingDir: {app}; IconFilename: {app}\migrate.ico; Comment: "Studio Migration Utility";
-Name: {commondesktop}\Studio Migration Utility; Filename: {app}\Sdl.Community.StudioMigrationUtility.exe; WorkingDir: {app}; IconFilename: {app}\migrate.ico; Comment: "Studio Migration Utility";
-[Code]
-function GetUninstallString(): String;
-var
- sUnInstPath: String;
- sUnInstallString: String;
-begin
- sUnInstPath := ExpandConstant('Software\Microsoft\Windows\CurrentVersion\Uninstall\{#emit SetupSetting("AppName")}_is1');
- sUnInstallString := '';
- if not RegQueryStringValue(HKLM, sUnInstPath, 'UninstallString', sUnInstallString) then
- RegQueryStringValue(HKCU, sUnInstPath, 'UninstallString', sUnInstallString);
- Result := sUnInstallString;
-end;
-function IsUpgrade(): Boolean;
-begin
- Result := (GetUninstallString() <> '');
-end;
-function UnInstallOldVersion(): Integer;
-var
- sUnInstallString: String;
- iResultCode: Integer;
-begin
-// Return Values:
-// 1 - uninstall string is empty
-// 2 - error executing the UnInstallString
-// 3 - successfully executed the UnInstallString
-
- // default return value
- Result := 0;
-
- // get the uninstall string of the old app
- sUnInstallString := GetUninstallString();
- if sUnInstallString <> '' then begin
- sUnInstallString := RemoveQuotes(sUnInstallString);
- if Exec(sUnInstallString, '/SILENT /NORESTART /SUPPRESSMSGBOXES','', SW_HIDE, ewWaitUntilTerminated, iResultCode) then
- Result := 3
- else
- Result := 2;
- end else
- Result := 1;
-end;
-
-/////////////////////////////////////////////////////////////////////
-procedure CurStepChanged(CurStep: TSetupStep);
-begin
- if (CurStep=ssInstall) then
- begin
- if (IsUpgrade()) then
- begin
- UnInstallOldVersion();
- end;
- end;
-end;
diff --git a/TM Optimizer/OpenExchange/tmoptimizer_256.png b/TM Optimizer/OpenExchange/tmoptimizer_256.png
deleted file mode 100644
index e887b4993c..0000000000
Binary files a/TM Optimizer/OpenExchange/tmoptimizer_256.png and /dev/null differ
diff --git a/TM Optimizer/README.md b/TM Optimizer/README.md
deleted file mode 100644
index 25e750c7cf..0000000000
--- a/TM Optimizer/README.md
+++ /dev/null
@@ -1,46 +0,0 @@
-# TM Optimizer
-
-## Using TM Optimizer
-
-After installation, start TM Optimizer from the Start menu under SDL->TM Optimizer.
-
-On the first page of the TM Optimizer wizard, you have two choices, depending on your situation:
-
-1. **Convert Workbench translation memory:** Use this option when you have not yet converted your Workbench TM for use in Studio. You will need a TMX export of the Workbench TM you want to convert.
-1. **Optimize already converted Workbench translation memory:** Use this option when you have already converted your Workbench TM to a Studio TM but are having problems caused by excessive formatting tags. You will need your Studio TM and a TMX export of your original Workbench TM.
- 
-
-On the second page, select the TMX files you have exported from your existing TRADOS Workbench TM. The TMX files are analyzed and the number of TUs and languages are displayed. If you had already converted the Workbench TMs to Studio TMs using the Studio TM upgrade wizard (and have selected option 2 on the previous page), you also have to select that Studio TM here.
-
-
-On the third page, you select the TM into which the optimized translation units should be imported. This could be either a newly created TM or an existing TM. This TM should be different from the input TM you chose on the previous page.
-
-
-Finally, on the processing page, you will see detailed progress on the TM optimization process. When all the steps are completed, you can browse to the output TM or open the TM in Studio using the buttons that appear at the bottom of the wizard.
-
-
-## How does TM optimizer work ?
-### Increases TM leverage
-
-When using TRADOS Workbench with the Microsoft Word macro for translation of RTF and DOC files, translation memories are often polluted with unnecessary formatting tags. If you convert such translation memory into SDL Trados Studio you experience that translations where you expect exact matches will be reported as fuzzy matches, effectively costing you money. TM Optimizer will analyse the content of each translation unit and will optimize the tag content for optimal results in SDL Trados Studio. In addition translation unit content is harmonized so you can achieve the best results and don't spent any extra money on translations you already paid once.
-
-The two screenshots below illustrate what this means in practice. In the first picture, the TM only returns a 99% match where you would have expected a 100% match, purely due to excessive, unnecessary tags.
-
-
-Using the optimized TM, you see that the TM now returns a 100% match. Note that TM Optimizer only selectively removes the unnecessary tags.
-
-
-
-### Removes excessive formatting, e.g. font change, kerning, tracking, spacing
-
-Due to limitations of the Microsoft Word macro, unnecessary formatting information is stored in the translation memory. TM Optimizer will remove such formatting giving you less work and making translation easier.
-
-### Import of the TMX is much faster
-
-Due the fact that during optimization a vast amount of tags is removed, SDL Trados Studio will perform all operations which are using translation memory much faster. In cetain cases the difference is more than 500%.
-
-### Makes migration from DOC in TagEditor to DOCX in Studio much easier
-
-More and more clients are migrating from the legacy DOC format towards the latest version of Microsoft Word which is using the new DOCX file format. The features mentioned above will allow you to switch from translating DOC files in Microsoft Word to translating DOCX files in SDL Trados Studio without the major issues with leverage you would otherwise see.
-
-
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer.Control/CleanWorkbenchTmxStep.cs b/TM Optimizer/Sdl.Community.TMOptimizer.Control/CleanWorkbenchTmxStep.cs
deleted file mode 100644
index c3b2c62f25..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer.Control/CleanWorkbenchTmxStep.cs
+++ /dev/null
@@ -1,37 +0,0 @@
-using System;
-using System.IO;
-using Sdl.Community.TMOptimizerLib;
-
-namespace Sdl.Community.TMOptimizer.Control
-{
- ///
- /// Cleans a Workbench TMX file, removing unnecessary formatting tags
- ///
- class CleanWorkbenchTmxStep : ProcessingStep
- {
- private TmxFile _inputTmxFile;
- private TmxFile _outputTmxFile;
- private Cleaner _cleaner;
- private int? _maxTusProcessed;
-
- public CleanWorkbenchTmxStep(TmxFile inputTmxFile, TmxFile outputTmxFile, int? maxTusProcessed)
- : base(String.Format("Clean {0}", Path.GetFileName(inputTmxFile.FilePath)))
- {
- _inputTmxFile = inputTmxFile;
- _outputTmxFile = outputTmxFile;
- _maxTusProcessed = maxTusProcessed;
- }
-
- protected override void ExecuteImpl()
- {
- _cleaner = new Cleaner(_inputTmxFile, _outputTmxFile, Context.Settings, null);
- AttachProcessorEvents(_cleaner);
- _cleaner.Execute();
- }
-
- protected override void OnReportProgress()
- {
- StatusMessage = String.Format("TUs: {0}/{1} | tags removed: {2} | tags updated {3}", _cleaner.TusRead, _inputTmxFile.GetDetectInfo().TuCount, _cleaner.TagsRemoved, _cleaner.TagsUpdated);
- }
- }
-}
\ No newline at end of file
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer.Control/CreateStudioTmStep.cs b/TM Optimizer/Sdl.Community.TMOptimizer.Control/CreateStudioTmStep.cs
deleted file mode 100644
index ac84714867..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer.Control/CreateStudioTmStep.cs
+++ /dev/null
@@ -1,109 +0,0 @@
-using System;
-using System.Globalization;
-using System.IO;
-using Sdl.Core.Globalization;
-using Sdl.LanguagePlatform.Core.Tokenization;
-using Sdl.LanguagePlatform.TranslationMemory;
-using Sdl.LanguagePlatform.TranslationMemoryApi;
-
-namespace Sdl.Community.TMOptimizer.Control
-{
- ///
- /// Create an empty Studio TM
- ///
- class CreateStudioTmStep : ProcessingStep
- {
- private TranslationMemoryReference _tm;
- private Language _sourceLanguage;
- private Language _targetLanguage;
- private TranslationMemoryReference _templateTranslationMemory;
-
- public CreateStudioTmStep(
- TranslationMemoryReference tm,
- Language sourceLanguage,
- Language targetLanguage,
- TranslationMemoryReference templateTranslationMemory) : base(String.Format("Create output TM {0}", Path.GetFileName(tm.FilePath)))
- {
- _tm = tm;
- _sourceLanguage = sourceLanguage;
- _targetLanguage = targetLanguage;
- _templateTranslationMemory = templateTranslationMemory;
- }
-
- protected override void ExecuteImpl()
- {
- CultureInfo sourceCulture;
- CultureInfo targetCulture;
- FuzzyIndexes fuzzyIndexes;
- BuiltinRecognizers recognizers;
- if (_templateTranslationMemory != null && _templateTranslationMemory.FilePath != null)
- {
- sourceCulture = new Language(_templateTranslationMemory.TranslationMemory.LanguageDirection.SourceLanguage.ToString()).CultureInfo;
- targetCulture = new Language(_templateTranslationMemory.TranslationMemory.LanguageDirection.TargetLanguage.ToString()).CultureInfo;
- fuzzyIndexes = _templateTranslationMemory.TranslationMemory.FuzzyIndexes;
- recognizers = _templateTranslationMemory.TranslationMemory.Recognizers;
- }
- else
- {
- sourceCulture = _sourceLanguage.CultureInfo;
- targetCulture = _targetLanguage.CultureInfo;
- fuzzyIndexes = FuzzyIndexes.SourceWordBased | FuzzyIndexes.TargetWordBased;
- recognizers = BuiltinRecognizers.RecognizeAll;
- }
-
- FileBasedTranslationMemory tm = new FileBasedTranslationMemory(
- _tm.FilePath,
- String.Empty,
- sourceCulture,
- targetCulture,
- fuzzyIndexes,
- recognizers,
- TokenizerFlags.DefaultFlags,
- WordCountFlags.DefaultFlags );
-
- ReportProgress(25);
- tm.Save();
- ReportProgress(50);
-
- if (_templateTranslationMemory != null && _templateTranslationMemory.FilePath != null)
- {
- CopyTmLanguageResources(_templateTranslationMemory.TranslationMemory, tm);
- CopyTmFieldDefinitions(_templateTranslationMemory.TranslationMemory, tm);
- }
-
- ReportProgress(75);
-
- tm.Save();
-
- ReportProgress(100);
- }
-
- private void CopyTmLanguageResources(FileBasedTranslationMemory templateTm, FileBasedTranslationMemory tm)
- {
- ITranslationMemoryLanguageDirection languageDirection = tm.LanguageDirection;
-
- // Copy any sourcelanguage resources from the template tm to the new tm
- LanguageResourceBundle sourceLanguageBundle = templateTm.LanguageResourceBundles[languageDirection.SourceLanguage];
- if (sourceLanguageBundle != null)
- {
- tm.LanguageResourceBundles.Add(sourceLanguageBundle.Clone());
- }
-
- // Copy any target language resources from the template tm to the new tm
- LanguageResourceBundle targetLanguageBundle = templateTm.LanguageResourceBundles[languageDirection.TargetLanguage];
- if (targetLanguageBundle != null)
- {
- tm.LanguageResourceBundles.Add(targetLanguageBundle.Clone());
- }
-
- }
-
- private void CopyTmFieldDefinitions(FileBasedTranslationMemory templateTm, FileBasedTranslationMemory tm)
- {
- foreach (FieldDefinition field in templateTm.FieldDefinitions)
- {
- tm.FieldDefinitions.Add(field.Clone());
- }
- }
- }
-}
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer.Control/DeleteTempFilesStep.cs b/TM Optimizer/Sdl.Community.TMOptimizer.Control/DeleteTempFilesStep.cs
deleted file mode 100644
index db87df4c56..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer.Control/DeleteTempFilesStep.cs
+++ /dev/null
@@ -1,34 +0,0 @@
-using System.IO;
-
-namespace Sdl.Community.TMOptimizer.Control
-{
- ///
- /// Deletes temp files created during processing.
- ///
- class DeleteTempFilesStep : ProcessingStep
- {
- public DeleteTempFilesStep() : base("Delete temp files")
- {
- }
-
- protected override void ExecuteImpl()
- {
- for (int i = 0; i < Context.TempFiles.Count; i++)
- {
- try
- {
- File.Delete(Context.TempFiles[i]);
- ReportProgress((int)((i+1)*100.0)/Context.TempFiles.Count);
- }
- catch
- {
- // ignore
- }
- }
-
- Context.TempFiles.Clear();
-
- ReportProgress(100);
- }
- }
-}
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer.Control/EnumRadioButton.cs b/TM Optimizer/Sdl.Community.TMOptimizer.Control/EnumRadioButton.cs
deleted file mode 100644
index 7fc9c18ed7..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer.Control/EnumRadioButton.cs
+++ /dev/null
@@ -1,142 +0,0 @@
-using System;
-using System.Windows;
-using System.Windows.Controls;
-
-namespace Sdl.Community.TMOptimizer.Control
-{
- ///
- /// Radio button that supports binding to an enum.
- ///
- public class EnumRadioButton : RadioButton
- {
- public EnumRadioButton()
- {
- Loaded += _Loaded;
- Checked += _Checked;
- }
-
- private void _Loaded(object sender, RoutedEventArgs event_arguments)
- {
- _SetChecked();
- }
-
- private void _Checked(object sender, RoutedEventArgs event_arguments)
- {
- if (IsChecked == true)
- {
- object binding = EnumBinding;
-
- if ((binding is Enum) && (EnumValue != null))
- {
- try
- {
- EnumBinding = Enum.Parse(binding.GetType(), EnumValue);
- }
-
- catch (ArgumentException exception)
- {
- System.Diagnostics.Debug.WriteLine(
- string.Format(
- "EnumRadioButton [{0}]: " +
- "EnumBinding = {1}, " +
- "EnumValue = {2}, " +
- "ArgumentException {3}",
- Name,
- EnumBinding,
- EnumValue,
- exception));
-
- throw;
- }
- }
- }
- }
-
- private void _SetChecked()
- {
- object binding = EnumBinding;
-
- if ((binding is Enum) && (EnumValue != null))
- {
- try
- {
- object value = Enum.Parse(binding.GetType(), EnumValue);
-
- IsChecked = ((Enum)binding).CompareTo(value) == 0;
- }
-
- catch (ArgumentException exception)
- {
- System.Diagnostics.Debug.WriteLine(
- string.Format(
- "EnumRadioButton [{0}]: " +
- "EnumBinding = {1}, " +
- "EnumValue = {2}, " +
- "ArgumentException {3}",
- Name,
- EnumBinding,
- EnumValue,
- exception));
-
- throw;
- }
- }
- }
-
- static EnumRadioButton()
- {
- FrameworkPropertyMetadata enum_binding_metadata = new FrameworkPropertyMetadata();
-
- enum_binding_metadata.BindsTwoWayByDefault = true;
- enum_binding_metadata.PropertyChangedCallback = OnEnumBindingChanged;
-
- EnumBindingProperty = DependencyProperty.Register("EnumBinding",
- typeof(object),
- typeof(EnumRadioButton),
- enum_binding_metadata);
-
- EnumValueProperty = DependencyProperty.Register("EnumValue",
- typeof(string),
- typeof(EnumRadioButton));
- }
-
- public static readonly DependencyProperty EnumBindingProperty;
-
- private static void OnEnumBindingChanged(DependencyObject dependency_object,
- DependencyPropertyChangedEventArgs event_arguments)
- {
- if (dependency_object is EnumRadioButton)
- {
- ((EnumRadioButton)dependency_object)._SetChecked();
- }
- }
-
- public object EnumBinding
- {
- set
- {
- SetValue(EnumBindingProperty, value);
- }
-
- get
- {
- return (object)GetValue(EnumBindingProperty);
- }
- }
-
- public static readonly DependencyProperty EnumValueProperty;
-
- public string EnumValue
- {
- set
- {
- SetValue(EnumValueProperty, value);
- }
-
- get
- {
- return (string)GetValue(EnumValueProperty);
- }
- }
- }
-}
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer.Control/ExportStudioTmStep.cs b/TM Optimizer/Sdl.Community.TMOptimizer.Control/ExportStudioTmStep.cs
deleted file mode 100644
index 3e9bef0bba..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer.Control/ExportStudioTmStep.cs
+++ /dev/null
@@ -1,48 +0,0 @@
-using System;
-using Sdl.Community.TMOptimizerLib;
-using Sdl.Core.Globalization;
-using Sdl.Core.Globalization.LanguageRegistry;
-using Sdl.LanguagePlatform.TranslationMemoryApi;
-
-namespace Sdl.Community.TMOptimizer.Control
-{
- ///
- /// Export a Studio TM to TMX
- ///
- class ExportStudioTmStep : ProcessingStep
- {
- private FileBasedTranslationMemory _translationMemory;
- private TmxFile _exportTmxFile;
-
- public ExportStudioTmStep(FileBasedTranslationMemory translationMemory, TmxFile exportTmxFile)
- : base(String.Format("Exporting translation memory {0}", translationMemory.Name))
- {
- _translationMemory = translationMemory;
- _exportTmxFile = exportTmxFile;
- }
-
- protected override void ExecuteImpl()
- {
- TranslationMemoryExporter exporter = new TranslationMemoryExporter(_translationMemory.LanguageDirection);
- int tuCount = _translationMemory.LanguageDirection.GetTranslationUnitCount();
- exporter.BatchExported += (sender, e) =>
- {
- StatusMessage = String.Format("TUs: {0}/{1}", e.TotalProcessed, tuCount);
- ReportProgress((int)((100.0 * e.TotalExported) / tuCount));
- };
- exporter.TmxExportFormat = Sdl.LanguagePlatform.TranslationMemory.TranslationUnitFormat.SDLTradosStudio2009;
-
- exporter.Export(_exportTmxFile.FilePath, true);
-
- _exportTmxFile.DetectInfo = new DetectInfo
- {
- DetectedVersion = DetectInfo.Versions.Studio,
- SourceLanguage = new Language(_translationMemory.LanguageDirection.SourceLanguage.ToString()),
- TargetLanguage = new Language(_translationMemory.LanguageDirection.TargetLanguage.ToString()),
- OriginalSourceLanguage = _translationMemory.LanguageDirection.SourceLanguage.Name,
- OriginalTargetLanguage = _translationMemory.LanguageDirection.TargetLanguage.Name,
- TuCount = tuCount
- };
- }
- }
-}
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer.Control/ImportStudioTmStep.cs b/TM Optimizer/Sdl.Community.TMOptimizer.Control/ImportStudioTmStep.cs
deleted file mode 100644
index 4c96cfc624..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer.Control/ImportStudioTmStep.cs
+++ /dev/null
@@ -1,46 +0,0 @@
-using System;
-using Sdl.Community.TMOptimizerLib;
-using Sdl.LanguagePlatform.TranslationMemory;
-using Sdl.LanguagePlatform.TranslationMemoryApi;
-
-namespace Sdl.Community.TMOptimizer.Control
-{
- ///
- /// Imports a TMX file into a Studio TM
- ///
- class ImportStudioTmStep : ProcessingStep
- {
- private TranslationMemoryReference _outputTranslationMemory;
- private string _name;
- private TmxFile _tmxFile;
-
- public ImportStudioTmStep(TranslationMemoryReference outputTranslationMemory, string name, TmxFile tmxFile)
- : base(String.Format("Import {0}", name))
- {
- _outputTranslationMemory = outputTranslationMemory;
- _name = name;
- _tmxFile = tmxFile;
- }
-
- protected override void ExecuteImpl()
- {
- FileBasedTranslationMemory tm = _outputTranslationMemory.TranslationMemory;
- TranslationMemoryImporter importer = new TranslationMemoryImporter(tm.LanguageDirection);
- importer.BatchImported += (sender, e) =>
- {
- StatusMessage = String.Format("TUs: {0}/{1}", e.Statistics.TotalRead, _tmxFile.GetDetectInfo().TuCount);
- ReportProgress((int)((100.0 * e.Statistics.RawTUs) / _tmxFile.GetDetectInfo().TuCount));
- };
- importer.ImportSettings = new ImportSettings
- {
- CheckMatchingSublanguages = false,
- ExistingFieldsUpdateMode = ImportSettings.FieldUpdateMode.Merge,
- NewFields = ImportSettings.NewFieldsOption.AddToSetup,
- OverwriteExistingTUs = false,
- TUProcessingMode = ImportSettings.ImportTUProcessingMode.ProcessCleanedTUOnly
- };
-
- importer.Import(_tmxFile.FilePath);
- }
- }
-}
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer.Control/InputTmxFile.cs b/TM Optimizer/Sdl.Community.TMOptimizer.Control/InputTmxFile.cs
deleted file mode 100644
index 5b3ec2e138..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer.Control/InputTmxFile.cs
+++ /dev/null
@@ -1,45 +0,0 @@
-using System.ComponentModel;
-using Sdl.Community.TMOptimizerLib;
-
-namespace Sdl.Community.TMOptimizer.Control
-{
- ///
- /// A TMX file that needs to be cleaned up.
- ///
- public class InputTmxFile : INotifyPropertyChanged
- {
- public event PropertyChangedEventHandler PropertyChanged;
-
- public InputTmxFile(TmxFile tmxFile)
- {
- TmxFile = tmxFile;
- }
-
- ///
- /// The original TMX file
- ///
- public TmxFile TmxFile
- {
- get;
- private set;
- }
-
- ///
- /// The cleaned up TMX file.
- ///
- public TmxFile CleanTmxFile
- {
- get;
- set;
- }
-
- private void OnNotifyPropertyChanged(string propertyName)
- {
- if (PropertyChanged != null)
- {
- PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
- }
- }
-
- }
-}
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer.Control/InputWizardPageControl.xaml b/TM Optimizer/Sdl.Community.TMOptimizer.Control/InputWizardPageControl.xaml
deleted file mode 100644
index 9a260134e7..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer.Control/InputWizardPageControl.xaml
+++ /dev/null
@@ -1,77 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer.Control/InputWizardPageControl.xaml.cs b/TM Optimizer/Sdl.Community.TMOptimizer.Control/InputWizardPageControl.xaml.cs
deleted file mode 100644
index 94c900564a..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer.Control/InputWizardPageControl.xaml.cs
+++ /dev/null
@@ -1,82 +0,0 @@
-using System.Collections.Generic;
-using System.Linq;
-using System.Windows;
-using System.Windows.Controls;
-
-namespace Sdl.Community.TMOptimizer.Control
-{
- ///
- /// Interaction logic for InputWizardPageControl.xaml
- ///
- public partial class InputWizardPageControl : UserControl, IWizardPageControl
- {
- public InputWizardPageControl()
- {
- InitializeComponent();
-
- UpdateEnabled();
- }
-
- private void BrowseTM_Click(object sender, RoutedEventArgs e)
- {
- ViewModel.SelectExistingTranslationMemory();
- }
-
- private void AddTMX_Click(object sender, RoutedEventArgs e)
- {
- ViewModel.AddTmxInputFile();
- }
-
- private void RemoveTMX_Click(object sender, RoutedEventArgs e)
- {
- List selectedTmxFiles = new List(_inputTmxFilesDataGrid.SelectedItems.Cast());
- foreach (InputTmxFile f in selectedTmxFiles)
- {
- ViewModel.InputTmxFiles.Remove(f);
- }
- }
-
- public TMCleanerViewModel ViewModel
- {
- get
- {
- return (TMCleanerViewModel)DataContext;
- }
- }
-
- private void UpdateEnabled()
- {
- _removeButton.IsEnabled = _inputTmxFilesDataGrid.SelectedItems.Count > 0;
- }
-
- private void _inputTmxFilesDataGrid_SelectedCellsChanged_1(object sender, SelectedCellsChangedEventArgs e)
- {
- UpdateEnabled();
- }
-
- public bool Next()
- {
- return ViewModel.ValidateInput();
- }
-
- public bool Previous()
- {
- return true;
- }
-
- public void Help()
- {
-
- }
-
- public void Finish()
- {
-
- }
-
- public void Cancel()
- {
-
- }
- }
-}
\ No newline at end of file
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer.Control/IntroWizardPageControl.xaml b/TM Optimizer/Sdl.Community.TMOptimizer.Control/IntroWizardPageControl.xaml
deleted file mode 100644
index eb24577549..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer.Control/IntroWizardPageControl.xaml
+++ /dev/null
@@ -1,30 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
- _Convert Workbench translation memory
-
- Use this option when you have not yet converted your Workbench TM for use in Studio. You will need
- a TMX export of the Workbench TM you want to convert.
- _Optimize already converted Workbench translation memory
- Use this option when you have already converted your Workbench TM to a Studio TM but are having problems caused
- by excessive formatting tags. You will need your Studio TM and a TMX export of your original Workbench TM.
-
-
-
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer.Control/IntroWizardPageControl.xaml.cs b/TM Optimizer/Sdl.Community.TMOptimizer.Control/IntroWizardPageControl.xaml.cs
deleted file mode 100644
index 0e2bb6af45..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer.Control/IntroWizardPageControl.xaml.cs
+++ /dev/null
@@ -1,15 +0,0 @@
-using System.Windows.Controls;
-
-namespace Sdl.Community.TMOptimizer.Control
-{
- ///
- /// Interaction logic for IntroWizardPageControl.xaml
- ///
- public partial class IntroWizardPageControl : UserControl
- {
- public IntroWizardPageControl()
- {
- InitializeComponent();
- }
- }
-}
\ No newline at end of file
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer.Control/MainWindow.xaml b/TM Optimizer/Sdl.Community.TMOptimizer.Control/MainWindow.xaml
deleted file mode 100644
index 13882c797d..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer.Control/MainWindow.xaml
+++ /dev/null
@@ -1,46 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer.Control/MainWindow.xaml.cs b/TM Optimizer/Sdl.Community.TMOptimizer.Control/MainWindow.xaml.cs
deleted file mode 100644
index 8937d3e53a..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer.Control/MainWindow.xaml.cs
+++ /dev/null
@@ -1,77 +0,0 @@
-using System.Windows;
-using Xceed.Wpf.Toolkit;
-
-namespace Sdl.Community.TMOptimizer.Control
-{
- ///
- /// Interaction logic for MainWindow.xaml
- ///
- public partial class MainWindow : Window
- {
- public MainWindow()
- {
- InitializeComponent();
-
- _wizard.NextButtonContent = "_Next";
- _wizard.HelpButtonContent = "_Help";
- _wizard.CancelButtonContent = "C_ancel";
- _wizard.BackButtonContent = "_Previous";
- _wizard.FinishButtonContent = "_Finish";
- }
-
- public TMCleanerViewModel ViewModel
- {
- get
- {
- return (TMCleanerViewModel)DataContext;
- }
- }
-
- private void Wizard_Next(object sender, Xceed.Wpf.Toolkit.Core.CancelRoutedEventArgs e)
- {
- // IWizardPageControl c = _wizard.CurrentPage.Content as IWizardPageControl;
-
- var c = ((Wizard)sender).CurrentPage.Content as IWizardPageControl;
-
- if (c != null)
- {
- e.Cancel = !c.Next();
- }
- }
-
- private void Wizard_Previous(object sender, Xceed.Wpf.Toolkit.Core.CancelRoutedEventArgs e)
- {
- IWizardPageControl c = _wizard.CurrentPage.Content as IWizardPageControl;
-
- if (c != null)
- {
- e.Cancel = !c.Previous();
- }
- }
-
- private void Wizard_Cancel(object sender, RoutedEventArgs e)
- {
- IWizardPageControl c = _wizard.CurrentPage.Content as IWizardPageControl;
-
- if (c != null)
- {
- c.Cancel();
- }
- }
-
- private void Wizard_Finish(object sender, RoutedEventArgs e)
- {
- IWizardPageControl c = _wizard.CurrentPage.Content as IWizardPageControl;
-
- if (c != null)
- {
- c.Finish();
- }
- }
-
- private void Wizard_Help(object sender, RoutedEventArgs e)
- {
-
- }
- }
-}
\ No newline at end of file
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer.Control/OutputMethod.cs b/TM Optimizer/Sdl.Community.TMOptimizer.Control/OutputMethod.cs
deleted file mode 100644
index 4ab4f129f9..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer.Control/OutputMethod.cs
+++ /dev/null
@@ -1,8 +0,0 @@
-namespace Sdl.Community.TMOptimizer.Control
-{
- public enum OutputMethod
- {
- CreateNewTranslationMemory,
- UpdateExistingTranslationMemory
- }
-}
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer.Control/OutputWizardPageControl.xaml b/TM Optimizer/Sdl.Community.TMOptimizer.Control/OutputWizardPageControl.xaml
deleted file mode 100644
index ff67a25d7a..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer.Control/OutputWizardPageControl.xaml
+++ /dev/null
@@ -1,33 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer.Control/OutputWizardPageControl.xaml.cs b/TM Optimizer/Sdl.Community.TMOptimizer.Control/OutputWizardPageControl.xaml.cs
deleted file mode 100644
index f0dc17e5f4..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer.Control/OutputWizardPageControl.xaml.cs
+++ /dev/null
@@ -1,59 +0,0 @@
-using System.Windows;
-using System.Windows.Controls;
-
-namespace Sdl.Community.TMOptimizer.Control
-{
- ///
- /// Interaction logic for OutputWizardPageControl.xaml
- ///
- public partial class OutputWizardPageControl : UserControl, IWizardPageControl
- {
- public OutputWizardPageControl()
- {
- InitializeComponent();
- }
-
- private void BrowseNewTM_Click(object sender, RoutedEventArgs e)
- {
- ViewModel.SelectNewOutputTranslationMemory();
- }
-
- private void BrowseExistingTM_Click(object sender, RoutedEventArgs e)
- {
- ViewModel.SelectExistingOutputTranslationMemory();
- }
-
- public TMCleanerViewModel ViewModel
- {
- get
- {
- return (TMCleanerViewModel)DataContext;
- }
- }
-
- public bool Next()
- {
- return ViewModel.StartProcessing();
- }
-
- public bool Previous()
- {
- return true;
- }
-
- public void Help()
- {
-
- }
-
- public void Finish()
- {
-
- }
-
- public void Cancel()
- {
-
- }
- }
-}
\ No newline at end of file
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer.Control/ProcessingContext.cs b/TM Optimizer/Sdl.Community.TMOptimizer.Control/ProcessingContext.cs
deleted file mode 100644
index 815a2fe686..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer.Control/ProcessingContext.cs
+++ /dev/null
@@ -1,33 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.IO;
-using Sdl.Community.TMOptimizerLib;
-
-namespace Sdl.Community.TMOptimizer.Control
-{
- public class ProcessingContext
- {
- public ProcessingContext()
- {
- TempFiles = new List();
- }
-
- public Settings Settings
- {
- get; set;
- }
-
- public string GetTempTmxFile()
- {
- string path = Path.Combine(Path.GetTempPath(), Guid.NewGuid() + ".tmx");
- TempFiles.Add(path);
- return path;
- }
-
- public List TempFiles
- {
- get;
- private set;
- }
- }
-}
\ No newline at end of file
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer.Control/ProcessingState.cs b/TM Optimizer/Sdl.Community.TMOptimizer.Control/ProcessingState.cs
deleted file mode 100644
index 741fec4421..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer.Control/ProcessingState.cs
+++ /dev/null
@@ -1,12 +0,0 @@
-namespace Sdl.Community.TMOptimizer.Control
-{
- public enum ProcessingState
- {
- NotProcessing,
- Processing,
- Canceling,
- Canceled,
- Completed,
- Failed
- }
-}
\ No newline at end of file
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer.Control/ProcessingStateToImageConverter.cs b/TM Optimizer/Sdl.Community.TMOptimizer.Control/ProcessingStateToImageConverter.cs
deleted file mode 100644
index 1026c24bab..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer.Control/ProcessingStateToImageConverter.cs
+++ /dev/null
@@ -1,38 +0,0 @@
-using System;
-using System.Windows.Data;
-
-namespace Sdl.Community.TMOptimizer.Control
-{
- public class ProcessingStateToImageConverter : IValueConverter
- {
- public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
- {
- ProcessingState state = (ProcessingState)value;
- switch (state)
- {
- case ProcessingState.Canceled:
- case ProcessingState.Canceling:
- case ProcessingState.Failed:
- return GetImagePath("error.png");
- case ProcessingState.Completed:
- return GetImagePath("completed.png");
- case ProcessingState.NotProcessing:
- return GetImagePath("notprocessing.png");
- case ProcessingState.Processing:
- return GetImagePath("processing.png");
- default:
- return null;
- }
- }
-
- private string GetImagePath(string imageFileName)
- {
- return "Images\\" + imageFileName;
- }
-
- public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
- {
- throw new NotImplementedException();
- }
- }
-}
\ No newline at end of file
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer.Control/ProcessingStep.cs b/TM Optimizer/Sdl.Community.TMOptimizer.Control/ProcessingStep.cs
deleted file mode 100644
index 8d25503cf6..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer.Control/ProcessingStep.cs
+++ /dev/null
@@ -1,154 +0,0 @@
-using System;
-using System.ComponentModel;
-using Sdl.Community.TMOptimizerLib;
-
-namespace Sdl.Community.TMOptimizer.Control
-{
- public abstract class ProcessingStep : INotifyPropertyChanged
- {
- private int _progress;
-
- protected ProcessingStep(string name)
- {
- Name = name;
- ProcessingState = ProcessingState.NotProcessing;
- }
-
- public ProcessingContext Context
- {
- get;
- set;
- }
-
-
- public string Name
- {
- get;
- private set;
- }
-
- public int Progress
- {
- get
- {
- return _progress;
- }
- private set
- {
- _progress = value;
- OnPropertyChanged("Progress");
- }
- }
-
- private string _statusMessage;
- public string StatusMessage
- {
- get
- {
- return _statusMessage;
- }
- set
- {
- _statusMessage = value;
- OnPropertyChanged("StatusMessage");
- }
- }
-
-
-
- public Exception Error
- {
- get;
- set;
- }
-
- private ProcessingState _processingState;
- public ProcessingState ProcessingState
- {
- get
- {
- return _processingState;
- }
- set
- {
- _processingState = value;
- OnPropertyChanged("ProcessingState");
- }
- }
-
- public bool CancelRequested
- {
- get;
- private set;
- }
-
- public void RequestCancelAsync()
- {
- ProcessingState = ProcessingState.Canceling;
- CancelRequested = true;
- }
-
- public void Execute()
- {
- try
- {
- ProcessingState = ProcessingState.Processing;
- ExecuteImpl();
-
- if (CancelRequested)
- {
- ProcessingState = ProcessingState.Canceled;
- }
- else
- {
- ProcessingState = ProcessingState.Completed;
- }
- }
- catch (Exception e)
- {
- Error = e;
- ProcessingState = ProcessingState.Failed;
- return;
- }
-
- }
-
- protected abstract void ExecuteImpl();
-
- internal void ReportProgress(int progress)
- {
- Progress = progress;
- OnReportProgress();
- }
-
- ///
- /// Attached Progress event and takes care of forwarding cancellation requests to the processor.
- ///
- ///
- protected void AttachProcessorEvents(ProcessorBase processor)
- {
- processor.Progress += (sender, e) =>
- {
- if (CancelRequested)
- {
- e.Cancel = true;
- return;
- }
-
- ReportProgress(e.Progress);
- };
- }
-
- protected virtual void OnReportProgress()
- {
- }
-
-
- public event PropertyChangedEventHandler PropertyChanged;
-
- private void OnPropertyChanged(string propertyName)
- {
- PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
- }
- }
-}
\ No newline at end of file
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer.Control/ProcessingWizardPageControl.xaml b/TM Optimizer/Sdl.Community.TMOptimizer.Control/ProcessingWizardPageControl.xaml
deleted file mode 100644
index 179ca00185..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer.Control/ProcessingWizardPageControl.xaml
+++ /dev/null
@@ -1,54 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer.Control/ProcessingWizardPageControl.xaml.cs b/TM Optimizer/Sdl.Community.TMOptimizer.Control/ProcessingWizardPageControl.xaml.cs
deleted file mode 100644
index 276841e6a1..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer.Control/ProcessingWizardPageControl.xaml.cs
+++ /dev/null
@@ -1,64 +0,0 @@
-using System.Windows;
-using System.Windows.Controls;
-
-namespace Sdl.Community.TMOptimizer.Control
-{
- ///
- /// Interaction logic for ProcessingWizardPageControl.xaml
- ///
- public partial class ProcessingWizardPageControl : UserControl
- {
- public ProcessingWizardPageControl()
- {
- InitializeComponent();
- }
-
- public TMCleanerViewModel ViewModel
- {
- get
- {
- return (TMCleanerViewModel)DataContext;
- }
- }
-
- public bool Next()
- {
- return true;
- }
-
- public bool Previous()
- {
- if (ViewModel.IsProcessing)
- {
- MessageBox.Show(Application.Current.MainWindow, "You cannot go back while the wizard is processing.", "Processing", MessageBoxButton.OK, MessageBoxImage.Information);
- return false;
- }
- return true;
- }
-
- public void Help()
- {
- // HelpManager.ShowHelp();
- }
-
- public void Finish()
- {
-
- }
-
- public void Cancel()
- {
-
- }
-
- private void OpenContainingFolder_Click(object sender, RoutedEventArgs e)
- {
- ViewModel.OpenContainerFolder();
- }
-
- private void OpenTMInStudio_Click(object sender, RoutedEventArgs e)
- {
- ViewModel.OpenOutputTMInStudio();
- }
- }
-}
\ No newline at end of file
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer.Control/Properties/AssemblyInfo.cs b/TM Optimizer/Sdl.Community.TMOptimizer.Control/Properties/AssemblyInfo.cs
deleted file mode 100644
index 2a66157b90..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer.Control/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,49 +0,0 @@
-using System.Reflection;
-using System.Runtime.InteropServices;
-using System.Windows;
-
-// General Information about an assembly is controlled through the following
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-[assembly: AssemblyTitle("Sdl.Community.TMOptimizer.Control")]
-[assembly: AssemblyProduct("Sdl.Community.TMOptimizer.Control")]
-[assembly: AssemblyCompany("SDL Limited as part of the RWS Holdings Plc group of companies")]
-[assembly: AssemblyCopyright("Copyright © 2011 - 2022 SDL Limited as part of the RWS Holdings Plc group of companies (\"RWS Group\").")]
-
-// Setting ComVisible to false makes the types in this assembly not visible
-// to COM components. If you need to access a type in this assembly from
-// COM, set the ComVisible attribute to true on that type.
-[assembly: ComVisible(false)]
-
-//In order to begin building localizable applications, set
-//CultureYouAreCodingWith in your .csproj file
-//inside a . For example, if you are using US english
-//in your source files, set the to en-US. Then uncomment
-//the NeutralResourceLanguage attribute below. Update the "en-US" in
-//the line below to match the UICulture setting in the project file.
-
-//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
-
-
-[assembly:ThemeInfo(
- ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located
- //(used if a resource is not found in the page,
- // or application resource dictionaries)
- ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located
- //(used if a resource is not found in the page,
- // app, or any theme specific resource dictionaries)
-)]
-
-
-// Version information for an assembly consists of the following four values:
-//
-// Major Version
-// Minor Version
-// Build Number
-// Revision
-//
-// You can specify all the values or you can default the Build and Revision Numbers
-// by using the '*' as shown below:
-// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("5.0.0.0")]
-[assembly: AssemblyFileVersion("5.0.0.0")]
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer.Control/Properties/Resources.Designer.cs b/TM Optimizer/Sdl.Community.TMOptimizer.Control/Properties/Resources.Designer.cs
deleted file mode 100644
index 2c3d35e8a1..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer.Control/Properties/Resources.Designer.cs
+++ /dev/null
@@ -1,63 +0,0 @@
-//------------------------------------------------------------------------------
-//
-// This code was generated by a tool.
-// Runtime Version:4.0.30319.42000
-//
-// Changes to this file may cause incorrect behavior and will be lost if
-// the code is regenerated.
-//
-//------------------------------------------------------------------------------
-
-namespace Sdl.Community.TMOptimizer.Control.Properties {
- using System;
-
-
- ///
- /// A strongly-typed resource class, for looking up localized strings, etc.
- ///
- // This class was auto-generated by the StronglyTypedResourceBuilder
- // class via a tool like ResGen or Visual Studio.
- // To add or remove a member, edit your .ResX file then rerun ResGen
- // with the /str option, or rebuild your VS project.
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")]
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
- internal class Resources {
-
- private static global::System.Resources.ResourceManager resourceMan;
-
- private static global::System.Globalization.CultureInfo resourceCulture;
-
- [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
- internal Resources() {
- }
-
- ///
- /// Returns the cached ResourceManager instance used by this class.
- ///
- [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
- internal static global::System.Resources.ResourceManager ResourceManager {
- get {
- if (object.ReferenceEquals(resourceMan, null)) {
- global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Sdl.Community.TMOptimizer.Control.Properties.Resources", typeof(Resources).Assembly);
- resourceMan = temp;
- }
- return resourceMan;
- }
- }
-
- ///
- /// Overrides the current thread's CurrentUICulture property for all
- /// resource lookups using this strongly typed resource class.
- ///
- [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
- internal static global::System.Globalization.CultureInfo Culture {
- get {
- return resourceCulture;
- }
- set {
- resourceCulture = value;
- }
- }
- }
-}
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer.Control/Properties/Resources.resx b/TM Optimizer/Sdl.Community.TMOptimizer.Control/Properties/Resources.resx
deleted file mode 100644
index af7dbebbac..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer.Control/Properties/Resources.resx
+++ /dev/null
@@ -1,117 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- text/microsoft-resx
-
-
- 2.0
-
-
- System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
\ No newline at end of file
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer.Control/Properties/Settings.Designer.cs b/TM Optimizer/Sdl.Community.TMOptimizer.Control/Properties/Settings.Designer.cs
deleted file mode 100644
index 30b5153a08..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer.Control/Properties/Settings.Designer.cs
+++ /dev/null
@@ -1,26 +0,0 @@
-//------------------------------------------------------------------------------
-//
-// This code was generated by a tool.
-// Runtime Version:4.0.30319.42000
-//
-// Changes to this file may cause incorrect behavior and will be lost if
-// the code is regenerated.
-//
-//------------------------------------------------------------------------------
-
-namespace Sdl.Community.TMOptimizer.Control.Properties {
-
-
- [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.8.0.0")]
- internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
-
- private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
-
- public static Settings Default {
- get {
- return defaultInstance;
- }
- }
- }
-}
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer.Control/Properties/Settings.settings b/TM Optimizer/Sdl.Community.TMOptimizer.Control/Properties/Settings.settings
deleted file mode 100644
index 033d7a5e9e..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer.Control/Properties/Settings.settings
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer.Control/Sdl.Community.TMOptimizer.Control.csproj b/TM Optimizer/Sdl.Community.TMOptimizer.Control/Sdl.Community.TMOptimizer.Control.csproj
deleted file mode 100644
index 39f2c57dd7..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer.Control/Sdl.Community.TMOptimizer.Control.csproj
+++ /dev/null
@@ -1,91 +0,0 @@
-
-
-
- net48
- false
- false
- $(AppData)\Trados\Trados Studio\18\Plugins
- $(MSBuildProgramFiles32)\Trados\Trados Studio\Studio18
- true
- True
- ..\..\SdlCommunity.snk
-
-
-
- $(TradosFolder)\Sdl.Core.Globalization.dll
-
-
- $(TradosFolder)\Sdl.Core.Globalization.Async.dll
-
-
- $(TradosFolder)\Sdl.Core.PluginFramework.dll
-
-
- $(TradosFolder)\Sdl.Core.TM.ImportExport.dll
-
-
- $(TradosFolder)\Sdl.LanguagePlatform.Core.dll
-
-
- $(TradosFolder)\Sdl.LanguagePlatform.TranslationMemory.dll
-
-
- $(TradosFolder)\Sdl.LanguagePlatform.TranslationMemoryApi.dll
-
-
-
-
-
-
-
-
-
-
- 4.0
-
-
-
-
-
-
-
- Designer
- MSBuild:Compile
-
-
- Designer
- MSBuild:Compile
-
-
- Designer
- MSBuild:Compile
-
-
- Designer
- MSBuild:Compile
-
-
- Designer
- MSBuild:Compile
-
-
-
-
- SettingsSingleFileGenerator
- Settings.Designer.cs
-
-
-
-
-
-
- {256db2e3-306a-4aef-b343-4514acf6299e}
- Sdl.Community.TMOptimizerLib
-
-
-
-
- 4.6.0
-
-
-
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer.Control/StripWorkbenchTusStep.cs b/TM Optimizer/Sdl.Community.TMOptimizer.Control/StripWorkbenchTusStep.cs
deleted file mode 100644
index 894d9b9219..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer.Control/StripWorkbenchTusStep.cs
+++ /dev/null
@@ -1,30 +0,0 @@
-using System;
-using Sdl.Community.TMOptimizerLib;
-
-namespace Sdl.Community.TMOptimizer.Control
-{
- class StripWorkbenchTusStep : ProcessingStep
- {
- private TmxFile _inputTmxFile;
- private TmxFile _outputTmxFile;
- private Stripper _stripper;
-
- public StripWorkbenchTusStep(string name, TmxFile inputTmxFile, TmxFile outputTmxFile) : base(String.Format("Identify Workbench TUs in {0}", name))
- {
- _inputTmxFile = inputTmxFile;
- _outputTmxFile = outputTmxFile;
- }
-
- protected override void ExecuteImpl()
- {
- _stripper = new Stripper(_inputTmxFile, _outputTmxFile, Context.Settings);
- AttachProcessorEvents(_stripper);
- _stripper.Execute();
- }
-
- protected override void OnReportProgress()
- {
- StatusMessage = String.Format("TUs: {0}/{1} | Workbench TUs removed: {2}", _stripper.TusRead, _inputTmxFile.GetDetectInfo().TuCount, _stripper.TusStripped);
- }
- }
-}
\ No newline at end of file
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer.Control/TMCleanerViewModel.cs b/TM Optimizer/Sdl.Community.TMOptimizer.Control/TMCleanerViewModel.cs
deleted file mode 100644
index 91d3ac5a2d..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer.Control/TMCleanerViewModel.cs
+++ /dev/null
@@ -1,597 +0,0 @@
-using System;
-using System.Collections.ObjectModel;
-using System.ComponentModel;
-using System.Diagnostics;
-using System.Globalization;
-using System.IO;
-using System.Linq;
-using System.Windows;
-using Sdl.Community.TMOptimizerLib;
-using Sdl.Core.Globalization;
-using Sdl.Core.Globalization.LanguageRegistry;
-using Sdl.LanguagePlatform.Core;
-using Sdl.LanguagePlatform.TranslationMemoryApi;
-
-namespace Sdl.Community.TMOptimizer.Control
-{
- public class TMCleanerViewModel : INotifyPropertyChanged
- {
- public TMCleanerViewModel()
- {
- InputTmxFiles = new ObservableCollection();
- Mode = WizardMode.ConvertTranslationMemory;
- OutputMethod = OutputMethod.CreateNewTranslationMemory;
- InputTranslationMemory = new TranslationMemoryReference();
- OutputTranslationMemory = new TranslationMemoryReference();
- ProcessingSteps = new ObservableCollection();
- Settings = new Settings();
- ProcessingState = ProcessingState.NotProcessing;
- CanFinish = false;
- }
-
- BackgroundWorker _worker;
- public event PropertyChangedEventHandler PropertyChanged;
-
- private WizardMode _mode;
- public WizardMode Mode
- {
- get
- {
- return _mode;
- }
- set
- {
- _mode = value;
- OnPropertyChanged("Mode");
- OnPropertyChanged("UseExistingTranslationMemory");
- }
- }
-
-
- public bool UseExistingTranslationMemory
- {
- get
- {
- return Mode == WizardMode.CleanExistingTranslationMemory;
- }
- }
-
- public ObservableCollection InputTmxFiles
- {
- get;
- private set;
- }
-
- private TranslationMemoryReference _inputTranslationMemory;
- public TranslationMemoryReference InputTranslationMemory
- {
- get
- {
- return _inputTranslationMemory;
- }
- set
- {
- _inputTranslationMemory = value;
- OnPropertyChanged("InputTranslationMemory");
- }
- }
-
- private OutputMethod _outputMethod;
- public OutputMethod OutputMethod
- {
- get
- {
- return _outputMethod;
- }
- set
- {
- _outputMethod = value;
- OnPropertyChanged("OutputMethod");
- }
- }
-
- private string _newOutputTranslationMemoryFilePath;
- public string NewOutputTranslationMemoryFilePath
- {
- get
- {
- return _newOutputTranslationMemoryFilePath;
- }
- set
- {
- _newOutputTranslationMemoryFilePath = value;
- OnPropertyChanged("NewOutputTranslationMemoryFilePath");
- }
- }
-
- public Language SourceLanguage
- {
- get;
- set;
- }
-
- public Language TargetLanguage
- {
- get;
- set;
- }
-
- public Settings Settings
- {
- get;
- private set;
- }
-
- private TranslationMemoryReference _outputTranslationMemory;
- public TranslationMemoryReference OutputTranslationMemory
- {
- get
- {
- return _outputTranslationMemory;
- }
- set
- {
- _outputTranslationMemory = value;
- OnPropertyChanged("OutputTranslationMemory");
- }
- }
-
- private ProcessingState _processingState;
- public ProcessingState ProcessingState
- {
- get
- {
- return _processingState;
- }
- set
- {
- _processingState = value;
- OnPropertyChanged("ProcessingState");
- OnPropertyChanged("IsProcessing");
- OnPropertyChanged("IsCompleted");
- }
- }
-
- public bool IsProcessing
- {
- get
- {
- return ProcessingState == ProcessingState.Processing || ProcessingState == ProcessingState.Canceling;
- }
- }
-
- public bool IsCompleted
- {
- get
- {
- return ProcessingState == ProcessingState.Completed;
- }
- }
-
- private bool _canFinish;
- public bool CanFinish
- {
- get
- {
- return _canFinish;
- }
- set
- {
- _canFinish = value;
- OnPropertyChanged("CanFinish");
- }
- }
-
- private void OnPropertyChanged(string propertyName)
- {
- PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
- }
-
- public void SelectExistingTranslationMemory()
- {
- Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();
- dlg.Title = "Select TM to optimize";
- dlg.DefaultExt = ".sdltm";
- dlg.Filter = "Trados Studio TMs (.sdltm)|*.sdltm";
-
- if (!String.IsNullOrEmpty(InputTranslationMemory.FilePath))
- {
- dlg.FileName = InputTranslationMemory.FilePath;
- }
-
- if (dlg.ShowDialog() == true)
- {
- InputTranslationMemory.FilePath = dlg.FileName;
- }
- }
-
- public void AddTmxInputFile()
- {
- Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();
- dlg.Title = "Select TMX files to clean up";
- dlg.DefaultExt = ".tmx";
- dlg.Filter = "TRADOS Workbench TMX (.tmx)|*.tmx";
- dlg.Multiselect = true;
-
- if (dlg.ShowDialog() == true)
- {
- string[] tmxFiles = dlg.FileNames;
- _worker = new BackgroundWorker();
- _worker.DoWork += (sender, e) =>
- {
- foreach (string fileName in tmxFiles)
- {
- InputTmxFile tmxFile = new InputTmxFile(new TmxFile(fileName));
-
- try
- {
- SafeAddInputTmxFile(tmxFile);
- tmxFile.TmxFile.Detect();
- }
- catch (Exception ex)
- {
- DisplayError(ex);
- SafeRemoveInputTmxFile(tmxFile);
- }
- }
- };
- _worker.RunWorkerCompleted += (sender, e) =>
- {
-
- };
-
- _worker.RunWorkerAsync();
- }
- }
-
- public void SafeAddInputTmxFile(InputTmxFile tmxFile)
- {
- Application.Current.Dispatcher.Invoke(new Action(() =>
- {
- InputTmxFiles.Add(tmxFile);
- }));
- }
-
- public void SafeRemoveInputTmxFile(InputTmxFile tmxFile)
- {
- Application.Current.Dispatcher.Invoke(new Action(() =>
- {
- InputTmxFiles.Remove(tmxFile);
- }));
- }
-
- public void SelectNewOutputTranslationMemory()
- {
- Microsoft.Win32.SaveFileDialog dlg = new Microsoft.Win32.SaveFileDialog();
- dlg.Title = "Specify output TM file name";
- dlg.DefaultExt = ".sdltm";
- dlg.Filter = "Trados Studio TMs (.sdltm)|*.sdltm";
-
- if (!String.IsNullOrEmpty(NewOutputTranslationMemoryFilePath))
- {
- dlg.FileName = NewOutputTranslationMemoryFilePath;
- }
-
- if (dlg.ShowDialog() == true)
- {
- NewOutputTranslationMemoryFilePath = dlg.FileName;
- }
- }
-
- public void SelectExistingOutputTranslationMemory()
- {
- Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();
- dlg.Title = "Select output TM";
- dlg.DefaultExt = ".sdltm";
- dlg.Filter = "Trados Studio TMs (.sdltm)|*.sdltm";
-
- if (!String.IsNullOrEmpty(OutputTranslationMemory.FilePath))
- {
- dlg.FileName = OutputTranslationMemory.FilePath;
- }
-
- if (dlg.ShowDialog() == true)
- {
- OutputTranslationMemory.FilePath = dlg.FileName;
- }
- }
-
- ///
- /// Validates the input sources (TMX and optional TM)
- ///
- ///
- public bool ValidateInput()
- {
- int totalTuCount = 0;
- FileBasedTranslationMemory tm = null;
-
- if (UseExistingTranslationMemory)
- {
- if (InputTranslationMemory == null || String.IsNullOrEmpty(InputTranslationMemory.FilePath))
- {
- ShowError("Select the Studio translation memory to clean up.");
- return false;
- }
-
- try
- {
- // try to access the TM
- tm = InputTranslationMemory.TranslationMemory;
- totalTuCount += tm.LanguageDirection.GetTranslationUnitCount();
- }
- catch (Exception ex)
- {
- ShowError("Failed to open the translation memory: \r\n" + ex.ToString());
- return false;
- }
- }
-
- if (InputTmxFiles.Count == 0)
- {
- ShowError("Select at least one input TMX file.");
- return false;
- }
-
- if (InputTmxFiles.Any(f => f.TmxFile.IsDetecting))
- {
- ShowError("Please wait while the TMX files are being analyzed.");
- return false;
- }
-
- if (InputTmxFiles.Any(f => f.TmxFile.DetectInfo.DetectedVersion != DetectInfo.Versions.Workbench))
- {
- ShowError("One or more TMX files are not Workbench export files.");
- return false;
- }
-
- if (InputTmxFiles.Any(f => f.TmxFile.DetectInfo == null || f.TmxFile.DetectInfo.SourceLanguage == null || f.TmxFile.DetectInfo.TargetLanguage == null))
- {
- ShowError("The source and target language of one or more TMX files could not be detected. Make sure the TMX file is valid or remove it from the list.");
- return false;
- }
-
- CultureInfo sourceCulture = tm != null ? new Language(tm.LanguageDirection.SourceLanguage.ToString()).CultureInfo : InputTmxFiles.First().TmxFile.DetectInfo.SourceLanguage.CultureInfo;
- CultureInfo targetCulture = tm != null ? new Language(tm.LanguageDirection.TargetLanguage.ToString()).CultureInfo : InputTmxFiles.First().TmxFile.DetectInfo.TargetLanguage.CultureInfo;
-
- foreach (InputTmxFile f in InputTmxFiles)
- {
- if (!CultureInfoExtensions.AreCompatible(f.TmxFile.DetectInfo.SourceLanguage.CultureInfo, sourceCulture)
- || !CultureInfoExtensions.AreCompatible(f.TmxFile.DetectInfo.TargetLanguage.CultureInfo, targetCulture))
- {
- ShowError("Make sure all the selected TMX files have compatible languages. The main language has to match.");
- return false;
- }
-
- totalTuCount += f.TmxFile.GetDetectInfo().TuCount;
- }
-
- SourceLanguage = LanguageRegistryApi.Instance.GetLanguage(sourceCulture.Name);
- TargetLanguage =LanguageRegistryApi.Instance.GetLanguage (targetCulture.Name);
-
- return true;
- }
-
- private void ShowError(string message)
- {
- MessageBox.Show(Application.Current.MainWindow, message, "Error", MessageBoxButton.OK, MessageBoxImage.Error);
- }
-
- public bool StartProcessing()
- {
- if (!ValidateOutput())
- {
- return false;
- }
-
- CreateProcessingSteps();
-
- ExecuteProcessingStepsAsync();
-
- return true;
- }
-
- public void CancelAsync()
- {
- if (_worker != null)
- {
- ProcessingState = ProcessingState.Canceling;
-
- foreach (ProcessingStep step in ProcessingSteps)
- {
- step.RequestCancelAsync();
- }
- }
- }
-
- public bool ValidateOutput()
- {
- if (OutputMethod == OutputMethod.UpdateExistingTranslationMemory)
- {
- if (OutputTranslationMemory == null || String.IsNullOrEmpty(OutputTranslationMemory.FilePath))
- {
- ShowError("Select the Studio translation memory to import the clean translation units into.");
- return false;
- }
-
- try
- {
- // try to access the TM
- FileBasedTranslationMemory tm = OutputTranslationMemory.TranslationMemory;
-
- if (!CultureInfoExtensions.AreCompatible(tm.LanguageDirection.SourceLanguage, SourceLanguage.CultureInfo)
- || !CultureInfoExtensions.AreCompatible(tm.LanguageDirection.TargetLanguage, TargetLanguage.CultureInfo))
- {
- ShowError("The languages of the selected translation memory are not compatible with the languages of the input TMX files. The main language has to match.");
- return false;
- }
-
- SourceLanguage = new Language(tm.LanguageDirection.SourceLanguage.ToString());
- TargetLanguage = new Language(tm.LanguageDirection.TargetLanguage.ToString());
- }
- catch (Exception ex)
- {
- ShowError("Failed to open the translation memory: \r\n" + ex.ToString());
- return false;
- }
- }
- else
- {
- // new TM
- if (String.IsNullOrEmpty(NewOutputTranslationMemoryFilePath))
- {
- ShowError("Select from Browse the location where the new translation memory should be created, or provide full path to folder and add the name and .sdltm extension.");
- return false;
- }
-
- if(!System.IO.Path.IsPathRooted(NewOutputTranslationMemoryFilePath))
- {
- ShowError("Select from Browse the location where the new translation memory should be created, or provide full path to folder and add the name and .sdltm extension.");
- return false;
- }
- }
-
- return true;
- }
-
- public void CreateProcessingSteps()
- {
- ProcessingSteps.Clear();
- ProcessingContext context = new ProcessingContext();
- context.Settings = Settings;
- InputTmxFile existingTmtmxFile = null;
- if (Mode == WizardMode.CleanExistingTranslationMemory)
- {
- existingTmtmxFile = new InputTmxFile(new TmxFile(context.GetTempTmxFile()));
- existingTmtmxFile.CleanTmxFile = new TmxFile(context.GetTempTmxFile());
-
- // export TM
- ProcessingSteps.Add(new ExportStudioTmStep(InputTranslationMemory.TranslationMemory, existingTmtmxFile.TmxFile));
- // strip workbench TUs
- ProcessingSteps.Add(new StripWorkbenchTusStep(InputTranslationMemory.TranslationMemory.Name, existingTmtmxFile.TmxFile, existingTmtmxFile.CleanTmxFile));
- }
-
- foreach (InputTmxFile inputTmxFile in InputTmxFiles)
- {
- // clean TMX
- inputTmxFile.CleanTmxFile = new TmxFile(context.GetTempTmxFile());
- ProcessingSteps.Add(new CleanWorkbenchTmxStep(inputTmxFile.TmxFile, inputTmxFile.CleanTmxFile, null));
- }
-
- TranslationMemoryReference outputTranslationMemory;
-
- if (OutputMethod == OutputMethod.CreateNewTranslationMemory)
- {
- outputTranslationMemory = new TranslationMemoryReference { FilePath = NewOutputTranslationMemoryFilePath };
- // create output TM
- ProcessingSteps.Add(new CreateStudioTmStep(outputTranslationMemory, SourceLanguage, TargetLanguage, InputTranslationMemory));
- }
- else
- {
- outputTranslationMemory = OutputTranslationMemory;
- }
-
- foreach (InputTmxFile inputTmxFile in InputTmxFiles)
- {
- // import clean TMX
- ProcessingSteps.Add(new ImportStudioTmStep(outputTranslationMemory, Path.GetFileName(inputTmxFile.TmxFile.FilePath), inputTmxFile.CleanTmxFile));
- }
-
- if (existingTmtmxFile != null)
- {
- ProcessingSteps.Add(new ImportStudioTmStep(outputTranslationMemory, Path.GetFileName(InputTranslationMemory.FilePath), existingTmtmxFile.CleanTmxFile));
- }
-
- ProcessingSteps.Add(new DeleteTempFilesStep());
-
- // set context of all steps
- foreach (ProcessingStep step in ProcessingSteps)
- {
- step.Context = context;
- }
- }
-
- public void ExecuteProcessingStepsAsync()
- {
- _worker = new BackgroundWorker();
- _worker.WorkerSupportsCancellation = true;
- _worker.DoWork += (sender, e) =>
- {
- foreach (ProcessingStep step in ProcessingSteps)
- {
- step.Execute();
-
- if (step.Error != null)
- {
- DisplayError(step.Error);
- return;
- }
-
- step.ReportProgress(100);
- }
- };
- _worker.RunWorkerCompleted += (sender, e) =>
- {
- if (ProcessingState == ProcessingState.Canceling)
- {
- ProcessingState = ProcessingState.Canceled;
- }
- else if (ProcessingSteps.Any(s => s.Error != null))
- {
- ProcessingState = ProcessingState.Failed;
- }
- else
- {
- ProcessingState = ProcessingState.Completed;
- }
-
- CanFinish = true;
- };
- ProcessingState = ProcessingState.Processing;
- _worker.RunWorkerAsync();
- }
-
- private void DisplayError(Exception e)
- {
- Application.Current.Dispatcher.Invoke(new Action(() =>
- {
- MessageBox.Show(Application.Current.MainWindow, e.ToString(), "Error", MessageBoxButton.OK, MessageBoxImage.Error);
- }));
- }
-
- public ObservableCollection ProcessingSteps
- {
- get;
- private set;
- }
-
- public void OpenContainerFolder()
- {
- string dirName = null;
- if (OutputMethod == OutputMethod.CreateNewTranslationMemory)
- {
- dirName = Path.GetDirectoryName(NewOutputTranslationMemoryFilePath);
- }
- else
- {
- dirName = Path.GetDirectoryName(OutputTranslationMemory.FilePath);
- }
-
- Process.Start(dirName);
- }
-
- public void OpenOutputTMInStudio()
- {
- string filePath = null;
- if (OutputMethod == OutputMethod.CreateNewTranslationMemory)
- {
- filePath = NewOutputTranslationMemoryFilePath;
- }
- else
- {
- filePath = OutputTranslationMemory.FilePath;
- }
-
- Process.Start(filePath);
- }
- }
-}
\ No newline at end of file
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer.Control/TranslationMemoryReference.cs b/TM Optimizer/Sdl.Community.TMOptimizer.Control/TranslationMemoryReference.cs
deleted file mode 100644
index 5efa06f231..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer.Control/TranslationMemoryReference.cs
+++ /dev/null
@@ -1,53 +0,0 @@
-using System.ComponentModel;
-using Sdl.LanguagePlatform.TranslationMemoryApi;
-
-namespace Sdl.Community.TMOptimizer.Control
-{
- public class TranslationMemoryReference : INotifyPropertyChanged
- {
- public event PropertyChangedEventHandler PropertyChanged;
-
- private FileBasedTranslationMemory _tm;
-
- private string _filePath;
- public string FilePath
- {
- get
- {
- return _filePath;
- }
- set
- {
- if (_filePath != value)
- {
- _tm = null;
- }
-
- _filePath = value;
-
- OnPropertyChanged("FilePath");
- }
- }
-
- public FileBasedTranslationMemory TranslationMemory
- {
- get
- {
- if (_tm == null)
- {
- _tm = new FileBasedTranslationMemory(FilePath);
- }
- return _tm;
- }
- set
- {
- _tm = value;
- }
- }
-
- private void OnPropertyChanged(string propertyName)
- {
- PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
- }
- }
-}
\ No newline at end of file
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer.Control/WizardMode.cs b/TM Optimizer/Sdl.Community.TMOptimizer.Control/WizardMode.cs
deleted file mode 100644
index 53f45f9e09..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer.Control/WizardMode.cs
+++ /dev/null
@@ -1,8 +0,0 @@
-namespace Sdl.Community.TMOptimizer.Control
-{
- public enum WizardMode
- {
- CleanExistingTranslationMemory,
- ConvertTranslationMemory
- }
-}
\ No newline at end of file
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer.Control/WizardPageControl.cs b/TM Optimizer/Sdl.Community.TMOptimizer.Control/WizardPageControl.cs
deleted file mode 100644
index 3926f2df43..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer.Control/WizardPageControl.cs
+++ /dev/null
@@ -1,15 +0,0 @@
-namespace Sdl.Community.TMOptimizer.Control
-{
- public interface IWizardPageControl
- {
- bool Next();
-
- bool Previous();
-
- void Help();
-
- void Finish();
-
- void Cancel();
- }
-}
\ No newline at end of file
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer.Installer/Product.wxs b/TM Optimizer/Sdl.Community.TMOptimizer.Installer/Product.wxs
deleted file mode 100644
index 9bc6bddaa0..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer.Installer/Product.wxs
+++ /dev/null
@@ -1,111 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 1
- 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer.Installer/Sdl.Community.TMOptimizer.Installer.wixproj b/TM Optimizer/Sdl.Community.TMOptimizer.Installer/Sdl.Community.TMOptimizer.Installer.wixproj
deleted file mode 100644
index 1c89b181aa..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer.Installer/Sdl.Community.TMOptimizer.Installer.wixproj
+++ /dev/null
@@ -1,64 +0,0 @@
-
-
-
- Debug
- x86
- 3.10
- bd6fdd83-75c6-4dde-b92a-4c9cad18cbd7
- 2.0
- Sdl.Community.TMOptimizer.Installer
- Package
-
-
- bin\Debug\
- obj\$(Configuration)\
- Debug;
-
-
- bin\$(Configuration)\
- obj\$(Configuration)\
-
-
-
-
-
-
- Sdl.Community.TMOptimizerLib
- {256db2e3-306a-4aef-b343-4514acf6299e}
- True
- True
- Binaries;Content;Satellites
- INSTALLFOLDER
-
-
- Sdl.Community.TMOptimizer
- {df84726d-b356-459b-aea7-2c0731063e96}
- True
- True
- Binaries;Content;Satellites
- INSTALLFOLDER
-
-
-
-
- $(WixExtDir)\WixUIExtension.dll
- WixUIExtension
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer.Installer/product.ico b/TM Optimizer/Sdl.Community.TMOptimizer.Installer/product.ico
deleted file mode 100644
index 5bbd4cd32a..0000000000
Binary files a/TM Optimizer/Sdl.Community.TMOptimizer.Installer/product.ico and /dev/null differ
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer.Integration/PluginResources.Designer.cs b/TM Optimizer/Sdl.Community.TMOptimizer.Integration/PluginResources.Designer.cs
deleted file mode 100644
index 224d9bd3f4..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer.Integration/PluginResources.Designer.cs
+++ /dev/null
@@ -1,160 +0,0 @@
-//------------------------------------------------------------------------------
-//
-// This code was generated by a tool.
-// Runtime Version:4.0.30319.42000
-//
-// Changes to this file may cause incorrect behavior and will be lost if
-// the code is regenerated.
-//
-//------------------------------------------------------------------------------
-
-namespace Sdl.Community.TMOptimizer.Integration {
- using System;
-
-
- ///
- /// A strongly-typed resource class, for looking up localized strings, etc.
- ///
- // This class was auto-generated by the StronglyTypedResourceBuilder
- // class via a tool like ResGen or Visual Studio.
- // To add or remove a member, edit your .ResX file then rerun ResGen
- // with the /str option, or rebuild your VS project.
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
- public class PluginResources {
-
- private static global::System.Resources.ResourceManager resourceMan;
-
- private static global::System.Globalization.CultureInfo resourceCulture;
-
- [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
- internal PluginResources() {
- }
-
- ///
- /// Returns the cached ResourceManager instance used by this class.
- ///
- [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
- public static global::System.Resources.ResourceManager ResourceManager {
- get {
- if (object.ReferenceEquals(resourceMan, null)) {
- global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Sdl.Community.TMOptimizer.Integration.PluginResources", typeof(PluginResources).Assembly);
- resourceMan = temp;
- }
- return resourceMan;
- }
- }
-
- ///
- /// Overrides the current thread's CurrentUICulture property for all
- /// resource lookups using this strongly typed resource class.
- ///
- [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
- public static global::System.Globalization.CultureInfo Culture {
- get {
- return resourceCulture;
- }
- set {
- resourceCulture = value;
- }
- }
-
- ///
- /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon).
- ///
- public static System.Drawing.Icon Download {
- get {
- object obj = ResourceManager.GetObject("Download", resourceCulture);
- return ((System.Drawing.Icon)(obj));
- }
- }
-
- ///
- /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon).
- ///
- public static System.Drawing.Icon ForumIcon {
- get {
- object obj = ResourceManager.GetObject("ForumIcon", resourceCulture);
- return ((System.Drawing.Icon)(obj));
- }
- }
-
- ///
- /// Looks up a localized string similar to TM Optimizer.
- ///
- public static string Plugin_Name {
- get {
- return ResourceManager.GetString("Plugin_Name", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon).
- ///
- public static System.Drawing.Icon product {
- get {
- object obj = ResourceManager.GetObject("product", resourceCulture);
- return ((System.Drawing.Icon)(obj));
- }
- }
-
- ///
- /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon).
- ///
- public static System.Drawing.Icon Question {
- get {
- object obj = ResourceManager.GetObject("Question", resourceCulture);
- return ((System.Drawing.Icon)(obj));
- }
- }
-
- ///
- /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon).
- ///
- public static System.Drawing.Icon TellMe_Documentation {
- get {
- object obj = ResourceManager.GetObject("TellMe_Documentation", resourceCulture);
- return ((System.Drawing.Icon)(obj));
- }
- }
-
- ///
- /// Looks up a localized string similar to {0} TellMe provider.
- ///
- public static string TellMe_Provider {
- get {
- return ResourceManager.GetString("TellMe_Provider", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to {0} results.
- ///
- public static string TellMe_Provider_Results {
- get {
- return ResourceManager.GetString("TellMe_Provider_Results", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon).
- ///
- public static System.Drawing.Icon TellMe_Settings {
- get {
- object obj = ResourceManager.GetObject("TellMe_Settings", resourceCulture);
- return ((System.Drawing.Icon)(obj));
- }
- }
-
- ///
- /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon).
- ///
- public static System.Drawing.Icon TellMe_SourceCode {
- get {
- object obj = ResourceManager.GetObject("TellMe_SourceCode", resourceCulture);
- return ((System.Drawing.Icon)(obj));
- }
- }
- }
-}
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer.Integration/PluginResources.resx b/TM Optimizer/Sdl.Community.TMOptimizer.Integration/PluginResources.resx
deleted file mode 100644
index 689b00eaa5..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer.Integration/PluginResources.resx
+++ /dev/null
@@ -1,151 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- text/microsoft-resx
-
-
- 2.0
-
-
- System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
-
- resources\download.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
-
- resources\forumicon.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
-
- TM Optimizer
-
-
- Resources\product.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
-
- resources\question.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
-
- Resources\TellMe_Documentation.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
-
- {0} TellMe provider
-
-
- {0} results
-
-
- Resources\TellMe_Settings.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
-
- Resources\TellMe_SourceCode.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
-
\ No newline at end of file
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer.Integration/Properties/AssemblyInfo.cs b/TM Optimizer/Sdl.Community.TMOptimizer.Integration/Properties/AssemblyInfo.cs
deleted file mode 100644
index 58ca581b0a..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer.Integration/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,31 +0,0 @@
-using System.Reflection;
-using System.Runtime.InteropServices;
-
-// General Information about an assembly is controlled through the following
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-[assembly: AssemblyTitle("Sdl.Community.TMOptimizer.Integration")]
-[assembly: AssemblyProduct("Sdl.Community.TMOptimizer.Integration")]
-[assembly: AssemblyCompany("SDL Limited as part of the RWS Holdings Plc group of companies")]
-[assembly: AssemblyCopyright("Copyright © 2011 - 2022 SDL Limited as part of the RWS Holdings Plc group of companies (\"RWS Group\").")]
-
-// Setting ComVisible to false makes the types in this assembly not visible
-// to COM components. If you need to access a type in this assembly from
-// COM, set the ComVisible attribute to true on that type.
-[assembly: ComVisible(false)]
-
-// The following GUID is for the ID of the typelib if this project is exposed to COM
-[assembly: Guid("843a723e-21e7-464a-b061-75dc7d32351c")]
-
-// Version information for an assembly consists of the following four values:
-//
-// Major Version
-// Minor Version
-// Build Number
-// Revision
-//
-// You can specify all the values or you can default the Build and Revision Numbers
-// by using the '*' as shown below:
-// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("5.0.0.0")]
-[assembly: AssemblyFileVersion("5.0.0.0")]
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer.Integration/Properties/PluginProperties.cs b/TM Optimizer/Sdl.Community.TMOptimizer.Integration/Properties/PluginProperties.cs
deleted file mode 100644
index 2a692207bc..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer.Integration/Properties/PluginProperties.cs
+++ /dev/null
@@ -1,6 +0,0 @@
-using Sdl.Core.PluginFramework;
-
-// TODO: edit the Plugin_Name string in PluginResources.resx to change the name of your plug-in
-[assembly: Plugin("Plugin_Name")]
-
-
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer.Integration/Resources/Download.ico b/TM Optimizer/Sdl.Community.TMOptimizer.Integration/Resources/Download.ico
deleted file mode 100644
index e46190b941..0000000000
Binary files a/TM Optimizer/Sdl.Community.TMOptimizer.Integration/Resources/Download.ico and /dev/null differ
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer.Integration/Resources/ForumIcon.ico b/TM Optimizer/Sdl.Community.TMOptimizer.Integration/Resources/ForumIcon.ico
deleted file mode 100644
index 7dde85663c..0000000000
Binary files a/TM Optimizer/Sdl.Community.TMOptimizer.Integration/Resources/ForumIcon.ico and /dev/null differ
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer.Integration/Resources/Question.ico b/TM Optimizer/Sdl.Community.TMOptimizer.Integration/Resources/Question.ico
deleted file mode 100644
index da235bd14f..0000000000
Binary files a/TM Optimizer/Sdl.Community.TMOptimizer.Integration/Resources/Question.ico and /dev/null differ
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer.Integration/Resources/TellMe_Documentation.ico b/TM Optimizer/Sdl.Community.TMOptimizer.Integration/Resources/TellMe_Documentation.ico
deleted file mode 100644
index 0a187f6820..0000000000
Binary files a/TM Optimizer/Sdl.Community.TMOptimizer.Integration/Resources/TellMe_Documentation.ico and /dev/null differ
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer.Integration/Resources/TellMe_Settings.ico b/TM Optimizer/Sdl.Community.TMOptimizer.Integration/Resources/TellMe_Settings.ico
deleted file mode 100644
index 0b9aec884c..0000000000
Binary files a/TM Optimizer/Sdl.Community.TMOptimizer.Integration/Resources/TellMe_Settings.ico and /dev/null differ
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer.Integration/Resources/TellMe_SourceCode.ico b/TM Optimizer/Sdl.Community.TMOptimizer.Integration/Resources/TellMe_SourceCode.ico
deleted file mode 100644
index 679665fc6c..0000000000
Binary files a/TM Optimizer/Sdl.Community.TMOptimizer.Integration/Resources/TellMe_SourceCode.ico and /dev/null differ
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer.Integration/Resources/product.ico b/TM Optimizer/Sdl.Community.TMOptimizer.Integration/Resources/product.ico
deleted file mode 100644
index 5bbd4cd32a..0000000000
Binary files a/TM Optimizer/Sdl.Community.TMOptimizer.Integration/Resources/product.ico and /dev/null differ
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer.Integration/Sdl.Community.TMOptimizer.Integration.csproj b/TM Optimizer/Sdl.Community.TMOptimizer.Integration/Sdl.Community.TMOptimizer.Integration.csproj
deleted file mode 100644
index 85f9ae4b5e..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer.Integration/Sdl.Community.TMOptimizer.Integration.csproj
+++ /dev/null
@@ -1,108 +0,0 @@
-
-
-
- net48
- false
- false
- $(AppData)\Trados\Trados Studio\18\Plugins
- $(MSBuildProgramFiles32)\Trados\Trados Studio\Studio18
- true
-
-
-
-
-
-
-
-
-
-
- $(TradosFolder)\Sdl.Desktop.IntegrationApi.dll
-
-
- $(TradosFolder)\Sdl.Desktop.IntegrationApi.Extensions.dll
-
-
- $(TradosFolder)\Sdl.TranslationStudioAutomation.IntegrationApi.dll
-
-
- $(TradosFolder)\Sdl.TranslationStudioAutomation.IntegrationApi.Extensions.dll
-
-
- $(TradosFolder)\Sdl.FileTypeSupport.Framework.Core.dll
-
-
- $(TradosFolder)\Sdl.FileTypeSupport.Framework.Implementation.dll
-
-
- $(TradosFolder)\Sdl.ProjectAutomation.Core.dll
-
-
- $(TradosFolder)\Sdl.ProjectAutomation.FileBased.dll
-
-
- $(TradosFolder)\Sdl.ProjectAutomation.Settings.dll
-
-
- $(TradosFolder)\Sdl.TellMe.ProviderApi.dll
-
-
-
-
-
-
-
-
-
-
-
-
- Designer
- PublicResXFileCodeGenerator
- PluginResources.Designer.cs
-
-
- Designer
-
-
-
-
-
- {a82ed8ee-c8ff-4ad2-b09f-ec379aa17b0e}
- Sdl.Community.TMOptimizer.Control
-
-
- {256db2e3-306a-4aef-b343-4514acf6299e}
- Sdl.Community.TMOptimizerLib
-
-
-
-
- 2.1.0
-
-
- 18.0.1
-
-
-
-
-
-
-
-
-
- True
- True
- PluginResources.resx
-
-
-
- true
-
-
- true
-
-
- ..\..\SdlCommunity.snk
-
-
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer.Integration/TellMe/AppStoreForumAction.cs b/TM Optimizer/Sdl.Community.TMOptimizer.Integration/TellMe/AppStoreForumAction.cs
deleted file mode 100644
index 66b76ce271..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer.Integration/TellMe/AppStoreForumAction.cs
+++ /dev/null
@@ -1,25 +0,0 @@
-using System.Diagnostics;
-using System.Drawing;
-using Sdl.TellMe.ProviderApi;
-
-namespace Sdl.Community.TMOptimizer.Integration.TellMe
-{
- public class AppStoreForumAction : AbstractTellMeAction
- {
- public override bool IsAvailable => true;
-
- public override string Category => string.Format(PluginResources.TellMe_Provider_Results, PluginResources.Plugin_Name);
-
- public override Icon Icon => PluginResources.Question;
-
- public AppStoreForumAction()
- {
- Name = "RWS Community AppStore Forum";
- }
-
- public override void Execute()
- {
- Process.Start("https://community.rws.com/product-groups/trados-portfolio/rws-appstore/");
- }
- }
-}
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer.Integration/TellMe/DocumentationAction.cs b/TM Optimizer/Sdl.Community.TMOptimizer.Integration/TellMe/DocumentationAction.cs
deleted file mode 100644
index 7bc1bf86a5..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer.Integration/TellMe/DocumentationAction.cs
+++ /dev/null
@@ -1,25 +0,0 @@
-using System.Diagnostics;
-using System.Drawing;
-using Sdl.TellMe.ProviderApi;
-
-namespace Sdl.Community.TMOptimizer.Integration.TellMe
-{
- public class DocumentationAction : AbstractTellMeAction
- {
- public override bool IsAvailable => true;
-
- public override string Category => string.Format(PluginResources.TellMe_Provider_Results, PluginResources.Plugin_Name);
-
- public override Icon Icon => PluginResources.TellMe_Documentation;
-
- public DocumentationAction()
- {
- Name = string.Format("{0} Documentation", PluginResources.Plugin_Name);
- }
-
- public override void Execute()
- {
- Process.Start("https://appstore.rws.com/Plugin/70?tab=documentation");
- }
- }
-}
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer.Integration/TellMe/SettingsAction.cs b/TM Optimizer/Sdl.Community.TMOptimizer.Integration/TellMe/SettingsAction.cs
deleted file mode 100644
index 4ecab36445..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer.Integration/TellMe/SettingsAction.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-using Sdl.TellMe.ProviderApi;
-using Sdl.TranslationStudioAutomation.IntegrationApi;
-using System.Drawing;
-
-namespace Sdl.Community.TMOptimizer.Integration.TellMe
-{
- public class SettingsAction : AbstractTellMeAction
- {
- public SettingsAction()
- {
- Name = $"{PluginResources.Plugin_Name} Settings";
- }
-
- public override string Category => string.Format(PluginResources.TellMe_Provider_Results, PluginResources.Plugin_Name);
- public override Icon Icon => PluginResources.TellMe_Settings;
- public override bool IsAvailable => true;
-
- public override void Execute()
- {
- SdlTradosStudio.Application.ExecuteAction();
- }
- }
-}
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer.Integration/TellMe/SourceCodeAction.cs b/TM Optimizer/Sdl.Community.TMOptimizer.Integration/TellMe/SourceCodeAction.cs
deleted file mode 100644
index c991085361..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer.Integration/TellMe/SourceCodeAction.cs
+++ /dev/null
@@ -1,25 +0,0 @@
-using System.Diagnostics;
-using System.Drawing;
-using Sdl.TellMe.ProviderApi;
-
-namespace Sdl.Community.TMOptimizer.Integration.TellMe
-{
- public class SourceCodeAction : AbstractTellMeAction
- {
- public override bool IsAvailable => true;
-
- public override string Category => string.Format(PluginResources.TellMe_Provider_Results, PluginResources.Plugin_Name);
-
- public override Icon Icon => PluginResources.TellMe_SourceCode;
-
- public SourceCodeAction()
- {
- Name = string.Format("{0} Source Code", PluginResources.Plugin_Name);
- }
-
- public override void Execute()
- {
- Process.Start("https://github.com/RWS/Sdl-Community/tree/master/TM%20Optimizer");
- }
- }
-}
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer.Integration/TellMe/TellMeProvider.cs b/TM Optimizer/Sdl.Community.TMOptimizer.Integration/TellMe/TellMeProvider.cs
deleted file mode 100644
index 71bd2ad718..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer.Integration/TellMe/TellMeProvider.cs
+++ /dev/null
@@ -1,30 +0,0 @@
-using Sdl.TellMe.ProviderApi;
-
-namespace Sdl.Community.TMOptimizer.Integration.TellMe
-{
- [TellMeProvider]
- public class TellMeProvider: ITellMeProvider
- {
- public string Name => string.Format(PluginResources.TellMe_Provider, PluginResources.Plugin_Name);
-
- public AbstractTellMeAction[] ProviderActions => new AbstractTellMeAction[]
- {
- new DocumentationAction
- {
- Keywords = new[] { "tm", "optimizer", "documentation" }
- },
- new AppStoreForumAction
- {
- Keywords = new[] { "tm", "optimizer", "support", "forum" }
- },
- new SourceCodeAction
- {
- Keywords = new[] { "tm", "optimizer", "source", "code" }
- },
- new SettingsAction
- {
- Keywords = new[] { "tm", "optimizer", "settings" }
- }
- };
- }
-}
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer.Integration/TmOptimizerRibbon.cs b/TM Optimizer/Sdl.Community.TMOptimizer.Integration/TmOptimizerRibbon.cs
deleted file mode 100644
index cd4e4154d0..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer.Integration/TmOptimizerRibbon.cs
+++ /dev/null
@@ -1,27 +0,0 @@
-using System;
-using System.Windows;
-using Sdl.Community.TMOptimizer.Control;
-using Sdl.Desktop.IntegrationApi;
-using Sdl.Desktop.IntegrationApi.DefaultLocations;
-using Sdl.Desktop.IntegrationApi.Extensions;
-
-namespace Sdl.Community.TMOptimizer.Integration
-{
- [RibbonGroup("Sdl.Community.TmOptimizer", Name = "TmOptimizer")]
- [RibbonGroupLayout(LocationByType = typeof(StudioDefaultRibbonTabs.AddinsRibbonTabLocation))]
- class TmOptimizerRibbon : AbstractRibbonGroup
- {
- }
- [Action("Sdl.Community.TmOptimizer", Name = "TmOptimizer", Icon = "product",Description = "TmOptimizer")]
- [ActionLayout(typeof(TmOptimizerRibbon), 20, DisplayType.Large)]
- class TmOptimizerViewPart:AbstractAction
- {
- protected override void Execute()
- {
- var main = new MainWindow {DataContext = new TMCleanerViewModel()};
- Application.Current.MainWindow = main;
-
- main.ShowDialog();
- }
- }
-}
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer.Integration/pluginpackage.manifest.xml b/TM Optimizer/Sdl.Community.TMOptimizer.Integration/pluginpackage.manifest.xml
deleted file mode 100644
index 1bb392ef0a..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer.Integration/pluginpackage.manifest.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
- TM Optimizer
- 5.0.0.0
- TM Optimizer
- Trados AppStore Team
-
-
- Sdl.Community.TMOptimizer.Control.dll
- Sdl.Community.TMOptimizerLib.dll
- Xceed.Wpf.Toolkit.dll
-
-
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer.sln b/TM Optimizer/Sdl.Community.TMOptimizer.sln
deleted file mode 100644
index 082f6ab09d..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer.sln
+++ /dev/null
@@ -1,101 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio Version 17
-VisualStudioVersion = 17.9.34407.89
-MinimumVisualStudioVersion = 10.0.40219.1
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{AA2AF093-976A-431F-A54B-C86F63C00F5F}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "OpenExchange", "OpenExchange", "{1D6F8C17-5E28-4A9B-947F-9E12D9036B79}"
- ProjectSection(SolutionItems) = preProject
- OpenExchange\tmoptimizer_256.png = OpenExchange\tmoptimizer_256.png
- EndProjectSection
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sdl.Community.TMOptimizerLib", "Sdl.Community.TMOptimizerLib\Sdl.Community.TMOptimizerLib.csproj", "{256DB2E3-306A-4AEF-B343-4514ACF6299E}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sdl.Community.TMOptimizer.Integration", "Sdl.Community.TMOptimizer.Integration\Sdl.Community.TMOptimizer.Integration.csproj", "{1CBF7231-A95E-43A5-942E-49D3A9C99D4A}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sdl.Community.TMOptimizer.Control", "Sdl.Community.TMOptimizer.Control\Sdl.Community.TMOptimizer.Control.csproj", "{A82ED8EE-C8FF-4AD2-B09F-EC379AA17B0E}"
-EndProject
-Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "Sdl.Community.TMOptimizer.Installer", "Sdl.Community.TMOptimizer.Installer\Sdl.Community.TMOptimizer.Installer.wixproj", "{BD6FDD83-75C6-4DDE-B92A-4C9CAD18CBD7}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sdl.Community.TMOptimizer", "Sdl.Community.TMOptimizer\Sdl.Community.TMOptimizer.csproj", "{4C6FE095-A4D0-4250-895E-AC895592E22B}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|Any CPU = Debug|Any CPU
- Debug|Mixed Platforms = Debug|Mixed Platforms
- Debug|x86 = Debug|x86
- Release|Any CPU = Release|Any CPU
- Release|Mixed Platforms = Release|Mixed Platforms
- Release|x86 = Release|x86
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {256DB2E3-306A-4AEF-B343-4514ACF6299E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {256DB2E3-306A-4AEF-B343-4514ACF6299E}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {256DB2E3-306A-4AEF-B343-4514ACF6299E}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {256DB2E3-306A-4AEF-B343-4514ACF6299E}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
- {256DB2E3-306A-4AEF-B343-4514ACF6299E}.Debug|x86.ActiveCfg = Debug|Any CPU
- {256DB2E3-306A-4AEF-B343-4514ACF6299E}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {256DB2E3-306A-4AEF-B343-4514ACF6299E}.Release|Any CPU.Build.0 = Release|Any CPU
- {256DB2E3-306A-4AEF-B343-4514ACF6299E}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
- {256DB2E3-306A-4AEF-B343-4514ACF6299E}.Release|Mixed Platforms.Build.0 = Release|Any CPU
- {256DB2E3-306A-4AEF-B343-4514ACF6299E}.Release|x86.ActiveCfg = Release|Any CPU
- {1CBF7231-A95E-43A5-942E-49D3A9C99D4A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {1CBF7231-A95E-43A5-942E-49D3A9C99D4A}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {1CBF7231-A95E-43A5-942E-49D3A9C99D4A}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {1CBF7231-A95E-43A5-942E-49D3A9C99D4A}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
- {1CBF7231-A95E-43A5-942E-49D3A9C99D4A}.Debug|x86.ActiveCfg = Debug|Any CPU
- {1CBF7231-A95E-43A5-942E-49D3A9C99D4A}.Debug|x86.Build.0 = Debug|Any CPU
- {1CBF7231-A95E-43A5-942E-49D3A9C99D4A}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {1CBF7231-A95E-43A5-942E-49D3A9C99D4A}.Release|Any CPU.Build.0 = Release|Any CPU
- {1CBF7231-A95E-43A5-942E-49D3A9C99D4A}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
- {1CBF7231-A95E-43A5-942E-49D3A9C99D4A}.Release|Mixed Platforms.Build.0 = Release|Any CPU
- {1CBF7231-A95E-43A5-942E-49D3A9C99D4A}.Release|x86.ActiveCfg = Release|Any CPU
- {1CBF7231-A95E-43A5-942E-49D3A9C99D4A}.Release|x86.Build.0 = Release|Any CPU
- {A82ED8EE-C8FF-4AD2-B09F-EC379AA17B0E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {A82ED8EE-C8FF-4AD2-B09F-EC379AA17B0E}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {A82ED8EE-C8FF-4AD2-B09F-EC379AA17B0E}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {A82ED8EE-C8FF-4AD2-B09F-EC379AA17B0E}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
- {A82ED8EE-C8FF-4AD2-B09F-EC379AA17B0E}.Debug|x86.ActiveCfg = Debug|Any CPU
- {A82ED8EE-C8FF-4AD2-B09F-EC379AA17B0E}.Debug|x86.Build.0 = Debug|Any CPU
- {A82ED8EE-C8FF-4AD2-B09F-EC379AA17B0E}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {A82ED8EE-C8FF-4AD2-B09F-EC379AA17B0E}.Release|Any CPU.Build.0 = Release|Any CPU
- {A82ED8EE-C8FF-4AD2-B09F-EC379AA17B0E}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
- {A82ED8EE-C8FF-4AD2-B09F-EC379AA17B0E}.Release|Mixed Platforms.Build.0 = Release|Any CPU
- {A82ED8EE-C8FF-4AD2-B09F-EC379AA17B0E}.Release|x86.ActiveCfg = Release|Any CPU
- {A82ED8EE-C8FF-4AD2-B09F-EC379AA17B0E}.Release|x86.Build.0 = Release|Any CPU
- {BD6FDD83-75C6-4DDE-B92A-4C9CAD18CBD7}.Debug|Any CPU.ActiveCfg = Debug|x86
- {BD6FDD83-75C6-4DDE-B92A-4C9CAD18CBD7}.Debug|Any CPU.Build.0 = Debug|x86
- {BD6FDD83-75C6-4DDE-B92A-4C9CAD18CBD7}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
- {BD6FDD83-75C6-4DDE-B92A-4C9CAD18CBD7}.Debug|Mixed Platforms.Build.0 = Debug|x86
- {BD6FDD83-75C6-4DDE-B92A-4C9CAD18CBD7}.Debug|x86.ActiveCfg = Debug|x86
- {BD6FDD83-75C6-4DDE-B92A-4C9CAD18CBD7}.Debug|x86.Build.0 = Debug|x86
- {BD6FDD83-75C6-4DDE-B92A-4C9CAD18CBD7}.Release|Any CPU.ActiveCfg = Release|x86
- {BD6FDD83-75C6-4DDE-B92A-4C9CAD18CBD7}.Release|Any CPU.Build.0 = Release|x86
- {BD6FDD83-75C6-4DDE-B92A-4C9CAD18CBD7}.Release|Mixed Platforms.ActiveCfg = Release|x86
- {BD6FDD83-75C6-4DDE-B92A-4C9CAD18CBD7}.Release|Mixed Platforms.Build.0 = Release|x86
- {BD6FDD83-75C6-4DDE-B92A-4C9CAD18CBD7}.Release|x86.ActiveCfg = Release|x86
- {BD6FDD83-75C6-4DDE-B92A-4C9CAD18CBD7}.Release|x86.Build.0 = Release|x86
- {4C6FE095-A4D0-4250-895E-AC895592E22B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {4C6FE095-A4D0-4250-895E-AC895592E22B}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {4C6FE095-A4D0-4250-895E-AC895592E22B}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {4C6FE095-A4D0-4250-895E-AC895592E22B}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
- {4C6FE095-A4D0-4250-895E-AC895592E22B}.Debug|x86.ActiveCfg = Debug|Any CPU
- {4C6FE095-A4D0-4250-895E-AC895592E22B}.Debug|x86.Build.0 = Debug|Any CPU
- {4C6FE095-A4D0-4250-895E-AC895592E22B}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {4C6FE095-A4D0-4250-895E-AC895592E22B}.Release|Any CPU.Build.0 = Release|Any CPU
- {4C6FE095-A4D0-4250-895E-AC895592E22B}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
- {4C6FE095-A4D0-4250-895E-AC895592E22B}.Release|Mixed Platforms.Build.0 = Release|Any CPU
- {4C6FE095-A4D0-4250-895E-AC895592E22B}.Release|x86.ActiveCfg = Release|Any CPU
- {4C6FE095-A4D0-4250-895E-AC895592E22B}.Release|x86.Build.0 = Release|Any CPU
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
- GlobalSection(NestedProjects) = preSolution
- {1D6F8C17-5E28-4A9B-947F-9E12D9036B79} = {AA2AF093-976A-431F-A54B-C86F63C00F5F}
- EndGlobalSection
- GlobalSection(ExtensibilityGlobals) = postSolution
- SolutionGuid = {A768FF51-78B0-43AC-AF70-8789637C683C}
- EndGlobalSection
-EndGlobal
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer/App.xaml b/TM Optimizer/Sdl.Community.TMOptimizer/App.xaml
deleted file mode 100644
index c53553ee62..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer/App.xaml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer/App.xaml.cs b/TM Optimizer/Sdl.Community.TMOptimizer/App.xaml.cs
deleted file mode 100644
index 6006451ec6..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer/App.xaml.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-using System.Windows;
-
-namespace Sdl.Community.TMOptimizer
-{
- ///
- /// Interaction logic for App.xaml
- ///
- public partial class App : Application
- {
- protected override void OnStartup(StartupEventArgs e)
- {
- // First assign the MainWindow to the main form
- var viewModel = new TMCleanerViewModel();
- var window = new MainWindow();
- window.DataContext = viewModel;
- Application.Current.MainWindow = window; // main window
- window.Show();
- }
- }
-}
\ No newline at end of file
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer/CleanWorkbenchTmxStep.cs b/TM Optimizer/Sdl.Community.TMOptimizer/CleanWorkbenchTmxStep.cs
deleted file mode 100644
index 37adb38aac..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer/CleanWorkbenchTmxStep.cs
+++ /dev/null
@@ -1,37 +0,0 @@
-using System;
-using System.IO;
-using Sdl.Community.TMOptimizerLib;
-
-namespace Sdl.Community.TMOptimizer
-{
- ///
- /// Cleans a Workbench TMX file, removing unnecessary formatting tags
- ///
- class CleanWorkbenchTmxStep : ProcessingStep
- {
- private TmxFile _inputTmxFile;
- private TmxFile _outputTmxFile;
- private Cleaner _cleaner;
- private int? _maxTusProcessed;
-
- public CleanWorkbenchTmxStep(TmxFile inputTmxFile, TmxFile outputTmxFile, int? maxTusProcessed)
- : base(String.Format("Clean {0}", Path.GetFileName(inputTmxFile.FilePath)))
- {
- _inputTmxFile = inputTmxFile;
- _outputTmxFile = outputTmxFile;
- _maxTusProcessed = maxTusProcessed;
- }
-
- protected override void ExecuteImpl()
- {
- _cleaner = new Cleaner(_inputTmxFile, _outputTmxFile, Context.Settings, null);
- AttachProcessorEvents(_cleaner);
- _cleaner.Execute();
- }
-
- protected override void OnReportProgress()
- {
- StatusMessage = String.Format("TUs: {0}/{1} | tags removed: {2} | tags updated {3}", _cleaner.TusRead, _inputTmxFile.GetDetectInfo().TuCount, _cleaner.TagsRemoved, _cleaner.TagsUpdated);
- }
- }
-}
\ No newline at end of file
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer/CreateStudioTmStep.cs b/TM Optimizer/Sdl.Community.TMOptimizer/CreateStudioTmStep.cs
deleted file mode 100644
index 5d57eda360..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer/CreateStudioTmStep.cs
+++ /dev/null
@@ -1,109 +0,0 @@
-using System;
-using System.Globalization;
-using System.IO;
-using Sdl.Core.Globalization;
-using Sdl.LanguagePlatform.Core.Tokenization;
-using Sdl.LanguagePlatform.TranslationMemory;
-using Sdl.LanguagePlatform.TranslationMemoryApi;
-
-namespace Sdl.Community.TMOptimizer
-{
- ///
- /// Create an empty Studio TM
- ///
- class CreateStudioTmStep : ProcessingStep
- {
- private TranslationMemoryReference _tm;
- private Language _sourceLanguage;
- private Language _targetLanguage;
- private TranslationMemoryReference _templateTranslationMemory;
-
- public CreateStudioTmStep(
- TranslationMemoryReference tm,
- Language sourceLanguage,
- Language targetLanguage,
- TranslationMemoryReference templateTranslationMemory) : base(String.Format("Create output TM {0}", Path.GetFileName(tm.FilePath)))
- {
- _tm = tm;
- _sourceLanguage = sourceLanguage;
- _targetLanguage = targetLanguage;
- _templateTranslationMemory = templateTranslationMemory;
- }
-
- protected override void ExecuteImpl()
- {
- CultureInfo sourceCulture;
- CultureInfo targetCulture;
- FuzzyIndexes fuzzyIndexes;
- BuiltinRecognizers recognizers;
- if (_templateTranslationMemory != null && _templateTranslationMemory.FilePath != null)
- {
- sourceCulture = _templateTranslationMemory.TranslationMemory.LanguageDirection.SourceLanguage;
- targetCulture = _templateTranslationMemory.TranslationMemory.LanguageDirection.TargetLanguage;
- fuzzyIndexes = _templateTranslationMemory.TranslationMemory.FuzzyIndexes;
- recognizers = _templateTranslationMemory.TranslationMemory.Recognizers;
- }
- else
- {
- sourceCulture = _sourceLanguage.CultureInfo;
- targetCulture = _targetLanguage.CultureInfo;
- fuzzyIndexes = FuzzyIndexes.SourceWordBased | FuzzyIndexes.TargetWordBased;
- recognizers = BuiltinRecognizers.RecognizeAll;
- }
-
- var tm = new FileBasedTranslationMemory(
- _tm.FilePath,
- String.Empty,
- sourceCulture,
- targetCulture,
- fuzzyIndexes,
- recognizers,
- TokenizerFlags.DefaultFlags,
- WordCountFlags.DefaultFlags );
-
- ReportProgress(25);
- tm.Save();
- ReportProgress(50);
-
- if (_templateTranslationMemory != null && _templateTranslationMemory.FilePath != null)
- {
- CopyTmLanguageResources(_templateTranslationMemory.TranslationMemory, tm);
- CopyTmFieldDefinitions(_templateTranslationMemory.TranslationMemory, tm);
- }
-
- ReportProgress(75);
-
- tm.Save();
-
- ReportProgress(100);
- }
-
- private void CopyTmLanguageResources(FileBasedTranslationMemory templateTm, FileBasedTranslationMemory tm)
- {
- var languageDirection = tm.LanguageDirection;
-
- // Copy any sourcelanguage resources from the template tm to the new tm
- var sourceLanguageBundle = templateTm.LanguageResourceBundles[languageDirection.SourceLanguage];
- if (sourceLanguageBundle != null)
- {
- tm.LanguageResourceBundles.Add(sourceLanguageBundle.Clone());
- }
-
- // Copy any target language resources from the template tm to the new tm
- var targetLanguageBundle = templateTm.LanguageResourceBundles[languageDirection.TargetLanguage];
- if (targetLanguageBundle != null)
- {
- tm.LanguageResourceBundles.Add(targetLanguageBundle.Clone());
- }
-
- }
-
- private void CopyTmFieldDefinitions(FileBasedTranslationMemory templateTm, FileBasedTranslationMemory tm)
- {
- foreach (var field in templateTm.FieldDefinitions)
- {
- tm.FieldDefinitions.Add(field.Clone());
- }
- }
- }
-}
\ No newline at end of file
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer/DeleteTempFilesStep.cs b/TM Optimizer/Sdl.Community.TMOptimizer/DeleteTempFilesStep.cs
deleted file mode 100644
index af85f436da..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer/DeleteTempFilesStep.cs
+++ /dev/null
@@ -1,34 +0,0 @@
-using System.IO;
-
-namespace Sdl.Community.TMOptimizer
-{
- ///
- /// Deletes temp files created during processing.
- ///
- class DeleteTempFilesStep : ProcessingStep
- {
- public DeleteTempFilesStep() : base("Delete temp files")
- {
- }
-
- protected override void ExecuteImpl()
- {
- for (int i = 0; i < Context.TempFiles.Count; i++)
- {
- try
- {
- File.Delete(Context.TempFiles[i]);
- ReportProgress((int)((i+1)*100.0)/Context.TempFiles.Count);
- }
- catch
- {
- // ignore
- }
- }
-
- Context.TempFiles.Clear();
-
- ReportProgress(100);
- }
- }
-}
\ No newline at end of file
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer/EnumRadioButton.cs b/TM Optimizer/Sdl.Community.TMOptimizer/EnumRadioButton.cs
deleted file mode 100644
index 441d68f590..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer/EnumRadioButton.cs
+++ /dev/null
@@ -1,142 +0,0 @@
-using System;
-using System.Windows;
-using System.Windows.Controls;
-
-namespace Sdl.Community.TMOptimizer
-{
- ///
- /// Radio button that supports binding to an enum.
- ///
- public class EnumRadioButton : RadioButton
- {
- public EnumRadioButton()
- {
- Loaded += _Loaded;
- Checked += _Checked;
- }
-
- private void _Loaded(object sender, RoutedEventArgs event_arguments)
- {
- _SetChecked();
- }
-
- private void _Checked(object sender, RoutedEventArgs event_arguments)
- {
- if (IsChecked == true)
- {
- object binding = EnumBinding;
-
- if ((binding is Enum) && (EnumValue != null))
- {
- try
- {
- EnumBinding = Enum.Parse(binding.GetType(), EnumValue);
- }
-
- catch (ArgumentException exception)
- {
- System.Diagnostics.Debug.WriteLine(
- string.Format(
- "EnumRadioButton [{0}]: " +
- "EnumBinding = {1}, " +
- "EnumValue = {2}, " +
- "ArgumentException {3}",
- Name,
- EnumBinding,
- EnumValue,
- exception));
-
- throw;
- }
- }
- }
- }
-
- private void _SetChecked()
- {
- object binding = EnumBinding;
-
- if ((binding is Enum) && (EnumValue != null))
- {
- try
- {
- object value = Enum.Parse(binding.GetType(), EnumValue);
-
- IsChecked = ((Enum)binding).CompareTo(value) == 0;
- }
-
- catch (ArgumentException exception)
- {
- System.Diagnostics.Debug.WriteLine(
- string.Format(
- "EnumRadioButton [{0}]: " +
- "EnumBinding = {1}, " +
- "EnumValue = {2}, " +
- "ArgumentException {3}",
- Name,
- EnumBinding,
- EnumValue,
- exception));
-
- throw;
- }
- }
- }
-
- static EnumRadioButton()
- {
- FrameworkPropertyMetadata enum_binding_metadata = new FrameworkPropertyMetadata();
-
- enum_binding_metadata.BindsTwoWayByDefault = true;
- enum_binding_metadata.PropertyChangedCallback = OnEnumBindingChanged;
-
- EnumBindingProperty = DependencyProperty.Register("EnumBinding",
- typeof(object),
- typeof(EnumRadioButton),
- enum_binding_metadata);
-
- EnumValueProperty = DependencyProperty.Register("EnumValue",
- typeof(string),
- typeof(EnumRadioButton));
- }
-
- public static readonly DependencyProperty EnumBindingProperty;
-
- private static void OnEnumBindingChanged(DependencyObject dependency_object,
- DependencyPropertyChangedEventArgs event_arguments)
- {
- if (dependency_object is EnumRadioButton)
- {
- ((EnumRadioButton)dependency_object)._SetChecked();
- }
- }
-
- public object EnumBinding
- {
- set
- {
- SetValue(EnumBindingProperty, value);
- }
-
- get
- {
- return (object)GetValue(EnumBindingProperty);
- }
- }
-
- public static readonly DependencyProperty EnumValueProperty;
-
- public string EnumValue
- {
- set
- {
- SetValue(EnumValueProperty, value);
- }
-
- get
- {
- return (string)GetValue(EnumValueProperty);
- }
- }
- }
-}
\ No newline at end of file
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer/ExportStudioTmStep.cs b/TM Optimizer/Sdl.Community.TMOptimizer/ExportStudioTmStep.cs
deleted file mode 100644
index b052b7d0b8..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer/ExportStudioTmStep.cs
+++ /dev/null
@@ -1,47 +0,0 @@
-using System;
-using Sdl.Community.TMOptimizerLib;
-using Sdl.Core.Globalization;
-using Sdl.LanguagePlatform.TranslationMemoryApi;
-
-namespace Sdl.Community.TMOptimizer
-{
- ///
- /// Export a Studio TM to TMX
- ///
- class ExportStudioTmStep : ProcessingStep
- {
- private FileBasedTranslationMemory _translationMemory;
- private TmxFile _exportTmxFile;
-
- public ExportStudioTmStep(FileBasedTranslationMemory translationMemory, TmxFile exportTmxFile)
- : base(String.Format("Exporting translation memory {0}", translationMemory.Name))
- {
- _translationMemory = translationMemory;
- _exportTmxFile = exportTmxFile;
- }
-
- protected override void ExecuteImpl()
- {
- TranslationMemoryExporter exporter = new TranslationMemoryExporter(_translationMemory.LanguageDirection);
- int tuCount = _translationMemory.LanguageDirection.GetTranslationUnitCount();
- exporter.BatchExported += (sender, e) =>
- {
- StatusMessage = String.Format("TUs: {0}/{1}", e.TotalProcessed, tuCount);
- ReportProgress((int)((100.0 * e.TotalExported) / tuCount));
- };
- exporter.TmxExportFormat = Sdl.LanguagePlatform.TranslationMemory.TranslationUnitFormat.SDLTradosStudio2009;
-
- exporter.Export(_exportTmxFile.FilePath, true);
-
- _exportTmxFile.DetectInfo = new DetectInfo
- {
- DetectedVersion = DetectInfo.Versions.Studio,
- SourceLanguage = new Language(_translationMemory.LanguageDirection.SourceLanguage.ToString()),
- TargetLanguage = new Language(_translationMemory.LanguageDirection.TargetLanguage.ToString()),
- OriginalSourceLanguage = _translationMemory.LanguageDirection.SourceLanguage.Name,
- OriginalTargetLanguage = _translationMemory.LanguageDirection.TargetLanguage.Name,
- TuCount = tuCount
- };
- }
- }
-}
\ No newline at end of file
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer/HelpManager.cs b/TM Optimizer/Sdl.Community.TMOptimizer/HelpManager.cs
deleted file mode 100644
index 27dbc290e6..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer/HelpManager.cs
+++ /dev/null
@@ -1,10 +0,0 @@
-namespace Sdl.Community.TMOptimizer
-{
- public static class HelpManager
- {
- public static void ShowHelp()
- {
- System.Diagnostics.Process.Start("https://community.rws.com/product-groups/trados-portfolio/rws-appstore/w/wiki/3720/tm-optimizer");
- }
- }
-}
\ No newline at end of file
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer/Images/completed.png b/TM Optimizer/Sdl.Community.TMOptimizer/Images/completed.png
deleted file mode 100644
index ecc68bbeb8..0000000000
Binary files a/TM Optimizer/Sdl.Community.TMOptimizer/Images/completed.png and /dev/null differ
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer/Images/error.png b/TM Optimizer/Sdl.Community.TMOptimizer/Images/error.png
deleted file mode 100644
index 7375b1f757..0000000000
Binary files a/TM Optimizer/Sdl.Community.TMOptimizer/Images/error.png and /dev/null differ
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer/Images/notprocessing.png b/TM Optimizer/Sdl.Community.TMOptimizer/Images/notprocessing.png
deleted file mode 100644
index 902f4b454a..0000000000
Binary files a/TM Optimizer/Sdl.Community.TMOptimizer/Images/notprocessing.png and /dev/null differ
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer/Images/processing.png b/TM Optimizer/Sdl.Community.TMOptimizer/Images/processing.png
deleted file mode 100644
index 21cfc4f34f..0000000000
Binary files a/TM Optimizer/Sdl.Community.TMOptimizer/Images/processing.png and /dev/null differ
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer/Images/product.ico b/TM Optimizer/Sdl.Community.TMOptimizer/Images/product.ico
deleted file mode 100644
index 5bbd4cd32a..0000000000
Binary files a/TM Optimizer/Sdl.Community.TMOptimizer/Images/product.ico and /dev/null differ
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer/Images/warning.png b/TM Optimizer/Sdl.Community.TMOptimizer/Images/warning.png
deleted file mode 100644
index fa4f2785d2..0000000000
Binary files a/TM Optimizer/Sdl.Community.TMOptimizer/Images/warning.png and /dev/null differ
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer/ImportStudioTmStep.cs b/TM Optimizer/Sdl.Community.TMOptimizer/ImportStudioTmStep.cs
deleted file mode 100644
index 4effb62058..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer/ImportStudioTmStep.cs
+++ /dev/null
@@ -1,46 +0,0 @@
-using System;
-using Sdl.Community.TMOptimizerLib;
-using Sdl.LanguagePlatform.TranslationMemory;
-using Sdl.LanguagePlatform.TranslationMemoryApi;
-
-namespace Sdl.Community.TMOptimizer
-{
- ///
- /// Imports a TMX file into a Studio TM
- ///
- class ImportStudioTmStep : ProcessingStep
- {
- private TranslationMemoryReference _outputTranslationMemory;
- private string _name;
- private TmxFile _tmxFile;
-
- public ImportStudioTmStep(TranslationMemoryReference outputTranslationMemory, string name, TmxFile tmxFile)
- : base(String.Format("Import {0}", name))
- {
- _outputTranslationMemory = outputTranslationMemory;
- _name = name;
- _tmxFile = tmxFile;
- }
-
- protected override void ExecuteImpl()
- {
- FileBasedTranslationMemory tm = _outputTranslationMemory.TranslationMemory;
- TranslationMemoryImporter importer = new TranslationMemoryImporter(tm.LanguageDirection);
- importer.BatchImported += (sender, e) =>
- {
- StatusMessage = String.Format("TUs: {0}/{1}", e.Statistics.TotalRead, _tmxFile.GetDetectInfo().TuCount);
- ReportProgress((int)((100.0 * e.Statistics.RawTUs) / _tmxFile.GetDetectInfo().TuCount));
- };
- importer.ImportSettings = new ImportSettings
- {
- CheckMatchingSublanguages = false,
- ExistingFieldsUpdateMode = ImportSettings.FieldUpdateMode.Merge,
- NewFields = ImportSettings.NewFieldsOption.AddToSetup,
- OverwriteExistingTUs = false,
- TUProcessingMode = ImportSettings.ImportTUProcessingMode.ProcessCleanedTUOnly
- };
-
- importer.Import(_tmxFile.FilePath);
- }
- }
-}
\ No newline at end of file
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer/InputTmxFile.cs b/TM Optimizer/Sdl.Community.TMOptimizer/InputTmxFile.cs
deleted file mode 100644
index dab5ec5370..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer/InputTmxFile.cs
+++ /dev/null
@@ -1,42 +0,0 @@
-using System.ComponentModel;
-using Sdl.Community.TMOptimizerLib;
-
-namespace Sdl.Community.TMOptimizer
-{
- ///
- /// A TMX file that needs to be cleaned up.
- ///
- public class InputTmxFile : INotifyPropertyChanged
- {
- public event PropertyChangedEventHandler PropertyChanged;
-
- public InputTmxFile(TmxFile tmxFile)
- {
- TmxFile = tmxFile;
- }
-
- ///
- /// The original TMX file
- ///
- public TmxFile TmxFile
- {
- get;
- private set;
- }
-
- ///
- /// The cleaned up TMX file.
- ///
- public TmxFile CleanTmxFile
- {
- get;
- set;
- }
-
- private void OnNotifyPropertyChanged(string propertyName)
- {
- PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
- }
-
- }
-}
\ No newline at end of file
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer/InputWizardPageControl.xaml b/TM Optimizer/Sdl.Community.TMOptimizer/InputWizardPageControl.xaml
deleted file mode 100644
index ef8ddddfe2..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer/InputWizardPageControl.xaml
+++ /dev/null
@@ -1,79 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer/InputWizardPageControl.xaml.cs b/TM Optimizer/Sdl.Community.TMOptimizer/InputWizardPageControl.xaml.cs
deleted file mode 100644
index a22e140f33..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer/InputWizardPageControl.xaml.cs
+++ /dev/null
@@ -1,82 +0,0 @@
-using System.Collections.Generic;
-using System.Linq;
-using System.Windows;
-using System.Windows.Controls;
-
-namespace Sdl.Community.TMOptimizer
-{
- ///
- /// Interaction logic for InputWizardPageControl.xaml
- ///
- public partial class InputWizardPageControl : UserControl, IWizardPageControl
- {
- public InputWizardPageControl()
- {
- InitializeComponent();
-
- UpdateEnabled();
- }
-
- private void BrowseTM_Click(object sender, RoutedEventArgs e)
- {
- ViewModel.SelectExistingTranslationMemory();
- }
-
- private void AddTMX_Click(object sender, RoutedEventArgs e)
- {
- ViewModel.AddTmxInputFile();
- }
-
- private void RemoveTMX_Click(object sender, RoutedEventArgs e)
- {
- var selectedTmxFiles = new List(_inputTmxFilesDataGrid.SelectedItems.Cast());
- foreach (var f in selectedTmxFiles)
- {
- ViewModel.InputTmxFiles.Remove(f);
- }
- }
-
- public TMCleanerViewModel ViewModel
- {
- get
- {
- return (TMCleanerViewModel)DataContext;
- }
- }
-
- private void UpdateEnabled()
- {
- _removeButton.IsEnabled = _inputTmxFilesDataGrid.SelectedItems.Count > 0;
- }
-
- private void _inputTmxFilesDataGrid_SelectedCellsChanged_1(object sender, SelectedCellsChangedEventArgs e)
- {
- UpdateEnabled();
- }
-
- public bool Next()
- {
- return ViewModel.ValidateInput();
- }
-
- public bool Previous()
- {
- return true;
- }
-
- public void Help()
- {
- HelpManager.ShowHelp();
- }
-
- public void Finish()
- {
-
- }
-
- public void Cancel()
- {
-
- }
- }
-}
\ No newline at end of file
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer/IntroWizardPageControl.xaml b/TM Optimizer/Sdl.Community.TMOptimizer/IntroWizardPageControl.xaml
deleted file mode 100644
index f7b67a2e97..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer/IntroWizardPageControl.xaml
+++ /dev/null
@@ -1,31 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- _Convert Workbench translation memory
- Use this option when you have not yet converted your Workbench TM for use in Studio. You will need
- a TMX export of the Workbench TM you want to convert.
- _Optimize already converted Workbench translation memory
- Use this option when you have already converted your Workbench TM to a Studio TM but are having problems caused
- by excessive formatting tags. You will need your Studio TM and a TMX export of your original Workbench TM.
-
-
-
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer/IntroWizardPageControl.xaml.cs b/TM Optimizer/Sdl.Community.TMOptimizer/IntroWizardPageControl.xaml.cs
deleted file mode 100644
index b65f4d1f38..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer/IntroWizardPageControl.xaml.cs
+++ /dev/null
@@ -1,15 +0,0 @@
-using System.Windows.Controls;
-
-namespace Sdl.Community.TMOptimizer
-{
- ///
- /// Interaction logic for IntroWizardPageControl.xaml
- ///
- public partial class IntroWizardPageControl : UserControl
- {
- public IntroWizardPageControl()
- {
- InitializeComponent();
- }
- }
-}
\ No newline at end of file
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer/MainWindow.xaml b/TM Optimizer/Sdl.Community.TMOptimizer/MainWindow.xaml
deleted file mode 100644
index f2c785f6b3..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer/MainWindow.xaml
+++ /dev/null
@@ -1,47 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer/MainWindow.xaml.cs b/TM Optimizer/Sdl.Community.TMOptimizer/MainWindow.xaml.cs
deleted file mode 100644
index 8b1b4763bd..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer/MainWindow.xaml.cs
+++ /dev/null
@@ -1,74 +0,0 @@
-using System.Windows;
-
-namespace Sdl.Community.TMOptimizer
-{
- ///
- /// Interaction logic for MainWindow.xaml
- ///
- public partial class MainWindow : Window
- {
- public MainWindow()
- {
- InitializeComponent();
-
- _wizard.NextButtonContent = "_Next";
- _wizard.HelpButtonContent = "_Help";
- _wizard.CancelButtonContent = "C_ancel";
- _wizard.BackButtonContent = "_Previous";
- _wizard.FinishButtonContent = "_Finish";
- }
-
- public TMCleanerViewModel ViewModel
- {
- get
- {
- return (TMCleanerViewModel)DataContext;
- }
- }
-
- private void Wizard_Next(object sender, Xceed.Wpf.Toolkit.Core.CancelRoutedEventArgs e)
- {
- var c = _wizard.CurrentPage.Content as IWizardPageControl;
-
- if (c != null)
- {
- e.Cancel = !c.Next();
- }
- }
-
- private void Wizard_Previous(object sender, Xceed.Wpf.Toolkit.Core.CancelRoutedEventArgs e)
- {
- var c = _wizard.CurrentPage.Content as IWizardPageControl;
-
- if (c != null)
- {
- e.Cancel = !c.Previous();
- }
- }
-
- private void Wizard_Cancel(object sender, RoutedEventArgs e)
- {
- var c = _wizard.CurrentPage.Content as IWizardPageControl;
-
- if (c != null)
- {
- c.Cancel();
- }
- }
-
- private void Wizard_Finish(object sender, RoutedEventArgs e)
- {
- var c = _wizard.CurrentPage.Content as IWizardPageControl;
-
- if (c != null)
- {
- c.Finish();
- }
- }
-
- private void Wizard_Help(object sender, RoutedEventArgs e)
- {
- HelpManager.ShowHelp();
- }
- }
-}
\ No newline at end of file
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer/OutputMethod.cs b/TM Optimizer/Sdl.Community.TMOptimizer/OutputMethod.cs
deleted file mode 100644
index 0e5690eadf..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer/OutputMethod.cs
+++ /dev/null
@@ -1,8 +0,0 @@
-namespace Sdl.Community.TMOptimizer
-{
- public enum OutputMethod
- {
- CreateNewTranslationMemory,
- UpdateExistingTranslationMemory
- }
-}
\ No newline at end of file
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer/OutputWizardPageControl.xaml b/TM Optimizer/Sdl.Community.TMOptimizer/OutputWizardPageControl.xaml
deleted file mode 100644
index e3b5547787..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer/OutputWizardPageControl.xaml
+++ /dev/null
@@ -1,33 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer/OutputWizardPageControl.xaml.cs b/TM Optimizer/Sdl.Community.TMOptimizer/OutputWizardPageControl.xaml.cs
deleted file mode 100644
index 87dfb3c1ad..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer/OutputWizardPageControl.xaml.cs
+++ /dev/null
@@ -1,59 +0,0 @@
-using System.Windows;
-using System.Windows.Controls;
-
-namespace Sdl.Community.TMOptimizer
-{
- ///
- /// Interaction logic for OutputWizardPageControl.xaml
- ///
- public partial class OutputWizardPageControl : UserControl, IWizardPageControl
- {
- public OutputWizardPageControl()
- {
- InitializeComponent();
- }
-
- private void BrowseNewTM_Click(object sender, RoutedEventArgs e)
- {
- ViewModel.SelectNewOutputTranslationMemory();
- }
-
- private void BrowseExistingTM_Click(object sender, RoutedEventArgs e)
- {
- ViewModel.SelectExistingOutputTranslationMemory();
- }
-
- public TMCleanerViewModel ViewModel
- {
- get
- {
- return (TMCleanerViewModel)DataContext;
- }
- }
-
- public bool Next()
- {
- return ViewModel.StartProcessing();
- }
-
- public bool Previous()
- {
- return true;
- }
-
- public void Help()
- {
- HelpManager.ShowHelp();
- }
-
- public void Finish()
- {
-
- }
-
- public void Cancel()
- {
-
- }
- }
-}
\ No newline at end of file
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer/ProcessingContext.cs b/TM Optimizer/Sdl.Community.TMOptimizer/ProcessingContext.cs
deleted file mode 100644
index 0334e69dbf..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer/ProcessingContext.cs
+++ /dev/null
@@ -1,33 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.IO;
-using Sdl.Community.TMOptimizerLib;
-
-namespace Sdl.Community.TMOptimizer
-{
- public class ProcessingContext
- {
- public ProcessingContext()
- {
- TempFiles = new List();
- }
-
- public Settings Settings
- {
- get; set;
- }
-
- public string GetTempTmxFile()
- {
- string path = Path.Combine(Path.GetTempPath(), Guid.NewGuid() + ".tmx");
- TempFiles.Add(path);
- return path;
- }
-
- public List TempFiles
- {
- get;
- private set;
- }
- }
-}
\ No newline at end of file
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer/ProcessingState.cs b/TM Optimizer/Sdl.Community.TMOptimizer/ProcessingState.cs
deleted file mode 100644
index 3a64b3e683..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer/ProcessingState.cs
+++ /dev/null
@@ -1,12 +0,0 @@
-namespace Sdl.Community.TMOptimizer
-{
- public enum ProcessingState
- {
- NotProcessing,
- Processing,
- Canceling,
- Canceled,
- Completed,
- Failed
- }
-}
\ No newline at end of file
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer/ProcessingStateToImageConverter.cs b/TM Optimizer/Sdl.Community.TMOptimizer/ProcessingStateToImageConverter.cs
deleted file mode 100644
index 9d68869b94..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer/ProcessingStateToImageConverter.cs
+++ /dev/null
@@ -1,38 +0,0 @@
-using System;
-using System.Windows.Data;
-
-namespace Sdl.Community.TMOptimizer
-{
- public class ProcessingStateToImageConverter : IValueConverter
- {
- public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
- {
- ProcessingState state = (ProcessingState)value;
- switch (state)
- {
- case ProcessingState.Canceled:
- case ProcessingState.Canceling:
- case ProcessingState.Failed:
- return GetImagePath("error.png");
- case ProcessingState.Completed:
- return GetImagePath("completed.png");
- case ProcessingState.NotProcessing:
- return GetImagePath("notprocessing.png");
- case ProcessingState.Processing:
- return GetImagePath("processing.png");
- default:
- return null;
- }
- }
-
- private string GetImagePath(string imageFileName)
- {
- return "Images\\" + imageFileName;
- }
-
- public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
- {
- throw new NotImplementedException();
- }
- }
-}
\ No newline at end of file
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer/ProcessingStep.cs b/TM Optimizer/Sdl.Community.TMOptimizer/ProcessingStep.cs
deleted file mode 100644
index fb14f221a9..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer/ProcessingStep.cs
+++ /dev/null
@@ -1,149 +0,0 @@
-using System;
-using System.ComponentModel;
-using Sdl.Community.TMOptimizerLib;
-
-namespace Sdl.Community.TMOptimizer
-{
- public abstract class ProcessingStep : INotifyPropertyChanged
- {
- private int _progress;
-
- protected ProcessingStep(string name)
- {
- Name = name;
- ProcessingState = ProcessingState.NotProcessing;
- }
-
- public ProcessingContext Context
- {
- get;
- set;
- }
-
- public string Name
- {
- get;
- private set;
- }
-
- public int Progress
- {
- get
- {
- return _progress;
- }
- private set
- {
- _progress = value;
- OnPropertyChanged("Progress");
- }
- }
-
- private string _statusMessage;
- public string StatusMessage
- {
- get
- {
- return _statusMessage;
- }
- set
- {
- _statusMessage = value;
- OnPropertyChanged("StatusMessage");
- }
- }
-
- public Exception Error
- {
- get;
- set;
- }
-
- private ProcessingState _processingState;
- public ProcessingState ProcessingState
- {
- get
- {
- return _processingState;
- }
- set
- {
- _processingState = value;
- OnPropertyChanged("ProcessingState");
- }
- }
-
- public bool CancelRequested
- {
- get;
- private set;
- }
-
- public void RequestCancelAsync()
- {
- ProcessingState = ProcessingState.Canceling;
- CancelRequested = true;
- }
-
- public void Execute()
- {
- try
- {
- ProcessingState = ProcessingState.Processing;
- ExecuteImpl();
-
- if (CancelRequested)
- {
- ProcessingState = ProcessingState.Canceled;
- }
- else
- {
- ProcessingState = ProcessingState.Completed;
- }
- }
- catch (Exception e)
- {
- Error = e;
- ProcessingState = ProcessingState.Failed;
- return;
- }
- }
-
- protected abstract void ExecuteImpl();
-
- internal void ReportProgress(int progress)
- {
- Progress = progress;
- OnReportProgress();
- }
-
- ///
- /// Attached Progress event and takes care of forwarding cancellation requests to the processor.
- ///
- ///
- protected void AttachProcessorEvents(ProcessorBase processor)
- {
- processor.Progress += (sender, e) =>
- {
- if (CancelRequested)
- {
- e.Cancel = true;
- return;
- }
-
- ReportProgress(e.Progress);
- };
- }
-
- protected virtual void OnReportProgress()
- {
- }
-
- public event PropertyChangedEventHandler PropertyChanged;
-
- private void OnPropertyChanged(string propertyName)
- {
- PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
- }
- }
-}
\ No newline at end of file
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer/ProcessingWizardPageControl.xaml b/TM Optimizer/Sdl.Community.TMOptimizer/ProcessingWizardPageControl.xaml
deleted file mode 100644
index ef09500295..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer/ProcessingWizardPageControl.xaml
+++ /dev/null
@@ -1,54 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer/ProcessingWizardPageControl.xaml.cs b/TM Optimizer/Sdl.Community.TMOptimizer/ProcessingWizardPageControl.xaml.cs
deleted file mode 100644
index 70c2acadd7..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer/ProcessingWizardPageControl.xaml.cs
+++ /dev/null
@@ -1,64 +0,0 @@
-using System.Windows;
-using System.Windows.Controls;
-
-namespace Sdl.Community.TMOptimizer
-{
- ///
- /// Interaction logic for ProcessingWizardPageControl.xaml
- ///
- public partial class ProcessingWizardPageControl : UserControl, IWizardPageControl
- {
- public ProcessingWizardPageControl()
- {
- InitializeComponent();
- }
-
- public TMCleanerViewModel ViewModel
- {
- get
- {
- return (TMCleanerViewModel)DataContext;
- }
- }
-
- public bool Next()
- {
- return true;
- }
-
- public bool Previous()
- {
- if (ViewModel.IsProcessing)
- {
- MessageBox.Show(Application.Current.MainWindow, "You cannot go back while the wizard is processing.", "Processing", MessageBoxButton.OK, MessageBoxImage.Information);
- return false;
- }
- return true;
- }
-
- public void Help()
- {
- HelpManager.ShowHelp();
- }
-
- public void Finish()
- {
-
- }
-
- public void Cancel()
- {
-
- }
-
- private void OpenContainingFolder_Click(object sender, RoutedEventArgs e)
- {
- ViewModel.OpenContainerFolder();
- }
-
- private void OpenTMInStudio_Click(object sender, RoutedEventArgs e)
- {
- ViewModel.OpenOutputTMInStudio();
- }
- }
-}
\ No newline at end of file
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer/Properties/AssemblyInfo.cs b/TM Optimizer/Sdl.Community.TMOptimizer/Properties/AssemblyInfo.cs
deleted file mode 100644
index fb1bc8defd..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,49 +0,0 @@
-using System.Reflection;
-using System.Runtime.InteropServices;
-using System.Windows;
-
-// General Information about an assembly is controlled through the following
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-[assembly: AssemblyTitle("TM Optimizer")]
-[assembly: AssemblyProduct("TM Optimizer")]
-[assembly: AssemblyCompany("SDL Limited as part of the RWS Holdings Plc group of companies")]
-[assembly: AssemblyCopyright("Copyright © 2011 - 2022 SDL Limited as part of the RWS Holdings Plc group of companies (\"RWS Group\").")]
-
-// Setting ComVisible to false makes the types in this assembly not visible
-// to COM components. If you need to access a type in this assembly from
-// COM, set the ComVisible attribute to true on that type.
-[assembly: ComVisible(false)]
-
-//In order to begin building localizable applications, set
-//CultureYouAreCodingWith in your .csproj file
-//inside a . For example, if you are using US english
-//in your source files, set the to en-US. Then uncomment
-//the NeutralResourceLanguage attribute below. Update the "en-US" in
-//the line below to match the UICulture setting in the project file.
-
-//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
-
-
-[assembly: ThemeInfo(
- ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located
- //(used if a resource is not found in the page,
- // or application resource dictionaries)
- ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located
- //(used if a resource is not found in the page,
- // app, or any theme specific resource dictionaries)
-)]
-
-
-// Version information for an assembly consists of the following four values:
-//
-// Major Version
-// Minor Version
-// Build Number
-// Revision
-//
-// You can specify all the values or you can default the Build and Revision Numbers
-// by using the '*' as shown below:
-// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("5.0.0.0")]
-[assembly: AssemblyFileVersion("5.0.0.0")]
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer/Properties/Resources.Designer.cs b/TM Optimizer/Sdl.Community.TMOptimizer/Properties/Resources.Designer.cs
deleted file mode 100644
index bff619b703..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer/Properties/Resources.Designer.cs
+++ /dev/null
@@ -1,63 +0,0 @@
-//------------------------------------------------------------------------------
-//
-// This code was generated by a tool.
-// Runtime Version:4.0.30319.42000
-//
-// Changes to this file may cause incorrect behavior and will be lost if
-// the code is regenerated.
-//
-//------------------------------------------------------------------------------
-
-namespace Sdl.Community.TMOptimizer.Properties {
- using System;
-
-
- ///
- /// A strongly-typed resource class, for looking up localized strings, etc.
- ///
- // This class was auto-generated by the StronglyTypedResourceBuilder
- // class via a tool like ResGen or Visual Studio.
- // To add or remove a member, edit your .ResX file then rerun ResGen
- // with the /str option, or rebuild your VS project.
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")]
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
- internal class Resources {
-
- private static global::System.Resources.ResourceManager resourceMan;
-
- private static global::System.Globalization.CultureInfo resourceCulture;
-
- [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
- internal Resources() {
- }
-
- ///
- /// Returns the cached ResourceManager instance used by this class.
- ///
- [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
- internal static global::System.Resources.ResourceManager ResourceManager {
- get {
- if (object.ReferenceEquals(resourceMan, null)) {
- global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Sdl.Community.TMOptimizer.Properties.Resources", typeof(Resources).Assembly);
- resourceMan = temp;
- }
- return resourceMan;
- }
- }
-
- ///
- /// Overrides the current thread's CurrentUICulture property for all
- /// resource lookups using this strongly typed resource class.
- ///
- [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
- internal static global::System.Globalization.CultureInfo Culture {
- get {
- return resourceCulture;
- }
- set {
- resourceCulture = value;
- }
- }
- }
-}
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer/Properties/Resources.resx b/TM Optimizer/Sdl.Community.TMOptimizer/Properties/Resources.resx
deleted file mode 100644
index af7dbebbac..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer/Properties/Resources.resx
+++ /dev/null
@@ -1,117 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- text/microsoft-resx
-
-
- 2.0
-
-
- System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
\ No newline at end of file
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer/Properties/Settings.Designer.cs b/TM Optimizer/Sdl.Community.TMOptimizer/Properties/Settings.Designer.cs
deleted file mode 100644
index f552829560..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer/Properties/Settings.Designer.cs
+++ /dev/null
@@ -1,26 +0,0 @@
-//------------------------------------------------------------------------------
-//
-// This code was generated by a tool.
-// Runtime Version:4.0.30319.42000
-//
-// Changes to this file may cause incorrect behavior and will be lost if
-// the code is regenerated.
-//
-//------------------------------------------------------------------------------
-
-namespace Sdl.Community.TMOptimizer.Properties {
-
-
- [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.8.0.0")]
- internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
-
- private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
-
- public static Settings Default {
- get {
- return defaultInstance;
- }
- }
- }
-}
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer/Properties/Settings.settings b/TM Optimizer/Sdl.Community.TMOptimizer/Properties/Settings.settings
deleted file mode 100644
index 033d7a5e9e..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer/Properties/Settings.settings
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer/Sdl.Community.TMOptimizer.csproj b/TM Optimizer/Sdl.Community.TMOptimizer/Sdl.Community.TMOptimizer.csproj
deleted file mode 100644
index ca57317abc..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer/Sdl.Community.TMOptimizer.csproj
+++ /dev/null
@@ -1,116 +0,0 @@
-
-
-
- net48
- false
- false
- $(AppData)\Trados\Trados Studio\18\Plugins
- $(MSBuildProgramFiles32)\Trados\Trados Studio\Studio18
- true
- WinExe
- x86
- True
- ..\..\SdlCommunity.snk
-
-
-
- $(TradosFolder)\Sdl.Core.Globalization.dll
-
-
- $(TradosFolder)\Sdl.Core.Globalization.Async.dll
-
-
- $(TradosFolder)\Sdl.Core.PluginFramework.dll
-
-
- $(TradosFolder)\Sdl.Core.TM.ImportExport.dll
-
-
- $(TradosFolder)\Sdl.LanguagePlatform.Core.dll
-
-
- $(TradosFolder)\Sdl.LanguagePlatform.TranslationMemory.dll
-
-
- $(TradosFolder)\Sdl.LanguagePlatform.TranslationMemoryApi.dll
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 4.0
-
-
-
-
-
-
-
- MSBuild:Compile
- Designer
-
-
- Designer
- MSBuild:Compile
-
-
- Designer
- MSBuild:Compile
-
-
- MSBuild:Compile
- Designer
-
-
- Designer
- MSBuild:Compile
-
-
- Designer
- MSBuild:Compile
-
-
-
-
- SettingsSingleFileGenerator
- Settings.Designer.cs
-
-
-
-
-
- {256db2e3-306a-4aef-b343-4514acf6299e}
- Sdl.Community.TMOptimizerLib
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 4.6.0
-
-
-
- 0.2.3
-
-
-
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer/StripWorkbenchTusStep.cs b/TM Optimizer/Sdl.Community.TMOptimizer/StripWorkbenchTusStep.cs
deleted file mode 100644
index a19e685016..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer/StripWorkbenchTusStep.cs
+++ /dev/null
@@ -1,30 +0,0 @@
-using System;
-using Sdl.Community.TMOptimizerLib;
-
-namespace Sdl.Community.TMOptimizer
-{
- class StripWorkbenchTusStep : ProcessingStep
- {
- private TmxFile _inputTmxFile;
- private TmxFile _outputTmxFile;
- private Stripper _stripper;
-
- public StripWorkbenchTusStep(string name, TmxFile inputTmxFile, TmxFile outputTmxFile) : base(String.Format("Identify Workbench TUs in {0}", name))
- {
- _inputTmxFile = inputTmxFile;
- _outputTmxFile = outputTmxFile;
- }
-
- protected override void ExecuteImpl()
- {
- _stripper = new Stripper(_inputTmxFile, _outputTmxFile, Context.Settings);
- AttachProcessorEvents(_stripper);
- _stripper.Execute();
- }
-
- protected override void OnReportProgress()
- {
- StatusMessage = String.Format("TUs: {0}/{1} | Workbench TUs removed: {2}", _stripper.TusRead, _inputTmxFile.GetDetectInfo().TuCount, _stripper.TusStripped);
- }
- }
-}
\ No newline at end of file
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer/TMCleanerViewModel.cs b/TM Optimizer/Sdl.Community.TMOptimizer/TMCleanerViewModel.cs
deleted file mode 100644
index e7c5991526..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer/TMCleanerViewModel.cs
+++ /dev/null
@@ -1,588 +0,0 @@
-using System;
-using System.Collections.ObjectModel;
-using System.ComponentModel;
-using System.Diagnostics;
-using System.IO;
-using System.Linq;
-using System.Windows;
-using Sdl.Community.TMOptimizerLib;
-using Sdl.Core.Globalization;
-using Sdl.LanguagePlatform.Core;
-using Sdl.LanguagePlatform.TranslationMemoryApi;
-
-namespace Sdl.Community.TMOptimizer
-{
- public class TMCleanerViewModel : INotifyPropertyChanged
- {
- public TMCleanerViewModel()
- {
- InputTmxFiles = new ObservableCollection();
- Mode = WizardMode.ConvertTranslationMemory;
- OutputMethod = OutputMethod.CreateNewTranslationMemory;
- InputTranslationMemory = new TranslationMemoryReference();
- OutputTranslationMemory = new TranslationMemoryReference();
- ProcessingSteps = new ObservableCollection();
- Settings = new Settings();
- ProcessingState = ProcessingState.NotProcessing;
- CanFinish = false;
- }
-
- BackgroundWorker _worker;
- public event PropertyChangedEventHandler PropertyChanged;
-
- private WizardMode _mode;
- public WizardMode Mode
- {
- get
- {
- return _mode;
- }
- set
- {
- _mode = value;
- OnPropertyChanged("Mode");
- OnPropertyChanged("UseExistingTranslationMemory");
- }
- }
-
-
- public bool UseExistingTranslationMemory
- {
- get
- {
- return Mode == WizardMode.CleanExistingTranslationMemory;
- }
- }
-
- public ObservableCollection InputTmxFiles
- {
- get;
- private set;
- }
-
- private TranslationMemoryReference _inputTranslationMemory;
- public TranslationMemoryReference InputTranslationMemory
- {
- get
- {
- return _inputTranslationMemory;
- }
- set
- {
- _inputTranslationMemory = value;
- OnPropertyChanged("InputTranslationMemory");
- }
- }
-
- private OutputMethod _outputMethod;
- public OutputMethod OutputMethod
- {
- get
- {
- return _outputMethod;
- }
- set
- {
- _outputMethod = value;
- OnPropertyChanged("OutputMethod");
- }
- }
-
- private string _newOutputTranslationMemoryFilePath;
- public string NewOutputTranslationMemoryFilePath
- {
- get
- {
- return _newOutputTranslationMemoryFilePath;
- }
- set
- {
- _newOutputTranslationMemoryFilePath = value;
- OnPropertyChanged("NewOutputTranslationMemoryFilePath");
- }
- }
-
- public Language SourceLanguage
- {
- get;
- set;
- }
-
- public Language TargetLanguage
- {
- get;
- set;
- }
-
- public Settings Settings
- {
- get;
- private set;
- }
-
- private TranslationMemoryReference _outputTranslationMemory;
- public TranslationMemoryReference OutputTranslationMemory
- {
- get
- {
- return _outputTranslationMemory;
- }
- set
- {
- _outputTranslationMemory = value;
- OnPropertyChanged("OutputTranslationMemory");
- }
- }
-
- private ProcessingState _processingState;
- public ProcessingState ProcessingState
- {
- get
- {
- return _processingState;
- }
- set
- {
- _processingState = value;
- OnPropertyChanged("ProcessingState");
- OnPropertyChanged("IsProcessing");
- OnPropertyChanged("IsCompleted");
- }
- }
-
- public bool IsProcessing
- {
- get
- {
- return ProcessingState == ProcessingState.Processing || ProcessingState == ProcessingState.Canceling;
- }
- }
-
- public bool IsCompleted
- {
- get
- {
- return ProcessingState == ProcessingState.Completed;
- }
- }
-
- private bool _canFinish;
- public bool CanFinish
- {
- get
- {
- return _canFinish;
- }
- set
- {
- _canFinish = value;
- OnPropertyChanged("CanFinish");
- }
- }
-
- private void OnPropertyChanged(string propertyName)
- {
- PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
- }
-
- public void SelectExistingTranslationMemory()
- {
- var dlg = new Microsoft.Win32.OpenFileDialog();
- dlg.Title = "Select TM to optimize";
- dlg.DefaultExt = ".sdltm";
- dlg.Filter = "Trados Studio TMs (.sdltm)|*.sdltm";
-
- if (!string.IsNullOrEmpty(InputTranslationMemory.FilePath))
- {
- dlg.FileName = InputTranslationMemory.FilePath;
- }
-
- if (dlg.ShowDialog() == true)
- {
- InputTranslationMemory.FilePath = dlg.FileName;
- }
- }
-
- public void AddTmxInputFile()
- {
- var dlg = new Microsoft.Win32.OpenFileDialog();
- dlg.Title = "Select TMX files to clean up";
- dlg.DefaultExt = ".tmx";
- dlg.Filter = "TRADOS Workbench TMX (.tmx)|*.tmx";
- dlg.Multiselect = true;
-
- if (dlg.ShowDialog() == true)
- {
- string[] tmxFiles = dlg.FileNames;
- _worker = new BackgroundWorker();
- _worker.DoWork += (sender, e) =>
- {
- foreach (string fileName in tmxFiles)
- {
- var tmxFile = new InputTmxFile(new TmxFile(fileName));
- try
- {
- SafeAddInputTmxFile(tmxFile);
- tmxFile.TmxFile.Detect();
- }
- catch (Exception ex)
- {
- DisplayError(ex);
- SafeRemoveInputTmxFile(tmxFile);
- }
- }
- };
- _worker.RunWorkerCompleted += (sender, e) =>
- {
-
- };
-
- _worker.RunWorkerAsync();
- }
- }
-
- public void SafeAddInputTmxFile(InputTmxFile tmxFile)
- {
- Application.Current.Dispatcher.Invoke(new Action(() =>
- {
- InputTmxFiles.Add(tmxFile);
- }));
- }
-
- public void SafeRemoveInputTmxFile(InputTmxFile tmxFile)
- {
- Application.Current.Dispatcher.Invoke(new Action(() =>
- {
- InputTmxFiles.Remove(tmxFile);
- }));
- }
-
- public void SelectNewOutputTranslationMemory()
- {
- var dlg = new Microsoft.Win32.SaveFileDialog();
- dlg.Title = "Specify output TM file name";
- dlg.DefaultExt = ".sdltm";
- dlg.Filter = "Trados Studio TMs (.sdltm)|*.sdltm";
-
- if (!string.IsNullOrEmpty(NewOutputTranslationMemoryFilePath))
- {
- dlg.FileName = NewOutputTranslationMemoryFilePath;
- }
-
- if (dlg.ShowDialog() == true)
- {
- NewOutputTranslationMemoryFilePath = dlg.FileName;
- }
- }
-
- public void SelectExistingOutputTranslationMemory()
- {
- var dlg = new Microsoft.Win32.OpenFileDialog();
- dlg.Title = "Select output TM";
- dlg.DefaultExt = ".sdltm";
- dlg.Filter = "Trados Studio TMs (.sdltm)|*.sdltm";
-
- if (!string.IsNullOrEmpty(OutputTranslationMemory.FilePath))
- {
- dlg.FileName = OutputTranslationMemory.FilePath;
- }
-
- if (dlg.ShowDialog() == true)
- {
- OutputTranslationMemory.FilePath = dlg.FileName;
- }
- }
-
- ///
- /// Validates the input sources (TMX and optional TM)
- ///
- ///
- public bool ValidateInput()
- {
- int totalTuCount = 0;
- FileBasedTranslationMemory tm = null;
-
- if (UseExistingTranslationMemory)
- {
- if (InputTranslationMemory == null || String.IsNullOrEmpty(InputTranslationMemory.FilePath))
- {
- ShowError("Select the Studio translation memory to clean up.");
- return false;
- }
-
- try
- {
- // try to access the TM
- tm = InputTranslationMemory.TranslationMemory;
- totalTuCount += tm.LanguageDirection.GetTranslationUnitCount();
- }
- catch (Exception ex)
- {
- ShowError("Failed to open the translation memory: \r\n" + ex.ToString());
- return false;
- }
- }
-
- if (InputTmxFiles.Count == 0)
- {
- ShowError("Select at least one input TMX file.");
- return false;
- }
-
- if (InputTmxFiles.Any(f => f.TmxFile.IsDetecting))
- {
- ShowError("Please wait while the TMX files are being analyzed.");
- return false;
- }
-
- if (InputTmxFiles.Any(f => f.TmxFile.DetectInfo.DetectedVersion != DetectInfo.Versions.Workbench))
- {
- ShowError("One or more TMX files are not Workbench export files.");
- return false;
- }
-
- if (InputTmxFiles.Any(f => f.TmxFile.DetectInfo == null || f.TmxFile.DetectInfo.SourceLanguage == null || f.TmxFile.DetectInfo.TargetLanguage == null))
- {
- ShowError("The source and target language of one or more TMX files could not be detected. Make sure the TMX file is valid or remove it from the list.");
- return false;
- }
-
- var sourceCulture = tm != null ? new Language(tm.LanguageDirection.SourceLanguage.ToString()).CultureInfo : InputTmxFiles.First().TmxFile.DetectInfo.SourceLanguage.CultureInfo;
- var targetCulture = tm != null ? new Language(tm.LanguageDirection.TargetLanguage.ToString()).CultureInfo : InputTmxFiles.First().TmxFile.DetectInfo.TargetLanguage.CultureInfo;
-
- foreach (var f in InputTmxFiles)
- {
- if (!CultureInfoExtensions.AreCompatible(f.TmxFile.DetectInfo.SourceLanguage.CultureInfo, sourceCulture)
- || !CultureInfoExtensions.AreCompatible(f.TmxFile.DetectInfo.TargetLanguage.CultureInfo, targetCulture))
- {
- ShowError("Make sure all the selected TMX files have compatible languages. The main language has to match.");
- return false;
- }
-
- totalTuCount += f.TmxFile.GetDetectInfo().TuCount;
- }
-
- SourceLanguage = new Language(sourceCulture);
- TargetLanguage = new Language(targetCulture);
-
- return true;
- }
-
- private void ShowError(string message)
- {
- MessageBox.Show(Application.Current.MainWindow, message, "Error", MessageBoxButton.OK, MessageBoxImage.Error);
- }
-
- public bool StartProcessing()
- {
- if (!ValidateOutput())
- {
- return false;
- }
-
- CreateProcessingSteps();
-
- ExecuteProcessingStepsAsync();
-
- return true;
- }
-
- public void CancelAsync()
- {
- if (_worker != null)
- {
- ProcessingState = ProcessingState.Canceling;
-
- foreach (ProcessingStep step in ProcessingSteps)
- {
- step.RequestCancelAsync();
- }
- }
- }
-
- public bool ValidateOutput()
- {
- if (OutputMethod == OutputMethod.UpdateExistingTranslationMemory)
- {
- if (OutputTranslationMemory == null || String.IsNullOrEmpty(OutputTranslationMemory.FilePath))
- {
- ShowError("Select the Studio translation memory to import the clean translation units into.");
- return false;
- }
-
- try
- {
- // try to access the TM
- var tm = OutputTranslationMemory.TranslationMemory;
-
- if (!CultureInfoExtensions.AreCompatible(tm.LanguageDirection.SourceLanguage, SourceLanguage.CultureInfo)
- || !CultureInfoExtensions.AreCompatible(tm.LanguageDirection.TargetLanguage, TargetLanguage.CultureInfo))
- {
- ShowError("The languages of the selected translation memory are not compatible with the languages of the input TMX files. The main language has to match.");
- return false;
- }
-
- SourceLanguage = new Language(tm.LanguageDirection.SourceLanguage.ToString());
- TargetLanguage = new Language(tm.LanguageDirection.TargetLanguage.ToString());
- }
- catch (Exception ex)
- {
- ShowError("Failed to open the translation memory: \r\n" + ex.ToString());
- return false;
- }
- }
- else
- {
- // new TM
- if (string.IsNullOrEmpty(NewOutputTranslationMemoryFilePath))
- {
- ShowError("Select the location where the new translation memory should be created.");
- return false;
- }
- }
-
- return true;
- }
-
- public void CreateProcessingSteps()
- {
- ProcessingSteps.Clear();
- var context = new ProcessingContext();
- context.Settings = Settings;
- InputTmxFile existingTmtmxFile = null;
- if (Mode == WizardMode.CleanExistingTranslationMemory)
- {
- existingTmtmxFile = new InputTmxFile(new TmxFile(context.GetTempTmxFile()));
- existingTmtmxFile.CleanTmxFile = new TmxFile(context.GetTempTmxFile());
-
- // export TM
- ProcessingSteps.Add(new ExportStudioTmStep(InputTranslationMemory.TranslationMemory, existingTmtmxFile.TmxFile));
- // strip workbench TUs
- ProcessingSteps.Add(new StripWorkbenchTusStep(InputTranslationMemory.TranslationMemory.Name, existingTmtmxFile.TmxFile, existingTmtmxFile.CleanTmxFile));
- }
-
- foreach (var inputTmxFile in InputTmxFiles)
- {
- // clean TMX
- inputTmxFile.CleanTmxFile = new TmxFile(context.GetTempTmxFile());
- ProcessingSteps.Add(new CleanWorkbenchTmxStep(inputTmxFile.TmxFile, inputTmxFile.CleanTmxFile, null));
- }
-
- TranslationMemoryReference outputTranslationMemory;
-
- if (OutputMethod == OutputMethod.CreateNewTranslationMemory)
- {
- outputTranslationMemory = new TranslationMemoryReference { FilePath = NewOutputTranslationMemoryFilePath };
- // create output TM
- ProcessingSteps.Add(new CreateStudioTmStep(outputTranslationMemory, SourceLanguage, TargetLanguage, InputTranslationMemory));
- }
- else
- {
- outputTranslationMemory = OutputTranslationMemory;
- }
-
- foreach (var inputTmxFile in InputTmxFiles)
- {
- // import clean TMX
- ProcessingSteps.Add(new ImportStudioTmStep(outputTranslationMemory, Path.GetFileName(inputTmxFile.TmxFile.FilePath), inputTmxFile.CleanTmxFile));
- }
-
- if (existingTmtmxFile != null)
- {
- ProcessingSteps.Add(new ImportStudioTmStep(outputTranslationMemory, Path.GetFileName(InputTranslationMemory.FilePath), existingTmtmxFile.CleanTmxFile));
- }
-
- ProcessingSteps.Add(new DeleteTempFilesStep());
-
- // set context of all steps
- foreach (var step in ProcessingSteps)
- {
- step.Context = context;
- }
- }
-
- public void ExecuteProcessingStepsAsync()
- {
- _worker = new BackgroundWorker();
- _worker.WorkerSupportsCancellation = true;
- _worker.DoWork += (sender, e) =>
- {
- foreach (ProcessingStep step in ProcessingSteps)
- {
- step.Execute();
-
- if (step.Error != null)
- {
- DisplayError(step.Error);
- return;
- }
-
- step.ReportProgress(100);
- }
- };
- _worker.RunWorkerCompleted += (sender, e) =>
- {
- if (ProcessingState == ProcessingState.Canceling)
- {
- ProcessingState = ProcessingState.Canceled;
- }
- else if (ProcessingSteps.Any(s => s.Error != null))
- {
- ProcessingState = ProcessingState.Failed;
- }
- else
- {
- ProcessingState = ProcessingState.Completed;
- }
-
- CanFinish = true;
- };
- ProcessingState = ProcessingState.Processing;
- _worker.RunWorkerAsync();
- }
-
- private void DisplayError(Exception e)
- {
- Application.Current.Dispatcher.Invoke(new Action(() =>
- {
- MessageBox.Show(Application.Current.MainWindow, e.ToString(), "Error", MessageBoxButton.OK, MessageBoxImage.Error);
- }));
- }
-
- public ObservableCollection ProcessingSteps
- {
- get;
- private set;
- }
-
- public void OpenContainerFolder()
- {
- string dirName = null;
- if (OutputMethod == OutputMethod.CreateNewTranslationMemory)
- {
- dirName = Path.GetDirectoryName(NewOutputTranslationMemoryFilePath);
- }
- else
- {
- dirName = Path.GetDirectoryName(OutputTranslationMemory.FilePath);
- }
-
- Process.Start(dirName);
- }
-
- public void OpenOutputTMInStudio()
- {
- string filePath = null;
- if (OutputMethod == OutputMethod.CreateNewTranslationMemory)
- {
- filePath = NewOutputTranslationMemoryFilePath;
- }
- else
- {
- filePath = OutputTranslationMemory.FilePath;
- }
-
- Process.Start(filePath);
- }
- }
-}
\ No newline at end of file
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer/TranslationMemoryReference.cs b/TM Optimizer/Sdl.Community.TMOptimizer/TranslationMemoryReference.cs
deleted file mode 100644
index c407e083c2..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer/TranslationMemoryReference.cs
+++ /dev/null
@@ -1,53 +0,0 @@
-using System.ComponentModel;
-using Sdl.LanguagePlatform.TranslationMemoryApi;
-
-namespace Sdl.Community.TMOptimizer
-{
- public class TranslationMemoryReference : INotifyPropertyChanged
- {
- public event PropertyChangedEventHandler PropertyChanged;
-
- private FileBasedTranslationMemory _tm;
-
- private string _filePath;
- public string FilePath
- {
- get
- {
- return _filePath;
- }
- set
- {
- if (_filePath != value)
- {
- _tm = null;
- }
-
- _filePath = value;
-
- OnPropertyChanged("FilePath");
- }
- }
-
- public FileBasedTranslationMemory TranslationMemory
- {
- get
- {
- if (_tm == null)
- {
- _tm = new FileBasedTranslationMemory(FilePath);
- }
- return _tm;
- }
- set
- {
- _tm = value;
- }
- }
-
- private void OnPropertyChanged(string propertyName)
- {
- PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
- }
- }
-}
\ No newline at end of file
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer/WizardMode.cs b/TM Optimizer/Sdl.Community.TMOptimizer/WizardMode.cs
deleted file mode 100644
index 10bedacabb..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer/WizardMode.cs
+++ /dev/null
@@ -1,8 +0,0 @@
-namespace Sdl.Community.TMOptimizer
-{
- public enum WizardMode
- {
- CleanExistingTranslationMemory,
- ConvertTranslationMemory
- }
-}
\ No newline at end of file
diff --git a/TM Optimizer/Sdl.Community.TMOptimizer/WizardPageControl.cs b/TM Optimizer/Sdl.Community.TMOptimizer/WizardPageControl.cs
deleted file mode 100644
index e90d3accb9..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizer/WizardPageControl.cs
+++ /dev/null
@@ -1,16 +0,0 @@
-namespace Sdl.Community.TMOptimizer
-{
- public interface IWizardPageControl
- {
-
- bool Next();
-
- bool Previous();
-
- void Help();
-
- void Finish();
-
- void Cancel();
- }
-}
\ No newline at end of file
diff --git a/TM Optimizer/Sdl.Community.TMOptimizerLib/Cleaner.cs b/TM Optimizer/Sdl.Community.TMOptimizerLib/Cleaner.cs
deleted file mode 100644
index f7f9c4bbd1..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizerLib/Cleaner.cs
+++ /dev/null
@@ -1,232 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text.RegularExpressions;
-using System.Xml;
-using System.Xml.Linq;
-
-//TODO use XML Writer
-//TODO offer option to clean up elements with too many tags
-
-namespace Sdl.Community.TMOptimizerLib
-{
- public class Cleaner : ProcessorBase
- {
- private readonly TmxFile _inputFile;
- private readonly Settings _settings;
- private readonly TmxFile _outputFile;
- private int? _remainingTuProcessingQuota;
-
- public Cleaner(TmxFile inputFile, TmxFile outputFile, Settings settings, int? remainingTuProcessingQuota)
- {
- _inputFile = inputFile;
- _outputFile = outputFile;
- _settings = settings;
- _remainingTuProcessingQuota = remainingTuProcessingQuota;
- }
-
- public int TusRead
- {
- get;
- set;
- }
-
- public int TusCleaned
- {
- get;
- set;
- }
-
- public int TagsUpdated
- {
- get;
- set;
- }
-
- public int TagsRemoved
- {
- get;
- set;
- }
-
- public void Execute()
- {
- var tusNode = from el in ReadFromTmxFile(_inputFile.FilePath) select el;
-
- var outputWriter = new OutputWriter(_outputFile.FilePath);
- outputWriter.InitializeWorkbenchTmx(_inputFile.DetectInfo.OriginalSourceLanguage);
-
-
- int tuIndex = 0;
- foreach (var tu in tusNode)
- {
- var source = tu.Elements("tuv").First().Element("seg");
- var target = tu.Elements("tuv").Last().Element("seg");
-
- if (source == null || target == null)
- {
- continue;
- }
-
- int tagsUpdated = 0;
- int tagsRemoved = 0;
-
- if ((source.Elements("bpt").Any() || target.Elements("bpt").Any()))
- {
- StripFontTags(source, ref tagsUpdated, ref tagsRemoved);
- StripFontTags(target, ref tagsUpdated, ref tagsRemoved);
- }
-
- if (_settings.RemoveOrphan && !source.Elements("bpt").Any())
- {
- tagsRemoved += target.Elements("bpt").Count();
- tagsRemoved += target.Elements("ept").Count();
- target.Elements("bpt").Remove();
- target.Elements("ept").Remove();
- }
-
- if(_settings.ReplaceSoftHyphen)
- {
- if (source.Elements("ph").Any())
- {
- ReplaceSoftHyphen(source, ref tagsUpdated);
- }
-
- if (target.Elements("ph").Any())
- {
- ReplaceSoftHyphen(target, ref tagsUpdated);
- }
- }
-
- // update statistics
- tuIndex++;
- TusRead++;
- if (tagsUpdated > 0 || tagsRemoved > 0)
- {
- TusCleaned++;
- TagsUpdated += tagsUpdated;
- TagsRemoved += tagsRemoved;
- }
-
- // write TU
- outputWriter.Write(tu.ToString());
-
- ReportProgress((int)(100.0 * tuIndex / _inputFile.GetDetectInfo().TuCount));
-
- if (_remainingTuProcessingQuota != null)
- {
- _remainingTuProcessingQuota = _remainingTuProcessingQuota.Value - 1;
-
- if (_remainingTuProcessingQuota.Value == 0)
- {
- break;
- }
- }
- }
-
- outputWriter.Complete();
-
- // output file has same properties as input file
- _outputFile.DetectInfo = _inputFile.GetDetectInfo().Clone();
- _outputFile.DetectInfo.TuCount = TusRead;
-
- ReportProgress(100);
- }
-
- ///
- /// Method will replace the softhyphen placeholder tag with custom value which will be converted in Studio to tag instaed to plain text
- ///
- ///
- ///
- private static void ReplaceSoftHyphen(XElement tu, ref int tagsUpdated)
- {
- foreach (var element in tu.Elements("ph").Where(element => element.Value == "\\-"))
- {
- element.Value = "softhyphen";
- tagsUpdated++;
- }
- }
-
- ///
- /// Any font markup will be removed, combined markup will be cleaned from fonts.
- ///
- ///
- ///
- ///
- ///
- private static void StripFontTags(XElement originalSegment, ref int tagsUpdated, ref int tagsRemoved)
- {
- var listOfTagsToRemove = new List();
- foreach (var element in originalSegment.Elements("bpt"))
- {
- var newValue = RemoveExtraFormatting(element.Value);
- if (String.IsNullOrEmpty(newValue.Trim()))
- {
- listOfTagsToRemove.Add(element.Attribute("i").Value);
- tagsRemoved++;
- }
- else if (element.Value != newValue)
- {
- if (!newValue.StartsWith("{"))
- {
- element.Value = "{" + newValue;
- }
- else
- {
- element.Value = newValue;
- }
- tagsUpdated++;
- }
- }
-
- foreach (var el in listOfTagsToRemove)
- {
- var nodes = from bptept in originalSegment.Elements() where (string)bptept.Attribute("i") == el select bptept;
- nodes.Remove();
- }
- }
-
- ///
- /// Removes extra fonts and formatting which is not necessary to preserve:
- /// - kerning
- /// - scaling
- /// - expansion (between characters and twips)
- ///
- /// Tag string value to clean up
- /// Cleaned tag content
- private static string RemoveExtraFormatting(string tagValue)
- {
- return Regex.Replace(tagValue, "{?\\\\(f|kerning|charscalex|expnd|expndtw|lang)\\p{N}+", String.Empty);
- }
-
-
- ///
- /// Main function to read the input file in streamed manner
- ///
- ///
- ///
- static IEnumerable ReadFromTmxFile(string fileLocation)
- {
- var settings = new XmlReaderSettings { DtdProcessing = DtdProcessing.Ignore };
-
- using (var reader = XmlReader.Create(fileLocation, settings))
- {
- reader.MoveToContent();
- while (reader.Read())
- {
- switch (reader.NodeType)
- {
- case XmlNodeType.Element:
- if (reader.Name == "tu")
- {
- var el = XNode.ReadFrom(reader) as XElement;
- if (el != null)
- yield return el;
- }
- break;
- }
- }
- }
- }
- }
-}
\ No newline at end of file
diff --git a/TM Optimizer/Sdl.Community.TMOptimizerLib/DetectInfo.cs b/TM Optimizer/Sdl.Community.TMOptimizerLib/DetectInfo.cs
deleted file mode 100644
index 03d10d96cb..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizerLib/DetectInfo.cs
+++ /dev/null
@@ -1,36 +0,0 @@
-using Sdl.Core.Globalization;
-
-namespace Sdl.Community.TMOptimizerLib
-{
- public class DetectInfo
- {
- public enum Versions
- {
- Workbench,
- Studio,
- Unknown
- };
-
- public Versions DetectedVersion { get; set; }
- public Language SourceLanguage { get; set; }
- public Language TargetLanguage { get; set; }
-
- public string OriginalSourceLanguage { get; set; }
- public string OriginalTargetLanguage { get; set; }
-
- public int TuCount { get; set; }
-
- internal DetectInfo Clone()
- {
- return new DetectInfo
- {
- DetectedVersion = DetectedVersion,
- SourceLanguage = SourceLanguage,
- TargetLanguage = TargetLanguage,
- OriginalSourceLanguage = OriginalSourceLanguage,
- OriginalTargetLanguage = OriginalTargetLanguage,
- TuCount = TuCount
- };
- }
- }
-}
diff --git a/TM Optimizer/Sdl.Community.TMOptimizerLib/Detector.cs b/TM Optimizer/Sdl.Community.TMOptimizerLib/Detector.cs
deleted file mode 100644
index 225cd314b4..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizerLib/Detector.cs
+++ /dev/null
@@ -1,95 +0,0 @@
-using System;
-using System.Globalization;
-using System.Linq;
-using System.Xml;
-using System.Xml.Linq;
-using Sdl.Core.Globalization;
-using Sdl.Core.Globalization.LanguageRegistry;
-
-namespace Sdl.Community.TMOptimizerLib
-{
- public class Detector
- {
- private readonly string _inputFile;
-
- public Detector(string inputFile)
- {
- _inputFile = inputFile;
- }
-
- public DetectInfo Detect()
- {
- var detectInfo = new DetectInfo();
- bool languagesDetected = false;
- using (var reader = XmlReader.Create(_inputFile, new XmlReaderSettings { DtdProcessing = DtdProcessing.Ignore }))
- {
- reader.MoveToContent();
- while (reader.Read())
- {
- switch (reader.NodeType)
- {
- case XmlNodeType.Element:
- if (reader.Name == "header" && !string.IsNullOrEmpty(reader.GetAttribute("o-tmf")))
- {
- switch (reader.GetAttribute("o-tmf"))
- {
- case "TW4Win 2.0 Format":
- detectInfo.DetectedVersion = DetectInfo.Versions.Workbench;
- break;
- case "SDL TM8 Format":
- detectInfo.DetectedVersion = DetectInfo.Versions.Studio;
- break;
- default:
- detectInfo.DetectedVersion = DetectInfo.Versions.Unknown;
- break;
- }
- }
-
- if (reader.Name == "tu")
- {
- if (!languagesDetected)
- {
- var el = XNode.ReadFrom(reader) as XElement;
- if (el != null && el.Elements("tuv").Count() > 1)
- {
- detectInfo.OriginalSourceLanguage = el.Elements("tuv").First().Attribute((XNamespace.Xml + "lang")).Value;
- detectInfo.SourceLanguage = ConvertToLanguage(detectInfo.OriginalSourceLanguage, detectInfo.DetectedVersion);
- detectInfo.OriginalTargetLanguage = el.Elements("tuv").Last().Attribute((XNamespace.Xml + "lang")).Value;
- detectInfo.TargetLanguage = ConvertToLanguage(detectInfo.OriginalTargetLanguage, detectInfo.DetectedVersion);
- languagesDetected = true;
- }
- }
- else
- {
- // don't read anything below the tu element
- reader.Skip();
- }
-
- detectInfo.TuCount++;
-
- }
- break;
- }
- }
- }
- return detectInfo;
- }
-
- private Language ConvertToLanguage(string languageCode, DetectInfo.Versions tmxVersion)
- {
- var langcode= LanguageRegistryApi.Instance.GetLanguage(languageCode);
- switch (tmxVersion)
- {
- case DetectInfo.Versions.Studio:
- return langcode;
- case DetectInfo.Versions.Workbench:
- int lcid = LegacyTradosLanguage.GetLcidFromIsoCode(languageCode);
- return lcid > 0 ? LanguageRegistryApi.Instance.GetLanguage(CultureInfo.GetCultureInfo(lcid).Name) : langcode;
- case DetectInfo.Versions.Unknown:
- return langcode;
- default:
- throw new ArgumentException("Unknown TMX version: " + tmxVersion);
- }
- }
- }
-}
\ No newline at end of file
diff --git a/TM Optimizer/Sdl.Community.TMOptimizerLib/OutputWriter.cs b/TM Optimizer/Sdl.Community.TMOptimizerLib/OutputWriter.cs
deleted file mode 100644
index 8a1fcb0342..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizerLib/OutputWriter.cs
+++ /dev/null
@@ -1,65 +0,0 @@
-using System;
-using System.IO;
-
-namespace Sdl.Community.TMOptimizerLib
-{
- class OutputWriter
- {
- private readonly string _outputFile;
- private StreamWriter _writer;
-
- public OutputWriter(string outputFile)
- {
- _outputFile = outputFile;
- }
-
- public void InitializeWorkbenchTmx(string sourceLang)
- {
- _writer = new StreamWriter(_outputFile);
- _writer.Write("\n" +
- "\n" +
- "\n" +
- "\n\n\n\n");
- }
-
- public void InitializeStudioTmx(string sourceLang)
- {
- _writer = new StreamWriter(_outputFile);
- _writer.Write("\n" +
- "\n" +
- "\n\n\n\n");
- }
-
- public void Write(string content)
- {
- _writer.Write(content + "\n\n");
- }
-
- public void Complete()
- {
- _writer.Write("\n\n");
- _writer.Flush();
- _writer.Close();
- }
- }
-}
\ No newline at end of file
diff --git a/TM Optimizer/Sdl.Community.TMOptimizerLib/ProcessorBase.cs b/TM Optimizer/Sdl.Community.TMOptimizerLib/ProcessorBase.cs
deleted file mode 100644
index 9fee8b678b..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizerLib/ProcessorBase.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-using System;
-
-namespace Sdl.Community.TMOptimizerLib
-{
- public class ProcessorBase
- {
- public event EventHandler Progress;
-
- protected bool ReportProgress(int progress)
- {
- if (Progress != null)
- {
- ProgressEventArgs e = new ProgressEventArgs();
- e.Progress = progress;
- Progress(this, e);
- return !e.Cancel;
- }
- return true;
- }
- }
-}
\ No newline at end of file
diff --git a/TM Optimizer/Sdl.Community.TMOptimizerLib/ProgressEventArgs.cs b/TM Optimizer/Sdl.Community.TMOptimizerLib/ProgressEventArgs.cs
deleted file mode 100644
index c1bc0712e5..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizerLib/ProgressEventArgs.cs
+++ /dev/null
@@ -1,13 +0,0 @@
-using System.ComponentModel;
-
-namespace Sdl.Community.TMOptimizerLib
-{
- public class ProgressEventArgs : CancelEventArgs
- {
- public int Progress
- {
- get;
- set;
- }
- }
-}
\ No newline at end of file
diff --git a/TM Optimizer/Sdl.Community.TMOptimizerLib/Properties/AssemblyInfo.cs b/TM Optimizer/Sdl.Community.TMOptimizerLib/Properties/AssemblyInfo.cs
deleted file mode 100644
index 482b6038f0..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizerLib/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,31 +0,0 @@
-using System.Reflection;
-using System.Runtime.InteropServices;
-
-// General Information about an assembly is controlled through the following
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-[assembly: AssemblyTitle("TMCleanerLib")]
-[assembly: AssemblyProduct("TMCleanerLib")]
-[assembly: AssemblyCompany("SDL Limited as part of the RWS Holdings Plc group of companies")]
-[assembly: AssemblyCopyright("Copyright © 2011 - 2022 SDL Limited as part of the RWS Holdings Plc group of companies (\"RWS Group\").")]
-
-// Setting ComVisible to false makes the types in this assembly not visible
-// to COM components. If you need to access a type in this assembly from
-// COM, set the ComVisible attribute to true on that type.
-[assembly: ComVisible(false)]
-
-// The following GUID is for the ID of the typelib if this project is exposed to COM
-[assembly: Guid("517c42bf-89e2-4f24-9dc8-b4fca4839603")]
-
-// Version information for an assembly consists of the following four values:
-//
-// Major Version
-// Minor Version
-// Build Number
-// Revision
-//
-// You can specify all the values or you can default the Build and Revision Numbers
-// by using the '*' as shown below:
-// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("5.0.0.0")]
-[assembly: AssemblyFileVersion("5.0.0.0")]
\ No newline at end of file
diff --git a/TM Optimizer/Sdl.Community.TMOptimizerLib/Sdl.Community.TMOptimizerLib.csproj b/TM Optimizer/Sdl.Community.TMOptimizerLib/Sdl.Community.TMOptimizerLib.csproj
deleted file mode 100644
index a3cf204c92..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizerLib/Sdl.Community.TMOptimizerLib.csproj
+++ /dev/null
@@ -1,28 +0,0 @@
-
-
-
- net48
- false
- false
- $(AppData)\Trados\Trados Studio\18\Plugins
- $(MSBuildProgramFiles32)\Trados\Trados Studio\Studio18
- true
- True
- ..\..\SdlCommunity.snk
-
-
-
- $(TradosFolder)\Sdl.Core.Globalization.dll
-
-
- $(TradosFolder)\Sdl.Core.Globalization.Async.dll
-
-
-
-
-
-
-
-
-
-
diff --git a/TM Optimizer/Sdl.Community.TMOptimizerLib/Settings.cs b/TM Optimizer/Sdl.Community.TMOptimizerLib/Settings.cs
deleted file mode 100644
index aa40c7da5a..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizerLib/Settings.cs
+++ /dev/null
@@ -1,16 +0,0 @@
-namespace Sdl.Community.TMOptimizerLib
-{
- public class Settings
- {
- public Settings()
- {
- //Set default settings
- RemoveOrphan = true;
- ReplaceSoftHyphen = true;
- }
-
- public bool RemoveOrphan { get; set; }
- public bool ReplaceSoftHyphen { get; set; }
-
- }
-}
\ No newline at end of file
diff --git a/TM Optimizer/Sdl.Community.TMOptimizerLib/Stripper.cs b/TM Optimizer/Sdl.Community.TMOptimizerLib/Stripper.cs
deleted file mode 100644
index 0067f20fe8..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizerLib/Stripper.cs
+++ /dev/null
@@ -1,103 +0,0 @@
-using System.Collections.Generic;
-using System.Linq;
-using System.Xml;
-using System.Xml.Linq;
-
-namespace Sdl.Community.TMOptimizerLib
-{
- ///
- /// Removes Workbench based TUs from Studio TM
- ///
- public class Stripper : ProcessorBase
- {
- private readonly TmxFile _inputFile;
- private readonly Settings _settings;
- private readonly TmxFile _outputFile;
-
- public Stripper(TmxFile inputFile, TmxFile outputFile, Settings settings)
- {
- _inputFile = inputFile;
- _outputFile = outputFile;
- _settings = settings;
- }
-
- public int TusRead
- {
- get;
- set;
- }
-
- public int TusStripped
- {
- get;
- set;
- }
-
- public void Execute()
- {
- var tusNode = from el in ReadFromTmxFile(_inputFile.FilePath) select el;
-
- var outputWriter = new OutputWriter(_outputFile.FilePath);
- outputWriter.InitializeStudioTmx(_inputFile.DetectInfo.SourceLanguage.IsoAbbreviation);
-
- int tuIndex = 0;
- int tuCount = 0;
- foreach (var tu in tusNode)
- {
- var format = from propElement in tu.Elements("prop")
- where propElement.Attribute("type").Value == "x-OriginalFormat" && propElement.Value == "TradosTranslatorsWorkbench"
- select propElement.Parent;
-
- if (!format.Any())
- {
- outputWriter.Write(tu.ToString());
- tuCount++;
- }
- else
- {
- TusStripped++;
- }
-
- TusRead++;
- ReportProgress((int)(100.0 * tuIndex / _inputFile.GetDetectInfo().TuCount));
- }
-
- outputWriter.Complete();
-
- // output file has same properties as input file
- _outputFile.DetectInfo = _inputFile.GetDetectInfo().Clone();
- _outputFile.DetectInfo.TuCount = tuCount;
- ReportProgress(100);
- }
-
-
- ///
- /// Main function to read the input file in streamed manner
- ///
- ///
- ///
- static IEnumerable ReadFromTmxFile(string fileLocation)
- {
- var settings = new XmlReaderSettings { DtdProcessing = DtdProcessing.Ignore };
-
- using (var reader = XmlReader.Create(fileLocation, settings))
- {
- reader.MoveToContent();
- while (reader.Read())
- {
- switch (reader.NodeType)
- {
- case XmlNodeType.Element:
- if (reader.Name == "tu")
- {
- var el = XNode.ReadFrom(reader) as XElement;
- if (el != null)
- yield return el;
- }
- break;
- }
- }
- }
- }
- }
-}
\ No newline at end of file
diff --git a/TM Optimizer/Sdl.Community.TMOptimizerLib/TmxFile.cs b/TM Optimizer/Sdl.Community.TMOptimizerLib/TmxFile.cs
deleted file mode 100644
index 0039af5052..0000000000
--- a/TM Optimizer/Sdl.Community.TMOptimizerLib/TmxFile.cs
+++ /dev/null
@@ -1,92 +0,0 @@
-using System.ComponentModel;
-
-namespace Sdl.Community.TMOptimizerLib
-{
- public class TmxFile : INotifyPropertyChanged
- {
- public TmxFile(string filePath)
- {
- FilePath = filePath;
- }
-
- public event PropertyChangedEventHandler PropertyChanged;
-
- public string FilePath
- {
- get;
- private set;
- }
-
- private bool _isDetecting = false;
- public bool IsDetecting
- {
- get
- {
- return _isDetecting;
- }
- private set
- {
- _isDetecting = value;
- OnPropertyChanged("IsDetecting");
- Status = IsDetecting ? "Analyzing..." : (DetectInfo != null ? "Ready" : "");
- }
- }
-
- private string _status;
- public string Status
- {
- get
- {
- return _status;
- }
- private set
- {
- _status = value;
- OnPropertyChanged("Status");
- }
- }
-
- private DetectInfo _detectInfo;
- public DetectInfo DetectInfo
- {
- get
- {
- return _detectInfo;
- }
- set
- {
- _detectInfo = value;
- OnPropertyChanged("DetectInfo");
- }
- }
-
- public DetectInfo GetDetectInfo()
- {
- if (DetectInfo == null)
- {
- Detect();
- }
-
- return DetectInfo;
- }
-
- public void Detect()
- {
- IsDetecting = true;
- try
- {
- Detector detector = new Detector(FilePath);
- DetectInfo = detector.Detect();
- }
- finally
- {
- IsDetecting = false;
- }
- }
-
- private void OnPropertyChanged(string propertyName)
- {
- PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
- }
- }
-}
\ No newline at end of file
diff --git a/TMBackup/Sdl.Community.BackupFiles/BackupFiles.cs b/TMBackup/Sdl.Community.BackupFiles/BackupFiles.cs
deleted file mode 100644
index 6752f3e47f..0000000000
--- a/TMBackup/Sdl.Community.BackupFiles/BackupFiles.cs
+++ /dev/null
@@ -1,52 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Reflection;
-using System.Runtime.CompilerServices;
-
-namespace Sdl.Community.BackupFiles
-{
- public class BackupFiles
- {
- static void Main(string[] args)
- {
- LoadAssemblies();
-
- if (args.Any())
- {
- var service = new BackupService();
- service.BackupFilesRecursive(args[0]);
- }
- }
-
- [MethodImpl(MethodImplOptions.NoInlining)]
- private static void LoadAssemblies()
- {
- var _assemblies = new Dictionary();
- Assembly OnAssemblyResolve(object sender, ResolveEventArgs args)
- {
- var shortName = new AssemblyName(args.Name).Name;
- if (_assemblies.TryGetValue(shortName, out var assembly))
- {
- return assembly;
- }
- return null;
- }
- var appAssembly = typeof(BackupFiles).Assembly;
- foreach (var resourceName in appAssembly.GetManifestResourceNames())
- {
- if (resourceName.EndsWith(".dll", StringComparison.InvariantCultureIgnoreCase))
- {
- using (var stream = appAssembly.GetManifestResourceStream(resourceName))
- {
- var assemblyData = new byte[(int)stream.Length];
- stream.Read(assemblyData, 0, assemblyData.Length);
- var assembly = Assembly.Load(assemblyData);
- _assemblies.Add(assembly.GetName().Name, assembly);
- }
- }
- }
- AppDomain.CurrentDomain.AssemblyResolve += OnAssemblyResolve;
- }
- }
-}
\ No newline at end of file
diff --git a/TMBackup/Sdl.Community.BackupFiles/BackupService.cs b/TMBackup/Sdl.Community.BackupFiles/BackupService.cs
deleted file mode 100644
index 2fa0d80cb3..0000000000
--- a/TMBackup/Sdl.Community.BackupFiles/BackupService.cs
+++ /dev/null
@@ -1,134 +0,0 @@
-using Sdl.Community.BackupService;
-using Sdl.Community.BackupService.Helpers;
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
-using NLog;
-
-namespace Sdl.Community.BackupFiles
-{
- public class BackupService
- {
- private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
-
- public void BackupFilesRecursive(string trimmedBackupName)
- {
- try
- {
- var service = new Service();
- var jsonResult = service.GetJsonInformation();
- var backupModel =
- jsonResult?.BackupModelList?.FirstOrDefault(b => b.TrimmedBackupName.Equals(trimmedBackupName));
- var backupModelList = jsonResult?.BackupDetailsModelList
- ?.Where(b => b.TrimmedBackupName.Equals(trimmedBackupName)).ToList();
- if (backupModel != null)
- {
- var fileExtensions = new List();
-
- if (backupModelList != null)
- {
- foreach (var fileExtension in backupModelList)
- {
- fileExtensions.Add(fileExtension.BackupPattern);
- }
- }
-
- var splittedSourcePathList = backupModel.BackupFrom.Split(';').ToList();
- var files = new List().ToArray();
-
- foreach (var sourcePath in splittedSourcePathList)
- {
- if (!string.IsNullOrEmpty(sourcePath))
- {
- // create the directory where to move files
- Directory.CreateDirectory(backupModel.BackupTo);
-
- // take files depending on defined action
- if (fileExtensions.Any())
- {
- // get all files which have extension set up depending on actions from TMBackupDetails grid
- files = Directory.GetFiles(sourcePath, "*.*")
- .Where(f => fileExtensions
- .Contains(Path.GetExtension(f)))
- .ToArray();
- }
- else
- {
- // take all files
- files = Directory.GetFiles(sourcePath);
- }
-
- if (files.Length != 0)
- {
- MoveFilesToAcceptedFolder(files, backupModel.BackupTo);
- } //that means we have a subfolder in watch folder
- else
- {
- var subdirectories = Directory.GetDirectories(sourcePath);
- foreach (var subdirectory in subdirectories)
- {
- var currentDirInfo = new DirectoryInfo(subdirectory);
- CheckForSubfolders(currentDirInfo, backupModel.BackupTo, trimmedBackupName);
- }
- }
- }
- }
- }
- }
- catch (Exception ex)
- {
- Logger.Error($"{Constants.BackupFilesRecursive} {ex.Message}\n {ex.StackTrace}");
- }
- }
-
- private void CheckForSubfolders(DirectoryInfo directory, string root, string trimmedBackupName)
- {
- var service = new Service();
- var jsonResult = service.GetJsonInformation();
- var backupModel = jsonResult?.BackupModelList?.FirstOrDefault(b => b.TrimmedBackupName.Equals(trimmedBackupName));
- if (backupModel != null)
- {
- var subdirectories = directory.GetDirectories();
- var path = root + @"\" + directory.Parent;
- var subdirectoryFiles = Directory.GetFiles(directory.FullName);
-
- if (subdirectoryFiles.Length != 0)
- {
- MoveFilesToAcceptedFolder(subdirectoryFiles, path);
- }
-
- if (subdirectories.Length != 0)
- {
- foreach (var subdirectory in subdirectories)
- {
- CheckForSubfolders(subdirectory, path, trimmedBackupName);
- }
- }
- }
- }
-
- private void MoveFilesToAcceptedFolder(string[] files, string acceptedFolderPath)
- {
- foreach (var subFile in files)
- {
- var parentName = new DirectoryInfo(subFile).Parent != null ? new DirectoryInfo(subFile).Parent.Name : string.Empty;
-
- var fileName = subFile.Substring(subFile.LastIndexOf(@"\", StringComparison.Ordinal));
- var destinationPath = Path.Combine(acceptedFolderPath, parentName);
- if (!Directory.Exists(destinationPath))
- {
- Directory.CreateDirectory(destinationPath);
- }
- try
- {
- File.Copy(subFile, destinationPath + fileName, true);
- }
- catch (Exception ex)
- {
- Logger.Error($"{Constants.MoveFilesToAcceptedFolder} {ex.Message} \n {ex.StackTrace}");
- }
- }
- }
- }
-}
\ No newline at end of file
diff --git a/TMBackup/Sdl.Community.BackupFiles/Properties/AssemblyInfo.cs b/TMBackup/Sdl.Community.BackupFiles/Properties/AssemblyInfo.cs
deleted file mode 100644
index 79cc3df5f6..0000000000
--- a/TMBackup/Sdl.Community.BackupFiles/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,36 +0,0 @@
-using System.Reflection;
-using System.Runtime.CompilerServices;
-using System.Runtime.InteropServices;
-
-// General Information about an assembly is controlled through the following
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-[assembly: AssemblyTitle("Sdl.Community.BackupFiles")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyProduct("Sdl.Community.BackupFiles")]
-[assembly: AssemblyCompany("SDL Limited as part of the RWS Holdings Plc group of companies")]
-[assembly: AssemblyCopyright("Copyright © 2011 - 2022 SDL Limited as part of the RWS Holdings Plc group of companies (\"RWS Group\").")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-// Setting ComVisible to false makes the types in this assembly not visible
-// to COM components. If you need to access a type in this assembly from
-// COM, set the ComVisible attribute to true on that type.
-[assembly: ComVisible(false)]
-
-// The following GUID is for the ID of the typelib if this project is exposed to COM
-[assembly: Guid("3d71bb28-5887-497b-91df-9c85ba431a45")]
-
-// Version information for an assembly consists of the following four values:
-//
-// Major Version
-// Minor Version
-// Build Number
-// Revision
-//
-// You can specify all the values or you can default the Build and Revision Numbers
-// by using the '*' as shown below:
-// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("5.0.0.0")]
-[assembly: AssemblyFileVersion("5.0.0.3")]
diff --git a/TMBackup/Sdl.Community.BackupFiles/Resources/NLog.dll b/TMBackup/Sdl.Community.BackupFiles/Resources/NLog.dll
deleted file mode 100644
index 8000f01503..0000000000
Binary files a/TMBackup/Sdl.Community.BackupFiles/Resources/NLog.dll and /dev/null differ
diff --git a/TMBackup/Sdl.Community.BackupFiles/Resources/Newtonsoft.Json.dll b/TMBackup/Sdl.Community.BackupFiles/Resources/Newtonsoft.Json.dll
deleted file mode 100644
index e4a63399d0..0000000000
Binary files a/TMBackup/Sdl.Community.BackupFiles/Resources/Newtonsoft.Json.dll and /dev/null differ
diff --git a/TMBackup/Sdl.Community.BackupFiles/Resources/Sdl.Community.BackupService.dll b/TMBackup/Sdl.Community.BackupFiles/Resources/Sdl.Community.BackupService.dll
deleted file mode 100644
index d0e2ef5e08..0000000000
Binary files a/TMBackup/Sdl.Community.BackupFiles/Resources/Sdl.Community.BackupService.dll and /dev/null differ
diff --git a/TMBackup/Sdl.Community.BackupFiles/Sdl.Community.BackupFiles.csproj b/TMBackup/Sdl.Community.BackupFiles/Sdl.Community.BackupFiles.csproj
deleted file mode 100644
index f9ee3792b8..0000000000
--- a/TMBackup/Sdl.Community.BackupFiles/Sdl.Community.BackupFiles.csproj
+++ /dev/null
@@ -1,94 +0,0 @@
-
-
-
- Debug
- AnyCPU
- {3D71BB28-5887-497B-91DF-9C85BA431A45}
- WinExe
- Sdl.Community.BackupFiles
- Sdl.Community.BackupFiles
- v4.8
- 512
- true
-
-
- true
- $(MSBuildProgramFiles32)\Trados\Trados Studio\Studio18
- $(AppData)\Trados\Trados Studio\18\Plugins
-
-
- AnyCPU
- true
- full
- false
- ..\build\
- DEBUG;TRACE
- prompt
- 1
-
-
- AnyCPU
- pdbonly
- true
- ..\build\
- TRACE
- prompt
- 4
-
-
-
-
-
-
-
-
-
-
-
- $(TradosFolder)\NLog.dll
-
-
-
-
-
-
-
-
-
-
-
- True
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 2.11.0
-
-
-
-
- {8c9c20fa-0a8c-4293-9dfb-5d8165ccef28}
- Sdl.Community.BackupService
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/TMBackup/Sdl.Community.BackupService/Helpers/Constants.cs b/TMBackup/Sdl.Community.BackupService/Helpers/Constants.cs
deleted file mode 100644
index 64317b243b..0000000000
--- a/TMBackup/Sdl.Community.BackupService/Helpers/Constants.cs
+++ /dev/null
@@ -1,50 +0,0 @@
-using System;
-using System.IO;
-
-namespace Sdl.Community.BackupService.Helpers
-{
- public static class Constants
- {
- public const int MandatoryActionColumnIndex = 0;
- public const int MandatoryTypeColumnIndex = 1;
- public const int MandatoryPatternColumnIndex = 2;
-
- public const string MandatoryValue = "Mandatory value";
- public const string ActionAlreadyExist = "Action with that specific pattern already exist!";
- public const string TaskSchedulerAlreadyExist = "Task already exist! If you want to add a new task please select a different name and scheduler settings.";
- public const string InformativeMessage = "Informative Message";
- public const string DeleteInformativeMessage = "Are you sure you want to delete selected task(s)?";
-
- public const string ManuallyOption = "Backup process started manually.";
-
- public const string InformativeErrorMessage = "Files were not copied correctly. Please check the backup settings and try again!";
- public const string IntervalErrorMessage = "Settings cannot be saved. Please set up a backup time value!";
- public const string BackupIntervalErrorMessage = "Backup interval field accepts only numbers!";
-
- public const string TaskNameErrorMessage = "Actions cannot be added because the backup name is empty! Please fill first the backup name and after that add actions!";
-
- public const string ActionNameErrorMessage = "Action cannot be saved! Please ensure that action name is filled!";
- public const string FileTypeErrorMessage = "Action cannot be saved! Please ensure that type of file is filled!";
- public const string PatternErrorMessage = "Action cannot be saved! Please ensure that patern is filled!";
-
- public const string UpdateActionMessage = "Please ensure that all fields are filled in order to update the action!";
-
- public static readonly string DeployPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), $@"{Properties.Resources.RWS_AppStore}\{Properties.Resources.Plugin_Name}");
- public static readonly string SdlCommunityPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), Properties.Resources.RWS_AppStore);
-
- public static readonly string TaskDetailValue = "TMBackupTask ";
-
- public static readonly string RegistryParam = " / WindowsInitialize";
-
- public static readonly string TimeFormat = "HH:mm:ss";
-
- // Logging messages
- public static readonly string BackupFilesRecursive = "BackupFilesRecursive method:";
- public static readonly string AddTrigger = "AddTrigger method:";
- public static readonly string MoveFilesToAcceptedFolder = "MoveFilesToAcceptedFolder method:";
- public static readonly string AddInfoIntoJson = "AddInfoIntoJson method:";
- public static readonly string RunManuallyTasks = "RunManuallyTasks method:";
- public static readonly string RunDisabledTasks = "RunDisabledTasks method:";
- public static readonly string GetBackupTasks = "GetBackupTasks method:";
- }
-}
\ No newline at end of file
diff --git a/TMBackup/Sdl.Community.BackupService/Helpers/EnumHelper.cs b/TMBackup/Sdl.Community.BackupService/Helpers/EnumHelper.cs
deleted file mode 100644
index faa3e7f7c9..0000000000
--- a/TMBackup/Sdl.Community.BackupService/Helpers/EnumHelper.cs
+++ /dev/null
@@ -1,41 +0,0 @@
-using System;
-using System.Collections;
-using System.ComponentModel;
-using System.Reflection;
-
-namespace Sdl.Community.BackupService.Helpers
-{
- public static class EnumHelper
- {
- public static string GetDescription(Enum value)
- {
- Type type = value.GetType();
- string name = Enum.GetName(type, value);
- if (name != null)
- {
- var field = type.GetField(name);
- if (field != null)
- {
- var attr = Attribute.GetCustomAttribute(field, typeof(DescriptionAttribute)) as DescriptionAttribute;
- if (attr != null)
- {
- return attr.Description;
- }
- }
- }
- return null;
- }
-
- public static ArrayList GetTimeTypeDescription()
- {
- var list = new ArrayList();
- var enumValues = Enum.GetValues(typeof(Enums.TimeTypes));
-
- foreach (Enum value in enumValues)
- {
- list.Add(EnumHelper.GetDescription(value));
- }
- return list;
- }
- }
-}
\ No newline at end of file
diff --git a/TMBackup/Sdl.Community.BackupService/Helpers/Enums.cs b/TMBackup/Sdl.Community.BackupService/Helpers/Enums.cs
deleted file mode 100644
index 6b711c06ac..0000000000
--- a/TMBackup/Sdl.Community.BackupService/Helpers/Enums.cs
+++ /dev/null
@@ -1,36 +0,0 @@
-using System;
-using System.ComponentModel;
-
-namespace Sdl.Community.BackupService.Helpers
-{
- public static class Enums
- {
- public enum TimeTypes
- {
- [Description("minutes")]
- Minutes = 0,
- [Description("hours")]
- Hours = 1
- }
-
- public static string GetDescription(this Enum value)
- {
- var type = value.GetType();
- string name = Enum.GetName(type, value);
- if (name != null)
- {
- var field = type.GetField(name);
- if (field != null)
- {
- var attr = Attribute.GetCustomAttribute(field, typeof(DescriptionAttribute)) as DescriptionAttribute;
-
- if (attr != null)
- {
- return attr.Description;
- }
- }
- }
- return null;
- }
- }
-}
\ No newline at end of file
diff --git a/TMBackup/Sdl.Community.BackupService/Helpers/FolderSelectDialog.cs b/TMBackup/Sdl.Community.BackupService/Helpers/FolderSelectDialog.cs
deleted file mode 100644
index 834a4d8c0a..0000000000
--- a/TMBackup/Sdl.Community.BackupService/Helpers/FolderSelectDialog.cs
+++ /dev/null
@@ -1,110 +0,0 @@
-using System;
-using System.Windows.Forms;
-
-namespace Sdl.Community.BackupService.Helpers
-{
- public class FolderSelectDialog : IDisposable
- {
- private OpenFileDialog ofd;
-
- public string FileName
- {
- get
- {
- return ofd.FileName;
- }
- }
-
- public string InitialDirectory
- {
- get
- {
- return this.ofd.InitialDirectory;
- }
- set
- {
- string str;
- var openFileDialog = ofd;
- str = (value == null || value.Length == 0 ? Environment.CurrentDirectory : value);
- openFileDialog.InitialDirectory = str;
- }
- }
-
- public string Title
- {
- get
- {
- return ofd.Title;
- }
- set
- {
- string str;
- var openFileDialog = ofd;
- str = (value == null ? "Select a folder" : value);
- openFileDialog.Title = str;
- }
- }
-
- public string[] Files
- {
- get
- {
- return ofd.FileNames;
- }
- }
- public FolderSelectDialog()
- {
- ofd = new OpenFileDialog();
- ofd.Filter = "Folders|\n";
- ofd.AddExtension = false;
- ofd.CheckFileExists = false;
- ofd.DereferenceLinks = true;
- ofd.Multiselect = true;
- }
-
- public bool ShowDialog()
- {
- return ShowDialog(IntPtr.Zero);
- }
-
- public bool ShowDialog(IntPtr hWndOwner)
- {
- bool flag = false;
-
- var reflector = new Reflector("System.Windows.Forms");
- uint num = 0;
- Type type = reflector.GetType("FileDialogNative.IFileDialog");
- object obj = reflector.Call(this.ofd, "CreateVistaDialog", new object[0]);
- object[] objArray = new object[] { obj };
- reflector.Call(this.ofd, "OnBeforeVistaDialog", objArray);
- uint @enum = (uint)reflector.CallAs(typeof(FileDialog), this.ofd, "GetOptions", new object[0]);
- @enum = @enum | (uint)reflector.GetEnum("FileDialogNative.FOS", "FOS_PICKFOLDERS");
- object[] objArray1 = new object[] { @enum };
- reflector.CallAs(type, obj, "SetOptions", objArray1);
- object[] objArray2 = new object[] { this.ofd };
- object obj1 = reflector.New("FileDialog.VistaDialogEvents", objArray2);
- object[] objArray3 = new object[] { obj1, num };
- object[] objArray4 = objArray3;
- reflector.CallAs2(type, obj, "Advise", objArray4);
- num = (uint)objArray4[1];
- try
- {
- object[] objArray5 = new object[] { hWndOwner };
- int num1 = (int)reflector.CallAs(type, obj, "Show", objArray5);
- flag = 0 == num1;
- }
- finally
- {
- object[] objArray6 = new object[] { num };
- reflector.CallAs(type, obj, "Unadvise", objArray6);
- GC.KeepAlive(obj1);
- }
-
- return flag;
- }
- public void Dispose()
- {
-
- }
- }
-}
\ No newline at end of file
diff --git a/TMBackup/Sdl.Community.BackupService/Helpers/Log.cs b/TMBackup/Sdl.Community.BackupService/Helpers/Log.cs
deleted file mode 100644
index 556ee00086..0000000000
--- a/TMBackup/Sdl.Community.BackupService/Helpers/Log.cs
+++ /dev/null
@@ -1,39 +0,0 @@
-using System;
-using System.IO;
-using NLog;
-using NLog.Config;
-using NLog.Targets;
-
-namespace Sdl.Community.BackupService.Helpers
-{
- public static class Log
- {
- public static void Setup()
- {
- if (LogManager.Configuration == null)
- {
- LogManager.Configuration = new LoggingConfiguration();
- }
-
- var config = LogManager.Configuration;
-
- var logDirectoryPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Trados AppStore",
- "Trados TM Backup");
-
- Directory.CreateDirectory(logDirectoryPath);
-
- var target = new FileTarget
- {
- Name = "TradosTMBackupLogs",
- FileName = Path.Combine(logDirectoryPath, "TradosTMBackupLogs.txt"),
- Layout = "${logger}: ${longdate} ${level} ${message} ${exception}"
- };
-
- config.AddTarget(target);
- config.AddRuleForAllLevels(target, "*Sdl.Community.BackupService*");
-
- //NLog object
- LogManager.ReconfigExistingLoggers();
- }
- }
-}
diff --git a/TMBackup/Sdl.Community.BackupService/Helpers/Reflector.cs b/TMBackup/Sdl.Community.BackupService/Helpers/Reflector.cs
deleted file mode 100644
index d080304bae..0000000000
--- a/TMBackup/Sdl.Community.BackupService/Helpers/Reflector.cs
+++ /dev/null
@@ -1,115 +0,0 @@
-using System;
-using System.Reflection;
-
-namespace Sdl.Community.BackupService.Helpers
-{
- internal class Reflector
- {
- private string m_ns;
-
- private Assembly m_asmb;
-
- public Reflector(string ns) : this(ns, ns)
- {
- }
-
- public Reflector(string an, string ns)
- {
- m_ns = ns;
- m_asmb = null;
- var referencedAssemblies = Assembly.GetExecutingAssembly().GetReferencedAssemblies();
- for (int i = 0; i < (int)referencedAssemblies.Length; i++)
- {
- var assemblyName = referencedAssemblies[i];
- if (assemblyName.FullName.StartsWith(an))
- {
- m_asmb = Assembly.Load(assemblyName);
- return;
- }
- }
- }
-
- public object Call(object obj, string func, params object[] parameters)
- {
- return Call2(obj, func, parameters);
- }
-
- public object Call2(object obj, string func, object[] parameters)
- {
- return CallAs2(obj.GetType(), obj, func, parameters);
- }
-
- public object CallAs(Type type, object obj, string func, params object[] parameters)
- {
- return CallAs2(type, obj, func, parameters);
- }
-
- public object CallAs2(Type type, object obj, string func, object[] parameters)
- {
- var method = type.GetMethod(func, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
- return method.Invoke(obj, parameters);
- }
-
- public object Get(object obj, string prop)
- {
- return GetAs(obj.GetType(), obj, prop);
- }
-
- public object GetAs(Type type, object obj, string prop)
- {
- var property = type.GetProperty(prop, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
- return property.GetValue(obj, null);
- }
-
- public object GetEnum(string typeName, string name)
- {
- var type = this.GetType(typeName);
- var field = type.GetField(name);
- return field.GetValue(null);
- }
-
- public Type GetType(string typeName)
- {
- Type type = null;
- var chrArray = new char[] { '.' };
- var strArrays = typeName.Split(chrArray);
- if ((int)strArrays.Length > 0)
- {
- type = m_asmb.GetType(string.Concat(this.m_ns, ".", strArrays[0]));
- }
- for (int i = 1; i < (int)strArrays.Length; i++)
- {
- type = type.GetNestedType(strArrays[i], BindingFlags.NonPublic);
- }
- return type;
- }
-
- public object New(string name, params object[] parameters)
- {
- object obj = null;
- var type = this.GetType(name);
- var constructors = type.GetConstructors();
- var constructorInfoArray = constructors;
- int num = 0;
- Label1:
- while (num < (int)constructorInfoArray.Length)
- {
- ConstructorInfo constructorInfo = constructorInfoArray[num];
- try
- {
- obj = constructorInfo.Invoke(parameters);
- }
- catch
- {
- object obj1 = obj;
- goto Label0;
- }
- return obj;
- }
- return null;
- Label0:
- num++;
- goto Label1;
- }
- }
-}
\ No newline at end of file
diff --git a/TMBackup/Sdl.Community.BackupService/Models/BackupDetailsModel.cs b/TMBackup/Sdl.Community.BackupService/Models/BackupDetailsModel.cs
deleted file mode 100644
index 2fd1ab41fc..0000000000
--- a/TMBackup/Sdl.Community.BackupService/Models/BackupDetailsModel.cs
+++ /dev/null
@@ -1,11 +0,0 @@
-namespace Sdl.Community.BackupService.Models
-{
- public class BackupDetailsModel
- {
- public string BackupName { get; set; }
- public string TrimmedBackupName { get; set; }
- public string BackupAction { get; set; }
- public string BackupType { get; set; }
- public string BackupPattern { get; set; }
- }
-}
\ No newline at end of file
diff --git a/TMBackup/Sdl.Community.BackupService/Models/BackupModel.cs b/TMBackup/Sdl.Community.BackupService/Models/BackupModel.cs
deleted file mode 100644
index bd52f77a95..0000000000
--- a/TMBackup/Sdl.Community.BackupService/Models/BackupModel.cs
+++ /dev/null
@@ -1,13 +0,0 @@
-namespace Sdl.Community.BackupService.Models
-{
- public class BackupModel
- {
- public string BackupName { get; set; }
- public string TrimmedBackupName { get; set; }
- public string BackupFrom { get; set; }
- public string BackupTo { get; set; }
- public string Description { get; set; }
- public string BackupDetails{ get; set; }
- public string BackupTime { get; set; }
- }
-}
\ No newline at end of file
diff --git a/TMBackup/Sdl.Community.BackupService/Models/ChangeSettingsModel.cs b/TMBackup/Sdl.Community.BackupService/Models/ChangeSettingsModel.cs
deleted file mode 100644
index 76a6b7e364..0000000000
--- a/TMBackup/Sdl.Community.BackupService/Models/ChangeSettingsModel.cs
+++ /dev/null
@@ -1,10 +0,0 @@
-namespace Sdl.Community.BackupService.Models
-{
- public class ChangeSettingsModel
- {
- public string BackupName { get; set; }
- public string TrimmedBackupName { get; set; }
- public bool IsPeriodicOptionChecked { get; set; }
- public bool IsManuallyOptionChecked { get; set; }
- }
-}
\ No newline at end of file
diff --git a/TMBackup/Sdl.Community.BackupService/Models/JsonRequestModel.cs b/TMBackup/Sdl.Community.BackupService/Models/JsonRequestModel.cs
deleted file mode 100644
index befa2cfa4a..0000000000
--- a/TMBackup/Sdl.Community.BackupService/Models/JsonRequestModel.cs
+++ /dev/null
@@ -1,12 +0,0 @@
-using System.Collections.Generic;
-
-namespace Sdl.Community.BackupService.Models
-{
- public class JsonRequestModel
- {
- public List BackupDetailsModelList { get; set; }
- public List BackupModelList { get; set; }
- public List ChangeSettingsModelList { get; set; }
- public List PeriodicBackupModelList { get; set; }
- }
-}
\ No newline at end of file
diff --git a/TMBackup/Sdl.Community.BackupService/Models/PeriodicBackupModel.cs b/TMBackup/Sdl.Community.BackupService/Models/PeriodicBackupModel.cs
deleted file mode 100644
index 328f0fdd91..0000000000
--- a/TMBackup/Sdl.Community.BackupService/Models/PeriodicBackupModel.cs
+++ /dev/null
@@ -1,15 +0,0 @@
-using System;
-
-namespace Sdl.Community.BackupService.Models
-{
- public class PeriodicBackupModel
- {
- public string BackupName { get; set; }
- public string TrimmedBackupName { get; set; }
- public int BackupInterval { get; set; }
- public string TimeType { get; set; }
- public DateTime FirstBackup { get; set; }
- public string BackupAt { get; set; }
- public bool IsNowPressed { get; set; }
- }
-}
\ No newline at end of file
diff --git a/TMBackup/Sdl.Community.BackupService/Models/TaskDefinitionModel.cs b/TMBackup/Sdl.Community.BackupService/Models/TaskDefinitionModel.cs
deleted file mode 100644
index 8e8c2303f6..0000000000
--- a/TMBackup/Sdl.Community.BackupService/Models/TaskDefinitionModel.cs
+++ /dev/null
@@ -1,14 +0,0 @@
-using System;
-
-namespace Sdl.Community.BackupService.Models
-{
- public class TaskDefinitionModel
- {
- public string TaskName { get; set; }
- public string TaskRunType { get; set; }
- public string Status { get; set; }
- public DateTime LastRun { get; set; }
- public DateTime NextRun { get; set; }
- public string Interval { get; set; }
- }
-}
\ No newline at end of file
diff --git a/TMBackup/Sdl.Community.BackupService/Persistence.cs b/TMBackup/Sdl.Community.BackupService/Persistence.cs
deleted file mode 100644
index 99a8f5fc18..0000000000
--- a/TMBackup/Sdl.Community.BackupService/Persistence.cs
+++ /dev/null
@@ -1,408 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
-using System.Windows.Forms;
-using Newtonsoft.Json;
-using Sdl.Community.BackupService.Helpers;
-using Sdl.Community.BackupService.Models;
-
-namespace Sdl.Community.BackupService
-{
- public class Persistence
- {
- private readonly string _persistancePath;
-
- public Persistence()
- {
- _persistancePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData),
- $@"{Properties.Resources.RWS_AppStore}\{Properties.Resources.Plugin_Name}\{Properties.Resources.Plugin_Name}.json");
- CheckIfJsonFileExist();
- }
-
- public void SaveBackupFormInfo(List backupModelList, bool isNewTask)
- {
- if (backupModelList.Any())
- {
- CheckIfJsonFileExist();
-
- var jsonText = File.ReadAllText(_persistancePath);
- var request = JsonConvert.DeserializeObject(jsonText);
- if (request == null)
- {
- request = new JsonRequestModel();
- request.BackupModelList = backupModelList;
- WriteJsonRequestModel(request);
- }
- else
- {
- if (request.BackupModelList != null)
- {
- foreach (var backupModelItem in backupModelList)
- {
- var existingBackupModelItem = request.BackupModelList.FirstOrDefault(b => b.BackupName == backupModelItem.BackupName);
-
- if (existingBackupModelItem == null)
- {
- request.BackupModelList.Add(backupModelItem);
- WriteJsonRequestModel(request);
- }
- else
- {
- if (!isNewTask)
- {
- // update model with the updated values
- request.BackupModelList.Remove(existingBackupModelItem);
- request.BackupModelList.Add(backupModelItem);
- WriteJsonRequestModel(request);
- }
- else
- {
- // task is new and informative message is displayed
- MessageBox.Show(Constants.TaskSchedulerAlreadyExist, Constants.InformativeMessage, MessageBoxButtons.OK);
- }
- }
- }
- }
- else
- {
- request.BackupModelList = backupModelList;
- WriteJsonRequestModel(request);
- }
- }
- }
- }
-
- public void SaveDetailsFormInfo(List backupDetailsModelList, string taskName)
- {
- if (backupDetailsModelList != null)
- {
- foreach (var item in backupDetailsModelList)
- {
- item.BackupName = taskName;
- item.TrimmedBackupName = string.Concat(taskName.Where(c => !char.IsWhiteSpace(c)));
- }
-
- CheckIfJsonFileExist();
-
- var jsonText = File.ReadAllText(_persistancePath);
- var request = JsonConvert.DeserializeObject(jsonText);
- if (request == null)
- {
- request = new JsonRequestModel();
- request.BackupDetailsModelList = backupDetailsModelList;
- WriteJsonRequestModel(request);
- }
- else
- {
- if (request.BackupDetailsModelList != null)
- {
- foreach (var backupItem in backupDetailsModelList)
- {
- var existingBackupItem = request.BackupDetailsModelList.FirstOrDefault(b => b.BackupName.Equals(taskName)
- && b.BackupAction.Equals(backupItem.BackupAction)
- && b.BackupPattern.Equals(backupItem.BackupPattern)
- && b.BackupType.Equals(backupItem.BackupType));
- if (existingBackupItem == null)
- {
- request.BackupDetailsModelList.Add(backupItem);
- WriteJsonRequestModel(request);
- }
- else
- {
- MessageBox.Show(Constants.ActionAlreadyExist, Constants.InformativeMessage, MessageBoxButtons.OK);
- }
- }
- }
- else
- {
- request.BackupDetailsModelList = backupDetailsModelList;
- WriteJsonRequestModel(request);
- }
- }
- }
- }
-
- public void DeleteDetailsFromInfo(List removedBackupDetailsList, string taskName)
- {
- CheckIfJsonFileExist();
-
- var jsonText = File.ReadAllText(_persistancePath);
- var request = JsonConvert.DeserializeObject(jsonText);
- if (request.BackupDetailsModelList != null)
- {
- foreach (var item in removedBackupDetailsList)
- {
- var requestItem = request.BackupDetailsModelList.FirstOrDefault(r => r.BackupAction == item.BackupAction
- && r.BackupType == item.BackupType
- && r.BackupPattern == item.BackupPattern
- && r.BackupName.Equals(taskName));
-
- if (requestItem != null)
- {
- request.BackupDetailsModelList.Remove(requestItem);
- }
- }
- WriteJsonRequestModel(request);
- }
- }
-
- public void SaveChangeSettings(List changeSettingsModelList, string taskName)
- {
- if (changeSettingsModelList != null)
- {
- CheckIfJsonFileExist();
-
- var jsonText = File.ReadAllText(_persistancePath);
- var request = JsonConvert.DeserializeObject(jsonText);
- if (request == null)
- {
- request = new JsonRequestModel();
- request.ChangeSettingsModelList = changeSettingsModelList;
- WriteJsonRequestModel(request);
- }
- else
- {
- if (request.ChangeSettingsModelList != null && request.ChangeSettingsModelList.Count > 0 && request.ChangeSettingsModelList[0] != null)
- {
- foreach (var changeSettingModelItem in changeSettingsModelList)
- {
- var existingChangeSettingsModelItem = request.ChangeSettingsModelList.FirstOrDefault(b => b.BackupName == changeSettingModelItem.BackupName);
-
- if (existingChangeSettingsModelItem == null)
- {
- request.ChangeSettingsModelList.Add(changeSettingModelItem);
- WriteJsonRequestModel(request);
- }
- else
- {
- // Update json request model with the updated values
- request.ChangeSettingsModelList.Remove(existingChangeSettingsModelItem);
- request.ChangeSettingsModelList.Add(changeSettingModelItem);
- WriteJsonRequestModel(request);
- }
- }
- }
- else
- {
- request.ChangeSettingsModelList = changeSettingsModelList;
- WriteJsonRequestModel(request);
- }
- }
- }
- }
-
- public void SavePeriodicBackupInfo(List periodicBackupModelList, string taskName)
- {
- if (periodicBackupModelList != null)
- {
- CheckIfJsonFileExist();
-
- var jsonText = File.ReadAllText(_persistancePath);
- var request = JsonConvert.DeserializeObject(jsonText);
- if (request == null)
- {
- request = new JsonRequestModel();
- request.PeriodicBackupModelList = periodicBackupModelList;
- WriteJsonRequestModel(request);
- }
- else
- {
- if (request.PeriodicBackupModelList != null && request.PeriodicBackupModelList.Count > 0 && request.PeriodicBackupModelList[0] != null)
- {
- foreach (var periodicBackupModelItem in periodicBackupModelList)
- {
- var existingperiodicBackupModelItem = request.PeriodicBackupModelList.FirstOrDefault(b => b.BackupName == periodicBackupModelItem.BackupName);
-
- if (existingperiodicBackupModelItem == null)
- {
- request.PeriodicBackupModelList.Add(periodicBackupModelItem);
- WriteJsonRequestModel(request);
- }
- else
- {
- // Update json request model with the updated values
- request.PeriodicBackupModelList.Remove(existingperiodicBackupModelItem);
- request.PeriodicBackupModelList.Add(periodicBackupModelItem);
- WriteJsonRequestModel(request);
- }
- }
- }
- else
- {
- request.PeriodicBackupModelList = periodicBackupModelList;
- WriteJsonRequestModel(request);
- }
- }
- }
- }
-
- public JsonRequestModel ReadFormInformation()
- {
- if (File.Exists(_persistancePath))
- {
- var jsonText = File.ReadAllText(_persistancePath);
- var request = JsonConvert.DeserializeObject(jsonText);
-
- return request;
- }
- return new JsonRequestModel();
- }
-
- public void WriteJsonRequestModel(JsonRequestModel request)
- {
- var json = JsonConvert.SerializeObject(request);
- File.WriteAllText(_persistancePath, json);
- }
-
- public void RemoveDataFromJson(string backupName)
- {
- if (File.Exists(_persistancePath))
- {
- var jsonText = File.ReadAllText(_persistancePath);
- var request = JsonConvert.DeserializeObject(jsonText);
-
- if (request != null)
- {
- if (request.BackupDetailsModelList != null)
- {
- foreach (var backupDetailsModel in request.BackupDetailsModelList)
- {
- if (backupDetailsModel.BackupName.Equals(backupName))
- {
- request.BackupDetailsModelList.Remove(backupDetailsModel);
- break;
- }
- }
- }
- if (request.BackupModelList != null)
- {
- foreach (var backupModel in request.BackupModelList)
- {
- if (backupModel.BackupName.Equals(backupName))
- {
- request.BackupModelList.Remove(backupModel);
- break;
- }
- }
- }
- if (request.ChangeSettingsModelList != null)
- {
- foreach (var changeSettingModel in request.ChangeSettingsModelList)
- {
- if (changeSettingModel.BackupName.Equals(backupName))
- {
- request.ChangeSettingsModelList.Remove(changeSettingModel);
- break;
- }
- }
- }
- if (request.PeriodicBackupModelList != null)
- {
- foreach (var periodicModel in request.PeriodicBackupModelList)
- {
- if (periodicModel.BackupName.Equals(backupName))
- {
- request.PeriodicBackupModelList.Remove(periodicModel);
- break;
- }
- }
- }
- WriteJsonRequestModel(request);
- }
- }
- }
-
- public void SaveBackupModel(BackupModel backupModel)
- {
- var jsonText = File.ReadAllText(_persistancePath);
- var request = JsonConvert.DeserializeObject(jsonText);
-
- if (backupModel != null && request.BackupModelList != null)
- {
- foreach (var item in request.BackupModelList)
- {
- if (item.BackupName.Equals(backupModel.BackupName))
- {
- request.BackupModelList.Remove(item);
- break;
- }
- }
- request.BackupModelList.Add(backupModel);
- WriteJsonRequestModel(request);
- }
- }
-
- public void SaveDetailModel(BackupDetailsModel detailsModel)
- {
- var jsonText = File.ReadAllText(_persistancePath);
- var request = JsonConvert.DeserializeObject(jsonText);
- if (detailsModel != null && request.BackupDetailsModelList != null)
- {
- foreach (var item in request.BackupDetailsModelList)
- {
- if (item.BackupName.Equals(detailsModel.BackupName))
- {
- request.BackupDetailsModelList.Remove(item);
- break;
- }
- }
- request.BackupDetailsModelList.Add(detailsModel);
- WriteJsonRequestModel(request);
- }
- }
-
- public void SavePeriodicModel(PeriodicBackupModel periodicModel)
- {
- var jsonText = File.ReadAllText(_persistancePath);
- var request = JsonConvert.DeserializeObject(jsonText);
-
- if (periodicModel != null && request.PeriodicBackupModelList != null)
- {
- foreach (var item in request.PeriodicBackupModelList)
- {
- if (item.BackupName.Equals(periodicModel.BackupName))
- {
- request.PeriodicBackupModelList.Remove(item);
- break;
- }
- }
- request.PeriodicBackupModelList.Add(periodicModel);
- WriteJsonRequestModel(request);
- }
- }
-
- public void SaveChangeModel(ChangeSettingsModel changeModel)
- {
- var jsonText = File.ReadAllText(_persistancePath);
- var request = JsonConvert.DeserializeObject(jsonText);
-
- if (changeModel != null && request.ChangeSettingsModelList != null)
- {
- foreach (var item in request.ChangeSettingsModelList)
- {
- if (item.BackupName.Equals(changeModel.BackupName))
- {
- request.ChangeSettingsModelList.Remove(item);
- break;
- }
- }
- request.ChangeSettingsModelList.Add(changeModel);
- WriteJsonRequestModel(request);
- }
- }
-
- private void CheckIfJsonFileExist()
- {
- if (!File.Exists(_persistancePath))
- {
- var directory = Path.GetDirectoryName(_persistancePath);
- if (directory != null && !Directory.Exists(directory))
- {
- Directory.CreateDirectory(directory);
- }
- File.WriteAllText(_persistancePath, string.Empty);
- }
- }
- }
-}
\ No newline at end of file
diff --git a/TMBackup/Sdl.Community.BackupService/Properties/AssemblyInfo.cs b/TMBackup/Sdl.Community.BackupService/Properties/AssemblyInfo.cs
deleted file mode 100644
index acd7acb6ad..0000000000
--- a/TMBackup/Sdl.Community.BackupService/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,36 +0,0 @@
-using System.Reflection;
-using System.Runtime.CompilerServices;
-using System.Runtime.InteropServices;
-
-// General Information about an assembly is controlled through the following
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-[assembly: AssemblyTitle("Sdl.Community.BackupService")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyProduct("Sdl.Community.BackupService")]
-[assembly: AssemblyCompany("SDL Limited as part of the RWS Holdings Plc group of companies")]
-[assembly: AssemblyCopyright("Copyright © 2011 - 2022 SDL Limited as part of the RWS Holdings Plc group of companies (\"RWS Group\").")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-// Setting ComVisible to false makes the types in this assembly not visible
-// to COM components. If you need to access a type in this assembly from
-// COM, set the ComVisible attribute to true on that type.
-[assembly: ComVisible(false)]
-
-// The following GUID is for the ID of the typelib if this project is exposed to COM
-[assembly: Guid("8c9c20fa-0a8c-4293-9dfb-5d8165ccef28")]
-
-// Version information for an assembly consists of the following four values:
-//
-// Major Version
-// Minor Version
-// Build Number
-// Revision
-//
-// You can specify all the values or you can default the Build and Revision Numbers
-// by using the '*' as shown below:
-// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("5.0.0.0")]
-[assembly: AssemblyFileVersion("5.0.0.3")]
diff --git a/TMBackup/Sdl.Community.BackupService/Properties/Resources.Designer.cs b/TMBackup/Sdl.Community.BackupService/Properties/Resources.Designer.cs
deleted file mode 100644
index 80843c7dde..0000000000
--- a/TMBackup/Sdl.Community.BackupService/Properties/Resources.Designer.cs
+++ /dev/null
@@ -1,81 +0,0 @@
-//------------------------------------------------------------------------------
-//
-// This code was generated by a tool.
-// Runtime Version:4.0.30319.42000
-//
-// Changes to this file may cause incorrect behavior and will be lost if
-// the code is regenerated.
-//
-//------------------------------------------------------------------------------
-
-namespace Sdl.Community.BackupService.Properties {
- using System;
-
-
- ///
- /// A strongly-typed resource class, for looking up localized strings, etc.
- ///
- // This class was auto-generated by the StronglyTypedResourceBuilder
- // class via a tool like ResGen or Visual Studio.
- // To add or remove a member, edit your .ResX file then rerun ResGen
- // with the /str option, or rebuild your VS project.
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
- internal class Resources {
-
- private static global::System.Resources.ResourceManager resourceMan;
-
- private static global::System.Globalization.CultureInfo resourceCulture;
-
- [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
- internal Resources() {
- }
-
- ///
- /// Returns the cached ResourceManager instance used by this class.
- ///
- [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
- internal static global::System.Resources.ResourceManager ResourceManager {
- get {
- if (object.ReferenceEquals(resourceMan, null)) {
- global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Sdl.Community.BackupService.Properties.Resources", typeof(Resources).Assembly);
- resourceMan = temp;
- }
- return resourceMan;
- }
- }
-
- ///
- /// Overrides the current thread's CurrentUICulture property for all
- /// resource lookups using this strongly typed resource class.
- ///
- [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
- internal static global::System.Globalization.CultureInfo Culture {
- get {
- return resourceCulture;
- }
- set {
- resourceCulture = value;
- }
- }
-
- ///
- /// Looks up a localized string similar to Trados TM Backup.
- ///
- internal static string Plugin_Name {
- get {
- return ResourceManager.GetString("Plugin_Name", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Trados AppStore.
- ///
- internal static string RWS_AppStore {
- get {
- return ResourceManager.GetString("RWS_AppStore", resourceCulture);
- }
- }
- }
-}
diff --git a/TMBackup/Sdl.Community.BackupService/Properties/Resources.resx b/TMBackup/Sdl.Community.BackupService/Properties/Resources.resx
deleted file mode 100644
index 0ea1e2efb1..0000000000
--- a/TMBackup/Sdl.Community.BackupService/Properties/Resources.resx
+++ /dev/null
@@ -1,126 +0,0 @@
-
-
-
-
-
-
-
-
-
-