diff --git a/cordova-plugin-hms-mltext/LICENSE b/cordova-plugin-hms-mltext/LICENSE
new file mode 100644
index 00000000..490b5c70
--- /dev/null
+++ b/cordova-plugin-hms-mltext/LICENSE
@@ -0,0 +1,53 @@
+Apache License
+
+Version 2.0, January 2004
+
+http://www.apache.org/licenses/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
+
+"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
+
+"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
+
+"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
+
+"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
+
+"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
+
+"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
+
+"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
+
+2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
+
+4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+
+You must give any other recipients of the Work or Derivative Works a copy of this License; and
+You must cause any modified files to carry prominent notices stating that You changed the files; and
+You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
+If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.
+
+You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
+
+8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
\ No newline at end of file
diff --git a/cordova-plugin-hms-mltext/README.md b/cordova-plugin-hms-mltext/README.md
new file mode 100644
index 00000000..26eb5fc7
--- /dev/null
+++ b/cordova-plugin-hms-mltext/README.md
@@ -0,0 +1,72 @@
+
+
Cordova HMS ML Text
+
+
+
+
+
+
+
+----
+
+This plugin enables communication between Huawei ML SDK and Cordova platform. It exposes all
+functionality provided by Huawei ML SDK.
+
+[> Learn More](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/introduction-0000001050765773?ha_source=hms1)
+
+## Installation
+
+### Cordova
+
+```bash
+$ cordova plugin add @hmscore/cordova-plugin-hms-mltext
+```
+
+### Ionic with Cordova Runtime
+
+```bash
+$ ionic cordova plugin add @hmscore/cordova-plugin-hms-mltext
+```
+
+### Ionic with Capacitor Runtime
+
+```bash
+$ npm install @hmscore/cordova-plugin-hms-mltext
+```
+
+### Ionic Native Wrappers
+
+```bash
+$ npm install @hmscore/ionic-native-hms-mltext
+```
+
+## Documentation
+
+- [Quick Start](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/preparedevenv-0000001051005805?ha_source=hms1)
+- [Reference](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-References/introduction-0000001051088632?ha_source=hms1)
+
+### Additional Topics
+
+- [Text Recognition](hhttps://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/text-recognition-0000001051005809?ha_source=hms1)
+- [Face Detection](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/face-detection-0000001051005815?ha_source=hms1)
+
+## Questions or Issues
+
+If you have questions about how to use HMS samples, try the following options:
+
+- [Stack Overflow](https://stackoverflow.com/questions/tagged/huawei-mobile-services) is the best
+ place for any programming questions. Be sure to tag your question with `huawei-mobile-services`.
+- [GitHub](https://github.com/HMS-Core/hms-cordova-plugin) is the official repository for these
+ plugins, You can open an issue or submit your ideas.
+- [Huawei Developer Forum](https://forums.developer.huawei.com/forumPortal/en/home?fid=0101187876626530001&ha_source=hms1)
+ HMS Core Module is great for general questions, or seeking recommendations and opinions.
+- [Huawei Developer Docs](https://developer.huawei.com/consumer/en/doc/overview/HMS-Core-Plugin?ha_source=hms1)
+ is place to official documentation for all HMS Core Kits, you can find detailed documentations in
+ there.
+
+If you run into a bug in our samples, please submit an issue to
+the [GitHub repository](https://github.com/HMS-Core/hms-cordova-plugin).
+
+## License
+
+Huawei ML Text Kit Cordova Plugin is licensed under the [Apache 2.0 license](LICENSE).
diff --git a/cordova-plugin-hms-mltext/example/cordova/.docs/images/api_key.png b/cordova-plugin-hms-mltext/example/cordova/.docs/images/api_key.png
new file mode 100644
index 00000000..1654d0ce
Binary files /dev/null and b/cordova-plugin-hms-mltext/example/cordova/.docs/images/api_key.png differ
diff --git a/cordova-plugin-hms-mltext/example/cordova/.docs/images/config_xml.png b/cordova-plugin-hms-mltext/example/cordova/.docs/images/config_xml.png
new file mode 100644
index 00000000..2bc11566
Binary files /dev/null and b/cordova-plugin-hms-mltext/example/cordova/.docs/images/config_xml.png differ
diff --git a/cordova-plugin-hms-mltext/example/cordova/.docs/images/enablemlkit.png b/cordova-plugin-hms-mltext/example/cordova/.docs/images/enablemlkit.png
new file mode 100644
index 00000000..0b2950dc
Binary files /dev/null and b/cordova-plugin-hms-mltext/example/cordova/.docs/images/enablemlkit.png differ
diff --git a/cordova-plugin-hms-mltext/example/cordova/LICENSE b/cordova-plugin-hms-mltext/example/cordova/LICENSE
new file mode 100644
index 00000000..490b5c70
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/cordova/LICENSE
@@ -0,0 +1,53 @@
+Apache License
+
+Version 2.0, January 2004
+
+http://www.apache.org/licenses/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
+
+"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
+
+"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
+
+"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
+
+"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
+
+"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
+
+"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
+
+"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
+
+2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
+
+4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+
+You must give any other recipients of the Work or Derivative Works a copy of this License; and
+You must cause any modified files to carry prominent notices stating that You changed the files; and
+You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
+If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.
+
+You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
+
+8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
\ No newline at end of file
diff --git a/cordova-plugin-hms-mltext/example/cordova/OpenSourceSoftwareNotice.html b/cordova-plugin-hms-mltext/example/cordova/OpenSourceSoftwareNotice.html
new file mode 100644
index 00000000..822f61d6
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/cordova/OpenSourceSoftwareNotice.html
@@ -0,0 +1,61 @@
+
OPEN SOURCE SOFTWARE NOTICE
+
+
+
+
Please note we provide an open source software notice along with this product and/or this product firmware (in the following just “this product”). The open source software licenses are granted by the respective right holders. And the open source licenses prevail all other license information with regard to the respective open source software contained in the product, including but not limited to End User Software Licensing Agreement. This notice is provided on behalf of Huawei Technologies Co. Ltd. and any of its local subsidiaries which may have provided this product to you in your local country.
+
+
+
+
Warranty Disclaimer
+
+
THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS.
+
+
+
+
Copyright Notice and License Texts
+
+
Software: cordova-plugin-chooser 1.3.2
+
+
Copyright notice:
+
+
Copyright (c) 2020, Cyph, Inc., Don Coleman, Ibby Hadeed, and Impossibles
+
+
+
+
+
+
License:The Apache License
+
+
Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+
+
+
+
Written Offer
+
+
This product contains software whose rights holders license it on the terms of the GNU General Public License, version 2 (GPLv2) and/or other open source software licenses. We will provide you and any third party with the source code of the software licensed under an open source software license if you send us a written request by mail or email to the following addresses:
detailing the name of the product and the firmware version for which you need the source code and indicating how we can contact you.
+
+
Please note you need to make a payment before you obtain the complete Corresponding Source Code from us. For how much you will pay and how we will deliver the complete Corresponding Source Code to you, we will further discuss it by mail or email.
+
+
This offer is valid to anyone in receipt of this information.
+
+
+
+
THIS OFFER IS VALID FOR THREE YEARS FROM THE MOMENT WE DISTRIBUTED THE PRODUCT OR FIRMWARE .
+
+
diff --git a/cordova-plugin-hms-mltext/example/cordova/README.md b/cordova-plugin-hms-mltext/example/cordova/README.md
new file mode 100644
index 00000000..24f55f84
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/cordova/README.md
@@ -0,0 +1,154 @@
+# HMS ML Text Cordova Demo
+
+## Contents
+
+- [1. Introduction](#1-introduction)
+- [2. Installation Guide](#2-installation-guide)
+ - [2.1. Creating a Project in AppGallery Connect](#21-creating-a-project-in-appgallery-connect)
+ - [2.2. Configuring the Signing Certificate Fingerprint and Obtaining agconnect-services.json](#22-configuring-the-signing-certificate-fingerprint-and-obtaining-agconnect-servicesjson)
+ - [2.3. Cordova](#23-cordova)
+- [3. Configuration and Description](#3-configuration-and-description)
+- [4. Questions or Issues](#4-questions-or-issues)
+- [5. Licensing and Terms](#5-licensing-and-terms)
+
+---
+
+## 1. Introduction
+
+This demo application demonstrates the usage of the HMS ML Text Cordova plugin.
+
+---
+
+## 2. Installation Guide
+
+Before you get started, you must register as a HUAWEI Developer and complete identity verification on the [HUAWEI Developer](https://developer.huawei.com/consumer/en/?ha_source=hms1) website. For details, please refer to [Register a HUAWEI ID](https://developer.huawei.com/consumer/en/doc/10104?ha_source=hms1).
+
+### 2.1. Creating a Project in AppGallery Connect
+
+Creating an app in AppGallery Connect is required in order to communicate with the Huawei services. To create an app, perform the following steps:
+
+1. Sign in to [AppGallery Connect](https://developer.huawei.com/consumer/en/service/josp/agc/index.html?ha_source=hms1) and select **My projects**.
+2. Select your project from the project list or create a new one by clicking the **Add Project** button.
+3. Go to **Project Setting** > **General information**, and click **Add app**.
+ - If an app exists in the project and you need to add a new one, expand the app selection area on the top of the page and click **Add app**.
+4. On the **Add app** page, enter the app information, and click **OK**.
+
+### 2.2. Configuring the Signing Certificate Fingerprint and Obtaining agconnect-services.json
+
+A signing certificate fingerprint is used to verify the authenticity of an app when it attempts to access an HMS Core (APK) through the HMS SDK. Before using the HMS Core (APK), you must locally generate a signing certificate fingerprint and configure it in the **AppGallery Connect**. You can refer to 3rd and 4th steps of [Generating a Signing Certificate](https://developer.huawei.com/consumer/en/codelab/HMSPreparation/index.html?ha_source=hms1#2) Codelab tutorial for the certificate generation. Perform the following steps after you have generated the certificate.
+
+1. Sign in to [AppGallery Connect](https://developer.huawei.com/consumer/en/service/josp/agc/index.html?ha_source=hms1) and select your project from **My Projects**. Then go to **Project Setting** > **General information**. In the **App information** field, click the icon next to SHA-256 certificate fingerprint, and enter the obtained **SHA-256 certificate fingerprint**.
+2. After completing the configuration, click **OK** to save the changes. (Check mark icon)
+3. In the same page, click **agconnect-services.json** button to download the configuration file.
+
+### 2.3. Cordova
+
+1. Install Cordova CLI if haven't done before.
+
+ ```bash
+ npm install -g cordova
+ ```
+
+2. Open the demo project's root folder.
+
+3. Update the widget **`id`** property which is specified in the **`config.xml`** file. It must be same with **client > package_name** value of the **`agconnect-services.json`** file.
+
+4. Add the **Android platform** to the project.
+
+ ```bash
+ cordova platform add android
+ ```
+
+5. Install `HMS ML Text plugin` to the project.
+
+ ```bash
+ cordova plugin add @hmscore/cordova-plugin-hms-mltext
+ ```
+
+6. Copy **`agconnect-services.json`** file to **`/platforms/android/app`** directory.
+
+7. Add **`keystore(.jks)`** and **`build.json`** files to your project's root directory.
+
+ - You can refer to 3rd and 4th steps of [Generating a Signing Certificate](https://developer.huawei.com/consumer/en/codelab/HMSPreparation/index.html?ha_source=hms1#2) Codelab tutorial page for generating keystore file.
+
+ - Fill **`build.json`** file according to your keystore. For example:
+
+ ```json
+ {
+ "android": {
+ "debug": {
+ "keystore": ".jks",
+ "storePassword": "",
+ "alias": "",
+ "password": ""
+ },
+ "release": {
+ "keystore": ".jks",
+ "storePassword": "",
+ "alias": "",
+ "password": ""
+ }
+ }
+ }
+ ```
+
+8. Update the API key which is specified in 'www/js/index.js' file. It should be same as the API key which is defined in agconnect-services.json file.
+
+ >![api_key](.docs/images/api_key.png)
+
+9. Run the app.
+
+ ```bash
+ cordova run android --device
+ ```
+
+---
+
+## 3. Configuration and Description
+
+### Configuring Obfuscation Scripts
+
+Before building the APK, configure the obfuscation configuration file to prevent the HMS Core SDK from being obfuscated.
+
+**NOTE**: This step is required only if you want to minify and obfuscate your app. By default obfuscation is disabled in Cordova and Ionic apps.
+
+The obfuscation is done by **ProGuard.** By default, in Cordova and Ionic apps ProGuard is disabled. Even though ProGuard is not available, ProGuard support can be added through 3rd party ProGuard plugins. If ProGuard is enabled in your project, the Huawei ML plugin's ProGuard rules need to be added to your project. These rules are as follows:
+
+```text
+-ignorewarnings
+-keepattributes *Annotation*
+-keepattributes Exceptions
+-keepattributes InnerClasses
+-keepattributes Signature
+-keep class com.huawei.hianalytics.**{*;}
+-keep class com.huawei.updatesdk.**{*;}
+-keep class com.huawei.hms.**{*;}
+-dontwarn com.huawei.**
+-keep class com.huawei.** {*;}
+-dontwarn org.slf4j.**
+-keep class org.slf4j.** {*;}
+-dontwarn org.springframework.**
+-keep class org.springframework.** {*;}
+-dontwarn com.fasterxml.jackson.**
+-keep class com.fasterxml.jackson.** {*;}
+-repackageclasses
+```
+
+---
+
+## 4. Questions or Issues
+
+If you have questions about how to use HMS samples, try the following options:
+
+- [Stack Overflow](https://stackoverflow.com/questions/tagged/huawei-mobile-services) is the best place for any programming questions. Be sure to tag your question with **`huawei-mobile-services`**.
+- [GitHub](https://github.com/HMS-Core/hms-cordova-plugin) is the official repository for these plugins, You can open an issue or submit your ideas.
+- [Huawei Developer Forum](https://forums.developer.huawei.com/forumPortal/en/home?fid=0101187876626530001&ha_source=hms1) HMS Core Module is great for general questions, or seeking recommendations and opinions.
+- [Huawei Developer Docs](https://developer.huawei.com/consumer/en/doc/overview/HMS-Core-Plugin?ha_source=hms1) is place to official documentation for all HMS Core Kits, you can find detailed documentations in there.
+
+If you run into a bug in our samples, please submit an issue to the [GitHub repository](https://github.com/HMS-Core/hms-cordova-plugin).
+
+---
+
+## 5. Licensing and Terms
+
+Huawei ML Kit Cordova Plugin is licensed under the [Apache 2.0 license](LICENSE).
diff --git a/cordova-plugin-hms-mltext/example/cordova/config.xml b/cordova-plugin-hms-mltext/example/cordova/config.xml
new file mode 100644
index 00000000..9b384cab
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/cordova/config.xml
@@ -0,0 +1,24 @@
+
+
+
+ cordova-hms-mltext-demo
+
+
+ A sample Apache Cordova application that demonstarates the usage of cordova-plugin-hms-mltext.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/cordova-plugin-hms-mltext/example/cordova/package.json b/cordova-plugin-hms-mltext/example/cordova/package.json
new file mode 100644
index 00000000..a8af90dd
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/cordova/package.json
@@ -0,0 +1,39 @@
+{
+ "name": "cordova-hms-mltext-demo",
+ "displayName": "HMSMLDemo",
+ "version": "3.12.0-300",
+ "description": "A sample Apache Cordova application that demonstrates the usage of cordova-plugin-hms-mltext",
+ "license": "Apache-2.0",
+ "licenseFilename": "LICENSE",
+ "readmeFilename": "README.md",
+ "main": "./www/js/index.js",
+ "keywords": [
+ "cordova",
+ "ecosystem:cordova",
+ "ml",
+ "hms-ml",
+ "huawei-ml",
+ "hms",
+ "huawei"
+ ],
+ "devDependencies": {
+ "cordova-plugin-chooser": "1.3.2"
+ },
+ "cordova": {
+ "plugins": {
+ "cordova-plugin-chooser": {}
+ },
+ "platforms": [
+ "android"
+ ]
+ },
+ "files": [
+ ".docs",
+ "www",
+ "config.xml",
+ "LICENSE",
+ "package.json",
+ "README.md",
+ "OpenSourceSoftwareNotice.html"
+ ]
+}
diff --git a/cordova-plugin-hms-mltext/example/cordova/www/bcr.html b/cordova-plugin-hms-mltext/example/cordova/www/bcr.html
new file mode 100644
index 00000000..7b6a2065
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/cordova/www/bcr.html
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Cordova MLKit Demo
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/cordova-plugin-hms-mltext/example/cordova/www/css/index.css b/cordova-plugin-hms-mltext/example/cordova/www/css/index.css
new file mode 100644
index 00000000..c3b6db0e
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/cordova/www/css/index.css
@@ -0,0 +1,327 @@
+/*
+ * Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License")
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+* {
+ -webkit-tap-highlight-color: rgba(0,0,0,0); /* make transparent link selection, adjust last value opacity 0 to 1.0 */
+}
+
+body {
+ -webkit-touch-callout: none; /* prevent callout to copy image, etc when tap to hold */
+ -webkit-text-size-adjust: none; /* prevent webkit from resizing text to fit */
+ -webkit-user-select: none; /* prevent copy paste, to allow, change 'none' to 'text' */
+ background-color:#ffffff;
+ background-image:linear-gradient(top, #A7A7A7 0%, #E4E4E4 51%);
+ font-family: system-ui, -apple-system, -apple-system-font, 'Segoe UI', 'Roboto', sans-serif;
+ font-size:12px;
+ height:100vh;
+ margin:0px;
+ padding:0px;
+ /* Padding to avoid the "unsafe" areas behind notches in the screen */
+ padding: env(safe-area-inset-top, 0px) env(safe-area-inset-right, 0px) env(safe-area-inset-bottom, 0px) env(safe-area-inset-right, 0px);
+ text-transform:uppercase;
+ width:100%;
+}
+
+/* Portrait layout (default) */
+.app {
+ background:url(../img/logo.png) no-repeat center top; /* 170px x 200px */
+ position:absolute; /* position in the center of the screen */
+ left:50%;
+ top:50%;
+ height:50px; /* text area height */
+ width:225px; /* text area width */
+ text-align:center;
+ padding:180px 0px 0px 0px; /* image height is 200px (bottom 20px are overlapped with text) */
+ margin:-115px 0px 0px -112px; /* offset vertical: half of image height and text area height */
+ /* offset horizontal: half of text area width */
+}
+
+/* Landscape layout (with min-width) */
+@media screen and (min-aspect-ratio: 1/1) and (min-width:400px) {
+ .app {
+ background-position:left center;
+ padding:75px 0px 75px 170px; /* padding-top + padding-bottom + text area = image height */
+ margin:-90px 0px 0px -198px; /* offset vertical: half of image height */
+ /* offset horizontal: half of image width and text area width */
+ }
+}
+
+h1 {
+ font-size:24px;
+ font-weight:normal;
+ margin:0px;
+ overflow:visible;
+ padding:0px;
+ text-align:center;
+}
+
+.event {
+ border-radius:4px;
+ -webkit-border-radius:4px;
+ color:#FFFFFF;
+ font-size:12px;
+ margin:0px 30px;
+ padding:2px 0px;
+}
+
+.event.listening {
+ background-color:#333333;
+ display:block;
+}
+
+.event.received {
+ background-color:#f7ded8;
+ display:none;
+}
+
+@keyframes fade {
+ from { opacity: 1.0; }
+ 50% { opacity: 0.4; }
+ to { opacity: 1.0; }
+}
+
+@-webkit-keyframes fade {
+ from { opacity: 1.0; }
+ 50% { opacity: 0.4; }
+ to { opacity: 1.0; }
+}
+
+.blink {
+ animation:fade 3000ms infinite;
+ -webkit-animation:fade 3000ms infinite;
+}
+
+/*Index.html buttons and div css */
+.clear {clear: both; }
+
+.textAlignDiv { text-align: center; }
+
+.textProp { font-size: 18px; }
+
+.selectedTextProp {
+ font-size: 14px;
+ font-weight: bold;
+ margin-top: 3px;
+}
+.twoDivProp {
+ width: 40%;
+ display: inline-block;
+}
+.main_div {
+ width: 100%;
+ margin-right: auto;
+ margin-left: auto;
+ background-color: gray;
+ margin-top: 3px;
+}
+.div {
+ display: inline-block;
+ width: 47%;
+ color: #FFF;
+}
+.threeDivProp {
+ width: 30%;
+}
+.fourDivProp{
+ width: 24%;
+}
+.btn {
+ margin-top: 5px;
+ display: block;
+ border: 1px;
+ border-color: #b01228;
+ background-color: whitesmoke;
+ color: #c4142c;
+ width: 100%;
+ height: 50px;
+ border: none;
+}
+
+.segmentImgCss {
+ height: 250px;
+ width: 100%;
+}
+
+.mllogo {
+ text-align: center;
+ margin-top: 10px;
+ margin-bottom: 15px;
+}
+
+.imgDiv {
+ margin-bottom: 10px;
+}
+
+.mllogoText {
+ font-weight: bold;
+ margin-top: 20px;
+}
+
+.servicesDiv {
+ margin-left: 20px;
+ height: 80px;
+ width: 90px;
+ border: 1px solid gray;
+ border-radius: 5px;
+ position: relative;
+ background-color: #f9e8ea;
+}
+
+.servicesImg {
+ height: 50px;
+ width: 70px;
+ position: absolute;
+ left: 10px;
+ top: 5px;
+ margin: auto;
+ text-align: center;
+}
+
+.servicesImgText {
+ height: 50px;
+ width: 70px;
+ position: absolute;
+ left: 10px;
+ top: 5px;
+ margin: auto;
+ text-align: center;
+ color:black;
+}
+
+.newPageHref {
+ float: left;
+ margin-top: 15px;
+}
+
+.divText {
+ border: 2px solid black;
+ padding: 5px;
+ margin: 5px;
+}
+
+input[type=text] {
+ width: 100%;
+ font-size: 20px;
+}
+
+.switch {
+ position: relative;
+ display: inline-block;
+ width: 60px;
+ height: 34px;
+ color:#b01228;
+}
+
+.switch input {
+ opacity: 0;
+ width: 0;
+ height: 0;
+}
+
+.slider {
+ position: absolute;
+ cursor: pointer;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ background-color: #ccc;
+ -webkit-transition: .4s;
+ transition: .4s;
+}
+
+.slider:before {
+ position: absolute;
+ content: "";
+ height: 26px;
+ width: 26px;
+ left: 4px;
+ bottom: 4px;
+ background-color: white;
+ -webkit-transition: .4s;
+ transition: .4s;
+}
+
+input:checked+.slider {
+ background-color: #c4142c;
+}
+
+input:focus+.slider {
+ box-shadow: 0 0 1px #2196F3;
+}
+
+input:checked+.slider:before {
+ -webkit-transform: translateX(26px);
+ -ms-transform: translateX(26px);
+ transform: translateX(26px);
+}
+
+/* Rounded sliders */
+.slider.round {
+ border-radius: 34px;
+}
+
+.slider.round:before {
+ border-radius: 50%;
+}
+
+.mllogo {
+ text-align: center;
+ margin-top: 20px;
+ margin-bottom: 30px;
+}
+
+.imgDiv {
+ margin-bottom: 10px;
+}
+
+.mllogoText {
+ font-weight: bold;
+ margin-top: 20px;
+}
+
+.servicesDiv {
+ margin-left: 20px;
+ height: 80px;
+ width: 90px;
+ border: 1px solid gray;
+ border-radius: 5px;
+ position: relative;
+ background-color: honeydew;
+}
+
+.servicesImg {
+ height: 50px;
+ width: 70px;
+ position: absolute;
+ left: 10px;
+ top: 5px;
+ margin: auto;
+ text-align: center;
+}
+
+.servicesImgText {
+ position: absolute;
+ left: 30px;
+ bottom: 1px;
+}
+
+.newPageHref {
+ float: left;
+ margin-top: 15px;
+}
+.textViewAFT{
+ width: 200px;
+}
\ No newline at end of file
diff --git a/cordova-plugin-hms-mltext/example/cordova/www/doc.html b/cordova-plugin-hms-mltext/example/cordova/www/doc.html
new file mode 100644
index 00000000..f10261eb
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/cordova/www/doc.html
@@ -0,0 +1,62 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Cordova MLKit Demo
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/cordova-plugin-hms-mltext/example/cordova/www/formrecog.html b/cordova-plugin-hms-mltext/example/cordova/www/formrecog.html
new file mode 100644
index 00000000..c8e717a7
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/cordova/www/formrecog.html
@@ -0,0 +1,59 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Cordova MLKit Demo
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/cordova-plugin-hms-mltext/example/cordova/www/gcr.html b/cordova-plugin-hms-mltext/example/cordova/www/gcr.html
new file mode 100644
index 00000000..a6b49506
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/cordova/www/gcr.html
@@ -0,0 +1,55 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Cordova MLKit Demo
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/cordova-plugin-hms-mltext/example/cordova/www/icrcn.html b/cordova-plugin-hms-mltext/example/cordova/www/icrcn.html
new file mode 100644
index 00000000..3636d858
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/cordova/www/icrcn.html
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Cordova MLKit Demo
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/cordova-plugin-hms-mltext/example/cordova/www/icrvn.html b/cordova-plugin-hms-mltext/example/cordova/www/icrvn.html
new file mode 100644
index 00000000..a59031af
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/cordova/www/icrvn.html
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Cordova MLKit Demo
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/cordova-plugin-hms-mltext/example/cordova/www/img/icon_record.png b/cordova-plugin-hms-mltext/example/cordova/www/img/icon_record.png
new file mode 100644
index 00000000..cb1f03e6
Binary files /dev/null and b/cordova-plugin-hms-mltext/example/cordova/www/img/icon_record.png differ
diff --git a/cordova-plugin-hms-mltext/example/cordova/www/img/logo.png b/cordova-plugin-hms-mltext/example/cordova/www/img/logo.png
new file mode 100644
index 00000000..be3964eb
Binary files /dev/null and b/cordova-plugin-hms-mltext/example/cordova/www/img/logo.png differ
diff --git a/cordova-plugin-hms-mltext/example/cordova/www/index.html b/cordova-plugin-hms-mltext/example/cordova/www/index.html
new file mode 100644
index 00000000..54813654
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/cordova/www/index.html
@@ -0,0 +1,159 @@
+
+
+
+
+
+
+
+
+
+
+
+ Cordova MLKit Demo
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/cordova-plugin-hms-mltext/example/cordova/www/js/bcr.js b/cordova-plugin-hms-mltext/example/cordova/www/js/bcr.js
new file mode 100644
index 00000000..185b3d86
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/cordova/www/js/bcr.js
@@ -0,0 +1,106 @@
+/*
+ Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License")
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+var $imageResult = null;
+var device = true;
+
+document.addEventListener("DOMContentLoaded", function () {
+ const detectType = document.getElementById("detectorType").value;
+ document.getElementById("bankCardDetector").addEventListener("click", () => bankCardDetector(detectType));
+ document.getElementById("stopBankCardDetector").addEventListener("click", () => stopBankCardDetector());
+ document.getElementById("getBankCardPicker").addEventListener("click", function () { getimgPicker(); });
+ document.getElementById("startCustomViewMode").addEventListener("click", () => startCustomViewMode());
+}, false);
+
+async function getimgPicker() {
+ (async ()=>{
+ const file=await chooser.getFile();
+ $imageResult=file.uri;
+ })();
+
+ }
+
+const detectType = document.getElementById("detectorType").value;
+async function bankCardDetector() {
+ var bankCardSDKDetectorReq = {
+ detectType: 0,
+ filePath: $imageResult,
+ mLBcrAnalyzerSetting: {
+ langType: "zh",
+ resultType: HMSMLTextPlugin.MLBcrResultConfig.RESULT_ALL
+ },
+ };
+ var bankCardPluginDetectorReq = {
+ detectType: 1,
+ mLBcrCaptureConfig: {
+ orientation: HMSMLTextPlugin.MLBcrCaptureConfig.ORIENTATION_AUTO,
+ resultType: HMSMLTextPlugin.MLBcrResultConfig.RESULT_ALL
+ },
+ };
+ try {
+ if (device == true) {
+ const result = await HMSMLText.bankCardDetector(bankCardSDKDetectorReq);
+ document.getElementById("bankCardImage").src = "data:image/jpeg;base64," + result.originalBitmap;
+ document.getElementById("cardNumber").value = JSON.stringify(result.number);
+ document.getElementById("cardExpire").value = JSON.stringify(result.expire);
+ document.getElementById("imageUri").value = JSON.stringify(result.originalBitmap);
+ } else {
+ const result = await HMSMLText.bankCardDetector(bankCardPluginDetectorReq);
+ document.getElementById("bankCardImage").src = "data:image/jpeg;base64," + result.originalBitmap;
+ document.getElementById("cardNumber").value = JSON.stringify(result.number);
+ document.getElementById("cardExpire").value = JSON.stringify(result.expire);
+ document.getElementById("imageUri").value = JSON.stringify(result.originalBitmap);
+ }
+ } catch (Ex) {
+ alert(JSON.stringify(Ex));
+ }
+}
+async function stopBankCardDetector() {
+ try {
+ const result = await HMSMLText.stopBankCardDetector();
+ alert(result)
+ } catch (Ex) {
+ alert(JSON.stringify(Ex));
+ }
+}
+
+
+async function startCustomViewMode() {
+ var customViewModeRequest = {
+ isTitleAvailable: true,
+ title: "Place the card within the frame",
+ heightFactor: 0.8,
+ widthFactor: 0.8,
+ isFlashAvailable: true,
+ resultType: HMSMLText.MLBcrResultConfig.RESULT_ALL,
+ recMode: HMSMLText.RecMode.WEAK_MODE,
+ };
+ const result = await HMSMLText.startCustomizedView(customViewModeRequest);
+ document.getElementById("bankCardImage").src = "data:image/jpeg;base64," + result.originalBitmap;
+ document.getElementById("cardNumber").value = JSON.stringify(result.number);
+ document.getElementById("cardExpire").value = JSON.stringify(result.expire);
+ document.getElementById("imageUri").value = JSON.stringify(result.originalBitmap);
+}
+
+var checkbox = document.querySelector('input[type="checkbox"]');
+checkbox.addEventListener('change', function () {
+ if (checkbox.checked) {
+ document.getElementById("detectorType").value = "Device Detector";
+ device = true;
+ } else {
+ document.getElementById("detectorType").value = "Plugin Detector";
+ device = false;
+ }
+});
\ No newline at end of file
diff --git a/cordova-plugin-hms-mltext/example/cordova/www/js/doc.js b/cordova-plugin-hms-mltext/example/cordova/www/js/doc.js
new file mode 100644
index 00000000..1b277dad
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/cordova/www/js/doc.js
@@ -0,0 +1,55 @@
+/*
+ Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License")
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+var $imageResult = null;
+document.addEventListener("DOMContentLoaded", function () {
+ document.getElementById("documentImageAnalyser").addEventListener("click", () => getDocumentImageAnalyser());
+ document.getElementById("stopDocumentImageAnalyser").addEventListener("click", () => stopDocumentImageAnalyser());
+ document.getElementById("getDocumentImagePicker").addEventListener("click", function () { getimgPicker(); });
+}, false);
+
+async function getimgPicker($selectedImage) {
+ (async ()=>{
+ const file=await chooser.getFile();
+ $imageResult=file.uri;
+ })();
+
+ }
+
+async function getDocumentImageAnalyser() {
+ var documentImageReq = {
+ documentSetting: {
+ borderType: HMSMLTextPlugin.MLRemoteTextSetting.ARC,
+ possibleLanguages: ["en", "zh", "tr"],
+ enableFingerprintVerification: true,
+ },
+ filePath: $imageResult,
+ };
+ try {
+ const result = await HMSMLText.documentImageAnalyser(documentImageReq);
+ document.getElementById("textView").value = JSON.stringify(result.stringValue);
+ } catch (Ex) {
+ alert(JSON.stringify(Ex))
+ }
+}
+
+async function stopDocumentImageAnalyser() {
+ try {
+ const result = await HMSMLText.stopDocumentImageAnalyser();
+ alert(result)
+ } catch (Ex) {
+ alert(JSON.stringify(Ex));
+ }
+}
\ No newline at end of file
diff --git a/cordova-plugin-hms-mltext/example/cordova/www/js/formrecog.js b/cordova-plugin-hms-mltext/example/cordova/www/js/formrecog.js
new file mode 100644
index 00000000..40ff0ce5
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/cordova/www/js/formrecog.js
@@ -0,0 +1,41 @@
+/*
+ Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License")
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+var $imageResult = null;
+document.addEventListener("DOMContentLoaded", function () {
+ document.getElementById("formImageAnalyser").addEventListener("click", () => getFormImageAnalyser());
+ document.getElementById("getFormImagePicker").addEventListener("click", function () { getimgPicker(); });
+}, false);
+
+async function getimgPicker() {
+ (async ()=>{
+ const file=await chooser.getFile();
+ $imageResult=file.uri;
+ })();
+
+ }
+
+async function getFormImageAnalyser() {
+ var formReq = {
+ filePath: $imageResult,
+ };
+ try {
+ const result = await HMSMLText.formRecognitionAnalyser(formReq);
+ document.getElementById("textView").value = JSON.stringify(result);
+ console.log(JSON.stringify(result));
+ } catch (Ex) {
+ alert(JSON.stringify(Ex))
+ }
+}
diff --git a/cordova-plugin-hms-mltext/example/cordova/www/js/gcr.js b/cordova-plugin-hms-mltext/example/cordova/www/js/gcr.js
new file mode 100644
index 00000000..1e2cacfa
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/cordova/www/js/gcr.js
@@ -0,0 +1,56 @@
+/*
+ Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License")
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+var $imageResult_template = null;
+
+document.addEventListener("DOMContentLoaded", function () {
+ document.getElementById("generalCardDetector").addEventListener("click", () => generalCardDetector());
+ document.getElementById("AnalyserPicker_template").addEventListener("click", function () { getimgPicker_template(); });
+}, false);
+
+
+
+
+async function getimgPicker_template() {
+ (async ()=>{
+ const file1=await chooser.getFile();
+ $imageResult_template=file1.uri;
+ })();
+ }
+
+
+
+async function generalCardDetector() {
+ var generalCardDetectorReq = {
+ gcrCaptureConfig: {
+ language: "en",
+ },
+ gcrCaptureUIConfig: {
+ orientation: HMSMLTextPlugin.MLGcrCaptureUIConfig.ORIENTATION_AUTO,
+ tipTextColor: HMSMLTextPlugin.Colors.GREEN,
+ tipText: "Scan a card",
+ scanBoxCornerColor: HMSMLTextPlugin.Colors.BLUE,
+ }
+ };
+ try {
+ const result = await HMSMLText.generalCardDetector(generalCardDetectorReq);
+ alert(JSON.stringify(result.text));
+ console.log(JSON.stringify(result));
+ document.getElementById("detectedGeneralCardImage").src = "data:image/jpeg;base64," + result.cardBitmap;
+ } catch (Ex) {
+ alert(JSON.stringify(Ex));
+ }
+}
\ No newline at end of file
diff --git a/cordova-plugin-hms-mltext/example/cordova/www/js/icrcn.js b/cordova-plugin-hms-mltext/example/cordova/www/js/icrcn.js
new file mode 100644
index 00000000..1c5bbe8e
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/cordova/www/js/icrcn.js
@@ -0,0 +1,81 @@
+/*
+ Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License")
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+var $imageResult = null;
+
+document.addEventListener("DOMContentLoaded", function () {
+
+ document.getElementById("IcrCnCardAnalyserPicker").addEventListener("click", function () { getimgPicker(); });
+ document.getElementById("icrCnDetector").addEventListener("click", () => icrCnDetector());
+ document.getElementById("captureImage").addEventListener("click", () => captureImage());
+ document.getElementById("localAnalyzer").addEventListener("click", () => localAnalyzer());
+
+
+}, false);
+
+async function getimgPicker() {
+ (async () => {
+ const file = await chooser.getFile();
+ $imageResult = file.uri;
+ })();
+}
+
+async function captureImage() {
+ var icrCnDetectorReq = {
+ captureType: 1,
+ filePath: $imageResult,
+ isFront: false,
+ };
+ try {
+ const result = await HMSMLText.icrCnCardDetector(icrCnDetectorReq);
+ alert(JSON.stringify(result));
+ console.log(JSON.stringify(result));
+ document.getElementById("detectedIcrCnCardImage").src = "data:image/jpeg;base64," + result.cardBitmap;
+ } catch (Ex) {
+ alert(JSON.stringify(Ex));
+ }
+}
+
+async function icrCnDetector() {
+ var icrCnDetectorReq = {
+ captureType: 0,
+ isFront: true,
+ };
+ try {
+ const result = await HMSMLText.icrCnCardDetector(icrCnDetectorReq);
+ alert(JSON.stringify(result));
+ console.log(JSON.stringify(result));
+ } catch (Ex) {
+ alert(JSON.stringify(Ex));
+ }
+}
+
+async function localAnalyzer() {
+ var localAnalyserReq = {
+ mlIcrAnalyzerSetting: {
+ countryCode: "CN",
+ sideType: "FRONT",
+ },
+
+ filePath: $imageResult,
+ };
+ try {
+ const result = await HMSMLText.icrLocalAnalyser(localAnalyserReq);
+ alert(JSON.stringify(result));
+ console.log(JSON.stringify(result));
+ } catch (Ex) {
+ alert(JSON.stringify(Ex));
+ }
+}
diff --git a/cordova-plugin-hms-mltext/example/cordova/www/js/icrvn.js b/cordova-plugin-hms-mltext/example/cordova/www/js/icrvn.js
new file mode 100644
index 00000000..135c90b0
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/cordova/www/js/icrvn.js
@@ -0,0 +1,80 @@
+/*
+ Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License")
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+var $imageResult = null;
+
+document.addEventListener("DOMContentLoaded", function () {
+
+ document.getElementById("IcrVnCardAnalyserPicker").addEventListener("click", function () { getimgPicker(); });
+ document.getElementById("icrVnDetector").addEventListener("click", () => icrVnDetector());
+ document.getElementById("captureImage").addEventListener("click", () => captureImage());
+ document.getElementById("localAnalyzer").addEventListener("click", () => localAnalyzer());
+
+
+}, false);
+
+async function getimgPicker() {
+ (async () => {
+ const file = await chooser.getFile();
+ $imageResult = file.uri;
+ })();
+}
+
+async function captureImage() {
+ var icrVnDetectorReq = {
+ captureType: 1,
+ filePath: $imageResult,
+ };
+ try {
+ const result = await HMSMLText.icrVnCardDetector(icrVnDetectorReq);
+ alert(JSON.stringify(result.cardBitmap));
+
+ document.getElementById("detectedIcrVnCardImage").src = "data:image/jpeg;base64," + result.cardBitmap;
+ } catch (Ex) {
+ alert(JSON.stringify(Ex));
+ }
+}
+
+async function icrVnDetector() {
+ var icrVnDetectorReq = {
+ captureType: 0,
+ };
+ try {
+ const result = await HMSMLText.icrVnCardDetector(icrVnDetectorReq);
+ alert(JSON.stringify(result));
+ console.log(JSON.stringify(result));
+ } catch (Ex) {
+ alert(JSON.stringify(Ex));
+ }
+}
+
+async function localAnalyzer() {
+ var localAnalyzerReq = {
+
+ mlIcrAnalyzerSetting: {
+ countryCode: "VN",
+ sideType: "FRONT",
+ },
+ filePath: $imageResult,
+
+ };
+ try {
+ const result = await HMSMLText.icrLocalAnalyser(localAnalyzerReq);
+ alert(JSON.stringify(result));
+ console.log(JSON.stringify(result));
+ } catch (Ex) {
+ alert(JSON.stringify(Ex));
+ }
+}
diff --git a/cordova-plugin-hms-mltext/example/cordova/www/js/index.js b/cordova-plugin-hms-mltext/example/cordova/www/js/index.js
new file mode 100644
index 00000000..f769e967
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/cordova/www/js/index.js
@@ -0,0 +1,85 @@
+/*
+ Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License")
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+var $imageResult = null;
+var selectedImage;
+var app = {
+ // Application Constructor
+ initialize: function () {
+ document.addEventListener('deviceready', this.onDeviceReady.bind(this), false);
+ },
+
+ // deviceready Event Handler
+ //
+ // Bind any cordova events here. Common events are:
+ // 'pause', 'resume', etc.
+ onDeviceReady: function () {
+ try {
+ var config = {
+ apiKey: "",
+ //accessToken: "",
+ };
+ HMSMLTextPlugin.serviceInitializer(config);
+ } catch (ex) {
+ console.log(JSON.stringify(ex));
+ }
+
+ document.getElementById("formRecogHref").addEventListener("click", function () { window.location = "formrecog.html" });
+ document.getElementById("bcrHref").addEventListener("click", function () { window.location = "bcr.html" });
+ document.getElementById("textHref").addEventListener("click", function () { window.location = "text.html" });
+ document.getElementById("docHref").addEventListener("click", function () { window.location = "doc.html" });
+ document.getElementById("generalCardHref").addEventListener("click", function () { window.location = "gcr.html" });
+ document.getElementById("icrVnHref").addEventListener("click", function () { window.location = "icrvn.html" });
+ document.getElementById("icrCnHref").addEventListener("click", function () { window.location = "icrcn.html" });
+
+
+ },
+
+ // Update DOM on a Received Event
+ receivedEvent: function (id) {
+
+ var parentElement = document.getElementById(id);
+ var listeningElement = parentElement.querySelector('.listening');
+ var receivedElement = parentElement.querySelector('.received');
+ listeningElement.setAttribute('style', 'display:none;');
+ receivedElement.setAttribute('style', 'display:block;');
+ console.log('Received Event: ' + id);
+ }
+};
+
+async function requestPermissions() {
+ try {
+ await HMSMLTextPlugin.requestPermissions({
+ permissionList: ["camera", "readExternalStorage", "audio", "writeExternalStorage"],
+ });
+ } catch (ex) {
+ alert(JSON.stringify(ex));
+ }
+}
+async function checkPermissions() {
+ var permissionListReq = {
+ permissionList: ["camera", "readExternalStorage", "audio", "writeExternalStorage"],
+ }
+ try {
+ const result = await HMSMLTextPlugin.hasPermissions(permissionListReq);
+ alert("Camera Permission: " + result.camera.hasPermission + "\nRead External Storage Permission: " +
+ result.readExternalStorage.hasPermission + "\nWrite External Storage Permission" + result.writeExternalStorage.hasPermission +
+ "\nAudio Permission" + result.audio.hasPermission);
+ } catch (ex) {
+ alert(JSON.stringify(ex))
+ }
+}
+
+app.initialize();
\ No newline at end of file
diff --git a/cordova-plugin-hms-mltext/example/cordova/www/js/text.js b/cordova-plugin-hms-mltext/example/cordova/www/js/text.js
new file mode 100644
index 00000000..5dbacb76
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/cordova/www/js/text.js
@@ -0,0 +1,97 @@
+/*
+ Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License")
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+var $imageResult = null;
+var device = true;
+document.addEventListener("DOMContentLoaded", function () {
+ const detectType = document.getElementById("detectorType").value;
+ document.getElementById("getTextAnalyserimgPicker").addEventListener("click", function () { getimgPicker(); });
+ document.getElementById("ImageTextAnalyser").addEventListener("click", () => ImageTextAnalyser());
+ document.getElementById("getTextAnalyserInfo").addEventListener("click", () => getTextAnalyserInfo());
+ document.getElementById("stopTextAnalyser").addEventListener("click", () => stopTextAnalyser());
+}, false);
+
+async function getimgPicker() {
+ (async ()=>{
+ const file=await chooser.getFile();
+ $imageResult=file.uri;
+ })();
+
+ }
+ const detectType = document.getElementById("detectorType").value;
+ async function ImageTextAnalyser() {
+
+ var ImageTextReq = {
+ ocrType: 1,
+ analyseMode: 1,
+ remoteTextSetting: {
+ textDensityScene: HMSMLTextPlugin.MLRemoteTextSetting.OCR_COMPACT_SCENE,
+ languageList: ["en", "zh", "tr"],
+ borderType: HMSMLTextPlugin.MLRemoteTextSetting.ARC,
+ },
+ filePath: $imageResult,
+ };
+ var localTextReq={
+ ocrType: 0,
+ analyseMode: 0,
+ localTextSetting: {
+ language: "en"
+ },
+ filePath: $imageResult,
+ }
+ try {
+ if (device == true) {
+ const result = await HMSMLText.imageTextAnalyser(localTextReq);
+ console.log(JSON.stringify(result));
+ document.getElementById("textView").value += JSON.stringify(result.stringValue);
+
+
+ } else {
+ const result = await HMSMLText.imageTextAnalyser(ImageTextReq);
+ console.log(JSON.stringify(result));
+ document.getElementById("textView").value += JSON.stringify(result.stringValue);
+
+ }
+ } catch (Ex) {
+ alert(JSON.stringify(Ex));
+ }
+}
+async function getTextAnalyserInfo() {
+ try {
+ const result = await HMSMLText.getTextAnalyserInfo();
+ alert(JSON.stringify(result));
+ } catch (Ex) {
+ alert(JSON.stringify(Ex));
+ }
+}
+
+async function stopTextAnalyser() {
+ try {
+ const result = await HMSMLText.stopTextAnalyser();
+ alert(result)
+ } catch (Ex) {
+ alert(JSON.stringify(Ex));
+ }
+}
+var checkbox = document.querySelector('input[type="checkbox"]');
+checkbox.addEventListener('change', function () {
+ if (checkbox.checked) {
+ document.getElementById("detectorType").value = "Device Detector";
+ device = true;
+ } else {
+ document.getElementById("detectorType").value = "Plugin Detector";
+ device = false;
+ }
+});
\ No newline at end of file
diff --git a/cordova-plugin-hms-mltext/example/cordova/www/text.html b/cordova-plugin-hms-mltext/example/cordova/www/text.html
new file mode 100644
index 00000000..ff549436
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/cordova/www/text.html
@@ -0,0 +1,69 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/cordova-plugin-hms-mltext/example/ionic/.docs/images/agconnect_hms.PNG b/cordova-plugin-hms-mltext/example/ionic/.docs/images/agconnect_hms.PNG
new file mode 100644
index 00000000..086e3f17
Binary files /dev/null and b/cordova-plugin-hms-mltext/example/ionic/.docs/images/agconnect_hms.PNG differ
diff --git a/cordova-plugin-hms-mltext/example/ionic/.docs/images/appbuildgradle.png b/cordova-plugin-hms-mltext/example/ionic/.docs/images/appbuildgradle.png
new file mode 100644
index 00000000..57805a4e
Binary files /dev/null and b/cordova-plugin-hms-mltext/example/ionic/.docs/images/appbuildgradle.png differ
diff --git a/cordova-plugin-hms-mltext/example/ionic/.docs/images/dependencies_app.png b/cordova-plugin-hms-mltext/example/ionic/.docs/images/dependencies_app.png
new file mode 100644
index 00000000..9472adbb
Binary files /dev/null and b/cordova-plugin-hms-mltext/example/ionic/.docs/images/dependencies_app.png differ
diff --git a/cordova-plugin-hms-mltext/example/ionic/.docs/images/enablemlkit.png b/cordova-plugin-hms-mltext/example/ionic/.docs/images/enablemlkit.png
new file mode 100644
index 00000000..0b2950dc
Binary files /dev/null and b/cordova-plugin-hms-mltext/example/ionic/.docs/images/enablemlkit.png differ
diff --git a/cordova-plugin-hms-mltext/example/ionic/LICENSE b/cordova-plugin-hms-mltext/example/ionic/LICENSE
new file mode 100644
index 00000000..490b5c70
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/ionic/LICENSE
@@ -0,0 +1,53 @@
+Apache License
+
+Version 2.0, January 2004
+
+http://www.apache.org/licenses/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
+
+"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
+
+"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
+
+"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
+
+"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
+
+"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
+
+"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
+
+"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
+
+2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
+
+4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+
+You must give any other recipients of the Work or Derivative Works a copy of this License; and
+You must cause any modified files to carry prominent notices stating that You changed the files; and
+You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
+If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.
+
+You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
+
+8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
\ No newline at end of file
diff --git a/cordova-plugin-hms-mltext/example/ionic/OpenSourceSoftwareNotice.html b/cordova-plugin-hms-mltext/example/ionic/OpenSourceSoftwareNotice.html
new file mode 100644
index 00000000..07aea55f
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/ionic/OpenSourceSoftwareNotice.html
@@ -0,0 +1,94 @@
+
OPEN SOURCE SOFTWARE NOTICE
+
+
+
+
Please note we provide an open source software notice along with this product and/or this product firmware (in the following just “this product”). The open source software licenses are granted by the respective right holders. And the open source licenses prevail all other license information with regard to the respective open source software contained in the product, including but not limited to End User Software Licensing Agreement. This notice is provided on behalf of Huawei Technologies Co. Ltd. and any of its local subsidiaries which may have provided this product to you in your local country.
+
+
+
+
Warranty Disclaimer
+
+
THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS.
+
+
+
+
Copyright Notice and License Texts
+
+
Software: cordova-plugin-filechooser 1.2.0
+
+
Copyright notice:
+
+
Copyright 2013-2014 Don Coleman
+
+
+
+
+
+
License:The Apache License
+
+
Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+
+
Software: @ionic-native/file-chooser 5.28.0
+
+
Copyright notice:
+
+
Copyright 2015-present Drifty Co.
+
+
+
+
+
+
License:The MIT License
+
+
Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+
The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+
+
+
+
+
Written Offer
+
+
This product contains software whose rights holders license it on the terms of the GNU General Public License, version 2 (GPLv2) and/or other open source software licenses. We will provide you and any third party with the source code of the software licensed under an open source software license if you send us a written request by mail or email to the following addresses:
detailing the name of the product and the firmware version for which you need the source code and indicating how we can contact you.
+
+
Please note you need to make a payment before you obtain the complete Corresponding Source Code from us. For how much you will pay and how we will deliver the complete Corresponding Source Code to you, we will further discuss it by mail or email.
+
+
This offer is valid to anyone in receipt of this information.
+
+
+
+
THIS OFFER IS VALID FOR THREE YEARS FROM THE MOMENT WE DISTRIBUTED THE PRODUCT OR FIRMWARE .
+
+
diff --git a/cordova-plugin-hms-mltext/example/ionic/README.md b/cordova-plugin-hms-mltext/example/ionic/README.md
new file mode 100644
index 00000000..11deff73
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/ionic/README.md
@@ -0,0 +1,305 @@
+# HMS ML Text Ionic Demo
+
+## Contents
+
+- [1. Introduction](#1-introduction)
+- [2. Installation Guide](#2-installation-guide)
+ - [2.1. Creating a Project in AppGallery Connect](#21-creating-a-project-in-appgallery-connect)
+ - [2.2. Configuring the Signing Certificate Fingerprint and Obtaining agconnect-services.json](#22-configuring-the-signing-certificate-fingerprint-and-obtaining-agconnect-servicesjson)
+ - [2.3. Ionic](#23-ionic)
+ - [2.3.1. With Cordova Runtime](#231-with-cordova-runtime)
+ - [2.3.2. With Capacitor Runtime](#232-with-capacitor-runtime)
+- [3. Configuration and Description](#3-configuration-and-description)
+- [4. Questions or Issues](#4-questions-or-issues)
+- [5. Licensing and Terms](#5-licensing-and-terms)
+
+---
+
+## 1. Introduction
+
+This demo application demonstrates the usage of the HMS ML Text Kit Cordova plugin.
+
+---
+
+## 2. Installation Guide
+
+Before you get started, you must register as a HUAWEI Developer and complete identity verification on the [HUAWEI Developer](https://developer.huawei.com/consumer/en/?ha_source=hms1) website. For details, please refer to [Register a HUAWEI ID](https://developer.huawei.com/consumer/en/doc/10104?ha_source=hms1).
+
+### 2.1. Creating a Project in AppGallery Connect
+
+Creating an app in AppGallery Connect is required in order to communicate with the Huawei services. To create an app, perform the following steps:
+
+1. Sign in to [AppGallery Connect](https://developer.huawei.com/consumer/en/service/josp/agc/index.html?ha_source=hms1) and select **My projects**.
+2. Select your project from the project list or create a new one by clicking the **Add Project** button.
+3. Go to **Project Setting** > **General information**, and click **Add app**.
+ - If an app exists in the project and you need to add a new one, expand the app selection area on the top of the page and click **Add app**.
+4. On the **Add app** page, enter the app information, and click **OK**.
+
+### 2.2. Configuring the Signing Certificate Fingerprint and Obtaining agconnect-services.json
+
+A signing certificate fingerprint is used to verify the authenticity of an app when it attempts to access an HMS Core (APK) through the HMS SDK. Before using the HMS Core (APK), you must locally generate a signing certificate fingerprint and configure it in the **AppGallery Connect**. You can refer to 3rd and 4th steps of [Generating a Signing Certificate](https://developer.huawei.com/consumer/en/codelab/HMSPreparation/index.html?ha_source=hms1#2) Codelab tutorial for the certificate generation. Perform the following steps after you have generated the certificate.
+
+1. Sign in to [AppGallery Connect](https://developer.huawei.com/consumer/en/service/josp/agc/index.html?ha_source=hms1) and select your project from **My Projects**. Then go to **Project Setting** > **General information**. In the **App information** field, click the icon next to SHA-256 certificate fingerprint, and enter the obtained **SHA-256 certificate fingerprint**.
+2. After completing the configuration, click **OK** to save the changes. (Check mark icon)
+3. In the same page, click **agconnect-services.json** button to download the configuration file.
+
+### 2.3. Ionic
+
+1. Install Ionic CLI and other required tools if haven't done before.
+
+ ```bash
+ npm install -g @ionic/cli cordova-res native-run
+ ```
+
+2. Open the demo project's root directory.
+
+3. Install project dependencies.
+
+ ```bash
+ npm install
+ ```
+
+#### 2.3.1. With Cordova Runtime
+
+1. Enable the **Cordova integration**.
+
+ ```bash
+ ionic integrations enable cordova
+ ```
+
+2. Update the widget **`id`** property which is specified in the **`config.xml`** file. It must be same with **client > package_name** value of the **`agconnect-services.json`** file.
+
+3. Add the **Android platform** to the project.
+
+ ```bash
+ ionic cordova platform add android
+ ```
+
+4. Install `HMS ML Text plugin` to the project.
+
+ ```bash
+ ionic cordova plugin add @hmscore/cordova-plugin-hms-mltext
+ ```
+
+5. Install HMS ML Text Ionic Native wrappers.
+
+ ```bash
+ npm install @ionic-native/core @hmscore/ionic-native-hms-mltext
+ ```
+
+6. Copy **`agconnect-services.json`** file to **`/platforms/android/app`** directory.
+
+7. Add **`keystore(.jks)`** and **`build.json`** files to your project's root directory.
+
+ - You can refer to 3rd and 4th steps of [Generating a Signing Certificate](https://developer.huawei.com/consumer/en/codelab/HMSPreparation/index.html?ha_source=hms1#2) Codelab tutorial page for generating keystore file.
+
+ - Fill **`build.json`** file according to your keystore. For example:
+
+ ```json
+ {
+ "android": {
+ "debug": {
+ "keystore": ".jks",
+ "storePassword": "",
+ "alias": "",
+ "password": ""
+ },
+ "release": {
+ "keystore": ".jks",
+ "storePassword": "",
+ "alias": "",
+ "password": ""
+ }
+ }
+ }
+ ```
+
+8. Build Ionic app to generate resource files.
+
+ ```bash
+ ionic build
+ ```
+
+9. Run the app.
+
+ ```bash
+ ionic cordova run android --device
+ ```
+
+#### 2.3.2. With Capacitor Runtime
+
+1. Enable the **Capacitor integration**.
+
+ ```bash
+ ionic integrations enable capacitor
+ ```
+
+2. Initialize **Capacitor**.
+
+ ```bash
+ npx cap init [appName] [appId]
+ ```
+
+ - For more details please follow [Initialize Capacitor with your app information](https://capacitorjs.com/docs/getting-started/with-ionic#initialize-capacitor-with-your-app-information).
+
+3. Update the **`appId`** property which is specified in the **`capacitor.config.json`** file according to your project. It must be same with **client > package_name** value of the **`agconnect-services.json`** file.
+
+4. Install `HMS ML Text plugin` to the project.
+
+ ```bash
+ npm install @hmscore/cordova-plugin-hms-mltext
+ ```
+
+5. Install HMS ML Text Ionic Native wrappers.
+
+ ```bash
+ npm install @ionic-native/core @hmscore/ionic-native-hms-mltext
+ ```
+
+6. Build Ionic app to generate resource files.
+
+ ```bash
+ ionic build
+ ```
+
+7. Add the **Android platform** to the project.
+
+ ```bash
+ npx cap add android
+ ```
+
+8. Copy **`keystore(.jks)`** and **`agconnect-services.json`** files to **`/android/app`** directory.
+
+ - You can refer to 3rd and 4th steps of [Generating a Signing Certificate](https://developer.huawei.com/consumer/en/codelab/HMSPreparation/index.html?ha_source=hms1#2) Codelab tutorial page for generating keystore file.
+
+9. Open the **`build.gradle`** file in the **`/android/app`** directory.
+
+ - Add `signingConfigs` entry to the **android** section and modify it according to your keystore.
+
+ - Enable `signingConfig` configuration for **debug** and **release** flavors.
+
+ ```groovy
+ ...
+
+ android {
+
+ ...
+
+ // Modify signingConfigs according to your keystore
+ signingConfigs {
+ config {
+ storeFile file('.jks')
+ storePassword ''
+ keyAlias ''
+ keyPassword ''
+ }
+ }
+ buildTypes {
+ debug {
+ signingConfig signingConfigs.config // Enable signingConfig for debug flavor
+ }
+ release {
+ signingConfig signingConfigs.config // Enable signingConfig for release flavor
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+ }
+ }
+ }
+
+ ...
+ ```
+
+10. Open the **`build.gradle`** file in the **`/android`** directory. Add **Huawei's maven repositories** and **agconnect classpath** to the file.
+
+ ```groovy
+ buildscript {
+ repositories {
+ /*
+
+ */
+ maven { url 'https://developer.huawei.com/repo/' }
+ }
+ dependencies {
+ /*
+
+ */
+ classpath 'com.huawei.agconnect:agcp:1.9.1.300'
+ }
+ }
+
+ /*
+
+ */
+
+ allprojects {
+ repositories {
+ /*
+
+ */
+ maven { url 'https://developer.huawei.com/repo/' }
+ }
+ }
+ ```
+
+11. Updates dependencies, and copy any web assets to your project.
+
+ ```bash
+ npx cap sync
+ ```
+
+12. Open the project in Android Studio and run it.
+
+ ```bash
+ npx cap open android
+ ```
+
+---
+
+## 3. Configuration and Description
+
+### Configuring Obfuscation Scripts
+
+Before building the APK, configure the obfuscation configuration file to prevent the HMS Core SDK from being obfuscated.
+
+**NOTE**: This step is required only if you want to minify and obfuscate your app. By default obfuscation is disabled in Cordova and Ionic apps.
+
+The obfuscation is done by **ProGuard.** By default, in Cordova and Ionic apps ProGuard is disabled. Even though ProGuard is not available, ProGuard support can be added through 3rd party ProGuard plugins. If ProGuard is enabled in your project, the Huawei Cordova ML plugin's ProGuard rules need to be added to your project. These rules are as follows:
+
+```text
+-ignorewarnings
+-keepattributes *Annotation*
+-keepattributes Exceptions
+-keepattributes InnerClasses
+-keepattributes Signature
+-keep class com.huawei.hianalytics.**{*;}
+-keep class com.huawei.updatesdk.**{*;}
+-keep class com.huawei.hms.**{*;}
+-dontwarn com.huawei.**
+-keep class com.huawei.** {*;}
+-dontwarn org.slf4j.**
+-keep class org.slf4j.** {*;}
+-dontwarn org.springframework.**
+-keep class org.springframework.** {*;}
+-dontwarn com.fasterxml.jackson.**
+-keep class com.fasterxml.jackson.** {*;}
+-repackageclasses
+```
+
+---
+
+## 4. Questions or Issues
+
+If you have questions about how to use HMS samples, try the following options:
+
+- [Stack Overflow](https://stackoverflow.com/questions/tagged/huawei-mobile-services) is the best place for any programming questions. Be sure to tag your question with **`huawei-mobile-services`**.
+- [GitHub](https://github.com/HMS-Core/hms-cordova-plugin) is the official repository for these plugins, You can open an issue or submit your ideas.
+- [Huawei Developer Forum](https://forums.developer.huawei.com/forumPortal/en/home?fid=0101187876626530001&ha_source=hms1) HMS Core Module is great for general questions, or seeking recommendations and opinions.
+- [Huawei Developer Docs](https://developer.huawei.com/consumer/en/doc/overview/HMS-Core-Plugin?ha_source=hms1) is place to official documentation for all HMS Core Kits, you can find detailed documentations in there.
+
+If you run into a bug in our samples, please submit an issue to the [GitHub repository](https://github.com/HMS-Core/hms-cordova-plugin).
+
+---
+
+## 5. Licensing and Terms
+
+Huawei ML Text Kit Cordova Plugin is licensed under the [Apache 2.0 license](LICENSE).
diff --git a/cordova-plugin-hms-mltext/example/ionic/angular.json b/cordova-plugin-hms-mltext/example/ionic/angular.json
new file mode 100644
index 00000000..cb1a43d9
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/ionic/angular.json
@@ -0,0 +1,190 @@
+{
+ "$schema": "./node_modules/@angular/cli/lib/config/schema.json",
+ "version": 1,
+ "defaultProject": "app",
+ "newProjectRoot": "projects",
+ "projects": {
+ "app": {
+ "root": "",
+ "sourceRoot": "src",
+ "projectType": "application",
+ "prefix": "app",
+ "schematics": {},
+ "architect": {
+ "build": {
+ "builder": "@angular-devkit/build-angular:browser",
+ "options": {
+ "outputPath": "www",
+ "index": "src/index.html",
+ "main": "src/main.ts",
+ "polyfills": "src/polyfills.ts",
+ "tsConfig": "tsconfig.app.json",
+ "assets": [
+ {
+ "glob": "**/*",
+ "input": "src/assets",
+ "output": "assets"
+ },
+ {
+ "glob": "**/*.svg",
+ "input": "node_modules/ionicons/dist/ionicons/svg",
+ "output": "./svg"
+ }
+ ],
+ "styles": [
+ {
+ "input": "src/theme/variables.scss"
+ },
+ {
+ "input": "src/global.scss"
+ }
+ ],
+ "scripts": []
+ },
+ "configurations": {
+ "production": {
+ "fileReplacements": [
+ {
+ "replace": "src/environments/environment.ts",
+ "with": "src/environments/environment.prod.ts"
+ }
+ ],
+ "optimization": true,
+ "outputHashing": "all",
+ "sourceMap": false,
+ "extractCss": true,
+ "namedChunks": false,
+ "aot": true,
+ "extractLicenses": true,
+ "vendorChunk": false,
+ "buildOptimizer": true,
+ "budgets": [
+ {
+ "type": "initial",
+ "maximumWarning": "2mb",
+ "maximumError": "5mb"
+ }
+ ]
+ },
+ "ci": {
+ "progress": false
+ }
+ }
+ },
+ "serve": {
+ "builder": "@angular-devkit/build-angular:dev-server",
+ "options": {
+ "browserTarget": "app:build"
+ },
+ "configurations": {
+ "production": {
+ "browserTarget": "app:build:production"
+ },
+ "ci": {
+ "progress": false
+ }
+ }
+ },
+ "extract-i18n": {
+ "builder": "@angular-devkit/build-angular:extract-i18n",
+ "options": {
+ "browserTarget": "app:build"
+ }
+ },
+ "test": {
+ "builder": "@angular-devkit/build-angular:karma",
+ "options": {
+ "main": "src/test.ts",
+ "polyfills": "src/polyfills.ts",
+ "tsConfig": "tsconfig.spec.json",
+ "karmaConfig": "karma.conf.js",
+ "styles": [],
+ "scripts": [],
+ "assets": [
+ {
+ "glob": "favicon.ico",
+ "input": "src/",
+ "output": "/"
+ },
+ {
+ "glob": "**/*",
+ "input": "src/assets",
+ "output": "/assets"
+ }
+ ]
+ },
+ "configurations": {
+ "ci": {
+ "progress": false,
+ "watch": false
+ }
+ }
+ },
+ "lint": {
+ "builder": "@angular-devkit/build-angular:tslint",
+ "options": {
+ "tsConfig": [
+ "tsconfig.app.json",
+ "tsconfig.spec.json",
+ "e2e/tsconfig.json"
+ ],
+ "exclude": [
+ "**/node_modules/**"
+ ]
+ }
+ },
+ "e2e": {
+ "builder": "@angular-devkit/build-angular:protractor",
+ "options": {
+ "protractorConfig": "e2e/protractor.conf.js",
+ "devServerTarget": "app:serve"
+ },
+ "configurations": {
+ "production": {
+ "devServerTarget": "app:serve:production"
+ },
+ "ci": {
+ "devServerTarget": "app:serve:ci"
+ }
+ }
+ },
+ "ionic-cordova-build": {
+ "builder": "@ionic/cordova-builders:cordova-build",
+ "options": {
+ "browserTarget": "app:build"
+ },
+ "configurations": {
+ "production": {
+ "browserTarget": "app:build:production"
+ }
+ }
+ },
+ "ionic-cordova-serve": {
+ "builder": "@ionic/cordova-builders:cordova-serve",
+ "options": {
+ "cordovaBuildTarget": "app:ionic-cordova-build",
+ "devServerTarget": "app:serve"
+ },
+ "configurations": {
+ "production": {
+ "cordovaBuildTarget": "app:ionic-cordova-build:production",
+ "devServerTarget": "app:serve:production"
+ }
+ }
+ }
+ }
+ }
+ },
+ "cli": {
+ "defaultCollection": "@ionic/angular-toolkit",
+ "analytics": false
+ },
+ "schematics": {
+ "@ionic/angular-toolkit:component": {
+ "styleext": "scss"
+ },
+ "@ionic/angular-toolkit:page": {
+ "styleext": "scss"
+ }
+ }
+}
\ No newline at end of file
diff --git a/cordova-plugin-hms-mltext/example/ionic/browserslist b/cordova-plugin-hms-mltext/example/ionic/browserslist
new file mode 100644
index 00000000..b15c7fae
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/ionic/browserslist
@@ -0,0 +1,12 @@
+# This file is used by the build system to adjust CSS and JS output to support the specified browsers below.
+# For additional information regarding the format and rule options, please see:
+# https://github.com/browserslist/browserslist#queries
+
+# You can see what browsers were selected by your queries by running:
+# npx browserslist
+
+> 0.5%
+last 2 versions
+Firefox ESR
+not dead
+not IE 9-11 # For IE 9-11 support, remove 'not'.
diff --git a/cordova-plugin-hms-mltext/example/ionic/e2e/protractor.conf.js b/cordova-plugin-hms-mltext/example/ionic/e2e/protractor.conf.js
new file mode 100644
index 00000000..ef5976ed
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/ionic/e2e/protractor.conf.js
@@ -0,0 +1,40 @@
+/*
+ Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License")
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+const { SpecReporter } = require('jasmine-spec-reporter');
+
+exports.config = {
+ allScriptsTimeout: 11000,
+ specs: [
+ './src/**/*.e2e-spec.ts'
+ ],
+ capabilities: {
+ 'browserName': 'chrome'
+ },
+ directConnect: true,
+ baseUrl: 'http://localhost:4200/',
+ framework: 'jasmine',
+ jasmineNodeOpts: {
+ showColors: true,
+ defaultTimeoutInterval: 30000,
+ print: function() {}
+ },
+ onPrepare() {
+ require('ts-node').register({
+ project: require('path').join(__dirname, './tsconfig.json')
+ });
+ jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } }));
+ }
+};
diff --git a/cordova-plugin-hms-mltext/example/ionic/e2e/src/app.e2e-spec.ts b/cordova-plugin-hms-mltext/example/ionic/e2e/src/app.e2e-spec.ts
new file mode 100644
index 00000000..80395ed3
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/ionic/e2e/src/app.e2e-spec.ts
@@ -0,0 +1,29 @@
+/*
+ Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License")
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+import { AppPage } from './app.po';
+
+describe('new App', () => {
+ let page: AppPage;
+
+ beforeEach(() => {
+ page = new AppPage();
+ });
+
+ it('should be blank', () => {
+ page.navigateTo();
+ expect(page.getParagraphText()).toContain('Start with Ionic UI Components');
+ });
+});
diff --git a/cordova-plugin-hms-mltext/example/ionic/e2e/src/app.po.ts b/cordova-plugin-hms-mltext/example/ionic/e2e/src/app.po.ts
new file mode 100644
index 00000000..a9e59f1b
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/ionic/e2e/src/app.po.ts
@@ -0,0 +1,26 @@
+/*
+ Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License")
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+import { browser, by, element } from 'protractor';
+
+export class AppPage {
+ navigateTo() {
+ return browser.get('/');
+ }
+
+ getParagraphText() {
+ return element(by.deepCss('app-root ion-content')).getText();
+ }
+}
diff --git a/cordova-plugin-hms-mltext/example/ionic/e2e/tsconfig.json b/cordova-plugin-hms-mltext/example/ionic/e2e/tsconfig.json
new file mode 100644
index 00000000..77d311e8
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/ionic/e2e/tsconfig.json
@@ -0,0 +1,13 @@
+{
+ "extends": "../tsconfig.json",
+ "compilerOptions": {
+ "outDir": "../out-tsc/app",
+ "module": "commonjs",
+ "target": "es5",
+ "types": [
+ "jasmine",
+ "jasminewd2",
+ "node"
+ ]
+ }
+}
diff --git a/cordova-plugin-hms-mltext/example/ionic/ionic.config.json b/cordova-plugin-hms-mltext/example/ionic/ionic.config.json
new file mode 100644
index 00000000..bf53c3b9
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/ionic/ionic.config.json
@@ -0,0 +1,7 @@
+{
+ "name": "ionic-hms-mltext-demo",
+ "integrations": {
+
+ },
+ "type": "angular"
+}
diff --git a/cordova-plugin-hms-mltext/example/ionic/karma.conf.js b/cordova-plugin-hms-mltext/example/ionic/karma.conf.js
new file mode 100644
index 00000000..fafc49ce
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/ionic/karma.conf.js
@@ -0,0 +1,46 @@
+/*
+ Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License")
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+// Karma configuration file, see link for more information
+// https://karma-runner.github.io/1.0/config/configuration-file.html
+
+module.exports = function (config) {
+ config.set({
+ basePath: '',
+ frameworks: ['jasmine', '@angular-devkit/build-angular'],
+ plugins: [
+ require('karma-jasmine'),
+ require('karma-chrome-launcher'),
+ require('karma-jasmine-html-reporter'),
+ require('karma-coverage-istanbul-reporter'),
+ require('@angular-devkit/build-angular/plugins/karma')
+ ],
+ client: {
+ clearContext: false // leave Jasmine Spec Runner output visible in browser
+ },
+ coverageIstanbulReporter: {
+ dir: require('path').join(__dirname, '../coverage'),
+ reports: ['html', 'lcovonly', 'text-summary'],
+ fixWebpackSourcePaths: true
+ },
+ reporters: ['progress', 'kjhtml'],
+ port: 9876,
+ colors: true,
+ logLevel: config.LOG_INFO,
+ autoWatch: true,
+ browsers: ['Chrome'],
+ singleRun: false
+ });
+};
diff --git a/cordova-plugin-hms-mltext/example/ionic/package.json b/cordova-plugin-hms-mltext/example/ionic/package.json
new file mode 100644
index 00000000..653acd96
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/ionic/package.json
@@ -0,0 +1,90 @@
+{
+ "name": "ionic-hms-mltext-demo",
+ "description": "A demo application which shows the usage of HMS ML Text plugin.",
+ "version": "3.12.0-300",
+ "homepage": "https://developer.huawei.com/consumer/en/doc/overview/HMS-Core-Plugin",
+ "license": "Apache-2.0",
+ "licenseFilename": "LICENSE",
+ "readmeFilename": "README.md",
+ "scripts": {
+ "ng": "ng",
+ "start": "ng serve",
+ "build": "ng build",
+ "test": "ng test",
+ "lint": "ng lint",
+ "e2e": "ng e2e"
+ },
+ "dependencies": {
+ "@angular/common": "15.0.0",
+ "@angular/core": "15.0.0",
+ "@angular/forms": "15.0.0",
+ "@angular/platform-browser": "15.0.0",
+ "@angular/platform-browser-dynamic": "15.0.0",
+ "@angular/router": "15.0.0",
+ "@ionic-native/core": "^5.36.0",
+ "@ionic-native/splash-screen": "5.36.0",
+ "@ionic-native/status-bar": "5.36.0",
+ "@ionic/angular": "6.1.9",
+ "@ionic/cordova-builders": "^9.0.0",
+ "@ionic-native/file-chooser": "5.28.0",
+ "rxjs": "6.6.0",
+ "tslib": "2.3.0",
+ "zone.js": "0.11.4"
+ },
+ "devDependencies": {
+ "@angular-devkit/build-angular": "15.0.0",
+ "@angular/cli": "15.0.0",
+ "@angular/compiler": "15.0.0",
+ "@angular/compiler-cli": "15.0.0",
+ "@angular/language-service": "15.0.0",
+ "@capacitor/cli": "2.4.5",
+ "@ionic/angular-toolkit": "9.0.0",
+ "@types/jasmine": "4.0.0",
+ "@types/jasminewd2": "2.0.3",
+ "@types/node": "12.11.1",
+ "codelyzer": "6.0.0",
+ "jasmine-core": "4.3.0",
+ "jasmine-spec-reporter": "5.0.0",
+ "karma": "6.4.0",
+ "karma-chrome-launcher": "3.1.0",
+ "karma-coverage-istanbul-reporter": "3.0.2",
+ "karma-jasmine": "5.1.0",
+ "karma-jasmine-html-reporter": "2.0.0",
+ "@ionic-native/file-chooser": "5.30.0",
+ "cordova-plugin-filechooser": "^1.2.0",
+ "protractor": "7.0.0",
+ "ts-node": "8.3.0",
+ "tslint": "6.1.0",
+ "typescript": "4.8.4"
+ },
+ "files": [
+ ".docs",
+ "e2e",
+ "src",
+ "angular.json",
+ "browserslist",
+ "ionic.config.json",
+ "karma.conf.js",
+ "LICENSE",
+ "package.json",
+ "README.md",
+ "OpenSourceSoftwareNotice.html",
+ "tsconfig.app.json",
+ "tsconfig.json",
+ "tsconfig.spec.json",
+ "tslint.json"
+ ],
+ "cordova": {
+ "plugins": {
+ "cordova-plugin-filechooser": {},
+ "cordova-plugin-statusbar": {},
+ "cordova-plugin-device": {},
+ "cordova-plugin-splashscreen": {},
+ "cordova-plugin-ionic-webview": {},
+ "cordova-plugin-ionic-keyboard": {}
+ },
+ "platforms": [
+ "android"
+ ]
+ }
+}
diff --git a/cordova-plugin-hms-mltext/example/ionic/src/app/app-routing.module.ts b/cordova-plugin-hms-mltext/example/ionic/src/app/app-routing.module.ts
new file mode 100644
index 00000000..893f3d62
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/ionic/src/app/app-routing.module.ts
@@ -0,0 +1,77 @@
+/*
+ Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License")
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+import { NgModule } from "@angular/core";
+import { PreloadAllModules, RouterModule, Routes } from "@angular/router";
+
+const routes: Routes = [
+ {
+ path: "home",
+ loadChildren: () =>
+ import("./home/home.module").then((m) => m.HomePageModule),
+ },
+ {
+ path: "",
+ redirectTo: "home",
+ pathMatch: "full",
+ },
+ {
+ path: "icrVn",
+ loadChildren: () =>
+ import("./icrVn/icrVn.module").then((m) => m.icrVnPageModule),
+ },
+
+ {
+ path: "icrCn",
+ loadChildren: () =>
+ import("./icrCn/icrCn.module").then((m) => m.icrCnPageModule),
+ },
+ {
+ path: "bcr",
+ loadChildren: () => import("./bcr/bcr.module").then((m) => m.BcrPageModule),
+ },
+ {
+ path: "text",
+ loadChildren: () =>
+ import("./text/text.module").then((m) => m.TextPageModule),
+ },
+ {
+ path: "document",
+ loadChildren: () =>
+ import("./document/document.module").then((m) => m.DocumentPageModule),
+ },
+ {
+ path: "generalcard",
+ loadChildren: () =>
+ import("./generalcard/generalcard.module").then(
+ (m) => m.GeneralcardPageModule
+ ),
+ },
+ {
+ path: "formrecognition",
+ loadChildren: () =>
+ import("./formrecognition/formrecognition.module").then(
+ (m) => m.FormrecognitionPageModule
+ ),
+ },
+];
+
+@NgModule({
+ imports: [
+ RouterModule.forRoot(routes, { preloadingStrategy: PreloadAllModules }),
+ ],
+ exports: [RouterModule],
+})
+export class AppRoutingModule {}
diff --git a/cordova-plugin-hms-mltext/example/ionic/src/app/app.component.html b/cordova-plugin-hms-mltext/example/ionic/src/app/app.component.html
new file mode 100644
index 00000000..7d0d7610
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/ionic/src/app/app.component.html
@@ -0,0 +1,18 @@
+
+
+
+
diff --git a/cordova-plugin-hms-mltext/example/ionic/src/app/app.component.scss b/cordova-plugin-hms-mltext/example/ionic/src/app/app.component.scss
new file mode 100644
index 00000000..60547ee2
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/ionic/src/app/app.component.scss
@@ -0,0 +1,15 @@
+/*
+ Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License")
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
\ No newline at end of file
diff --git a/cordova-plugin-hms-mltext/example/ionic/src/app/app.component.spec.ts b/cordova-plugin-hms-mltext/example/ionic/src/app/app.component.spec.ts
new file mode 100644
index 00000000..798b002e
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/ionic/src/app/app.component.spec.ts
@@ -0,0 +1,58 @@
+/*
+ Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License")
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
+import { TestBed, async } from '@angular/core/testing';
+import { Platform } from '@ionic/angular';
+import { SplashScreen } from '@ionic-native/splash-screen/ngx';
+import { StatusBar } from '@ionic-native/status-bar/ngx';
+import { AppComponent } from './app.component';
+
+describe('AppComponent', () => {
+
+ let statusBarSpy, splashScreenSpy, platformReadySpy, platformSpy;
+
+ beforeEach(async(() => {
+ statusBarSpy = jasmine.createSpyObj('StatusBar', ['styleDefault']);
+ splashScreenSpy = jasmine.createSpyObj('SplashScreen', ['hide']);
+ platformReadySpy = Promise.resolve();
+ platformSpy = jasmine.createSpyObj('Platform', { ready: platformReadySpy });
+
+ TestBed.configureTestingModule({
+ declarations: [AppComponent],
+ schemas: [CUSTOM_ELEMENTS_SCHEMA],
+ providers: [
+ { provide: StatusBar, useValue: statusBarSpy },
+ { provide: SplashScreen, useValue: splashScreenSpy },
+ { provide: Platform, useValue: platformSpy },
+ ],
+ }).compileComponents();
+ }));
+
+ it('should create the app', () => {
+ const fixture = TestBed.createComponent(AppComponent);
+ const app = fixture.debugElement.componentInstance;
+ expect(app).toBeTruthy();
+ });
+
+ it('should initialize the app', async () => {
+ TestBed.createComponent(AppComponent);
+ expect(platformSpy.ready).toHaveBeenCalled();
+ await platformReadySpy;
+ expect(statusBarSpy.styleDefault).toHaveBeenCalled();
+ expect(splashScreenSpy.hide).toHaveBeenCalled();
+ });
+
+});
diff --git a/cordova-plugin-hms-mltext/example/ionic/src/app/app.component.ts b/cordova-plugin-hms-mltext/example/ionic/src/app/app.component.ts
new file mode 100644
index 00000000..d7faeae8
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/ionic/src/app/app.component.ts
@@ -0,0 +1,41 @@
+/*
+ Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License")
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+import { Component } from '@angular/core';
+import { Platform } from '@ionic/angular';
+import { SplashScreen } from '@ionic-native/splash-screen/ngx';
+import { StatusBar } from '@ionic-native/status-bar/ngx';
+
+@Component({
+ selector: 'app-root',
+ templateUrl: 'app.component.html',
+ styleUrls: ['app.component.scss']
+})
+export class AppComponent {
+ constructor(
+ private platform: Platform,
+ private splashScreen: SplashScreen,
+ private statusBar: StatusBar
+ ) {
+ this.initializeApp();
+ }
+
+ initializeApp() {
+ this.platform.ready().then(() => {
+ this.statusBar.styleDefault();
+ this.splashScreen.hide();
+ });
+ }
+}
diff --git a/cordova-plugin-hms-mltext/example/ionic/src/app/app.module.ts b/cordova-plugin-hms-mltext/example/ionic/src/app/app.module.ts
new file mode 100644
index 00000000..59b03f04
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/ionic/src/app/app.module.ts
@@ -0,0 +1,37 @@
+/*
+ Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License")
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+import { NgModule } from '@angular/core';
+import { BrowserModule } from '@angular/platform-browser';
+import { RouteReuseStrategy } from '@angular/router';
+import { IonicModule, IonicRouteStrategy } from '@ionic/angular';
+import { SplashScreen } from '@ionic-native/splash-screen/ngx';
+import { StatusBar } from '@ionic-native/status-bar/ngx';
+import { AppComponent } from './app.component';
+import { AppRoutingModule } from './app-routing.module';
+
+
+@NgModule({
+ declarations: [AppComponent],
+ entryComponents: [],
+ imports: [BrowserModule, IonicModule.forRoot(), AppRoutingModule],
+ providers: [
+ StatusBar,
+ SplashScreen,
+ { provide: RouteReuseStrategy, useClass: IonicRouteStrategy }
+ ],
+ bootstrap: [AppComponent]
+})
+export class AppModule {}
diff --git a/cordova-plugin-hms-mltext/example/ionic/src/app/bcr/bcr-routing.module.ts b/cordova-plugin-hms-mltext/example/ionic/src/app/bcr/bcr-routing.module.ts
new file mode 100644
index 00000000..0e7224a8
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/ionic/src/app/bcr/bcr-routing.module.ts
@@ -0,0 +1,31 @@
+/*
+ Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License")
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+import { NgModule } from '@angular/core';
+import { Routes, RouterModule } from '@angular/router';
+import { BcrPage } from './bcr.page';
+
+const routes: Routes = [
+ {
+ path: '',
+ component: BcrPage
+ }
+];
+
+@NgModule({
+ imports: [RouterModule.forChild(routes)],
+ exports: [RouterModule],
+})
+export class BcrPageRoutingModule {}
diff --git a/cordova-plugin-hms-mltext/example/ionic/src/app/bcr/bcr.module.ts b/cordova-plugin-hms-mltext/example/ionic/src/app/bcr/bcr.module.ts
new file mode 100644
index 00000000..9e84cb91
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/ionic/src/app/bcr/bcr.module.ts
@@ -0,0 +1,30 @@
+/*
+ Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License")
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+import { NgModule } from "@angular/core";
+import { CommonModule } from "@angular/common";
+import { FormsModule } from "@angular/forms";
+import { FileChooser } from "@ionic-native/file-chooser/ngx";
+import { IonicModule } from "@ionic/angular";
+import { HMSMLText } from "@hmscore/ionic-native-hms-mltext/ngx";
+import { BcrPageRoutingModule } from "./bcr-routing.module";
+import { BcrPage } from "./bcr.page";
+
+@NgModule({
+ imports: [CommonModule, FormsModule, IonicModule, BcrPageRoutingModule],
+ declarations: [BcrPage],
+ providers: [FileChooser, HMSMLText]
+})
+export class BcrPageModule {}
diff --git a/cordova-plugin-hms-mltext/example/ionic/src/app/bcr/bcr.page.html b/cordova-plugin-hms-mltext/example/ionic/src/app/bcr/bcr.page.html
new file mode 100644
index 00000000..c4a9889b
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/ionic/src/app/bcr/bcr.page.html
@@ -0,0 +1,55 @@
+
+
+
+ Bankcard Recognition
+
+
+
+
+
+
+
+
+
+ Card Number
+
+
+
+ Card Expire
+
+
+
+ Recognized Image Saved URI
+
+
+
+
+
+ Select Image
+
+
+ Start Recognition
+
+
+ Stop Recognition
+
+
+ Custom View
+
+
+
+
\ No newline at end of file
diff --git a/cordova-plugin-hms-mltext/example/ionic/src/app/bcr/bcr.page.scss b/cordova-plugin-hms-mltext/example/ionic/src/app/bcr/bcr.page.scss
new file mode 100644
index 00000000..8e216e13
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/ionic/src/app/bcr/bcr.page.scss
@@ -0,0 +1,19 @@
+/*
+ Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License")
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+.inputDiv{
+ border:2px solid black;
+ margin-top: 12px;
+}
\ No newline at end of file
diff --git a/cordova-plugin-hms-mltext/example/ionic/src/app/bcr/bcr.page.spec.ts b/cordova-plugin-hms-mltext/example/ionic/src/app/bcr/bcr.page.spec.ts
new file mode 100644
index 00000000..00ba0e2b
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/ionic/src/app/bcr/bcr.page.spec.ts
@@ -0,0 +1,38 @@
+/*
+ Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License")
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+import { IonicModule } from '@ionic/angular';
+import { BcrPage } from './bcr.page';
+
+describe('BcrPage', () => {
+ let component: BcrPage;
+ let fixture: ComponentFixture;
+
+ beforeEach(async(() => {
+ TestBed.configureTestingModule({
+ declarations: [ BcrPage ],
+ imports: [IonicModule.forRoot()]
+ }).compileComponents();
+
+ fixture = TestBed.createComponent(BcrPage);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ }));
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/cordova-plugin-hms-mltext/example/ionic/src/app/bcr/bcr.page.ts b/cordova-plugin-hms-mltext/example/ionic/src/app/bcr/bcr.page.ts
new file mode 100644
index 00000000..8bc1b583
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/ionic/src/app/bcr/bcr.page.ts
@@ -0,0 +1,110 @@
+/*
+ Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License")
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+import { Component, OnInit } from '@angular/core';
+import { FileChooser } from '@ionic-native/file-chooser/ngx';
+
+declare var HMSMLText;
+@Component({
+ selector: 'app-bcr',
+ templateUrl: './bcr.page.html',
+ styleUrls: ['./bcr.page.scss'],
+})
+export class BcrPage {
+ toggle: boolean = false;
+ filePath: string = "";
+ toogleName: string = "";
+ cardNumber:string;
+ cardExpire:string;
+ cardURI:string;
+
+ constructor(private fileChooser: FileChooser) {
+ this.toogleName = "Device";
+ }
+ public async changeToogle() {
+ if (this.toggle == false) {
+ this.toogleName = "Plugin";
+ } else {
+ this.toogleName = "Device";
+ }
+ }
+
+
+ public async getFile() {
+ this.fileChooser.open()
+ .then(uri => this.filePath = uri)
+ .catch(e => console.log(e));
+ }
+
+ public async bankCardDetector() {
+ var bankCardSDKDetectorInput = {
+ detectType: 0,
+ filePath: this.filePath,
+ mLBcrAnalyzerSetting: {
+ langType: "zh"
+ },
+ };
+ var bankCardPluginDetectorInput = {
+ detectType: 1,
+ mLBcrCaptureConfig: {
+ orientation: HMSMLText.MLBcrCaptureConfig.ORIENTATION_AUTO,
+ },
+ };
+ try {
+ if (this.toggle == false) {
+ var result = await HMSMLText.bankCardDetector(bankCardSDKDetectorInput);
+ } else {
+ result = await HMSMLText.bankCardDetector(bankCardPluginDetectorInput);
+ }
+ this.cardNumber=JSON.stringify(result.number);
+ this.cardExpire= JSON.stringify(result.expire);
+ this.cardURI=JSON.stringify(result.originalBitmap);
+ } catch (ex) {
+ alert(ex)
+ }
+ }
+
+ public async stopbankCardDetector() {
+
+ try {
+ alert(await HMSMLText.stopBankCardDetector());
+ } catch (ex) {
+ alert(ex)
+ }
+ }
+
+
+
+ public async startCustomViewMode() {
+ var customViewModeRequest = {
+ isTitleAvailable: true,
+ title: "Place the card within the frame",
+ heightFactor: 0.8,
+ widthFactor: 0.8,
+ isFlashAvailable: true,
+ resultType: HMSMLText.MLBcrResultConfig.RESULT_ALL,
+ recMode: HMSMLText.RecMode.WEAK_MODE,
+ };
+ try {
+ var result = await HMSMLText.startCustomizedView(customViewModeRequest);
+ this.cardNumber=JSON.stringify(result.number);
+ this.cardExpire= JSON.stringify(result.expire);
+ this.cardURI=JSON.stringify(result.originalBitmap);
+ } catch (ex) {
+ alert(ex)
+ }
+ }
+
+}
diff --git a/cordova-plugin-hms-mltext/example/ionic/src/app/document/document-routing.module.ts b/cordova-plugin-hms-mltext/example/ionic/src/app/document/document-routing.module.ts
new file mode 100644
index 00000000..9d636852
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/ionic/src/app/document/document-routing.module.ts
@@ -0,0 +1,31 @@
+/*
+ Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License")
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+import { NgModule } from '@angular/core';
+import { Routes, RouterModule } from '@angular/router';
+import { DocumentPage } from './document.page';
+
+const routes: Routes = [
+ {
+ path: '',
+ component: DocumentPage
+ }
+];
+
+@NgModule({
+ imports: [RouterModule.forChild(routes)],
+ exports: [RouterModule],
+})
+export class DocumentPageRoutingModule {}
diff --git a/cordova-plugin-hms-mltext/example/ionic/src/app/document/document.module.ts b/cordova-plugin-hms-mltext/example/ionic/src/app/document/document.module.ts
new file mode 100644
index 00000000..27c998df
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/ionic/src/app/document/document.module.ts
@@ -0,0 +1,30 @@
+/*
+ Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License")
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+import { NgModule } from "@angular/core";
+import { CommonModule } from "@angular/common";
+import { FormsModule } from "@angular/forms";
+import { FileChooser } from "@ionic-native/file-chooser/ngx";
+import { IonicModule } from "@ionic/angular";
+import { HMSMLText } from "@hmscore/ionic-native-hms-mltext/ngx";
+import { DocumentPageRoutingModule } from "./document-routing.module";
+import { DocumentPage } from "./document.page";
+
+@NgModule({
+ imports: [CommonModule, FormsModule, IonicModule, DocumentPageRoutingModule],
+ declarations: [DocumentPage],
+ providers: [FileChooser, HMSMLText]
+})
+export class DocumentPageModule {}
diff --git a/cordova-plugin-hms-mltext/example/ionic/src/app/document/document.page.html b/cordova-plugin-hms-mltext/example/ionic/src/app/document/document.page.html
new file mode 100644
index 00000000..c48b2e10
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/ionic/src/app/document/document.page.html
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
+ Select Image
+
+
+
+ Start Analyse
+
+
diff --git a/cordova-plugin-hms-mltext/example/ionic/src/app/document/document.page.scss b/cordova-plugin-hms-mltext/example/ionic/src/app/document/document.page.scss
new file mode 100644
index 00000000..60547ee2
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/ionic/src/app/document/document.page.scss
@@ -0,0 +1,15 @@
+/*
+ Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License")
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
\ No newline at end of file
diff --git a/cordova-plugin-hms-mltext/example/ionic/src/app/document/document.page.spec.ts b/cordova-plugin-hms-mltext/example/ionic/src/app/document/document.page.spec.ts
new file mode 100644
index 00000000..b83fa983
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/ionic/src/app/document/document.page.spec.ts
@@ -0,0 +1,39 @@
+/*
+ Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License")
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+import { IonicModule } from '@ionic/angular';
+import { DocumentPage } from './document.page';
+
+describe('DocumentPage', () => {
+ let component: DocumentPage;
+ let fixture: ComponentFixture;
+
+ beforeEach(async(() => {
+ TestBed.configureTestingModule({
+ declarations: [ DocumentPage ],
+ imports: [IonicModule.forRoot()]
+ }).compileComponents();
+
+ fixture = TestBed.createComponent(DocumentPage);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ }));
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/cordova-plugin-hms-mltext/example/ionic/src/app/document/document.page.ts b/cordova-plugin-hms-mltext/example/ionic/src/app/document/document.page.ts
new file mode 100644
index 00000000..28e8d7e5
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/ionic/src/app/document/document.page.ts
@@ -0,0 +1,52 @@
+/*
+ Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License")
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+import { Component, OnInit } from '@angular/core';
+import { FileChooser } from '@ionic-native/file-chooser/ngx';
+declare var HMSMLText;
+@Component({
+ selector: 'app-document',
+ templateUrl: './document.page.html',
+ styleUrls: ['./document.page.scss'],
+})
+export class DocumentPage {
+ imageResult: string = "";
+ documentRecognitionOutput: string = "";
+ constructor(private fileChooser: FileChooser ) { }
+
+ public async getFile() {
+ this.fileChooser.open()
+ .then(uri => this.imageResult = uri)
+ .catch(e => console.log(e));
+ }
+
+ public async getDocumentImageAnalyser() {
+ var documentImageAnalyserInput = {
+ documentSetting: {
+ borderType: HMSMLText.MLRemoteTextSetting.ARC,
+ LanguageList: ["en", "zh", "tr"],
+ enableFingerprintVerification:true
+ },
+ filePath: this.imageResult
+ };
+ try {
+ const result = await HMSMLText.documentImageAnalyser(documentImageAnalyserInput);
+ this.documentRecognitionOutput = JSON.stringify(result.stringValue);
+ } catch (ex) {
+ alert(ex)
+ }
+ }
+
+}
diff --git a/cordova-plugin-hms-mltext/example/ionic/src/app/formrecognition/formrecognition-routing.module.ts b/cordova-plugin-hms-mltext/example/ionic/src/app/formrecognition/formrecognition-routing.module.ts
new file mode 100644
index 00000000..0ecc926d
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/ionic/src/app/formrecognition/formrecognition-routing.module.ts
@@ -0,0 +1,32 @@
+/*
+ Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License")
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+import { NgModule } from '@angular/core';
+import { Routes, RouterModule } from '@angular/router';
+
+import { FormrecognitionPage } from './formrecognition.page';
+
+const routes: Routes = [
+ {
+ path: '',
+ component: FormrecognitionPage
+ }
+];
+
+@NgModule({
+ imports: [RouterModule.forChild(routes)],
+ exports: [RouterModule],
+})
+export class FormrecognitionPageRoutingModule {}
diff --git a/cordova-plugin-hms-mltext/example/ionic/src/app/formrecognition/formrecognition.module.ts b/cordova-plugin-hms-mltext/example/ionic/src/app/formrecognition/formrecognition.module.ts
new file mode 100644
index 00000000..be651e79
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/ionic/src/app/formrecognition/formrecognition.module.ts
@@ -0,0 +1,31 @@
+/*
+ Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License")
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+import { NgModule } from "@angular/core";
+import { CommonModule } from "@angular/common";
+import { FormsModule } from "@angular/forms";
+import { FileChooser } from "@ionic-native/file-chooser/ngx";
+import { IonicModule } from "@ionic/angular";
+import { HMSMLText } from "@hmscore/ionic-native-hms-mltext/ngx";
+import { FormrecognitionPageRoutingModule } from "./formrecognition-routing.module";
+
+import { FormrecognitionPage } from "./formrecognition.page";
+
+@NgModule({
+ imports: [CommonModule, FormsModule, IonicModule, FormrecognitionPageRoutingModule],
+ declarations: [FormrecognitionPage],
+ providers: [FileChooser, HMSMLText]
+})
+export class FormrecognitionPageModule {}
diff --git a/cordova-plugin-hms-mltext/example/ionic/src/app/formrecognition/formrecognition.page.html b/cordova-plugin-hms-mltext/example/ionic/src/app/formrecognition/formrecognition.page.html
new file mode 100644
index 00000000..e44e3c64
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/ionic/src/app/formrecognition/formrecognition.page.html
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
+ Select Image
+
+
+
+ Start Analyse
+
+
diff --git a/cordova-plugin-hms-mltext/example/ionic/src/app/formrecognition/formrecognition.page.scss b/cordova-plugin-hms-mltext/example/ionic/src/app/formrecognition/formrecognition.page.scss
new file mode 100644
index 00000000..60547ee2
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/ionic/src/app/formrecognition/formrecognition.page.scss
@@ -0,0 +1,15 @@
+/*
+ Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License")
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
\ No newline at end of file
diff --git a/cordova-plugin-hms-mltext/example/ionic/src/app/formrecognition/formrecognition.page.spec.ts b/cordova-plugin-hms-mltext/example/ionic/src/app/formrecognition/formrecognition.page.spec.ts
new file mode 100644
index 00000000..b7787f33
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/ionic/src/app/formrecognition/formrecognition.page.spec.ts
@@ -0,0 +1,39 @@
+/*
+ Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License")
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+import { IonicModule } from '@ionic/angular';
+
+import { FormrecognitionPage } from './formrecognition.page';
+
+describe('FormrecognitionPage', () => {
+ let component: FormrecognitionPage;
+ let fixture: ComponentFixture;
+
+ beforeEach(async(() => {
+ TestBed.configureTestingModule({
+ declarations: [ FormrecognitionPage ],
+ imports: [IonicModule.forRoot()]
+ }).compileComponents();
+
+ fixture = TestBed.createComponent(FormrecognitionPage);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ }));
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/cordova-plugin-hms-mltext/example/ionic/src/app/formrecognition/formrecognition.page.ts b/cordova-plugin-hms-mltext/example/ionic/src/app/formrecognition/formrecognition.page.ts
new file mode 100644
index 00000000..4231406c
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/ionic/src/app/formrecognition/formrecognition.page.ts
@@ -0,0 +1,50 @@
+/*
+ Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License")
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+import { Component, OnInit } from '@angular/core';
+import { FileChooser } from '@ionic-native/file-chooser/ngx';
+declare var HMSMLText;
+@Component({
+ selector: 'app-formrecognition',
+ templateUrl: './formrecognition.page.html',
+ styleUrls: ['./formrecognition.page.scss'],
+})
+export class FormrecognitionPage{
+
+ imageResult: string = "";
+ formRecognitionOutput: string = "";
+ constructor(private fileChooser: FileChooser) { }
+
+ public async getFile() {
+ this.fileChooser.open()
+ .then(uri => this.imageResult = uri)
+ .catch(e => console.log(e));
+ }
+
+ public async formRecognitionAnalyser() {
+ var formRecognitionreq = {
+ filePath: this.imageResult,
+ syncType:0
+ };
+ try {
+ var result = await HMSMLText.formRecognitionAnalyser(formRecognitionreq);
+ this.formRecognitionOutput = JSON.stringify(result);
+ } catch (ex) {
+ alert(ex)
+ }
+ }
+
+
+}
diff --git a/cordova-plugin-hms-mltext/example/ionic/src/app/generalcard/generalcard-routing.module.ts b/cordova-plugin-hms-mltext/example/ionic/src/app/generalcard/generalcard-routing.module.ts
new file mode 100644
index 00000000..ccb23626
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/ionic/src/app/generalcard/generalcard-routing.module.ts
@@ -0,0 +1,31 @@
+/*
+ Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License")
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+import { NgModule } from '@angular/core';
+import { Routes, RouterModule } from '@angular/router';
+import { GeneralcardPage } from './generalcard.page';
+
+const routes: Routes = [
+ {
+ path: '',
+ component: GeneralcardPage
+ }
+];
+
+@NgModule({
+ imports: [RouterModule.forChild(routes)],
+ exports: [RouterModule],
+})
+export class GeneralcardPageRoutingModule {}
diff --git a/cordova-plugin-hms-mltext/example/ionic/src/app/generalcard/generalcard.module.ts b/cordova-plugin-hms-mltext/example/ionic/src/app/generalcard/generalcard.module.ts
new file mode 100644
index 00000000..dc7ea9ea
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/ionic/src/app/generalcard/generalcard.module.ts
@@ -0,0 +1,29 @@
+/*
+ Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License")
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+import { NgModule } from "@angular/core";
+import { CommonModule } from "@angular/common";
+import { FormsModule } from "@angular/forms";
+import { IonicModule } from "@ionic/angular";
+import { HMSMLText } from "@hmscore/ionic-native-hms-mltext/ngx";
+import { GeneralcardPageRoutingModule } from "./generalcard-routing.module";
+import { GeneralcardPage } from "./generalcard.page";
+
+@NgModule({
+ imports: [CommonModule, FormsModule, IonicModule, GeneralcardPageRoutingModule],
+ declarations: [GeneralcardPage],
+ providers: [HMSMLText]
+})
+export class GeneralcardPageModule {}
diff --git a/cordova-plugin-hms-mltext/example/ionic/src/app/generalcard/generalcard.page.html b/cordova-plugin-hms-mltext/example/ionic/src/app/generalcard/generalcard.page.html
new file mode 100644
index 00000000..8917b8df
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/ionic/src/app/generalcard/generalcard.page.html
@@ -0,0 +1,33 @@
+
+
+
+ Generalcard Recognition
+
+
+
+
+
+
+
+
+
+
+ Start Recognition
+
+
+
+
diff --git a/cordova-plugin-hms-mltext/example/ionic/src/app/generalcard/generalcard.page.scss b/cordova-plugin-hms-mltext/example/ionic/src/app/generalcard/generalcard.page.scss
new file mode 100644
index 00000000..60547ee2
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/ionic/src/app/generalcard/generalcard.page.scss
@@ -0,0 +1,15 @@
+/*
+ Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License")
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
\ No newline at end of file
diff --git a/cordova-plugin-hms-mltext/example/ionic/src/app/generalcard/generalcard.page.spec.ts b/cordova-plugin-hms-mltext/example/ionic/src/app/generalcard/generalcard.page.spec.ts
new file mode 100644
index 00000000..5d258dd1
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/ionic/src/app/generalcard/generalcard.page.spec.ts
@@ -0,0 +1,38 @@
+/*
+ Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License")
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+import { IonicModule } from '@ionic/angular';
+import { GeneralcardPage } from './generalcard.page';
+
+describe('GeneralcardPage', () => {
+ let component: GeneralcardPage;
+ let fixture: ComponentFixture;
+
+ beforeEach(async(() => {
+ TestBed.configureTestingModule({
+ declarations: [ GeneralcardPage ],
+ imports: [IonicModule.forRoot()]
+ }).compileComponents();
+
+ fixture = TestBed.createComponent(GeneralcardPage);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ }));
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/cordova-plugin-hms-mltext/example/ionic/src/app/generalcard/generalcard.page.ts b/cordova-plugin-hms-mltext/example/ionic/src/app/generalcard/generalcard.page.ts
new file mode 100644
index 00000000..cc7feb89
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/ionic/src/app/generalcard/generalcard.page.ts
@@ -0,0 +1,48 @@
+/*
+ Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License")
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+import { Component } from '@angular/core';
+declare var HMSMLText;
+@Component({
+ selector: 'app-generalcard',
+ templateUrl: './generalcard.page.html',
+ styleUrls: ['./generalcard.page.scss'],
+})
+export class GeneralcardPage {
+ gcrCardRecognitionOutput: string = "";
+ constructor() { }
+
+ public async generalCardDetector() {
+ var generalCardDetectorInput = {
+ gcrCaptureConfig: {
+ language: "en",
+ },
+ gcrCaptureUIConfig: {
+ orientation: HMSMLText.MLGcrCaptureUIConfig.ORIENTATION_AUTO,
+ tipTextColor: HMSMLText.Colors.GREEN,
+ tipText: "Scan a card",
+ scanBoxCornerColor: HMSMLText.Colors.BLUE,
+ }
+ };
+ try {
+ const result = await HMSMLText.generalCardDetector(generalCardDetectorInput);
+ this.gcrCardRecognitionOutput = JSON.stringify(result.text);
+ console.log(JSON.stringify(result));
+ } catch (ex) {
+ alert(ex)
+ }
+ }
+
+}
diff --git a/cordova-plugin-hms-mltext/example/ionic/src/app/home/home-routing.module.ts b/cordova-plugin-hms-mltext/example/ionic/src/app/home/home-routing.module.ts
new file mode 100644
index 00000000..d2ab2fd4
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/ionic/src/app/home/home-routing.module.ts
@@ -0,0 +1,33 @@
+/*
+ Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License")
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+import { NgModule } from '@angular/core';
+import { RouterModule, Routes } from '@angular/router';
+import { HomePage } from './home.page';
+
+const routes: Routes = [
+ {
+ path: '',
+ component: HomePage,
+ },
+
+];
+
+@NgModule({
+ imports: [RouterModule.forChild(routes)],
+ exports: [RouterModule]
+})
+export class HomePageRoutingModule {}
diff --git a/cordova-plugin-hms-mltext/example/ionic/src/app/home/home.module.ts b/cordova-plugin-hms-mltext/example/ionic/src/app/home/home.module.ts
new file mode 100644
index 00000000..0dccd1c7
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/ionic/src/app/home/home.module.ts
@@ -0,0 +1,33 @@
+/*
+ Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License")
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+import { NgModule } from '@angular/core';
+import { CommonModule } from '@angular/common';
+import { IonicModule } from '@ionic/angular';
+import { FormsModule } from '@angular/forms';
+import { HomePage } from './home.page';
+import { HomePageRoutingModule } from './home-routing.module';
+
+@NgModule({
+ imports: [
+ CommonModule,
+ FormsModule,
+ IonicModule,
+ HomePageRoutingModule
+ ],
+ declarations: [HomePage]
+})
+export class HomePageModule {}
diff --git a/cordova-plugin-hms-mltext/example/ionic/src/app/home/home.page.html b/cordova-plugin-hms-mltext/example/ionic/src/app/home/home.page.html
new file mode 100644
index 00000000..ce748f77
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/ionic/src/app/home/home.page.html
@@ -0,0 +1,84 @@
+
+
+
+
+ HMS ML Text
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ BCR
+
+
+
+
+
+
+ Text
+
+
+
+
+
+
+ Document
+
+
+
+
+
+
+ General Card
+
+
+
+
+
+
+ Form Recog.
+
+
+
+
+
+
+ ICR VN.
+
+
+
+
+
+
+
+ ICR CN.
+
+
+
+
+
+
\ No newline at end of file
diff --git a/cordova-plugin-hms-mltext/example/ionic/src/app/home/home.page.scss b/cordova-plugin-hms-mltext/example/ionic/src/app/home/home.page.scss
new file mode 100644
index 00000000..5bef5ac8
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/ionic/src/app/home/home.page.scss
@@ -0,0 +1,272 @@
+/*
+ Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License")
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+#container {
+ text-align: center;
+
+ position: absolute;
+ left: 0;
+ right: 0;
+ top: 150%;
+ transform: translateY(-50%);
+}
+
+#container strong {
+ font-size: 20px;
+ line-height: 26px;
+}
+
+#container p {
+ font-size: 16px;
+ line-height: 22px;
+ color: #8c8c8c;
+
+ margin: 0;
+}
+
+#container a {
+ text-decoration: none;
+}
+
+/*Index.html buttons and div css */
+.clear {clear: both; }
+
+.textAlignDiv { text-align: center; }
+
+.textProp { font-size: 18px; }
+
+.selectedTextProp {
+ font-size: 14px;
+ font-weight: bold;
+ margin-top: 3px;
+}
+.twoDivProp {
+ width: 40%;
+ display: inline-block;
+}
+.main_div {
+ width: 100%;
+ margin-right: auto;
+ margin-left: auto;
+ background-color: gray;
+ margin-top: 3px;
+}
+.div {
+ display: inline-block;
+ width: 47%;
+ color: #FFF;
+}
+.threeDivProp {
+ width: 30%;
+}
+.fourDivProp{
+ width: 24%;
+}
+.btn {
+ margin-top: 5px;
+ display: block;
+ background-color: cornflowerblue;
+ color: white;
+ width: 100%;
+ height: 50px;
+ border: none;
+}
+
+.segmentImgCss {
+ height: 250px;
+ width: 100%;
+}
+
+.mllogo {
+ text-align: center;
+ margin-top: 20px;
+ margin-bottom: 30px;
+}
+
+.imgDiv {
+ margin-bottom: 10px;
+}
+
+.mllogoText {
+ font-weight: bold;
+ margin-top: 20px;
+}
+
+.servicesDiv {
+ margin-left: 20px;
+ height: 80px;
+ width: 90px;
+ border: 1px solid gray;
+ border-radius: 5px;
+ position: relative;
+ background-color: whitesmoke;
+ color: #c4142c;
+}
+
+.servicesImg {
+ height: 50px;
+ width: 70px;
+ position: absolute;
+ left: 10px;
+ top: 5px;
+ margin: auto;
+ text-align: center;
+}
+
+.servicesImgText {
+ position: absolute;
+ left: 30px;
+ bottom: 1px;
+}
+
+.newPageHref {
+ float: left;
+ margin-top: 15px;
+}
+
+.divText {
+ border: 2px solid black;
+ padding: 5px;
+}
+
+input[type=text] {
+ width: 100%;
+ font-size: 20px;
+}
+
+.switch {
+ position: relative;
+ display: inline-block;
+ width: 60px;
+ height: 34px;
+}
+
+.switch input {
+ opacity: 0;
+ width: 0;
+ height: 0;
+}
+
+.slider {
+ position: absolute;
+ cursor: pointer;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ background-color: #ccc;
+ -webkit-transition: .4s;
+ transition: .4s;
+}
+
+.slider:before {
+ position: absolute;
+ content: "";
+ height: 26px;
+ width: 26px;
+ left: 4px;
+ bottom: 4px;
+ background-color: white;
+ -webkit-transition: .4s;
+ transition: .4s;
+}
+
+input:checked+.slider {
+ background-color: #2196F3;
+}
+
+input:focus+.slider {
+ box-shadow: 0 0 1px #2196F3;
+}
+
+input:checked+.slider:before {
+ -webkit-transform: translateX(26px);
+ -ms-transform: translateX(26px);
+ transform: translateX(26px);
+}
+
+/* Rounded sliders */
+.slider.round {
+ border-radius: 34px;
+}
+
+.slider.round:before {
+ border-radius: 50%;
+}
+
+.mllogo {
+ text-align: center;
+ margin-left: 20px;
+ height: 80px;
+ width: 90px;
+ border-radius: 5px;
+ position: relative;
+}
+
+.imgDiv {
+ margin-bottom: 10px;
+}
+
+.mllogoText {
+ font-weight: bold;
+ margin-top: 20px;
+}
+
+.servicesDiv {
+ margin-left: 20px;
+ height: 90px;
+ width: 90px;
+ border: 1px solid gray;
+ border-radius: 5px;
+ position: relative;
+ background-color: whitesmoke;
+ color: #c4142c;
+}
+
+.servicesImg {
+ height: 50px;
+ width: 70px;
+ position: absolute;
+ left: 10px;
+ top: 5px;
+ margin: auto;
+ text-align: center;
+}
+
+.servicesImgText {
+ position: absolute;
+ left: 30px;
+ bottom: 1px;
+}
+
+.newPageHref {
+ float: left;
+ margin-top: 15px;
+}
+
+.logoImg {
+ width:100%;
+ height:auto;
+ max-width: 300px;
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+
+.faceCss{
+ height: 50px;
+ width: 70px;
+ text-align: center;
+}
\ No newline at end of file
diff --git a/cordova-plugin-hms-mltext/example/ionic/src/app/home/home.page.spec.ts b/cordova-plugin-hms-mltext/example/ionic/src/app/home/home.page.spec.ts
new file mode 100644
index 00000000..62c66a26
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/ionic/src/app/home/home.page.spec.ts
@@ -0,0 +1,39 @@
+/*
+ Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License")
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+import { IonicModule } from '@ionic/angular';
+import { HomePage } from './home.page';
+
+describe('HomePage', () => {
+ let component: HomePage;
+ let fixture: ComponentFixture;
+
+ beforeEach(async(() => {
+ TestBed.configureTestingModule({
+ declarations: [ HomePage ],
+ imports: [IonicModule.forRoot()]
+ }).compileComponents();
+
+ fixture = TestBed.createComponent(HomePage);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ }));
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/cordova-plugin-hms-mltext/example/ionic/src/app/home/home.page.ts b/cordova-plugin-hms-mltext/example/ionic/src/app/home/home.page.ts
new file mode 100644
index 00000000..08b34267
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/ionic/src/app/home/home.page.ts
@@ -0,0 +1,57 @@
+/*
+ Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License")
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+import { Component } from "@angular/core";
+import { Router } from "@angular/router";
+import { Platform } from "@ionic/angular";
+declare var HMSMLTextPlugin;
+@Component({
+ selector: "app-home",
+ templateUrl: "home.page.html",
+ styleUrls: ["home.page.scss"],
+})
+export class HomePage {
+ constructor(private router: Router, public platform: Platform) {}
+ ionViewWillEnter() {
+ this.platform.ready().then(() => {
+ var configInput = {
+ apiKey: "your_apiKey",
+ };
+ HMSMLTextPlugin.serviceInitializer(configInput);
+ });
+ }
+
+ bcrPage() {
+ this.router.navigate(["bcr"]);
+ }
+ textPage() {
+ this.router.navigate(["text"]);
+ }
+ documentPage() {
+ this.router.navigate(["document"]);
+ }
+ gcrPage() {
+ this.router.navigate(["generalcard"]);
+ }
+ formRecogPage() {
+ this.router.navigate(["formrecognition"]);
+ }
+ icrVnPage() {
+ this.router.navigate(["icrVn"]);
+ }
+ icrCnPage() {
+ this.router.navigate(["icrCn"]);
+ }
+}
diff --git a/cordova-plugin-hms-mltext/example/ionic/src/app/icrCn/icrCn-routing.module.ts b/cordova-plugin-hms-mltext/example/ionic/src/app/icrCn/icrCn-routing.module.ts
new file mode 100644
index 00000000..962bdfaf
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/ionic/src/app/icrCn/icrCn-routing.module.ts
@@ -0,0 +1,31 @@
+/*
+ Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License")
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+import { NgModule } from "@angular/core";
+import { Routes, RouterModule } from "@angular/router";
+import { icrCnPage } from "./icrCn.page";
+
+const routes: Routes = [
+ {
+ path: "",
+ component: icrCnPage,
+ },
+];
+
+@NgModule({
+ imports: [RouterModule.forChild(routes)],
+ exports: [RouterModule],
+})
+export class icrCnRoutingModule {}
diff --git a/cordova-plugin-hms-mltext/example/ionic/src/app/icrCn/icrCn.module.ts b/cordova-plugin-hms-mltext/example/ionic/src/app/icrCn/icrCn.module.ts
new file mode 100644
index 00000000..3666c903
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/ionic/src/app/icrCn/icrCn.module.ts
@@ -0,0 +1,30 @@
+/*
+ Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License")
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+import { NgModule } from "@angular/core";
+import { CommonModule } from "@angular/common";
+import { FormsModule } from "@angular/forms";
+import { FileChooser } from "@ionic-native/file-chooser/ngx";
+import { IonicModule } from "@ionic/angular";
+import { HMSMLText } from "@hmscore/ionic-native-hms-mltext/ngx";
+import { icrCnRoutingModule } from "./icrCn-routing.module";
+import { icrCnPage } from "./icrCn.page";
+
+@NgModule({
+ imports: [CommonModule, FormsModule, IonicModule, icrCnRoutingModule],
+ declarations: [icrCnPage],
+ providers: [FileChooser, HMSMLText],
+})
+export class icrCnPageModule {}
diff --git a/cordova-plugin-hms-mltext/example/ionic/src/app/icrCn/icrCn.page.html b/cordova-plugin-hms-mltext/example/ionic/src/app/icrCn/icrCn.page.html
new file mode 100644
index 00000000..850b5e18
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/ionic/src/app/icrCn/icrCn.page.html
@@ -0,0 +1,34 @@
+
+
+
+ ICR Cn
+
+
+
+ ICR Cn Detect
+
+
+
+ Select ICR Cn Picture
+
+
+ Capture Image
+
+
+
+
+
diff --git a/cordova-plugin-hms-mltext/example/ionic/src/app/icrCn/icrCn.page.scss b/cordova-plugin-hms-mltext/example/ionic/src/app/icrCn/icrCn.page.scss
new file mode 100644
index 00000000..60547ee2
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/ionic/src/app/icrCn/icrCn.page.scss
@@ -0,0 +1,15 @@
+/*
+ Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License")
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
\ No newline at end of file
diff --git a/cordova-plugin-hms-mltext/example/ionic/src/app/icrCn/icrCn.page.spec.ts b/cordova-plugin-hms-mltext/example/ionic/src/app/icrCn/icrCn.page.spec.ts
new file mode 100644
index 00000000..6504d3f0
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/ionic/src/app/icrCn/icrCn.page.spec.ts
@@ -0,0 +1,38 @@
+/*
+ Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License")
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+import { async, ComponentFixture, TestBed } from "@angular/core/testing";
+import { IonicModule } from "@ionic/angular";
+import { icrCnPage } from "./icrCn.page";
+
+describe("icrCnPage", () => {
+ let component: icrCnPage;
+ let fixture: ComponentFixture;
+
+ beforeEach(async(() => {
+ TestBed.configureTestingModule({
+ declarations: [icrCnPage],
+ imports: [IonicModule.forRoot()],
+ }).compileComponents();
+
+ fixture = TestBed.createComponent(icrCnPage);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ }));
+
+ it("should create", () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/cordova-plugin-hms-mltext/example/ionic/src/app/icrCn/icrCn.page.ts b/cordova-plugin-hms-mltext/example/ionic/src/app/icrCn/icrCn.page.ts
new file mode 100644
index 00000000..ccbc55c3
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/ionic/src/app/icrCn/icrCn.page.ts
@@ -0,0 +1,64 @@
+/*
+ Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License")
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+import { Component, OnInit } from "@angular/core";
+import { FileChooser } from "@ionic-native/file-chooser/ngx";
+declare var HMSMLText;
+@Component({
+ selector: "app-face",
+ templateUrl: "./icrCn.page.html",
+ styleUrls: ["./icrCn.page.scss"],
+})
+export class icrCnPage {
+ filePath: string = "";
+
+ constructor(private fileChooser: FileChooser) {}
+
+ public async getFile() {
+ this.fileChooser
+ .open()
+ .then((uri) => (this.filePath = uri))
+ .catch((e) => console.log(e));
+ }
+
+ public async captureImage() {
+ var icrCnDetectorReq = {
+ captureType: 1,
+ filePath: this.filePath,
+ };
+ try {
+ const result = await HMSMLText.icrCnCardDetector(
+ icrCnDetectorReq
+ );
+ alert(JSON.stringify(result));
+ console.log(JSON.stringify(result));
+ } catch (Ex) {
+ alert(JSON.stringify(Ex));
+ }
+ }
+
+ public async icrCnDetector() {
+ var icrCnDetectorReq = {};
+ try {
+ alert(
+ JSON.stringify(
+ await HMSMLText.icrCnCardDetector(icrCnDetectorReq)
+ )
+ );
+ } catch (ex) {
+ alert(JSON.stringify(ex));
+ }
+ }
+}
diff --git a/cordova-plugin-hms-mltext/example/ionic/src/app/icrVn/icrVn-routing.module.ts b/cordova-plugin-hms-mltext/example/ionic/src/app/icrVn/icrVn-routing.module.ts
new file mode 100644
index 00000000..97174768
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/ionic/src/app/icrVn/icrVn-routing.module.ts
@@ -0,0 +1,31 @@
+/*
+ Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License")
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+import { NgModule } from "@angular/core";
+import { Routes, RouterModule } from "@angular/router";
+import { icrVnPage } from "./icrVn.page";
+
+const routes: Routes = [
+ {
+ path: "",
+ component: icrVnPage,
+ },
+];
+
+@NgModule({
+ imports: [RouterModule.forChild(routes)],
+ exports: [RouterModule],
+})
+export class icrVnRoutingModule {}
diff --git a/cordova-plugin-hms-mltext/example/ionic/src/app/icrVn/icrVn.module.ts b/cordova-plugin-hms-mltext/example/ionic/src/app/icrVn/icrVn.module.ts
new file mode 100644
index 00000000..7722eb15
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/ionic/src/app/icrVn/icrVn.module.ts
@@ -0,0 +1,30 @@
+/*
+ Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License")
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+import { NgModule } from "@angular/core";
+import { CommonModule } from "@angular/common";
+import { FormsModule } from "@angular/forms";
+import { FileChooser } from "@ionic-native/file-chooser/ngx";
+import { IonicModule } from "@ionic/angular";
+import { HMSMLText } from "@hmscore/ionic-native-hms-mltext/ngx";
+import { icrVnRoutingModule } from "./icrVn-routing.module";
+import { icrVnPage } from "./icrVn.page";
+
+@NgModule({
+ imports: [CommonModule, FormsModule, IonicModule, icrVnRoutingModule],
+ declarations: [icrVnPage],
+ providers: [FileChooser, HMSMLText],
+})
+export class icrVnPageModule {}
diff --git a/cordova-plugin-hms-mltext/example/ionic/src/app/icrVn/icrVn.page.html b/cordova-plugin-hms-mltext/example/ionic/src/app/icrVn/icrVn.page.html
new file mode 100644
index 00000000..90aa0081
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/ionic/src/app/icrVn/icrVn.page.html
@@ -0,0 +1,35 @@
+
+
+
+ ICR VN
+
+
+
+ ICR VN Detect
+
+
+
+ Select ICR VN Picture
+
+
+ Capture Image
+
+
+
+
+
+
diff --git a/cordova-plugin-hms-mltext/example/ionic/src/app/icrVn/icrVn.page.scss b/cordova-plugin-hms-mltext/example/ionic/src/app/icrVn/icrVn.page.scss
new file mode 100644
index 00000000..60547ee2
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/ionic/src/app/icrVn/icrVn.page.scss
@@ -0,0 +1,15 @@
+/*
+ Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License")
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
\ No newline at end of file
diff --git a/cordova-plugin-hms-mltext/example/ionic/src/app/icrVn/icrVn.page.spec.ts b/cordova-plugin-hms-mltext/example/ionic/src/app/icrVn/icrVn.page.spec.ts
new file mode 100644
index 00000000..86995dc3
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/ionic/src/app/icrVn/icrVn.page.spec.ts
@@ -0,0 +1,38 @@
+/*
+ Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License")
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+import { async, ComponentFixture, TestBed } from "@angular/core/testing";
+import { IonicModule } from "@ionic/angular";
+import { icrVnPage } from "./icrVn.page";
+
+describe("icrVnPage", () => {
+ let component: icrVnPage;
+ let fixture: ComponentFixture;
+
+ beforeEach(async(() => {
+ TestBed.configureTestingModule({
+ declarations: [icrVnPage],
+ imports: [IonicModule.forRoot()],
+ }).compileComponents();
+
+ fixture = TestBed.createComponent(icrVnPage);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ }));
+
+ it("should create", () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/cordova-plugin-hms-mltext/example/ionic/src/app/icrVn/icrVn.page.ts b/cordova-plugin-hms-mltext/example/ionic/src/app/icrVn/icrVn.page.ts
new file mode 100644
index 00000000..81c3eca5
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/ionic/src/app/icrVn/icrVn.page.ts
@@ -0,0 +1,64 @@
+/*
+ Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License")
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+import { Component, OnInit } from "@angular/core";
+import { FileChooser } from "@ionic-native/file-chooser/ngx";
+declare var HMSMLText;
+@Component({
+ selector: "app-face",
+ templateUrl: "./icrVn.page.html",
+ styleUrls: ["./icrVn.page.scss"],
+})
+export class icrVnPage {
+ filePath: string = "";
+
+ constructor(private fileChooser: FileChooser) {}
+
+ public async getFile() {
+ this.fileChooser
+ .open()
+ .then((uri) => (this.filePath = uri))
+ .catch((e) => console.log(e));
+ }
+
+ public async captureImage() {
+ var icrVnDetectorReq = {
+ captureType: 1,
+ filePath: this.filePath,
+ };
+ try {
+ const result = await HMSMLText.icrVnCardDetector(
+ icrVnDetectorReq
+ );
+ alert(JSON.stringify(result));
+ console.log(JSON.stringify(result));
+ } catch (Ex) {
+ alert(JSON.stringify(Ex));
+ }
+ }
+
+ public async icrVnDetector() {
+ var icrVnDetectorReq = {};
+ try {
+ alert(
+ JSON.stringify(
+ await HMSMLText.icrVnCardDetector(icrVnDetectorReq)
+ )
+ );
+ } catch (ex) {
+ alert(JSON.stringify(ex));
+ }
+ }
+}
diff --git a/cordova-plugin-hms-mltext/example/ionic/src/app/text/text-routing.module.ts b/cordova-plugin-hms-mltext/example/ionic/src/app/text/text-routing.module.ts
new file mode 100644
index 00000000..c7c26aeb
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/ionic/src/app/text/text-routing.module.ts
@@ -0,0 +1,31 @@
+/*
+ Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License")
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+import { NgModule } from '@angular/core';
+import { Routes, RouterModule } from '@angular/router';
+import { TextPage } from './text.page';
+
+const routes: Routes = [
+ {
+ path: '',
+ component: TextPage
+ }
+];
+
+@NgModule({
+ imports: [RouterModule.forChild(routes)],
+ exports: [RouterModule],
+})
+export class TextPageRoutingModule {}
diff --git a/cordova-plugin-hms-mltext/example/ionic/src/app/text/text.module.ts b/cordova-plugin-hms-mltext/example/ionic/src/app/text/text.module.ts
new file mode 100644
index 00000000..977975d6
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/ionic/src/app/text/text.module.ts
@@ -0,0 +1,30 @@
+/*
+ Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License")
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+import { NgModule } from "@angular/core";
+import { CommonModule } from "@angular/common";
+import { FormsModule } from "@angular/forms";
+import { IonicModule } from "@ionic/angular";
+import { FileChooser } from "@ionic-native/file-chooser/ngx";
+import { TextPageRoutingModule } from "./text-routing.module";
+import { HMSMLText } from "@hmscore/ionic-native-hms-mltext/ngx";
+import { TextPage } from "./text.page";
+
+@NgModule({
+ imports: [CommonModule, FormsModule, IonicModule, TextPageRoutingModule],
+ declarations: [TextPage],
+ providers: [FileChooser, HMSMLText]
+})
+export class TextPageModule {}
diff --git a/cordova-plugin-hms-mltext/example/ionic/src/app/text/text.page.html b/cordova-plugin-hms-mltext/example/ionic/src/app/text/text.page.html
new file mode 100644
index 00000000..48b5c40f
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/ionic/src/app/text/text.page.html
@@ -0,0 +1,41 @@
+
+
+
+ Text Recognition Analyser
+
+
+
+
+
+
+
+
+
+
+ Select Image
+
+
+ Start Analyse
+
+
+
+ Info Analyser
+
+
+ Stop Analyse
+
+
\ No newline at end of file
diff --git a/cordova-plugin-hms-mltext/example/ionic/src/app/text/text.page.scss b/cordova-plugin-hms-mltext/example/ionic/src/app/text/text.page.scss
new file mode 100644
index 00000000..60547ee2
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/ionic/src/app/text/text.page.scss
@@ -0,0 +1,15 @@
+/*
+ Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License")
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
\ No newline at end of file
diff --git a/cordova-plugin-hms-mltext/example/ionic/src/app/text/text.page.spec.ts b/cordova-plugin-hms-mltext/example/ionic/src/app/text/text.page.spec.ts
new file mode 100644
index 00000000..626e1492
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/ionic/src/app/text/text.page.spec.ts
@@ -0,0 +1,38 @@
+/*
+ Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License")
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+import { IonicModule } from '@ionic/angular';
+import { TextPage } from './text.page';
+
+describe('TextPage', () => {
+ let component: TextPage;
+ let fixture: ComponentFixture;
+
+ beforeEach(async(() => {
+ TestBed.configureTestingModule({
+ declarations: [ TextPage ],
+ imports: [IonicModule.forRoot()]
+ }).compileComponents();
+
+ fixture = TestBed.createComponent(TextPage);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ }));
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/cordova-plugin-hms-mltext/example/ionic/src/app/text/text.page.ts b/cordova-plugin-hms-mltext/example/ionic/src/app/text/text.page.ts
new file mode 100644
index 00000000..f3f97ae3
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/ionic/src/app/text/text.page.ts
@@ -0,0 +1,72 @@
+/*
+ Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License")
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+import { Component, OnInit } from '@angular/core';
+import { FileChooser } from '@ionic-native/file-chooser/ngx';
+declare var HMSMLText;
+@Component({
+ selector: 'app-text',
+ templateUrl: './text.page.html',
+ styleUrls: ['./text.page.scss'],
+})
+export class TextPage {
+ imageResult: string = "";
+ textRecognitionOutput: string = "";
+ constructor(private fileChooser: FileChooser) { }
+
+ public async getFile() {
+ this.fileChooser.open()
+ .then(uri => this.imageResult = uri)
+ .catch(e => console.log(e));
+ }
+
+ public async ImageTextAnalyser() {
+ var localImageTextAnalyserInput = {
+ ocrType: 0,
+ analyseMode: 0,
+ localTextSetting: {
+ ocrMode:1,
+ language: "en",
+ },
+ filePath: this.imageResult,
+ };
+ try {
+ const result = await HMSMLText.imageTextAnalyser(localImageTextAnalyserInput);
+ this.textRecognitionOutput = JSON.stringify(result.stringValue);
+ } catch (ex) {
+ alert(JSON.stringify(ex))
+ }
+
+ }
+ public async ImageTextAnalyserInfo() {
+ try {
+ const result = await HMSMLText.getTextAnalyserInfo();
+ alert( JSON.stringify(result));
+ } catch (ex) {
+ alert(JSON.stringify(ex))
+ }
+
+ }
+ public async ImageTextAnalyserStop() {
+ try {
+ const result = await HMSMLText.stopTextAnalyser();
+ alert(JSON.stringify(result));
+ } catch (ex) {
+ alert(JSON.stringify(ex))
+ }
+
+ }
+
+}
diff --git a/cordova-plugin-hms-mltext/example/ionic/src/assets/icon_record.png b/cordova-plugin-hms-mltext/example/ionic/src/assets/icon_record.png
new file mode 100644
index 00000000..cb1f03e6
Binary files /dev/null and b/cordova-plugin-hms-mltext/example/ionic/src/assets/icon_record.png differ
diff --git a/cordova-plugin-hms-mltext/example/ionic/src/assets/logo.png b/cordova-plugin-hms-mltext/example/ionic/src/assets/logo.png
new file mode 100644
index 00000000..be3964eb
Binary files /dev/null and b/cordova-plugin-hms-mltext/example/ionic/src/assets/logo.png differ
diff --git a/cordova-plugin-hms-mltext/example/ionic/src/environments/environment.prod.ts b/cordova-plugin-hms-mltext/example/ionic/src/environments/environment.prod.ts
new file mode 100644
index 00000000..1be814dd
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/ionic/src/environments/environment.prod.ts
@@ -0,0 +1,18 @@
+/*
+ Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License")
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+export const environment = {
+ production: true
+};
diff --git a/cordova-plugin-hms-mltext/example/ionic/src/environments/environment.ts b/cordova-plugin-hms-mltext/example/ionic/src/environments/environment.ts
new file mode 100644
index 00000000..512f59b6
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/ionic/src/environments/environment.ts
@@ -0,0 +1,27 @@
+/*
+ Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License")
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+export const environment = {
+ production: false
+};
+
+/*
+ * For easier debugging in development mode, you can import the following file
+ * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`.
+ *
+ * This import should be commented out in production mode because it will have a negative impact
+ * on performance if an error is thrown.
+ */
+// import 'zone.js/dist/zone-error'; // Included with Angular CLI.
diff --git a/cordova-plugin-hms-mltext/example/ionic/src/global.scss b/cordova-plugin-hms-mltext/example/ionic/src/global.scss
new file mode 100644
index 00000000..d854de84
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/ionic/src/global.scss
@@ -0,0 +1,26 @@
+/*
+ * App Global CSS
+ * ----------------------------------------------------------------------------
+ * Put style rules here that you want to apply globally. These styles are for
+ * the entire app and not just one component. Additionally, this file can be
+ * used as an entry point to import other CSS/Sass files to be included in the
+ * output CSS.
+ * For more information on global stylesheets, visit the documentation:
+ * https://ionicframework.com/docs/layout/global-stylesheets
+ */
+
+/* Core CSS required for Ionic components to work properly */
+@import "~@ionic/angular/css/core.css";
+
+/* Basic CSS for apps built with Ionic */
+@import "~@ionic/angular/css/normalize.css";
+@import "~@ionic/angular/css/structure.css";
+@import "~@ionic/angular/css/typography.css";
+@import '~@ionic/angular/css/display.css';
+
+/* Optional CSS utils that can be commented out */
+@import "~@ionic/angular/css/padding.css";
+@import "~@ionic/angular/css/float-elements.css";
+@import "~@ionic/angular/css/text-alignment.css";
+@import "~@ionic/angular/css/text-transformation.css";
+@import "~@ionic/angular/css/flex-utils.css";
diff --git a/cordova-plugin-hms-mltext/example/ionic/src/index.html b/cordova-plugin-hms-mltext/example/ionic/src/index.html
new file mode 100644
index 00000000..06b65608
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/ionic/src/index.html
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+ Ionic App
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/cordova-plugin-hms-mltext/example/ionic/src/main.ts b/cordova-plugin-hms-mltext/example/ionic/src/main.ts
new file mode 100644
index 00000000..0c7f1c99
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/ionic/src/main.ts
@@ -0,0 +1,27 @@
+/*
+ Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License")
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+import { enableProdMode } from '@angular/core';
+import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
+
+import { AppModule } from './app/app.module';
+import { environment } from './environments/environment';
+
+if (environment.production) {
+ enableProdMode();
+}
+
+platformBrowserDynamic().bootstrapModule(AppModule)
+ .catch(err => console.log(err));
diff --git a/cordova-plugin-hms-mltext/example/ionic/src/polyfills.ts b/cordova-plugin-hms-mltext/example/ionic/src/polyfills.ts
new file mode 100644
index 00000000..aec6fbd8
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/ionic/src/polyfills.ts
@@ -0,0 +1,17 @@
+/*
+ Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License")
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+import './zone-flags';
+import 'zone.js/dist/zone'; // Included with Angular CLI.
diff --git a/cordova-plugin-hms-mltext/example/ionic/src/test.ts b/cordova-plugin-hms-mltext/example/ionic/src/test.ts
new file mode 100644
index 00000000..bf9150f0
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/ionic/src/test.ts
@@ -0,0 +1,35 @@
+/*
+ Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License")
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+// This file is required by karma.conf.js and loads recursively all the .spec and framework files
+
+import 'zone.js/dist/zone-testing';
+import { getTestBed } from '@angular/core/testing';
+import {
+ BrowserDynamicTestingModule,
+ platformBrowserDynamicTesting
+} from '@angular/platform-browser-dynamic/testing';
+
+declare const require: any;
+
+// First, initialize the Angular testing environment.
+getTestBed().initTestEnvironment(
+ BrowserDynamicTestingModule,
+ platformBrowserDynamicTesting()
+);
+// Then we find all the tests.
+const context = require.context('./', true, /\.spec\.ts$/);
+// And load the modules.
+context.keys().map(context);
diff --git a/cordova-plugin-hms-mltext/example/ionic/src/theme/variables.scss b/cordova-plugin-hms-mltext/example/ionic/src/theme/variables.scss
new file mode 100644
index 00000000..63d627fc
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/ionic/src/theme/variables.scss
@@ -0,0 +1,228 @@
+// Ionic Variables and Theming. For more info, please see:
+// http://ionicframework.com/docs/theming/
+
+/** Ionic CSS Variables **/
+:root {
+ /** primary **/
+ --ion-color-primary: #3880ff;
+ --ion-color-primary-rgb: 56, 128, 255;
+ --ion-color-primary-contrast: #ffffff;
+ --ion-color-primary-contrast-rgb: 255, 255, 255;
+ --ion-color-primary-shade: #3171e0;
+ --ion-color-primary-tint: #4c8dff;
+
+ /** secondary **/
+ --ion-color-secondary: #3dc2ff;
+ --ion-color-secondary-rgb: 61, 194, 255;
+ --ion-color-secondary-contrast: #ffffff;
+ --ion-color-secondary-contrast-rgb: 255, 255, 255;
+ --ion-color-secondary-shade: #36abe0;
+ --ion-color-secondary-tint: #50c8ff;
+
+ /** tertiary **/
+ --ion-color-tertiary: #5260ff;
+ --ion-color-tertiary-rgb: 82, 96, 255;
+ --ion-color-tertiary-contrast: #ffffff;
+ --ion-color-tertiary-contrast-rgb: 255, 255, 255;
+ --ion-color-tertiary-shade: #4854e0;
+ --ion-color-tertiary-tint: #6370ff;
+
+ /** success **/
+ --ion-color-success: #2dd36f;
+ --ion-color-success-rgb: 45, 211, 111;
+ --ion-color-success-contrast: #ffffff;
+ --ion-color-success-contrast-rgb: 255, 255, 255;
+ --ion-color-success-shade: #28ba62;
+ --ion-color-success-tint: #42d77d;
+
+ /** warning **/
+ --ion-color-warning: #ffc409;
+ --ion-color-warning-rgb: 255, 196, 9;
+ --ion-color-warning-contrast: #000000;
+ --ion-color-warning-contrast-rgb: 0, 0, 0;
+ --ion-color-warning-shade: #e0ac08;
+ --ion-color-warning-tint: #ffca22;
+
+ /** danger **/
+ --ion-color-danger: #eb445a;
+ --ion-color-danger-rgb: 235, 68, 90;
+ --ion-color-danger-contrast: #ffffff;
+ --ion-color-danger-contrast-rgb: 255, 255, 255;
+ --ion-color-danger-shade: #cf3c4f;
+ --ion-color-danger-tint: #ed576b;
+
+ /** dark **/
+ --ion-color-dark: #222428;
+ --ion-color-dark-rgb: 34, 36, 40;
+ --ion-color-dark-contrast: #ffffff;
+ --ion-color-dark-contrast-rgb: 255, 255, 255;
+ --ion-color-dark-shade: #1e2023;
+ --ion-color-dark-tint: #383a3e;
+
+ /** medium **/
+ --ion-color-medium: #92949c;
+ --ion-color-medium-rgb: 146, 148, 156;
+ --ion-color-medium-contrast: #ffffff;
+ --ion-color-medium-contrast-rgb: 255, 255, 255;
+ --ion-color-medium-shade: #808289;
+ --ion-color-medium-tint: #9d9fa6;
+
+ /** light **/
+ --ion-color-light: #f4f5f8;
+ --ion-color-light-rgb: 244, 245, 248;
+ --ion-color-light-contrast: #000000;
+ --ion-color-light-contrast-rgb: 0, 0, 0;
+ --ion-color-light-shade: #d7d8da;
+ --ion-color-light-tint: #f5f6f9;
+}
+
+@media (prefers-color-scheme: dark) {
+ /*
+ * Dark Colors
+ * -------------------------------------------
+ */
+
+ body {
+ --ion-color-primary: #428cff;
+ --ion-color-primary-rgb: 66,140,255;
+ --ion-color-primary-contrast: #ffffff;
+ --ion-color-primary-contrast-rgb: 255,255,255;
+ --ion-color-primary-shade: #3a7be0;
+ --ion-color-primary-tint: #5598ff;
+
+ --ion-color-secondary: #50c8ff;
+ --ion-color-secondary-rgb: 80,200,255;
+ --ion-color-secondary-contrast: #ffffff;
+ --ion-color-secondary-contrast-rgb: 255,255,255;
+ --ion-color-secondary-shade: #46b0e0;
+ --ion-color-secondary-tint: #62ceff;
+
+ --ion-color-tertiary: #6a64ff;
+ --ion-color-tertiary-rgb: 106,100,255;
+ --ion-color-tertiary-contrast: #ffffff;
+ --ion-color-tertiary-contrast-rgb: 255,255,255;
+ --ion-color-tertiary-shade: #5d58e0;
+ --ion-color-tertiary-tint: #7974ff;
+
+ --ion-color-success: #2fdf75;
+ --ion-color-success-rgb: 47,223,117;
+ --ion-color-success-contrast: #000000;
+ --ion-color-success-contrast-rgb: 0,0,0;
+ --ion-color-success-shade: #29c467;
+ --ion-color-success-tint: #44e283;
+
+ --ion-color-warning: #ffd534;
+ --ion-color-warning-rgb: 255,213,52;
+ --ion-color-warning-contrast: #000000;
+ --ion-color-warning-contrast-rgb: 0,0,0;
+ --ion-color-warning-shade: #e0bb2e;
+ --ion-color-warning-tint: #ffd948;
+
+ --ion-color-danger: #ff4961;
+ --ion-color-danger-rgb: 255,73,97;
+ --ion-color-danger-contrast: #ffffff;
+ --ion-color-danger-contrast-rgb: 255,255,255;
+ --ion-color-danger-shade: #e04055;
+ --ion-color-danger-tint: #ff5b71;
+
+ --ion-color-dark: #f4f5f8;
+ --ion-color-dark-rgb: 244,245,248;
+ --ion-color-dark-contrast: #000000;
+ --ion-color-dark-contrast-rgb: 0,0,0;
+ --ion-color-dark-shade: #d7d8da;
+ --ion-color-dark-tint: #f5f6f9;
+
+ --ion-color-medium: #989aa2;
+ --ion-color-medium-rgb: 152,154,162;
+ --ion-color-medium-contrast: #000000;
+ --ion-color-medium-contrast-rgb: 0,0,0;
+ --ion-color-medium-shade: #86888f;
+ --ion-color-medium-tint: #a2a4ab;
+
+ --ion-color-light: #222428;
+ --ion-color-light-rgb: 34,36,40;
+ --ion-color-light-contrast: #ffffff;
+ --ion-color-light-contrast-rgb: 255,255,255;
+ --ion-color-light-shade: #1e2023;
+ --ion-color-light-tint: #383a3e;
+ }
+
+ /*
+ * iOS Dark Theme
+ * -------------------------------------------
+ */
+
+ .ios body {
+ --ion-background-color: #000000;
+ --ion-background-color-rgb: 0,0,0;
+
+ --ion-text-color: #ffffff;
+ --ion-text-color-rgb: 255,255,255;
+
+ --ion-color-step-50: #0d0d0d;
+ --ion-color-step-100: #1a1a1a;
+ --ion-color-step-150: #262626;
+ --ion-color-step-200: #333333;
+ --ion-color-step-250: #404040;
+ --ion-color-step-300: #4d4d4d;
+ --ion-color-step-350: #595959;
+ --ion-color-step-400: #666666;
+ --ion-color-step-450: #737373;
+ --ion-color-step-500: #808080;
+ --ion-color-step-550: #8c8c8c;
+ --ion-color-step-600: #999999;
+ --ion-color-step-650: #a6a6a6;
+ --ion-color-step-700: #b3b3b3;
+ --ion-color-step-750: #bfbfbf;
+ --ion-color-step-800: #cccccc;
+ --ion-color-step-850: #d9d9d9;
+ --ion-color-step-900: #e6e6e6;
+ --ion-color-step-950: #f2f2f2;
+
+ --ion-toolbar-background: #0d0d0d;
+
+ --ion-item-background: #000000;
+ }
+
+
+ /*
+ * Material Design Dark Theme
+ * -------------------------------------------
+ */
+
+ .md body {
+ --ion-background-color: #121212;
+ --ion-background-color-rgb: 18,18,18;
+
+ --ion-text-color: #ffffff;
+ --ion-text-color-rgb: 255,255,255;
+
+ --ion-border-color: #222222;
+
+ --ion-color-step-50: #1e1e1e;
+ --ion-color-step-100: #2a2a2a;
+ --ion-color-step-150: #363636;
+ --ion-color-step-200: #414141;
+ --ion-color-step-250: #4d4d4d;
+ --ion-color-step-300: #595959;
+ --ion-color-step-350: #656565;
+ --ion-color-step-400: #717171;
+ --ion-color-step-450: #7d7d7d;
+ --ion-color-step-500: #898989;
+ --ion-color-step-550: #949494;
+ --ion-color-step-600: #a0a0a0;
+ --ion-color-step-650: #acacac;
+ --ion-color-step-700: #b8b8b8;
+ --ion-color-step-750: #c4c4c4;
+ --ion-color-step-800: #d0d0d0;
+ --ion-color-step-850: #dbdbdb;
+ --ion-color-step-900: #e7e7e7;
+ --ion-color-step-950: #f3f3f3;
+
+ --ion-item-background: #1e1e1e;
+
+ --ion-toolbar-background: #1f1f1f;
+
+ --ion-tab-bar-background: #1f1f1f;
+ }
+}
\ No newline at end of file
diff --git a/cordova-plugin-hms-mltext/example/ionic/src/zone-flags.ts b/cordova-plugin-hms-mltext/example/ionic/src/zone-flags.ts
new file mode 100644
index 00000000..a79d4e35
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/ionic/src/zone-flags.ts
@@ -0,0 +1,17 @@
+/*
+ Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License")
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+(window as any).__Zone_disable_customElements = true;
diff --git a/cordova-plugin-hms-mltext/example/ionic/tsconfig.app.json b/cordova-plugin-hms-mltext/example/ionic/tsconfig.app.json
new file mode 100644
index 00000000..91b32f2f
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/ionic/tsconfig.app.json
@@ -0,0 +1,18 @@
+{
+ "extends": "./tsconfig.json",
+ "compilerOptions": {
+ "outDir": "./out-tsc/app",
+ "types": []
+ },
+ "files": [
+ "src/main.ts",
+ "src/polyfills.ts"
+ ],
+ "include": [
+ "src/**/*.ts",
+ "src/**/*.d.ts"
+ ],
+ "exclude": [
+ "src/**/*.spec.ts"
+ ]
+}
diff --git a/cordova-plugin-hms-mltext/example/ionic/tsconfig.json b/cordova-plugin-hms-mltext/example/ionic/tsconfig.json
new file mode 100644
index 00000000..00482e7b
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/ionic/tsconfig.json
@@ -0,0 +1,24 @@
+{
+ "compileOnSave": false,
+ "compilerOptions": {
+ "skipLibCheck": true,
+ "baseUrl": "./",
+ "outDir": "./dist/out-tsc",
+ "sourceMap": true,
+ "declaration": false,
+ "downlevelIteration": true,
+ "experimentalDecorators": true,
+ "module": "esnext",
+ "moduleResolution": "node",
+ "importHelpers": true,
+ "target": "es2015",
+ "lib": [
+ "es2018",
+ "dom"
+ ]
+ },
+ "angularCompilerOptions": {
+ "fullTemplateTypeCheck": true,
+ "strictInjectionParameters": true
+ }
+}
\ No newline at end of file
diff --git a/cordova-plugin-hms-mltext/example/ionic/tsconfig.spec.json b/cordova-plugin-hms-mltext/example/ionic/tsconfig.spec.json
new file mode 100644
index 00000000..b5bda534
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/ionic/tsconfig.spec.json
@@ -0,0 +1,18 @@
+{
+ "extends": "./tsconfig.json",
+ "compilerOptions": {
+ "outDir": "./out-tsc/spec",
+ "types": [
+ "jasmine",
+ "node"
+ ]
+ },
+ "files": [
+ "src/test.ts",
+ "src/polyfills.ts"
+ ],
+ "include": [
+ "src/**/*.spec.ts",
+ "src/**/*.d.ts"
+ ]
+}
\ No newline at end of file
diff --git a/cordova-plugin-hms-mltext/example/ionic/tslint.json b/cordova-plugin-hms-mltext/example/ionic/tslint.json
new file mode 100644
index 00000000..21329f4e
--- /dev/null
+++ b/cordova-plugin-hms-mltext/example/ionic/tslint.json
@@ -0,0 +1,149 @@
+{
+ "extends": "tslint:recommended",
+ "rules": {
+ "align": {
+ "options": [
+ "parameters",
+ "statements"
+ ]
+ },
+ "array-type": false,
+ "arrow-return-shorthand": true,
+ "curly": true,
+ "deprecation": {
+ "severity": "warning"
+ },
+ "component-class-suffix": [true, "Page", "Component"],
+ "contextual-lifecycle": true,
+ "directive-class-suffix": true,
+ "directive-selector": [
+ true,
+ "attribute",
+ "app",
+ "camelCase"
+ ],
+ "component-selector": [
+ true,
+ "element",
+ "app",
+ "kebab-case"
+ ],
+ "eofline": true,
+ "import-blacklist": [
+ true,
+ "rxjs/Rx"
+ ],
+ "import-spacing": true,
+ "indent": {
+ "options": [
+ "spaces"
+ ]
+ },
+ "max-classes-per-file": false,
+ "max-line-length": [
+ true,
+ 140
+ ],
+ "member-ordering": [
+ true,
+ {
+ "order": [
+ "static-field",
+ "instance-field",
+ "static-method",
+ "instance-method"
+ ]
+ }
+ ],
+ "no-console": [
+ true,
+ "debug",
+ "info",
+ "time",
+ "timeEnd",
+ "trace"
+ ],
+ "no-empty": false,
+ "no-inferrable-types": [
+ true,
+ "ignore-params"
+ ],
+ "no-non-null-assertion": true,
+ "no-redundant-jsdoc": true,
+ "no-switch-case-fall-through": true,
+ "no-var-requires": false,
+ "object-literal-key-quotes": [
+ true,
+ "as-needed"
+ ],
+ "quotemark": [
+ true,
+ "single"
+ ],
+ "semicolon": {
+ "options": [
+ "always"
+ ]
+ },
+ "space-before-function-paren": {
+ "options": {
+ "anonymous": "never",
+ "asyncArrow": "always",
+ "constructor": "never",
+ "method": "never",
+ "named": "never"
+ }
+ },
+ "typedef-whitespace": {
+ "options": [
+ {
+ "call-signature": "nospace",
+ "index-signature": "nospace",
+ "parameter": "nospace",
+ "property-declaration": "nospace",
+ "variable-declaration": "nospace"
+ },
+ {
+ "call-signature": "onespace",
+ "index-signature": "onespace",
+ "parameter": "onespace",
+ "property-declaration": "onespace",
+ "variable-declaration": "onespace"
+ }
+ ]
+ },
+ "variable-name": {
+ "options": [
+ "ban-keywords",
+ "check-format",
+ "allow-pascal-case"
+ ]
+ },
+ "whitespace": {
+ "options": [
+ "check-branch",
+ "check-decl",
+ "check-operator",
+ "check-separator",
+ "check-type",
+ "check-typecast"
+ ]
+ },
+ "no-conflicting-lifecycle": true,
+ "no-host-metadata-property": true,
+ "no-input-rename": true,
+ "no-inputs-metadata-property": true,
+ "no-output-native": true,
+ "no-output-on-prefix": true,
+ "no-output-rename": true,
+ "no-outputs-metadata-property": true,
+ "template-banana-in-box": true,
+ "template-no-negated-async": true,
+ "use-lifecycle-interface": true,
+ "use-pipe-transform-interface": true,
+ "object-literal-sort-keys": false
+ },
+ "rulesDirectory": [
+ "codelyzer"
+ ]
+}
\ No newline at end of file
diff --git a/cordova-plugin-hms-mltext/hooks/FSUtils.js b/cordova-plugin-hms-mltext/hooks/FSUtils.js
new file mode 100644
index 00000000..ccc77170
--- /dev/null
+++ b/cordova-plugin-hms-mltext/hooks/FSUtils.js
@@ -0,0 +1,43 @@
+/*
+ Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License")
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+"use strict";
+
+var fs = require("fs");
+
+var FSUtils = (function () {
+ var api = {};
+
+ api.exists = function (path) {
+ try {
+ return fs.existsSync(path);
+ } catch (err) {
+ /*No need to handle*/
+ }
+ return false;
+ };
+
+ api.readFile = function (path, encoding) {
+ return fs.readFileSync(path, encoding);
+ };
+
+ api.writeFile = function (path, content) {
+ fs.writeFileSync(path, content);
+ };
+
+ return api;
+})();
+
+module.exports = FSUtils;
diff --git a/cordova-plugin-hms-mltext/hooks/after_plugin_install.js b/cordova-plugin-hms-mltext/hooks/after_plugin_install.js
new file mode 100644
index 00000000..e7513f98
--- /dev/null
+++ b/cordova-plugin-hms-mltext/hooks/after_plugin_install.js
@@ -0,0 +1,97 @@
+/*
+ Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License")
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+"use strict";
+
+var FSUtils = require("./FSUtils");
+
+var ROOT_BUILD_GRADLE_FILE = "platforms/android/build.gradle";
+var ROOT_REPOSITORIES_GRADLE_FILE = "platforms/android/repositories.gradle";
+var APP_REPOSITORIES_GRADLE_FILE = "platforms/android/app/repositories.gradle";
+var COMMENT = "//This line is added by cordova-plugin-hms-mltext plugin";
+var NEW_LINE = "\n";
+
+module.exports = function (context) {
+ if (!FSUtils.exists(ROOT_BUILD_GRADLE_FILE)) {
+ console.log("root gradle file does not exist. after_plugin_install script wont be executed.");
+ }
+
+ var rootGradleContent = FSUtils.readFile(ROOT_BUILD_GRADLE_FILE, "UTF-8");
+ var lines = rootGradleContent.split(NEW_LINE);
+
+ var depAddedLines = addAGConnectDependency(lines);
+ var repoAddedLines = addHuaweiRepo(depAddedLines);
+
+ FSUtils.writeFile(ROOT_BUILD_GRADLE_FILE, repoAddedLines.join(NEW_LINE));
+
+ updateRepositoriesGradle(ROOT_REPOSITORIES_GRADLE_FILE);
+ updateRepositoriesGradle(APP_REPOSITORIES_GRADLE_FILE);
+};
+
+function addAGConnectDependency(lines) {
+ var AG_CONNECT_DEPENDENCY = "classpath 'com.huawei.agconnect:agcp:1.9.1.300' " + COMMENT;
+ var pattern = /(\s*)classpath(\s+)[\',\"]com.android.tools.build:gradle.*[^\]\n]/m;
+ var index;
+
+ for (var i = 0; i < lines.length; i++) {
+ var line = lines[i];
+ if (pattern.test(line)) {
+ index = i;
+ break;
+ }
+ }
+
+ lines.splice(index + 1, 0, AG_CONNECT_DEPENDENCY);
+ return lines;
+}
+
+function addHuaweiRepo(lines) {
+ var HUAWEI_REPO = "maven { url 'https://developer.huawei.com/repo/' } " + COMMENT;
+ var pattern = /(\s*)jcenter\(\)/m;
+ var indexList = [];
+
+ for (var i = 0; i < lines.length; i++) {
+ var line = lines[i];
+ if (pattern.test(line)) {
+ indexList.push(i);
+ }
+ }
+
+ for (var i = 0; i < indexList.length; i++) {
+ lines.splice(indexList[i] + 1, 0, HUAWEI_REPO);
+ if (i < indexList.length - 1) {
+ indexList[i + 1] = indexList[i + 1] + 1;
+ }
+ }
+
+ return lines;
+}
+
+function updateRepositoriesGradle(file) {
+ if (FSUtils.exists(file)) {
+ var repoGradleContent = FSUtils.readFile(file, "UTF-8");
+ if (repoGradleContent.indexOf("developer.huawei.com/repo") === -1) {
+ var lastIndexOfCurlyBracket = repoGradleContent.lastIndexOf("}");
+
+ repoGradleContent =
+ repoGradleContent.substring(0, lastIndexOfCurlyBracket) +
+ " maven { url 'https://developer.huawei.com/repo/' } "+COMMENT+" \n}" +
+ repoGradleContent.substring(lastIndexOfCurlyBracket + 1);
+
+ FSUtils.writeFile(file, repoGradleContent);
+ }
+ }
+}
diff --git a/cordova-plugin-hms-mltext/hooks/before_plugin_uninstall.js b/cordova-plugin-hms-mltext/hooks/before_plugin_uninstall.js
new file mode 100644
index 00000000..e6c91fb4
--- /dev/null
+++ b/cordova-plugin-hms-mltext/hooks/before_plugin_uninstall.js
@@ -0,0 +1,64 @@
+/*
+ Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License")
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+"use strict";
+
+var FSUtils = require("./FSUtils");
+
+var ROOT_GRADLE_FILE = "platforms/android/build.gradle";
+var ROOT_REPOSITORIES_GRADLE_FILE = "platforms/android/repositories.gradle";
+var APP_REPOSITORIES_GRADLE_FILE = "platforms/android/app/repositories.gradle";
+var COMMENT = "//This line is added by cordova-plugin-hms-mltext plugin";
+var NEW_LINE = "\n";
+
+module.exports = function (context) {
+ removeLinesFromGradle(ROOT_GRADLE_FILE);
+ removeLinesFromGradle(ROOT_REPOSITORIES_GRADLE_FILE);
+ removeLinesFromGradle(APP_REPOSITORIES_GRADLE_FILE);
+};
+
+function removeLinesFromGradle(repositoryPath) {
+ if (!FSUtils.exists(repositoryPath)) {
+ return
+ }
+
+ var rootGradleContent = FSUtils.readFile(repositoryPath, "UTF-8");
+ var lines = rootGradleContent.split(NEW_LINE);
+ var linesAfterRemove = removeLinesAddedByPlugin(lines);
+ FSUtils.writeFile(repositoryPath, linesAfterRemove.join(NEW_LINE));
+}
+
+function removeLinesAddedByPlugin(lines) {
+ var indexList = [];
+ for (var i = 0; i < lines.length; i++) {
+ var line = lines[i];
+ if (line.includes(COMMENT)) {
+ indexList.push(i);
+ }
+ }
+
+ for (var i = 0; i < indexList.length; i++) {
+ lines.splice(indexList[i], 1);
+
+ //if a line is removed, indexes are changed
+ if (i !== indexList.length - 1) {
+ for (var j = i + 1; j < indexList.length; j++) {
+ indexList[j] = indexList[j] - 1;
+ }
+ }
+ }
+
+ return lines;
+}
diff --git a/cordova-plugin-hms-mltext/ionic-native/dist/LICENSE b/cordova-plugin-hms-mltext/ionic-native/dist/LICENSE
new file mode 100644
index 00000000..490b5c70
--- /dev/null
+++ b/cordova-plugin-hms-mltext/ionic-native/dist/LICENSE
@@ -0,0 +1,53 @@
+Apache License
+
+Version 2.0, January 2004
+
+http://www.apache.org/licenses/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
+
+"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
+
+"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
+
+"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
+
+"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
+
+"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
+
+"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
+
+"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
+
+2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
+
+4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+
+You must give any other recipients of the Work or Derivative Works a copy of this License; and
+You must cause any modified files to carry prominent notices stating that You changed the files; and
+You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
+If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.
+
+You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
+
+8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
\ No newline at end of file
diff --git a/cordova-plugin-hms-mltext/ionic-native/dist/README.md b/cordova-plugin-hms-mltext/ionic-native/dist/README.md
new file mode 100644
index 00000000..183142a7
--- /dev/null
+++ b/cordova-plugin-hms-mltext/ionic-native/dist/README.md
@@ -0,0 +1,82 @@
+
+
Ionic Native HMS ML Text
+
+
+
+
+
+
+
+
+----
+
+## 1. About
+
+Ionic Native wrappers for
+the [cordova-plugin-hms-mltext](https://www.npmjs.com/package/@hmscore/cordova-plugin-hms-mltext).
+
+---
+
+## 2. Installation
+
+### 2.1 With Cordova Runtime
+
+```bash
+$ ionic cordova plugin add @hmscore/cordova-plugin-hms-mltext
+```
+
+```bash
+$ npm install @ionic-native/core @hmscore/ionic-native-hms-mltext
+```
+
+### 2.2 With Capacitor Runtime
+
+```bash
+$ npm install @hmscore/cordova-plugin-hms-mltext
+```
+
+```bash
+$ npm install @ionic-native/core @hmscore/ionic-native-hms-mltext
+```
+
+---
+
+## 3. Usage Documentation
+
+- [GitHub repository](https://github.com/HMS-Core/hms-cordova-plugin)
+
+- [API reference and sample codes](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-References-V1/introduction-0000001051088632-V1?ha_source=hms1)
+
+---
+
+## 4. Sample Project
+
+You can find the sample projects
+on [HMS Core > Samples > ML Text Kit](https://developer.huawei.com/consumer/en/doc/overview/HMS-Core-Plugin?ha_source=hms1)
+page.
+
+---
+
+## 5. Questions or Issues
+
+If you have questions about how to use HMS samples, try the following options:
+
+- [Stack Overflow](https://stackoverflow.com/questions/tagged/huawei-mobile-services) is the best
+ place for any programming questions. Be sure to tag your question
+ with **`huawei-mobile-services`**.
+- [GitHub](https://github.com/HMS-Core/hms-cordova-plugin) is the official repository for these
+ plugins, You can open an issue or submit your ideas.
+- [Huawei Developer Forum](https://forums.developer.huawei.com/forumPortal/en/home?fid=0101187876626530001&ha_source=hms1)
+ HMS Core Module is great for general questions, or seeking recommendations and opinions.
+- [Huawei Developer Docs](https://developer.huawei.com/consumer/en/doc/overview/HMS-Core-Plugin?ha_source=hms1)
+ is place to official documentation for all HMS Core Kits, you can find detailed documentations in
+ there.
+
+If you run into a bug in our samples, please submit an issue to
+the [GitHub repository](https://github.com/HMS-Core/hms-cordova-plugin).
+
+---
+
+## 6. Licensing and Terms
+
+Ionic Native HMS ML Text is licensed under the [Apache 2.0 license](LICENSE).
diff --git a/cordova-plugin-hms-mltext/ionic-native/dist/index.d.ts b/cordova-plugin-hms-mltext/ionic-native/dist/index.d.ts
new file mode 100644
index 00000000..50756ba8
--- /dev/null
+++ b/cordova-plugin-hms-mltext/ionic-native/dist/index.d.ts
@@ -0,0 +1,591 @@
+/*
+ Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License")
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+import { IonicNativePlugin } from "@ionic-native/core";
+export declare class HMSMLTextPluginOriginal extends IonicNativePlugin {
+ MLLocalTextSetting: typeof MLLocalTextSetting;
+ icrVnCaptureType: typeof icrCaptureType;
+ MLTextConfig: typeof MLTextConfig;
+ MLRemoteTextSetting: typeof MLRemoteTextSetting;
+ MLBcrCaptureConfig: typeof MLBcrCaptureConfig;
+ MLGcrCaptureUIConfig: typeof MLGcrCaptureUIConfig;
+ MLBcrResultConfig: typeof MLBcrResultConfig;
+ ImgSuperResolutionConfig: typeof ImgSuperResolutionConfig;
+ MLFormRecogitionConfig: typeof MLFormRecogitionConfig;
+ MLProductConfig: typeof MLProductConfig;
+ gcrCaptureType: typeof gcrCaptureType;
+ Colors: typeof Colors;
+ /**
+ * Monitors photographing.
+ * @returns Promise
+ */
+ photograph(): Promise;
+ /**
+ * Close lens engine.
+ * @returns Promise
+ */
+ destroy(): Promise;
+ /**
+ * Obtains the size of the preview image of a camera.
+ * @returns Promise
+ */
+ getDisplayDimension(): Promise;
+ /**
+ * An app information class used to store basic information about apps with the HMS Core ML SDK integrated and complete the initialization of ML Text Kit. When using cloud services of the ML Text Kit, you need to set the apiKey of your app.
+ * @param {appSettingReq} appSettingReq Represents the parameter required.
+ * @returns Promise
+ */
+ appSetting(appSettingReq: appSettingReq): Promise;
+ /**
+ * Determines whether to collect statistics on the current app.
+ * @param {any} any
+ * @returns Promise
+ */
+ setStatistic(any: any): Promise;
+ /**
+ * Determines whether to collect statistics on the current app.
+ ** @param {any} any
+ * @returns Promise
+ */
+ getStatistic(any: any): Promise;
+ /**
+ * This service enable logger service.
+ * @returns Promise
+ */
+ enableLogger(): Promise;
+ /**
+ * This service disable logger service.
+ * @returns Promise
+ */
+ disableLogger(): Promise;
+}
+export declare class HMSMLTextOriginal extends IonicNativePlugin {
+ icrVnCaptureType: typeof icrCaptureType;
+ gcrCaptureType: typeof gcrCaptureType;
+ MLLocalTextSetting: typeof MLLocalTextSetting;
+ MLTextConfig: typeof MLTextConfig;
+ MLRemoteTextSetting: typeof MLRemoteTextSetting;
+ MLBcrCaptureConfig: typeof MLBcrCaptureConfig;
+ MLGcrCaptureUIConfig: typeof MLGcrCaptureUIConfig;
+ MLBcrResultConfig: typeof MLBcrResultConfig;
+ ImgSuperResolutionConfig: typeof ImgSuperResolutionConfig;
+ MLFormRecogitionConfig: typeof MLFormRecogitionConfig;
+ MLProductConfig: typeof MLProductConfig;
+ Colors: typeof Colors;
+ RecMode: typeof RecMode;
+ /**
+ * This method start the Text analyzer.
+ * @param {localImageTextReq|remoteImageTextReq} ImageTextAnalyserInput Reperesents the necessary parameters to convert images to text format.
+ * @returns Promise
+ */
+ imageTextAnalyser(ImageTextAnalyserInput: localImageTextReq | remoteImageTextReq): Promise;
+ /**
+ * This method stop the Text analyzer.
+ * @returns Promise
+ */
+ stopTextAnalyser(): Promise;
+ /**
+ * This method gives Text Analyser information.
+ * @returns Promise
+ */
+ getTextAnalyserInfo(): Promise;
+ /**
+ * This method provides a document recognition component that recognizes text from images of documents.
+ * @param {documentImageAnalyserReq} documentImageAnalyserReq Reperesents the necessary parameter to convert document images to text format.
+ * @returns Promise
+ */
+ documentImageAnalyser(documentImageAnalyserReq: documentImageAnalyserReq): Promise;
+ /**
+ * This method stop the Document analyzer.
+ * @returns Promise
+ */
+ stopDocumentImageAnalyser(): Promise;
+ /**
+ * This method close the Document analyzer.
+ * @returns Promise
+ */
+ closeDocumentImageAnalyser(): Promise;
+ /**
+ * This method returns the Document analyzer setting.
+ * @returns Promise
+ */
+ getDocumentImageAnalyserSetting(): Promise;
+ /**
+ * This method returns the Image analyzer setting.
+ * @returns Promise
+ */
+ getTextAnalyserSetting(): Promise;
+ /**
+ * This method returns the GCR setting.
+ * @returns Promise
+ */
+ getGCRSetting(): Promise;
+ /**
+ * This method stop the Form Recognition Analyzer.
+ * @returns Promise
+ */
+ stopFormRecognitionAnalyser(): Promise;
+ /**
+ * The bank card recognition service recognizes bank cards in camera streams within angle offset of 15 degrees and extracts key information such as card number and validity period.
+ * @param {bankCardSDKDetectorReq|bankCardPluginDetectorReq} bankCardDetecterInput Represents the parameter required for bank card recognition.
+ * @returns Promise | Promise
+ */
+ bankCardDetector(bankCardDetecterInput: bankCardSDKDetectorReq | bankCardPluginDetectorReq): Promise;
+ /**
+ * This method stop bankcard recognition service.
+ * @returns Promise
+ */
+ stopBankCardDetector(): Promise;
+ setResultTypeBcr(mLBcrCaptureConfig: mLBcrCaptureConfig): Promise;
+ setRecModeBcr(mLBcrCaptureConfig: mLBcrCaptureConfig): Promise;
+ /**
+ * This method returns the BCR setting.
+ * @returns Promise
+ */
+ getBankCardDetectorSetting(): Promise;
+ /**
+ * The general card recognition service provides a universal development framework based on the text recognition technology.
+ * @param {generalCardDetectorReq} generalCardDetectorReq Represents the parameter required for general card recognition plug-in.
+ * @returns Promise
+ */
+ generalCardDetector(generalCardDetectorReq: generalCardDetectorReq): Promise;
+ /**
+ * The general Vietnam id card recognition service provides a universal development framework based on the text recognition technology.
+ * @param {icrVnDetectorReq} icrVnDetectorReq Represents the parameter required for general card recognition plug-in.
+ * @returns Promise
+ */
+ icrVnCardDetector(icrVnDetectorReq: icrVnDetectorReq): Promise;
+ /**
+ * The form recognition service uses AI technologies to recognize and return form structure information (including rows, columns, and coordinates of cells) and form text in Chinese and English (including punctuation) from input images.
+ * @param {formRecognizerAnalyserReq} formRecognizerAnalyserReq Represents the parameter required for general card recognition plug-in.
+ * @returns Promise
+ */
+ formRecognitionAnalyser(formRecognizerAnalyserReq: formRecognizerAnalyserReq): Promise;
+ icrLocalAnalyser(localAnalyserReq: localAnalyserReq): Promise;
+ icrLocalAnalyserCreateIdCard(createIdCardReq: createIdCardReq): Promise;
+ icrLocalAnalyserStop(): Promise;
+ geticrCnCardInstance(): Promise;
+ icrCnCardCreate(): Promise;
+ geticrVnCardInstance(): Promise;
+ icrVnCardCreate(): Promise;
+ getIcrVnCapture(): Promise;
+ startCustomizedView(userProps: CustomViewModeRequest): Promise;
+ switchLight(): Promise;
+ getLightStatus(): Promise;
+ setUserRegion(region: Region): Promise;
+ getCountryCode(): Promise;
+}
+export interface CustomViewModeRequest {
+ isTitleAvailable: boolean;
+ title: string;
+ heightFactor: number;
+ widthFactor: number;
+ isFlashAvailable: boolean;
+ resultType: MLBcrResultConfig;
+ recMode: RecMode;
+}
+export interface configReq {
+ apiKey: string;
+}
+export interface appSettingReq {
+ apiKey?: string | null;
+ applicationId?: string | null;
+ certFingerprint?: string | null;
+}
+export interface bankCardSDKDetectorReq {
+ filePath: any;
+ detectType: 0;
+ mLBcrAnalyzerSetting?: MLBcrAnalyzerSetting | null;
+}
+export interface MLBcrAnalyzerSetting {
+ langType?: string | null;
+ resultType?: MLBcrResultConfig | null;
+}
+export interface bankCardPluginDetectorReq {
+ detectType: 1;
+ mLBcrCaptureConfig?: mLBcrCaptureConfig | null;
+}
+export interface mLBcrCaptureConfig {
+ orientation?: MLBcrCaptureConfig | null;
+ resultType?: MLBcrResultConfig | null;
+ recMode?: RecMode | null;
+}
+export declare enum RecMode {
+ WEAK_MODE = 0,
+ STRICT_MODE = 1
+}
+export declare enum MLBcrCaptureConfig {
+ ERROR_CODE_INIT_CAMERA_FAILED = 10101,
+ RESULT_NUM_ONLY = 0,
+ ORIENTATION_AUTO = 0,
+ WEAK_MODE = 0,
+ ORIENTATION_LANDSCAPE = 1,
+ ORIENTATION_PORTRAIT = 2,
+ RESULT_ALL = 2,
+ RESULT_SIMPLE = 1,
+ STRICT_MODE = 1
+}
+export declare enum MLBcrResultConfig {
+ RESULT_NUM_ONLY = 0,
+ RESULT_SIMPLE = 1,
+ RESULT_ALL = 2
+}
+export interface MLBcrCaptureResult {
+ errorCode?: MLBcrCaptureErrorCode | null;
+ expire?: String | null;
+ issuer?: String | null;
+ number?: String | null;
+ numberBitmap?: any;
+ organization?: String | null;
+ riginalBitmap?: any;
+ type?: String | null;
+}
+export declare enum MLBcrCaptureErrorCode {
+ ERROR_CODE_INIT_CAMERA_FAILED = 10101
+}
+export interface documentImageAnalyserReq {
+ documentSetting?: DocumentSetting | null;
+ filePath: any;
+}
+export interface DocumentSetting {
+ borderType?: MLRemoteTextSetting | null;
+ languageList?: Array | null;
+ enableFingerprintVerification: boolean | null;
+}
+export declare enum MLRemoteTextSetting {
+ OCR_LOOSE_SCENE = 1,
+ OCR_COMPACT_SCENE = 2,
+ NGON = "NGON",
+ ARC = "ARC",
+ OTHER = 5,
+ NEW_LINE_CHARACTER = 8,
+ SPACE = 6
+}
+export interface formRecognizerAnalyserReq {
+ filePath: any;
+ syncType: MLFormRecogitionConfig;
+}
+export declare enum MLFormRecogitionConfig {
+ SYNC_TYPE = 1,
+ ASYNC_TYPE = 0
+}
+export interface generalCardDetectorReq {
+ gcrCaptureConfig?: gcrCaptureConfig;
+ gcrCaptureUIConfig?: gcrCaptureUIConfig;
+ captureType?: gcrCaptureType | null;
+}
+export interface gcrCaptureConfig {
+ language: string;
+}
+export declare enum gcrCaptureType {
+ CAPTURE_ACTIVITY = 0,
+ CAPTURE_PHOTO = 1,
+ CAPTURE_IMAGE = 2
+}
+export interface gcrCaptureUIConfig {
+ orientation?: MLGcrCaptureUIConfig | null;
+ tipText?: string | null;
+ tipTextColor?: number | null;
+ photoButtonResId?: number | null;
+ scanBoxCornerColor?: number | null;
+ backButtonRedId?: number | null;
+ torchRedId?: number | null;
+}
+export interface gcrSettingResults {
+ gcrConfigLanguage: String;
+ torchOnResId: number;
+ tipTextColor: number;
+ tipText: String;
+ backButtonResId: number;
+ orientation: number;
+ photoButtonResId: number;
+ scanBoxScreenRatio: number;
+ scanBoxCornerColor: number;
+ scanBoxAspectRatio: number;
+}
+export declare enum MLGcrCaptureUIConfig {
+ ORIENTATION_AUTO = 0,
+ ORIENTATION_LANDSCAPE = 1,
+ ORIENTATION_PORTRAIT = 2
+}
+export interface icrVnDetectorReq {
+ captureType: icrCaptureType;
+ filePath?: any | null;
+}
+export interface icrCnDetectorReq {
+ captureType: icrCaptureType;
+ filePath?: any | null;
+ isFront?: boolean | null;
+}
+export declare enum icrCaptureType {
+ CAPTURE_CAMERA = 0,
+ CAPTURE_IMAGE = 1
+}
+export interface createIdCardReq {
+ mlIcrAnalyzerSetting?: MLIcrAnalyzerSetting | null;
+}
+export interface localAnalyserReq {
+ settings: MLIcrAnalyzerSetting;
+ filePath?: any | null;
+}
+export interface MLIcrAnalyzerSetting {
+ countryCode: string;
+ hashCode?: number | null;
+ sideType?: MLIcrSideType | null;
+}
+export declare enum MLIcrSideType {
+ FRONT = "FRONT",
+ BACK = "BACK"
+}
+export interface imageSuperResolutionReq {
+ filePath: any;
+ imgSuperResolutionSetting?: ImgSuperResolutionSetting | null;
+ syncType?: MLFormRecogitionConfig | null;
+}
+export interface ImgSuperResolutionSetting {
+ scaleType?: ImgSuperResolutionConfig;
+}
+export declare enum ImgSuperResolutionConfig {
+ ISR_SCALE_1X = 1,
+ ISR_SCALE_3X = 3
+}
+export interface productReq {
+ filePath?: any | null;
+ detectType?: number;
+ mlProductSetting?: mlProductSetting | null;
+}
+export interface mlProductSetting {
+ largestNumOfReturns?: number | null;
+ productSetId?: string | null;
+ region?: MLProductConfig | null;
+}
+export declare enum MLProductConfig {
+ REGION_DR_CHINA = 1002,
+ REGION_DR_AFILA = 1003,
+ REGION_DR_EUROPE = 1004,
+ REGION_DR_RUSSIA = 1005,
+ REGION_DR_GERMAN = 1006,
+ REGION_DR_SIANGAPORE = 1007
+}
+export interface localImageTextReq {
+ ocrType: MLTextConfig;
+ analyseMode?: number;
+ localTextSetting?: localTextSetting | null;
+ filePath: any;
+}
+export interface localTextSetting {
+ ocrMode?: MLLocalTextSetting;
+ language?: string;
+}
+export declare enum MLLocalTextSetting {
+ OCR_DETECT_MODE = 1,
+ OCR_TRACKING_MODE = 2
+}
+export declare enum MLTextConfig {
+ OCR_LOCAL_TYPE = 0,
+ OCR_REMOTE_TYPE = 1
+}
+export interface remoteImageTextReq {
+ ocrType: MLTextConfig;
+ analyseMode?: number;
+ remoteTextSetting?: remoteTextSetting;
+ filePath: any;
+}
+export interface remoteTextSetting {
+ textDensityScene?: MLRemoteTextSetting;
+ languageList?: Array;
+ borderType?: MLRemoteTextSetting;
+}
+export interface MLBankCard {
+ number: string;
+ expire: string;
+ issuer: string;
+ type: string;
+ organization: string;
+ originalBitmap: any;
+ numberBitmap: any;
+}
+export interface Border {
+ bottom: number;
+ top: number;
+ left: number;
+ right: number;
+ exactCenterX: number;
+ centerY: number;
+ centerX: number;
+ describeContents: number;
+ height: number;
+ width: number;
+}
+export interface MLDocument {
+ stringValue: string;
+ blocks?: Blocks[];
+}
+export interface LanguageList {
+ language: string;
+}
+export interface MLVnIcrCaptureResult {
+ birthday: string;
+ cardBitmap: Bitmap;
+ idNum: string;
+ name: string;
+ sex: string;
+}
+export interface MLCnIcrCaptureResult {
+ birthday: string;
+ cardBitmap: Bitmap;
+ idNum: string;
+ name: string;
+ sex: string;
+ nation: string;
+ address: string;
+ authority: string;
+ validDate: string;
+}
+export interface MLIcrCaptureResult {
+ birthday: string;
+ cardBitmap: Bitmap;
+ idNum: string;
+ name: string;
+ sex: string;
+ nation: string;
+ address: string;
+ validDate: string;
+}
+export interface MLGcrCaptureResult {
+ text: string;
+ cardBitmap: Bitmap;
+}
+export interface Rect {
+ bottom: number;
+ top: number;
+ left: number;
+ right: number;
+ exactCenterX: number;
+ centerY: number;
+ centerX: number;
+ describeContents: number;
+ height: number;
+ width: number;
+}
+export interface Bitmap {
+ mGalleryCached: boolean;
+ mHeight: number;
+ mNativePtr: number;
+ mWidth: number;
+}
+export interface MLText {
+ stringValue: string;
+ blocks?: Blocks[];
+}
+export interface Blocks {
+ contents?: Contents[];
+}
+export interface Contents {
+ stringValue: string;
+ border: Border;
+ language: string;
+ languageList?: LanguageList[];
+ vertexes?: Vertexes[];
+}
+export interface LanguageList {
+ language: string;
+}
+export interface Vertexes {
+ x: number;
+ y: number;
+ describeContents: number;
+}
+export interface MLFormRecogitionResult {
+ retCode: number;
+ tableContent: TableContent;
+}
+export interface TableContent {
+ tableCount: number;
+ tables?: TablesEntity[] | null;
+}
+export interface TablesEntity {
+ tableID: number;
+ headerInfo: string;
+ footerInfo: string;
+ tableBody?: TableBodyEntity[] | null;
+}
+export interface TableBodyEntity {
+ startRow: number;
+ endRow: number;
+ startCol: number;
+ endCol: number;
+ cellCoordinate: CellCoordinate;
+ textInfo: string;
+}
+export interface CellCoordinate {
+ topLeft_x: number;
+ topLeft_y: number;
+ topRight_x: number;
+ topRight_y: number;
+ bottomLeft_x: number;
+ bottomLeft_y: number;
+ bottomRight_x: number;
+ bottomRight_y: number;
+}
+export declare enum Colors {
+ RED = -65536,
+ DKGRAY = -12303292,
+ GRAY = -7829368,
+ WHITE = -1,
+ BLUE = -16776961,
+ BLACK = -16777216,
+ LTGRAY = -3355444,
+ MAGENTA = -65281,
+ YELLOW = -256,
+ CYAN = -16711681,
+ GREEN = -16711936,
+ TRANSPARENT = 0
+}
+export declare enum CordovaErrors {
+ UNKNOWN = -1,
+ SUCCESS = 0,
+ DISCARDED = 1,
+ INNER = 2,
+ INACTIVE = 3,
+ NOT_SUPPORTED = 4,
+ ILLEGAL_PARAMETER = 5,
+ OVERDUE = 6,
+ NO_FOUND = 7,
+ DUPLICATE_FOUND = 8,
+ NO_PERMISSION = 9,
+ INSUFFICIENT_RESOURCE = 10,
+ ANALYSIS_FAILURE = 11,
+ INTERRUPTED = 12,
+ EXCEED_RANGE = 13,
+ DATA_MISSING = 14,
+ AUTHENTICATION_REQUIRED = 15,
+ TFLITE_NOT_COMPATIBLE = 16,
+ INSUFFICIENT_SPACE = 17,
+ HASH_MISS = 18,
+ TOKEN_INVALID = 19,
+ SERVICE_FAILURE = 20,
+ ANALYSIS_NULL = 21
+}
+export declare enum Region {
+ REGION_DR_UNKNOWN = 1001,
+ REGION_DR_CHINA = 1002,
+ REGION_DR_RUSSIA = 1005,
+ REGION_DR_GERMAN = 1006,
+ REGION_DR_SINGAPORE = 1007
+}
+
+export declare const HMSMLTextPlugin: HMSMLTextPluginOriginal;
+export declare const HMSMLText: HMSMLTextOriginal;
\ No newline at end of file
diff --git a/cordova-plugin-hms-mltext/ionic-native/dist/index.js b/cordova-plugin-hms-mltext/ionic-native/dist/index.js
new file mode 100644
index 00000000..7c606c27
--- /dev/null
+++ b/cordova-plugin-hms-mltext/ionic-native/dist/index.js
@@ -0,0 +1,489 @@
+/*
+ Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License")
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+var __extends = (this && this.__extends) || (function () {
+ var extendStatics = function (d, b) {
+ extendStatics = Object.setPrototypeOf ||
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
+ return extendStatics(d, b);
+ };
+ return function (d, b) {
+ extendStatics(d, b);
+ function __() { this.constructor = d; }
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+ };
+})();
+import { IonicNativePlugin, cordova, cordovaPropertyGet, cordovaPropertySet } from "@ionic-native/core";
+var HMSMLTextPluginOriginal = /** @class */ (function (_super) {
+ __extends(HMSMLTextPluginOriginal, _super);
+ function HMSMLTextPluginOriginal() {
+ return _super !== null && _super.apply(this, arguments) || this;
+ }
+ /**
+ * Monitors photographing.
+ * @returns Promise
+ */
+ HMSMLTextPluginOriginal.prototype.photograph = function () { return cordova(this, "photograph", { "otherPromise": true }, arguments); };
+ /**
+ * Close lens engine.
+ * @returns Promise
+ */
+ HMSMLTextPluginOriginal.prototype.destroy = function () { return cordova(this, "destroy", { "otherPromise": true }, arguments); };
+ /**
+ * Obtains the size of the preview image of a camera.
+ * @returns Promise
+ */
+ HMSMLTextPluginOriginal.prototype.getDisplayDimension = function () { return cordova(this, "getDisplayDimension", { "otherPromise": true }, arguments); };
+ /**
+ * An app information class used to store basic information about apps with the HMS Core ML SDK integrated and complete the initialization of ML Text Kit. When using cloud services of the ML Text Kit, you need to set the apiKey of your app.
+ * @param {appSettingReq} appSettingReq Represents the parameter required.
+ * @returns Promise
+ */
+ HMSMLTextPluginOriginal.prototype.appSetting = function (appSettingReq) { return cordova(this, "appSetting", { "otherPromise": true }, arguments); };
+ /**
+ * Determines whether to collect statistics on the current app.
+ * @param {any} any
+ * @returns Promise
+ */
+ HMSMLTextPluginOriginal.prototype.setStatistic = function (any) { return cordova(this, "setStatistic", { "otherPromise": true }, arguments); };
+ /**
+ * Determines whether to collect statistics on the current app.
+ ** @param {any} any
+ * @returns Promise
+ */
+ HMSMLTextPluginOriginal.prototype.getStatistic = function (any) { return cordova(this, "getStatistic", { "otherPromise": true }, arguments); };
+ /**
+ * This service enable logger service.
+ * @returns Promise
+ */
+ HMSMLTextPluginOriginal.prototype.enableLogger = function () { return cordova(this, "enableLogger", { "otherPromise": true }, arguments); };
+ /**
+ * This service disable logger service.
+ * @returns Promise
+ */
+ HMSMLTextPluginOriginal.prototype.disableLogger = function () { return cordova(this, "disableLogger", { "otherPromise": true }, arguments); };
+ Object.defineProperty(HMSMLTextPluginOriginal.prototype, "MLLocalTextSetting", {
+ get: function () { return cordovaPropertyGet(this, "MLLocalTextSetting"); },
+ set: function (value) { cordovaPropertySet(this, "MLLocalTextSetting", value); },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(HMSMLTextPluginOriginal.prototype, "icrVnCaptureType", {
+ get: function () { return cordovaPropertyGet(this, "icrVnCaptureType"); },
+ set: function (value) { cordovaPropertySet(this, "icrVnCaptureType", value); },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(HMSMLTextPluginOriginal.prototype, "MLTextConfig", {
+ get: function () { return cordovaPropertyGet(this, "MLTextConfig"); },
+ set: function (value) { cordovaPropertySet(this, "MLTextConfig", value); },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(HMSMLTextPluginOriginal.prototype, "MLRemoteTextSetting", {
+ get: function () { return cordovaPropertyGet(this, "MLRemoteTextSetting"); },
+ set: function (value) { cordovaPropertySet(this, "MLRemoteTextSetting", value); },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(HMSMLTextPluginOriginal.prototype, "MLBcrCaptureConfig", {
+ get: function () { return cordovaPropertyGet(this, "MLBcrCaptureConfig"); },
+ set: function (value) { cordovaPropertySet(this, "MLBcrCaptureConfig", value); },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(HMSMLTextPluginOriginal.prototype, "MLGcrCaptureUIConfig", {
+ get: function () { return cordovaPropertyGet(this, "MLGcrCaptureUIConfig"); },
+ set: function (value) { cordovaPropertySet(this, "MLGcrCaptureUIConfig", value); },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(HMSMLTextPluginOriginal.prototype, "MLBcrResultConfig", {
+ get: function () { return cordovaPropertyGet(this, "MLBcrResultConfig"); },
+ set: function (value) { cordovaPropertySet(this, "MLBcrResultConfig", value); },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(HMSMLTextPluginOriginal.prototype, "ImgSuperResolutionConfig", {
+ get: function () { return cordovaPropertyGet(this, "ImgSuperResolutionConfig"); },
+ set: function (value) { cordovaPropertySet(this, "ImgSuperResolutionConfig", value); },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(HMSMLTextPluginOriginal.prototype, "MLFormRecogitionConfig", {
+ get: function () { return cordovaPropertyGet(this, "MLFormRecogitionConfig"); },
+ set: function (value) { cordovaPropertySet(this, "MLFormRecogitionConfig", value); },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(HMSMLTextPluginOriginal.prototype, "MLProductConfig", {
+ get: function () { return cordovaPropertyGet(this, "MLProductConfig"); },
+ set: function (value) { cordovaPropertySet(this, "MLProductConfig", value); },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(HMSMLTextPluginOriginal.prototype, "gcrCaptureType", {
+ get: function () { return cordovaPropertyGet(this, "gcrCaptureType"); },
+ set: function (value) { cordovaPropertySet(this, "gcrCaptureType", value); },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(HMSMLTextPluginOriginal.prototype, "Colors", {
+ get: function () { return cordovaPropertyGet(this, "Colors"); },
+ set: function (value) { cordovaPropertySet(this, "Colors", value); },
+ enumerable: false,
+ configurable: true
+ });
+ HMSMLTextPluginOriginal.pluginName = "HMSMLTextPlugin";
+ HMSMLTextPluginOriginal.plugin = "cordova-plugin-hms-mltext";
+ HMSMLTextPluginOriginal.pluginRef = "HMSMLTextPlugin";
+ HMSMLTextPluginOriginal.platforms = ["Android"];
+ return HMSMLTextPluginOriginal;
+}(IonicNativePlugin));
+var HMSMLTextPlugin = new HMSMLTextPluginOriginal();
+export { HMSMLTextPlugin };
+var HMSMLTextOriginal = /** @class */ (function (_super) {
+ __extends(HMSMLTextOriginal, _super);
+ function HMSMLTextOriginal() {
+ return _super !== null && _super.apply(this, arguments) || this;
+ }
+ /**
+ * This method start the Text analyzer.
+ * @param {localImageTextReq|remoteImageTextReq} ImageTextAnalyserInput Reperesents the necessary parameters to convert images to text format.
+ * @returns Promise
+ */
+ HMSMLTextOriginal.prototype.imageTextAnalyser = function (ImageTextAnalyserInput) { return cordova(this, "imageTextAnalyser", { "otherPromise": true }, arguments); };
+ /**
+ * This method stop the Text analyzer.
+ * @returns Promise
+ */
+ HMSMLTextOriginal.prototype.stopTextAnalyser = function () { return cordova(this, "stopTextAnalyser", { "otherPromise": true }, arguments); };
+ /**
+ * This method gives Text Analyser information.
+ * @returns Promise
+ */
+ HMSMLTextOriginal.prototype.getTextAnalyserInfo = function () { return cordova(this, "getTextAnalyserInfo", { "otherPromise": true }, arguments); };
+ /**
+ * This method provides a document recognition component that recognizes text from images of documents.
+ * @param {documentImageAnalyserReq} documentImageAnalyserReq Reperesents the necessary parameter to convert document images to text format.
+ * @returns Promise
+ */
+ HMSMLTextOriginal.prototype.documentImageAnalyser = function (documentImageAnalyserReq) { return cordova(this, "documentImageAnalyser", { "otherPromise": true }, arguments); };
+ /**
+ * This method stop the Document analyzer.
+ * @returns Promise
+ */
+ HMSMLTextOriginal.prototype.stopDocumentImageAnalyser = function () { return cordova(this, "stopDocumentImageAnalyser", { "otherPromise": true }, arguments); };
+ /**
+ * This method close the Document analyzer.
+ * @returns Promise
+ */
+ HMSMLTextOriginal.prototype.closeDocumentImageAnalyser = function () { return cordova(this, "closeDocumentImageAnalyser", { "otherPromise": true }, arguments); };
+ /**
+ * This method returns the Document analyzer setting.
+ * @returns Promise
+ */
+ HMSMLTextOriginal.prototype.getDocumentImageAnalyserSetting = function () { return cordova(this, "getDocumentImageAnalyserSetting", { "otherPromise": true }, arguments); };
+ /**
+ * This method returns the Image analyzer setting.
+ * @returns Promise
+ */
+ HMSMLTextOriginal.prototype.getTextAnalyserSetting = function () { return cordova(this, "getTextAnalyserSetting", { "otherPromise": true }, arguments); };
+ /**
+ * This method returns the GCR setting.
+ * @returns Promise
+ */
+ HMSMLTextOriginal.prototype.getGCRSetting = function () { return cordova(this, "getGCRSetting", { "otherPromise": true }, arguments); };
+ /**
+ * This method stop the Form Recognition Analyzer.
+ * @returns Promise
+ */
+ HMSMLTextOriginal.prototype.stopFormRecognitionAnalyser = function () { return cordova(this, "stopFormRecognitionAnalyser", { "otherPromise": true }, arguments); };
+ /**
+ * The bank card recognition service recognizes bank cards in camera streams within angle offset of 15 degrees and extracts key information such as card number and validity period.
+ * @param {bankCardSDKDetectorReq|bankCardPluginDetectorReq} bankCardDetecterInput Represents the parameter required for bank card recognition.
+ * @returns Promise | Promise
+ */
+ HMSMLTextOriginal.prototype.bankCardDetector = function (bankCardDetecterInput) {
+ return;
+ };
+ /**
+ * This method stop bankcard recognition service.
+ * @returns Promise
+ */
+ HMSMLTextOriginal.prototype.stopBankCardDetector = function () { return cordova(this, "stopBankCardDetector", { "otherPromise": true }, arguments); };
+ HMSMLTextOriginal.prototype.setResultTypeBcr = function (mLBcrCaptureConfig) { return cordova(this, "setResultTypeBcr", { "otherPromise": true }, arguments); };
+ HMSMLTextOriginal.prototype.setRecModeBcr = function (mLBcrCaptureConfig) { return cordova(this, "setRecModeBcr", { "otherPromise": true }, arguments); };
+ /**
+ * This method returns the BCR setting.
+ * @returns Promise
+ */
+ HMSMLTextOriginal.prototype.getBankCardDetectorSetting = function () { return cordova(this, "getBankCardDetectorSetting", { "otherPromise": true }, arguments); };
+ /**
+ * The general card recognition service provides a universal development framework based on the text recognition technology.
+ * @param {generalCardDetectorReq} generalCardDetectorReq Represents the parameter required for general card recognition plug-in.
+ * @returns Promise
+ */
+ HMSMLTextOriginal.prototype.generalCardDetector = function (generalCardDetectorReq) { return cordova(this, "generalCardDetector", { "otherPromise": true }, arguments); };
+ /**
+ * The general Vietnam id card recognition service provides a universal development framework based on the text recognition technology.
+ * @param {icrVnDetectorReq} icrVnDetectorReq Represents the parameter required for general card recognition plug-in.
+ * @returns Promise
+ */
+ HMSMLTextOriginal.prototype.icrVnCardDetector = function (icrVnDetectorReq) { return cordova(this, "icrVnCardDetector", { "otherPromise": true }, arguments); };
+ /**
+ * The form recognition service uses AI technologies to recognize and return form structure information (including rows, columns, and coordinates of cells) and form text in Chinese and English (including punctuation) from input images.
+ * @param {formRecognizerAnalyserReq} formRecognizerAnalyserReq Represents the parameter required for general card recognition plug-in.
+ * @returns Promise
+ */
+ HMSMLTextOriginal.prototype.formRecognitionAnalyser = function (formRecognizerAnalyserReq) { return cordova(this, "formRecognitionAnalyser", { "otherPromise": true }, arguments); };
+ HMSMLTextOriginal.prototype.icrLocalAnalyser = function (localAnalyserReq) { return cordova(this, "icrLocalAnalyser", { "otherPromise": true }, arguments); };
+ HMSMLTextOriginal.prototype.icrLocalAnalyserCreateIdCard = function (createIdCardReq) { return cordova(this, "icrLocalAnalyserCreateIdCard", { "otherPromise": true }, arguments); };
+ HMSMLTextOriginal.prototype.icrLocalAnalyserStop = function () { return cordova(this, "icrLocalAnalyserStop", { "otherPromise": true }, arguments); };
+ HMSMLTextOriginal.prototype.geticrCnCardInstance = function () { return cordova(this, "geticrCnCardInstance", { "otherPromise": true }, arguments); };
+ HMSMLTextOriginal.prototype.icrCnCardCreate = function () { return cordova(this, "icrCnCardCreate", { "otherPromise": true }, arguments); };
+ HMSMLTextOriginal.prototype.geticrVnCardInstance = function () { return cordova(this, "geticrVnCardInstance", { "otherPromise": true }, arguments); };
+ HMSMLTextOriginal.prototype.icrVnCardCreate = function () { return cordova(this, "icrVnCardCreate", { "otherPromise": true }, arguments); };
+ HMSMLTextOriginal.prototype.getIcrVnCapture = function () { return cordova(this, "getIcrVnCapture", { "otherPromise": true }, arguments); };
+ HMSMLTextOriginal.prototype.startCustomizedView = function (userProps) { return cordova(this, "startCustomizedView", { "otherPromise": true }, arguments); };
+ HMSMLTextOriginal.prototype.switchLight = function () { return cordova(this, "switchLight", { "otherPromise": true }, arguments); };
+ HMSMLTextOriginal.prototype.getLightStatus = function () { return cordova(this, "getLightStatus", { "otherPromise": true }, arguments); };
+ HMSMLTextOriginal.prototype.setUserRegion = function (region) { return cordova(this, "setUserRegion", { "otherPromise": true }, arguments); };
+ HMSMLTextOriginal.prototype.getCountryCode = function () { return cordova(this, "getCountryCode", { "otherPromise": true }, arguments); };
+ Object.defineProperty(HMSMLTextOriginal.prototype, "icrVnCaptureType", {
+ get: function () { return cordovaPropertyGet(this, "icrVnCaptureType"); },
+ set: function (value) { cordovaPropertySet(this, "icrVnCaptureType", value); },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(HMSMLTextOriginal.prototype, "gcrCaptureType", {
+ get: function () { return cordovaPropertyGet(this, "gcrCaptureType"); },
+ set: function (value) { cordovaPropertySet(this, "gcrCaptureType", value); },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(HMSMLTextOriginal.prototype, "MLLocalTextSetting", {
+ get: function () { return cordovaPropertyGet(this, "MLLocalTextSetting"); },
+ set: function (value) { cordovaPropertySet(this, "MLLocalTextSetting", value); },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(HMSMLTextOriginal.prototype, "MLTextConfig", {
+ get: function () { return cordovaPropertyGet(this, "MLTextConfig"); },
+ set: function (value) { cordovaPropertySet(this, "MLTextConfig", value); },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(HMSMLTextOriginal.prototype, "MLRemoteTextSetting", {
+ get: function () { return cordovaPropertyGet(this, "MLRemoteTextSetting"); },
+ set: function (value) { cordovaPropertySet(this, "MLRemoteTextSetting", value); },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(HMSMLTextOriginal.prototype, "MLBcrCaptureConfig", {
+ get: function () { return cordovaPropertyGet(this, "MLBcrCaptureConfig"); },
+ set: function (value) { cordovaPropertySet(this, "MLBcrCaptureConfig", value); },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(HMSMLTextOriginal.prototype, "MLGcrCaptureUIConfig", {
+ get: function () { return cordovaPropertyGet(this, "MLGcrCaptureUIConfig"); },
+ set: function (value) { cordovaPropertySet(this, "MLGcrCaptureUIConfig", value); },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(HMSMLTextOriginal.prototype, "MLBcrResultConfig", {
+ get: function () { return cordovaPropertyGet(this, "MLBcrResultConfig"); },
+ set: function (value) { cordovaPropertySet(this, "MLBcrResultConfig", value); },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(HMSMLTextOriginal.prototype, "ImgSuperResolutionConfig", {
+ get: function () { return cordovaPropertyGet(this, "ImgSuperResolutionConfig"); },
+ set: function (value) { cordovaPropertySet(this, "ImgSuperResolutionConfig", value); },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(HMSMLTextOriginal.prototype, "MLFormRecogitionConfig", {
+ get: function () { return cordovaPropertyGet(this, "MLFormRecogitionConfig"); },
+ set: function (value) { cordovaPropertySet(this, "MLFormRecogitionConfig", value); },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(HMSMLTextOriginal.prototype, "MLProductConfig", {
+ get: function () { return cordovaPropertyGet(this, "MLProductConfig"); },
+ set: function (value) { cordovaPropertySet(this, "MLProductConfig", value); },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(HMSMLTextOriginal.prototype, "Colors", {
+ get: function () { return cordovaPropertyGet(this, "Colors"); },
+ set: function (value) { cordovaPropertySet(this, "Colors", value); },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(HMSMLTextOriginal.prototype, "RecMode", {
+ get: function () { return cordovaPropertyGet(this, "RecMode"); },
+ set: function (value) { cordovaPropertySet(this, "RecMode", value); },
+ enumerable: false,
+ configurable: true
+ });
+ HMSMLTextOriginal.pluginName = "HMSMLText";
+ HMSMLTextOriginal.plugin = "cordova-plugin-hms-mltext";
+ HMSMLTextOriginal.pluginRef = "HMSMLText";
+ HMSMLTextOriginal.platforms = ["Android"];
+ return HMSMLTextOriginal;
+}(IonicNativePlugin));
+var HMSMLText = new HMSMLTextOriginal();
+export { HMSMLText };
+export var RecMode;
+(function (RecMode) {
+ RecMode[RecMode["WEAK_MODE"] = 0] = "WEAK_MODE";
+ RecMode[RecMode["STRICT_MODE"] = 1] = "STRICT_MODE";
+})(RecMode || (RecMode = {}));
+export var MLBcrCaptureConfig;
+(function (MLBcrCaptureConfig) {
+ MLBcrCaptureConfig[MLBcrCaptureConfig["ERROR_CODE_INIT_CAMERA_FAILED"] = 10101] = "ERROR_CODE_INIT_CAMERA_FAILED";
+ MLBcrCaptureConfig[MLBcrCaptureConfig["RESULT_NUM_ONLY"] = 0] = "RESULT_NUM_ONLY";
+ MLBcrCaptureConfig[MLBcrCaptureConfig["ORIENTATION_AUTO"] = 0] = "ORIENTATION_AUTO";
+ MLBcrCaptureConfig[MLBcrCaptureConfig["WEAK_MODE"] = 0] = "WEAK_MODE";
+ MLBcrCaptureConfig[MLBcrCaptureConfig["ORIENTATION_LANDSCAPE"] = 1] = "ORIENTATION_LANDSCAPE";
+ MLBcrCaptureConfig[MLBcrCaptureConfig["ORIENTATION_PORTRAIT"] = 2] = "ORIENTATION_PORTRAIT";
+ MLBcrCaptureConfig[MLBcrCaptureConfig["RESULT_ALL"] = 2] = "RESULT_ALL";
+ MLBcrCaptureConfig[MLBcrCaptureConfig["RESULT_SIMPLE"] = 1] = "RESULT_SIMPLE";
+ MLBcrCaptureConfig[MLBcrCaptureConfig["STRICT_MODE"] = 1] = "STRICT_MODE";
+})(MLBcrCaptureConfig || (MLBcrCaptureConfig = {}));
+export var MLBcrResultConfig;
+(function (MLBcrResultConfig) {
+ MLBcrResultConfig[MLBcrResultConfig["RESULT_NUM_ONLY"] = 0] = "RESULT_NUM_ONLY";
+ MLBcrResultConfig[MLBcrResultConfig["RESULT_SIMPLE"] = 1] = "RESULT_SIMPLE";
+ MLBcrResultConfig[MLBcrResultConfig["RESULT_ALL"] = 2] = "RESULT_ALL";
+})(MLBcrResultConfig || (MLBcrResultConfig = {}));
+export var MLBcrCaptureErrorCode;
+(function (MLBcrCaptureErrorCode) {
+ MLBcrCaptureErrorCode[MLBcrCaptureErrorCode["ERROR_CODE_INIT_CAMERA_FAILED"] = 10101] = "ERROR_CODE_INIT_CAMERA_FAILED";
+})(MLBcrCaptureErrorCode || (MLBcrCaptureErrorCode = {}));
+export var MLRemoteTextSetting;
+(function (MLRemoteTextSetting) {
+ MLRemoteTextSetting[MLRemoteTextSetting["OCR_LOOSE_SCENE"] = 1] = "OCR_LOOSE_SCENE";
+ MLRemoteTextSetting[MLRemoteTextSetting["OCR_COMPACT_SCENE"] = 2] = "OCR_COMPACT_SCENE";
+ MLRemoteTextSetting["NGON"] = "NGON";
+ MLRemoteTextSetting["ARC"] = "ARC";
+ MLRemoteTextSetting[MLRemoteTextSetting["OTHER"] = 5] = "OTHER";
+ MLRemoteTextSetting[MLRemoteTextSetting["NEW_LINE_CHARACTER"] = 8] = "NEW_LINE_CHARACTER";
+ MLRemoteTextSetting[MLRemoteTextSetting["SPACE"] = 6] = "SPACE";
+})(MLRemoteTextSetting || (MLRemoteTextSetting = {}));
+export var MLFormRecogitionConfig;
+(function (MLFormRecogitionConfig) {
+ MLFormRecogitionConfig[MLFormRecogitionConfig["SYNC_TYPE"] = 1] = "SYNC_TYPE";
+ MLFormRecogitionConfig[MLFormRecogitionConfig["ASYNC_TYPE"] = 0] = "ASYNC_TYPE";
+})(MLFormRecogitionConfig || (MLFormRecogitionConfig = {}));
+export var gcrCaptureType;
+(function (gcrCaptureType) {
+ gcrCaptureType[gcrCaptureType["CAPTURE_ACTIVITY"] = 0] = "CAPTURE_ACTIVITY";
+ gcrCaptureType[gcrCaptureType["CAPTURE_PHOTO"] = 1] = "CAPTURE_PHOTO";
+ gcrCaptureType[gcrCaptureType["CAPTURE_IMAGE"] = 2] = "CAPTURE_IMAGE";
+})(gcrCaptureType || (gcrCaptureType = {}));
+export var MLGcrCaptureUIConfig;
+(function (MLGcrCaptureUIConfig) {
+ MLGcrCaptureUIConfig[MLGcrCaptureUIConfig["ORIENTATION_AUTO"] = 0] = "ORIENTATION_AUTO";
+ MLGcrCaptureUIConfig[MLGcrCaptureUIConfig["ORIENTATION_LANDSCAPE"] = 1] = "ORIENTATION_LANDSCAPE";
+ MLGcrCaptureUIConfig[MLGcrCaptureUIConfig["ORIENTATION_PORTRAIT"] = 2] = "ORIENTATION_PORTRAIT";
+})(MLGcrCaptureUIConfig || (MLGcrCaptureUIConfig = {}));
+export var icrCaptureType;
+(function (icrCaptureType) {
+ icrCaptureType[icrCaptureType["CAPTURE_CAMERA"] = 0] = "CAPTURE_CAMERA";
+ icrCaptureType[icrCaptureType["CAPTURE_IMAGE"] = 1] = "CAPTURE_IMAGE";
+})(icrCaptureType || (icrCaptureType = {}));
+export var MLIcrSideType;
+(function (MLIcrSideType) {
+ MLIcrSideType["FRONT"] = "FRONT";
+ MLIcrSideType["BACK"] = "BACK";
+})(MLIcrSideType || (MLIcrSideType = {}));
+export var ImgSuperResolutionConfig;
+(function (ImgSuperResolutionConfig) {
+ ImgSuperResolutionConfig[ImgSuperResolutionConfig["ISR_SCALE_1X"] = 1] = "ISR_SCALE_1X";
+ ImgSuperResolutionConfig[ImgSuperResolutionConfig["ISR_SCALE_3X"] = 3] = "ISR_SCALE_3X";
+})(ImgSuperResolutionConfig || (ImgSuperResolutionConfig = {}));
+export var MLProductConfig;
+(function (MLProductConfig) {
+ MLProductConfig[MLProductConfig["REGION_DR_CHINA"] = 1002] = "REGION_DR_CHINA";
+ MLProductConfig[MLProductConfig["REGION_DR_AFILA"] = 1003] = "REGION_DR_AFILA";
+ MLProductConfig[MLProductConfig["REGION_DR_EUROPE"] = 1004] = "REGION_DR_EUROPE";
+ MLProductConfig[MLProductConfig["REGION_DR_RUSSIA"] = 1005] = "REGION_DR_RUSSIA";
+ MLProductConfig[MLProductConfig["REGION_DR_GERMAN"] = 1006] = "REGION_DR_GERMAN";
+ MLProductConfig[MLProductConfig["REGION_DR_SIANGAPORE"] = 1007] = "REGION_DR_SIANGAPORE";
+})(MLProductConfig || (MLProductConfig = {}));
+export var MLLocalTextSetting;
+(function (MLLocalTextSetting) {
+ MLLocalTextSetting[MLLocalTextSetting["OCR_DETECT_MODE"] = 1] = "OCR_DETECT_MODE";
+ MLLocalTextSetting[MLLocalTextSetting["OCR_TRACKING_MODE"] = 2] = "OCR_TRACKING_MODE";
+})(MLLocalTextSetting || (MLLocalTextSetting = {}));
+export var MLTextConfig;
+(function (MLTextConfig) {
+ MLTextConfig[MLTextConfig["OCR_LOCAL_TYPE"] = 0] = "OCR_LOCAL_TYPE";
+ MLTextConfig[MLTextConfig["OCR_REMOTE_TYPE"] = 1] = "OCR_REMOTE_TYPE";
+})(MLTextConfig || (MLTextConfig = {}));
+export var Colors;
+(function (Colors) {
+ Colors[Colors["RED"] = -65536] = "RED";
+ Colors[Colors["DKGRAY"] = -12303292] = "DKGRAY";
+ Colors[Colors["GRAY"] = -7829368] = "GRAY";
+ Colors[Colors["WHITE"] = -1] = "WHITE";
+ Colors[Colors["BLUE"] = -16776961] = "BLUE";
+ Colors[Colors["BLACK"] = -16777216] = "BLACK";
+ Colors[Colors["LTGRAY"] = -3355444] = "LTGRAY";
+ Colors[Colors["MAGENTA"] = -65281] = "MAGENTA";
+ Colors[Colors["YELLOW"] = -256] = "YELLOW";
+ Colors[Colors["CYAN"] = -16711681] = "CYAN";
+ Colors[Colors["GREEN"] = -16711936] = "GREEN";
+ Colors[Colors["TRANSPARENT"] = 0] = "TRANSPARENT";
+})(Colors || (Colors = {}));
+export var CordovaErrors;
+(function (CordovaErrors) {
+ CordovaErrors[CordovaErrors["UNKNOWN"] = -1] = "UNKNOWN";
+ CordovaErrors[CordovaErrors["SUCCESS"] = 0] = "SUCCESS";
+ CordovaErrors[CordovaErrors["DISCARDED"] = 1] = "DISCARDED";
+ CordovaErrors[CordovaErrors["INNER"] = 2] = "INNER";
+ CordovaErrors[CordovaErrors["INACTIVE"] = 3] = "INACTIVE";
+ CordovaErrors[CordovaErrors["NOT_SUPPORTED"] = 4] = "NOT_SUPPORTED";
+ CordovaErrors[CordovaErrors["ILLEGAL_PARAMETER"] = 5] = "ILLEGAL_PARAMETER";
+ CordovaErrors[CordovaErrors["OVERDUE"] = 6] = "OVERDUE";
+ CordovaErrors[CordovaErrors["NO_FOUND"] = 7] = "NO_FOUND";
+ CordovaErrors[CordovaErrors["DUPLICATE_FOUND"] = 8] = "DUPLICATE_FOUND";
+ CordovaErrors[CordovaErrors["NO_PERMISSION"] = 9] = "NO_PERMISSION";
+ CordovaErrors[CordovaErrors["INSUFFICIENT_RESOURCE"] = 10] = "INSUFFICIENT_RESOURCE";
+ CordovaErrors[CordovaErrors["ANALYSIS_FAILURE"] = 11] = "ANALYSIS_FAILURE";
+ CordovaErrors[CordovaErrors["INTERRUPTED"] = 12] = "INTERRUPTED";
+ CordovaErrors[CordovaErrors["EXCEED_RANGE"] = 13] = "EXCEED_RANGE";
+ CordovaErrors[CordovaErrors["DATA_MISSING"] = 14] = "DATA_MISSING";
+ CordovaErrors[CordovaErrors["AUTHENTICATION_REQUIRED"] = 15] = "AUTHENTICATION_REQUIRED";
+ CordovaErrors[CordovaErrors["TFLITE_NOT_COMPATIBLE"] = 16] = "TFLITE_NOT_COMPATIBLE";
+ CordovaErrors[CordovaErrors["INSUFFICIENT_SPACE"] = 17] = "INSUFFICIENT_SPACE";
+ CordovaErrors[CordovaErrors["HASH_MISS"] = 18] = "HASH_MISS";
+ CordovaErrors[CordovaErrors["TOKEN_INVALID"] = 19] = "TOKEN_INVALID";
+ CordovaErrors[CordovaErrors["SERVICE_FAILURE"] = 20] = "SERVICE_FAILURE";
+ CordovaErrors[CordovaErrors["ANALYSIS_NULL"] = 21] = "ANALYSIS_NULL";
+})(CordovaErrors || (CordovaErrors = {}));
+export var Region;
+(function (Region) {
+ Region[Region["REGION_DR_UNKNOWN"] = 1001] = "REGION_DR_UNKNOWN";
+ Region[Region["REGION_DR_CHINA"] = 1002] = "REGION_DR_CHINA";
+ Region[Region["REGION_DR_RUSSIA"] = 1005] = "REGION_DR_RUSSIA";
+ Region[Region["REGION_DR_GERMAN"] = 1006] = "REGION_DR_GERMAN";
+ Region[Region["REGION_DR_SINGAPORE"] = 1007] = "REGION_DR_SINGAPORE";
+})(Region || (Region = {}));
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvQGlvbmljLW5hdGl2ZS9wbHVnaW5zL25hdGl2ZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBaUJBLE9BQU8sc0VBS04sTUFBTSxvQkFBb0IsQ0FBQzs7SUFTUyxtQ0FBaUI7Ozs7SUEyQmxEOzs7T0FHRztJQUNILG9DQUFVO0lBSVY7OztPQUdHO0lBQ0gsaUNBQU87SUFJUDs7O09BR0c7SUFDSCw2Q0FBbUI7SUFJbkI7Ozs7T0FJRztJQUNILG9DQUFVLGFBQUMsYUFBNEI7SUFJdkM7Ozs7T0FJRztJQUNILHNDQUFZLGFBQUMsR0FBUTtJQUlyQjs7OztPQUlHO0lBQ0gsc0NBQVksYUFBQyxHQUFRO0lBSXJCOzs7T0FHRztJQUNILHNDQUFZO0lBSVo7OztPQUdHO0lBQ0gsdUNBQWE7MEJBeEZiLCtDQUFrQjs7Ozs7OzBCQUVsQiw2Q0FBZ0I7Ozs7OzswQkFFaEIseUNBQVk7Ozs7OzswQkFFWixnREFBbUI7Ozs7OzswQkFFbkIsK0NBQWtCOzs7Ozs7MEJBRWxCLGlEQUFvQjs7Ozs7OzBCQUVwQiw4Q0FBaUI7Ozs7OzswQkFFakIscURBQXdCOzs7Ozs7MEJBRXhCLG1EQUFzQjs7Ozs7OzBCQUV0Qiw0Q0FBZTs7Ozs7OzBCQUVmLDJDQUFjOzs7Ozs7MEJBRWQsbUNBQU07Ozs7Ozs7Ozs7MEJBdkRWO0VBK0JxQyxpQkFBaUI7U0FBekMsZUFBZTs7SUFxR0csNkJBQWlCOzs7O0lBNkI1Qzs7OztPQUlHO0lBQ0gscUNBQWlCLGFBQ2Isc0JBQThEO0lBS2xFOzs7T0FHRztJQUNILG9DQUFnQjtJQUloQjs7O09BR0c7SUFDSCx1Q0FBbUI7SUFJbkI7Ozs7T0FJRztJQUNILHlDQUFxQixhQUNqQix3QkFBa0Q7SUFLdEQ7OztPQUdHO0lBQ0gsNkNBQXlCO0lBSXpCOzs7T0FHRztJQUNILDhDQUEwQjtJQUkxQjs7O09BR0c7SUFDSCxtREFBK0I7SUFJL0I7OztPQUdHO0lBQ0gsMENBQXNCO0lBSXRCOzs7T0FHRztJQUNILGlDQUFhO0lBSWI7OztPQUdHO0lBQ0gsK0NBQTJCO0lBRzNCOzs7O09BSUc7SUFDSCxvQ0FBZ0IsR0FBaEIsVUFDSSxxQkFFK0I7UUFFL0IsT0FBTztJQUNYLENBQUM7SUFFRDs7O09BR0c7SUFDSCx3Q0FBb0I7SUFJcEIsb0NBQWdCLGFBQUMsa0JBQXNDO0lBSXZELGlDQUFhLGFBQUMsa0JBQXNDO0lBSXBEOzs7T0FHRztJQUNILDhDQUEwQjtJQUkxQjs7OztPQUlHO0lBQ0gsdUNBQW1CLGFBQ2Ysc0JBQThDO0lBS2xEOzs7O09BSUc7SUFDSCxxQ0FBaUIsYUFDYixnQkFBa0M7SUFLdEM7Ozs7T0FJRztJQUNILDJDQUF1QixhQUNuQix5QkFBb0Q7SUFLeEQsb0NBQWdCLGFBQ1osZ0JBQWtDO0lBTXRDLGdEQUE0QixhQUN4QixlQUFnQztJQU1wQyx3Q0FBb0I7SUFLcEIsd0NBQW9CO0lBS3BCLG1DQUFlO0lBSWYsd0NBQW9CO0lBSXBCLG1DQUFlO0lBSWYsbUNBQWU7SUFLZix1Q0FBbUIsYUFBQyxTQUFnQztJQUlwRCwrQkFBVztJQUlYLGtDQUFjO0lBSWQsaUNBQWEsYUFBQyxNQUFjO0lBSTVCLGtDQUFjOzBCQS9PZCx1Q0FBZ0I7Ozs7OzswQkFFaEIscUNBQWM7Ozs7OzswQkFFZCx5Q0FBa0I7Ozs7OzswQkFFbEIsbUNBQVk7Ozs7OzswQkFFWiwwQ0FBbUI7Ozs7OzswQkFFbkIseUNBQWtCOzs7Ozs7MEJBRWxCLDJDQUFvQjs7Ozs7OzBCQUVwQix3Q0FBaUI7Ozs7OzswQkFFakIsK0NBQXdCOzs7Ozs7MEJBRXhCLDZDQUFzQjs7Ozs7OzBCQUV0QixzQ0FBZTs7Ozs7OzBCQUVmLDZCQUFNOzs7Ozs7MEJBRU4sOEJBQU87Ozs7Ozs7Ozs7b0JBOUpYO0VBb0krQixpQkFBaUI7U0FBbkMsU0FBUztBQXVTdEIsTUFBTSxDQUFOLElBQVksT0FHWDtBQUhELFdBQVksT0FBTztJQUNmLCtDQUFhLENBQUE7SUFDYixtREFBZSxDQUFBO0FBQ25CLENBQUMsRUFIVyxPQUFPLEtBQVAsT0FBTyxRQUdsQjtBQUVELE1BQU0sQ0FBTixJQUFZLGtCQVVYO0FBVkQsV0FBWSxrQkFBa0I7SUFDMUIsaUhBQXFDLENBQUE7SUFDckMsaUZBQW1CLENBQUE7SUFDbkIsbUZBQW9CLENBQUE7SUFDcEIscUVBQWEsQ0FBQTtJQUNiLDZGQUF5QixDQUFBO0lBQ3pCLDJGQUF3QixDQUFBO0lBQ3hCLHVFQUFjLENBQUE7SUFDZCw2RUFBaUIsQ0FBQTtJQUNqQix5RUFBZSxDQUFBO0FBQ25CLENBQUMsRUFWVyxrQkFBa0IsS0FBbEIsa0JBQWtCLFFBVTdCO0FBQ0QsTUFBTSxDQUFOLElBQVksaUJBSVg7QUFKRCxXQUFZLGlCQUFpQjtJQUN6QiwrRUFBbUIsQ0FBQTtJQUNuQiwyRUFBaUIsQ0FBQTtJQUNqQixxRUFBYyxDQUFBO0FBQ2xCLENBQUMsRUFKVyxpQkFBaUIsS0FBakIsaUJBQWlCLFFBSTVCO0FBYUQsTUFBTSxDQUFOLElBQVkscUJBRVg7QUFGRCxXQUFZLHFCQUFxQjtJQUM3Qix1SEFBcUMsQ0FBQTtBQUN6QyxDQUFDLEVBRlcscUJBQXFCLEtBQXJCLHFCQUFxQixRQUVoQztBQWVELE1BQU0sQ0FBTixJQUFZLG1CQVFYO0FBUkQsV0FBWSxtQkFBbUI7SUFDM0IsbUZBQW1CLENBQUE7SUFDbkIsdUZBQXFCLENBQUE7SUFDckIsb0NBQWEsQ0FBQTtJQUNiLGtDQUFXLENBQUE7SUFDWCwrREFBUyxDQUFBO0lBQ1QseUZBQXNCLENBQUE7SUFDdEIsK0RBQVMsQ0FBQTtBQUNiLENBQUMsRUFSVyxtQkFBbUIsS0FBbkIsbUJBQW1CLFFBUTlCO0FBVUQsTUFBTSxDQUFOLElBQVksc0JBR1g7QUFIRCxXQUFZLHNCQUFzQjtJQUM5Qiw2RUFBYSxDQUFBO0lBQ2IsK0VBQWMsQ0FBQTtBQUNsQixDQUFDLEVBSFcsc0JBQXNCLEtBQXRCLHNCQUFzQixRQUdqQztBQWFELE1BQU0sQ0FBTixJQUFZLGNBSVg7QUFKRCxXQUFZLGNBQWM7SUFDdEIsMkVBQW9CLENBQUE7SUFDcEIscUVBQWlCLENBQUE7SUFDakIscUVBQWlCLENBQUE7QUFDckIsQ0FBQyxFQUpXLGNBQWMsS0FBZCxjQUFjLFFBSXpCO0FBdUJELE1BQU0sQ0FBTixJQUFZLG9CQUlYO0FBSkQsV0FBWSxvQkFBb0I7SUFDNUIsdUZBQW9CLENBQUE7SUFDcEIsaUdBQXlCLENBQUE7SUFDekIsK0ZBQXdCLENBQUE7QUFDNUIsQ0FBQyxFQUpXLG9CQUFvQixLQUFwQixvQkFBb0IsUUFJL0I7QUFlRCxNQUFNLENBQU4sSUFBWSxjQUdYO0FBSEQsV0FBWSxjQUFjO0lBQ3RCLHVFQUFrQixDQUFBO0lBQ2xCLHFFQUFpQixDQUFBO0FBQ3JCLENBQUMsRUFIVyxjQUFjLEtBQWQsY0FBYyxRQUd6QjtBQWdCRCxNQUFNLENBQU4sSUFBWSxhQUdYO0FBSEQsV0FBWSxhQUFhO0lBQ3JCLGdDQUFlLENBQUE7SUFDZiw4QkFBYSxDQUFBO0FBQ2pCLENBQUMsRUFIVyxhQUFhLEtBQWIsYUFBYSxRQUd4QjtBQWFELE1BQU0sQ0FBTixJQUFZLHdCQUdYO0FBSEQsV0FBWSx3QkFBd0I7SUFDaEMsdUZBQWtCLENBQUE7SUFDbEIsdUZBQWtCLENBQUE7QUFDdEIsQ0FBQyxFQUhXLHdCQUF3QixLQUF4Qix3QkFBd0IsUUFHbkM7QUFjRCxNQUFNLENBQU4sSUFBWSxlQU9YO0FBUEQsV0FBWSxlQUFlO0lBQ3ZCLDhFQUFzQixDQUFBO0lBQ3RCLDhFQUFzQixDQUFBO0lBQ3RCLGdGQUF1QixDQUFBO0lBQ3ZCLGdGQUF1QixDQUFBO0lBQ3ZCLGdGQUF1QixDQUFBO0lBQ3ZCLHdGQUEyQixDQUFBO0FBQy9CLENBQUMsRUFQVyxlQUFlLEtBQWYsZUFBZSxRQU8xQjtBQWtCRCxNQUFNLENBQU4sSUFBWSxrQkFHWDtBQUhELFdBQVksa0JBQWtCO0lBQzFCLGlGQUFtQixDQUFBO0lBQ25CLHFGQUFxQixDQUFBO0FBQ3pCLENBQUMsRUFIVyxrQkFBa0IsS0FBbEIsa0JBQWtCLFFBRzdCO0FBQ0QsTUFBTSxDQUFOLElBQVksWUFHWDtBQUhELFdBQVksWUFBWTtJQUNwQixtRUFBa0IsQ0FBQTtJQUNsQixxRUFBbUIsQ0FBQTtBQUN2QixDQUFDLEVBSFcsWUFBWSxLQUFaLFlBQVksUUFHdkI7QUFpS0QsTUFBTSxDQUFOLElBQVksTUFhWDtBQWJELFdBQVksTUFBTTtJQUNkLHNDQUFZLENBQUE7SUFDWiwrQ0FBa0IsQ0FBQTtJQUNsQiwwQ0FBZSxDQUFBO0lBQ2Ysc0NBQVUsQ0FBQTtJQUNWLDJDQUFnQixDQUFBO0lBQ2hCLDZDQUFpQixDQUFBO0lBQ2pCLDhDQUFpQixDQUFBO0lBQ2pCLDhDQUFnQixDQUFBO0lBQ2hCLDBDQUFhLENBQUE7SUFDYiwyQ0FBZ0IsQ0FBQTtJQUNoQiw2Q0FBaUIsQ0FBQTtJQUNqQixpREFBZSxDQUFBO0FBQ25CLENBQUMsRUFiVyxNQUFNLEtBQU4sTUFBTSxRQWFqQjtBQUVELE1BQU0sQ0FBTixJQUFZLGFBd0JYO0FBeEJELFdBQVksYUFBYTtJQUNyQix3REFBWSxDQUFBO0lBQ1osdURBQVcsQ0FBQTtJQUNYLDJEQUFhLENBQUE7SUFDYixtREFBUyxDQUFBO0lBQ1QseURBQVksQ0FBQTtJQUNaLG1FQUFpQixDQUFBO0lBQ2pCLDJFQUFxQixDQUFBO0lBQ3JCLHVEQUFXLENBQUE7SUFDWCx5REFBWSxDQUFBO0lBQ1osdUVBQW1CLENBQUE7SUFDbkIsbUVBQWlCLENBQUE7SUFDakIsb0ZBQTBCLENBQUE7SUFDMUIsMEVBQXFCLENBQUE7SUFDckIsZ0VBQWdCLENBQUE7SUFDaEIsa0VBQWlCLENBQUE7SUFDakIsa0VBQWlCLENBQUE7SUFDakIsd0ZBQTRCLENBQUE7SUFDNUIsb0ZBQTBCLENBQUE7SUFDMUIsOEVBQXVCLENBQUE7SUFDdkIsNERBQWMsQ0FBQTtJQUNkLG9FQUFrQixDQUFBO0lBQ2xCLHdFQUFvQixDQUFBO0lBQ3BCLG9FQUFrQixDQUFBO0FBQ3RCLENBQUMsRUF4QlcsYUFBYSxLQUFiLGFBQWEsUUF3QnhCO0FBR0QsTUFBTSxDQUFOLElBQVksTUFNWDtBQU5ELFdBQVksTUFBTTtJQUNsQixnRUFBd0IsQ0FBQTtJQUN4Qiw0REFBc0IsQ0FBQTtJQUN0Qiw4REFBdUIsQ0FBQTtJQUN2Qiw4REFBdUIsQ0FBQTtJQUN2QixvRUFBMEIsQ0FBQTtBQUMxQixDQUFDLEVBTlcsTUFBTSxLQUFOLE1BQU0sUUFNakIiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICAgIENvcHlyaWdodCAyMDIzLiBIdWF3ZWkgVGVjaG5vbG9naWVzIENvLiwgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuXG4gICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKVxuICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiovXG5cbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHtcbiAgICBQbHVnaW4sXG4gICAgQ29yZG92YSxcbiAgICBDb3Jkb3ZhUHJvcGVydHksIFxuICAgIElvbmljTmF0aXZlUGx1Z2luLFxufSBmcm9tIFwiQGlvbmljLW5hdGl2ZS9jb3JlXCI7XG5cbkBQbHVnaW4oe1xuICAgIHBsdWdpbk5hbWU6IFwiSE1TTUxUZXh0UGx1Z2luXCIsXG4gICAgcGx1Z2luOiBcImNvcmRvdmEtcGx1Z2luLWhtcy1tbHRleHRcIiwgLy8gbnBtIHBhY2thZ2UgbmFtZSwgZXhhbXBsZTogY29yZG92YS1wbHVnaW4tY2FtZXJhXG4gICAgcGx1Z2luUmVmOiBcIkhNU01MVGV4dFBsdWdpblwiLCAvLyB0aGUgdmFyaWFibGUgcmVmZXJlbmNlIHRvIGNhbGwgdGhlIHBsdWdpbiwgZXhhbXBsZTogbmF2aWdhdG9yLmdlb2xvY2F0aW9uXG4gICAgcGxhdGZvcm1zOiBbXCJBbmRyb2lkXCJdLCAvLyBBcnJheSBvZiBwbGF0Zm9ybXMgc3VwcG9ydGVkLCBleGFtcGxlOiBbJ0FuZHJvaWQnLCAnaU9TJ11cbn0pXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgSE1TTUxUZXh0UGx1Z2luIGV4dGVuZHMgSW9uaWNOYXRpdmVQbHVnaW4ge1xuICAgIEBDb3Jkb3ZhUHJvcGVydHkoKVxuICAgIE1MTG9jYWxUZXh0U2V0dGluZyA9IE1MTG9jYWxUZXh0U2V0dGluZztcbiAgICBAQ29yZG92YVByb3BlcnR5KClcbiAgICBpY3JWbkNhcHR1cmVUeXBlID0gaWNyQ2FwdHVyZVR5cGU7XG4gICAgQENvcmRvdmFQcm9wZXJ0eSgpXG4gICAgTUxUZXh0Q29uZmlnID0gTUxUZXh0Q29uZmlnO1xuICAgIEBDb3Jkb3ZhUHJvcGVydHkoKVxuICAgIE1MUmVtb3RlVGV4dFNldHRpbmcgPSBNTFJlbW90ZVRleHRTZXR0aW5nO1xuICAgIEBDb3Jkb3ZhUHJvcGVydHkoKVxuICAgIE1MQmNyQ2FwdHVyZUNvbmZpZyA9IE1MQmNyQ2FwdHVyZUNvbmZpZztcbiAgICBAQ29yZG92YVByb3BlcnR5KClcbiAgICBNTEdjckNhcHR1cmVVSUNvbmZpZyA9IE1MR2NyQ2FwdHVyZVVJQ29uZmlnO1xuICAgIEBDb3Jkb3ZhUHJvcGVydHkoKVxuICAgIE1MQmNyUmVzdWx0Q29uZmlnID0gTUxCY3JSZXN1bHRDb25maWc7XG4gICAgQENvcmRvdmFQcm9wZXJ0eSgpXG4gICAgSW1nU3VwZXJSZXNvbHV0aW9uQ29uZmlnID0gSW1nU3VwZXJSZXNvbHV0aW9uQ29uZmlnO1xuICAgIEBDb3Jkb3ZhUHJvcGVydHkoKVxuICAgIE1MRm9ybVJlY29naXRpb25Db25maWcgPSBNTEZvcm1SZWNvZ2l0aW9uQ29uZmlnO1xuICAgIEBDb3Jkb3ZhUHJvcGVydHkoKVxuICAgIE1MUHJvZHVjdENvbmZpZyA9IE1MUHJvZHVjdENvbmZpZztcbiAgICBAQ29yZG92YVByb3BlcnR5KClcbiAgICBnY3JDYXB0dXJlVHlwZSA9IGdjckNhcHR1cmVUeXBlO1xuICAgIEBDb3Jkb3ZhUHJvcGVydHkoKVxuICAgIENvbG9ycyA9IENvbG9ycztcblxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXG4gICAgLyoqXG4gICAgICogTW9uaXRvcnMgcGhvdG9ncmFwaGluZy5cbiAgICAgKiBAcmV0dXJucyBQcm9taXNlPGFueT5cbiAgICAgKi9cbiAgICBwaG90b2dyYXBoKCk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcbiAgICAvKipcbiAgICAgKiBDbG9zZSBsZW5zIGVuZ2luZS5cbiAgICAgKiBAcmV0dXJucyBQcm9taXNlPGFueT5cbiAgICAgKi9cbiAgICBkZXN0cm95KCk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcbiAgICAvKipcbiAgICAgKiBPYnRhaW5zIHRoZSBzaXplIG9mIHRoZSBwcmV2aWV3IGltYWdlIG9mIGEgY2FtZXJhLlxuICAgICAqIEByZXR1cm5zIFByb21pc2U8YW55PlxuICAgICAqL1xuICAgIGdldERpc3BsYXlEaW1lbnNpb24oKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxuICAgIC8qKlxuICAgICAqIEFuIGFwcCBpbmZvcm1hdGlvbiBjbGFzcyB1c2VkIHRvIHN0b3JlIGJhc2ljIGluZm9ybWF0aW9uIGFib3V0IGFwcHMgd2l0aCB0aGUgSE1TIENvcmUgTUwgU0RLIGludGVncmF0ZWQgYW5kIGNvbXBsZXRlIHRoZSBpbml0aWFsaXphdGlvbiBvZiBNTCBUZXh0IEtpdC4gV2hlbiB1c2luZyBjbG91ZCBzZXJ2aWNlcyBvZiB0aGUgTUwgVGV4dCBLaXQsIHlvdSBuZWVkIHRvIHNldCB0aGUgYXBpS2V5IG9mIHlvdXIgYXBwLlxuICAgICAqIEBwYXJhbSAge2FwcFNldHRpbmdSZXF9IGFwcFNldHRpbmdSZXEgUmVwcmVzZW50cyB0aGUgcGFyYW1ldGVyIHJlcXVpcmVkLlxuICAgICAqIEByZXR1cm5zIFByb21pc2U8YW55PlxuICAgICAqL1xuICAgIGFwcFNldHRpbmcoYXBwU2V0dGluZ1JlcTogYXBwU2V0dGluZ1JlcSk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcbiAgICAvKipcbiAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gY29sbGVjdCBzdGF0aXN0aWNzIG9uIHRoZSBjdXJyZW50IGFwcC5cbiAgICAgKiBAcGFyYW0ge2FueX0gYW55XG4gICAgICogQHJldHVybnMgUHJvbWlzZTxhbnk+XG4gICAgICovXG4gICAgc2V0U3RhdGlzdGljKGFueTogYW55KTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxuICAgIC8qKlxuICAgICAqIERldGVybWluZXMgd2hldGhlciB0byBjb2xsZWN0IHN0YXRpc3RpY3Mgb24gdGhlIGN1cnJlbnQgYXBwLlxuICAgICAqKiBAcGFyYW0ge2FueX0gYW55XG4gICAgICogIEByZXR1cm5zIFByb21pc2U8YW55PlxuICAgICAqL1xuICAgIGdldFN0YXRpc3RpYyhhbnk6IGFueSk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcbiAgICAvKipcbiAgICAgKiBUaGlzIHNlcnZpY2UgZW5hYmxlIGxvZ2dlciBzZXJ2aWNlLlxuICAgICAqIEByZXR1cm5zIFByb21pc2U8YW55PlxuICAgICAqL1xuICAgIGVuYWJsZUxvZ2dlcigpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXG4gICAgLyoqXG4gICAgICogVGhpcyBzZXJ2aWNlIGRpc2FibGUgbG9nZ2VyIHNlcnZpY2UuXG4gICAgICogQHJldHVybnMgUHJvbWlzZTxhbnk+XG4gICAgICovXG4gICAgZGlzYWJsZUxvZ2dlcigpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICByZXR1cm47XG4gICAgfVxufVxuQFBsdWdpbih7XG4gICAgcGx1Z2luTmFtZTogXCJITVNNTFRleHRcIixcbiAgICBwbHVnaW46IFwiY29yZG92YS1wbHVnaW4taG1zLW1sdGV4dFwiLCAvLyBucG0gcGFja2FnZSBuYW1lLCBleGFtcGxlOiBjb3Jkb3ZhLXBsdWdpbi1jYW1lcmFcbiAgICBwbHVnaW5SZWY6IFwiSE1TTUxUZXh0XCIsIC8vIHRoZSB2YXJpYWJsZSByZWZlcmVuY2UgdG8gY2FsbCB0aGUgcGx1Z2luLCBleGFtcGxlOiBuYXZpZ2F0b3IuZ2VvbG9jYXRpb25cbiAgICBwbGF0Zm9ybXM6IFtcIkFuZHJvaWRcIl0sIC8vIEFycmF5IG9mIHBsYXRmb3JtcyBzdXBwb3J0ZWQsIGV4YW1wbGU6IFsnQW5kcm9pZCcsICdpT1MnXVxufSlcbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBITVNNTFRleHQgZXh0ZW5kcyBJb25pY05hdGl2ZVBsdWdpbiB7XG4gICAgQENvcmRvdmFQcm9wZXJ0eSgpXG4gICAgaWNyVm5DYXB0dXJlVHlwZSA9IGljckNhcHR1cmVUeXBlO1xuICAgIEBDb3Jkb3ZhUHJvcGVydHkoKVxuICAgIGdjckNhcHR1cmVUeXBlID0gZ2NyQ2FwdHVyZVR5cGU7XG4gICAgQENvcmRvdmFQcm9wZXJ0eSgpXG4gICAgTUxMb2NhbFRleHRTZXR0aW5nID0gTUxMb2NhbFRleHRTZXR0aW5nO1xuICAgIEBDb3Jkb3ZhUHJvcGVydHkoKVxuICAgIE1MVGV4dENvbmZpZyA9IE1MVGV4dENvbmZpZztcbiAgICBAQ29yZG92YVByb3BlcnR5KClcbiAgICBNTFJlbW90ZVRleHRTZXR0aW5nID0gTUxSZW1vdGVUZXh0U2V0dGluZztcbiAgICBAQ29yZG92YVByb3BlcnR5KClcbiAgICBNTEJjckNhcHR1cmVDb25maWcgPSBNTEJjckNhcHR1cmVDb25maWc7XG4gICAgQENvcmRvdmFQcm9wZXJ0eSgpXG4gICAgTUxHY3JDYXB0dXJlVUlDb25maWcgPSBNTEdjckNhcHR1cmVVSUNvbmZpZztcbiAgICBAQ29yZG92YVByb3BlcnR5KClcbiAgICBNTEJjclJlc3VsdENvbmZpZyA9IE1MQmNyUmVzdWx0Q29uZmlnO1xuICAgIEBDb3Jkb3ZhUHJvcGVydHkoKVxuICAgIEltZ1N1cGVyUmVzb2x1dGlvbkNvbmZpZyA9IEltZ1N1cGVyUmVzb2x1dGlvbkNvbmZpZztcbiAgICBAQ29yZG92YVByb3BlcnR5KClcbiAgICBNTEZvcm1SZWNvZ2l0aW9uQ29uZmlnID0gTUxGb3JtUmVjb2dpdGlvbkNvbmZpZztcbiAgICBAQ29yZG92YVByb3BlcnR5KClcbiAgICBNTFByb2R1Y3RDb25maWcgPSBNTFByb2R1Y3RDb25maWc7XG4gICAgQENvcmRvdmFQcm9wZXJ0eSgpXG4gICAgQ29sb3JzID0gQ29sb3JzO1xuICAgIEBDb3Jkb3ZhUHJvcGVydHkoKVxuICAgIFJlY01vZGUgPSBSZWNNb2RlO1xuXG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBzdGFydCB0aGUgVGV4dCBhbmFseXplci5cbiAgICAgKiBAcGFyYW0gIHtsb2NhbEltYWdlVGV4dFJlcXxyZW1vdGVJbWFnZVRleHRSZXF9IEltYWdlVGV4dEFuYWx5c2VySW5wdXQgUmVwZXJlc2VudHMgdGhlIG5lY2Vzc2FyeSBwYXJhbWV0ZXJzIHRvIGNvbnZlcnQgaW1hZ2VzIHRvIHRleHQgZm9ybWF0LlxuICAgICAqIEByZXR1cm5zIFByb21pc2UgPFRleHRBbmFseXNlcj5cbiAgICAgKi9cbiAgICBpbWFnZVRleHRBbmFseXNlcihcbiAgICAgICAgSW1hZ2VUZXh0QW5hbHlzZXJJbnB1dDogbG9jYWxJbWFnZVRleHRSZXEgfCByZW1vdGVJbWFnZVRleHRSZXFcbiAgICApOiBQcm9taXNlPE1MVGV4dD4ge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2Qgc3RvcCB0aGUgVGV4dCBhbmFseXplci5cbiAgICAgKiBAcmV0dXJucyBQcm9taXNlPGFueT5cbiAgICAgKi9cbiAgICBzdG9wVGV4dEFuYWx5c2VyKCk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBnaXZlcyBUZXh0IEFuYWx5c2VyIGluZm9ybWF0aW9uLlxuICAgICAqIEByZXR1cm5zIFByb21pc2U8YW55PlxuICAgICAqL1xuICAgIGdldFRleHRBbmFseXNlckluZm8oKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIHByb3ZpZGVzIGEgZG9jdW1lbnQgcmVjb2duaXRpb24gY29tcG9uZW50IHRoYXQgcmVjb2duaXplcyB0ZXh0IGZyb20gaW1hZ2VzIG9mIGRvY3VtZW50cy5cbiAgICAgKiBAcGFyYW0gIHtkb2N1bWVudEltYWdlQW5hbHlzZXJSZXF9IGRvY3VtZW50SW1hZ2VBbmFseXNlclJlcSBSZXBlcmVzZW50cyB0aGUgbmVjZXNzYXJ5IHBhcmFtZXRlciB0byBjb252ZXJ0IGRvY3VtZW50IGltYWdlcyB0byB0ZXh0IGZvcm1hdC5cbiAgICAgKiBAcmV0dXJucyBQcm9taXNlPERvY3VtZW50QW5hbHlzZXI+XG4gICAgICovXG4gICAgZG9jdW1lbnRJbWFnZUFuYWx5c2VyKFxuICAgICAgICBkb2N1bWVudEltYWdlQW5hbHlzZXJSZXE6IGRvY3VtZW50SW1hZ2VBbmFseXNlclJlcVxuICAgICk6IFByb21pc2U8TUxEb2N1bWVudD4ge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2Qgc3RvcCB0aGUgRG9jdW1lbnQgYW5hbHl6ZXIuXG4gICAgICogQHJldHVybnMgUHJvbWlzZTxhbnk+XG4gICAgICovXG4gICAgc3RvcERvY3VtZW50SW1hZ2VBbmFseXNlcigpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgY2xvc2UgdGhlIERvY3VtZW50IGFuYWx5emVyLlxuICAgICAqIEByZXR1cm5zIFByb21pc2U8YW55PlxuICAgICAqL1xuICAgIGNsb3NlRG9jdW1lbnRJbWFnZUFuYWx5c2VyKCk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBEb2N1bWVudCBhbmFseXplciBzZXR0aW5nLlxuICAgICAqIEByZXR1cm5zIFByb21pc2U8YW55PlxuICAgICAqL1xuICAgIGdldERvY3VtZW50SW1hZ2VBbmFseXNlclNldHRpbmcoKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIEltYWdlIGFuYWx5emVyIHNldHRpbmcuXG4gICAgICogQHJldHVybnMgUHJvbWlzZTxhbnk+XG4gICAgICovXG4gICAgZ2V0VGV4dEFuYWx5c2VyU2V0dGluZygpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgR0NSIHNldHRpbmcuXG4gICAgICogQHJldHVybnMgUHJvbWlzZTxhbnk+XG4gICAgICovXG4gICAgZ2V0R0NSU2V0dGluZygpOiBQcm9taXNlPGdjclNldHRpbmdSZXN1bHRzPiB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBzdG9wIHRoZSBGb3JtIFJlY29nbml0aW9uIEFuYWx5emVyLlxuICAgICAqIEByZXR1cm5zIFByb21pc2U8YW55PlxuICAgICAqL1xuICAgIHN0b3BGb3JtUmVjb2duaXRpb25BbmFseXNlcigpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBiYW5rIGNhcmQgcmVjb2duaXRpb24gc2VydmljZSByZWNvZ25pemVzIGJhbmsgY2FyZHMgaW4gY2FtZXJhIHN0cmVhbXMgd2l0aGluIGFuZ2xlIG9mZnNldCBvZiAxNSBkZWdyZWVzIGFuZCBleHRyYWN0cyBrZXkgaW5mb3JtYXRpb24gc3VjaCBhcyBjYXJkIG51bWJlciBhbmQgdmFsaWRpdHkgcGVyaW9kLlxuICAgICAqIEBwYXJhbSAge2JhbmtDYXJkU0RLRGV0ZWN0b3JSZXF8YmFua0NhcmRQbHVnaW5EZXRlY3RvclJlcX0gYmFua0NhcmREZXRlY3RlcklucHV0IFJlcHJlc2VudHMgdGhlIHBhcmFtZXRlciByZXF1aXJlZCBmb3IgYmFuayBjYXJkIHJlY29nbml0aW9uLlxuICAgICAqIEByZXR1cm5zIFByb21pc2U8QmFua0NhcmRBbmFseXNlcj4gfCBQcm9taXNlPEJhbmtDYXJkQW5hbHlzZXI+XG4gICAgICovXG4gICAgYmFua0NhcmREZXRlY3RvcihcbiAgICAgICAgYmFua0NhcmREZXRlY3RlcklucHV0OlxuICAgICAgICAgICAgfCBiYW5rQ2FyZFNES0RldGVjdG9yUmVxXG4gICAgICAgICAgICB8IGJhbmtDYXJkUGx1Z2luRGV0ZWN0b3JSZXFcbiAgICApOiBQcm9taXNlPE1MQmFua0NhcmQ+IHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIHN0b3AgYmFua2NhcmQgcmVjb2duaXRpb24gc2VydmljZS5cbiAgICAgKiBAcmV0dXJucyBQcm9taXNlPGFueT5cbiAgICAgKi9cbiAgICBzdG9wQmFua0NhcmREZXRlY3RvcigpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXG4gICAgc2V0UmVzdWx0VHlwZUJjcihtTEJjckNhcHR1cmVDb25maWc6IG1MQmNyQ2FwdHVyZUNvbmZpZyk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcbiAgICBzZXRSZWNNb2RlQmNyKG1MQmNyQ2FwdHVyZUNvbmZpZzogbUxCY3JDYXB0dXJlQ29uZmlnKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIEJDUiBzZXR0aW5nLlxuICAgICAqIEByZXR1cm5zIFByb21pc2U8YW55PlxuICAgICAqL1xuICAgIGdldEJhbmtDYXJkRGV0ZWN0b3JTZXR0aW5nKCk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcbiAgICAvKipcbiAgICAgKiBUaGUgZ2VuZXJhbCBjYXJkIHJlY29nbml0aW9uIHNlcnZpY2UgcHJvdmlkZXMgYSB1bml2ZXJzYWwgZGV2ZWxvcG1lbnQgZnJhbWV3b3JrIGJhc2VkIG9uIHRoZSB0ZXh0IHJlY29nbml0aW9uIHRlY2hub2xvZ3kuXG4gICAgICogQHBhcmFtICB7Z2VuZXJhbENhcmREZXRlY3RvclJlcX0gZ2VuZXJhbENhcmREZXRlY3RvclJlcSBSZXByZXNlbnRzIHRoZSBwYXJhbWV0ZXIgcmVxdWlyZWQgZm9yIGdlbmVyYWwgY2FyZCByZWNvZ25pdGlvbiBwbHVnLWluLlxuICAgICAqIEByZXR1cm5zIFByb21pc2U8R2VuZXJhbENhcmRBbmFseXNlcj5cbiAgICAgKi9cbiAgICBnZW5lcmFsQ2FyZERldGVjdG9yKFxuICAgICAgICBnZW5lcmFsQ2FyZERldGVjdG9yUmVxOiBnZW5lcmFsQ2FyZERldGVjdG9yUmVxXG4gICAgKTogUHJvbWlzZTxNTEdjckNhcHR1cmVSZXN1bHQ+IHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxuICAgIC8qKlxuICAgICAqIFRoZSBnZW5lcmFsIFZpZXRuYW0gaWQgY2FyZCAgcmVjb2duaXRpb24gc2VydmljZSBwcm92aWRlcyBhIHVuaXZlcnNhbCBkZXZlbG9wbWVudCBmcmFtZXdvcmsgYmFzZWQgb24gdGhlIHRleHQgcmVjb2duaXRpb24gdGVjaG5vbG9neS5cbiAgICAgKiBAcGFyYW0gIHtpY3JWbkRldGVjdG9yUmVxfSBpY3JWbkRldGVjdG9yUmVxIFJlcHJlc2VudHMgdGhlIHBhcmFtZXRlciByZXF1aXJlZCBmb3IgZ2VuZXJhbCBjYXJkIHJlY29nbml0aW9uIHBsdWctaW4uXG4gICAgICogQHJldHVybnMgUHJvbWlzZTxNTFZuSWNyQ2FwdHVyZVJlc3VsdD5cbiAgICAgKi9cbiAgICBpY3JWbkNhcmREZXRlY3RvcihcbiAgICAgICAgaWNyVm5EZXRlY3RvclJlcTogaWNyVm5EZXRlY3RvclJlcVxuICAgICk6IFByb21pc2U8TUxWbkljckNhcHR1cmVSZXN1bHQ+IHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxuICAgIC8qKlxuICAgICAqIFRoZSBmb3JtIHJlY29nbml0aW9uIHNlcnZpY2UgdXNlcyBBSSB0ZWNobm9sb2dpZXMgdG8gcmVjb2duaXplIGFuZCByZXR1cm4gZm9ybSBzdHJ1Y3R1cmUgaW5mb3JtYXRpb24gKGluY2x1ZGluZyByb3dzLCBjb2x1bW5zLCBhbmQgY29vcmRpbmF0ZXMgb2YgY2VsbHMpIGFuZCBmb3JtIHRleHQgaW4gQ2hpbmVzZSBhbmQgRW5nbGlzaCAoaW5jbHVkaW5nIHB1bmN0dWF0aW9uKSBmcm9tIGlucHV0IGltYWdlcy5cbiAgICAgKiBAcGFyYW0gIHtmb3JtUmVjb2duaXplckFuYWx5c2VyUmVxfSBmb3JtUmVjb2duaXplckFuYWx5c2VyUmVxIFJlcHJlc2VudHMgdGhlIHBhcmFtZXRlciByZXF1aXJlZCBmb3IgZ2VuZXJhbCBjYXJkIHJlY29nbml0aW9uIHBsdWctaW4uXG4gICAgICogQHJldHVybnMgUHJvbWlzZTxHZW5lcmFsQ2FyZEFuYWx5c2VyPlxuICAgICAqL1xuICAgIGZvcm1SZWNvZ25pdGlvbkFuYWx5c2VyKFxuICAgICAgICBmb3JtUmVjb2duaXplckFuYWx5c2VyUmVxOiBmb3JtUmVjb2duaXplckFuYWx5c2VyUmVxXG4gICAgKTogUHJvbWlzZTxNTEdjckNhcHR1cmVSZXN1bHQ+IHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxuICAgIGljckxvY2FsQW5hbHlzZXIoXG4gICAgICAgIGxvY2FsQW5hbHlzZXJSZXE6IGxvY2FsQW5hbHlzZXJSZXFcbiAgICApOiBQcm9taXNlPE1MSWNyQ2FwdHVyZVJlc3VsdD4ge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcbiAgICBpY3JMb2NhbEFuYWx5c2VyQ3JlYXRlSWRDYXJkKFxuICAgICAgICBjcmVhdGVJZENhcmRSZXE6IGNyZWF0ZUlkQ2FyZFJlcVxuICAgICk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxuICAgIGljckxvY2FsQW5hbHlzZXJTdG9wKCk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxuICAgIGdldGljckNuQ2FyZEluc3RhbmNlKCk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxuICAgIGljckNuQ2FyZENyZWF0ZSgpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXG4gICAgZ2V0aWNyVm5DYXJkSW5zdGFuY2UoKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxuICAgIGljclZuQ2FyZENyZWF0ZSgpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXG4gICAgZ2V0SWNyVm5DYXB0dXJlKCk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxuICAgIHN0YXJ0Q3VzdG9taXplZFZpZXcodXNlclByb3BzOiBDdXN0b21WaWV3TW9kZVJlcXVlc3QpOiBQcm9taXNlPE1MQmFua0NhcmQ+IHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxuICAgIHN3aXRjaExpZ2h0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXG4gICAgZ2V0TGlnaHRTdGF0dXMoKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxuICAgIHNldFVzZXJSZWdpb24ocmVnaW9uOiBSZWdpb24pOiBQcm9taXNlPGFueT4ge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXG4gICAgZ2V0Q291bnRyeUNvZGUoKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBDdXN0b21WaWV3TW9kZVJlcXVlc3Qge1xuICAgIGlzVGl0bGVBdmFpbGFibGU6IGJvb2xlYW47XG4gICAgdGl0bGU6IHN0cmluZztcbiAgICBoZWlnaHRGYWN0b3I6IG51bWJlcjtcbiAgICB3aWR0aEZhY3RvcjogbnVtYmVyO1xuICAgIGlzRmxhc2hBdmFpbGFibGU6IGJvb2xlYW47XG4gICAgcmVzdWx0VHlwZTogTUxCY3JSZXN1bHRDb25maWc7XG4gICAgcmVjTW9kZTogUmVjTW9kZTtcbiB9XG5cbi8vIEFQSSBLRVlcblxuZXhwb3J0IGludGVyZmFjZSBjb25maWdSZXEge1xuICAgIGFwaUtleTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIGFwcFNldHRpbmdSZXEge1xuICAgIGFwaUtleT86IHN0cmluZyB8IG51bGw7XG4gICAgYXBwbGljYXRpb25JZD86IHN0cmluZyB8IG51bGw7XG4gICAgY2VydEZpbmdlcnByaW50Pzogc3RyaW5nIHwgbnVsbDtcbn0gXG5cblxuLy8gU0RLIEJBTksgQ0FSRCBBTkFMWVNFUlxuXG5leHBvcnQgaW50ZXJmYWNlIGJhbmtDYXJkU0RLRGV0ZWN0b3JSZXEge1xuICAgIGZpbGVQYXRoOiBhbnk7XG4gICAgZGV0ZWN0VHlwZTogMDtcbiAgICBtTEJjckFuYWx5emVyU2V0dGluZz86IE1MQmNyQW5hbHl6ZXJTZXR0aW5nIHwgbnVsbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNTEJjckFuYWx5emVyU2V0dGluZyB7XG4gICAgbGFuZ1R5cGU/OiBzdHJpbmcgfCBudWxsO1xuICAgIHJlc3VsdFR5cGU/OiBNTEJjclJlc3VsdENvbmZpZyB8IG51bGw7XG59XG5cbi8vIFBMVUdJTiBCQU5LIENBUkQgQU5BTFlTRVJcblxuZXhwb3J0IGludGVyZmFjZSBiYW5rQ2FyZFBsdWdpbkRldGVjdG9yUmVxIHtcbiAgICBkZXRlY3RUeXBlOiAxO1xuICAgIG1MQmNyQ2FwdHVyZUNvbmZpZz86IG1MQmNyQ2FwdHVyZUNvbmZpZyB8IG51bGw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgbUxCY3JDYXB0dXJlQ29uZmlnIHtcbiAgICBvcmllbnRhdGlvbj86IE1MQmNyQ2FwdHVyZUNvbmZpZyB8IG51bGw7XG4gICAgcmVzdWx0VHlwZT86IE1MQmNyUmVzdWx0Q29uZmlnIHwgbnVsbDtcbiAgICByZWNNb2RlPzogUmVjTW9kZSB8IG51bGw7XG59XG5cbmV4cG9ydCBlbnVtIFJlY01vZGUge1xuICAgIFdFQUtfTU9ERSA9IDAsXG4gICAgU1RSSUNUX01PREUgPSAxLFxufVxuXG5leHBvcnQgZW51bSBNTEJjckNhcHR1cmVDb25maWcge1xuICAgIEVSUk9SX0NPREVfSU5JVF9DQU1FUkFfRkFJTEVEID0gMTAxMDEsXG4gICAgUkVTVUxUX05VTV9PTkxZID0gMCxcbiAgICBPUklFTlRBVElPTl9BVVRPID0gMCxcbiAgICBXRUFLX01PREUgPSAwLFxuICAgIE9SSUVOVEFUSU9OX0xBTkRTQ0FQRSA9IDEsXG4gICAgT1JJRU5UQVRJT05fUE9SVFJBSVQgPSAyLFxuICAgIFJFU1VMVF9BTEwgPSAyLFxuICAgIFJFU1VMVF9TSU1QTEUgPSAxLFxuICAgIFNUUklDVF9NT0RFID0gMSxcbn1cbmV4cG9ydCBlbnVtIE1MQmNyUmVzdWx0Q29uZmlnIHtcbiAgICBSRVNVTFRfTlVNX09OTFkgPSAwLFxuICAgIFJFU1VMVF9TSU1QTEUgPSAxLFxuICAgIFJFU1VMVF9BTEwgPSAyLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1MQmNyQ2FwdHVyZVJlc3VsdCB7XG4gICAgZXJyb3JDb2RlPzogTUxCY3JDYXB0dXJlRXJyb3JDb2RlIHwgbnVsbDtcbiAgICBleHBpcmU/OiBTdHJpbmcgfCBudWxsO1xuICAgIGlzc3Vlcj86IFN0cmluZyB8IG51bGw7XG4gICAgbnVtYmVyPzogU3RyaW5nIHwgbnVsbDtcbiAgICBudW1iZXJCaXRtYXA/OiBhbnk7XG4gICAgb3JnYW5pemF0aW9uPzogU3RyaW5nIHwgbnVsbDtcbiAgICByaWdpbmFsQml0bWFwPzogYW55O1xuICAgIHR5cGU/OiBTdHJpbmcgfCBudWxsO1xufVxuXG5leHBvcnQgZW51bSBNTEJjckNhcHR1cmVFcnJvckNvZGUge1xuICAgIEVSUk9SX0NPREVfSU5JVF9DQU1FUkFfRkFJTEVEID0gMTAxMDEsXG59XG5cblxuLy9Eb2N1bWVudCBBbmFseXNlclxuXG5leHBvcnQgaW50ZXJmYWNlIGRvY3VtZW50SW1hZ2VBbmFseXNlclJlcSB7XG4gICAgZG9jdW1lbnRTZXR0aW5nPzogRG9jdW1lbnRTZXR0aW5nIHwgbnVsbDtcbiAgICBmaWxlUGF0aDogYW55O1xufVxuZXhwb3J0IGludGVyZmFjZSBEb2N1bWVudFNldHRpbmcge1xuICAgIGJvcmRlclR5cGU/OiBNTFJlbW90ZVRleHRTZXR0aW5nIHwgbnVsbDtcbiAgICBsYW5ndWFnZUxpc3Q/OiBBcnJheTxzdHJpbmc+IHwgbnVsbDtcbiAgICBlbmFibGVGaW5nZXJwcmludFZlcmlmaWNhdGlvbjogYm9vbGVhbiB8IG51bGw7XG59XG5cbmV4cG9ydCBlbnVtIE1MUmVtb3RlVGV4dFNldHRpbmcge1xuICAgIE9DUl9MT09TRV9TQ0VORSA9IDEsXG4gICAgT0NSX0NPTVBBQ1RfU0NFTkUgPSAyLFxuICAgIE5HT04gPSBcIk5HT05cIixcbiAgICBBUkMgPSBcIkFSQ1wiLFxuICAgIE9USEVSID0gNSxcbiAgICBORVdfTElORV9DSEFSQUNURVIgPSA4LFxuICAgIFNQQUNFID0gNixcbn1cblxuXG5cbi8vRm9ybSBSZWNvZ25pemVyIEFuYWx5c2VyXG5cbmV4cG9ydCBpbnRlcmZhY2UgZm9ybVJlY29nbml6ZXJBbmFseXNlclJlcSB7XG4gICAgZmlsZVBhdGg6IGFueTtcbiAgICBzeW5jVHlwZTogTUxGb3JtUmVjb2dpdGlvbkNvbmZpZztcbn1cbmV4cG9ydCBlbnVtIE1MRm9ybVJlY29naXRpb25Db25maWcge1xuICAgIFNZTkNfVFlQRSA9IDEsXG4gICAgQVNZTkNfVFlQRSA9IDAsXG59XG5cbi8vIEdFTkVSQUwgQ0FSRCBBTkFMWVNFUlxuXG5leHBvcnQgaW50ZXJmYWNlIGdlbmVyYWxDYXJkRGV0ZWN0b3JSZXEge1xuICAgIGdjckNhcHR1cmVDb25maWc/OiBnY3JDYXB0dXJlQ29uZmlnO1xuICAgIGdjckNhcHR1cmVVSUNvbmZpZz86IGdjckNhcHR1cmVVSUNvbmZpZztcbiAgICBjYXB0dXJlVHlwZT86IGdjckNhcHR1cmVUeXBlIHwgbnVsbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBnY3JDYXB0dXJlQ29uZmlnIHtcbiAgICBsYW5ndWFnZTogc3RyaW5nO1xufVxuZXhwb3J0IGVudW0gZ2NyQ2FwdHVyZVR5cGUge1xuICAgIENBUFRVUkVfQUNUSVZJVFkgPSAwLFxuICAgIENBUFRVUkVfUEhPVE8gPSAxLFxuICAgIENBUFRVUkVfSU1BR0UgPSAyLFxufVxuZXhwb3J0IGludGVyZmFjZSBnY3JDYXB0dXJlVUlDb25maWcge1xuICAgIG9yaWVudGF0aW9uPzogTUxHY3JDYXB0dXJlVUlDb25maWcgfCBudWxsO1xuICAgIHRpcFRleHQ/OiBzdHJpbmcgfCBudWxsO1xuICAgIHRpcFRleHRDb2xvcj86IG51bWJlciB8IG51bGw7XG4gICAgcGhvdG9CdXR0b25SZXNJZD86IG51bWJlciB8IG51bGw7XG4gICAgc2NhbkJveENvcm5lckNvbG9yPzogbnVtYmVyIHwgbnVsbDtcbiAgICBiYWNrQnV0dG9uUmVkSWQ/OiBudW1iZXIgfCBudWxsO1xuICAgIHRvcmNoUmVkSWQ/OiBudW1iZXIgfCBudWxsO1xufVxuZXhwb3J0IGludGVyZmFjZSBnY3JTZXR0aW5nUmVzdWx0cyB7XG4gICAgZ2NyQ29uZmlnTGFuZ3VhZ2U6IFN0cmluZztcbiAgICB0b3JjaE9uUmVzSWQ6IG51bWJlcjtcbiAgICB0aXBUZXh0Q29sb3I6IG51bWJlcjtcbiAgICB0aXBUZXh0OiBTdHJpbmc7XG4gICAgYmFja0J1dHRvblJlc0lkOiBudW1iZXI7XG4gICAgb3JpZW50YXRpb246IG51bWJlcjtcbiAgICBwaG90b0J1dHRvblJlc0lkOiBudW1iZXI7XG4gICAgc2NhbkJveFNjcmVlblJhdGlvOiBudW1iZXI7XG4gICAgc2NhbkJveENvcm5lckNvbG9yOiBudW1iZXI7XG4gICAgc2NhbkJveEFzcGVjdFJhdGlvOiBudW1iZXI7XG59XG5cbmV4cG9ydCBlbnVtIE1MR2NyQ2FwdHVyZVVJQ29uZmlnIHtcbiAgICBPUklFTlRBVElPTl9BVVRPID0gMCxcbiAgICBPUklFTlRBVElPTl9MQU5EU0NBUEUgPSAxLFxuICAgIE9SSUVOVEFUSU9OX1BPUlRSQUlUID0gMixcbn1cblxuLy8gSUQgQ0FSRCBBTkFMWVNFUlxuXG5leHBvcnQgaW50ZXJmYWNlIGljclZuRGV0ZWN0b3JSZXEge1xuICAgIGNhcHR1cmVUeXBlOiBpY3JDYXB0dXJlVHlwZTtcbiAgICBmaWxlUGF0aD86IGFueSB8IG51bGw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgaWNyQ25EZXRlY3RvclJlcSB7XG4gICAgY2FwdHVyZVR5cGU6IGljckNhcHR1cmVUeXBlO1xuICAgIGZpbGVQYXRoPzogYW55IHwgbnVsbDtcbiAgICBpc0Zyb250PzogYm9vbGVhbiB8IG51bGw7XG59XG5cbmV4cG9ydCBlbnVtIGljckNhcHR1cmVUeXBlIHtcbiAgICBDQVBUVVJFX0NBTUVSQSA9IDAsXG4gICAgQ0FQVFVSRV9JTUFHRSA9IDEsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgY3JlYXRlSWRDYXJkUmVxIHtcbiAgICBtbEljckFuYWx5emVyU2V0dGluZz86IE1MSWNyQW5hbHl6ZXJTZXR0aW5nIHwgbnVsbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBsb2NhbEFuYWx5c2VyUmVxIHtcbiAgICBzZXR0aW5nczogTUxJY3JBbmFseXplclNldHRpbmc7XG4gICAgZmlsZVBhdGg/OiBhbnkgfCBudWxsO1xufVxuZXhwb3J0IGludGVyZmFjZSBNTEljckFuYWx5emVyU2V0dGluZyB7XG4gICAgY291bnRyeUNvZGU6IHN0cmluZztcbiAgICBoYXNoQ29kZT86IG51bWJlciB8IG51bGw7XG4gICAgc2lkZVR5cGU/OiBNTEljclNpZGVUeXBlIHwgbnVsbDtcbn1cblxuZXhwb3J0IGVudW0gTUxJY3JTaWRlVHlwZSB7XG4gICAgRlJPTlQgPSBcIkZST05UXCIsXG4gICAgQkFDSyA9IFwiQkFDS1wiLFxufVxuXG5cbi8vSW1hZ2UgU3VwZXIgUmVzb2x1dGlvblxuXG5leHBvcnQgaW50ZXJmYWNlIGltYWdlU3VwZXJSZXNvbHV0aW9uUmVxIHtcbiAgICBmaWxlUGF0aDogYW55O1xuICAgIGltZ1N1cGVyUmVzb2x1dGlvblNldHRpbmc/OiBJbWdTdXBlclJlc29sdXRpb25TZXR0aW5nIHwgbnVsbDtcbiAgICBzeW5jVHlwZT86IE1MRm9ybVJlY29naXRpb25Db25maWcgfCBudWxsO1xufVxuZXhwb3J0IGludGVyZmFjZSBJbWdTdXBlclJlc29sdXRpb25TZXR0aW5nIHtcbiAgICBzY2FsZVR5cGU/OiBJbWdTdXBlclJlc29sdXRpb25Db25maWc7XG59XG5leHBvcnQgZW51bSBJbWdTdXBlclJlc29sdXRpb25Db25maWcge1xuICAgIElTUl9TQ0FMRV8xWCA9IDEuMCxcbiAgICBJU1JfU0NBTEVfM1ggPSAzLjAsXG59XG5cbi8vUHJvZHVjdCBWaXNpb24gQW5hbHlzZXJcblxuZXhwb3J0IGludGVyZmFjZSBwcm9kdWN0UmVxIHtcbiAgICBmaWxlUGF0aD86IGFueSB8IG51bGw7XG4gICAgZGV0ZWN0VHlwZT86IG51bWJlcjtcbiAgICBtbFByb2R1Y3RTZXR0aW5nPzogbWxQcm9kdWN0U2V0dGluZyB8IG51bGw7XG59XG5leHBvcnQgaW50ZXJmYWNlIG1sUHJvZHVjdFNldHRpbmcge1xuICAgIGxhcmdlc3ROdW1PZlJldHVybnM/OiBudW1iZXIgfCBudWxsO1xuICAgIHByb2R1Y3RTZXRJZD86IHN0cmluZyB8IG51bGw7XG4gICAgcmVnaW9uPzogTUxQcm9kdWN0Q29uZmlnIHwgbnVsbDtcbn1cbmV4cG9ydCBlbnVtIE1MUHJvZHVjdENvbmZpZyB7XG4gICAgUkVHSU9OX0RSX0NISU5BID0gMTAwMixcbiAgICBSRUdJT05fRFJfQUZJTEEgPSAxMDAzLFxuICAgIFJFR0lPTl9EUl9FVVJPUEUgPSAxMDA0LFxuICAgIFJFR0lPTl9EUl9SVVNTSUEgPSAxMDA1LFxuICAgIFJFR0lPTl9EUl9HRVJNQU4gPSAxMDA2LFxuICAgIFJFR0lPTl9EUl9TSUFOR0FQT1JFID0gMTAwNyxcbn1cblxuXG5cbi8vVGV4dCBBbmFseXNlclxuXG5leHBvcnQgaW50ZXJmYWNlIGxvY2FsSW1hZ2VUZXh0UmVxIHtcbiAgICBvY3JUeXBlOiBNTFRleHRDb25maWc7XG4gICAgYW5hbHlzZU1vZGU/OiBudW1iZXI7XG4gICAgbG9jYWxUZXh0U2V0dGluZz86IGxvY2FsVGV4dFNldHRpbmcgfCBudWxsO1xuICAgIGZpbGVQYXRoOiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgbG9jYWxUZXh0U2V0dGluZyB7XG4gICAgb2NyTW9kZT86IE1MTG9jYWxUZXh0U2V0dGluZztcbiAgICBsYW5ndWFnZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGVudW0gTUxMb2NhbFRleHRTZXR0aW5nIHtcbiAgICBPQ1JfREVURUNUX01PREUgPSAxLFxuICAgIE9DUl9UUkFDS0lOR19NT0RFID0gMixcbn1cbmV4cG9ydCBlbnVtIE1MVGV4dENvbmZpZyB7XG4gICAgT0NSX0xPQ0FMX1RZUEUgPSAwLFxuICAgIE9DUl9SRU1PVEVfVFlQRSA9IDEsXG59XG5leHBvcnQgaW50ZXJmYWNlIHJlbW90ZUltYWdlVGV4dFJlcSB7XG4gICAgb2NyVHlwZTogTUxUZXh0Q29uZmlnO1xuICAgIGFuYWx5c2VNb2RlPzogbnVtYmVyO1xuICAgIHJlbW90ZVRleHRTZXR0aW5nPzogcmVtb3RlVGV4dFNldHRpbmc7XG4gICAgZmlsZVBhdGg6IGFueTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgcmVtb3RlVGV4dFNldHRpbmcge1xuICAgIHRleHREZW5zaXR5U2NlbmU/OiBNTFJlbW90ZVRleHRTZXR0aW5nO1xuICAgIGxhbmd1YWdlTGlzdD86IEFycmF5PHN0cmluZz47XG4gICAgYm9yZGVyVHlwZT86IE1MUmVtb3RlVGV4dFNldHRpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTUxCYW5rQ2FyZCB7XG4gICAgbnVtYmVyOiBzdHJpbmc7XG4gICAgZXhwaXJlOiBzdHJpbmc7XG4gICAgaXNzdWVyOiBzdHJpbmc7XG4gICAgdHlwZTogc3RyaW5nO1xuICAgIG9yZ2FuaXphdGlvbjogc3RyaW5nO1xuICAgIG9yaWdpbmFsQml0bWFwOiBhbnk7XG4gICAgbnVtYmVyQml0bWFwOiBhbnk7XG59XG5cblxuZXhwb3J0IGludGVyZmFjZSBCb3JkZXIge1xuICAgIGJvdHRvbTogbnVtYmVyO1xuICAgIHRvcDogbnVtYmVyO1xuICAgIGxlZnQ6IG51bWJlcjtcbiAgICByaWdodDogbnVtYmVyO1xuICAgIGV4YWN0Q2VudGVyWDogbnVtYmVyO1xuICAgIGNlbnRlclk6IG51bWJlcjtcbiAgICBjZW50ZXJYOiBudW1iZXI7XG4gICAgZGVzY3JpYmVDb250ZW50czogbnVtYmVyO1xuICAgIGhlaWdodDogbnVtYmVyO1xuICAgIHdpZHRoOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTUxEb2N1bWVudCB7XG4gICAgc3RyaW5nVmFsdWU6IHN0cmluZztcbiAgICBibG9ja3M/OiBCbG9ja3NbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMYW5ndWFnZUxpc3Qge1xuICAgIGxhbmd1YWdlOiBzdHJpbmc7XG59XG5cblxuZXhwb3J0IGludGVyZmFjZSBNTFZuSWNyQ2FwdHVyZVJlc3VsdCB7XG4gICAgYmlydGhkYXk6IHN0cmluZztcbiAgICBjYXJkQml0bWFwOiBCaXRtYXA7XG4gICAgaWROdW06IHN0cmluZztcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgc2V4OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTUxDbkljckNhcHR1cmVSZXN1bHQge1xuICAgIGJpcnRoZGF5OiBzdHJpbmc7XG4gICAgY2FyZEJpdG1hcDogQml0bWFwO1xuICAgIGlkTnVtOiBzdHJpbmc7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHNleDogc3RyaW5nO1xuICAgIG5hdGlvbjogc3RyaW5nO1xuICAgIGFkZHJlc3M6IHN0cmluZztcbiAgICBhdXRob3JpdHk6IHN0cmluZztcbiAgICB2YWxpZERhdGU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNTEljckNhcHR1cmVSZXN1bHQge1xuICAgIGJpcnRoZGF5OiBzdHJpbmc7XG4gICAgY2FyZEJpdG1hcDogQml0bWFwO1xuICAgIGlkTnVtOiBzdHJpbmc7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHNleDogc3RyaW5nO1xuICAgIG5hdGlvbjogc3RyaW5nO1xuICAgIGFkZHJlc3M6IHN0cmluZztcbiAgICB2YWxpZERhdGU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNTEdjckNhcHR1cmVSZXN1bHQge1xuICAgIHRleHQ6IHN0cmluZztcbiAgICBjYXJkQml0bWFwOiBCaXRtYXA7XG59XG5cblxuZXhwb3J0IGludGVyZmFjZSBSZWN0IHtcbiAgICBib3R0b206IG51bWJlcjtcbiAgICB0b3A6IG51bWJlcjtcbiAgICBsZWZ0OiBudW1iZXI7XG4gICAgcmlnaHQ6IG51bWJlcjtcbiAgICBleGFjdENlbnRlclg6IG51bWJlcjtcbiAgICBjZW50ZXJZOiBudW1iZXI7XG4gICAgY2VudGVyWDogbnVtYmVyO1xuICAgIGRlc2NyaWJlQ29udGVudHM6IG51bWJlcjtcbiAgICBoZWlnaHQ6IG51bWJlcjtcbiAgICB3aWR0aDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJpdG1hcCB7XG4gICAgbUdhbGxlcnlDYWNoZWQ6IGJvb2xlYW47XG4gICAgbUhlaWdodDogbnVtYmVyO1xuICAgIG1OYXRpdmVQdHI6IG51bWJlcjtcbiAgICBtV2lkdGg6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNTFRleHQge1xuICAgIHN0cmluZ1ZhbHVlOiBzdHJpbmc7XG4gICAgYmxvY2tzPzogQmxvY2tzW107XG59XG5leHBvcnQgaW50ZXJmYWNlIEJsb2NrcyB7XG4gICAgY29udGVudHM/OiBDb250ZW50c1tdO1xufVxuZXhwb3J0IGludGVyZmFjZSBDb250ZW50cyB7XG4gICAgc3RyaW5nVmFsdWU6IHN0cmluZztcbiAgICBib3JkZXI6IEJvcmRlcjtcbiAgICBsYW5ndWFnZTogc3RyaW5nO1xuICAgIGxhbmd1YWdlTGlzdD86IExhbmd1YWdlTGlzdFtdO1xuICAgIHZlcnRleGVzPzogVmVydGV4ZXNbXTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgTGFuZ3VhZ2VMaXN0IHtcbiAgICBsYW5ndWFnZTogc3RyaW5nO1xufVxuZXhwb3J0IGludGVyZmFjZSBWZXJ0ZXhlcyB7XG4gICAgeDogbnVtYmVyO1xuICAgIHk6IG51bWJlcjtcbiAgICBkZXNjcmliZUNvbnRlbnRzOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTUxGb3JtUmVjb2dpdGlvblJlc3VsdCB7XG4gICAgcmV0Q29kZTogbnVtYmVyO1xuICAgIHRhYmxlQ29udGVudDogVGFibGVDb250ZW50O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRhYmxlQ29udGVudCB7XG4gICAgdGFibGVDb3VudDogbnVtYmVyO1xuICAgIHRhYmxlcz86IFRhYmxlc0VudGl0eVtdIHwgbnVsbDtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgVGFibGVzRW50aXR5IHtcbiAgICB0YWJsZUlEOiBudW1iZXI7XG4gICAgaGVhZGVySW5mbzogc3RyaW5nO1xuICAgIGZvb3RlckluZm86IHN0cmluZztcbiAgICB0YWJsZUJvZHk/OiBUYWJsZUJvZHlFbnRpdHlbXSB8IG51bGw7XG59XG5leHBvcnQgaW50ZXJmYWNlIFRhYmxlQm9keUVudGl0eSB7XG4gICAgc3RhcnRSb3c6IG51bWJlcjtcbiAgICBlbmRSb3c6IG51bWJlcjtcbiAgICBzdGFydENvbDogbnVtYmVyO1xuICAgIGVuZENvbDogbnVtYmVyO1xuICAgIGNlbGxDb29yZGluYXRlOiBDZWxsQ29vcmRpbmF0ZTtcbiAgICB0ZXh0SW5mbzogc3RyaW5nO1xufVxuZXhwb3J0IGludGVyZmFjZSBDZWxsQ29vcmRpbmF0ZSB7XG4gICAgdG9wTGVmdF94OiBudW1iZXI7XG4gICAgdG9wTGVmdF95OiBudW1iZXI7XG4gICAgdG9wUmlnaHRfeDogbnVtYmVyO1xuICAgIHRvcFJpZ2h0X3k6IG51bWJlcjtcbiAgICBib3R0b21MZWZ0X3g6IG51bWJlcjtcbiAgICBib3R0b21MZWZ0X3k6IG51bWJlcjtcbiAgICBib3R0b21SaWdodF94OiBudW1iZXI7XG4gICAgYm90dG9tUmlnaHRfeTogbnVtYmVyO1xufVxuXG5leHBvcnQgZW51bSBDb2xvcnMge1xuICAgIFJFRCA9IC02NTUzNixcbiAgICBES0dSQVkgPSAtMTIzMDMyOTIsXG4gICAgR1JBWSA9IC03ODI5MzY4LFxuICAgIFdISVRFID0gLTEsXG4gICAgQkxVRSA9IC0xNjc3Njk2MSxcbiAgICBCTEFDSyA9IC0xNjc3NzIxNixcbiAgICBMVEdSQVkgPSAtMzM1NTQ0NCxcbiAgICBNQUdFTlRBID0gLTY1MjgxLFxuICAgIFlFTExPVyA9IC0yNTYsXG4gICAgQ1lBTiA9IC0xNjcxMTY4MSxcbiAgICBHUkVFTiA9IC0xNjcxMTkzNixcbiAgICBUUkFOU1BBUkVOVCA9IDAsXG59XG5cbmV4cG9ydCBlbnVtIENvcmRvdmFFcnJvcnMge1xuICAgIFVOS05PV04gPSAtMSxcbiAgICBTVUNDRVNTID0gMCxcbiAgICBESVNDQVJERUQgPSAxLFxuICAgIElOTkVSID0gMixcbiAgICBJTkFDVElWRSA9IDMsXG4gICAgTk9UX1NVUFBPUlRFRCA9IDQsXG4gICAgSUxMRUdBTF9QQVJBTUVURVIgPSA1LFxuICAgIE9WRVJEVUUgPSA2LFxuICAgIE5PX0ZPVU5EID0gNyxcbiAgICBEVVBMSUNBVEVfRk9VTkQgPSA4LFxuICAgIE5PX1BFUk1JU1NJT04gPSA5LFxuICAgIElOU1VGRklDSUVOVF9SRVNPVVJDRSA9IDEwLFxuICAgIEFOQUxZU0lTX0ZBSUxVUkUgPSAxMSxcbiAgICBJTlRFUlJVUFRFRCA9IDEyLFxuICAgIEVYQ0VFRF9SQU5HRSA9IDEzLFxuICAgIERBVEFfTUlTU0lORyA9IDE0LFxuICAgIEFVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEID0gMTUsXG4gICAgVEZMSVRFX05PVF9DT01QQVRJQkxFID0gMTYsXG4gICAgSU5TVUZGSUNJRU5UX1NQQUNFID0gMTcsXG4gICAgSEFTSF9NSVNTID0gMTgsXG4gICAgVE9LRU5fSU5WQUxJRCA9IDE5LFxuICAgIFNFUlZJQ0VfRkFJTFVSRSA9IDIwLFxuICAgIEFOQUxZU0lTX05VTEwgPSAyMSxcbn1cblxuXG5leHBvcnQgZW51bSBSZWdpb24ge1xuUkVHSU9OX0RSX1VOS05PV04gPSAxMDAxLFxuUkVHSU9OX0RSX0NISU5BID0gMTAwMixcblJFR0lPTl9EUl9SVVNTSUEgPSAxMDA1LFxuUkVHSU9OX0RSX0dFUk1BTiA9IDEwMDYsXG5SRUdJT05fRFJfU0lOR0FQT1JFID0gMTAwN1xufVxuIl19
\ No newline at end of file
diff --git a/cordova-plugin-hms-mltext/ionic-native/dist/ngx/LICENSE b/cordova-plugin-hms-mltext/ionic-native/dist/ngx/LICENSE
new file mode 100644
index 00000000..490b5c70
--- /dev/null
+++ b/cordova-plugin-hms-mltext/ionic-native/dist/ngx/LICENSE
@@ -0,0 +1,53 @@
+Apache License
+
+Version 2.0, January 2004
+
+http://www.apache.org/licenses/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
+
+"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
+
+"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
+
+"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
+
+"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
+
+"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
+
+"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
+
+"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
+
+2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
+
+4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+
+You must give any other recipients of the Work or Derivative Works a copy of this License; and
+You must cause any modified files to carry prominent notices stating that You changed the files; and
+You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
+If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.
+
+You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
+
+8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
\ No newline at end of file
diff --git a/cordova-plugin-hms-mltext/ionic-native/dist/ngx/index.d.ts b/cordova-plugin-hms-mltext/ionic-native/dist/ngx/index.d.ts
new file mode 100644
index 00000000..be1cfd9d
--- /dev/null
+++ b/cordova-plugin-hms-mltext/ionic-native/dist/ngx/index.d.ts
@@ -0,0 +1,588 @@
+/*
+ Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License")
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+import { IonicNativePlugin } from "@ionic-native/core";
+export declare class HMSMLTextPlugin extends IonicNativePlugin {
+ MLLocalTextSetting: typeof MLLocalTextSetting;
+ icrVnCaptureType: typeof icrCaptureType;
+ MLTextConfig: typeof MLTextConfig;
+ MLRemoteTextSetting: typeof MLRemoteTextSetting;
+ MLBcrCaptureConfig: typeof MLBcrCaptureConfig;
+ MLGcrCaptureUIConfig: typeof MLGcrCaptureUIConfig;
+ MLBcrResultConfig: typeof MLBcrResultConfig;
+ ImgSuperResolutionConfig: typeof ImgSuperResolutionConfig;
+ MLFormRecogitionConfig: typeof MLFormRecogitionConfig;
+ MLProductConfig: typeof MLProductConfig;
+ gcrCaptureType: typeof gcrCaptureType;
+ Colors: typeof Colors;
+ /**
+ * Monitors photographing.
+ * @returns Promise
+ */
+ photograph(): Promise;
+ /**
+ * Close lens engine.
+ * @returns Promise
+ */
+ destroy(): Promise;
+ /**
+ * Obtains the size of the preview image of a camera.
+ * @returns Promise
+ */
+ getDisplayDimension(): Promise;
+ /**
+ * An app information class used to store basic information about apps with the HMS Core ML SDK integrated and complete the initialization of ML Text Kit. When using cloud services of the ML Text Kit, you need to set the apiKey of your app.
+ * @param {appSettingReq} appSettingReq Represents the parameter required.
+ * @returns Promise
+ */
+ appSetting(appSettingReq: appSettingReq): Promise;
+ /**
+ * Determines whether to collect statistics on the current app.
+ * @param {any} any
+ * @returns Promise
+ */
+ setStatistic(any: any): Promise;
+ /**
+ * Determines whether to collect statistics on the current app.
+ ** @param {any} any
+ * @returns Promise
+ */
+ getStatistic(any: any): Promise;
+ /**
+ * This service enable logger service.
+ * @returns Promise
+ */
+ enableLogger(): Promise;
+ /**
+ * This service disable logger service.
+ * @returns Promise
+ */
+ disableLogger(): Promise;
+}
+export declare class HMSMLText extends IonicNativePlugin {
+ icrVnCaptureType: typeof icrCaptureType;
+ gcrCaptureType: typeof gcrCaptureType;
+ MLLocalTextSetting: typeof MLLocalTextSetting;
+ MLTextConfig: typeof MLTextConfig;
+ MLRemoteTextSetting: typeof MLRemoteTextSetting;
+ MLBcrCaptureConfig: typeof MLBcrCaptureConfig;
+ MLGcrCaptureUIConfig: typeof MLGcrCaptureUIConfig;
+ MLBcrResultConfig: typeof MLBcrResultConfig;
+ ImgSuperResolutionConfig: typeof ImgSuperResolutionConfig;
+ MLFormRecogitionConfig: typeof MLFormRecogitionConfig;
+ MLProductConfig: typeof MLProductConfig;
+ Colors: typeof Colors;
+ RecMode: typeof RecMode;
+ /**
+ * This method start the Text analyzer.
+ * @param {localImageTextReq|remoteImageTextReq} ImageTextAnalyserInput Reperesents the necessary parameters to convert images to text format.
+ * @returns Promise
+ */
+ imageTextAnalyser(ImageTextAnalyserInput: localImageTextReq | remoteImageTextReq): Promise;
+ /**
+ * This method stop the Text analyzer.
+ * @returns Promise
+ */
+ stopTextAnalyser(): Promise;
+ /**
+ * This method gives Text Analyser information.
+ * @returns Promise
+ */
+ getTextAnalyserInfo(): Promise;
+ /**
+ * This method provides a document recognition component that recognizes text from images of documents.
+ * @param {documentImageAnalyserReq} documentImageAnalyserReq Reperesents the necessary parameter to convert document images to text format.
+ * @returns Promise
+ */
+ documentImageAnalyser(documentImageAnalyserReq: documentImageAnalyserReq): Promise;
+ /**
+ * This method stop the Document analyzer.
+ * @returns Promise
+ */
+ stopDocumentImageAnalyser(): Promise;
+ /**
+ * This method close the Document analyzer.
+ * @returns Promise
+ */
+ closeDocumentImageAnalyser(): Promise;
+ /**
+ * This method returns the Document analyzer setting.
+ * @returns Promise
+ */
+ getDocumentImageAnalyserSetting(): Promise;
+ /**
+ * This method returns the Image analyzer setting.
+ * @returns Promise
+ */
+ getTextAnalyserSetting(): Promise;
+ /**
+ * This method returns the GCR setting.
+ * @returns Promise
+ */
+ getGCRSetting(): Promise;
+ /**
+ * This method stop the Form Recognition Analyzer.
+ * @returns Promise
+ */
+ stopFormRecognitionAnalyser(): Promise;
+ /**
+ * The bank card recognition service recognizes bank cards in camera streams within angle offset of 15 degrees and extracts key information such as card number and validity period.
+ * @param {bankCardSDKDetectorReq|bankCardPluginDetectorReq} bankCardDetecterInput Represents the parameter required for bank card recognition.
+ * @returns Promise | Promise
+ */
+ bankCardDetector(bankCardDetecterInput: bankCardSDKDetectorReq | bankCardPluginDetectorReq): Promise;
+ /**
+ * This method stop bankcard recognition service.
+ * @returns Promise
+ */
+ stopBankCardDetector(): Promise;
+ setResultTypeBcr(mLBcrCaptureConfig: mLBcrCaptureConfig): Promise;
+ setRecModeBcr(mLBcrCaptureConfig: mLBcrCaptureConfig): Promise;
+ /**
+ * This method returns the BCR setting.
+ * @returns Promise
+ */
+ getBankCardDetectorSetting(): Promise;
+ /**
+ * The general card recognition service provides a universal development framework based on the text recognition technology.
+ * @param {generalCardDetectorReq} generalCardDetectorReq Represents the parameter required for general card recognition plug-in.
+ * @returns Promise
+ */
+ generalCardDetector(generalCardDetectorReq: generalCardDetectorReq): Promise;
+ /**
+ * The general Vietnam id card recognition service provides a universal development framework based on the text recognition technology.
+ * @param {icrVnDetectorReq} icrVnDetectorReq Represents the parameter required for general card recognition plug-in.
+ * @returns Promise
+ */
+ icrVnCardDetector(icrVnDetectorReq: icrVnDetectorReq): Promise;
+ /**
+ * The form recognition service uses AI technologies to recognize and return form structure information (including rows, columns, and coordinates of cells) and form text in Chinese and English (including punctuation) from input images.
+ * @param {formRecognizerAnalyserReq} formRecognizerAnalyserReq Represents the parameter required for general card recognition plug-in.
+ * @returns Promise
+ */
+ formRecognitionAnalyser(formRecognizerAnalyserReq: formRecognizerAnalyserReq): Promise;
+ icrLocalAnalyser(localAnalyserReq: localAnalyserReq): Promise;
+ icrLocalAnalyserCreateIdCard(createIdCardReq: createIdCardReq): Promise;
+ icrLocalAnalyserStop(): Promise;
+ geticrCnCardInstance(): Promise;
+ icrCnCardCreate(): Promise;
+ geticrVnCardInstance(): Promise;
+ icrVnCardCreate(): Promise;
+ getIcrVnCapture(): Promise;
+ startCustomizedView(userProps: CustomViewModeRequest): Promise;
+ switchLight(): Promise;
+ getLightStatus(): Promise;
+ setUserRegion(region: Region): Promise;
+ getCountryCode(): Promise;
+}
+export interface CustomViewModeRequest {
+ isTitleAvailable: boolean;
+ title: string;
+ heightFactor: number;
+ widthFactor: number;
+ isFlashAvailable: boolean;
+ resultType: MLBcrResultConfig;
+ recMode: RecMode;
+}
+export interface configReq {
+ apiKey: string;
+}
+export interface appSettingReq {
+ apiKey?: string | null;
+ applicationId?: string | null;
+ certFingerprint?: string | null;
+}
+export interface bankCardSDKDetectorReq {
+ filePath: any;
+ detectType: 0;
+ mLBcrAnalyzerSetting?: MLBcrAnalyzerSetting | null;
+}
+export interface MLBcrAnalyzerSetting {
+ langType?: string | null;
+ resultType?: MLBcrResultConfig | null;
+}
+export interface bankCardPluginDetectorReq {
+ detectType: 1;
+ mLBcrCaptureConfig?: mLBcrCaptureConfig | null;
+}
+export interface mLBcrCaptureConfig {
+ orientation?: MLBcrCaptureConfig | null;
+ resultType?: MLBcrResultConfig | null;
+ recMode?: RecMode | null;
+}
+export declare enum RecMode {
+ WEAK_MODE = 0,
+ STRICT_MODE = 1
+}
+export declare enum MLBcrCaptureConfig {
+ ERROR_CODE_INIT_CAMERA_FAILED = 10101,
+ RESULT_NUM_ONLY = 0,
+ ORIENTATION_AUTO = 0,
+ WEAK_MODE = 0,
+ ORIENTATION_LANDSCAPE = 1,
+ ORIENTATION_PORTRAIT = 2,
+ RESULT_ALL = 2,
+ RESULT_SIMPLE = 1,
+ STRICT_MODE = 1
+}
+export declare enum MLBcrResultConfig {
+ RESULT_NUM_ONLY = 0,
+ RESULT_SIMPLE = 1,
+ RESULT_ALL = 2
+}
+export interface MLBcrCaptureResult {
+ errorCode?: MLBcrCaptureErrorCode | null;
+ expire?: String | null;
+ issuer?: String | null;
+ number?: String | null;
+ numberBitmap?: any;
+ organization?: String | null;
+ riginalBitmap?: any;
+ type?: String | null;
+}
+export declare enum MLBcrCaptureErrorCode {
+ ERROR_CODE_INIT_CAMERA_FAILED = 10101
+}
+export interface documentImageAnalyserReq {
+ documentSetting?: DocumentSetting | null;
+ filePath: any;
+}
+export interface DocumentSetting {
+ borderType?: MLRemoteTextSetting | null;
+ languageList?: Array | null;
+ enableFingerprintVerification: boolean | null;
+}
+export declare enum MLRemoteTextSetting {
+ OCR_LOOSE_SCENE = 1,
+ OCR_COMPACT_SCENE = 2,
+ NGON = "NGON",
+ ARC = "ARC",
+ OTHER = 5,
+ NEW_LINE_CHARACTER = 8,
+ SPACE = 6
+}
+export interface formRecognizerAnalyserReq {
+ filePath: any;
+ syncType: MLFormRecogitionConfig;
+}
+export declare enum MLFormRecogitionConfig {
+ SYNC_TYPE = 1,
+ ASYNC_TYPE = 0
+}
+export interface generalCardDetectorReq {
+ gcrCaptureConfig?: gcrCaptureConfig;
+ gcrCaptureUIConfig?: gcrCaptureUIConfig;
+ captureType?: gcrCaptureType | null;
+}
+export interface gcrCaptureConfig {
+ language: string;
+}
+export declare enum gcrCaptureType {
+ CAPTURE_ACTIVITY = 0,
+ CAPTURE_PHOTO = 1,
+ CAPTURE_IMAGE = 2
+}
+export interface gcrCaptureUIConfig {
+ orientation?: MLGcrCaptureUIConfig | null;
+ tipText?: string | null;
+ tipTextColor?: number | null;
+ photoButtonResId?: number | null;
+ scanBoxCornerColor?: number | null;
+ backButtonRedId?: number | null;
+ torchRedId?: number | null;
+}
+export interface gcrSettingResults {
+ gcrConfigLanguage: String;
+ torchOnResId: number;
+ tipTextColor: number;
+ tipText: String;
+ backButtonResId: number;
+ orientation: number;
+ photoButtonResId: number;
+ scanBoxScreenRatio: number;
+ scanBoxCornerColor: number;
+ scanBoxAspectRatio: number;
+}
+export declare enum MLGcrCaptureUIConfig {
+ ORIENTATION_AUTO = 0,
+ ORIENTATION_LANDSCAPE = 1,
+ ORIENTATION_PORTRAIT = 2
+}
+export interface icrVnDetectorReq {
+ captureType: icrCaptureType;
+ filePath?: any | null;
+}
+export interface icrCnDetectorReq {
+ captureType: icrCaptureType;
+ filePath?: any | null;
+ isFront?: boolean | null;
+}
+export declare enum icrCaptureType {
+ CAPTURE_CAMERA = 0,
+ CAPTURE_IMAGE = 1
+}
+export interface createIdCardReq {
+ mlIcrAnalyzerSetting?: MLIcrAnalyzerSetting | null;
+}
+export interface localAnalyserReq {
+ settings: MLIcrAnalyzerSetting;
+ filePath?: any | null;
+}
+export interface MLIcrAnalyzerSetting {
+ countryCode: string;
+ hashCode?: number | null;
+ sideType?: MLIcrSideType | null;
+}
+export declare enum MLIcrSideType {
+ FRONT = "FRONT",
+ BACK = "BACK"
+}
+export interface imageSuperResolutionReq {
+ filePath: any;
+ imgSuperResolutionSetting?: ImgSuperResolutionSetting | null;
+ syncType?: MLFormRecogitionConfig | null;
+}
+export interface ImgSuperResolutionSetting {
+ scaleType?: ImgSuperResolutionConfig;
+}
+export declare enum ImgSuperResolutionConfig {
+ ISR_SCALE_1X = 1,
+ ISR_SCALE_3X = 3
+}
+export interface productReq {
+ filePath?: any | null;
+ detectType?: number;
+ mlProductSetting?: mlProductSetting | null;
+}
+export interface mlProductSetting {
+ largestNumOfReturns?: number | null;
+ productSetId?: string | null;
+ region?: MLProductConfig | null;
+}
+export declare enum MLProductConfig {
+ REGION_DR_CHINA = 1002,
+ REGION_DR_AFILA = 1003,
+ REGION_DR_EUROPE = 1004,
+ REGION_DR_RUSSIA = 1005,
+ REGION_DR_GERMAN = 1006,
+ REGION_DR_SIANGAPORE = 1007
+}
+export interface localImageTextReq {
+ ocrType: MLTextConfig;
+ analyseMode?: number;
+ localTextSetting?: localTextSetting | null;
+ filePath: any;
+}
+export interface localTextSetting {
+ ocrMode?: MLLocalTextSetting;
+ language?: string;
+}
+export declare enum MLLocalTextSetting {
+ OCR_DETECT_MODE = 1,
+ OCR_TRACKING_MODE = 2
+}
+export declare enum MLTextConfig {
+ OCR_LOCAL_TYPE = 0,
+ OCR_REMOTE_TYPE = 1
+}
+export interface remoteImageTextReq {
+ ocrType: MLTextConfig;
+ analyseMode?: number;
+ remoteTextSetting?: remoteTextSetting;
+ filePath: any;
+}
+export interface remoteTextSetting {
+ textDensityScene?: MLRemoteTextSetting;
+ languageList?: Array;
+ borderType?: MLRemoteTextSetting;
+}
+export interface MLBankCard {
+ number: string;
+ expire: string;
+ issuer: string;
+ type: string;
+ organization: string;
+ originalBitmap: any;
+ numberBitmap: any;
+}
+export interface Border {
+ bottom: number;
+ top: number;
+ left: number;
+ right: number;
+ exactCenterX: number;
+ centerY: number;
+ centerX: number;
+ describeContents: number;
+ height: number;
+ width: number;
+}
+export interface MLDocument {
+ stringValue: string;
+ blocks?: Blocks[];
+}
+export interface LanguageList {
+ language: string;
+}
+export interface MLVnIcrCaptureResult {
+ birthday: string;
+ cardBitmap: Bitmap;
+ idNum: string;
+ name: string;
+ sex: string;
+}
+export interface MLCnIcrCaptureResult {
+ birthday: string;
+ cardBitmap: Bitmap;
+ idNum: string;
+ name: string;
+ sex: string;
+ nation: string;
+ address: string;
+ authority: string;
+ validDate: string;
+}
+export interface MLIcrCaptureResult {
+ birthday: string;
+ cardBitmap: Bitmap;
+ idNum: string;
+ name: string;
+ sex: string;
+ nation: string;
+ address: string;
+ validDate: string;
+}
+export interface MLGcrCaptureResult {
+ text: string;
+ cardBitmap: Bitmap;
+}
+export interface Rect {
+ bottom: number;
+ top: number;
+ left: number;
+ right: number;
+ exactCenterX: number;
+ centerY: number;
+ centerX: number;
+ describeContents: number;
+ height: number;
+ width: number;
+}
+export interface Bitmap {
+ mGalleryCached: boolean;
+ mHeight: number;
+ mNativePtr: number;
+ mWidth: number;
+}
+export interface MLText {
+ stringValue: string;
+ blocks?: Blocks[];
+}
+export interface Blocks {
+ contents?: Contents[];
+}
+export interface Contents {
+ stringValue: string;
+ border: Border;
+ language: string;
+ languageList?: LanguageList[];
+ vertexes?: Vertexes[];
+}
+export interface LanguageList {
+ language: string;
+}
+export interface Vertexes {
+ x: number;
+ y: number;
+ describeContents: number;
+}
+export interface MLFormRecogitionResult {
+ retCode: number;
+ tableContent: TableContent;
+}
+export interface TableContent {
+ tableCount: number;
+ tables?: TablesEntity[] | null;
+}
+export interface TablesEntity {
+ tableID: number;
+ headerInfo: string;
+ footerInfo: string;
+ tableBody?: TableBodyEntity[] | null;
+}
+export interface TableBodyEntity {
+ startRow: number;
+ endRow: number;
+ startCol: number;
+ endCol: number;
+ cellCoordinate: CellCoordinate;
+ textInfo: string;
+}
+export interface CellCoordinate {
+ topLeft_x: number;
+ topLeft_y: number;
+ topRight_x: number;
+ topRight_y: number;
+ bottomLeft_x: number;
+ bottomLeft_y: number;
+ bottomRight_x: number;
+ bottomRight_y: number;
+}
+export declare enum Colors {
+ RED = -65536,
+ DKGRAY = -12303292,
+ GRAY = -7829368,
+ WHITE = -1,
+ BLUE = -16776961,
+ BLACK = -16777216,
+ LTGRAY = -3355444,
+ MAGENTA = -65281,
+ YELLOW = -256,
+ CYAN = -16711681,
+ GREEN = -16711936,
+ TRANSPARENT = 0
+}
+export declare enum CordovaErrors {
+ UNKNOWN = -1,
+ SUCCESS = 0,
+ DISCARDED = 1,
+ INNER = 2,
+ INACTIVE = 3,
+ NOT_SUPPORTED = 4,
+ ILLEGAL_PARAMETER = 5,
+ OVERDUE = 6,
+ NO_FOUND = 7,
+ DUPLICATE_FOUND = 8,
+ NO_PERMISSION = 9,
+ INSUFFICIENT_RESOURCE = 10,
+ ANALYSIS_FAILURE = 11,
+ INTERRUPTED = 12,
+ EXCEED_RANGE = 13,
+ DATA_MISSING = 14,
+ AUTHENTICATION_REQUIRED = 15,
+ TFLITE_NOT_COMPATIBLE = 16,
+ INSUFFICIENT_SPACE = 17,
+ HASH_MISS = 18,
+ TOKEN_INVALID = 19,
+ SERVICE_FAILURE = 20,
+ ANALYSIS_NULL = 21
+}
+export declare enum Region {
+ REGION_DR_UNKNOWN = 1001,
+ REGION_DR_CHINA = 1002,
+ REGION_DR_RUSSIA = 1005,
+ REGION_DR_GERMAN = 1006,
+ REGION_DR_SINGAPORE = 1007
+}
diff --git a/cordova-plugin-hms-mltext/ionic-native/dist/ngx/index.js b/cordova-plugin-hms-mltext/ionic-native/dist/ngx/index.js
new file mode 100644
index 00000000..2b55df58
--- /dev/null
+++ b/cordova-plugin-hms-mltext/ionic-native/dist/ngx/index.js
@@ -0,0 +1,482 @@
+/*
+ Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License")
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+import { __extends } from "tslib";
+import { Injectable } from "@angular/core";
+import { IonicNativePlugin, cordova, cordovaPropertyGet, cordovaPropertySet } from "@ionic-native/core";
+var HMSMLTextPlugin = /** @class */ (function (_super) {
+ __extends(HMSMLTextPlugin, _super);
+ function HMSMLTextPlugin() {
+ return _super !== null && _super.apply(this, arguments) || this;
+ }
+ /**
+ * Monitors photographing.
+ * @returns Promise
+ */
+ HMSMLTextPlugin.prototype.photograph = function () { return cordova(this, "photograph", { "otherPromise": true }, arguments); };
+ /**
+ * Close lens engine.
+ * @returns Promise
+ */
+ HMSMLTextPlugin.prototype.destroy = function () { return cordova(this, "destroy", { "otherPromise": true }, arguments); };
+ /**
+ * Obtains the size of the preview image of a camera.
+ * @returns Promise
+ */
+ HMSMLTextPlugin.prototype.getDisplayDimension = function () { return cordova(this, "getDisplayDimension", { "otherPromise": true }, arguments); };
+ /**
+ * An app information class used to store basic information about apps with the HMS Core ML SDK integrated and complete the initialization of ML Text Kit. When using cloud services of the ML Text Kit, you need to set the apiKey of your app.
+ * @param {appSettingReq} appSettingReq Represents the parameter required.
+ * @returns Promise
+ */
+ HMSMLTextPlugin.prototype.appSetting = function (appSettingReq) { return cordova(this, "appSetting", { "otherPromise": true }, arguments); };
+ /**
+ * Determines whether to collect statistics on the current app.
+ * @param {any} any
+ * @returns Promise
+ */
+ HMSMLTextPlugin.prototype.setStatistic = function (any) { return cordova(this, "setStatistic", { "otherPromise": true }, arguments); };
+ /**
+ * Determines whether to collect statistics on the current app.
+ ** @param {any} any
+ * @returns Promise
+ */
+ HMSMLTextPlugin.prototype.getStatistic = function (any) { return cordova(this, "getStatistic", { "otherPromise": true }, arguments); };
+ /**
+ * This service enable logger service.
+ * @returns Promise
+ */
+ HMSMLTextPlugin.prototype.enableLogger = function () { return cordova(this, "enableLogger", { "otherPromise": true }, arguments); };
+ /**
+ * This service disable logger service.
+ * @returns Promise
+ */
+ HMSMLTextPlugin.prototype.disableLogger = function () { return cordova(this, "disableLogger", { "otherPromise": true }, arguments); };
+ Object.defineProperty(HMSMLTextPlugin.prototype, "MLLocalTextSetting", {
+ get: function () { return cordovaPropertyGet(this, "MLLocalTextSetting"); },
+ set: function (value) { cordovaPropertySet(this, "MLLocalTextSetting", value); },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(HMSMLTextPlugin.prototype, "icrVnCaptureType", {
+ get: function () { return cordovaPropertyGet(this, "icrVnCaptureType"); },
+ set: function (value) { cordovaPropertySet(this, "icrVnCaptureType", value); },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(HMSMLTextPlugin.prototype, "MLTextConfig", {
+ get: function () { return cordovaPropertyGet(this, "MLTextConfig"); },
+ set: function (value) { cordovaPropertySet(this, "MLTextConfig", value); },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(HMSMLTextPlugin.prototype, "MLRemoteTextSetting", {
+ get: function () { return cordovaPropertyGet(this, "MLRemoteTextSetting"); },
+ set: function (value) { cordovaPropertySet(this, "MLRemoteTextSetting", value); },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(HMSMLTextPlugin.prototype, "MLBcrCaptureConfig", {
+ get: function () { return cordovaPropertyGet(this, "MLBcrCaptureConfig"); },
+ set: function (value) { cordovaPropertySet(this, "MLBcrCaptureConfig", value); },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(HMSMLTextPlugin.prototype, "MLGcrCaptureUIConfig", {
+ get: function () { return cordovaPropertyGet(this, "MLGcrCaptureUIConfig"); },
+ set: function (value) { cordovaPropertySet(this, "MLGcrCaptureUIConfig", value); },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(HMSMLTextPlugin.prototype, "MLBcrResultConfig", {
+ get: function () { return cordovaPropertyGet(this, "MLBcrResultConfig"); },
+ set: function (value) { cordovaPropertySet(this, "MLBcrResultConfig", value); },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(HMSMLTextPlugin.prototype, "ImgSuperResolutionConfig", {
+ get: function () { return cordovaPropertyGet(this, "ImgSuperResolutionConfig"); },
+ set: function (value) { cordovaPropertySet(this, "ImgSuperResolutionConfig", value); },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(HMSMLTextPlugin.prototype, "MLFormRecogitionConfig", {
+ get: function () { return cordovaPropertyGet(this, "MLFormRecogitionConfig"); },
+ set: function (value) { cordovaPropertySet(this, "MLFormRecogitionConfig", value); },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(HMSMLTextPlugin.prototype, "MLProductConfig", {
+ get: function () { return cordovaPropertyGet(this, "MLProductConfig"); },
+ set: function (value) { cordovaPropertySet(this, "MLProductConfig", value); },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(HMSMLTextPlugin.prototype, "gcrCaptureType", {
+ get: function () { return cordovaPropertyGet(this, "gcrCaptureType"); },
+ set: function (value) { cordovaPropertySet(this, "gcrCaptureType", value); },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(HMSMLTextPlugin.prototype, "Colors", {
+ get: function () { return cordovaPropertyGet(this, "Colors"); },
+ set: function (value) { cordovaPropertySet(this, "Colors", value); },
+ enumerable: false,
+ configurable: true
+ });
+ HMSMLTextPlugin.pluginName = "HMSMLTextPlugin";
+ HMSMLTextPlugin.plugin = "cordova-plugin-hms-mltext";
+ HMSMLTextPlugin.pluginRef = "HMSMLTextPlugin";
+ HMSMLTextPlugin.platforms = ["Android"];
+ HMSMLTextPlugin.decorators = [
+ { type: Injectable }
+ ];
+ return HMSMLTextPlugin;
+}(IonicNativePlugin));
+export { HMSMLTextPlugin };
+var HMSMLText = /** @class */ (function (_super) {
+ __extends(HMSMLText, _super);
+ function HMSMLText() {
+ return _super !== null && _super.apply(this, arguments) || this;
+ }
+ /**
+ * This method start the Text analyzer.
+ * @param {localImageTextReq|remoteImageTextReq} ImageTextAnalyserInput Reperesents the necessary parameters to convert images to text format.
+ * @returns Promise
+ */
+ HMSMLText.prototype.imageTextAnalyser = function (ImageTextAnalyserInput) { return cordova(this, "imageTextAnalyser", { "otherPromise": true }, arguments); };
+ /**
+ * This method stop the Text analyzer.
+ * @returns Promise
+ */
+ HMSMLText.prototype.stopTextAnalyser = function () { return cordova(this, "stopTextAnalyser", { "otherPromise": true }, arguments); };
+ /**
+ * This method gives Text Analyser information.
+ * @returns Promise
+ */
+ HMSMLText.prototype.getTextAnalyserInfo = function () { return cordova(this, "getTextAnalyserInfo", { "otherPromise": true }, arguments); };
+ /**
+ * This method provides a document recognition component that recognizes text from images of documents.
+ * @param {documentImageAnalyserReq} documentImageAnalyserReq Reperesents the necessary parameter to convert document images to text format.
+ * @returns Promise
+ */
+ HMSMLText.prototype.documentImageAnalyser = function (documentImageAnalyserReq) { return cordova(this, "documentImageAnalyser", { "otherPromise": true }, arguments); };
+ /**
+ * This method stop the Document analyzer.
+ * @returns Promise
+ */
+ HMSMLText.prototype.stopDocumentImageAnalyser = function () { return cordova(this, "stopDocumentImageAnalyser", { "otherPromise": true }, arguments); };
+ /**
+ * This method close the Document analyzer.
+ * @returns Promise
+ */
+ HMSMLText.prototype.closeDocumentImageAnalyser = function () { return cordova(this, "closeDocumentImageAnalyser", { "otherPromise": true }, arguments); };
+ /**
+ * This method returns the Document analyzer setting.
+ * @returns Promise
+ */
+ HMSMLText.prototype.getDocumentImageAnalyserSetting = function () { return cordova(this, "getDocumentImageAnalyserSetting", { "otherPromise": true }, arguments); };
+ /**
+ * This method returns the Image analyzer setting.
+ * @returns Promise
+ */
+ HMSMLText.prototype.getTextAnalyserSetting = function () { return cordova(this, "getTextAnalyserSetting", { "otherPromise": true }, arguments); };
+ /**
+ * This method returns the GCR setting.
+ * @returns Promise
+ */
+ HMSMLText.prototype.getGCRSetting = function () { return cordova(this, "getGCRSetting", { "otherPromise": true }, arguments); };
+ /**
+ * This method stop the Form Recognition Analyzer.
+ * @returns Promise
+ */
+ HMSMLText.prototype.stopFormRecognitionAnalyser = function () { return cordova(this, "stopFormRecognitionAnalyser", { "otherPromise": true }, arguments); };
+ /**
+ * The bank card recognition service recognizes bank cards in camera streams within angle offset of 15 degrees and extracts key information such as card number and validity period.
+ * @param {bankCardSDKDetectorReq|bankCardPluginDetectorReq} bankCardDetecterInput Represents the parameter required for bank card recognition.
+ * @returns Promise | Promise
+ */
+ HMSMLText.prototype.bankCardDetector = function (bankCardDetecterInput) {
+ return;
+ };
+ /**
+ * This method stop bankcard recognition service.
+ * @returns Promise
+ */
+ HMSMLText.prototype.stopBankCardDetector = function () { return cordova(this, "stopBankCardDetector", { "otherPromise": true }, arguments); };
+ HMSMLText.prototype.setResultTypeBcr = function (mLBcrCaptureConfig) { return cordova(this, "setResultTypeBcr", { "otherPromise": true }, arguments); };
+ HMSMLText.prototype.setRecModeBcr = function (mLBcrCaptureConfig) { return cordova(this, "setRecModeBcr", { "otherPromise": true }, arguments); };
+ /**
+ * This method returns the BCR setting.
+ * @returns Promise
+ */
+ HMSMLText.prototype.getBankCardDetectorSetting = function () { return cordova(this, "getBankCardDetectorSetting", { "otherPromise": true }, arguments); };
+ /**
+ * The general card recognition service provides a universal development framework based on the text recognition technology.
+ * @param {generalCardDetectorReq} generalCardDetectorReq Represents the parameter required for general card recognition plug-in.
+ * @returns Promise
+ */
+ HMSMLText.prototype.generalCardDetector = function (generalCardDetectorReq) { return cordova(this, "generalCardDetector", { "otherPromise": true }, arguments); };
+ /**
+ * The general Vietnam id card recognition service provides a universal development framework based on the text recognition technology.
+ * @param {icrVnDetectorReq} icrVnDetectorReq Represents the parameter required for general card recognition plug-in.
+ * @returns Promise
+ */
+ HMSMLText.prototype.icrVnCardDetector = function (icrVnDetectorReq) { return cordova(this, "icrVnCardDetector", { "otherPromise": true }, arguments); };
+ /**
+ * The form recognition service uses AI technologies to recognize and return form structure information (including rows, columns, and coordinates of cells) and form text in Chinese and English (including punctuation) from input images.
+ * @param {formRecognizerAnalyserReq} formRecognizerAnalyserReq Represents the parameter required for general card recognition plug-in.
+ * @returns Promise
+ */
+ HMSMLText.prototype.formRecognitionAnalyser = function (formRecognizerAnalyserReq) { return cordova(this, "formRecognitionAnalyser", { "otherPromise": true }, arguments); };
+ HMSMLText.prototype.icrLocalAnalyser = function (localAnalyserReq) { return cordova(this, "icrLocalAnalyser", { "otherPromise": true }, arguments); };
+ HMSMLText.prototype.icrLocalAnalyserCreateIdCard = function (createIdCardReq) { return cordova(this, "icrLocalAnalyserCreateIdCard", { "otherPromise": true }, arguments); };
+ HMSMLText.prototype.icrLocalAnalyserStop = function () { return cordova(this, "icrLocalAnalyserStop", { "otherPromise": true }, arguments); };
+ HMSMLText.prototype.geticrCnCardInstance = function () { return cordova(this, "geticrCnCardInstance", { "otherPromise": true }, arguments); };
+ HMSMLText.prototype.icrCnCardCreate = function () { return cordova(this, "icrCnCardCreate", { "otherPromise": true }, arguments); };
+ HMSMLText.prototype.geticrVnCardInstance = function () { return cordova(this, "geticrVnCardInstance", { "otherPromise": true }, arguments); };
+ HMSMLText.prototype.icrVnCardCreate = function () { return cordova(this, "icrVnCardCreate", { "otherPromise": true }, arguments); };
+ HMSMLText.prototype.getIcrVnCapture = function () { return cordova(this, "getIcrVnCapture", { "otherPromise": true }, arguments); };
+ HMSMLText.prototype.startCustomizedView = function (userProps) { return cordova(this, "startCustomizedView", { "otherPromise": true }, arguments); };
+ HMSMLText.prototype.switchLight = function () { return cordova(this, "switchLight", { "otherPromise": true }, arguments); };
+ HMSMLText.prototype.getLightStatus = function () { return cordova(this, "getLightStatus", { "otherPromise": true }, arguments); };
+ HMSMLText.prototype.setUserRegion = function (region) { return cordova(this, "setUserRegion", { "otherPromise": true }, arguments); };
+ HMSMLText.prototype.getCountryCode = function () { return cordova(this, "getCountryCode", { "otherPromise": true }, arguments); };
+ Object.defineProperty(HMSMLText.prototype, "icrVnCaptureType", {
+ get: function () { return cordovaPropertyGet(this, "icrVnCaptureType"); },
+ set: function (value) { cordovaPropertySet(this, "icrVnCaptureType", value); },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(HMSMLText.prototype, "gcrCaptureType", {
+ get: function () { return cordovaPropertyGet(this, "gcrCaptureType"); },
+ set: function (value) { cordovaPropertySet(this, "gcrCaptureType", value); },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(HMSMLText.prototype, "MLLocalTextSetting", {
+ get: function () { return cordovaPropertyGet(this, "MLLocalTextSetting"); },
+ set: function (value) { cordovaPropertySet(this, "MLLocalTextSetting", value); },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(HMSMLText.prototype, "MLTextConfig", {
+ get: function () { return cordovaPropertyGet(this, "MLTextConfig"); },
+ set: function (value) { cordovaPropertySet(this, "MLTextConfig", value); },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(HMSMLText.prototype, "MLRemoteTextSetting", {
+ get: function () { return cordovaPropertyGet(this, "MLRemoteTextSetting"); },
+ set: function (value) { cordovaPropertySet(this, "MLRemoteTextSetting", value); },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(HMSMLText.prototype, "MLBcrCaptureConfig", {
+ get: function () { return cordovaPropertyGet(this, "MLBcrCaptureConfig"); },
+ set: function (value) { cordovaPropertySet(this, "MLBcrCaptureConfig", value); },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(HMSMLText.prototype, "MLGcrCaptureUIConfig", {
+ get: function () { return cordovaPropertyGet(this, "MLGcrCaptureUIConfig"); },
+ set: function (value) { cordovaPropertySet(this, "MLGcrCaptureUIConfig", value); },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(HMSMLText.prototype, "MLBcrResultConfig", {
+ get: function () { return cordovaPropertyGet(this, "MLBcrResultConfig"); },
+ set: function (value) { cordovaPropertySet(this, "MLBcrResultConfig", value); },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(HMSMLText.prototype, "ImgSuperResolutionConfig", {
+ get: function () { return cordovaPropertyGet(this, "ImgSuperResolutionConfig"); },
+ set: function (value) { cordovaPropertySet(this, "ImgSuperResolutionConfig", value); },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(HMSMLText.prototype, "MLFormRecogitionConfig", {
+ get: function () { return cordovaPropertyGet(this, "MLFormRecogitionConfig"); },
+ set: function (value) { cordovaPropertySet(this, "MLFormRecogitionConfig", value); },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(HMSMLText.prototype, "MLProductConfig", {
+ get: function () { return cordovaPropertyGet(this, "MLProductConfig"); },
+ set: function (value) { cordovaPropertySet(this, "MLProductConfig", value); },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(HMSMLText.prototype, "Colors", {
+ get: function () { return cordovaPropertyGet(this, "Colors"); },
+ set: function (value) { cordovaPropertySet(this, "Colors", value); },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(HMSMLText.prototype, "RecMode", {
+ get: function () { return cordovaPropertyGet(this, "RecMode"); },
+ set: function (value) { cordovaPropertySet(this, "RecMode", value); },
+ enumerable: false,
+ configurable: true
+ });
+ HMSMLText.pluginName = "HMSMLText";
+ HMSMLText.plugin = "cordova-plugin-hms-mltext";
+ HMSMLText.pluginRef = "HMSMLText";
+ HMSMLText.platforms = ["Android"];
+ HMSMLText.decorators = [
+ { type: Injectable }
+ ];
+ return HMSMLText;
+}(IonicNativePlugin));
+export { HMSMLText };
+export var RecMode;
+(function (RecMode) {
+ RecMode[RecMode["WEAK_MODE"] = 0] = "WEAK_MODE";
+ RecMode[RecMode["STRICT_MODE"] = 1] = "STRICT_MODE";
+})(RecMode || (RecMode = {}));
+export var MLBcrCaptureConfig;
+(function (MLBcrCaptureConfig) {
+ MLBcrCaptureConfig[MLBcrCaptureConfig["ERROR_CODE_INIT_CAMERA_FAILED"] = 10101] = "ERROR_CODE_INIT_CAMERA_FAILED";
+ MLBcrCaptureConfig[MLBcrCaptureConfig["RESULT_NUM_ONLY"] = 0] = "RESULT_NUM_ONLY";
+ MLBcrCaptureConfig[MLBcrCaptureConfig["ORIENTATION_AUTO"] = 0] = "ORIENTATION_AUTO";
+ MLBcrCaptureConfig[MLBcrCaptureConfig["WEAK_MODE"] = 0] = "WEAK_MODE";
+ MLBcrCaptureConfig[MLBcrCaptureConfig["ORIENTATION_LANDSCAPE"] = 1] = "ORIENTATION_LANDSCAPE";
+ MLBcrCaptureConfig[MLBcrCaptureConfig["ORIENTATION_PORTRAIT"] = 2] = "ORIENTATION_PORTRAIT";
+ MLBcrCaptureConfig[MLBcrCaptureConfig["RESULT_ALL"] = 2] = "RESULT_ALL";
+ MLBcrCaptureConfig[MLBcrCaptureConfig["RESULT_SIMPLE"] = 1] = "RESULT_SIMPLE";
+ MLBcrCaptureConfig[MLBcrCaptureConfig["STRICT_MODE"] = 1] = "STRICT_MODE";
+})(MLBcrCaptureConfig || (MLBcrCaptureConfig = {}));
+export var MLBcrResultConfig;
+(function (MLBcrResultConfig) {
+ MLBcrResultConfig[MLBcrResultConfig["RESULT_NUM_ONLY"] = 0] = "RESULT_NUM_ONLY";
+ MLBcrResultConfig[MLBcrResultConfig["RESULT_SIMPLE"] = 1] = "RESULT_SIMPLE";
+ MLBcrResultConfig[MLBcrResultConfig["RESULT_ALL"] = 2] = "RESULT_ALL";
+})(MLBcrResultConfig || (MLBcrResultConfig = {}));
+export var MLBcrCaptureErrorCode;
+(function (MLBcrCaptureErrorCode) {
+ MLBcrCaptureErrorCode[MLBcrCaptureErrorCode["ERROR_CODE_INIT_CAMERA_FAILED"] = 10101] = "ERROR_CODE_INIT_CAMERA_FAILED";
+})(MLBcrCaptureErrorCode || (MLBcrCaptureErrorCode = {}));
+export var MLRemoteTextSetting;
+(function (MLRemoteTextSetting) {
+ MLRemoteTextSetting[MLRemoteTextSetting["OCR_LOOSE_SCENE"] = 1] = "OCR_LOOSE_SCENE";
+ MLRemoteTextSetting[MLRemoteTextSetting["OCR_COMPACT_SCENE"] = 2] = "OCR_COMPACT_SCENE";
+ MLRemoteTextSetting["NGON"] = "NGON";
+ MLRemoteTextSetting["ARC"] = "ARC";
+ MLRemoteTextSetting[MLRemoteTextSetting["OTHER"] = 5] = "OTHER";
+ MLRemoteTextSetting[MLRemoteTextSetting["NEW_LINE_CHARACTER"] = 8] = "NEW_LINE_CHARACTER";
+ MLRemoteTextSetting[MLRemoteTextSetting["SPACE"] = 6] = "SPACE";
+})(MLRemoteTextSetting || (MLRemoteTextSetting = {}));
+export var MLFormRecogitionConfig;
+(function (MLFormRecogitionConfig) {
+ MLFormRecogitionConfig[MLFormRecogitionConfig["SYNC_TYPE"] = 1] = "SYNC_TYPE";
+ MLFormRecogitionConfig[MLFormRecogitionConfig["ASYNC_TYPE"] = 0] = "ASYNC_TYPE";
+})(MLFormRecogitionConfig || (MLFormRecogitionConfig = {}));
+export var gcrCaptureType;
+(function (gcrCaptureType) {
+ gcrCaptureType[gcrCaptureType["CAPTURE_ACTIVITY"] = 0] = "CAPTURE_ACTIVITY";
+ gcrCaptureType[gcrCaptureType["CAPTURE_PHOTO"] = 1] = "CAPTURE_PHOTO";
+ gcrCaptureType[gcrCaptureType["CAPTURE_IMAGE"] = 2] = "CAPTURE_IMAGE";
+})(gcrCaptureType || (gcrCaptureType = {}));
+export var MLGcrCaptureUIConfig;
+(function (MLGcrCaptureUIConfig) {
+ MLGcrCaptureUIConfig[MLGcrCaptureUIConfig["ORIENTATION_AUTO"] = 0] = "ORIENTATION_AUTO";
+ MLGcrCaptureUIConfig[MLGcrCaptureUIConfig["ORIENTATION_LANDSCAPE"] = 1] = "ORIENTATION_LANDSCAPE";
+ MLGcrCaptureUIConfig[MLGcrCaptureUIConfig["ORIENTATION_PORTRAIT"] = 2] = "ORIENTATION_PORTRAIT";
+})(MLGcrCaptureUIConfig || (MLGcrCaptureUIConfig = {}));
+export var icrCaptureType;
+(function (icrCaptureType) {
+ icrCaptureType[icrCaptureType["CAPTURE_CAMERA"] = 0] = "CAPTURE_CAMERA";
+ icrCaptureType[icrCaptureType["CAPTURE_IMAGE"] = 1] = "CAPTURE_IMAGE";
+})(icrCaptureType || (icrCaptureType = {}));
+export var MLIcrSideType;
+(function (MLIcrSideType) {
+ MLIcrSideType["FRONT"] = "FRONT";
+ MLIcrSideType["BACK"] = "BACK";
+})(MLIcrSideType || (MLIcrSideType = {}));
+export var ImgSuperResolutionConfig;
+(function (ImgSuperResolutionConfig) {
+ ImgSuperResolutionConfig[ImgSuperResolutionConfig["ISR_SCALE_1X"] = 1] = "ISR_SCALE_1X";
+ ImgSuperResolutionConfig[ImgSuperResolutionConfig["ISR_SCALE_3X"] = 3] = "ISR_SCALE_3X";
+})(ImgSuperResolutionConfig || (ImgSuperResolutionConfig = {}));
+export var MLProductConfig;
+(function (MLProductConfig) {
+ MLProductConfig[MLProductConfig["REGION_DR_CHINA"] = 1002] = "REGION_DR_CHINA";
+ MLProductConfig[MLProductConfig["REGION_DR_AFILA"] = 1003] = "REGION_DR_AFILA";
+ MLProductConfig[MLProductConfig["REGION_DR_EUROPE"] = 1004] = "REGION_DR_EUROPE";
+ MLProductConfig[MLProductConfig["REGION_DR_RUSSIA"] = 1005] = "REGION_DR_RUSSIA";
+ MLProductConfig[MLProductConfig["REGION_DR_GERMAN"] = 1006] = "REGION_DR_GERMAN";
+ MLProductConfig[MLProductConfig["REGION_DR_SIANGAPORE"] = 1007] = "REGION_DR_SIANGAPORE";
+})(MLProductConfig || (MLProductConfig = {}));
+export var MLLocalTextSetting;
+(function (MLLocalTextSetting) {
+ MLLocalTextSetting[MLLocalTextSetting["OCR_DETECT_MODE"] = 1] = "OCR_DETECT_MODE";
+ MLLocalTextSetting[MLLocalTextSetting["OCR_TRACKING_MODE"] = 2] = "OCR_TRACKING_MODE";
+})(MLLocalTextSetting || (MLLocalTextSetting = {}));
+export var MLTextConfig;
+(function (MLTextConfig) {
+ MLTextConfig[MLTextConfig["OCR_LOCAL_TYPE"] = 0] = "OCR_LOCAL_TYPE";
+ MLTextConfig[MLTextConfig["OCR_REMOTE_TYPE"] = 1] = "OCR_REMOTE_TYPE";
+})(MLTextConfig || (MLTextConfig = {}));
+export var Colors;
+(function (Colors) {
+ Colors[Colors["RED"] = -65536] = "RED";
+ Colors[Colors["DKGRAY"] = -12303292] = "DKGRAY";
+ Colors[Colors["GRAY"] = -7829368] = "GRAY";
+ Colors[Colors["WHITE"] = -1] = "WHITE";
+ Colors[Colors["BLUE"] = -16776961] = "BLUE";
+ Colors[Colors["BLACK"] = -16777216] = "BLACK";
+ Colors[Colors["LTGRAY"] = -3355444] = "LTGRAY";
+ Colors[Colors["MAGENTA"] = -65281] = "MAGENTA";
+ Colors[Colors["YELLOW"] = -256] = "YELLOW";
+ Colors[Colors["CYAN"] = -16711681] = "CYAN";
+ Colors[Colors["GREEN"] = -16711936] = "GREEN";
+ Colors[Colors["TRANSPARENT"] = 0] = "TRANSPARENT";
+})(Colors || (Colors = {}));
+export var CordovaErrors;
+(function (CordovaErrors) {
+ CordovaErrors[CordovaErrors["UNKNOWN"] = -1] = "UNKNOWN";
+ CordovaErrors[CordovaErrors["SUCCESS"] = 0] = "SUCCESS";
+ CordovaErrors[CordovaErrors["DISCARDED"] = 1] = "DISCARDED";
+ CordovaErrors[CordovaErrors["INNER"] = 2] = "INNER";
+ CordovaErrors[CordovaErrors["INACTIVE"] = 3] = "INACTIVE";
+ CordovaErrors[CordovaErrors["NOT_SUPPORTED"] = 4] = "NOT_SUPPORTED";
+ CordovaErrors[CordovaErrors["ILLEGAL_PARAMETER"] = 5] = "ILLEGAL_PARAMETER";
+ CordovaErrors[CordovaErrors["OVERDUE"] = 6] = "OVERDUE";
+ CordovaErrors[CordovaErrors["NO_FOUND"] = 7] = "NO_FOUND";
+ CordovaErrors[CordovaErrors["DUPLICATE_FOUND"] = 8] = "DUPLICATE_FOUND";
+ CordovaErrors[CordovaErrors["NO_PERMISSION"] = 9] = "NO_PERMISSION";
+ CordovaErrors[CordovaErrors["INSUFFICIENT_RESOURCE"] = 10] = "INSUFFICIENT_RESOURCE";
+ CordovaErrors[CordovaErrors["ANALYSIS_FAILURE"] = 11] = "ANALYSIS_FAILURE";
+ CordovaErrors[CordovaErrors["INTERRUPTED"] = 12] = "INTERRUPTED";
+ CordovaErrors[CordovaErrors["EXCEED_RANGE"] = 13] = "EXCEED_RANGE";
+ CordovaErrors[CordovaErrors["DATA_MISSING"] = 14] = "DATA_MISSING";
+ CordovaErrors[CordovaErrors["AUTHENTICATION_REQUIRED"] = 15] = "AUTHENTICATION_REQUIRED";
+ CordovaErrors[CordovaErrors["TFLITE_NOT_COMPATIBLE"] = 16] = "TFLITE_NOT_COMPATIBLE";
+ CordovaErrors[CordovaErrors["INSUFFICIENT_SPACE"] = 17] = "INSUFFICIENT_SPACE";
+ CordovaErrors[CordovaErrors["HASH_MISS"] = 18] = "HASH_MISS";
+ CordovaErrors[CordovaErrors["TOKEN_INVALID"] = 19] = "TOKEN_INVALID";
+ CordovaErrors[CordovaErrors["SERVICE_FAILURE"] = 20] = "SERVICE_FAILURE";
+ CordovaErrors[CordovaErrors["ANALYSIS_NULL"] = 21] = "ANALYSIS_NULL";
+})(CordovaErrors || (CordovaErrors = {}));
+export var Region;
+(function (Region) {
+ Region[Region["REGION_DR_UNKNOWN"] = 1001] = "REGION_DR_UNKNOWN";
+ Region[Region["REGION_DR_CHINA"] = 1002] = "REGION_DR_CHINA";
+ Region[Region["REGION_DR_RUSSIA"] = 1005] = "REGION_DR_RUSSIA";
+ Region[Region["REGION_DR_GERMAN"] = 1006] = "REGION_DR_GERMAN";
+ Region[Region["REGION_DR_SINGAPORE"] = 1007] = "REGION_DR_SINGAPORE";
+})(Region || (Region = {}));
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvQGlvbmljLW5hdGl2ZS9wbHVnaW5zL25hdGl2ZS9uZ3gvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0VBY0U7O0FBRUYsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLHNFQUtOLE1BQU0sb0JBQW9CLENBQUM7O0lBU1MsbUNBQWlCOzs7O0lBMkJsRDs7O09BR0c7SUFDSCxvQ0FBVTtJQUlWOzs7T0FHRztJQUNILGlDQUFPO0lBSVA7OztPQUdHO0lBQ0gsNkNBQW1CO0lBSW5COzs7O09BSUc7SUFDSCxvQ0FBVSxhQUFDLGFBQTRCO0lBSXZDOzs7O09BSUc7SUFDSCxzQ0FBWSxhQUFDLEdBQVE7SUFJckI7Ozs7T0FJRztJQUNILHNDQUFZLGFBQUMsR0FBUTtJQUlyQjs7O09BR0c7SUFDSCxzQ0FBWTtJQUlaOzs7T0FHRztJQUNILHVDQUFhOzBCQXhGYiwrQ0FBa0I7Ozs7OzswQkFFbEIsNkNBQWdCOzs7Ozs7MEJBRWhCLHlDQUFZOzs7Ozs7MEJBRVosZ0RBQW1COzs7Ozs7MEJBRW5CLCtDQUFrQjs7Ozs7OzBCQUVsQixpREFBb0I7Ozs7OzswQkFFcEIsOENBQWlCOzs7Ozs7MEJBRWpCLHFEQUF3Qjs7Ozs7OzBCQUV4QixtREFBc0I7Ozs7OzswQkFFdEIsNENBQWU7Ozs7OzswQkFFZiwyQ0FBYzs7Ozs7OzBCQUVkLG1DQUFNOzs7Ozs7Ozs7OztnQkF6QlQsVUFBVTs7MEJBOUJYO0VBK0JxQyxpQkFBaUI7U0FBekMsZUFBZTs7SUFxR0csNkJBQWlCOzs7O0lBNkI1Qzs7OztPQUlHO0lBQ0gscUNBQWlCLGFBQ2Isc0JBQThEO0lBS2xFOzs7T0FHRztJQUNILG9DQUFnQjtJQUloQjs7O09BR0c7SUFDSCx1Q0FBbUI7SUFJbkI7Ozs7T0FJRztJQUNILHlDQUFxQixhQUNqQix3QkFBa0Q7SUFLdEQ7OztPQUdHO0lBQ0gsNkNBQXlCO0lBSXpCOzs7T0FHRztJQUNILDhDQUEwQjtJQUkxQjs7O09BR0c7SUFDSCxtREFBK0I7SUFJL0I7OztPQUdHO0lBQ0gsMENBQXNCO0lBSXRCOzs7T0FHRztJQUNILGlDQUFhO0lBSWI7OztPQUdHO0lBQ0gsK0NBQTJCO0lBRzNCOzs7O09BSUc7SUFDSCxvQ0FBZ0IsR0FBaEIsVUFDSSxxQkFFK0I7UUFFL0IsT0FBTztJQUNYLENBQUM7SUFFRDs7O09BR0c7SUFDSCx3Q0FBb0I7SUFJcEIsb0NBQWdCLGFBQUMsa0JBQXNDO0lBSXZELGlDQUFhLGFBQUMsa0JBQXNDO0lBSXBEOzs7T0FHRztJQUNILDhDQUEwQjtJQUkxQjs7OztPQUlHO0lBQ0gsdUNBQW1CLGFBQ2Ysc0JBQThDO0lBS2xEOzs7O09BSUc7SUFDSCxxQ0FBaUIsYUFDYixnQkFBa0M7SUFLdEM7Ozs7T0FJRztJQUNILDJDQUF1QixhQUNuQix5QkFBb0Q7SUFLeEQsb0NBQWdCLGFBQ1osZ0JBQWtDO0lBTXRDLGdEQUE0QixhQUN4QixlQUFnQztJQU1wQyx3Q0FBb0I7SUFLcEIsd0NBQW9CO0lBS3BCLG1DQUFlO0lBSWYsd0NBQW9CO0lBSXBCLG1DQUFlO0lBSWYsbUNBQWU7SUFLZix1Q0FBbUIsYUFBQyxTQUFnQztJQUlwRCwrQkFBVztJQUlYLGtDQUFjO0lBSWQsaUNBQWEsYUFBQyxNQUFjO0lBSTVCLGtDQUFjOzBCQS9PZCx1Q0FBZ0I7Ozs7OzswQkFFaEIscUNBQWM7Ozs7OzswQkFFZCx5Q0FBa0I7Ozs7OzswQkFFbEIsbUNBQVk7Ozs7OzswQkFFWiwwQ0FBbUI7Ozs7OzswQkFFbkIseUNBQWtCOzs7Ozs7MEJBRWxCLDJDQUFvQjs7Ozs7OzBCQUVwQix3Q0FBaUI7Ozs7OzswQkFFakIsK0NBQXdCOzs7Ozs7MEJBRXhCLDZDQUFzQjs7Ozs7OzBCQUV0QixzQ0FBZTs7Ozs7OzBCQUVmLDZCQUFNOzs7Ozs7MEJBRU4sOEJBQU87Ozs7Ozs7Ozs7O2dCQTNCVixVQUFVOztvQkFuSVg7RUFvSStCLGlCQUFpQjtTQUFuQyxTQUFTO0FBdVN0QixNQUFNLENBQU4sSUFBWSxPQUdYO0FBSEQsV0FBWSxPQUFPO0lBQ2YsK0NBQWEsQ0FBQTtJQUNiLG1EQUFlLENBQUE7QUFDbkIsQ0FBQyxFQUhXLE9BQU8sS0FBUCxPQUFPLFFBR2xCO0FBRUQsTUFBTSxDQUFOLElBQVksa0JBVVg7QUFWRCxXQUFZLGtCQUFrQjtJQUMxQixpSEFBcUMsQ0FBQTtJQUNyQyxpRkFBbUIsQ0FBQTtJQUNuQixtRkFBb0IsQ0FBQTtJQUNwQixxRUFBYSxDQUFBO0lBQ2IsNkZBQXlCLENBQUE7SUFDekIsMkZBQXdCLENBQUE7SUFDeEIsdUVBQWMsQ0FBQTtJQUNkLDZFQUFpQixDQUFBO0lBQ2pCLHlFQUFlLENBQUE7QUFDbkIsQ0FBQyxFQVZXLGtCQUFrQixLQUFsQixrQkFBa0IsUUFVN0I7QUFDRCxNQUFNLENBQU4sSUFBWSxpQkFJWDtBQUpELFdBQVksaUJBQWlCO0lBQ3pCLCtFQUFtQixDQUFBO0lBQ25CLDJFQUFpQixDQUFBO0lBQ2pCLHFFQUFjLENBQUE7QUFDbEIsQ0FBQyxFQUpXLGlCQUFpQixLQUFqQixpQkFBaUIsUUFJNUI7QUFhRCxNQUFNLENBQU4sSUFBWSxxQkFFWDtBQUZELFdBQVkscUJBQXFCO0lBQzdCLHVIQUFxQyxDQUFBO0FBQ3pDLENBQUMsRUFGVyxxQkFBcUIsS0FBckIscUJBQXFCLFFBRWhDO0FBZUQsTUFBTSxDQUFOLElBQVksbUJBUVg7QUFSRCxXQUFZLG1CQUFtQjtJQUMzQixtRkFBbUIsQ0FBQTtJQUNuQix1RkFBcUIsQ0FBQTtJQUNyQixvQ0FBYSxDQUFBO0lBQ2Isa0NBQVcsQ0FBQTtJQUNYLCtEQUFTLENBQUE7SUFDVCx5RkFBc0IsQ0FBQTtJQUN0QiwrREFBUyxDQUFBO0FBQ2IsQ0FBQyxFQVJXLG1CQUFtQixLQUFuQixtQkFBbUIsUUFROUI7QUFVRCxNQUFNLENBQU4sSUFBWSxzQkFHWDtBQUhELFdBQVksc0JBQXNCO0lBQzlCLDZFQUFhLENBQUE7SUFDYiwrRUFBYyxDQUFBO0FBQ2xCLENBQUMsRUFIVyxzQkFBc0IsS0FBdEIsc0JBQXNCLFFBR2pDO0FBYUQsTUFBTSxDQUFOLElBQVksY0FJWDtBQUpELFdBQVksY0FBYztJQUN0QiwyRUFBb0IsQ0FBQTtJQUNwQixxRUFBaUIsQ0FBQTtJQUNqQixxRUFBaUIsQ0FBQTtBQUNyQixDQUFDLEVBSlcsY0FBYyxLQUFkLGNBQWMsUUFJekI7QUF1QkQsTUFBTSxDQUFOLElBQVksb0JBSVg7QUFKRCxXQUFZLG9CQUFvQjtJQUM1Qix1RkFBb0IsQ0FBQTtJQUNwQixpR0FBeUIsQ0FBQTtJQUN6QiwrRkFBd0IsQ0FBQTtBQUM1QixDQUFDLEVBSlcsb0JBQW9CLEtBQXBCLG9CQUFvQixRQUkvQjtBQWVELE1BQU0sQ0FBTixJQUFZLGNBR1g7QUFIRCxXQUFZLGNBQWM7SUFDdEIsdUVBQWtCLENBQUE7SUFDbEIscUVBQWlCLENBQUE7QUFDckIsQ0FBQyxFQUhXLGNBQWMsS0FBZCxjQUFjLFFBR3pCO0FBZ0JELE1BQU0sQ0FBTixJQUFZLGFBR1g7QUFIRCxXQUFZLGFBQWE7SUFDckIsZ0NBQWUsQ0FBQTtJQUNmLDhCQUFhLENBQUE7QUFDakIsQ0FBQyxFQUhXLGFBQWEsS0FBYixhQUFhLFFBR3hCO0FBYUQsTUFBTSxDQUFOLElBQVksd0JBR1g7QUFIRCxXQUFZLHdCQUF3QjtJQUNoQyx1RkFBa0IsQ0FBQTtJQUNsQix1RkFBa0IsQ0FBQTtBQUN0QixDQUFDLEVBSFcsd0JBQXdCLEtBQXhCLHdCQUF3QixRQUduQztBQWNELE1BQU0sQ0FBTixJQUFZLGVBT1g7QUFQRCxXQUFZLGVBQWU7SUFDdkIsOEVBQXNCLENBQUE7SUFDdEIsOEVBQXNCLENBQUE7SUFDdEIsZ0ZBQXVCLENBQUE7SUFDdkIsZ0ZBQXVCLENBQUE7SUFDdkIsZ0ZBQXVCLENBQUE7SUFDdkIsd0ZBQTJCLENBQUE7QUFDL0IsQ0FBQyxFQVBXLGVBQWUsS0FBZixlQUFlLFFBTzFCO0FBa0JELE1BQU0sQ0FBTixJQUFZLGtCQUdYO0FBSEQsV0FBWSxrQkFBa0I7SUFDMUIsaUZBQW1CLENBQUE7SUFDbkIscUZBQXFCLENBQUE7QUFDekIsQ0FBQyxFQUhXLGtCQUFrQixLQUFsQixrQkFBa0IsUUFHN0I7QUFDRCxNQUFNLENBQU4sSUFBWSxZQUdYO0FBSEQsV0FBWSxZQUFZO0lBQ3BCLG1FQUFrQixDQUFBO0lBQ2xCLHFFQUFtQixDQUFBO0FBQ3ZCLENBQUMsRUFIVyxZQUFZLEtBQVosWUFBWSxRQUd2QjtBQWlLRCxNQUFNLENBQU4sSUFBWSxNQWFYO0FBYkQsV0FBWSxNQUFNO0lBQ2Qsc0NBQVksQ0FBQTtJQUNaLCtDQUFrQixDQUFBO0lBQ2xCLDBDQUFlLENBQUE7SUFDZixzQ0FBVSxDQUFBO0lBQ1YsMkNBQWdCLENBQUE7SUFDaEIsNkNBQWlCLENBQUE7SUFDakIsOENBQWlCLENBQUE7SUFDakIsOENBQWdCLENBQUE7SUFDaEIsMENBQWEsQ0FBQTtJQUNiLDJDQUFnQixDQUFBO0lBQ2hCLDZDQUFpQixDQUFBO0lBQ2pCLGlEQUFlLENBQUE7QUFDbkIsQ0FBQyxFQWJXLE1BQU0sS0FBTixNQUFNLFFBYWpCO0FBRUQsTUFBTSxDQUFOLElBQVksYUF3Qlg7QUF4QkQsV0FBWSxhQUFhO0lBQ3JCLHdEQUFZLENBQUE7SUFDWix1REFBVyxDQUFBO0lBQ1gsMkRBQWEsQ0FBQTtJQUNiLG1EQUFTLENBQUE7SUFDVCx5REFBWSxDQUFBO0lBQ1osbUVBQWlCLENBQUE7SUFDakIsMkVBQXFCLENBQUE7SUFDckIsdURBQVcsQ0FBQTtJQUNYLHlEQUFZLENBQUE7SUFDWix1RUFBbUIsQ0FBQTtJQUNuQixtRUFBaUIsQ0FBQTtJQUNqQixvRkFBMEIsQ0FBQTtJQUMxQiwwRUFBcUIsQ0FBQTtJQUNyQixnRUFBZ0IsQ0FBQTtJQUNoQixrRUFBaUIsQ0FBQTtJQUNqQixrRUFBaUIsQ0FBQTtJQUNqQix3RkFBNEIsQ0FBQTtJQUM1QixvRkFBMEIsQ0FBQTtJQUMxQiw4RUFBdUIsQ0FBQTtJQUN2Qiw0REFBYyxDQUFBO0lBQ2Qsb0VBQWtCLENBQUE7SUFDbEIsd0VBQW9CLENBQUE7SUFDcEIsb0VBQWtCLENBQUE7QUFDdEIsQ0FBQyxFQXhCVyxhQUFhLEtBQWIsYUFBYSxRQXdCeEI7QUFHRCxNQUFNLENBQU4sSUFBWSxNQU1YO0FBTkQsV0FBWSxNQUFNO0lBQ2xCLGdFQUF3QixDQUFBO0lBQ3hCLDREQUFzQixDQUFBO0lBQ3RCLDhEQUF1QixDQUFBO0lBQ3ZCLDhEQUF1QixDQUFBO0lBQ3ZCLG9FQUEwQixDQUFBO0FBQzFCLENBQUMsRUFOVyxNQUFNLEtBQU4sTUFBTSxRQU1qQiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gICAgQ29weXJpZ2h0IDIwMjMuIEh1YXdlaSBUZWNobm9sb2dpZXMgQ28uLCBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cbiAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpXG4gICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cblxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQge1xuICAgIFBsdWdpbixcbiAgICBDb3Jkb3ZhLFxuICAgIENvcmRvdmFQcm9wZXJ0eSwgXG4gICAgSW9uaWNOYXRpdmVQbHVnaW4sXG59IGZyb20gXCJAaW9uaWMtbmF0aXZlL2NvcmVcIjtcblxuQFBsdWdpbih7XG4gICAgcGx1Z2luTmFtZTogXCJITVNNTFRleHRQbHVnaW5cIixcbiAgICBwbHVnaW46IFwiY29yZG92YS1wbHVnaW4taG1zLW1sdGV4dFwiLCAvLyBucG0gcGFja2FnZSBuYW1lLCBleGFtcGxlOiBjb3Jkb3ZhLXBsdWdpbi1jYW1lcmFcbiAgICBwbHVnaW5SZWY6IFwiSE1TTUxUZXh0UGx1Z2luXCIsIC8vIHRoZSB2YXJpYWJsZSByZWZlcmVuY2UgdG8gY2FsbCB0aGUgcGx1Z2luLCBleGFtcGxlOiBuYXZpZ2F0b3IuZ2VvbG9jYXRpb25cbiAgICBwbGF0Zm9ybXM6IFtcIkFuZHJvaWRcIl0sIC8vIEFycmF5IG9mIHBsYXRmb3JtcyBzdXBwb3J0ZWQsIGV4YW1wbGU6IFsnQW5kcm9pZCcsICdpT1MnXVxufSlcbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBITVNNTFRleHRQbHVnaW4gZXh0ZW5kcyBJb25pY05hdGl2ZVBsdWdpbiB7XG4gICAgQENvcmRvdmFQcm9wZXJ0eSgpXG4gICAgTUxMb2NhbFRleHRTZXR0aW5nID0gTUxMb2NhbFRleHRTZXR0aW5nO1xuICAgIEBDb3Jkb3ZhUHJvcGVydHkoKVxuICAgIGljclZuQ2FwdHVyZVR5cGUgPSBpY3JDYXB0dXJlVHlwZTtcbiAgICBAQ29yZG92YVByb3BlcnR5KClcbiAgICBNTFRleHRDb25maWcgPSBNTFRleHRDb25maWc7XG4gICAgQENvcmRvdmFQcm9wZXJ0eSgpXG4gICAgTUxSZW1vdGVUZXh0U2V0dGluZyA9IE1MUmVtb3RlVGV4dFNldHRpbmc7XG4gICAgQENvcmRvdmFQcm9wZXJ0eSgpXG4gICAgTUxCY3JDYXB0dXJlQ29uZmlnID0gTUxCY3JDYXB0dXJlQ29uZmlnO1xuICAgIEBDb3Jkb3ZhUHJvcGVydHkoKVxuICAgIE1MR2NyQ2FwdHVyZVVJQ29uZmlnID0gTUxHY3JDYXB0dXJlVUlDb25maWc7XG4gICAgQENvcmRvdmFQcm9wZXJ0eSgpXG4gICAgTUxCY3JSZXN1bHRDb25maWcgPSBNTEJjclJlc3VsdENvbmZpZztcbiAgICBAQ29yZG92YVByb3BlcnR5KClcbiAgICBJbWdTdXBlclJlc29sdXRpb25Db25maWcgPSBJbWdTdXBlclJlc29sdXRpb25Db25maWc7XG4gICAgQENvcmRvdmFQcm9wZXJ0eSgpXG4gICAgTUxGb3JtUmVjb2dpdGlvbkNvbmZpZyA9IE1MRm9ybVJlY29naXRpb25Db25maWc7XG4gICAgQENvcmRvdmFQcm9wZXJ0eSgpXG4gICAgTUxQcm9kdWN0Q29uZmlnID0gTUxQcm9kdWN0Q29uZmlnO1xuICAgIEBDb3Jkb3ZhUHJvcGVydHkoKVxuICAgIGdjckNhcHR1cmVUeXBlID0gZ2NyQ2FwdHVyZVR5cGU7XG4gICAgQENvcmRvdmFQcm9wZXJ0eSgpXG4gICAgQ29sb3JzID0gQ29sb3JzO1xuXG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcbiAgICAvKipcbiAgICAgKiBNb25pdG9ycyBwaG90b2dyYXBoaW5nLlxuICAgICAqIEByZXR1cm5zIFByb21pc2U8YW55PlxuICAgICAqL1xuICAgIHBob3RvZ3JhcGgoKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxuICAgIC8qKlxuICAgICAqIENsb3NlIGxlbnMgZW5naW5lLlxuICAgICAqIEByZXR1cm5zIFByb21pc2U8YW55PlxuICAgICAqL1xuICAgIGRlc3Ryb3koKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxuICAgIC8qKlxuICAgICAqIE9idGFpbnMgdGhlIHNpemUgb2YgdGhlIHByZXZpZXcgaW1hZ2Ugb2YgYSBjYW1lcmEuXG4gICAgICogQHJldHVybnMgUHJvbWlzZTxhbnk+XG4gICAgICovXG4gICAgZ2V0RGlzcGxheURpbWVuc2lvbigpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXG4gICAgLyoqXG4gICAgICogQW4gYXBwIGluZm9ybWF0aW9uIGNsYXNzIHVzZWQgdG8gc3RvcmUgYmFzaWMgaW5mb3JtYXRpb24gYWJvdXQgYXBwcyB3aXRoIHRoZSBITVMgQ29yZSBNTCBTREsgaW50ZWdyYXRlZCBhbmQgY29tcGxldGUgdGhlIGluaXRpYWxpemF0aW9uIG9mIE1MIFRleHQgS2l0LiBXaGVuIHVzaW5nIGNsb3VkIHNlcnZpY2VzIG9mIHRoZSBNTCBUZXh0IEtpdCwgeW91IG5lZWQgdG8gc2V0IHRoZSBhcGlLZXkgb2YgeW91ciBhcHAuXG4gICAgICogQHBhcmFtICB7YXBwU2V0dGluZ1JlcX0gYXBwU2V0dGluZ1JlcSBSZXByZXNlbnRzIHRoZSBwYXJhbWV0ZXIgcmVxdWlyZWQuXG4gICAgICogQHJldHVybnMgUHJvbWlzZTxhbnk+XG4gICAgICovXG4gICAgYXBwU2V0dGluZyhhcHBTZXR0aW5nUmVxOiBhcHBTZXR0aW5nUmVxKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxuICAgIC8qKlxuICAgICAqIERldGVybWluZXMgd2hldGhlciB0byBjb2xsZWN0IHN0YXRpc3RpY3Mgb24gdGhlIGN1cnJlbnQgYXBwLlxuICAgICAqIEBwYXJhbSB7YW55fSBhbnlcbiAgICAgKiBAcmV0dXJucyBQcm9taXNlPGFueT5cbiAgICAgKi9cbiAgICBzZXRTdGF0aXN0aWMoYW55OiBhbnkpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXG4gICAgLyoqXG4gICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGNvbGxlY3Qgc3RhdGlzdGljcyBvbiB0aGUgY3VycmVudCBhcHAuXG4gICAgICoqIEBwYXJhbSB7YW55fSBhbnlcbiAgICAgKiAgQHJldHVybnMgUHJvbWlzZTxhbnk+XG4gICAgICovXG4gICAgZ2V0U3RhdGlzdGljKGFueTogYW55KTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxuICAgIC8qKlxuICAgICAqIFRoaXMgc2VydmljZSBlbmFibGUgbG9nZ2VyIHNlcnZpY2UuXG4gICAgICogQHJldHVybnMgUHJvbWlzZTxhbnk+XG4gICAgICovXG4gICAgZW5hYmxlTG9nZ2VyKCk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcbiAgICAvKipcbiAgICAgKiBUaGlzIHNlcnZpY2UgZGlzYWJsZSBsb2dnZXIgc2VydmljZS5cbiAgICAgKiBAcmV0dXJucyBQcm9taXNlPGFueT5cbiAgICAgKi9cbiAgICBkaXNhYmxlTG9nZ2VyKCk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG59XG5AUGx1Z2luKHtcbiAgICBwbHVnaW5OYW1lOiBcIkhNU01MVGV4dFwiLFxuICAgIHBsdWdpbjogXCJjb3Jkb3ZhLXBsdWdpbi1obXMtbWx0ZXh0XCIsIC8vIG5wbSBwYWNrYWdlIG5hbWUsIGV4YW1wbGU6IGNvcmRvdmEtcGx1Z2luLWNhbWVyYVxuICAgIHBsdWdpblJlZjogXCJITVNNTFRleHRcIiwgLy8gdGhlIHZhcmlhYmxlIHJlZmVyZW5jZSB0byBjYWxsIHRoZSBwbHVnaW4sIGV4YW1wbGU6IG5hdmlnYXRvci5nZW9sb2NhdGlvblxuICAgIHBsYXRmb3JtczogW1wiQW5kcm9pZFwiXSwgLy8gQXJyYXkgb2YgcGxhdGZvcm1zIHN1cHBvcnRlZCwgZXhhbXBsZTogWydBbmRyb2lkJywgJ2lPUyddXG59KVxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEhNU01MVGV4dCBleHRlbmRzIElvbmljTmF0aXZlUGx1Z2luIHtcbiAgICBAQ29yZG92YVByb3BlcnR5KClcbiAgICBpY3JWbkNhcHR1cmVUeXBlID0gaWNyQ2FwdHVyZVR5cGU7XG4gICAgQENvcmRvdmFQcm9wZXJ0eSgpXG4gICAgZ2NyQ2FwdHVyZVR5cGUgPSBnY3JDYXB0dXJlVHlwZTtcbiAgICBAQ29yZG92YVByb3BlcnR5KClcbiAgICBNTExvY2FsVGV4dFNldHRpbmcgPSBNTExvY2FsVGV4dFNldHRpbmc7XG4gICAgQENvcmRvdmFQcm9wZXJ0eSgpXG4gICAgTUxUZXh0Q29uZmlnID0gTUxUZXh0Q29uZmlnO1xuICAgIEBDb3Jkb3ZhUHJvcGVydHkoKVxuICAgIE1MUmVtb3RlVGV4dFNldHRpbmcgPSBNTFJlbW90ZVRleHRTZXR0aW5nO1xuICAgIEBDb3Jkb3ZhUHJvcGVydHkoKVxuICAgIE1MQmNyQ2FwdHVyZUNvbmZpZyA9IE1MQmNyQ2FwdHVyZUNvbmZpZztcbiAgICBAQ29yZG92YVByb3BlcnR5KClcbiAgICBNTEdjckNhcHR1cmVVSUNvbmZpZyA9IE1MR2NyQ2FwdHVyZVVJQ29uZmlnO1xuICAgIEBDb3Jkb3ZhUHJvcGVydHkoKVxuICAgIE1MQmNyUmVzdWx0Q29uZmlnID0gTUxCY3JSZXN1bHRDb25maWc7XG4gICAgQENvcmRvdmFQcm9wZXJ0eSgpXG4gICAgSW1nU3VwZXJSZXNvbHV0aW9uQ29uZmlnID0gSW1nU3VwZXJSZXNvbHV0aW9uQ29uZmlnO1xuICAgIEBDb3Jkb3ZhUHJvcGVydHkoKVxuICAgIE1MRm9ybVJlY29naXRpb25Db25maWcgPSBNTEZvcm1SZWNvZ2l0aW9uQ29uZmlnO1xuICAgIEBDb3Jkb3ZhUHJvcGVydHkoKVxuICAgIE1MUHJvZHVjdENvbmZpZyA9IE1MUHJvZHVjdENvbmZpZztcbiAgICBAQ29yZG92YVByb3BlcnR5KClcbiAgICBDb2xvcnMgPSBDb2xvcnM7XG4gICAgQENvcmRvdmFQcm9wZXJ0eSgpXG4gICAgUmVjTW9kZSA9IFJlY01vZGU7XG5cbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIHN0YXJ0IHRoZSBUZXh0IGFuYWx5emVyLlxuICAgICAqIEBwYXJhbSAge2xvY2FsSW1hZ2VUZXh0UmVxfHJlbW90ZUltYWdlVGV4dFJlcX0gSW1hZ2VUZXh0QW5hbHlzZXJJbnB1dCBSZXBlcmVzZW50cyB0aGUgbmVjZXNzYXJ5IHBhcmFtZXRlcnMgdG8gY29udmVydCBpbWFnZXMgdG8gdGV4dCBmb3JtYXQuXG4gICAgICogQHJldHVybnMgUHJvbWlzZSA8VGV4dEFuYWx5c2VyPlxuICAgICAqL1xuICAgIGltYWdlVGV4dEFuYWx5c2VyKFxuICAgICAgICBJbWFnZVRleHRBbmFseXNlcklucHV0OiBsb2NhbEltYWdlVGV4dFJlcSB8IHJlbW90ZUltYWdlVGV4dFJlcVxuICAgICk6IFByb21pc2U8TUxUZXh0PiB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBzdG9wIHRoZSBUZXh0IGFuYWx5emVyLlxuICAgICAqIEByZXR1cm5zIFByb21pc2U8YW55PlxuICAgICAqL1xuICAgIHN0b3BUZXh0QW5hbHlzZXIoKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGdpdmVzIFRleHQgQW5hbHlzZXIgaW5mb3JtYXRpb24uXG4gICAgICogQHJldHVybnMgUHJvbWlzZTxhbnk+XG4gICAgICovXG4gICAgZ2V0VGV4dEFuYWx5c2VySW5mbygpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgcHJvdmlkZXMgYSBkb2N1bWVudCByZWNvZ25pdGlvbiBjb21wb25lbnQgdGhhdCByZWNvZ25pemVzIHRleHQgZnJvbSBpbWFnZXMgb2YgZG9jdW1lbnRzLlxuICAgICAqIEBwYXJhbSAge2RvY3VtZW50SW1hZ2VBbmFseXNlclJlcX0gZG9jdW1lbnRJbWFnZUFuYWx5c2VyUmVxIFJlcGVyZXNlbnRzIHRoZSBuZWNlc3NhcnkgcGFyYW1ldGVyIHRvIGNvbnZlcnQgZG9jdW1lbnQgaW1hZ2VzIHRvIHRleHQgZm9ybWF0LlxuICAgICAqIEByZXR1cm5zIFByb21pc2U8RG9jdW1lbnRBbmFseXNlcj5cbiAgICAgKi9cbiAgICBkb2N1bWVudEltYWdlQW5hbHlzZXIoXG4gICAgICAgIGRvY3VtZW50SW1hZ2VBbmFseXNlclJlcTogZG9jdW1lbnRJbWFnZUFuYWx5c2VyUmVxXG4gICAgKTogUHJvbWlzZTxNTERvY3VtZW50PiB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBzdG9wIHRoZSBEb2N1bWVudCBhbmFseXplci5cbiAgICAgKiBAcmV0dXJucyBQcm9taXNlPGFueT5cbiAgICAgKi9cbiAgICBzdG9wRG9jdW1lbnRJbWFnZUFuYWx5c2VyKCk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBjbG9zZSB0aGUgRG9jdW1lbnQgYW5hbHl6ZXIuXG4gICAgICogQHJldHVybnMgUHJvbWlzZTxhbnk+XG4gICAgICovXG4gICAgY2xvc2VEb2N1bWVudEltYWdlQW5hbHlzZXIoKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIERvY3VtZW50IGFuYWx5emVyIHNldHRpbmcuXG4gICAgICogQHJldHVybnMgUHJvbWlzZTxhbnk+XG4gICAgICovXG4gICAgZ2V0RG9jdW1lbnRJbWFnZUFuYWx5c2VyU2V0dGluZygpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgSW1hZ2UgYW5hbHl6ZXIgc2V0dGluZy5cbiAgICAgKiBAcmV0dXJucyBQcm9taXNlPGFueT5cbiAgICAgKi9cbiAgICBnZXRUZXh0QW5hbHlzZXJTZXR0aW5nKCk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBHQ1Igc2V0dGluZy5cbiAgICAgKiBAcmV0dXJucyBQcm9taXNlPGFueT5cbiAgICAgKi9cbiAgICBnZXRHQ1JTZXR0aW5nKCk6IFByb21pc2U8Z2NyU2V0dGluZ1Jlc3VsdHM+IHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIHN0b3AgdGhlIEZvcm0gUmVjb2duaXRpb24gQW5hbHl6ZXIuXG4gICAgICogQHJldHVybnMgUHJvbWlzZTxhbnk+XG4gICAgICovXG4gICAgc3RvcEZvcm1SZWNvZ25pdGlvbkFuYWx5c2VyKCk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIGJhbmsgY2FyZCByZWNvZ25pdGlvbiBzZXJ2aWNlIHJlY29nbml6ZXMgYmFuayBjYXJkcyBpbiBjYW1lcmEgc3RyZWFtcyB3aXRoaW4gYW5nbGUgb2Zmc2V0IG9mIDE1IGRlZ3JlZXMgYW5kIGV4dHJhY3RzIGtleSBpbmZvcm1hdGlvbiBzdWNoIGFzIGNhcmQgbnVtYmVyIGFuZCB2YWxpZGl0eSBwZXJpb2QuXG4gICAgICogQHBhcmFtICB7YmFua0NhcmRTREtEZXRlY3RvclJlcXxiYW5rQ2FyZFBsdWdpbkRldGVjdG9yUmVxfSBiYW5rQ2FyZERldGVjdGVySW5wdXQgUmVwcmVzZW50cyB0aGUgcGFyYW1ldGVyIHJlcXVpcmVkIGZvciBiYW5rIGNhcmQgcmVjb2duaXRpb24uXG4gICAgICogQHJldHVybnMgUHJvbWlzZTxCYW5rQ2FyZEFuYWx5c2VyPiB8IFByb21pc2U8QmFua0NhcmRBbmFseXNlcj5cbiAgICAgKi9cbiAgICBiYW5rQ2FyZERldGVjdG9yKFxuICAgICAgICBiYW5rQ2FyZERldGVjdGVySW5wdXQ6XG4gICAgICAgICAgICB8IGJhbmtDYXJkU0RLRGV0ZWN0b3JSZXFcbiAgICAgICAgICAgIHwgYmFua0NhcmRQbHVnaW5EZXRlY3RvclJlcVxuICAgICk6IFByb21pc2U8TUxCYW5rQ2FyZD4ge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2Qgc3RvcCBiYW5rY2FyZCByZWNvZ25pdGlvbiBzZXJ2aWNlLlxuICAgICAqIEByZXR1cm5zIFByb21pc2U8YW55PlxuICAgICAqL1xuICAgIHN0b3BCYW5rQ2FyZERldGVjdG9yKCk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcbiAgICBzZXRSZXN1bHRUeXBlQmNyKG1MQmNyQ2FwdHVyZUNvbmZpZzogbUxCY3JDYXB0dXJlQ29uZmlnKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxuICAgIHNldFJlY01vZGVCY3IobUxCY3JDYXB0dXJlQ29uZmlnOiBtTEJjckNhcHR1cmVDb25maWcpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgQkNSIHNldHRpbmcuXG4gICAgICogQHJldHVybnMgUHJvbWlzZTxhbnk+XG4gICAgICovXG4gICAgZ2V0QmFua0NhcmREZXRlY3RvclNldHRpbmcoKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxuICAgIC8qKlxuICAgICAqIFRoZSBnZW5lcmFsIGNhcmQgcmVjb2duaXRpb24gc2VydmljZSBwcm92aWRlcyBhIHVuaXZlcnNhbCBkZXZlbG9wbWVudCBmcmFtZXdvcmsgYmFzZWQgb24gdGhlIHRleHQgcmVjb2duaXRpb24gdGVjaG5vbG9neS5cbiAgICAgKiBAcGFyYW0gIHtnZW5lcmFsQ2FyZERldGVjdG9yUmVxfSBnZW5lcmFsQ2FyZERldGVjdG9yUmVxIFJlcHJlc2VudHMgdGhlIHBhcmFtZXRlciByZXF1aXJlZCBmb3IgZ2VuZXJhbCBjYXJkIHJlY29nbml0aW9uIHBsdWctaW4uXG4gICAgICogQHJldHVybnMgUHJvbWlzZTxHZW5lcmFsQ2FyZEFuYWx5c2VyPlxuICAgICAqL1xuICAgIGdlbmVyYWxDYXJkRGV0ZWN0b3IoXG4gICAgICAgIGdlbmVyYWxDYXJkRGV0ZWN0b3JSZXE6IGdlbmVyYWxDYXJkRGV0ZWN0b3JSZXFcbiAgICApOiBQcm9taXNlPE1MR2NyQ2FwdHVyZVJlc3VsdD4ge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXG4gICAgLyoqXG4gICAgICogVGhlIGdlbmVyYWwgVmlldG5hbSBpZCBjYXJkICByZWNvZ25pdGlvbiBzZXJ2aWNlIHByb3ZpZGVzIGEgdW5pdmVyc2FsIGRldmVsb3BtZW50IGZyYW1ld29yayBiYXNlZCBvbiB0aGUgdGV4dCByZWNvZ25pdGlvbiB0ZWNobm9sb2d5LlxuICAgICAqIEBwYXJhbSAge2ljclZuRGV0ZWN0b3JSZXF9IGljclZuRGV0ZWN0b3JSZXEgUmVwcmVzZW50cyB0aGUgcGFyYW1ldGVyIHJlcXVpcmVkIGZvciBnZW5lcmFsIGNhcmQgcmVjb2duaXRpb24gcGx1Zy1pbi5cbiAgICAgKiBAcmV0dXJucyBQcm9taXNlPE1MVm5JY3JDYXB0dXJlUmVzdWx0PlxuICAgICAqL1xuICAgIGljclZuQ2FyZERldGVjdG9yKFxuICAgICAgICBpY3JWbkRldGVjdG9yUmVxOiBpY3JWbkRldGVjdG9yUmVxXG4gICAgKTogUHJvbWlzZTxNTFZuSWNyQ2FwdHVyZVJlc3VsdD4ge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXG4gICAgLyoqXG4gICAgICogVGhlIGZvcm0gcmVjb2duaXRpb24gc2VydmljZSB1c2VzIEFJIHRlY2hub2xvZ2llcyB0byByZWNvZ25pemUgYW5kIHJldHVybiBmb3JtIHN0cnVjdHVyZSBpbmZvcm1hdGlvbiAoaW5jbHVkaW5nIHJvd3MsIGNvbHVtbnMsIGFuZCBjb29yZGluYXRlcyBvZiBjZWxscykgYW5kIGZvcm0gdGV4dCBpbiBDaGluZXNlIGFuZCBFbmdsaXNoIChpbmNsdWRpbmcgcHVuY3R1YXRpb24pIGZyb20gaW5wdXQgaW1hZ2VzLlxuICAgICAqIEBwYXJhbSAge2Zvcm1SZWNvZ25pemVyQW5hbHlzZXJSZXF9IGZvcm1SZWNvZ25pemVyQW5hbHlzZXJSZXEgUmVwcmVzZW50cyB0aGUgcGFyYW1ldGVyIHJlcXVpcmVkIGZvciBnZW5lcmFsIGNhcmQgcmVjb2duaXRpb24gcGx1Zy1pbi5cbiAgICAgKiBAcmV0dXJucyBQcm9taXNlPEdlbmVyYWxDYXJkQW5hbHlzZXI+XG4gICAgICovXG4gICAgZm9ybVJlY29nbml0aW9uQW5hbHlzZXIoXG4gICAgICAgIGZvcm1SZWNvZ25pemVyQW5hbHlzZXJSZXE6IGZvcm1SZWNvZ25pemVyQW5hbHlzZXJSZXFcbiAgICApOiBQcm9taXNlPE1MR2NyQ2FwdHVyZVJlc3VsdD4ge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXG4gICAgaWNyTG9jYWxBbmFseXNlcihcbiAgICAgICAgbG9jYWxBbmFseXNlclJlcTogbG9jYWxBbmFseXNlclJlcVxuICAgICk6IFByb21pc2U8TUxJY3JDYXB0dXJlUmVzdWx0PiB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxuICAgIGljckxvY2FsQW5hbHlzZXJDcmVhdGVJZENhcmQoXG4gICAgICAgIGNyZWF0ZUlkQ2FyZFJlcTogY3JlYXRlSWRDYXJkUmVxXG4gICAgKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXG4gICAgaWNyTG9jYWxBbmFseXNlclN0b3AoKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXG4gICAgZ2V0aWNyQ25DYXJkSW5zdGFuY2UoKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXG4gICAgaWNyQ25DYXJkQ3JlYXRlKCk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcbiAgICBnZXRpY3JWbkNhcmRJbnN0YW5jZSgpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXG4gICAgaWNyVm5DYXJkQ3JlYXRlKCk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcbiAgICBnZXRJY3JWbkNhcHR1cmUoKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXG4gICAgc3RhcnRDdXN0b21pemVkVmlldyh1c2VyUHJvcHM6IEN1c3RvbVZpZXdNb2RlUmVxdWVzdCk6IFByb21pc2U8TUxCYW5rQ2FyZD4ge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXG4gICAgc3dpdGNoTGlnaHQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcbiAgICBnZXRMaWdodFN0YXR1cygpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXG4gICAgc2V0VXNlclJlZ2lvbihyZWdpb246IFJlZ2lvbik6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcbiAgICBnZXRDb3VudHJ5Q29kZSgpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICByZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEN1c3RvbVZpZXdNb2RlUmVxdWVzdCB7XG4gICAgaXNUaXRsZUF2YWlsYWJsZTogYm9vbGVhbjtcbiAgICB0aXRsZTogc3RyaW5nO1xuICAgIGhlaWdodEZhY3RvcjogbnVtYmVyO1xuICAgIHdpZHRoRmFjdG9yOiBudW1iZXI7XG4gICAgaXNGbGFzaEF2YWlsYWJsZTogYm9vbGVhbjtcbiAgICByZXN1bHRUeXBlOiBNTEJjclJlc3VsdENvbmZpZztcbiAgICByZWNNb2RlOiBSZWNNb2RlO1xuIH1cblxuLy8gQVBJIEtFWVxuXG5leHBvcnQgaW50ZXJmYWNlIGNvbmZpZ1JlcSB7XG4gICAgYXBpS2V5OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgYXBwU2V0dGluZ1JlcSB7XG4gICAgYXBpS2V5Pzogc3RyaW5nIHwgbnVsbDtcbiAgICBhcHBsaWNhdGlvbklkPzogc3RyaW5nIHwgbnVsbDtcbiAgICBjZXJ0RmluZ2VycHJpbnQ/OiBzdHJpbmcgfCBudWxsO1xufSBcblxuXG4vLyBTREsgQkFOSyBDQVJEIEFOQUxZU0VSXG5cbmV4cG9ydCBpbnRlcmZhY2UgYmFua0NhcmRTREtEZXRlY3RvclJlcSB7XG4gICAgZmlsZVBhdGg6IGFueTtcbiAgICBkZXRlY3RUeXBlOiAwO1xuICAgIG1MQmNyQW5hbHl6ZXJTZXR0aW5nPzogTUxCY3JBbmFseXplclNldHRpbmcgfCBudWxsO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1MQmNyQW5hbHl6ZXJTZXR0aW5nIHtcbiAgICBsYW5nVHlwZT86IHN0cmluZyB8IG51bGw7XG4gICAgcmVzdWx0VHlwZT86IE1MQmNyUmVzdWx0Q29uZmlnIHwgbnVsbDtcbn1cblxuLy8gUExVR0lOIEJBTksgQ0FSRCBBTkFMWVNFUlxuXG5leHBvcnQgaW50ZXJmYWNlIGJhbmtDYXJkUGx1Z2luRGV0ZWN0b3JSZXEge1xuICAgIGRldGVjdFR5cGU6IDE7XG4gICAgbUxCY3JDYXB0dXJlQ29uZmlnPzogbUxCY3JDYXB0dXJlQ29uZmlnIHwgbnVsbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBtTEJjckNhcHR1cmVDb25maWcge1xuICAgIG9yaWVudGF0aW9uPzogTUxCY3JDYXB0dXJlQ29uZmlnIHwgbnVsbDtcbiAgICByZXN1bHRUeXBlPzogTUxCY3JSZXN1bHRDb25maWcgfCBudWxsO1xuICAgIHJlY01vZGU/OiBSZWNNb2RlIHwgbnVsbDtcbn1cblxuZXhwb3J0IGVudW0gUmVjTW9kZSB7XG4gICAgV0VBS19NT0RFID0gMCxcbiAgICBTVFJJQ1RfTU9ERSA9IDEsXG59XG5cbmV4cG9ydCBlbnVtIE1MQmNyQ2FwdHVyZUNvbmZpZyB7XG4gICAgRVJST1JfQ09ERV9JTklUX0NBTUVSQV9GQUlMRUQgPSAxMDEwMSxcbiAgICBSRVNVTFRfTlVNX09OTFkgPSAwLFxuICAgIE9SSUVOVEFUSU9OX0FVVE8gPSAwLFxuICAgIFdFQUtfTU9ERSA9IDAsXG4gICAgT1JJRU5UQVRJT05fTEFORFNDQVBFID0gMSxcbiAgICBPUklFTlRBVElPTl9QT1JUUkFJVCA9IDIsXG4gICAgUkVTVUxUX0FMTCA9IDIsXG4gICAgUkVTVUxUX1NJTVBMRSA9IDEsXG4gICAgU1RSSUNUX01PREUgPSAxLFxufVxuZXhwb3J0IGVudW0gTUxCY3JSZXN1bHRDb25maWcge1xuICAgIFJFU1VMVF9OVU1fT05MWSA9IDAsXG4gICAgUkVTVUxUX1NJTVBMRSA9IDEsXG4gICAgUkVTVUxUX0FMTCA9IDIsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTUxCY3JDYXB0dXJlUmVzdWx0IHtcbiAgICBlcnJvckNvZGU/OiBNTEJjckNhcHR1cmVFcnJvckNvZGUgfCBudWxsO1xuICAgIGV4cGlyZT86IFN0cmluZyB8IG51bGw7XG4gICAgaXNzdWVyPzogU3RyaW5nIHwgbnVsbDtcbiAgICBudW1iZXI/OiBTdHJpbmcgfCBudWxsO1xuICAgIG51bWJlckJpdG1hcD86IGFueTtcbiAgICBvcmdhbml6YXRpb24/OiBTdHJpbmcgfCBudWxsO1xuICAgIHJpZ2luYWxCaXRtYXA/OiBhbnk7XG4gICAgdHlwZT86IFN0cmluZyB8IG51bGw7XG59XG5cbmV4cG9ydCBlbnVtIE1MQmNyQ2FwdHVyZUVycm9yQ29kZSB7XG4gICAgRVJST1JfQ09ERV9JTklUX0NBTUVSQV9GQUlMRUQgPSAxMDEwMSxcbn1cblxuXG4vL0RvY3VtZW50IEFuYWx5c2VyXG5cbmV4cG9ydCBpbnRlcmZhY2UgZG9jdW1lbnRJbWFnZUFuYWx5c2VyUmVxIHtcbiAgICBkb2N1bWVudFNldHRpbmc/OiBEb2N1bWVudFNldHRpbmcgfCBudWxsO1xuICAgIGZpbGVQYXRoOiBhbnk7XG59XG5leHBvcnQgaW50ZXJmYWNlIERvY3VtZW50U2V0dGluZyB7XG4gICAgYm9yZGVyVHlwZT86IE1MUmVtb3RlVGV4dFNldHRpbmcgfCBudWxsO1xuICAgIGxhbmd1YWdlTGlzdD86IEFycmF5PHN0cmluZz4gfCBudWxsO1xuICAgIGVuYWJsZUZpbmdlcnByaW50VmVyaWZpY2F0aW9uOiBib29sZWFuIHwgbnVsbDtcbn1cblxuZXhwb3J0IGVudW0gTUxSZW1vdGVUZXh0U2V0dGluZyB7XG4gICAgT0NSX0xPT1NFX1NDRU5FID0gMSxcbiAgICBPQ1JfQ09NUEFDVF9TQ0VORSA9IDIsXG4gICAgTkdPTiA9IFwiTkdPTlwiLFxuICAgIEFSQyA9IFwiQVJDXCIsXG4gICAgT1RIRVIgPSA1LFxuICAgIE5FV19MSU5FX0NIQVJBQ1RFUiA9IDgsXG4gICAgU1BBQ0UgPSA2LFxufVxuXG5cblxuLy9Gb3JtIFJlY29nbml6ZXIgQW5hbHlzZXJcblxuZXhwb3J0IGludGVyZmFjZSBmb3JtUmVjb2duaXplckFuYWx5c2VyUmVxIHtcbiAgICBmaWxlUGF0aDogYW55O1xuICAgIHN5bmNUeXBlOiBNTEZvcm1SZWNvZ2l0aW9uQ29uZmlnO1xufVxuZXhwb3J0IGVudW0gTUxGb3JtUmVjb2dpdGlvbkNvbmZpZyB7XG4gICAgU1lOQ19UWVBFID0gMSxcbiAgICBBU1lOQ19UWVBFID0gMCxcbn1cblxuLy8gR0VORVJBTCBDQVJEIEFOQUxZU0VSXG5cbmV4cG9ydCBpbnRlcmZhY2UgZ2VuZXJhbENhcmREZXRlY3RvclJlcSB7XG4gICAgZ2NyQ2FwdHVyZUNvbmZpZz86IGdjckNhcHR1cmVDb25maWc7XG4gICAgZ2NyQ2FwdHVyZVVJQ29uZmlnPzogZ2NyQ2FwdHVyZVVJQ29uZmlnO1xuICAgIGNhcHR1cmVUeXBlPzogZ2NyQ2FwdHVyZVR5cGUgfCBudWxsO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIGdjckNhcHR1cmVDb25maWcge1xuICAgIGxhbmd1YWdlOiBzdHJpbmc7XG59XG5leHBvcnQgZW51bSBnY3JDYXB0dXJlVHlwZSB7XG4gICAgQ0FQVFVSRV9BQ1RJVklUWSA9IDAsXG4gICAgQ0FQVFVSRV9QSE9UTyA9IDEsXG4gICAgQ0FQVFVSRV9JTUFHRSA9IDIsXG59XG5leHBvcnQgaW50ZXJmYWNlIGdjckNhcHR1cmVVSUNvbmZpZyB7XG4gICAgb3JpZW50YXRpb24/OiBNTEdjckNhcHR1cmVVSUNvbmZpZyB8IG51bGw7XG4gICAgdGlwVGV4dD86IHN0cmluZyB8IG51bGw7XG4gICAgdGlwVGV4dENvbG9yPzogbnVtYmVyIHwgbnVsbDtcbiAgICBwaG90b0J1dHRvblJlc0lkPzogbnVtYmVyIHwgbnVsbDtcbiAgICBzY2FuQm94Q29ybmVyQ29sb3I/OiBudW1iZXIgfCBudWxsO1xuICAgIGJhY2tCdXR0b25SZWRJZD86IG51bWJlciB8IG51bGw7XG4gICAgdG9yY2hSZWRJZD86IG51bWJlciB8IG51bGw7XG59XG5leHBvcnQgaW50ZXJmYWNlIGdjclNldHRpbmdSZXN1bHRzIHtcbiAgICBnY3JDb25maWdMYW5ndWFnZTogU3RyaW5nO1xuICAgIHRvcmNoT25SZXNJZDogbnVtYmVyO1xuICAgIHRpcFRleHRDb2xvcjogbnVtYmVyO1xuICAgIHRpcFRleHQ6IFN0cmluZztcbiAgICBiYWNrQnV0dG9uUmVzSWQ6IG51bWJlcjtcbiAgICBvcmllbnRhdGlvbjogbnVtYmVyO1xuICAgIHBob3RvQnV0dG9uUmVzSWQ6IG51bWJlcjtcbiAgICBzY2FuQm94U2NyZWVuUmF0aW86IG51bWJlcjtcbiAgICBzY2FuQm94Q29ybmVyQ29sb3I6IG51bWJlcjtcbiAgICBzY2FuQm94QXNwZWN0UmF0aW86IG51bWJlcjtcbn1cblxuZXhwb3J0IGVudW0gTUxHY3JDYXB0dXJlVUlDb25maWcge1xuICAgIE9SSUVOVEFUSU9OX0FVVE8gPSAwLFxuICAgIE9SSUVOVEFUSU9OX0xBTkRTQ0FQRSA9IDEsXG4gICAgT1JJRU5UQVRJT05fUE9SVFJBSVQgPSAyLFxufVxuXG4vLyBJRCBDQVJEIEFOQUxZU0VSXG5cbmV4cG9ydCBpbnRlcmZhY2UgaWNyVm5EZXRlY3RvclJlcSB7XG4gICAgY2FwdHVyZVR5cGU6IGljckNhcHR1cmVUeXBlO1xuICAgIGZpbGVQYXRoPzogYW55IHwgbnVsbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBpY3JDbkRldGVjdG9yUmVxIHtcbiAgICBjYXB0dXJlVHlwZTogaWNyQ2FwdHVyZVR5cGU7XG4gICAgZmlsZVBhdGg/OiBhbnkgfCBudWxsO1xuICAgIGlzRnJvbnQ/OiBib29sZWFuIHwgbnVsbDtcbn1cblxuZXhwb3J0IGVudW0gaWNyQ2FwdHVyZVR5cGUge1xuICAgIENBUFRVUkVfQ0FNRVJBID0gMCxcbiAgICBDQVBUVVJFX0lNQUdFID0gMSxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBjcmVhdGVJZENhcmRSZXEge1xuICAgIG1sSWNyQW5hbHl6ZXJTZXR0aW5nPzogTUxJY3JBbmFseXplclNldHRpbmcgfCBudWxsO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIGxvY2FsQW5hbHlzZXJSZXEge1xuICAgIHNldHRpbmdzOiBNTEljckFuYWx5emVyU2V0dGluZztcbiAgICBmaWxlUGF0aD86IGFueSB8IG51bGw7XG59XG5leHBvcnQgaW50ZXJmYWNlIE1MSWNyQW5hbHl6ZXJTZXR0aW5nIHtcbiAgICBjb3VudHJ5Q29kZTogc3RyaW5nO1xuICAgIGhhc2hDb2RlPzogbnVtYmVyIHwgbnVsbDtcbiAgICBzaWRlVHlwZT86IE1MSWNyU2lkZVR5cGUgfCBudWxsO1xufVxuXG5leHBvcnQgZW51bSBNTEljclNpZGVUeXBlIHtcbiAgICBGUk9OVCA9IFwiRlJPTlRcIixcbiAgICBCQUNLID0gXCJCQUNLXCIsXG59XG5cblxuLy9JbWFnZSBTdXBlciBSZXNvbHV0aW9uXG5cbmV4cG9ydCBpbnRlcmZhY2UgaW1hZ2VTdXBlclJlc29sdXRpb25SZXEge1xuICAgIGZpbGVQYXRoOiBhbnk7XG4gICAgaW1nU3VwZXJSZXNvbHV0aW9uU2V0dGluZz86IEltZ1N1cGVyUmVzb2x1dGlvblNldHRpbmcgfCBudWxsO1xuICAgIHN5bmNUeXBlPzogTUxGb3JtUmVjb2dpdGlvbkNvbmZpZyB8IG51bGw7XG59XG5leHBvcnQgaW50ZXJmYWNlIEltZ1N1cGVyUmVzb2x1dGlvblNldHRpbmcge1xuICAgIHNjYWxlVHlwZT86IEltZ1N1cGVyUmVzb2x1dGlvbkNvbmZpZztcbn1cbmV4cG9ydCBlbnVtIEltZ1N1cGVyUmVzb2x1dGlvbkNvbmZpZyB7XG4gICAgSVNSX1NDQUxFXzFYID0gMS4wLFxuICAgIElTUl9TQ0FMRV8zWCA9IDMuMCxcbn1cblxuLy9Qcm9kdWN0IFZpc2lvbiBBbmFseXNlclxuXG5leHBvcnQgaW50ZXJmYWNlIHByb2R1Y3RSZXEge1xuICAgIGZpbGVQYXRoPzogYW55IHwgbnVsbDtcbiAgICBkZXRlY3RUeXBlPzogbnVtYmVyO1xuICAgIG1sUHJvZHVjdFNldHRpbmc/OiBtbFByb2R1Y3RTZXR0aW5nIHwgbnVsbDtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgbWxQcm9kdWN0U2V0dGluZyB7XG4gICAgbGFyZ2VzdE51bU9mUmV0dXJucz86IG51bWJlciB8IG51bGw7XG4gICAgcHJvZHVjdFNldElkPzogc3RyaW5nIHwgbnVsbDtcbiAgICByZWdpb24/OiBNTFByb2R1Y3RDb25maWcgfCBudWxsO1xufVxuZXhwb3J0IGVudW0gTUxQcm9kdWN0Q29uZmlnIHtcbiAgICBSRUdJT05fRFJfQ0hJTkEgPSAxMDAyLFxuICAgIFJFR0lPTl9EUl9BRklMQSA9IDEwMDMsXG4gICAgUkVHSU9OX0RSX0VVUk9QRSA9IDEwMDQsXG4gICAgUkVHSU9OX0RSX1JVU1NJQSA9IDEwMDUsXG4gICAgUkVHSU9OX0RSX0dFUk1BTiA9IDEwMDYsXG4gICAgUkVHSU9OX0RSX1NJQU5HQVBPUkUgPSAxMDA3LFxufVxuXG5cblxuLy9UZXh0IEFuYWx5c2VyXG5cbmV4cG9ydCBpbnRlcmZhY2UgbG9jYWxJbWFnZVRleHRSZXEge1xuICAgIG9jclR5cGU6IE1MVGV4dENvbmZpZztcbiAgICBhbmFseXNlTW9kZT86IG51bWJlcjtcbiAgICBsb2NhbFRleHRTZXR0aW5nPzogbG9jYWxUZXh0U2V0dGluZyB8IG51bGw7XG4gICAgZmlsZVBhdGg6IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBsb2NhbFRleHRTZXR0aW5nIHtcbiAgICBvY3JNb2RlPzogTUxMb2NhbFRleHRTZXR0aW5nO1xuICAgIGxhbmd1YWdlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgZW51bSBNTExvY2FsVGV4dFNldHRpbmcge1xuICAgIE9DUl9ERVRFQ1RfTU9ERSA9IDEsXG4gICAgT0NSX1RSQUNLSU5HX01PREUgPSAyLFxufVxuZXhwb3J0IGVudW0gTUxUZXh0Q29uZmlnIHtcbiAgICBPQ1JfTE9DQUxfVFlQRSA9IDAsXG4gICAgT0NSX1JFTU9URV9UWVBFID0gMSxcbn1cbmV4cG9ydCBpbnRlcmZhY2UgcmVtb3RlSW1hZ2VUZXh0UmVxIHtcbiAgICBvY3JUeXBlOiBNTFRleHRDb25maWc7XG4gICAgYW5hbHlzZU1vZGU/OiBudW1iZXI7XG4gICAgcmVtb3RlVGV4dFNldHRpbmc/OiByZW1vdGVUZXh0U2V0dGluZztcbiAgICBmaWxlUGF0aDogYW55O1xufVxuZXhwb3J0IGludGVyZmFjZSByZW1vdGVUZXh0U2V0dGluZyB7XG4gICAgdGV4dERlbnNpdHlTY2VuZT86IE1MUmVtb3RlVGV4dFNldHRpbmc7XG4gICAgbGFuZ3VhZ2VMaXN0PzogQXJyYXk8c3RyaW5nPjtcbiAgICBib3JkZXJUeXBlPzogTUxSZW1vdGVUZXh0U2V0dGluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNTEJhbmtDYXJkIHtcbiAgICBudW1iZXI6IHN0cmluZztcbiAgICBleHBpcmU6IHN0cmluZztcbiAgICBpc3N1ZXI6IHN0cmluZztcbiAgICB0eXBlOiBzdHJpbmc7XG4gICAgb3JnYW5pemF0aW9uOiBzdHJpbmc7XG4gICAgb3JpZ2luYWxCaXRtYXA6IGFueTtcbiAgICBudW1iZXJCaXRtYXA6IGFueTtcbn1cblxuXG5leHBvcnQgaW50ZXJmYWNlIEJvcmRlciB7XG4gICAgYm90dG9tOiBudW1iZXI7XG4gICAgdG9wOiBudW1iZXI7XG4gICAgbGVmdDogbnVtYmVyO1xuICAgIHJpZ2h0OiBudW1iZXI7XG4gICAgZXhhY3RDZW50ZXJYOiBudW1iZXI7XG4gICAgY2VudGVyWTogbnVtYmVyO1xuICAgIGNlbnRlclg6IG51bWJlcjtcbiAgICBkZXNjcmliZUNvbnRlbnRzOiBudW1iZXI7XG4gICAgaGVpZ2h0OiBudW1iZXI7XG4gICAgd2lkdGg6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNTERvY3VtZW50IHtcbiAgICBzdHJpbmdWYWx1ZTogc3RyaW5nO1xuICAgIGJsb2Nrcz86IEJsb2Nrc1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExhbmd1YWdlTGlzdCB7XG4gICAgbGFuZ3VhZ2U6IHN0cmluZztcbn1cblxuXG5leHBvcnQgaW50ZXJmYWNlIE1MVm5JY3JDYXB0dXJlUmVzdWx0IHtcbiAgICBiaXJ0aGRheTogc3RyaW5nO1xuICAgIGNhcmRCaXRtYXA6IEJpdG1hcDtcbiAgICBpZE51bTogc3RyaW5nO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBzZXg6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNTENuSWNyQ2FwdHVyZVJlc3VsdCB7XG4gICAgYmlydGhkYXk6IHN0cmluZztcbiAgICBjYXJkQml0bWFwOiBCaXRtYXA7XG4gICAgaWROdW06IHN0cmluZztcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgc2V4OiBzdHJpbmc7XG4gICAgbmF0aW9uOiBzdHJpbmc7XG4gICAgYWRkcmVzczogc3RyaW5nO1xuICAgIGF1dGhvcml0eTogc3RyaW5nO1xuICAgIHZhbGlkRGF0ZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1MSWNyQ2FwdHVyZVJlc3VsdCB7XG4gICAgYmlydGhkYXk6IHN0cmluZztcbiAgICBjYXJkQml0bWFwOiBCaXRtYXA7XG4gICAgaWROdW06IHN0cmluZztcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgc2V4OiBzdHJpbmc7XG4gICAgbmF0aW9uOiBzdHJpbmc7XG4gICAgYWRkcmVzczogc3RyaW5nO1xuICAgIHZhbGlkRGF0ZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1MR2NyQ2FwdHVyZVJlc3VsdCB7XG4gICAgdGV4dDogc3RyaW5nO1xuICAgIGNhcmRCaXRtYXA6IEJpdG1hcDtcbn1cblxuXG5leHBvcnQgaW50ZXJmYWNlIFJlY3Qge1xuICAgIGJvdHRvbTogbnVtYmVyO1xuICAgIHRvcDogbnVtYmVyO1xuICAgIGxlZnQ6IG51bWJlcjtcbiAgICByaWdodDogbnVtYmVyO1xuICAgIGV4YWN0Q2VudGVyWDogbnVtYmVyO1xuICAgIGNlbnRlclk6IG51bWJlcjtcbiAgICBjZW50ZXJYOiBudW1iZXI7XG4gICAgZGVzY3JpYmVDb250ZW50czogbnVtYmVyO1xuICAgIGhlaWdodDogbnVtYmVyO1xuICAgIHdpZHRoOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQml0bWFwIHtcbiAgICBtR2FsbGVyeUNhY2hlZDogYm9vbGVhbjtcbiAgICBtSGVpZ2h0OiBudW1iZXI7XG4gICAgbU5hdGl2ZVB0cjogbnVtYmVyO1xuICAgIG1XaWR0aDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1MVGV4dCB7XG4gICAgc3RyaW5nVmFsdWU6IHN0cmluZztcbiAgICBibG9ja3M/OiBCbG9ja3NbXTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgQmxvY2tzIHtcbiAgICBjb250ZW50cz86IENvbnRlbnRzW107XG59XG5leHBvcnQgaW50ZXJmYWNlIENvbnRlbnRzIHtcbiAgICBzdHJpbmdWYWx1ZTogc3RyaW5nO1xuICAgIGJvcmRlcjogQm9yZGVyO1xuICAgIGxhbmd1YWdlOiBzdHJpbmc7XG4gICAgbGFuZ3VhZ2VMaXN0PzogTGFuZ3VhZ2VMaXN0W107XG4gICAgdmVydGV4ZXM/OiBWZXJ0ZXhlc1tdO1xufVxuZXhwb3J0IGludGVyZmFjZSBMYW5ndWFnZUxpc3Qge1xuICAgIGxhbmd1YWdlOiBzdHJpbmc7XG59XG5leHBvcnQgaW50ZXJmYWNlIFZlcnRleGVzIHtcbiAgICB4OiBudW1iZXI7XG4gICAgeTogbnVtYmVyO1xuICAgIGRlc2NyaWJlQ29udGVudHM6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNTEZvcm1SZWNvZ2l0aW9uUmVzdWx0IHtcbiAgICByZXRDb2RlOiBudW1iZXI7XG4gICAgdGFibGVDb250ZW50OiBUYWJsZUNvbnRlbnQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGFibGVDb250ZW50IHtcbiAgICB0YWJsZUNvdW50OiBudW1iZXI7XG4gICAgdGFibGVzPzogVGFibGVzRW50aXR5W10gfCBudWxsO1xufVxuZXhwb3J0IGludGVyZmFjZSBUYWJsZXNFbnRpdHkge1xuICAgIHRhYmxlSUQ6IG51bWJlcjtcbiAgICBoZWFkZXJJbmZvOiBzdHJpbmc7XG4gICAgZm9vdGVySW5mbzogc3RyaW5nO1xuICAgIHRhYmxlQm9keT86IFRhYmxlQm9keUVudGl0eVtdIHwgbnVsbDtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgVGFibGVCb2R5RW50aXR5IHtcbiAgICBzdGFydFJvdzogbnVtYmVyO1xuICAgIGVuZFJvdzogbnVtYmVyO1xuICAgIHN0YXJ0Q29sOiBudW1iZXI7XG4gICAgZW5kQ29sOiBudW1iZXI7XG4gICAgY2VsbENvb3JkaW5hdGU6IENlbGxDb29yZGluYXRlO1xuICAgIHRleHRJbmZvOiBzdHJpbmc7XG59XG5leHBvcnQgaW50ZXJmYWNlIENlbGxDb29yZGluYXRlIHtcbiAgICB0b3BMZWZ0X3g6IG51bWJlcjtcbiAgICB0b3BMZWZ0X3k6IG51bWJlcjtcbiAgICB0b3BSaWdodF94OiBudW1iZXI7XG4gICAgdG9wUmlnaHRfeTogbnVtYmVyO1xuICAgIGJvdHRvbUxlZnRfeDogbnVtYmVyO1xuICAgIGJvdHRvbUxlZnRfeTogbnVtYmVyO1xuICAgIGJvdHRvbVJpZ2h0X3g6IG51bWJlcjtcbiAgICBib3R0b21SaWdodF95OiBudW1iZXI7XG59XG5cbmV4cG9ydCBlbnVtIENvbG9ycyB7XG4gICAgUkVEID0gLTY1NTM2LFxuICAgIERLR1JBWSA9IC0xMjMwMzI5MixcbiAgICBHUkFZID0gLTc4MjkzNjgsXG4gICAgV0hJVEUgPSAtMSxcbiAgICBCTFVFID0gLTE2Nzc2OTYxLFxuICAgIEJMQUNLID0gLTE2Nzc3MjE2LFxuICAgIExUR1JBWSA9IC0zMzU1NDQ0LFxuICAgIE1BR0VOVEEgPSAtNjUyODEsXG4gICAgWUVMTE9XID0gLTI1NixcbiAgICBDWUFOID0gLTE2NzExNjgxLFxuICAgIEdSRUVOID0gLTE2NzExOTM2LFxuICAgIFRSQU5TUEFSRU5UID0gMCxcbn1cblxuZXhwb3J0IGVudW0gQ29yZG92YUVycm9ycyB7XG4gICAgVU5LTk9XTiA9IC0xLFxuICAgIFNVQ0NFU1MgPSAwLFxuICAgIERJU0NBUkRFRCA9IDEsXG4gICAgSU5ORVIgPSAyLFxuICAgIElOQUNUSVZFID0gMyxcbiAgICBOT1RfU1VQUE9SVEVEID0gNCxcbiAgICBJTExFR0FMX1BBUkFNRVRFUiA9IDUsXG4gICAgT1ZFUkRVRSA9IDYsXG4gICAgTk9fRk9VTkQgPSA3LFxuICAgIERVUExJQ0FURV9GT1VORCA9IDgsXG4gICAgTk9fUEVSTUlTU0lPTiA9IDksXG4gICAgSU5TVUZGSUNJRU5UX1JFU09VUkNFID0gMTAsXG4gICAgQU5BTFlTSVNfRkFJTFVSRSA9IDExLFxuICAgIElOVEVSUlVQVEVEID0gMTIsXG4gICAgRVhDRUVEX1JBTkdFID0gMTMsXG4gICAgREFUQV9NSVNTSU5HID0gMTQsXG4gICAgQVVUSEVOVElDQVRJT05fUkVRVUlSRUQgPSAxNSxcbiAgICBURkxJVEVfTk9UX0NPTVBBVElCTEUgPSAxNixcbiAgICBJTlNVRkZJQ0lFTlRfU1BBQ0UgPSAxNyxcbiAgICBIQVNIX01JU1MgPSAxOCxcbiAgICBUT0tFTl9JTlZBTElEID0gMTksXG4gICAgU0VSVklDRV9GQUlMVVJFID0gMjAsXG4gICAgQU5BTFlTSVNfTlVMTCA9IDIxLFxufVxuXG5cbmV4cG9ydCBlbnVtIFJlZ2lvbiB7XG5SRUdJT05fRFJfVU5LTk9XTiA9IDEwMDEsXG5SRUdJT05fRFJfQ0hJTkEgPSAxMDAyLFxuUkVHSU9OX0RSX1JVU1NJQSA9IDEwMDUsXG5SRUdJT05fRFJfR0VSTUFOID0gMTAwNixcblJFR0lPTl9EUl9TSU5HQVBPUkUgPSAxMDA3XG59XG4iXX0=
\ No newline at end of file
diff --git a/cordova-plugin-hms-mltext/ionic-native/dist/ngx/index.metadata.json b/cordova-plugin-hms-mltext/ionic-native/dist/ngx/index.metadata.json
new file mode 100644
index 00000000..83cab6ef
--- /dev/null
+++ b/cordova-plugin-hms-mltext/ionic-native/dist/ngx/index.metadata.json
@@ -0,0 +1 @@
+[{"__symbolic":"module","version":4,"metadata":{"HMSMLTextPlugin":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"@ionic-native/core","name":"IonicNativePlugin","line":31,"character":37},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","name":"Plugin"},"arguments":[{"pluginName":"HMSMLTextPlugin","plugin":"cordova-plugin-hms-mltext","pluginRef":"HMSMLTextPlugin","platforms":["Android"]}]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":30,"character":1}}],"members":{"MLLocalTextSetting":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","name":"CordovaProperty"}}]}],"icrVnCaptureType":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","name":"CordovaProperty"}}]}],"MLTextConfig":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","name":"CordovaProperty"}}]}],"MLRemoteTextSetting":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","name":"CordovaProperty"}}]}],"MLBcrCaptureConfig":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","name":"CordovaProperty"}}]}],"MLGcrCaptureUIConfig":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","name":"CordovaProperty"}}]}],"MLBcrResultConfig":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","name":"CordovaProperty"}}]}],"ImgSuperResolutionConfig":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","name":"CordovaProperty"}}]}],"MLFormRecogitionConfig":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","name":"CordovaProperty"}}]}],"MLProductConfig":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","name":"CordovaProperty"}}]}],"gcrCaptureType":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","name":"CordovaProperty"}}]}],"Colors":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","name":"CordovaProperty"}}]}],"photograph":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","name":"Cordova"},"arguments":[{"otherPromise":true}]}]}],"destroy":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","name":"Cordova"},"arguments":[{"otherPromise":true}]}]}],"getDisplayDimension":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","name":"Cordova"},"arguments":[{"otherPromise":true}]}]}],"appSetting":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","name":"Cordova"},"arguments":[{"otherPromise":true}]}]}],"setStatistic":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","name":"Cordova"},"arguments":[{"otherPromise":true}]}]}],"getStatistic":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","name":"Cordova"},"arguments":[{"otherPromise":true}]}]}],"enableLogger":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","name":"Cordova"},"arguments":[{"otherPromise":true}]}]}],"disableLogger":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","name":"Cordova"},"arguments":[{"otherPromise":true}]}]}]}},"HMSMLText":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"@ionic-native/core","name":"IonicNativePlugin","line":132,"character":31},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","name":"Plugin"},"arguments":[{"pluginName":"HMSMLText","plugin":"cordova-plugin-hms-mltext","pluginRef":"HMSMLText","platforms":["Android"]}]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":131,"character":1}}],"members":{"icrVnCaptureType":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","name":"CordovaProperty"}}]}],"gcrCaptureType":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","name":"CordovaProperty"}}]}],"MLLocalTextSetting":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","name":"CordovaProperty"}}]}],"MLTextConfig":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","name":"CordovaProperty"}}]}],"MLRemoteTextSetting":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","name":"CordovaProperty"}}]}],"MLBcrCaptureConfig":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","name":"CordovaProperty"}}]}],"MLGcrCaptureUIConfig":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","name":"CordovaProperty"}}]}],"MLBcrResultConfig":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","name":"CordovaProperty"}}]}],"ImgSuperResolutionConfig":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","name":"CordovaProperty"}}]}],"MLFormRecogitionConfig":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","name":"CordovaProperty"}}]}],"MLProductConfig":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","name":"CordovaProperty"}}]}],"Colors":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","name":"CordovaProperty"}}]}],"RecMode":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","name":"CordovaProperty"}}]}],"imageTextAnalyser":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","name":"Cordova"},"arguments":[{"otherPromise":true}]}]}],"stopTextAnalyser":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","name":"Cordova"},"arguments":[{"otherPromise":true}]}]}],"getTextAnalyserInfo":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","name":"Cordova"},"arguments":[{"otherPromise":true}]}]}],"documentImageAnalyser":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","name":"Cordova"},"arguments":[{"otherPromise":true}]}]}],"stopDocumentImageAnalyser":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","name":"Cordova"},"arguments":[{"otherPromise":true}]}]}],"closeDocumentImageAnalyser":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","name":"Cordova"},"arguments":[{"otherPromise":true}]}]}],"getDocumentImageAnalyserSetting":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","name":"Cordova"},"arguments":[{"otherPromise":true}]}]}],"getTextAnalyserSetting":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","name":"Cordova"},"arguments":[{"otherPromise":true}]}]}],"getGCRSetting":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","name":"Cordova"},"arguments":[{"otherPromise":true}]}]}],"stopFormRecognitionAnalyser":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","name":"Cordova"},"arguments":[{"otherPromise":true}]}]}],"bankCardDetector":[{"__symbolic":"method"}],"stopBankCardDetector":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","name":"Cordova"},"arguments":[{"otherPromise":true}]}]}],"setResultTypeBcr":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","name":"Cordova"},"arguments":[{"otherPromise":true}]}]}],"setRecModeBcr":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","name":"Cordova"},"arguments":[{"otherPromise":true}]}]}],"getBankCardDetectorSetting":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","name":"Cordova"},"arguments":[{"otherPromise":true}]}]}],"generalCardDetector":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","name":"Cordova"},"arguments":[{"otherPromise":true}]}]}],"icrVnCardDetector":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","name":"Cordova"},"arguments":[{"otherPromise":true}]}]}],"formRecognitionAnalyser":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","name":"Cordova"},"arguments":[{"otherPromise":true}]}]}],"icrLocalAnalyser":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","name":"Cordova"},"arguments":[{"otherPromise":true}]}]}],"icrLocalAnalyserCreateIdCard":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","name":"Cordova"},"arguments":[{"otherPromise":true}]}]}],"icrLocalAnalyserStop":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","name":"Cordova"},"arguments":[{"otherPromise":true}]}]}],"geticrCnCardInstance":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","name":"Cordova"},"arguments":[{"otherPromise":true}]}]}],"icrCnCardCreate":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","name":"Cordova"},"arguments":[{"otherPromise":true}]}]}],"geticrVnCardInstance":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","name":"Cordova"},"arguments":[{"otherPromise":true}]}]}],"icrVnCardCreate":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","name":"Cordova"},"arguments":[{"otherPromise":true}]}]}],"getIcrVnCapture":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","name":"Cordova"},"arguments":[{"otherPromise":true}]}]}],"startCustomizedView":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","name":"Cordova"},"arguments":[{"otherPromise":true}]}]}],"switchLight":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","name":"Cordova"},"arguments":[{"otherPromise":true}]}]}],"getLightStatus":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","name":"Cordova"},"arguments":[{"otherPromise":true}]}]}],"setUserRegion":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","name":"Cordova"},"arguments":[{"otherPromise":true}]}]}],"getCountryCode":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","name":"Cordova"},"arguments":[{"otherPromise":true}]}]}]}},"CustomViewModeRequest":{"__symbolic":"interface"},"configReq":{"__symbolic":"interface"},"appSettingReq":{"__symbolic":"interface"},"bankCardSDKDetectorReq":{"__symbolic":"interface"},"MLBcrAnalyzerSetting":{"__symbolic":"interface"},"bankCardPluginDetectorReq":{"__symbolic":"interface"},"mLBcrCaptureConfig":{"__symbolic":"interface"},"RecMode":{"WEAK_MODE":0,"STRICT_MODE":1},"MLBcrCaptureConfig":{"ERROR_CODE_INIT_CAMERA_FAILED":10101,"RESULT_NUM_ONLY":0,"ORIENTATION_AUTO":0,"WEAK_MODE":0,"ORIENTATION_LANDSCAPE":1,"ORIENTATION_PORTRAIT":2,"RESULT_ALL":2,"RESULT_SIMPLE":1,"STRICT_MODE":1},"MLBcrResultConfig":{"RESULT_NUM_ONLY":0,"RESULT_SIMPLE":1,"RESULT_ALL":2},"MLBcrCaptureResult":{"__symbolic":"interface"},"MLBcrCaptureErrorCode":{"ERROR_CODE_INIT_CAMERA_FAILED":10101},"documentImageAnalyserReq":{"__symbolic":"interface"},"DocumentSetting":{"__symbolic":"interface"},"MLRemoteTextSetting":{"OCR_LOOSE_SCENE":1,"OCR_COMPACT_SCENE":2,"NGON":"NGON","ARC":"ARC","OTHER":5,"NEW_LINE_CHARACTER":8,"SPACE":6},"formRecognizerAnalyserReq":{"__symbolic":"interface"},"MLFormRecogitionConfig":{"SYNC_TYPE":1,"ASYNC_TYPE":0},"generalCardDetectorReq":{"__symbolic":"interface"},"gcrCaptureConfig":{"__symbolic":"interface"},"gcrCaptureType":{"CAPTURE_ACTIVITY":0,"CAPTURE_PHOTO":1,"CAPTURE_IMAGE":2},"gcrCaptureUIConfig":{"__symbolic":"interface"},"gcrSettingResults":{"__symbolic":"interface"},"MLGcrCaptureUIConfig":{"ORIENTATION_AUTO":0,"ORIENTATION_LANDSCAPE":1,"ORIENTATION_PORTRAIT":2},"icrVnDetectorReq":{"__symbolic":"interface"},"icrCnDetectorReq":{"__symbolic":"interface"},"icrCaptureType":{"CAPTURE_CAMERA":0,"CAPTURE_IMAGE":1},"createIdCardReq":{"__symbolic":"interface"},"localAnalyserReq":{"__symbolic":"interface"},"MLIcrAnalyzerSetting":{"__symbolic":"interface"},"MLIcrSideType":{"FRONT":"FRONT","BACK":"BACK"},"imageSuperResolutionReq":{"__symbolic":"interface"},"ImgSuperResolutionSetting":{"__symbolic":"interface"},"ImgSuperResolutionConfig":{"ISR_SCALE_1X":1,"ISR_SCALE_3X":3},"productReq":{"__symbolic":"interface"},"mlProductSetting":{"__symbolic":"interface"},"MLProductConfig":{"REGION_DR_CHINA":1002,"REGION_DR_AFILA":1003,"REGION_DR_EUROPE":1004,"REGION_DR_RUSSIA":1005,"REGION_DR_GERMAN":1006,"REGION_DR_SIANGAPORE":1007},"localImageTextReq":{"__symbolic":"interface"},"localTextSetting":{"__symbolic":"interface"},"MLLocalTextSetting":{"OCR_DETECT_MODE":1,"OCR_TRACKING_MODE":2},"MLTextConfig":{"OCR_LOCAL_TYPE":0,"OCR_REMOTE_TYPE":1},"remoteImageTextReq":{"__symbolic":"interface"},"remoteTextSetting":{"__symbolic":"interface"},"MLBankCard":{"__symbolic":"interface"},"Border":{"__symbolic":"interface"},"MLDocument":{"__symbolic":"interface"},"LanguageList":{"__symbolic":"interface"},"MLVnIcrCaptureResult":{"__symbolic":"interface"},"MLCnIcrCaptureResult":{"__symbolic":"interface"},"MLIcrCaptureResult":{"__symbolic":"interface"},"MLGcrCaptureResult":{"__symbolic":"interface"},"Rect":{"__symbolic":"interface"},"Bitmap":{"__symbolic":"interface"},"MLText":{"__symbolic":"interface"},"Blocks":{"__symbolic":"interface"},"Contents":{"__symbolic":"interface"},"Vertexes":{"__symbolic":"interface"},"MLFormRecogitionResult":{"__symbolic":"interface"},"TableContent":{"__symbolic":"interface"},"TablesEntity":{"__symbolic":"interface"},"TableBodyEntity":{"__symbolic":"interface"},"CellCoordinate":{"__symbolic":"interface"},"Colors":{"RED":-65536,"DKGRAY":-12303292,"GRAY":-7829368,"WHITE":-1,"BLUE":-16776961,"BLACK":-16777216,"LTGRAY":-3355444,"MAGENTA":-65281,"YELLOW":-256,"CYAN":-16711681,"GREEN":-16711936,"TRANSPARENT":0},"CordovaErrors":{"UNKNOWN":-1,"SUCCESS":0,"DISCARDED":1,"INNER":2,"INACTIVE":3,"NOT_SUPPORTED":4,"ILLEGAL_PARAMETER":5,"OVERDUE":6,"NO_FOUND":7,"DUPLICATE_FOUND":8,"NO_PERMISSION":9,"INSUFFICIENT_RESOURCE":10,"ANALYSIS_FAILURE":11,"INTERRUPTED":12,"EXCEED_RANGE":13,"DATA_MISSING":14,"AUTHENTICATION_REQUIRED":15,"TFLITE_NOT_COMPATIBLE":16,"INSUFFICIENT_SPACE":17,"HASH_MISS":18,"TOKEN_INVALID":19,"SERVICE_FAILURE":20,"ANALYSIS_NULL":21},"Region":{"REGION_DR_UNKNOWN":1001,"REGION_DR_CHINA":1002,"REGION_DR_RUSSIA":1005,"REGION_DR_GERMAN":1006,"REGION_DR_SINGAPORE":1007}}}]
diff --git a/cordova-plugin-hms-mltext/ionic-native/dist/ngx/package.json b/cordova-plugin-hms-mltext/ionic-native/dist/ngx/package.json
new file mode 100644
index 00000000..a6b630d1
--- /dev/null
+++ b/cordova-plugin-hms-mltext/ionic-native/dist/ngx/package.json
@@ -0,0 +1,24 @@
+{
+ "name": "@hmscore/ionic-native-hms-mltext",
+ "description": "Ionic Native wrappers for Cordova Plugin HMS ML Text",
+ "version": "3.12.0-300",
+ "zipVersion": "3.12.0.300",
+ "module": "index.js",
+ "typings": "index.d.ts",
+ "license": "Apache-2.0",
+ "licenseFilename": "LICENSE",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/HMS-Core/hms-cordova-plugin.git",
+ "directory": "cordova-plugin-hms-mltext"
+ },
+ "bugs": "https://github.com/HMS-Core/hms-cordova-plugin/issues",
+ "homepage": "https://developer.huawei.com/consumer/en/doc/overview/HMS-Core-Plugin",
+ "dependencies": {
+ "@types/cordova": "latest"
+ },
+ "peerDependencies": {
+ "rxjs": "^5.5.0 || ^6.5.0",
+ "@ionic-native/core": "^5.1.0"
+ }
+}
diff --git a/cordova-plugin-hms-mltext/ionic-native/dist/package.json b/cordova-plugin-hms-mltext/ionic-native/dist/package.json
new file mode 100644
index 00000000..a6b630d1
--- /dev/null
+++ b/cordova-plugin-hms-mltext/ionic-native/dist/package.json
@@ -0,0 +1,24 @@
+{
+ "name": "@hmscore/ionic-native-hms-mltext",
+ "description": "Ionic Native wrappers for Cordova Plugin HMS ML Text",
+ "version": "3.12.0-300",
+ "zipVersion": "3.12.0.300",
+ "module": "index.js",
+ "typings": "index.d.ts",
+ "license": "Apache-2.0",
+ "licenseFilename": "LICENSE",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/HMS-Core/hms-cordova-plugin.git",
+ "directory": "cordova-plugin-hms-mltext"
+ },
+ "bugs": "https://github.com/HMS-Core/hms-cordova-plugin/issues",
+ "homepage": "https://developer.huawei.com/consumer/en/doc/overview/HMS-Core-Plugin",
+ "dependencies": {
+ "@types/cordova": "latest"
+ },
+ "peerDependencies": {
+ "rxjs": "^5.5.0 || ^6.5.0",
+ "@ionic-native/core": "^5.1.0"
+ }
+}
diff --git a/cordova-plugin-hms-mltext/ionic-native/index.ts b/cordova-plugin-hms-mltext/ionic-native/index.ts
new file mode 100644
index 00000000..d786572d
--- /dev/null
+++ b/cordova-plugin-hms-mltext/ionic-native/index.ts
@@ -0,0 +1,851 @@
+/*
+ Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License")
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+import { Injectable } from "@angular/core";
+import {
+ Plugin,
+ Cordova,
+ CordovaProperty,
+ IonicNativePlugin,
+} from "@ionic-native/core";
+
+@Plugin({
+ pluginName: "HMSMLTextPlugin",
+ plugin: "cordova-plugin-hms-mltext", // npm package name, example: cordova-plugin-camera
+ pluginRef: "HMSMLTextPlugin", // the variable reference to call the plugin, example: navigator.geolocation
+ platforms: ["Android"], // Array of platforms supported, example: ['Android', 'iOS']
+})
+@Injectable()
+export class HMSMLTextPlugin extends IonicNativePlugin {
+ @CordovaProperty()
+ MLLocalTextSetting = MLLocalTextSetting;
+ @CordovaProperty()
+ icrVnCaptureType = icrCaptureType;
+ @CordovaProperty()
+ MLTextConfig = MLTextConfig;
+ @CordovaProperty()
+ MLRemoteTextSetting = MLRemoteTextSetting;
+ @CordovaProperty()
+ MLBcrCaptureConfig = MLBcrCaptureConfig;
+ @CordovaProperty()
+ MLGcrCaptureUIConfig = MLGcrCaptureUIConfig;
+ @CordovaProperty()
+ MLBcrResultConfig = MLBcrResultConfig;
+ @CordovaProperty()
+ ImgSuperResolutionConfig = ImgSuperResolutionConfig;
+ @CordovaProperty()
+ MLFormRecogitionConfig = MLFormRecogitionConfig;
+ @CordovaProperty()
+ MLProductConfig = MLProductConfig;
+ @CordovaProperty()
+ gcrCaptureType = gcrCaptureType;
+ @CordovaProperty()
+ Colors = Colors;
+
+ @Cordova({ otherPromise: true })
+ /**
+ * Monitors photographing.
+ * @returns Promise
+ */
+ photograph(): Promise {
+ return;
+ }
+ @Cordova({ otherPromise: true })
+ /**
+ * Close lens engine.
+ * @returns Promise
+ */
+ destroy(): Promise {
+ return;
+ }
+ @Cordova({ otherPromise: true })
+ /**
+ * Obtains the size of the preview image of a camera.
+ * @returns Promise
+ */
+ getDisplayDimension(): Promise {
+ return;
+ }
+ @Cordova({ otherPromise: true })
+ /**
+ * An app information class used to store basic information about apps with the HMS Core ML SDK integrated and complete the initialization of ML Text Kit. When using cloud services of the ML Text Kit, you need to set the apiKey of your app.
+ * @param {appSettingReq} appSettingReq Represents the parameter required.
+ * @returns Promise
+ */
+ appSetting(appSettingReq: appSettingReq): Promise {
+ return;
+ }
+ @Cordova({ otherPromise: true })
+ /**
+ * Determines whether to collect statistics on the current app.
+ * @param {any} any
+ * @returns Promise
+ */
+ setStatistic(any: any): Promise {
+ return;
+ }
+ @Cordova({ otherPromise: true })
+ /**
+ * Determines whether to collect statistics on the current app.
+ ** @param {any} any
+ * @returns Promise
+ */
+ getStatistic(any: any): Promise {
+ return;
+ }
+ @Cordova({ otherPromise: true })
+ /**
+ * This service enable logger service.
+ * @returns Promise
+ */
+ enableLogger(): Promise {
+ return;
+ }
+ @Cordova({ otherPromise: true })
+ /**
+ * This service disable logger service.
+ * @returns Promise
+ */
+ disableLogger(): Promise {
+ return;
+ }
+}
+@Plugin({
+ pluginName: "HMSMLText",
+ plugin: "cordova-plugin-hms-mltext", // npm package name, example: cordova-plugin-camera
+ pluginRef: "HMSMLText", // the variable reference to call the plugin, example: navigator.geolocation
+ platforms: ["Android"], // Array of platforms supported, example: ['Android', 'iOS']
+})
+@Injectable()
+export class HMSMLText extends IonicNativePlugin {
+ @CordovaProperty()
+ icrVnCaptureType = icrCaptureType;
+ @CordovaProperty()
+ gcrCaptureType = gcrCaptureType;
+ @CordovaProperty()
+ MLLocalTextSetting = MLLocalTextSetting;
+ @CordovaProperty()
+ MLTextConfig = MLTextConfig;
+ @CordovaProperty()
+ MLRemoteTextSetting = MLRemoteTextSetting;
+ @CordovaProperty()
+ MLBcrCaptureConfig = MLBcrCaptureConfig;
+ @CordovaProperty()
+ MLGcrCaptureUIConfig = MLGcrCaptureUIConfig;
+ @CordovaProperty()
+ MLBcrResultConfig = MLBcrResultConfig;
+ @CordovaProperty()
+ ImgSuperResolutionConfig = ImgSuperResolutionConfig;
+ @CordovaProperty()
+ MLFormRecogitionConfig = MLFormRecogitionConfig;
+ @CordovaProperty()
+ MLProductConfig = MLProductConfig;
+ @CordovaProperty()
+ Colors = Colors;
+ @CordovaProperty()
+ RecMode = RecMode;
+
+ @Cordova({ otherPromise: true })
+ /**
+ * This method start the Text analyzer.
+ * @param {localImageTextReq|remoteImageTextReq} ImageTextAnalyserInput Reperesents the necessary parameters to convert images to text format.
+ * @returns Promise
+ */
+ imageTextAnalyser(
+ ImageTextAnalyserInput: localImageTextReq | remoteImageTextReq
+ ): Promise {
+ return;
+ }
+ @Cordova({ otherPromise: true })
+ /**
+ * This method stop the Text analyzer.
+ * @returns Promise
+ */
+ stopTextAnalyser(): Promise {
+ return;
+ }
+ @Cordova({ otherPromise: true })
+ /**
+ * This method gives Text Analyser information.
+ * @returns Promise
+ */
+ getTextAnalyserInfo(): Promise {
+ return;
+ }
+ @Cordova({ otherPromise: true })
+ /**
+ * This method provides a document recognition component that recognizes text from images of documents.
+ * @param {documentImageAnalyserReq} documentImageAnalyserReq Reperesents the necessary parameter to convert document images to text format.
+ * @returns Promise
+ */
+ documentImageAnalyser(
+ documentImageAnalyserReq: documentImageAnalyserReq
+ ): Promise {
+ return;
+ }
+ @Cordova({ otherPromise: true })
+ /**
+ * This method stop the Document analyzer.
+ * @returns Promise
+ */
+ stopDocumentImageAnalyser(): Promise {
+ return;
+ }
+ @Cordova({ otherPromise: true })
+ /**
+ * This method close the Document analyzer.
+ * @returns Promise
+ */
+ closeDocumentImageAnalyser(): Promise {
+ return;
+ }
+ @Cordova({ otherPromise: true })
+ /**
+ * This method returns the Document analyzer setting.
+ * @returns Promise
+ */
+ getDocumentImageAnalyserSetting(): Promise {
+ return;
+ }
+ @Cordova({ otherPromise: true })
+ /**
+ * This method returns the Image analyzer setting.
+ * @returns Promise
+ */
+ getTextAnalyserSetting(): Promise {
+ return;
+ }
+ @Cordova({ otherPromise: true })
+ /**
+ * This method returns the GCR setting.
+ * @returns Promise
+ */
+ getGCRSetting(): Promise {
+ return;
+ }
+ @Cordova({ otherPromise: true })
+ /**
+ * This method stop the Form Recognition Analyzer.
+ * @returns Promise